import sys



file_input = sys.stdin



H, W, N = list(map(int, file_input.readline().split()))



town_map = file_input.read()



start_index = town_map.index('S')



mouse = [start_index, 0]

# position, elapsed time



from collections import deque



for goal in range(1, N + 1):

    q = deque()

    unvisited = [True] * len(town_map)

    unvisited[mouse[0]] = False

    goal = str(goal)

    while True:

        cur_pos = mouse[0]

        

        ew_pos = cur_pos % (W + 1)

        if ew_pos < (W - 1):

            next_pos = cur_pos + 1

            lot = town_map[next_pos]

            if lot != 'X' and unvisited[next_pos]:

                if lot == goal:

                    mouse = [next_pos, mouse[1] + 1]

                    break

                else:

                    m = [next_pos, mouse[1] + 1]

                    unvisited[next_pos] = False

                    q.append(m)

        if ew_pos > 0:

            next_pos = cur_pos - 1

            lot = town_map[next_pos]

            if lot != 'X' and unvisited[next_pos]:

                if lot == goal:

                    mouse = [next_pos, mouse[1] + 1]

                    break

                else:

                    m = [next_pos, mouse[1] + 1]

                    unvisited[next_pos] = False

                    q.append(m)

        

        ns_pos = cur_pos // (W + 1)

        if ns_pos < (H - 1):

            next_pos = cur_pos + W + 1

            lot = town_map[next_pos]

            if lot != 'X' and unvisited[next_pos]:

                if lot == goal:

                    mouse = [next_pos, mouse[1] + 1]

                    break

                else:

                    m = [next_pos, mouse[1] + 1]

                    unvisited[next_pos] = False

                    q.append(m)

        if ns_pos > 0:

            next_pos = cur_pos - W - 1

            lot = town_map[next_pos]

            if lot != 'X' and unvisited[next_pos]:

                if lot == goal:

                    mouse = [next_pos, mouse[1] + 1]

                    break

                else:

                    m = [next_pos, mouse[1] + 1]

                    unvisited[next_pos] = False

                    q.append(m)

        mouse = q.popleft()



print((mouse[1]))

import sys



file_input = sys.stdin



H, W, N = list(map(int, file_input.readline().split()))



town_map = 'X' * (W + 2)

for line in file_input:

    town_map += 'X' + line.rstrip() + 'X'

town_map += 'X' * (W + 2)



move = (1, -1, W + 2, -W - 2)



from collections import deque



def search(start_pos, goal_lot):

    mouse = [start_pos, 0] # position, elapsed time

    q = deque()

    unvisited = [True] * len(town_map)

    unvisited[start_pos] = False

    goal_lot

    while True:

        cur_pos = mouse[0]

        for d in move:

            next_pos = cur_pos + d

            lot = town_map[next_pos]

            if lot != 'X' and unvisited[next_pos]:

                if lot == goal_lot:

                    return (next_pos, mouse[1] + 1)

                else:

                    m = [next_pos, mouse[1] + 1]

                    unvisited[next_pos] = False

                    q.append(m)

        mouse = q.popleft()



def solve():

    start_pos = town_map.find('S')

    time = 0

    for i in range(1, N + 1):

        start_pos, t = search(start_pos, str(i))

        time += t

    print(time)



solve()

import sys

file_input = sys.stdin
H, W, N = list(map(int, file_input.readline().split()))
town_map = file_input.read()
start_index = town_map.index("S")
mouse = [start_index, 0]
# position, elapsed time
from collections import deque

for goal in range(1, N + 1):
    q = deque()
    unvisited = [True] * len(town_map)
    unvisited[mouse[0]] = False
    goal = str(goal)
    while True:
        cur_pos = mouse[0]
        ew_pos = cur_pos % (W + 1)
        if ew_pos < (W - 1):
            next_pos = cur_pos + 1
            lot = town_map[next_pos]
            if lot != "X" and unvisited[next_pos]:
                if lot == goal:
                    mouse = [next_pos, mouse[1] + 1]
                    break
                else:
                    m = [next_pos, mouse[1] + 1]
                    unvisited[next_pos] = False
                    q.append(m)
        if ew_pos > 0:
            next_pos = cur_pos - 1
            lot = town_map[next_pos]
            if lot != "X" and unvisited[next_pos]:
                if lot == goal:
                    mouse = [next_pos, mouse[1] + 1]
                    break
                else:
                    m = [next_pos, mouse[1] + 1]
                    unvisited[next_pos] = False
                    q.append(m)
        ns_pos = cur_pos // (W + 1)
        if ns_pos < (H - 1):
            next_pos = cur_pos + W + 1
            lot = town_map[next_pos]
            if lot != "X" and unvisited[next_pos]:
                if lot == goal:
                    mouse = [next_pos, mouse[1] + 1]
                    break
                else:
                    m = [next_pos, mouse[1] + 1]
                    unvisited[next_pos] = False
                    q.append(m)
        if ns_pos > 0:
            next_pos = cur_pos - W - 1
            lot = town_map[next_pos]
            if lot != "X" and unvisited[next_pos]:
                if lot == goal:
                    mouse = [next_pos, mouse[1] + 1]
                    break
                else:
                    m = [next_pos, mouse[1] + 1]
                    unvisited[next_pos] = False
                    q.append(m)
        mouse = q.popleft()
