#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = double;
ld const pi = acos(-1.0);
ld const eps = 0.000000001;
int const inf = int(1e9 + 7);
ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a % b); }
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
template <class T>
bool mi(T &a, T b) {
  return a > b ? (a = b, true) : false;
}
template <class T>
bool ma(T &a, T b) {
  return a < b ? (a = b, true) : false;
}
struct dekart {
  static mt19937 ran;
  struct node {
    int y, sz;
    ll x;
    node *l, *r;
    node() {
      sz = 0;
      l = r = nullptr;
    }
    node(ll key) {
      x = key;
      y = ran();
      sz = 1;
      l = r = nullptr;
    }
  };
  int getsz(node *p) {
    if (!p) return 0;
    return p->sz;
  }
  void upd(node *p) {
    if (!p) return;
    p->sz = getsz(p->l) + getsz(p->r) + 1;
  }
  void merge(node *&root, node *l, node *r) {
    if (!l) {
      root = r;
      return;
    }
    if (!r) {
      root = l;
      return;
    }
    if (l->y > r->y) {
      merge(l->r, l->r, r);
      upd(l);
      root = l;
    } else {
      merge(r->l, l, r->l);
      upd(r);
      root = r;
    }
  }
  void getfirstk(node *root, node *&l, node *&r, int k) {
    if (!root) {
      l = r = nullptr;
      return;
    }
    if (k == 0) {
      l = nullptr;
      r = root;
      return;
    }
    if (getsz(root->l) >= k) {
      node *p1, *p2;
      getfirstk(root->l, p1, p2, k);
      root->l = p2;
      upd(root);
      l = p1;
      r = root;
    } else {
      node *p1, *p2;
      getfirstk(root->r, p1, p2, k - getsz(root->l) - 1);
      root->r = p1;
      upd(root);
      l = root;
      r = p2;
    }
  }
  void print(node *r) {
    if (!r) return;
    print(r->l);
    printf("%d ", r->x);
    print(r->r);
  }
};
char buffer[1005];
bool ask(ll a, ll b) {
  printf("? %lld %lld\n", a, b);
  fflush(stdout);
  scanf("%s", buffer);
  if (buffer[0] == 'e') throw(1);
  return buffer[0] == 'x';
}
void play() {
  ll x = 2;
  ll y = 1;
  while (ask(x, y)) {
    x <<= 1;
    y <<= 1;
    if (y > 1e9) {
      printf("! 1\n");
      fflush(stdout);
      return;
    }
  }
  ll L = y;
  ll R = x;
  while (R - L > 1) {
    ll H = L + R >> 1;
    if (!ask(H, y))
      R = H;
    else
      L = H;
  }
  printf("! %d\n", R);
  fflush(stdout);
}
int main() {
  while (1) {
    scanf("%s", buffer);
    if (buffer[0] == 'e') break;
    if (buffer[0] == 'm') throw(1);
    play();
  }
  return 0;
}
