#include <iostream>
#include <cstring>

using namespace std;

const int MAXN = 200;

int mat[MAXN][MAXN];

int f(int x, int y) {
  if (mat[x][y] == -2) {
    cout << x << " " << y << '\n';
    cout.flush();
    string ans;
    cin >> ans;
    if (ans[0] == '-')
      mat[x][y] = -1;
    else if (ans[0] == '0' && ans.size() == 1)
      mat[x][y] = 0;
    else
      mat[x][y] = 1;
  }
  return mat[x][y];
}

int lg[MAXN + 1];

void div_et_imp(int x1, int y1, int x2, int y2) {
  if (x1 > x2 || y1 > y2)
    return;
  int xmed = (x1 + x2) / 2;
  int step = (1 << lg[y2 - y1 + 1]), res = y1;
  while (step) {
    if (res + step <= y2 && f(xmed, res + step) <= 0)
      res += step;
    step >>= 1;
  }
  if (res == y1)
    f(xmed, y1);
  div_et_imp(xmed + 1, y1, x2, res);
  div_et_imp(x1, res + 1, xmed - 1, y2);
}

int main()
{
    for (int i = 0; i < MAXN; ++i)
      for (int j = 0; j < MAXN; ++j)
        mat[i][j] = -2;
    for (int i = 2; i <= MAXN; ++i)
      lg[i] = lg[i / 2] + 1;
    div_et_imp(0, 0, MAXN - 1, MAXN - 1);
    return 0;
}