print((mouse[1]))

import sys

file_input = sys.stdin
H, W, N = list(map(int, file_input.readline().split()))
town_map = "X" * (W + 2)
for line in file_input:
    town_map += "X" + line.rstrip() + "X"
town_map += "X" * (W + 2)
move = (1, -1, W + 2, -W - 2)
from collections import deque


def search(start_pos, goal_lot):
    mouse = [start_pos, 0]  # position, elapsed time
    q = deque()
    unvisited = [True] * len(town_map)
    unvisited[start_pos] = False
    goal_lot
    while True:
        cur_pos = mouse[0]
        for d in move:
            next_pos = cur_pos + d
            lot = town_map[next_pos]
            if lot != "X" and unvisited[next_pos]:
                if lot == goal_lot:
                    return (next_pos, mouse[1] + 1)
                else:
                    m = [next_pos, mouse[1] + 1]
                    unvisited[next_pos] = False
                    q.append(m)
        mouse = q.popleft()


def solve():
    start_pos = town_map.find("S")
    time = 0
    for i in range(1, N + 1):
        start_pos, t = search(start_pos, str(i))
        time += t
    print(time)


solve()

-town_map = file_input.read() -start_index = town_map.index("S") -mouse = [start_index, 0] -# position, elapsed time +town_map = "X" * (W + 2) +for line in file_input: +    town_map += "X" + line.rstrip() + "X" +town_map += "X" * (W + 2) +move = (1, -1, W + 2, -W - 2) -for goal in range(1, N + 1): + +def search(start_pos, goal_lot): +    mouse = [start_pos, 0]  # position, elapsed time -    unvisited[mouse[0]] = False -    goal = str(goal) +    unvisited[start_pos] = False +    goal_lot -        ew_pos = cur_pos % (W + 1) -        if ew_pos < (W - 1): -            next_pos = cur_pos + 1 +        for d in move: +            next_pos = cur_pos + d -                if lot == goal: -                    mouse = [next_pos, mouse[1] + 1] -                    break -                else: -                    m = [next_pos, mouse[1] + 1] -                    unvisited[next_pos] = False -                    q.append(m) -        if ew_pos > 0: -            next_pos = cur_pos - 1 -            lot = town_map[next_pos] -            if lot != "X" and unvisited[next_pos]: -                if lot == goal: -                    mouse = [next_pos, mouse[1] + 1] -                    break -                else: -                    m = [next_pos, mouse[1] + 1] -                    unvisited[next_pos] = False -                    q.append(m) -        ns_pos = cur_pos // (W + 1) -        if ns_pos < (H - 1): -            next_pos = cur_pos + W + 1 -            lot = town_map[next_pos] -            if lot != "X" and unvisited[next_pos]: -                if lot == goal: -                    mouse = [next_pos, mouse[1] + 1] -                    break -                else: -                    m = [next_pos, mouse[1] + 1] -                    unvisited[next_pos] = False -                    q.append(m) -        if ns_pos > 0: -            next_pos = cur_pos - W - 1 -            lot = town_map[next_pos] -            if lot != "X" and unvisited[next_pos]: -                if lot == goal: -                    mouse = [next_pos, mouse[1] + 1] -                    break +                if lot == goal_lot: +                    return (next_pos, mouse[1] + 1) -print((mouse[1])) + + +def solve(): +    start_pos = town_map.find("S") +    time = 0 +    for i in range(1, N + 1): +        start_pos, t = search(start_pos, str(i)) +        time += t +    print(time) + + +solve()