#include <bits/stdc++.h>
using namespace std;
int n, m, u[100005], git[100005], gg[100005];
char s[100005], ys[100005], x[4][100005], t[4][100005];
vector<int> g[3][30];
void cevir(int d) {
  for (int i = 1; i <= n; i++) t[d][gg[i]] = x[d][i];
}
int main() {
  scanf("%s", s + 1);
  n = strlen(s + 1);
  for (int i = 'a'; i <= 'z'; i++)
    for (int j = 'a'; j <= 'z'; j++)
      for (int k = 'a'; k <= 'z'; k++) {
        if (m == n) break;
        x[1][++m] = i;
        x[2][m] = j;
        x[3][m] = k;
      }
  printf("? %s", x[1] + 1);
  cout << endl;
  scanf("%s", t[1] + 1);
  for (int i = 1; i <= n; i++) g[0][t[1][i] - 'a'].push_back(i);
  printf("? %s", x[2] + 1);
  cout << endl;
  scanf("%s", t[2] + 1);
  for (int i = 1; i <= n; i++) g[1][t[2][i] - 'a'].push_back(i);
  printf("? %s", x[3] + 1);
  cout << endl;
  scanf("%s", t[3] + 1);
  for (int i = 1; i <= n; i++) g[2][t[3][i] - 'a'].push_back(i);
  for (int i = 1; i <= n; i++) {
    int ans = -1;
    for (int j = 0; j < g[0][x[1][i] - 'a'].size(); j++)
      u[g[0][x[1][i] - 'a'][j]]++;
    for (int j = 0; j < g[1][x[2][i] - 'a'].size(); j++)
      u[g[1][x[2][i] - 'a'][j]]++;
    for (int j = 0; j < g[2][x[3][i] - 'a'].size(); j++) {
      u[g[2][x[3][i] - 'a'][j]]++;
      if (u[g[2][x[3][i] - 'a'][j]] == 3) {
        if (ans != -1) assert(0);
        ans = g[2][x[3][i] - 'a'][j];
      }
    }
    git[ans] = i;
    for (int j = 0; j < g[0][x[1][i] - 'a'].size(); j++)
      u[g[0][x[1][i] - 'a'][j]]--;
    for (int j = 0; j < g[1][x[2][i] - 'a'].size(); j++)
      u[g[1][x[2][i] - 'a'][j]]--;
    for (int j = 0; j < g[2][x[3][i] - 'a'].size(); j++)
      u[g[2][x[3][i] - 'a'][j]]--;
  }
  for (int i = 1; i <= n; i++) ys[git[i]] = s[i];
  printf("! %s\n", ys + 1);
  cout << endl;
  return 0;
}
