Codeforces Round 1002 (Div. 2) |
---|
Закончено |
Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии вам нужно вывести все операции, которые нужно сделать. Вы можете делать взломы только в том случае, если решили все версии этой задачи.
Вам даны $$$n$$$ массивов, каждый из которых имеет длину $$$m$$$. Обозначим $$$j$$$-й элемент $$$i$$$-го массива как $$$a_{i, j}$$$. Гарантируется, что все $$$a_{i, j}$$$ попарно различны. За одну операцию вы можете сделать следующее:
Другими словами, вы можете вставить элемент в начало любого массива, после чего все элементы в этом и всех следующих массивах сдвигаются на один вправо. При этом последний элемент последнего массива удаляется.
Также вам дано описание массивов, которые необходимо получить после всех операций. То есть после выполнения операций $$$j$$$-й элемент в $$$i$$$-м массиве должен быть равен $$$b_{i, j}$$$. Гарантируется, что все $$$b_{i, j}$$$ попарно различны.
Определите минимальное количество операций, которое необходимо выполнить, чтобы получить нужные массивы, а также выведите саму последовательность всех операций.
Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число $$$t$$$ ($$$1 \le t \le 10^4$$$) — количество наборов входных данных. Далее следует описание наборов входных данных.
Первая строка каждого набора входных данных содержит два целых числа $$$n$$$ и $$$m$$$ ($$$1 \le n, m \le 3 \cdot 10^5$$$) — количество массивов и количество элементов в каждом массиве.
$$$i$$$-я из следующих $$$n$$$ строк содержит $$$m$$$ целых чисел $$$a_{i, 1}, a_{i, 2}, \ldots, a_{i, m}$$$ ($$$1 \le a_{i, j} \le 2 \cdot n \cdot m$$$) — элементы в $$$i$$$-м изначальном массиве. Гарантируется, что все $$$a_{i, j}$$$ попарно различны.
$$$i$$$-я из следующих $$$n$$$ строк содержит $$$m$$$ целых чисел $$$b_{i, 1}, b_{i, 2}, \ldots, b_{i, m}$$$ ($$$1 \le b_{i, j} \le 2 \cdot n \cdot m$$$) — элементы в $$$i$$$-м конечном массиве. Гарантируется, что все $$$b_{i, j}$$$ попарно различны.
Гарантируется, что сумма $$$n \cdot m$$$ по всем наборам входных данных не превосходит $$$3 \cdot 10^5$$$.
Для каждого набора входных данных выведите в первой строке единственное целое число — минимальное количество операций, которые необходимо выполнить.
Далее, для каждой операции выведите два целых числа $$$i$$$ и $$$x$$$ ($$$1 \le i \le n$$$, $$$1 \le x \le 2 \cdot n \cdot m$$$) — номер массива, куда вставляется элемент, и значение элемента, соответственно.
Если существует несколько возможных последовательностей с минимальным количеством операций, выведите любую из них.
42 22 63 41 27 81 55 4 1 2 35 4 3 2 13 31 2 34 5 67 8 911 1 212 3 413 5 64 41 2 3 45 6 7 89 10 11 1213 14 15 1617 1 2 34 18 5 67 19 8 209 21 22 10
3 1 1 2 8 2 7 5 1 1 1 2 1 3 1 4 1 5 3 1 11 2 12 3 13 6 3 20 2 18 3 19 4 22 4 21 1 17
В первом наборе входных данных подходит следующая последовательность из $$$3$$$ операций:
Во втором наборе входных данных получить нужный массив можно только за $$$5$$$ операций.
В третьем наборе входных данных подходит следующая последовательность из $$$3$$$ операций:
Название |
---|