You already know that Valery's favorite sport is biathlon. Due to your help, he learned to shoot without missing, and his skills are unmatched at the shooting range. But now a smaller task is to be performed, he should learn to complete the path fastest.

The track's map is represented by a rectangle n × m in size divided into squares. Each square is marked with a lowercase Latin letter (which means the type of the plot), with the exception of the starting square (it is marked with a capital Latin letters S) and the terminating square (it is marked with a capital Latin letter T). The time of movement from one square to another is equal to 1 minute. The time of movement within the cell can be neglected. We can move from the cell only to side-adjacent ones, but it is forbidden to go beyond the map edges. Also the following restriction is imposed on the path: it is not allowed to visit more than k different types of squares (squares of one type can be visited an infinite number of times). Squares marked with S and T have no type, so they are not counted. But S must be visited exactly once — at the very beginning, and T must be visited exactly once — at the very end.

Your task is to find the path from the square S to the square T that takes minimum time. Among all shortest paths you should choose the lexicographically minimal one. When comparing paths you should lexicographically represent them as a sequence of characters, that is, of plot types.

Input

The first input line contains three integers n, m and k (1 ≤ n, m ≤ 50, n·m ≥ 2, 1 ≤ k ≤ 4). Then n lines contain the map. Each line has the length of exactly m characters and consists of lowercase Latin letters and characters S and T. It is guaranteed that the map contains exactly one character S and exactly one character T.

Pretest 12 is one of the maximal tests for this problem.

Output

If there is a path that satisfies the condition, print it as a sequence of letters — the plot types. Otherwise, print "-1" (without quotes). You shouldn't print the character S in the beginning and T in the end.

Note that this sequence may be empty. This case is present in pretests. You can just print nothing or print one "End of line"-character. Both will be accepted.

Examples

Input

5 3 2
Sba
ccc
aac
ccc
abT


Output

bcccc


Input

3 4 1
Sxyy
yxxx
yyyT


Output

xxxx


Input

1 3 3
TyS


Output

y


Input

1 4 1
SxyT


Output

-1
20 10 3
ebebccacdb
eeebccddeT
eadebecaac
adeeeaccbc
baccccdaed
deabceabba
dadbecbaaa
eacbbcedcb
aeeScdbbab
babaecaead
bacdbebeae
aacbadbeec
acddceecca
acaeaebaba
cdddeaaeae
eabddadade
ddddaeaeed
bccbaacadd
dccccbabdc
ecdaebeccc
 1 30 2
bmjcfldkloleiqqiTnmdjpaSckkijf
 15 15 3
cbbdccabdcbacbd
bcabdcacadacdbc
cbcddbbcdbddcad
ddcabdbbdcabbdc
aabadcccTcabdbb
cbacaaacaabdbbd
dbdcbSdabaadbdb
dbbaddcdddaadbb
bbddcdcbaccbbaa
adadadbdbbddccc
cddbbdaddcbbdcc
bbaadcdbbcaacca
adbdcdbbcbddbcd
cdadbcccddcdbda
cbcdaabdcabccbc
 10 8 2
bdcdcbfa
decffcce
dTffdacb
eeedcdbb
fdbbbcba
ddabfcda
abdbSeed
bdcdcffa
cadbaffa
fcccddad
 20 20 2
ddadfcdeTaeccbedeaec
acafdfdeaffdeabdcefe
abbcbefcdbbbcdebafef
fdafdcccbcdeeaedeffc
dfdaabdefdafabaabcef
febdcabacaaaabfacbbe
abfcaacadfdbfdbaaefd
dacceeccddccaccdbbce
cacebecabedbddfbfdad
dacbfcabbebfddcedffd
cfcdfacfadcfbcebebaa
ddfbebafaccbebeefbac
ebfaebacbbebdfcbcbea
dfbaebcfccacfeaccaad
edeedeceebcbfdbcdbbe
afaacccfbdecebfdabed
ddbdcedacedadeccaeec
ecbSeacbdcccbcedafef
cfdbeeffbeeafccfdddb
cefdbdfbabccfdaaadbf
 2 1 4
S
T
 3 5 2
SbcaT
acbab
acccb
 3 4 1
SbbT
aaaa
abba
 5 3 4
aaT
acc
bbb
bbc
cSb
 1 50 3
SaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaa
 3 3 1
aaa
aaa
TSa
 6 6 3
pkhipk
mlfmak
aqmbae
dlbfSj
dpbjcr
aTbqbm
 3 4 1
Sbbb
aaaT
abbc
 5 5 1
caTbc
dccac
dacda
aacaS
cdcab
 1 40 1
faSfgfTcfadcdfagfbccbffbeaaebagbfcfcgdfd
 1 3 3
SaT
 1 10 2
baaSaaTacb
 20 20 2
