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(){
	int x;
	if(check(10 ^^ 10)) x = 0; // 10...0 の形である
	else x = 9;
	
	long ans;
	if(x != 0){
		long a, b; 
		if     (!check(10 ^^ 1)) a = 10 ^^ 0 + 1, b = 10 ^^ 1 - 1;
		else if(!check(10 ^^ 2)) a = 10 ^^ 1 + 1, b = 10 ^^ 2 - 1;
		else if(!check(10 ^^ 3)) a = 10 ^^ 2 + 1, b = 10 ^^ 3 - 1;
		else if(!check(10 ^^ 4)) a = 10 ^^ 3 + 1, b = 10 ^^ 4 - 1;
		else if(!check(10 ^^ 5)) a = 10 ^^ 4 + 1, b = 10 ^^ 5 - 1;
		else if(!check(10 ^^ 6)) a = 10 ^^ 5 + 1, b = 10 ^^ 6 - 1;
		else if(!check(10 ^^ 7)) a = 10 ^^ 6 + 1, b = 10 ^^ 7 - 1;
		else if(!check(10 ^^ 8)) a = 10 ^^ 7 + 1, b = 10 ^^ 8 - 1;
		else if(!check(10 ^^ 9)) a = 10 ^^ 8 + 1, b = 10 ^^ 9 - 1;
		
		ans = binarySearch(a - 1, b, x => !check(x * 10 ^^ 9 + x)) + 1;
		}
	else{
		if(check(10 ^^ 1 - 1)) ans = 10 ^^ 0;
		else if(check(10 ^^ 2 - 1)) ans = 10 ^^ 1;
		else if(check(10 ^^ 3 - 1)) ans = 10 ^^ 2;
		else if(check(10 ^^ 4 - 1)) ans = 10 ^^ 3;
		else if(check(10 ^^ 5 - 1)) ans = 10 ^^ 4;
		else if(check(10 ^^ 6 - 1)) ans = 10 ^^ 5;
		else if(check(10 ^^ 7 - 1)) ans = 10 ^^ 6;
		else if(check(10 ^^ 8 - 1)) ans = 10 ^^ 7;
		else if(check(10 ^^ 9 - 1)) ans = 10 ^^ 8;
		else ans = 10 ^^ 9;
		}
	
	writeln("! ", ans);
	}


