#include<iostream>
using namespace std;


typedef struct Punct{
	int x, y, val;
};



Punct detDiag(Punct st, Punct dr)
{
	Punct mij;
	mij.x= (st.x+dr.x)/2;
	mij.y = (st.y + dr.y)/2;
	cout<<mij.x<<' '<<mij.y<<endl;
	cout.flush();
	cin>>mij.val;

	if(st.x == dr.x && st.y == dr.y)
		return mij;
	if(mij.val==0)
		return mij;
	if(mij.val<0)
	{
		mij.x++;
		mij.y++;
		return detDiag(mij, dr);
	}
	else
		return detDiag(st, mij);
}


Punct cautare(Punct st, Punct dt)
{
	Punct x;
	if(dt.x-st.x < dt.y-st.y)
	{
		Punct dts;
		dts.y=st.y+ dt.x-st.x;
		dts.x = dt.x;
		x = detDiag(st, dts);

	}
	else
		if(dt.x-st.x > dt.y-st.y)
		{
			Punct dts;
			dts.x=st.x+ dt.y-st.y;
			dts.y = dt.y;
			x = detDiag(st, dts);
		}
		else
			x = detDiag(st, dt);

	if(x.val==0)
		return x;
	if(x.x == st.x && x.y == st.y)
		return x;
	if(x.x == dt.x && x.y == dt.y)
		return x;
	Punct st1, st2, dr1, dr2;
	if(x.val <0)
	{
		x.x++;
		x.y++;
	}
	st1.x = st.x;
	st1.y = x.y;
	dr1.x = x.x - 1;
	dr1.y = dt.y;

	st2.x = x.x;
	st2.y = st.y;
	dr2.x = dt.x;
	dr2.y = x.y - 1;

	x = cautare (st1, dr1);
	if(x.val==0)
		return x;
	x = cautare(st2, dr2);
	return x;

}



int main()
{
	int N=4;
	Punct st, dr;
	st.x = st.y = 0;
	dr.x = dr.y = N-1;
	cautare(st, dr);
	return 0;
}