from collections import defaultdict

VECTORS_R = [
    (1, 0),
    (-1, 0),
    (0, 1),
    (0, -1)
]

VECTORS_Q = [
    (1, 0),
    (-1, 0),
    (0, 1),
    (0, -1),
    (1, 1),
    (-1, -1),
    (1, -1),
    (-1, 1)
]

VECTORS_B = [
    (1, 1),
    (-1, -1),
    (1, -1),
    (-1, 1)
]

VECTORS_N = [
    (-2, 1),
    (-2, -1),
    (-1, -2),
    (-1, 2),
    (1, -2),
    (1, 2),
    (2, -1),
    (2, 1),
]

VECTORS_K = [
    (-1, -1),
    (-1, 0),
    (-1, 1),
    (0, -1),
    (0, 1),
    (1, -1),
    (1, 0),
    (1, 1),
]


N, bagr = input().split()
N = int(N)

grid = [[None for _ in range(N)] for __ in range(N)]

st_bagrov = 0
zacetn = None

for y in range(N):
    line = input()
    for x in range(N):
        grid[y][x] = line[x] != '.'
        if grid[y][x]:
            zacetn = (y, x)
            st_bagrov += 1


def sosedi(x, y):
    res = []

    vectors = None

    if bagr == 'R':
        vectors = VECTORS_R
    elif bagr == 'Q':
        vectors = VECTORS_Q
    elif bagr == 'B':
        vectors = VECTORS_B
    elif bagr == 'N':
        vectors = VECTORS_N
    elif bagr == 'K':
        vectors = VECTORS_K

    if bagr == 'R' or bagr == 'Q' or bagr == 'B':
        for dy, dx in vectors:
            yn, xn = y + dy, x + dx

            while (yn >= 0 and yn < N and xn >= 0 and xn < N):
                if grid[yn][xn]:
                    res.append((yn, xn))
                    break

                yn += dy
                xn += dx
    else:
        for dy, dx in vectors:
            yn, xn = y + dy, x + dx
            if yn >= 0 and yn < N and xn >= 0 and xn < N and grid[y + dy][x + dx]:
                res.append((yn, xn))

    return res


def dfs(w, z, x, y, visited, moves):
    visited.add((y, x))

    for y1, x1 in graf[(y, x)]:
        if (y1, x1) in visited:
            continue

        dfs(x, y, x1, y1, visited, moves)

    moves.append((x, y, w, z))


graf = defaultdict(set)
for y in range(N):
    for x in range(N):
        if grid[y][x]:
            graf[(y, x)] |= set(sosedi(x, y))


visited = set()
moves = []
dfs(None, None, zacetn[1], zacetn[0], visited, moves)

if len(visited) != st_bagrov:
    print('NO')
else:
    print('YES')
    for x, y, w, z in moves:
        if w is None:
            continue

        print(f'{x+1} {y+1} {w+1} {z+1}')
