#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <sstream>
#include <algorithm>
#include <deque>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <list>
#include <cstdio>
#include <iostream>
#include <cmath>
#include <climits>
#include <bitset>
#include <functional>
#include <numeric>
#include <ctime>
#include <cassert>
#include <cstring>
#include <fstream>

#define rep(i, a, b) for(int (i)=(a); (i)<(b); (i)++)
#define irep(i, a, b) for(int (i)=(a);(i)<=(b);(i)++)
#define rrep(i, a, b) for(int (i)=(a);(i)>=(b);(i)--)

using namespace std;

const int MOD = 1e9 + 7;
int cnnt = 0;

void query(long long n) {
    cout << "? " << n << endl;
    cnnt++;
}

void answer_is(long long n) {
    cout << "! " << n << endl;
    cout << flush;
}

int keta(long long n) {
    int cnt = 0;
    while (n > 0) {
        cnt++;
        n /= 10;
    }
    return cnt;
}
string get_ans() {
    string a;
    cin >> a;
    return a;
}


int main() {
    query(100000000000000);
    // 10の累乗
    if (get_ans() == "Y") {
        long long f = 9;
        while (1) {
            query(f);
            if (get_ans() == "Y")
                break;
        f = 10 * f + 9;
        }
        answer_is((f + 1) / 10);
        return 0;
    }

    long long ones = 100000000;
    while (1) {
        query(ones);
        string a;
        cin >> a;
        // 桁が決まった
        // 1では絶対にYES
        if (a == "Y") {
            break;
        }
        else {
            ones /= 10;
        }
    }

    long long base = ones;
    long long det = 0;
    int k = keta(base);
    stringstream ss;

    rep(i, 0, k-1) {
        int t = 0;
        query((det + base * 5)/10);
        if (get_ans() == "Y") {
            query((det + base * 7)/10);
            if (get_ans() == "Y") {
                query((det + base * 8)/10);
                if (get_ans() == "Y") {
                    query((det + base * 9)/10);
                    if (get_ans() == "Y") {
                        t = 9;
                    }
                    else {
                        t = 8;
                    }
                }
                else {
                    t = 7;
                }
            }
            else {
                query((det + base * 6)/10);
                if (get_ans() == "Y") {
                    t = 6;
                }
                else {
                    t = 5;
                }
            }
        }
        else {
            query((det + base * 3)/10);
            if (get_ans() == "Y") {
                query((det + base * 4)/10);
                if (get_ans() == "Y") {
                    t = 4;
                }
                else {
                    t = 3;
                }
            }
            else {
                query((det + base * 2)/10);
                if (get_ans() == "Y") {
                    t = 2;
                }
                else {
                    if (det == 0)
                        t = 1;
                    else {
                        query((det + base) / 10);
                        if (get_ans() == "Y") {
                            t = 1;
                        }
                        else {
                            t = 0;
                        }
                    }
                }
            }
        }
        det += base * t;
        base /= 10;
    }
    // 最後の桁を決める
    rep(i, 0, 10) {
        if (i == 0 && det == 0)
            continue;
        long long test = (det + i) * 10;
        query(test);
        if (get_ans() == "Y") {
            det += i;
            break;
        }
    }
    assert(cnnt <= 64);
    answer_is(det);
    

    return 0;
}

Measured memory_bytes: 668