#include <bits/stdc++.h>
const double eps = (1e-9);
using namespace std;
int dcmp(long double a, long double b) {
  return fabsl(a - b) <= eps ? 0 : (a > b) ? 1 : -1;
}
int getBit(int num, int idx) { return ((num >> idx) & 1) == 1; }
int setBit1(int num, int idx) { return num | (1 << idx); }
long long setBit0(long long num, int idx) { return num & ~(1ll << idx); }
long long flipBit(int num, int idx) { return num ^ (1 << idx); }
void FS() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
int countNumBit1(int mask) {
  int ret = 0;
  while (mask) {
    mask &= (mask - 1);
    ++ret;
  }
  return ret;
}
const int N = 10001;
int mb[N], fl[N];
string v[3], res[3];
char ans[N];
int main() {
  string st;
  cin >> st;
  int n = ((int)(st).size()), id = 0;
  for (int i = 0; i < 26 && ((int)(v[0]).size()) < n; i++) {
    for (int j = 0; j < 26 && ((int)(v[0]).size()) < n; j++) {
      for (int k = 0; k < 26 && ((int)(v[0]).size()) < n; k++) {
        v[0] += (i + 'a');
        v[1] += (j + 'a');
        v[2] += (k + 'a');
      }
    }
  }
  cout.flush();
  for (int i = 0; i < 3; i++) {
    cout << "? " << v[i] << endl;
    cin >> res[i];
  }
  for (int i = 0, f = 1; i < n; i++, f++) {
    for (int j = 0; j < n; j++) {
      if (v[0][i] == res[0][j]) fl[j]++;
      if (v[1][i] == res[1][j]) fl[j]++;
      if (v[2][i] == res[2][j]) fl[j]++;
    }
    for (int j = 0; j < n; j++)
      if (fl[j] == 3) mb[j] = i;
    for (int j = 0; j < n; j++) {
      fl[j] = 0;
    }
  }
  for (int i = 0; i < n; i++) {
    ans[mb[i]] = st[i];
  }
  cout << "! ";
  for (int i = 0; i < n; i++) cout << ans[i];
  cout << endl;
}
