//Code by Patcas Csaba #include <vector> #include <string> #include <set> #include <map> #include <queue> #include <bitset> #include <stack> #include <list> #include <numeric> #include <algorithm> #include <cstdio> #include <fstream> #include <iostream> #include <sstream> #include <iomanip> #include <cctype> #include <cmath> #include <ctime> #include <cassert> using namespace std; #define LL long long #define PII pair <int, int> #define VB vector <bool> #define VI vector <int> #define VD vector <double> #define VS vector <string> #define VPII vector <pair <int, int> > #define VVI vector < VI > #define VVB vector < VB > #define FORN(i, n) for(int i = 0; i < (n); ++i) #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 REPEAT do{ #define UNTIL(x) }while(!(x)); #define SZ size() #define BG begin() #define EN end() #define CL clear() #define X first #define Y second #define RS resize #define PB push_back #define MP make_pair #define ALL(x) x.begin(), x.end() #define IN_FILE "a.in" #define OUT_FILE "a.out" #define INF 2100000000 VVI a(200, VI(200, INF)); int main() { //Read data //Solve int i = 0; int down = 0, up = 199; while (down <= up) { int j = (down + up) / 2; if (a[i][j] != INF) break; cout << i << " " << j << endl; cout.flush(); cin >> a[i][j]; if (a[i][j] == 0) return 0; if (a[i][j] < 0) down = j + 1; else up = j - 1; } FOR(i, 1, 199) { int down = 0, up = 199; while (down <= up) { int j = (down + up) / 2; if (a[i][j] != INF) break; if (a[i - 1][j] != INF && a[i - 1][j] > 0) { up = j - 1; continue; } cout << i << " " << j << endl; cout.flush(); cin >> a[i][j]; if (a[i][j] == 0) return 0; if (a[i][j] < 0) down = j + 1; else up = j - 1; } } //Write data return 0; }