#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void die(string x) {
  cout << x << flush;
  exit(0);
}
string abc = "abcdefghijklmnopqrstuvwxyz";
string t;
int n;
char ask[10001][4];
int mod[4];
string query[4];
string answer[4];
map<char, set<int> > places[4];
int dp[26][26][26];
char sol[10001];
int main() {
  ios_base::sync_with_stdio(false);
  cin >> t;
  n = t.length();
  mod[0] = n;
  for (int i = 1; i <= 3; i++) {
    mod[i] = mod[i - 1] / 26;
    if (mod[i - 1] % 26 != 0) mod[i] += 1;
  }
  for (int i = 0; i < n; i++) {
    for (int j = 1; j <= 3; j++) ask[i][j] = abc[(i % mod[j - 1]) / mod[j]];
  }
  for (int i = 1; i <= 3; i++) {
    string act = "";
    for (int j = 0; j < n; j++) act += ask[j][i];
    query[i] = act;
    cout << "? " << act << endl;
    string res;
    cin >> res;
    answer[i] = res;
    for (int j = 0; j < n; j++) places[i][answer[i][j] - 'a'].insert(j);
  }
  for (int i = 0; i < 26; i++) {
    for (int j = 0; j < 26; j++) {
      for (int k = 0; k < 26; k++) {
        for (auto s : places[3][k]) {
          if (places[1][i].find(s) != places[1][i].end() &&
              places[2][j].find(s) != places[2][j].end())
            dp[i][j][k] = s;
        }
      }
    }
  }
  for (int i = 0; i < n; i++) {
    sol[i] = t[dp[query[1][i] - 'a'][query[2][i] - 'a'][query[3][i] - 'a']];
  }
  cout << "! ";
  for (int i = 0; i < n; i++) cout << sol[i];
  cout << flush;
  return 0;
}
