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 <bits/stdc++.h>
using namespace std;
int n, m, limit;
char grid[55][55], graph[55][55];
bool valid[200];
int dist[55][55];
pair<int, int> previous[55][55], ini, fim;
vector<pair<int, int> > neigh[55][55];
int cx[4] = {-1, 1, 0, 0};
int cy[4] = {0, 0, -1, 1};
bool cmp(pair<int, int> a, pair<int, int> b) {
  return grid[a.first][a.second] < grid[b.first][b.second];
}
void get_neigh(int a, int b) {
  if (a > 0) neigh[a][b].push_back(pair<int, int>(a - 1, b));
  if (a < n - 1) neigh[a][b].push_back(pair<int, int>(a + 1, b));
  if (b > 0) neigh[a][b].push_back(pair<int, int>(a, b - 1));
  if (b < m - 1) neigh[a][b].push_back(pair<int, int>(a, b + 1));
  sort(neigh[a][b].begin(), neigh[a][b].end(), cmp);
}
string bfs() {
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) dist[i][j] = 1000000000;
  previous[ini.first][ini.second] = pair<int, int>(-1, -1);
  queue<pair<int, int> > fila;
  dist[ini.first][ini.second] = 0;
  fila.push(ini);
  while (!fila.empty()) {
    pair<int, int> u = fila.front();
    fila.pop();
    for (pair<int, int> v : neigh[u.first][u.second])
      if (graph[v.first][v.second] != '*' &&
          dist[v.first][v.second] > dist[u.first][u.second] + 1) {
        dist[v.first][v.second] = dist[u.first][u.second] + 1;
        previous[v.first][v.second] = u;
        fila.push(v);
      }
  }
  if (dist[fim.first][fim.second] == 1000000000) return "";
  string best = "";
  for (int i = 0; i < n * m; i++) best += 'z';
  for (int i = 0; i < 4; i++) {
    int a = fim.first + cx[i], b = fim.second + cy[i];
    if (a < 0 || a >= n || b < 0 || b >= m) continue;
    if (dist[a][b] == 1000000000) continue;
    string ret = "";
    ret += graph[a][b];
    pair<int, int> aux = previous[a][b];
    while (previous[aux.first][aux.second] != pair<int, int>(-1, -1)) {
      ret += graph[aux.first][aux.second];
      aux = previous[aux.first][aux.second];
    }
    reverse(ret.begin(), ret.end());
    if (ret < best && ret.size() <= best.size())
      best = ret;
    else if (ret.size() < best.size())
      best = ret;
  }
  return best;
}
int main() {
  scanf("%d %d %d", &n, &m, &limit);
  for (int i = 0; i < n; i++) scanf("%s", grid[i]);
  if (n * m == 2) {
    printf("\n");
    exit(0);
  }
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      if (grid[i][j] == 'S')
        ini = pair<int, int>(i, j);
      else if (grid[i][j] == 'T')
        fim = pair<int, int>(i, j);
    }
  valid['S'] = valid['T'] = true;
  vector<char> initial;
  if (ini.first > 0 && grid[ini.first - 1][ini.second] != 'T')
    initial.push_back(grid[ini.first - 1][ini.second]);
  if (ini.first < n - 1 && grid[ini.first + 1][ini.second] != 'T')
    initial.push_back(grid[ini.first + 1][ini.second]);
  if (ini.second > 0 && grid[ini.first][ini.second - 1] != 'T')
    initial.push_back(grid[ini.first][ini.second - 1]);
  if (ini.second < m - 1 && grid[ini.first][ini.second + 1] != 'T')
    initial.push_back(grid[ini.first][ini.second + 1]);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) get_neigh(i, j);
  string ans = "";
  for (int i = 0; i < 2500; i++) ans += 'z';
  for (int i = 0; i < initial.size(); i++)
    for (int j = 97; j < 123; j++)
      for (int k = j + 1; k < 123; k++)
        for (int l = k + 1; l < 123; l++) {
          valid[initial[i]] = true;
          if (limit > 1) valid[j] = true;
          if (limit > 2) valid[k] = true;
          if (limit > 3) valid[l] = true;
          for (int x = 0; x < n; x++)
            for (int y = 0; y < m; y++) {
              if (valid[grid[x][y]])
                graph[x][y] = grid[x][y];
              else
                graph[x][y] = '*';
            }
          string aux = bfs();
          if (dist[fim.first][fim.second] < 1000000000) {
            if (aux < ans && aux.size() <= ans.size())
              ans = aux;
            else if (aux.size() < ans.size())
              ans = aux;
          }
          valid[initial[i]] = valid[j] = valid[k] = valid[l] = false;
        }
  if (ans.size() == 2500)
    printf("-1\n");
  else
    cout << ans << endl;
  return 0;
}
