G. Заполнение таблицы
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Вам дана таблица размера $$$n \times m$$$. Строки пронумерованы от $$$1$$$ до $$$n$$$ сверху вниз, а столбцы — от $$$1$$$ до $$$m$$$ слева направо. Две клетки называются соседними, если у них есть общая сторона.

В таблице сделаны $$$h$$$ горизонтальных и $$$v$$$ вертикальных разрезов. $$$i$$$-й горизонтальный разрез проходит между строками $$$r_i$$$ и $$$r_i + 1$$$, а $$$j$$$-й вертикальный разрез — между столбцами $$$c_j$$$ и $$$c_j + 1$$$; каждый разрез проходит через всю таблицу. Вместе с границами таблицы разрезы делят её на $$$(h + 1) \cdot (v + 1)$$$ прямоугольных частей.

Вам нужно записать в каждую клетку таблицы положительное целое число так, чтобы выполнялись оба следующих условия:

  • в любых двух соседних клетках записаны разные числа, даже если эти клетки принадлежат разным частям;
  • каждая часть, состоящая из $$$x$$$ клеток, содержит каждое из чисел $$$1, 2, \ldots, x$$$ ровно один раз.

Найдите любой способ заполнить таблицу, удовлетворяющий этим условиям, или определите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число $$$t$$$ ($$$1 \le t \le 1000$$$) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных находятся четыре целых числа $$$n$$$, $$$m$$$, $$$h$$$ и $$$v$$$ ($$$1 \le n, m \le 1000$$$, $$$0 \le h \lt n$$$, $$$0 \le v \lt m$$$) — количество строк таблицы, количество столбцов таблицы, количество горизонтальных разрезов и количество вертикальных разрезов.

В следующей строке находятся $$$h$$$ целых чисел $$$r_1, r_2, \ldots, r_h$$$ ($$$1 \le r_1 \lt r_2 \lt \ldots \lt r_h \lt n$$$) — положения горизонтальных разрезов. Если $$$h = 0$$$, эта строка отсутствует.

В следующей строке находятся $$$v$$$ целых чисел $$$c_1, c_2, \ldots, c_v$$$ ($$$1 \le c_1 \lt c_2 \lt \ldots \lt c_v \lt m$$$) — положения вертикальных разрезов. Если $$$v = 0$$$, эта строка отсутствует.

Гарантируется, что сумма значений $$$n$$$ по всем наборам входных данных не превосходит $$$1000$$$.

Гарантируется, что сумма значений $$$m$$$ по всем наборам входных данных не превосходит $$$1000$$$.

Выходные данные

Для каждого набора входных данных, если подходящего способа заполнить таблицу не существует, выведите $$$-1$$$.

Иначе выведите $$$n$$$ строк. В $$$i$$$-й из этих строк должны находиться $$$m$$$ целых чисел — числа, записанные в клетках $$$i$$$-й строки таблицы, слева направо.

Если существует несколько подходящих способов заполнить таблицу, выведите любой из них.

Пример
Входные данные
4
3 3 0 0
1 6 0 2
1 3
5 5 2 2
2 3
2 3
4 4 2 2
1 2
1 2
Выходные данные
1 2 3
4 5 6
7 8 9
1 2 1 2 1 3
1 2 1 2 1
3 4 2 3 4
1 2 1 2 1
3 4 2 3 4
1 2 1 2 1
-1
Примечание

В первом примере один из возможных способов заполнить таблицу показан ниже:

В третьем примере пунктирные линии обозначают разрезы. Один из возможных способов заполнить таблицу показан ниже:

В четвёртом примере можно показать, что подходящего заполнения не существует.