import std.stdio;
import std.conv, std.array, std.algorithm, std.string;
import std.math, std.random, std.range, std.datetime;
import std.bigint;
import std.container;
string read(){ static string[] ss; while(!ss.length) ss = readln.chomp.split; string res = ss[0]; ss.popFront; return res; }
long binarySearch(long min, long max, bool delegate(long) f){
	if(!f(min)) return min - 1; if(f(max)) return max;
	long mid; while(max - min > 1){ mid = min + (max - min) / 2; if(f(mid)) min = mid; else max = mid; } return min;
	}

bool check(long x){
	writeln("? ", x);
	stdout.flush;
	return (readln.chomp == "Y");
	}

void main(){
	
	long[] ms = [1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000];
	
	long ans;
	if(check(ms[10])){ // 10...0 の形である
		foreach(m; ms){
			if(check(m + 1)){
				ans = m;
				break;
				}
			}
		}
	else{
		foreach(m; ms){
			if(!check(m * 10)){
				ans = binarySearch(m, m * 10 - 1, x => !check(x * 10)) + 1;
				break;
				}
			}
		}
	
	writeln("! ", ans);
	}


