import sys
from collections import deque

m, n = map(int, input().split())
b = [input() for i in range(m)]

snake = {}
for i, _b in enumerate(b):
    for j, c in enumerate(_b):
        if c == 'A':
            applei, applej = i, j
        if c in "0123456789abcdef":
            snake[int(c, 16)] = (i, j)

snakeL = len(snake)
if snakeL == 1:
    print (1)
    sys.exit()

def orientation(i0, j0, i1, j1, i2, j2):
    di0, di1 = i1 - i0, i2 - i1
    dj0, dj1 = j1 - j0, j2 - j1
    return di1 * dj0 - di0 * dj1

goalset = {(applei, applej)} | set(snake.values())
def isGoal(snake):
    return snake in goalset

initialSnake = tuple([snake[0][0], snake[0][1], snake[1][0], snake[1][1]] + \
        [orientation(snake[j-2][0], snake[j-2][1], snake[j-1][0], snake[j-1][1], snake[j][0], snake[j][1]) for j in range(2, snakeL)])

def do_bfs():
    visited = set();
    bfs = deque([initialSnake])
    while len(bfs) > 0:
        s = bfs.popleft()

        for d in range(-1, 2):
            ns = moveHead(s, d)
            if ns is None:
                continue

            if isGoal((ns[0], ns[1])):
                return 1

            if ns not in visited:
                visited.add(ns)
                bfs.append(ns)

    return 0

def advance(d, bi, bj, di, dj):
    if d == 0:   
        return bi + di, bj + dj
    elif d == -1:
        return bi - dj, bj + di
    elif d == 1:
        return bi + dj, bj - di

def moveHead(snake, dir):
    di = snake[0] - snake[2]
    dj = snake[1] - snake[3]

    if dir == 0:
        ni = snake[0] + di
        nj = snake[1] + dj
    elif dir == -1:
        ni = snake[0] + dj
        nj = snake[1] - di
    elif dir == 1:
        ni = snake[0] - dj
        nj = snake[1] + di

    if not (0 <= ni < m and 0 <= nj < n):
        return None

    bi, bj = snake[2:4]
    di *= -1
    dj *= -1
    for j in range(4, len(snake)-1):
        npi, npj = advance(snake[j], bi, bj, di, dj)
        if ni == npi and nj == npj:
            return None

        di, dj = npi - bi, npj - bj
        bi, bj = npi, npj

    newsnake = [ni, nj, snake[0], snake[1]]

    if len(snake) > 4:
        newsnake += [dir] + list(snake[4:len(snake)-1])

    return tuple(newsnake)

print (do_bfs())
