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_000_000_000)) x = 0; // 10...0 の形である
/*	else if(check(20_000_000_000)) x = 1; // 1で始まるかまたは20...0の形である
	else if(check(30_000_000_000)) x = 2; // 2で始まるかまたは30...0の形である
	else if(check(40_000_000_000)) x = 3; // 3で始まるかまたは40...0の形である
	else if(check(50_000_000_000)) x = 4; // 4で始まるかまたは50...0の形である
	else if(check(60_000_000_000)) x = 5; // 5で始まるかまたは60...0の形である
	else if(check(70_000_000_000)) x = 6; // 6で始まるかまたは70...0の形である
	else if(check(80_000_000_000)) x = 7; // 7で始まるかまたは80...0の形である
	else if(check(90_000_000_000)) x = 8; // 8で始まるかまたは90...0の形である
*/	else x = 9;
	
	long ans;
	if(x != 0){
		long a, b; 
		if(!check(10)) a = 2, b = 9; // 1桁(2 ～ 9)である
		else if(!check(100)) a = 11, b = 99; // 2桁(11 ～ 99)である
		else if(!check(1_000)) a = 101, b = 999; // 3桁(101 ～ 999)である
		else if(!check(10_000)) a = 1001, b = 9999; // 4桁(1001 ～ 9999)である
		else if(!check(100_000)) a = 10001, b = 99999; // 5桁(10001 ～ 99999)である
		else if(!check(1_000_000)) a = 100001, b = 999999; // 6桁(100001 ～ 999999)である
		else if(!check(10_000_000)) a = 1000001, b = 9999999; // 7桁(1000001 ～ 9999999)である
		else if(!check(100_000_000)) a = 10000001, b = 99999999; // 8桁(10000001 ～ 99999999)である
		else if(!check(1_000_000_000)) a = 100000001, b = 999999999; // 9桁(100000001 ～ 999999999)である
		// else はありえない
		
		ans = binarySearch(a - 1, b, x => !check((x.to!string ~ x.to!string).to!long)) + 1;
		}
	else{
		if(check(9)) ans = 1;
		else if(check(99)) ans = 10;
		else if(check(999)) ans = 100;
		else if(check(9999)) ans = 1000;
		else if(check(99999)) ans = 10000;
		else if(check(999999)) ans = 100000;
		else if(check(9999999)) ans = 1000000;
		else if(check(99999999)) ans = 10000000;
		else if(check(999999999)) ans = 100000000;
		else ans = 1000000000;
		
		}
	
	writeln("! ", ans);
	}


/*

10_000_000_000
20_000_000_000
30_000_000_000
40_000_000_000
50_000_000_000
60_000_000_000
70_000_000_000
80_000_000_000
90_000_000_000
と比較することで最初の１字を決める

次に
1
10
100
1_000
10_000
100_000
1_000_000
10_000_000
100_000_000
1_000_000_000
と比較することで桁数を決める

桁数が決まれば(たとえば5桁)
10000_10000～99999_99999
の形で繰り返すものと比較することで二分法

*/