만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

패리티 정렬

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

요약
0부터 n-1까지의 순열을 최대 30번의 연산으로 오름차순 정렬합니다. 각 연산은 선택한 위치의 값을 짝수와 홀수로 나누어 다시 배열합니다.
난이도

어려움10점 중 9점

유형
정렬, 비트 연산, 구현
정답자
아직 제출이 없습니다

문제

길이가 nn인 순열 PP가 주어진다. 이 문제에서 순열의 원소는 00부터 n−1n - 1까지의 정수이다.

PP를 오름차순으로 정렬하려면 아래 연산을 최대 3030번 수행한다.

연산은 두 개의 매개변수로 정해진다. 연산의 모드를 나타내는 정수 tt(0≤t≤10 \le t \le 1)와 0과 1로만 이루어진 길이 nn의 문자열 SS이다.

처음에 비어 있는 수열 AA와 BB가 있다.

다음으로 ii를 11부터 nn까지 바꾸며 아래 단계를 반복한다.

  • Si=0S_i = 0이면 아무것도 하지 않는다.
  • Si=1S_i = 1이면 PiP_i가 짝수일 때 PiP_i를 AA의 끝에 추가한다. 홀수이면 BB의 끝에 추가한다.

t=0t = 0이면 수열 CC는 AA와 BB를 이 순서로 이어 붙인 것이다.

t=1t = 1이면 수열 CC는 BB와 AA를 이 순서로 이어 붙인 것이다.

다음으로 ii를 11부터 nn까지 바꾸며 아래 단계를 반복한다.

  • Si=0S_i = 0이면 아무것도 하지 않는다.
  • Si=1S_i = 1이면 PiP_i를 CC의 첫 번째 원소로 바꾸고, 그 원소를 CC에서 제거한다.

예를 들어 n=7n = 7, P={0,4,2,3,6,5,1}P = \{0, 4, 2, 3, 6, 5, 1\}, t=1t = 1, S=‘1101101‘S = `1101101`을 택하면 과정은 아래 그림과 같다.

입력

첫 번째 줄에 정수 nn(1≤n≤15 0001 \le n \le 15\,000)이 주어진다. 두 번째 줄에는 정수 PiP_i(0≤Pi≤n−10 \le P_i \le n - 1) nn개가 주어진다. 모든 PiP_i는 서로 다르다.

출력

가능한 정렬 과정 중 하나를 다음 형식으로 출력한다.

첫 줄에 연산 횟수 kk(0≤k≤300 \le k \le 30)를 출력한다.

다음 kk개의 줄에는 ii번째 연산을 나타내는 정수 tit_i(0≤ti≤10 \le t_i \le 1)와 길이 nn인 이진 문자열 SS를 출력한다.

가능한 답이 여러 개이면 그중 아무거나 출력해도 된다. 연산 횟수를 최소로 만들 필요는 없다.

예제1

  1. 예제 1

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