#include <bits/stdc++.h>
using namespace std;
void ask(string &s) {
  cout << "? " << s << "\n";
  cout << flush;
}
void solve() {
  string t;
  cin >> t;
  int n = t.size();
  string s1;
  int curr = 0;
  vector<int> pos[26];
  for (int j = 0; j < n; j++) {
    s1 += 'a' + curr;
    pos[curr].push_back(j);
    curr++;
    if (curr >= 26) {
      curr = 0;
    }
  }
  ask(s1);
  string t1;
  cin >> t1;
  vector<int> possible(n);
  for (int j = 0; j < n; j++) {
    possible[j] = t1[j] - 'a';
  }
  string s2;
  s2.resize(n);
  for (int j = 0; j < 26; j++) {
    int c = 0;
    for (int i = 0; i < (int)pos[j].size(); i++) {
      s2[pos[j][i]] = 'a' + c;
      c++;
      if (c >= 26) {
        c = 0;
      }
    }
  }
  ask(s2);
  string t2;
  cin >> t2;
  vector<vector<int>> idx(n);
  for (int j = 0; j < n; j++) {
    int c = possible[j];
    for (int i = 0; i < (int)pos[c].size(); i++) {
      if (t2[j] == s2[pos[c][i]]) {
        idx[j].push_back(pos[c][i]);
      }
    }
  }
  string s3;
  s3.resize(n);
  for (int j = 0; j < n; j++) {
    int c = 0;
    for (int i = 0; i < idx[j].size(); i++) {
      s3[idx[j][i]] = 'a' + c;
      c++;
      if (c == 26) c = 0;
    }
  }
  ask(s3);
  string t3;
  cin >> t3;
  string s;
  s.resize(n);
  for (int j = 0; j < n; j++) {
    for (int i = 0; i < idx[j].size(); i++) {
      if (s3[idx[j][i]] == t3[j]) {
        s[idx[j][i]] = t[j];
      }
    }
  }
  cout << "! " << s << "\n";
  cout << flush;
  return;
}
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  int t;
  t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
