h, w, m = map(int, input().split()) S = [input() for _ in range(h)] for y in range(h): for x in range(w): if S[y][x] == "S": sy, sx = y, x elif S[y][x] == "G": gy, gx = y, x N = h * w dp = [-1] * N * 10 dp[(sy*w+sx)*10] = 0 from collections import deque dq = deque([(sy, sx, 0)]) dy = [0, 0, 1, -1] dx = [1, -1, 0, 0] while dq: y, x, k = dq.popleft() now = dp[(y*w+x)*10+k] for d in range(4): ny, nx = y + dy[d], x + dx[d] if 0 <= ny < h and 0 <= nx < w and S[ny][nx] != "#": if S[ny][nx] in "0123456789": a = int(S[ny][nx]) if dp[(ny*w+nx)*10+a] == -1: dp[(ny*w+nx)*10+a] = now + 1 dq.append((ny, nx, a)) elif S[ny][nx] in "abcdefghi": a = ord(S[ny][nx]) - ord("a") + 1 if a == k and dp[(ny*w+nx)*10+a] == -1: dp[(ny*w+nx)*10+a] = now + 1 dq.append((ny, nx, a)) else: if dp[(ny*w+nx)*10+k] == -1: dp[(ny*w+nx)*10+k] = now + 1 dq.append((ny, nx, k)) ans = 1 << 30 for i in range(10): if dp[(gy*w+gx)*10+i] != -1: ans = min(ans, dp[(gy*w+gx)*10+i]) if ans == 1 << 30: print(-1) else: print(ans)