#include <bits/stdc++.h>
using namespace std;
int query(int x, int y) {
  printf("? %d %d\n", x, y);
  fflush(stdout);
  char str[100];
  scanf("%s", str);
  if (*str == 'e') exit(0);
  return *str == 'x';
}
void quit(int x) {
  printf("! %d\n", x);
  fflush(stdout);
}
int p[100], c[100], tot;
void factorize(int n) {
  tot = 0;
  for (long long i = 2; i * i <= n; i++)
    if (n % i == 0) {
      p[++tot] = i, c[tot] = 0;
      while (n % i == 0) c[tot]++, n /= i;
    }
  if (n > 1) p[++tot] = n, c[tot] = 1;
}
inline int rnd__() {
  long long x = rand();
  x = x * (RAND_MAX + 1ll) + rand();
  x = x * (RAND_MAX + 1ll) + rand();
  return x & 0x7fffffff;
}
inline int rnd() {
  int x = rnd__();
  while (x > 2000000000) x = rnd__();
  return x;
}
void solve() {
  int x, y;
  while (1) {
    x = rnd(), y = rnd();
    if (x > y) swap(x, y);
    if (query(x, y)) break;
  }
  while (x < y - 1) {
    int m = (0ll + x + y) >> 1;
    if (query(x, m))
      y = m;
    else
      x = m;
  }
  factorize(y);
  int answer = y;
  for (int i = 1; i <= tot; i++) {
    int tmp[100] = {1};
    for (int j = 1; j <= c[i]; j++) tmp[j] = tmp[j - 1] * p[i];
    int l = 1, r = c[i], ans = 0;
    while (l <= r) {
      int m = (l + r) >> 1;
      if (query(y / tmp[m] - 1, y / tmp[m]))
        ans = m, l = m + 1;
      else
        r = m - 1;
    }
    answer /= tmp[ans];
  }
  quit(answer);
}
int main() {
  srand(time(0));
  char str[100];
  while (1) {
    scanf("%s", str);
    if (*str != 's') break;
    solve();
  }
}
