#include<bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for(int i = (a); i <= (b); ++i)
#define FORD(i,a,b) for(int i = (a); i >= (b); --i)
#define RI(i,n) FOR(i,1,(n))
#define REP(i,n) FOR(i,0,(n)-1)
#define mini(a,b) a=min(a,b)
#define maxi(a,b) a=max(a,b)
#define mp make_pair
#define pb push_back
#define st first
#define nd second
#define sz(w) (int) w.size()
typedef vector<int> vi;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
const int inf = 1e9 + 5;
const int nax = 1e3 + 5;

int t[nax][nax];
int pref[nax][nax];

int zapytaj(int x, int y) {
	printf("%d %d\n", x-1, y-1);
	fflush(stdout);
	int r;
	scanf("%d", &r);
	if(r == 0) exit(0);
	return r;
}

void prefuj(int n) {
	RI(x, n) RI(y, n) {
		pref[x][y] = pref[x-1][y] + pref[x][y-1] - pref[x-1][y-1];
		if(t[x][y] == 0) ++pref[x][y];
	}
}

int main() {
	int n = 200;
	while(true) {
		prefuj(n);
		pair<int,pii> best = mp(-1, mp(-1,-1));
		RI(x, n) RI(y, n) if(t[x][y] == 0) {
			int one = pref[x][y];
			int two = pref[n][n] - pref[x-1][n] - pref[n][y-1] + pref[x-1][y-1];
			maxi(best, mp(min(one,two), mp(x, y)));
		}
		assert(best.st != -1);
		int r = zapytaj(best.nd.st, best.nd.nd);
		assert(r != 0);
		if(r > 0) {
			FOR(x, best.nd.st, n)
				FOR(y, best.nd.nd, n)
					t[x][y] = r;
		}
		else {
			FOR(x, 1, best.nd.st)
				FOR(y, 1, best.nd.nd)
					t[x][y] = r;
		}
		
	}
	return 0;
}