#include <cstdio>
#include <algorithm>
using namespace std;
const int MXN=200;
int a[MXN][MXN],b[MXN];
void fills(int x, int y) {
  int z=a[x][y];
  if (z!=-1) {
    int v=-1-a[x][y];
    int e=min(x+v,MXN-1);
    a[x][y]=0;
    a[e][y]=-1;
    fills(e,y);
    e=min(y+v,MXN-1);
    a[x][e]=-1;
    fills(x,e);
    return;
  }
  for (int i=x; i>=0 && (i==x || a[i][y]==0); i--)
    for (int j=y; j>=0 && ((i==x && j==y) || a[i][j]==0); j--) a[i][j]=z;
}
void fillt(int x, int y) {
  int z=a[x][y];
  if (z!=1) {
    int v=a[x][y]-1;
    int e=max(x-v,0);
    a[x][y]=0;
    a[e][y]=1;
    fillt(e,y);
    e=max(y-v,0);
    a[x][e]=1;
    fillt(x,e);
    return;
  }
  for (int i=x; i<MXN && (i==x || a[i][y]==0); i++)
    for (int j=y; j<MXN && ((i==x && j==y) || a[i][j]==0); j++) a[i][j]=z;
}
void fnd(int x, int y) {
  printf("%d %d\n",x,y);
  fflush(stdout);
  scanf("%d",&a[x][y]);
}
bool solve(int x) {
  int l=0,r=MXN-1;
  while (l<r) {
    int h=(l+r)/2;
    if (a[x][h]==0) fnd(x,h);
    if (a[x][h]==0) return true;
    if (a[x][h]<0) {
      fills(x,h);
      l=h+1;
    } else {
      fillt(x,h);
      r=h-1;
    }
  }
  if (r>=0 && r<MXN && a[x][r]==0) {
    fnd(x,r);
    if (a[x][r]==0) return true;
    if (a[x][r]<0) fills(x,r); else fillt(x,r);
  }
  return false;
}
int main() {
  srand(77);
  for (int i=0; i<MXN; i++) b[i]=i;
  random_shuffle(b,b+MXN);
  for (int i=0; i<MXN; i++) {
  if (solve(b[i])) break;
  //for (int j=0; j<MXN; j++,puts("")) for (int k=0; k<MXN; k++) printf("%d ",a[j][k]);
  }
  return 0;
}