line = raw_input() n = int(line.split()[0]) piece = line.split()[1] moves = {} moves['K'] = [] moves['N'] = [] for i in range(-1, 2): for j in range(-1, 2): if i != 0 or j != 0: moves['K'] += [(i, j)] for i in range(-2, 3): for j in range(-2, 3): if i*i + j*j == 2*2 + 1*1: moves['N'] += [(i, j)] board = [] pieces = 0 pos = [] # build the graph g = {} for i in range(n): board += [raw_input()] pieces += board[-1].count(piece) for j in range(n): if board[-1][j] == piece: pos += [(i, j)] g[(i, j)] = [] def findMove(si, sj, di, dj): global board si += di sj += dj while si < n and sj < n: if board[si][sj] == piece: return [(si,sj)] si += di sj += dj return [] def findOrtho(si, sj): global board, piece res = [] for di, dj in [(0, 1), (0, -1), (1, 0), (1, -1)]: res += findMove(si, sj, di, dj) return res def findDiag(si, sj): global board, piece res = [] for di, dj in [(1, 1), (1, -1), (-1, 1), (-1, -1)]: res += findMove(si, sj, di, dj) return res for i, j in pos: neib = [] if piece == 'K' or piece == 'N': for move in moves[piece]: di = move[0] dj = move[1] if i+di >= 0 and i+di < n and j+dj >= 0 and j+dj < n and board[i+di][j+dj] == piece: neib += [(i+di,j+dj)] elif piece == 'R': neib = findOrtho(i, j) elif piece == 'B': neib = findDiag(i, j) elif piece == 'Q': neib = findOrtho(i, j) neib += findDiag(i, j) for ni, nj in neib: g[(i,j)] += [(ni, nj)] vis = set() out = [] def dfs(v, parent): global out if v in vis: return True vis.add(v) for nei in g[v]: dfs(nei, v) out += [[v, parent]] dfs(pos[0], (-1,-1)) if len(out) == pieces: print("YES") for i in out[0:-1]: print(str(i[0][0]+1) + " " + str(i[0][1]+1) + " " + str(i[1][0]+1) + " " + str(i[1][1]+1)) else: print("NO")