#include <bits/stdc++.h>
#define ri register int
using namespace std;
typedef double db;
typedef long double ld;
typedef long long ll;
typedef vector <int> poly;
typedef pair <int, int> pii;
typedef pair <ll, int> pli;
typedef pair <int, ll> pil;
typedef pair <ll, ll> pll;
typedef unsigned long long ulll;
typedef unsigned int uii;
typedef string strr;
#define fi first
#define se second
#define pb push_back
#define ppp pop_back
#define rez resize
const ll Inf = 1e18;
const int rlen = 1 << 20, inf = 0x3f3f3f3f;
char buf[rlen], *ib = buf, *ob = buf;
#define gc() getchar()//(((ib == ob) && (ob = (ib = buf) + fread(buf, 1, rlen, stdin)), ib == ob) ? -1 : *ib++)
inline int read() {
  static int ans, f;
  static char ch;
  ans = 0, ch = gc(), f = 1;
  while (!isdigit(ch)) f ^= ch == '-', ch = gc();
  while (isdigit(ch)) ans = (ans << 3) + (ans << 1) + (ch ^ 48), ch = gc();
  return f ? ans: -ans;
}
inline ll readl() {
  static ll ans;
  static char ch;
  for (ans = 0, ch = gc(); !isdigit(ch); ch = gc());
  while (isdigit(ch)) ans = ((ans << 2) + ans << 1) + (ch ^ 48), ch = gc();
  return ans;
}
inline int Read(char *s) {
  static int top;
  static char ch;
  top = 0, ch = gc();
  while (!isalpha(ch) && !isdigit(ch)) ch = gc();
  while (isalpha(ch) || isdigit(ch)) s[++top] = ch, ch = gc();
  return top;
}
namespace modular {
  const int mod = 998244353;
  int ret;
  inline int add(int a, int b) { return a + b < mod ? a + b : a + b - mod; }
  inline int dec(int a, int b) { return a < b ? a - b + mod : a - b; }
  inline int mul(int a, int b) { return (ll) a * b % mod; }
  inline void Add(int &a, int b) { a = a + b < mod ? a + b : a + b - mod; }
  inline void Dec(int &a, int b) { a = a < b? a - b + mod : a - b; }
  inline void Mul(int &a, int b) { a = (ll) a * b % mod; }
  inline int ksm(int a, int p) {
    for (ret = 1; p; p >>= 1, Mul(a, a)) (p & 1) && (Mul(ret, a), 1);
    return ret;
  }
  inline int Inv(int a) { return ksm(a, mod - 2); }
  inline int sqr(int a) { return (ll) a * a % mod; }
  inline int cub(int a) { return (ll) a * a % mod * a % mod; }
} using namespace modular;
template <typename T> inline void ckmax(T &a, T b) { a < b ? a = b : 0; }
template <typename T> inline void ckmin(T &a, T b) { a > b ? a = b : 0; }
template <typename T> inline T Abs(T a) { return a < 0 ? -a : a; }
template <typename T> inline T gcd(T a, T b) {
  T t;
  while (b) t = a, a = b, b = t - t / a * a;
  return a;
}
int n, tot, all = 0;
vector <string> a;
inline string solve(int l, int r) {
  if (l == r) return a[l];
  int mid = (l + r) >> 1, ps1 = 0, ps2 = 0;
  string L = solve(l, mid), R = solve(mid + 1, r), res = "", cur;
  while (ps1 < L.size() && ps2 < R.size()) {
    cur = res + L[ps1];
    for (ri i = ps2; i < R.size(); ++i) cur = cur + R[i];
    cout << "? ";
    for (ri i = 0; i < cur.size(); ++i) cout << cur[i];
    cout << endl;
    ++all;
    assert(all <= 845);
    int x = read();
    if (x + cur.size() == n) res = res + L[ps1++];
    else res = res + R[ps2++];
  }
  while (ps1 < L.size()) res = res + L[ps1++];
  while (ps2 < R.size()) res = res + R[ps2++];
  return res;
}
int main() {
  #ifdef ldxcaicai
  freopen("lx.in", "r", stdin);
  #endif
  n = 128, tot = 0;
  for (char i = 'a'; i <= 'z'; ++i) {
    cout << "? ";
    for (ri j = 1; j <= n; ++j) cout << i;
    cout << endl;
    int cnt = n - read();
    tot += cnt;
    if (cnt) {
      string tmp = "";
      for (ri j = 1; j <= cnt; ++j) tmp = tmp + i;
      a.pb(tmp);
    }
  }
  for (char i = 'A'; i <= 'Z'; ++i) {
    cout << "? ";
    for (ri j = 1; j <= n; ++j) cout << i;
    cout << endl;
    int cnt = n - read();
    tot += cnt;
    if (cnt) {
      string tmp = "";
      for (ri j = 1; j <= cnt; ++j) tmp = tmp + i;
      a.pb(tmp);
    }
  }
  for (char i = '0'; i <= '9'; ++i) {
    cout << "? ";
    for (ri j = 1; j <= n; ++j) cout << i;
    cout << endl;
    int cnt = n - read();
    tot += cnt;
    if (cnt) {
      string tmp = "";
      for (ri j = 1; j <= cnt; ++j) tmp = tmp + i;
      a.pb(tmp);
    }
  }
  all = 62;
  n = tot;
  string res = solve(0, a.size() - 1);
  cout << "! ";
  for (ri i = 0; i < res.size(); ++i) cout << res[i];
  cout << endl;
  return 0;
}

Measured memory_bytes: 3764