Одной из самых популярных игр всех времён и народов является игра «Лабиринт». Игра происходит на клетчатом поле N × M. Игрок может произносить команды «влево», «вправо», «вверх», «вниз». Для каждой клетки поля и каждой команды ведущим определено поле, на которое переместится игрок (то есть дана карта лабиринта). Однажды игра была прервана, и ведущий забыл, на каком поле находится игрок. К счастью, сохранилась полная запись игры — последовательность команд, произнесённых игроком. Напишите программу для определения полей, в которых игрок может находиться сейчас.
Исходные данные
В первой строке находятся числа N и M (1 ≤ N,M ≤ 100).
Далее идут 4 блока данных. В каждом блоке N строк. В каждой строке M пар:
i-я пара в j-й строке в k-м блоке показывает координаты игрока после произнесения k-й команды на клетке с координатами (j, i). Далее идет число команд S (1 ≤ S ≤ 4000), произнесённых игроком. На следующей строке идут S чисел — номера этих команд.
Результат
В первой строке выведите число L клеток, на которых может оказаться игрок после выполнения заданной последовательности команд. На следующих L строках — координаты этих клеток, упорядоченных сначала по первой координате, а потом по второй.
Пример
исходные данные | результат |
---|
2 3
1 2 1 3 1 3
2 2 2 3 2 3
2 1 2 2 2 3
2 1 2 2 2 3
1 1 1 1 1 2
2 1 2 1 2 2
1 1 1 2 1 3
1 1 1 2 1 3
4
1 2 3 4 | 2
1 1
1 2 |
Автор задачи: Андрей Халявин
Источник задачи: Petrozavodsk summer training camp, August 2005.