Олимпиадный тренинг

Задача . F. Двойная сортировка II


Даны две перестановки \(a\) и \(b\), обе размера \(n\). Перестановка размера \(n\) — это массив из \(n\) элементов, в который каждое целое число от \(1\) до \(n\) входит ровно один раз. Элементы в каждой перестановке пронумерованы от \(1\) до \(n\).

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

  • выбрать целое число \(i\) от \(1\) до \(n\);
  • обозначим за \(x\) такое целое число, что \(a_x = i\). Поменять местами \(a_i\) и \(a_x\);
  • обозначим за \(y\) такое целое число, что \(b_y = i\). Поменять местами \(b_i\) и \(b_y\).

Вы должны отсортировать обе перестановки в порядке возрастания (то есть должны выполняться условия \(a_1 < a_2 < \dots < a_n\) и \(b_1 < b_2 < \dots < b_n\)) за минимальное количество операций. Обратите внимание, что обе перестановки должны быть отсортированы после того, как вы выполните выбранную вами последовательность операций.

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

В первой строке задано одно целое число \(n\) (\(2 \le n \le 3000\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\); все \(a_i\) различны).

В третьей строке заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le n\); все \(b_i\) различны).

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

Сначала выведите одно целое число \(k\) (\(0 \le k \le 2n\)) — минимальное количество операций, за которое можно отсортировать обе перестановки. Обратите внимание: можно показать, что \(2n\) операций всегда достаточно.

Затем выведите \(k\) целых чисел \(op_1, op_2, \dots, op_k\) (\(1 \le op_j \le n\)), где \(op_j\) — значение \(i\), выбранное для \(j\)-й операции.

Если ответов несколько, выведите любой из них.


Примеры
Входные данныеВыходные данные
1 5
1 3 2 4 5
2 1 3 4 5
1
2
2 2
1 2
1 2
0
3 4
1 3 4 2
4 3 2 1
2
3 4

time 2000 ms
memory 512 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя