#include <bits/stdc++.h>
#pragma GCC optimize("O3", "unroll-loops")
using namespace std;
template <class T, class U>
inline void checkmin(T &x, U y) {
  if (y < x) x = y;
}
template <class T, class U>
inline void checkmax(T &x, U y) {
  if (y > x) x = y;
}
template <class T, class U>
inline bool ifmin(T &x, U y) {
  if (y < x) return x = y, true;
  return false;
}
template <class T, class U>
inline bool ifmax(T &x, U y) {
  if (y > x) return x = y, true;
  return false;
}
template <class T>
inline void sort(T &a) {
  sort(a.begin(), a.end());
}
template <class T>
inline void rsort(T &a) {
  sort(a.rbegin(), a.rend());
}
template <class T>
inline void reverse(T &a) {
  reverse(a.begin(), a.end());
}
template <class T>
inline istream &operator>>(istream &stream, vector<T> &a) {
  for (auto &i : a) stream >> i;
  return stream;
}
mt19937_64 gen(25546232352ll);
int rand(int a, int b) {
  uniform_int_distribution<int> uni(a, b);
  return uni(gen);
}
string generate(int n) {
  string ans = "";
  for (int i = 0; i < n; ++i) ans += char(rand('a', 'z'));
  return ans;
}
vector<pair<int, int> > changes;
string ask(string second) {
  cout << "? " << second << endl;
  string ans;
  cin >> ans;
  return ans;
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << fixed << setprecision(15);
  srand(85453532);
  string t;
  cin >> t;
  int n = int(t.size());
  string s1(n, '0');
  string s2(n, '0');
  string s3(n, '0');
  string second = "";
  for (int i = 0; i < 26; ++i)
    for (int j = 0; j < 26; ++j)
      for (int k = 0; k < 26; ++k) {
        second += char('a' + i);
        second += char('a' + j);
        second += char('a' + k);
      }
  for (int i = 0; i < n; ++i) s1[i] = second[3 * i];
  for (int i = 0; i < n; ++i) s2[i] = second[3 * i + 1];
  for (int i = 0; i < n; ++i) s3[i] = second[3 * i + 2];
  string ans1 = ask(s1);
  string ans2 = ask(s2);
  string ans3 = ask(s3);
  vector<bool> used(n);
  for (int i = 0; i < n; ++i) {
    if (s1[i] != ans1[i]) used[i] = true;
    if (s2[i] != ans2[i]) used[i] = true;
    if (s3[i] != ans3[i]) used[i] = true;
  }
  string answer = t;
  for (int i = 0; i < n; ++i)
    if (used[i]) {
      for (int j = 0; j < n; ++j)
        if (used[j]) {
          if (ans1[j] == s1[i] && ans2[j] == s2[i] && ans3[j] == s3[i]) {
            answer[i] = t[j];
            break;
          }
        }
    }
  cout << "! " << answer << endl;
  return 0;
}
