#include<iostream>
#include<string>
#include<string.h>
#include<math.h>
#include<cstdio>
#include<stack>
#include<queue>
#define maxn 101
using namespace std;
char mapp[maxn][maxn];
int visited[maxn][maxn],n,m;
int dir[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
struct node{
int x;
int y;
int second;
int x_next;
int y_next;
friend bool operator< (node a, node b){return a.second > b.second;} //按照时间顺序从小到大
};
node path[maxn][maxn];
node en;
stack<node> S;
priority_queue <node> pq;
int bfs(){
while(!pq.empty()){
node temp,next;
temp=pq.top();
if(temp.x==n-1&&temp.y==m-1){
en.x=temp.x;
en.y=temp.y;
en.x_next=0;
en.y_next=0;
return temp.second;
}
pq.pop();
for(int i=0;i<4;i++){
next.x=temp.x+dir[i][0];
next.y=temp.y+dir[i][1];
if(next.x>=0&&next.x<n&&next.y>=0&&next.y<m&&visited[next.x][next.y]==0){
if(mapp[next.x][next.y]=='.'){
next.second=temp.second+1;
visited[next.x][next.y]=1;
temp.x_next=next.x;
temp.y_next=next.y;
path[next.x][next.y]=temp;
pq.push(next);
}else if(mapp[next.x][next.y]>'0'&&mapp[next.x][next.y]<='9'){
next.second=temp.second+1+(mapp[next.x][next.y]-'0');
visited[next.x][next.y]=1;
temp.x_next=next.x;
temp.y_next=next.y;
path[next.x][next.y]=temp;
// cout<<temp.x_next<<" "<<temp.y_next<<endl;
pq.push(next);
}
}
}
}
return -1;
}
int main(){
while(cin>>n>>m){
memset(visited,0,sizeof(visited));
memset(mapp,0,sizeof(mapp));
memset(path,0,sizeof(path));
while(!pq.empty()) pq.pop();
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>mapp[i][j];
}
}
visited[0][0]=1;
node t1;
t1.x=0;t1.y=0;t1.second=0;
pq.push(t1);
int t=bfs();
if(t==-1)
cout<<"God please help our poor hero."<<endl;
else{
cout<<"It takes "<<t<<" seconds to reach the target position, let me show you the way."<<endl;
S.push(en);
node temp=path[en.x][en.y];
while(temp.x||temp.y){
S.push(temp);
// cout<<temp.x<<" "<<temp.y<<endl;
temp = path[temp.x][temp.y];
}
S.push(temp);
int num = 1;
while(!S.empty()){
temp = S.top();
S.pop();
if(mapp[temp.x][temp.y] == '.' && !(temp.x_next == 0 && temp.y_next == 0)){
printf("%ds:(%d,%d)->(%d,%d)\n", num ++, temp.x, temp.y, temp.x_next, temp.y_next);
}
else if(mapp[temp.x][temp.y] >='0' && mapp[temp.x][temp.y] <= '9'){
int t = mapp[temp.x][temp.y] - '0';
while(t --){
printf("%ds:FIGHT AT (%d,%d)\n", num ++, temp.x, temp.y);
}
if(!(temp.x_next == 0 && temp.y_next == 0)){
printf("%ds:(%d,%d)->(%d,%d)\n", num ++, temp.x, temp.y, temp.x_next, temp.y_next);
}
}
}
}
printf("FINISH\n");
}
return 0;
}