#include 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 vi; typedef long long ll; typedef long double ld; typedef pair 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 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; }