H, W, M = map(int, input().split()) S = [0] * H for i in range(H): S[i] = input() INF = 10 ** 9 for i in range(H): for j in range(W): if S[i][j] == "S": x = i y = j q = [(0, x, y, 0)] v = [[[INF] * (M+1) for i in range(W)] for j in range(H)] v[x][y][0] = 0 def f(x): return ord(x) - ord("a") + 1 from collections import deque q = deque(q) dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] ans = INF while q: d, x, y, a = q.popleft() for k in range(4): nx = x + dx[k] ny = y + dy[k] if nx < 0 or H <= nx or ny < 0 or W <= ny: continue if S[nx][ny] in "S." and v[nx][ny][a] == INF: q.append((d+1, nx, ny, a)) v[nx][ny][a] = d+1 elif S[nx][ny].isnumeric(): b = int(S[nx][ny]) if v[nx][ny][b] == INF: q.append((d+1, nx, ny, b)) v[nx][ny][b] = d+1 elif S[nx][ny] in "#": continue elif S[nx][ny] == "G": ans = min(ans, d+1) else: if a == f(S[nx][ny]) and v[nx][ny][a] == INF: q.append((d+1, nx, ny, a)) v[nx][ny][a] = d+1 if ans == INF: print(-1) else: print(ans)