#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 15, M = 6e5 + 15, OO = 1e6 + 3;
int n, t, ss;
string in, in2, in3;
int cnt[27];
list<int> adj[N];
list<int>::iterator it;
int nums[N];
int MOD(int a, int b) {
  a %= b;
  if (a < 0) a += b;
  return a;
}
int main() {
  getline(cin, in3);
  n = in3.size();
  for (int i = 0; i < n; ++i) {
    in.push_back('a' + MOD(i, 26));
  }
  cout << "? " << in << endl;
  cin >> in;
  for (int i = 0; i < n; ++i) {
    for (int j = in[i] - 'a'; j < n; j += 26) {
      adj[i].push_back(j);
    }
  }
  in.clear();
  for (int i = 0; i < n; ++i) {
    in.push_back('a' + MOD((i / 26), 26));
  }
  cout << "? " << in << endl;
  cin >> in;
  for (int i = 0; i < n; ++i) {
    for (it = adj[i].begin(); it != adj[i].end();) {
      if (in[i] - 'a' != MOD(((*it) / 26), 26))
        it = adj[i].erase(it);
      else
        ++it;
    }
  }
  in.clear();
  memset(nums, -1, sizeof nums);
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < 26; ++j) {
      cnt[j] = 0;
    }
    for (it = adj[i].begin(); it != adj[i].end(); ++it) {
      if (nums[(*it)] != -1) {
        cnt[nums[(*it)]] = 1;
      }
    }
    for (it = adj[i].begin(); it != adj[i].end(); ++it) {
      if (nums[(*it)] == -1) {
        for (int j = 0; j < 26; ++j) {
          if (!cnt[j]) {
            nums[(*it)] = j;
            cnt[j] = 1;
          }
        }
      }
    }
  }
  for (int i = 0; i < n; ++i) {
    if (nums[i] == -1)
      in.push_back('z');
    else
      in.push_back(nums[i] + 'a');
    in2.push_back(in[i]);
  }
  cout << "? " << in << endl;
  cin >> in;
  for (int i = 0; i < n; ++i) {
    for (it = adj[i].begin(); it != adj[i].end();) {
      if (in2[(*it)] != in[i])
        it = adj[i].erase(it);
      else
        ++it;
    }
  }
  for (int i = 0; i < n; ++i) {
    in[(*adj[i].begin())] = in3[i];
  }
  cout << "! " << in << endl;
}
