#include <bits/stdc++.h>
template <typename T>
inline void read(T &x) {
  x = 0;
  char c = getchar();
  bool flag = false;
  while (!isdigit(c)) {
    if (c == '-') flag = true;
    c = getchar();
  }
  while (isdigit(c)) x = x * 10 + (c ^ 48), c = getchar();
  if (flag) x = -x;
}
using namespace std;
char s[10100], A[10100], B[10100], C[10100], ss[10100];
int n;
int main() {
  scanf("%s", s);
  n = strlen(s);
  putchar('?');
  putchar(' ');
  for (int i = 0; i < n; ++i) {
    char c = 'a' + i / 26 / 26;
    putchar(c);
  }
  puts("");
  fflush(stdout);
  scanf("%s", A);
  putchar('?');
  putchar(' ');
  for (int i = 0; i < n; ++i) {
    char c = 'a' + (i / 26) % 26;
    putchar(c);
  }
  puts("");
  fflush(stdout);
  scanf("%s", B);
  putchar('?');
  putchar(' ');
  for (int i = 0; i < n; ++i) {
    char c = 'a' + i % 26;
    putchar(c);
  }
  puts("");
  fflush(stdout);
  scanf("%s", C);
  for (int i = 0; i < n; ++i) {
    int p_1 = A[i] - 'a', p_2 = B[i] - 'a', p_3 = C[i] - 'a';
    ss[p_1 * 26 * 26 + p_2 * 26 + p_3] = s[i];
  }
  putchar('!');
  putchar(' ');
  for (int i = 0; i < n; ++i) putchar(ss[i]);
  puts("");
  return 0;
}
