#include <bits/stdc++.h>
using namespace std;
char Flag[5][5];
int check()
{
for(int i=1;i<=3;i++)
{
bool vis=true;
for(int j=1;j<=3;j++) vis&=(Flag[i][j]==Flag[i][1]);
if(vis)
{
if(Flag[i][1]=='O') return 1;
else return -1;
}
}
for(int i=1;i<=3;i++)
{
bool vis=true;
for(int j=1;j<=3;j++) vis&=(Flag[j][i]==Flag[1][i]);
if(vis)
{
if(Flag[1][i]=='O') return 1;
else return -1;
}
}
bool vis1=true;
for(int i=1;i<=3;i++) vis1&=(Flag[i][i]==Flag[1][1]);
if(vis1)
{
if(Flag[1][1]=='O') return 1;
else return -1;
}
bool vis2=true;
for(int i=1;i<=3;i++) vis2&=(Flag[i][4-i]==Flag[1][3]);
if(vis2)
{
if(Flag[1][3]=='O') return 1;
else return -1;
}
return 0;
}
pair<int,int> checkwin()
{
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(Flag[i][j]!='-') continue;
Flag[i][j]='O';
int id=check();
Flag[i][j]='-';
if(id==1) return make_pair(i,j);
}
}
return make_pair(-1,-1);
}
pair<int,int> checklose()
{
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(Flag[i][j]!='-') continue;
Flag[i][j]='X';
int id=check();
Flag[i][j]='-';
if(id==-1) return make_pair(i,j);
}
}
return make_pair(-1,-1);
}
pair<int,int> checkangle()
{
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(i==2||j==2) continue;
Flag[i][j]='O';
pair<int,int> ans=checkwin();
int id=0;
if(ans.first!=-1&&ans.second!=-1) id=1;
Flag[i][j]='-';
if(id==1) return make_pair(i,j);
}
}
return make_pair(-1,-1);
}
pair<int,int> checkside()
{
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(i!=2&&j!=2) continue;
if(i==2&&j==2) continue;
Flag[i][j]='O';
pair<int,int> ans=checkwin();
int id=0;
if(ans.first!=-1&&ans.second!=-1) id=1;
Flag[i][j]='-';
if(id==1) return make_pair(i,j);
}
}
return make_pair(-1,-1);
}
int main()
{
srand(time(NULL));
int X,Y;
cin>>X>>Y;
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++) Flag[i][j]='-';
}
Flag[X][Y]='X';
int flag=0;
int XX=0,YY=0;
int xx=0,yy=0;
for(int i=1;i<=4;i++)
{
pair<int,int> ans;
int xxx,yyy;
ans=checkwin();
xxx=ans.first;
yyy=ans.second;
if(xxx!=-1&&yyy!=-1)
{
cout<<xxx<<" "<<yyy<<endl;
Flag[xxx][yyy]='O';
}
else
{
ans=checklose();
xxx=ans.first;
yyy=ans.second;
if(xxx!=-1&&yyy!=-1)
{
cout<<xxx<<" "<<yyy<<endl;
Flag[xxx][yyy]='O';
}
else
{
if(Flag[2][2]=='-')
{
cout<<2<<" "<<2<<endl;
Flag[2][2]='O';
}
else
{
ans=checkangle();
xxx=ans.first,yyy=ans.second;
if(xxx!=-1&&yyy!=-1)
{
cout<<xxx<<" "<<yyy<<endl;
Flag[xxx][yyy]='O';
}
else
{
ans=checkside();
xxx=ans.first,yyy=ans.second;
if(xxx!=-1&&yyy!=-1)
{
cout<<xxx<<" "<<yyy<<endl;
Flag[xxx][yyy]='O';
}
else
{
int cnt=0;
int id=0;
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(Flag[i][j]=='-') cnt++;
}
}
id=rand()%cnt+1;
int tmp=0;
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(Flag[i][j]=='-')
{
tmp++;
if(id==tmp)
{
xxx=i;
yyy=j;
}
}
}
}
cout<<xxx<<" "<<yyy<<endl;
}
}
}
}
}
int x,y;
cin>>x>>y;
Flag[x][y]='X';
int now=check();
if(now==-1||now==1) return 0;
}
return 0;
}