package re2;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Vector;
public class Main {
public Vector<Integer> start_pos=new Vector<Integer>();
public Vector<Integer> target_pos=new Vector<Integer>();
public ArrayList<Vector<Integer>> availForStart=new ArrayList<Vector<Integer>>();
public ArrayList<Vector<Integer>> availForend=new ArrayList<Vector<Integer>>();
public boolean flag=false;
public static void main(String[] args) {
Main s=new Main();
int[][] layout=s.getLayout();
System.out.println(s.getAnswer(layout));
}
public String getAnswer(int[][] layout)
{
String answer="I'm stuck!";
int count=0;
calAvailable(layout,start_pos,availForStart);
availForStart.remove(0);
if(availForStart.isEmpty())
return answer;
else
{
for(Vector<Integer> forStart:availForStart)
{
flag=false;
availForend.clear();
arrivalEnd(layout,forStart,availForend);
if(!flag)
count++;
}
return count+"";
}
}
public void calAvailable(int[][] layout,Vector<Integer> pos,ArrayList<Vector<Integer>> container)
{
int i=(int)pos.get(0);
int j=(int)pos.get(1);
if(!(j<layout[0].length && j>=0) || !(i<layout.length && i>=0))
return;
if(container.contains(pos))
return;
int element=layout[i][j];
switch(element)
{
case 0:
break;
case 1 :
container.add(pos);
Vector<Integer> avilPos1=new Vector<Integer>() ;
avilPos1.add(0, i);
avilPos1.add(1, j+1);
calAvailable(layout,avilPos1, container);
Vector<Integer> avilPos2=new Vector<Integer>() ;
avilPos2.add(0, i);
avilPos2.add(1, j-1);
calAvailable(layout,avilPos2,container);
Vector<Integer> avilPos3=new Vector<Integer>() ;
avilPos3.add(0, i+1);
avilPos3.add(1, j);
calAvailable(layout,avilPos3,container);
Vector<Integer> avilPos4=new Vector<Integer>() ;
avilPos4.add(0, i-1);
avilPos4.add(1, j);
calAvailable(layout,avilPos4,container);
break;
case 2:
container.add(pos);
Vector<Integer> avilPos5=new Vector<Integer>() ;
avilPos5.add(0, i);
avilPos5.add(1, j+1);
calAvailable(layout,avilPos5,container);
Vector<Integer> avilPos6=new Vector<Integer>() ;
avilPos6.add(0, i);
avilPos6.add(1, j-1);
calAvailable(layout,avilPos6,container);
break;
case 3:
container.add(pos);
Vector<Integer> avilPos7=new Vector<Integer>() ;
avilPos7.add(0, i+1);
avilPos7.add(1, j);
calAvailable(layout,avilPos7,container);
Vector<Integer> avilPos8=new Vector<Integer>() ;
avilPos8.add(0, i-1);
avilPos8.add(1, j);
calAvailable(layout,avilPos8,container);
break;
case 4:
container.add(pos);
Vector<Integer> avilPos9=new Vector<Integer>() ;
avilPos9.add(0, i+1);
avilPos9.add(1, j);
calAvailable(layout,avilPos9,container);
break;
case 5 :
container.add(pos);
Vector<Integer> avilPos10=new Vector<Integer>() ;
avilPos10.add(0, i);
avilPos10.add(1, j+1);
calAvailable(layout,avilPos10, container);
Vector<Integer> avilPos11=new Vector<Integer>() ;
avilPos11.add(0, i);
avilPos11.add(1, j-1);
calAvailable(layout,avilPos11,container);
Vector<Integer> avilPos12=new Vector<Integer>() ;
avilPos12.add(0, i+1);
avilPos12.add(1, j);
calAvailable(layout,avilPos12,container);
Vector<Integer> avilPos13=new Vector<Integer>() ;
avilPos13.add(0, i-1);
avilPos13.add(1, j);
calAvailable(layout,avilPos13,container);
break;
case 6 :
container.add(pos);
Vector<Integer> avilPos14=new Vector<Integer>() ;
avilPos14.add(0, i);
avilPos14.add(1, j+1);
calAvailable(layout,avilPos14, container);
Vector<Integer> avilPos15=new Vector<Integer>() ;
avilPos15.add(0, i);
avilPos15.add(1, j-1);
calAvailable(layout,avilPos15,container);
Vector<Integer> avilPos16=new Vector<Integer>() ;
avilPos16.add(0, i+1);
avilPos16.add(1, j);
calAvailable(layout,avilPos16,container);
Vector<Integer> avilPos17=new Vector<Integer>() ;
avilPos17.add(0, i-1);
avilPos17.add(1, j);
calAvailable(layout,avilPos17,container);
break;
}
}
public void arrivalEnd(int[][] layout,Vector<Integer> pos,ArrayList<Vector<Integer>> container)
{
int i=(int)pos.get(0);
int j=(int)pos.get(1);
if(!(j<layout[0].length && j>=0) || !(i<layout.length && i>=0))
return;
if(container.contains(pos))
return;
int element=layout[i][j];
switch(element)
{
case 0:
break;
case 1 :
container.add(pos);
Vector<Integer> avilPos1=new Vector<Integer>() ;
avilPos1.add(0, i);
avilPos1.add(1, j+1);
arrivalEnd(layout,avilPos1, container);
Vector<Integer> avilPos2=new Vector<Integer>() ;
avilPos2.add(0, i);
avilPos2.add(1, j-1);
arrivalEnd(layout,avilPos2,container);
Vector<Integer> avilPos3=new Vector<Integer>() ;
avilPos3.add(0, i+1);
avilPos3.add(1, j);
arrivalEnd(layout,avilPos3,container);
Vector<Integer> avilPos4=new Vector<Integer>() ;
avilPos4.add(0, i-1);
avilPos4.add(1, j);
arrivalEnd(layout,avilPos4,container);
break;
case 2:
container.add(pos);
Vector<Integer> avilPos5=new Vector<Integer>() ;
avilPos5.add(0, i);
avilPos5.add(1, j+1);
arrivalEnd(layout,avilPos5,container);
Vector<Integer> avilPos6=new Vector<Integer>() ;
avilPos6.add(0, i);
avilPos6.add(1, j-1);
arrivalEnd(layout,avilPos6,container);
break;
case 3:
container.add(pos);
Vector<Integer> avilPos7=new Vector<Integer>() ;
avilPos7.add(0, i+1);
avilPos7.add(1, j);
arrivalEnd(layout,avilPos7,container);
Vector<Integer> avilPos8=new Vector<Integer>() ;
avilPos8.add(0, i-1);
avilPos8.add(1, j);
arrivalEnd(layout,avilPos8,container);
break;
case 4:
container.add(pos);
Vector<Integer> avilPos9=new Vector<Integer>() ;
avilPos9.add(0, i+1);
avilPos9.add(1, j);
arrivalEnd(layout,avilPos9,container);
break;
case 5 :
container.add(pos);
Vector<Integer> avilPos10=new Vector<Integer>() ;
avilPos10.add(0, i);
avilPos10.add(1, j+1);
arrivalEnd(layout,avilPos10, container);
Vector<Integer> avilPos11=new Vector<Integer>() ;
avilPos11.add(0, i);
avilPos11.add(1, j-1);
arrivalEnd(layout,avilPos11,container);
Vector<Integer> avilPos12=new Vector<Integer>() ;
avilPos12.add(0, i+1);
avilPos12.add(1, j);
arrivalEnd(layout,avilPos12,container);
Vector<Integer> avilPos13=new Vector<Integer>() ;
avilPos13.add(0, i-1);
avilPos13.add(1, j);
arrivalEnd(layout,avilPos13,container);
break;
case 6 :
flag=true;
break;
}
}
public int[][] getLayout()
{
Scanner sc=new Scanner(System.in);
int row=sc.nextInt();
int col=sc.nextInt();
int[][] layout=new int[row][col];
for(int j=0;j<row;j++)
{
char[] chares=sc.next().toCharArray();
for(int i=0;i<col;i++)
{
layout[j][i]=parseChar(chares[i]);
if(layout[j][i]==5)
{
start_pos.add(0, j);
start_pos.add(1, i);
}
if(layout[j][i]==6)
{
target_pos.add(0, j);
target_pos.add(1, i);
}
}
}
sc.close();
return layout;
}
public int parseChar(char cha)
{
int ans=0;
switch (cha)
{
case '#':ans= 0;break;
case '+':ans= 1;break;
case '-':ans= 2;break;
case '|':ans= 3;break;
case '.':ans= 4;break;
case 'S':ans= 5;break;
case 'T':ans= 6;break;
}
return ans;
}
}