import sys from collections import defaultdict from itertools import product _around_stencil = [(i, j) for i, j in product([-1, 0, 1], repeat=2) if (i, j) != (0, 0)] def empty_board(n, m): board = [] for i in xrange(N): board.append([False] * m) return board def around(I, J): def f(i, j): for _i, _j in _around_stencil: yield (i + _i, j + _j) return f(I, J) N, M, K = [int(i) for i in sys.stdin.readline().split()] board = empty_board(N, M) bombs = [] for line in range(K): x, y = [int(i) for i in sys.stdin.readline().strip().split()] board[x][y] = True bombs.append((x, y)) click = tuple(int(i) for i in sys.stdin.readline().strip().split()) if click in bombs: sys.exit() adjacent_to_bombs = defaultdict(int) for bomb in bombs: for ni, nj in around(*bomb): if ni >= 0 and nj >= 0 and ni < N and nj < M and [ni, nj] not in bombs: adjacent_to_bombs[ni, nj] += 1 if tuple(click) in adjacent_to_bombs.keys(): sys.exit() for line in board: print line unobscured = {} visited = {} def seek_and_destroy(dude, unobscured): if dude in unobscured: return unobscured[dude] = True to_recurse = {} for ni, nj in around(*dude): if (ni >= 0 and nj >= 0 and ni < N and nj < M) and \ ((ni, nj) not in bombs): candidate = (ni, nj) unobscured[candidate] = True to_recurse[candidate] = True print ">>>", to_recurse.keys() for c in to_recurse.keys(): seek_and_destroy(c, unobscured) seek_and_destroy(click, unobscured) print "\n\n" print "\n".join('{} {}'.format(*i) for i in sorted(unobscured.keys()))