#include <bits/stdc++.h>
using namespace std;

const int MAXL = 128;
const int Q = 850;

int main() {
	ios::sync_with_stdio(0), cin.tie(0);
	const string chars = 
		"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
		"abcdefghijklmnopqrstuvwxyz"
		"0123456789";
	assert(chars.size() == 62);

	const bool testing = true;
	string test_ans;
	if (testing) {
		mt19937 mt(chrono::steady_clock::now().time_since_epoch().count());
		//int L = uniform_int_distribution<int>(1, MAXL)(mt);
		int L = MAXL-1;
		for (int i = 0; i < L; i++) {
			test_ans += chars[uniform_int_distribution<int>(0, 61)(mt)];
		}
	}
	int query_cnt = 0;
	auto query = [&](string q) -> int {
		query_cnt++;
		cout << '?' << ' ' << q << '\n' << flush;
		int v;
		cin >> v;
		return v;
	};
	auto get_cnt = [&](char c) -> int {
		if (testing) {
			query_cnt++;
			int res = 0;
			for (char v : test_ans) {
				res += v == c;
			}
			return res;
		}
		return MAXL - query(string(MAXL, c));
	};
	vector<int> cnts(62);
	int L = 0;
	for (int i = 0; i < 62; i++) {
		cnts[i] = get_cnt(chars[i]);
		L += cnts[i];
	}
	auto is_subseq = [&](string q) -> int {
		assert(int(q.size()) <= L);
		if (testing) {
			query_cnt++;
			int i = 0;
			for (char c : test_ans) {
				if (c == q[i]) {
					i++;
					if (i == int(q.size())) return true;
				}
			}
			return false;
		} else {
			return query(q) == L - int(q.size());
		}
	};
	auto combine = [&](const string& a, const string& b) -> string {
		string res;
		int ia = 0, ib = 0;
		while (ia < int(a.size()) && ib < int(b.size())) {
			if (is_subseq(a.substr(0, ia+1) + b.substr(ib))) {
				res += a[ia++];
			} else {
				res += b[ib++];
			}
		}
		while (ia < int(a.size())) res += a[ia++];
		while (ib < int(b.size())) res += b[ib++];
		return res;
	};
	function<string(int , int)> solve = [&](int lx, int rx) {
		if (lx + 1 == rx) {
			return string(cnts[lx], chars[lx]);
		} else {
			return combine(solve(lx, (lx + rx) / 2), solve((lx + rx) / 2, rx));
		}
	};
	string ans = solve(0, 62);
	assert(query_cnt <= Q);
	if (testing) {
		assert(ans == test_ans);
	}
	cout << '!' << ' ' << ans << '\n';
}

