#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 10;
;
const int mod = 1e9 + 7;
map<int, int> mp1, mp2;
char s[3][maxn], t[3][maxn], T[maxn], S[maxn];
int q[maxn], a[maxn], b[maxn];
int main() {
  scanf("%s", T);
  int n = strlen(T);
  for (int i = 0; i < n; i++) {
    s[0][i] = (i % 26) + 'a';
  }
  s[0][n] = '\0';
  printf("? %s\n", s[0]);
  fflush(stdout);
  scanf("%s", t[0]);
  for (int i = 0; i < n; i++) {
    s[1][i] = (i / 26 % 26) + 'a';
  }
  printf("? %s\n", s[1]);
  fflush(stdout);
  scanf("%s", t[1]);
  for (int i = 0; i < n; i++) {
    s[2][i] = (i / 26 / 26 % 26) + 'a';
  }
  printf("? %s\n", s[2]);
  fflush(stdout);
  scanf("%s", t[2]);
  for (int i = 0; i < n; i++) {
    int temp =
        (s[0][i] - 'a') + (s[1][i] - 'a') * 26 + (s[2][i] - 'a') * 26 * 26;
    mp1[temp] = i;
    q[i] = temp;
    mp2[(t[0][i] - 'a') + (t[1][i] - 'a') * 26 + (t[2][i] - 'a') * 26 * 26] = i;
  }
  for (int i = 0; i < n; i++) {
    b[i] = mp2[q[i]];
  }
  for (int i = 0; i < n; i++) {
    S[i] = T[b[i]];
  }
  S[n] = '\0';
  printf("! %s\n", S);
  fflush(stdout);
  return 0;
}