baaaaaaaaaaaaaaaaaaa
bfffffffacfffffffffa
bgggggggaccgggggggga
bhhhhhhhaccchhhhhhha
biiiiiiiacccciiiiiia
bjjjjjjjacccccjjjjja
bkkkkkkkacccccckkkka
blllllllacccccccllla
bbbbbbbbSccccccccmma
bddddddddddcccccccna
bodddddddcccccccccca
bppddddddddTaaaaaaaa
bqqqdddddddbqqqqqqqa
brrrrddddddbrrrrrrra
bsssssdddddbsssssssa
bttttttddddbttttttta
buuuuuuudddbuuuuuuua
bvvvvvvvvddbvvvvvvva
bwwwwwwwwwdbwwwwwwwa
bbbbbbbbbbbbbbbbbbbb
 10 10 2
baaaaaaaaa
bffacffffa
bggaccggga
bbbSccchha
bdddddccia
bjddccccca
bkkdddTaaa
blllddblla
bmmmmdbmma
bbbbbbbbbb
 15 3 4
llv
ttT
hbo
ogc
kfe
gli
fbx
kfp
spm
cxc
ndw
Soa
pfh
edr
xmv
 3 4 2
Sbbb
aabT
abbc
 5 10 4
aaaaaaaaaa
aaaaaTaaaa
aaaaaaaSaa
aaaaaaaaaa
aaaaaaaaaa
 10 20 3
baaaaaaaaaaaaaaaaaaa
bfffffffacfffffffffa
bgggggggaccgggggggga
bbbbbbbbSccchhhhhhha
biiiiidddddcciiiiiia
bjjjjjjddcccccjjjjja
bkkkkkkkdddTaaaaaaaa
bllllllllddbllllllla
bmmmmmmmmmdbmmmmmmma
bbbbbbbbbbbbbbbbbbbb
 1 2 4
ST
 20 10 4
baaaaaaaaa
bffacffffa
bggaccggga
bhhaccchha
biiaccccia
bjjaccccca
bkkakkkkka
bllallllla
bbbSmmmmma
bnnnnnnnna
booooooooa
bpppppTaaa
bqqqqqbqqa
brrrrrbrra
bdddddbssa
btddddbtta
buudddbuua
bvvvddbvva
bwwwwdbwwa
bbbbbbbbbb
 15 10 4
sejwprqjku
pnjsiopxft
rsplgvwixq
endglkchxl
ftihbbexgh
sxtxbbavge
jcdkusfnmr
skgsqvflia
kcxmcxjpae
amaiwcfile
njgjSunmwd
ldxvahgreu
ecmrajbjuT
naioqigols
pbwrmxkltj
 4 5 3
abaaa
babaT
Sabba
aaaaa
 1 2 1
ST
 2 1 1
S
T
 1 20 3
acbccbbddbffScTadffd

bbbcccaccaac
 -1
 aaca
 bbbbee
 -1
 aacccaa
 bb
 bbbc
 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 cbqb
 aaa
 -1
 -1
 a
 aa
 ccccc
 ccccc
 -1
 aab
 aa
 ccccc
 mmmno
 aajbju
 aaba
 c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
