/***************************************************
 * Alex Palcuie
 * Romania - 2016
 * alex [dot] palcuie [at] gmail [dot] com
 * http://blog.palcu.ro/
****************************************************/

#include <algorithm>
#include <bitset>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <fstream>
#include <iostream>
#include <iterator>
#include <limits>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>

using namespace std;

const int N = 4;
const int INF = 0x3f3f3f3f;

int m[N][N];
void get(int x, int y) {
    if (m[x][y])
        return;
    else {
        cout << x << " " << y << "\n"; cout.flush();
        cin >> m[x][y];
        if (m[x][y] == 0)
            exit(0);
    }
}
int main() {
    int x1=0, x2=N-1;
    int y1=0, y2=N-1;
    int mid;

    while (true) {
        mid = (x1 + x2) / 2;
        get(0, mid);
        get(0, mid-1);
        if (m[0][mid-1] < 0 && m[0][mid] > 0) {
            mid = mid-1;
            break;
        }
        get(0, mid+1);
        if (m[0][mid+1] > 0 && m[0][mid] < 0) {
            break;
        }
        if (m[0][mid] > 0) {
            x2 = mid - 1;
        } else {
            x1 = mid + 1;
        }
    }

    while (true) {
        int ymid = (y1 + y2) / 2;
        get(ymid, mid);
        get(ymid+1, mid);
        get(ymid-1, mid);
        if (m[ymid][mid] > 0) {
            y2 = ymid-1;
        } else {
            y1 = mid+1;
        }
    }
    
    return 0;
}