import std.algorithm, std.container, std.conv, std.math, std.range, std.typecons, std.stdio, std.string;

auto rdsp(){return readln.splitter;}
void pick(R,T)(ref R r,ref T t){t=r.front.to!T;r.popFront;}
void readV(T...)(ref T t){auto r=rdsp;foreach(ref v;t)pick(r,v);}

void main()
{
  auto r = -1;
  foreach (i; 1..11) {
    if (!ask(10L^^i)) {
      r = i;
      break;
    }
  }

  if (r == -1) {
    foreach (i; 1..11) {
      if (ask(10L^^i-1)) {
        writeln("! ", 10L^^(i-1));
        return;
      }
    }
  }

  auto mi = 10L^^(r-1), ma = 10L^^r-1;
  while (ma-mi > 1) {
    auto c = (ma+mi)/2;
    if (ask(c*10)) ma = c;
    else           mi = c;
  }

  writeln("! ", ask(mi*10) ? mi : ma);
}

auto ask(long n)
{
  writeln("? ", n);
  stdout.flush();
  string s; readV(s);
  return s == "Y";
}
