#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int func = 0;
int ask(string a) {
func++;
assert(func <= 12);
for (auto& i : a) {
assert('0' <= i && i <= '9');
}
cout << "? " << a << endl;
int x;
cin >> x;
return x;
}
int32_t main() {
ios::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
char dummy = '?';
vector<int> xat(10, -1);
for (int i = 0; i < 10; i++) {
char c = char('0' + i);
string cur = string(3, c);
xat[i] = ask(cur);
if (xat[i] == 3) {
cout << "! " << cur << endl;
return 0;
}
if (xat[i] == 0) {
dummy = c;
break;
}
}
int cur_match = 0;
string ans = string(3, dummy);
auto solve_1 = [&](int i) -> void {
char c = char('0' + i);
vector<int> av;
for (int j = 0; j < 3; j++) {
if (ans[j] == dummy) av.push_back(j);
}
int ok = 0;
for (int j = 0; j + 1 < av.size(); j++) {
ans[av[j]] = c;
int x = ask(ans);
if (x == cur_match + 1) {
ok = 1;
break;
}
ans[av[j]] = dummy;
}
if (!ok && av.size()) {
ans[av.back()] = c;
}
if (av.size())
cur_match++;
};
auto solve_2 = [&](int i) -> void {
char c = char('0' + i);
vector<pair<int, int>> av;
for (int j = 0; j < 3; j++) {
for (int k = j + 1; k < 3; k++)
if (ans[j] == dummy && ans[k] == dummy) av.push_back({j, k});
}
int ok = 0;
for (int j = 0; j + 1 < av.size(); j++) {
ans[av[j].first] = c;
ans[av[j].second] = c;
int x = ask(ans);
if (x == cur_match + 2) {
ok = 1;
break;
}
ans[av[j].first] = dummy;
ans[av[j].second] = dummy;
}
if (!ok && av.size()) {
ans[av.back().first] = c;
ans[av.back().second] = c;
}
if (av.size())
cur_match += 2;
};
for (int i = 0; i < 9; i++) {
if (xat[i] == 0) {
continue;
}
if (xat[i] != -1) {
if (xat[i] == 1) {
solve_1(i);
}
else if (xat[i] == 2) {
solve_2(i);
}
if (cur_match == 3) {
cout << "! " << ans << endl;
return 0;
}
continue;
}
xat[i] = ask(string(3, '0' + i));
if (xat[i] == 3) {
cout << "! " << string(3, '0' + i) << endl;
return 0;
}
if (xat[i] == 1) {
solve_1(i);
}
if (xat[i] == 2) {
solve_2(i);
}
if (cur_match == 3) {
cout << "! " << ans << endl;
return 0;
}
}
for (auto& i : ans) if (i == dummy) i = '9';
cout << "! " << ans << endl;
return 0;
}