#include #include using namespace std; const int MAXN = 200; int mat[MAXN][MAXN]; int f(int x, int y) { if (mat[x][y] == -2) { cout << x << " " << y << '\n'; cout.flush(); string ans; cin >> ans; if (ans[0] == '-') mat[x][y] = -1; else if (ans[0] == '0' && ans.size() == 1) mat[x][y] = 0; else mat[x][y] = 1; } return mat[x][y]; } int lg[MAXN + 1]; void div_et_imp(int x1, int y1, int x2, int y2) { if (x1 > x2 || y1 > y2) return; int xmed = (x1 + x2) / 2; int step = (1 << lg[y2 - y1 + 1]), res = y1; while (step) { if (res + step <= y2 && f(xmed, res + step) <= 0) res += step; step >>= 1; } if (res == y1) f(xmed, y1); div_et_imp(x1, res + 1, xmed - 1, y2); div_et_imp(xmed + 1, y1, x2, res); } int main() { for (int i = 0; i < MAXN; ++i) for (int j = 0; j < MAXN; ++j) mat[i][j] = -2; for (int i = 2; i <= MAXN; ++i) lg[i] = lg[i / 2] + 1; div_et_imp(0, 0, MAXN - 1, MAXN - 1); return 0; }