아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Перестроения

시간 제한2초메모리 제한1024 MB

요약
시작 순열과 목표 순열이 주어질 때, 선택한 부분집합을 앞으로 뒤집어 옮기는 연산을 15회 이하로 사용해 순서를 바꾼다.
난이도

보통10점 중 6점

유형
구현, 시뮬레이션, 그리디
정답자
아직 제출이 없습니다

문제

Для победы над злобным клоуном в финальном сражении, Майк созвал всех своих друзей. Осталось только определиться с тактикой ведения боя, и победа в кармане.

Всего в бою будет участвовать nn друзей. Для эффективности ведения боя пронумеруем их от 11 до nn. Исходно друзья выстроились в ряд, причем на ii-е место в ряду встал друг с номером a_ia\_i. После долгих размышлений, Майк пришел к выводу, что наиболее эффективное расположение друзей будет достигнуто, если на ii-м месте в ряду будет стоять друг с номером b_ib\_i.

Для того, чтобы изменить порядок друзей в ряду, Майк может совершить несколько перестроений. Каждое перестроение происходит следующим образом: Майк выбирает некоторое непустое подмножество друзей, после чего эти друзья выходят из ряда и встают в его начало в порядке, обратном тому, в котором они стояли исходно. При этом порядок друзей, которые остались стоять в ряду, не меняется.

Например, если друзья стояли в порядке 3,4,7,6,2,5,13, 4, 7, 6, 2, 5, 1, а Майк выбрал друзей с номерами 4,7,54, 7, 5, после перестроения друзья будут стоять в порядке 5,7,4,3,6,2,15, 7, 4, 3, 6, 2, 1.

Бой с Пеннивайзом начнется довольно скоро, поэтому Майк хочет расположить друзей в желаемом порядке не более, чем за 1515 перестроений. Помогите ему справиться с этой задачей!

Обратите внимание, что минимизировать количество перестроений не требуется. Гарантируется, что, за не более чем 1515 перестроений, добиться желаемого порядка возможно.

입력

В первой строке дано одно целое число nn --- количество друзей в ряду (1≤n≤10,0001 \le n \le 10\\,000).

Вторая строка содержит nn различных целых чисел a_ia\_i от 11 до nn --- исходный порядок друзей в ряду (1≤a_i≤n1 \le a\_i \le n). Третья строка содержит nn различных целых чисел b_ib\_i от 11 до nn --- желаемый порядок друзей в ряду (1≤b_i≤n1 \le b\_i \le n).

출력

В первой строке выведите целое число kk (0≤k≤150 \le k \le 15) --- количество перестроений в найденном решении. В каждой из следующих kk строк выведите описание перестроений, которые необходимо совершить. Для каждого перестроения сначала выведите число c_ic\_i --- количество друзей, которые должны выйти из ряда (1≤c_i≤n1 \le c\_i \le n), а затем c_ic\_i различных целых чисел от 11 до nn --- номера друзей, которые должны выйти из ряда. Номера можно выводить в произвольном порядке.

힌트

В первом тесте порядок друзей изменяется следующим образом:

5,4,3,2,1→1,2,3,4,5→5,1,2,3,4→4,5,1,2,3→3,4,5,1,25, 4, 3, 2, 1 \rightarrow 1, 2, 3, 4, 5 \rightarrow 5, 1, 2, 3, 4 \rightarrow 4, 5, 1, 2, 3 \rightarrow 3, 4, 5, 1, 2

Во втором тесте порядок друзей изменяется следующим образом:

3,4,7,6,2,5,1→5,6,7,3,4,2,1→4,3,5,6,7,2,1→2,6,3,4,5,7,13, 4, 7, 6, 2, 5, 1 \rightarrow 5, 6, 7, 3, 4, 2, 1 \rightarrow 4, 3, 5, 6, 7, 2, 1 \rightarrow 2, 6, 3, 4, 5, 7, 1

예제2

  1. 예제 1

    입력
    5
    5 4 3 2 1
    3 4 5 1 2
    
    예상 출력
    4
    5 1 2 3 4 5
    1 5
    1 4
    1 3
    
  2. 예제 2

    입력
    7
    3 4 7 6 2 5 1
    2 6 3 4 5 7 1
    
    예상 출력
    3
    3 6 5 7
    3 3 4 5
    3 2 6 3