int r,c,k,nub;
char a[55][55];
bool ava[30],found;
int per[10],startr,startc,stopr,stopc,di[4][2],foundmin,checkpath[55][55],va[55][55],minchar,index,mark[55][55],minans,didcheckpath[55][55];
struct node {
        int x,y;
}t,g;
struct node2 {
        int ss[2505];
}ans,shortstring;
vector<node> save[2];
queue<node> q;
void bfs()
{
        found=0;
        t.x=startc;
        t.y=startr;
        nub++;
        mark[t.y][t.x]=nub;
        q.push(t);
        while(!q.empty())
        {
                g=q.front();
                q.pop();
                for(int i=0;i<4;i++)
                {
                        if(ava[a[g.y+di[i][0]][g.x+di[i][1]]-'a'] && mark[g.y+di[i][0]][g.x+di[i][1]]!=nub)
                        {
                                t.y=g.y+di[i][0];
                                t.x=g.x+di[i][1];
                                va[t.y][t.x]=va[g.y][g.x]+1;
                                mark[t.y][t.x]=nub;
                                q.push(t);
                        }
                }
        }
        /*printf("Ava = ");
        for(int i=0;i<26;i++)
        {
                if(ava[i]) printf("%c ",i+'a');
        }
        printf("\n");
        for(int i=1;i<=r;i++)
        {
                for(int j=1;j<=c;j++)
                {
                        if(mark[i][j]==nub)
                        printf("%d",va[i][j]);
                        else printf("$");
                }
                printf("\n");
        }
        system("pause");*/
}
bool dfs_find_path(int hy,int hx)
{
        if(didcheckpath[hy][hx]==nub) return (checkpath[hy][hx]==nub);
        didcheckpath[hy][hx]=nub;\
        if(hy==stopr && hx==stopc)
        {
                checkpath[hy][hx]=nub;
                return 1;
        }
        for(int i=0;i<4;i++)
        {
                if(ava[a[hy+di[i][0]][hx+di[i][1]]-'a'] && va[hy+di[i][0]][hx+di[i][1]]==va[hy][hx]+1 && dfs_find_path(hy+di[i][0],hx+di[i][1]))
                {
                        checkpath[hy][hx]=nub;
                }
        }
        return (checkpath[hy][hx]==nub);
}
void findleast()
{
        /*printf("Ava = ");
        for(int i=0;i<26;i++)
        {
                if(ava[i]) printf("%c ",i+'a');
        }
        printf("\n");
        for(int i=1;i<=r;i++)
        {
                for(int j=1;j<=c;j++)
                {
                        if(checkpath[i][j]==nub && mark[i][j]==nub)
                        printf("%d",va[i][j]);
                        else printf("$");
                }
                printf("\n");
        }*/
        //system("pause");
        t.y=startr;
        t.x=startc;
        index=0;
        save[index].clear();
        save[index].push_back(t);
        for(int i=0;i<minans;i++)
        {
                //printf("STEP %d\n",i);
                minchar=30;
                for(int j=0;j<save[index].size();j++)
                {
                        //printf("CHECK %d %d %d\n",j,save[index][j].y,save[index][j].x);
                        for(int k=0;k<4;k++)
                        {
                                if(ava[a[save[index][j].y+di[k][0]][save[index][j].x+di[k][1]]-'a'] && va[save[index][j].y+di[k][0]][save[index][j].x+di[k][1]]==va[save[index][j].y][save[index][j].x]+1 && checkpath[save[index][j].y+di[k][0]][save[index][j].x+di[k][1]]==nub)
                                {
                                        if(minchar==a[save[index][j].y+di[k][0]][save[index][j].x+di[k][1]]-'a')
                                        {
                                                t.y=save[index][j].y+di[k][0];
                                                t.x=save[index][j].x+di[k][1];
                                                save[index^1].push_back(t);
                                        }
                                        if(minchar>a[save[index][j].y+di[k][0]][save[index][j].x+di[k][1]]-'a')
                                        {
                                                minchar=a[save[index][j].y+di[k][0]][save[index][j].x+di[k][1]]-'a';
                                                save[index^1].clear();
                                                t.y=save[index][j].y+di[k][0];
                                                t.x=save[index][j].x+di[k][1];
                                                save[index^1].push_back(t);
                                        }
                                }
                        }
                }
                shortstring.ss[i]=minchar;
                index^=1;
        }
}
void permu(int h)
{
        if(h<=k)
        {
                for(int i=per[h-1]+1;i<26;i++)
                {
                        per[h]=i;
                        ava[i]=1;
                        permu(h+1);
                        ava[i]=0;
                }
                return;
        }
        bfs();
        if(dfs_find_path(startr,startc))
        {
        /*printf("Ava = ");
        for(int i=0;i<26;i++)
        {
                if(ava[i]) printf("%c ",i+'a');
        }
        printf("\n");
        for(int i=1;i<=r;i++)
        {
                for(int j=1;j<=c;j++)
                {
                        if(mark[i][j]==nub)
                        printf("%d",va[i][j]);
                        else printf("$");
                }
                printf("\n");
        }
        printf("\n");
        for(int i=1;i<=r;i++)
        {
                for(int j=1;j<=c;j++)
                {
                        if(checkpath[i][j]==nub && mark[i][j]==nub)
                        printf("%d",va[i][j]);
                        else printf("$");
                }
                printf("\n");
        }
        system("pause");*/
                if(minans==va[stopr][stopc])
                {
                        findleast();
                        for(int i=0;i<minans;i++)
                        {
                                if(ans.ss[i]>shortstring.ss[i])
                                {
                                        ans=shortstring;
                                        break;
                                }
                        }
                }
                if(minans>va[stopr][stopc])
                {
                        minans=va[stopr][stopc];
                        findleast();
                        ans=shortstring;
                }
        }
}        
int main()
{
        scanf("%d %d %d",&r,&c,&k);
        for(int i=1;i<=r;i++)
        {
                scanf("%s",a[i]+1);
        }
        //initial
        for(int i=1;i<=r;i++)
        {
                a[i][0]='a'+28;
                a[i][c+1]='a'+28;
        }
        for(int i=1;i<=c;i++)
        {
                a[0][i]='a'+28;
                a[r+1][i]='a'+28;
        }
        for(int i=1;i<=r;i++)
        {
                for(int j=1;j<=c;j++)
                {
                        if(a[i][j]=='S')
                        {
                                startr=i;
                                startc=j;
                                a[i][j]='a'+27;
                        }
                        if(a[i][j]=='T')
                        {
                                stopr=i;
                                stopc=j;
                                a[i][j]='a'+27;
                        }
                }
        }
        ava[27]=1;
        per[0]=-1;
        di[0][0]=-1;
        di[1][1]=1;
        di[2][0]=1;
        di[3][1]=-1;
        minans=1000000000;
        //permu
        permu(1);
        //print ans
        if(minans==1000000000)
        {
                printf("-1\n");
        }
        else
        {
                for(int i=0;i<minans-1;i++)
                {
                        printf("%c",ans.ss[i]+'a');
                }
                printf("\n");
        }
        //system("pause");
}
