#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; }