#include<stdio.h>
#include<algorithm>
#include<queue>
#define fi first
#define se second
using namespace std;
char C[1100][1100];
int A[1100][1100], n;
int f(int a, int b){
    int i, j;
    pair<int, pair<int, int> > k;
    queue <pair<int, pair<int,int> > >Q;
    for(i=0;i<=n;i++) for(j=0;j<=n;j++) A[i][j]=0;
    Q.push({1,{a,b}});
    A[a][b]=1;
    while(!Q.empty()){
        k = Q.front();
        Q.pop();
        i = k.se.fi;
        j = k.se.se;
        if(A[i-1][j]==0 and (C[i-1][j]=='.' or C[i-1][j]=='S' or C[i-1][j]=='G')){
            Q.push({k.fi+1,{i-1,j}});
            A[i-1][j]=1;
        }
        if(A[i][j-1]==0 and (C[i][j-1]=='.' or C[i][j-1]=='S' or C[i][j-1]=='G')){
            Q.push({k.fi+1,{i,j-1}});
            A[i][j-1]=1;
        }
        if(A[i+1][j]==0 and(C[i+1][j]=='.' or C[i+1][j]=='S' or C[i+1][j]=='G')){
            Q.push({k.fi+1,{i+1,j}});
            A[i+1][j]=1;
        }
        if(A[i][j+1]==0 and (C[i][j+1]=='.' or C[i-1][j+1]=='S' or C[i][j+1]=='G')){
            Q.push({k.fi+1,{i,j+1}});
            A[i][j+1]=1;
        }
        if(C[i-1][j]=='T' or C[i][j-1]=='T' or C[i+1][j]=='T' or C[i][j+1]=='T') return k.fi;
    }
    return -1;
}
int main(){
    int i, j, a=0;
    scanf("%d",&n);
    for(i=0;i<n;i++) scanf("%s",C[i]);
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            if(C[i][j]=='S'){
                a = f(i,j);
            }else if(C[i][j]=='G'){
                a = a + f(i,j);
            }
        }
    }
    printf("%d", a);
}
