#include <iostream>
#include <cstring>
#include <queue>
#include <fstream>
#include <string>
#include<stack>
using namespace std;
struct point
{
int y;
int x;
}buf;
int direction[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int re[5][5];
int map[5][5];
int vis[5][5];
queue<point>q;
stack<point>s;
void bfs()
{
vis[buf.y][buf.x]=1;
while(!q.empty())
{
for(int i=0;i<4;i++)
{
buf.y=q.front().y+direction[i][1];
buf.x=q.front().x+direction[i][0];
if(0<=buf.x&&buf.x<5&&0<=buf.y&&buf.y<5&& !vis[buf.y][buf.x] &&map[buf.y][buf.x]==0)
{
vis[buf.y][buf.x]=1;
re[buf.x][buf.y]=i;
q.push(buf);
if(buf.x==4&&buf.y==4)
break;
}
}
q.pop();
if(buf.x==4&&buf.y==4)
break;
}
}
int main()
{
memset(vis,0,sizeof(vis));
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
scanf("%d",&map[i][j]);
buf.x=0;
buf.y=0;
q.push(buf);
bfs();
point nbuf={4,4};
s.push(nbuf);
while(buf.x!=0||buf.y!=0)
{
nbuf.y=buf.y-direction[re[buf.x][buf.y]][1];
nbuf.x=buf.x-direction[re[buf.x][buf.y]][0];
s.push(nbuf);
buf.y=nbuf.y;
buf.x=nbuf.x;
}
while(!s.empty())
{
printf("(%d, %d)\n",s.top().y,s.top().x);
s.pop();
}
return 0;
}