#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const long long linf = 0x3f3f3f3f3f3f3f;
const double eps = 1e-6;
const double pi = 3.14159265358979;
const int maxn = 1e5 + 5;
const int maxm = 2e7 + 5;
const int mod = 1e9 + 7;
int n, rev[maxn], t[maxn];
char s[maxn], tmp[4][maxn];
int mul_inv(int a, int b) {
  int b0 = b, t, q;
  int x0 = 0, x1 = 1;
  if (b == 1) return 1;
  while (a > 1) {
    q = a / b;
    t = b;
    b = a % b;
    a = t;
    t = x0;
    x0 = x1 - q * x0;
    x1 = t;
  }
  if (x1 < 0) x1 += b0;
  return x1;
}
int chinese_remainder(vector<int> a, vector<int> b, int n) {
  int p, prod = 1, sum = 0;
  for (int i = 0; i < n; ++i) prod *= b[i];
  for (int i = 0; i < n; ++i) {
    p = prod / b[i];
    sum += a[i] * mul_inv(p, b[i]) * p;
  }
  return sum % prod;
}
int main() {
  scanf("%s", s);
  int n = strlen(s);
  for (int m = 26, j = 0; m >= 23; --m, j = 0) {
    if (m == 24) continue;
    for (int i = 0; i < n; ++i) {
      tmp[26 - m][i] = (char)('a' + j);
      ++j;
      j %= m;
    }
  }
  for (int i = 0; i <= 3; ++i) {
    if (i == 2) continue;
    printf("? %s\n", tmp[i]);
    fflush(stdout);
    scanf("%s", tmp[i]);
  }
  for (int i = 0; i < n; ++i)
    t[i] = chinese_remainder(
        vector<int>{tmp[0][i] - 'a', tmp[1][i] - 'a', tmp[3][i] - 'a'},
        vector<int>{26, 25, 23}, 3);
  for (int i = 0; i < n; ++i) rev[t[i]] = i;
  printf("! ");
  for (int i = 0; i < n; ++i) printf("%c", s[rev[i]]);
  return 0;
}
