Автоматизація складу
Компанія займається автоматизацією складу. На складі зберігаються n видів товарів, пронумерованих від 1 до n, кожен вид товару зберігається у своєму приміщенні. Товар виду i зберігається у приміщенні з номером i.
Спеціальний робот обслуговує запити на отримання товарів зі складу. Для доступу до приміщень складу робот використовує спеціальні електронні картки. Картки у робота зберігаються у спеціальному відсіку, з якого він може витягнути верхню картку. Витягнуту картку робот може повернути у відсік на будь-яке місце: на верхню позицію, між будь-якими двома картками або на саму нижню позицію.
Щоб відкрити приміщення, робот діє наступним чином. Він витягує картки з відсіку для їх зберігання і повертає їх назад у відсік, поки на верхній позиції не опиниться картка від приміщення, яке йому потрібно відкрити. Після цього, витягнувши цю картку, робот використовує її, щоб відкрити приміщення, і потім також повертає у відсік для зберігання карток. Якщо сумарно роботу знадобилося витягнути з відсіку x карток, включаючи ту, якою він зрештою відкрив приміщення, будемо говорити, що для відкриття приміщення робот здійснив x дій.
На початку робочого дня роботу надійшло замовлення на видачу m товарів: a[1]
, a[2]
, ..., a[m]
. Робот повинен видати товари саме в цьому порядку. Для цього він послідовно виконує наступні дії: відкриває приміщення, в якому лежить черговий товар, бере товар, закриває приміщення і видає товар клієнту. Після цього робот переходить до видачі наступного товару.
Спочатку електронні картки лежать у відсіку в наступному порядку, від верхньої до нижньої: b[1]
, b[2]
, ..., b[n]
. Для кожного приміщення у відсіку лежить рівно одна картка.
Час видачі товарів зі складу залежить від того, скільки разів сумарно роботу доведеться витягати верхню картку з відсіку для їх зберігання, щоб знайти картку від чергового приміщення. Необхідно таким чином вибрати місця, куди робот повинен повертати витягнуті картки, щоб мінімізувати сумарну кількість дій робота для відкриття приміщень.
Напишіть програму, яка за заданими цілими числами n і m, послідовністю видаваних товарів a[1]
, a[2]
, ..., a[m]
і початковим положенням карток у відсіку для зберігання b[1]
, b[2]
, ..., b[n]
визначає, яку мінімальну кількість дій доведеться здійснити роботу, щоб відкрити всі приміщення у необхідному порядку. Для кожної витягнутої картки необхідно також вказати позицію, на яку її потрібно повернути, щоб досягти оптимальної кількості дій.
Вхідні дані
Перша рядок містить два цілі числа n і m (1 ≤ n, m ≤ 3 * 10^5
) - кількість видів товарів і кількість товарів, які необхідно видати зі складу.
Друга рядок містить m цілих чисел a[1]
, a[2]
, ..., a[m]
(1 ≤ a[i]
≤ n) - типи товарів, які необхідно видати зі складу, перелічені в тому порядку, в якому це необхідно зробити.
Третя рядок містить n різних цілих чисел b[1]
, b[2]
, ..., b[n]
(1 ≤ b[i]
≤ n) - порядок, в якому картки спочатку знаходяться у відсіку для їх зберігання, перелічені від верхньої до нижньої.
Вихідні дані
Перша рядок повинна містити число k - мінімальну кількість дій, яку потрібно здійснити роботу, щоб видати товари у заданому порядку.
Далі виведіть k чисел. Для кожної дії робота виведіть одне число: позицію, на яку йому слід повернути витягнуту картку у відсік для зберігання. Якщо картка повертається на саму верхню позицію, слід вивести 1, якщо після однієї картки, 2, і так далі, для останньої позиції слід вивести n.
Якщо існує декілька способів мінімізувати сумарну кількість дій, виведіть будь-який з них.
Приклади
Примітка
У другому прикладі картки у відсіку робота переміщуються наступним чином: