만드는 중입니다

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

순열과 연산

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

요약
1부터 N까지 한 번씩 나오는 순열이 주어졌을 때, 인접한 원소 교환과 구간 변환 연산을 1번 이상 4번 이하로 사용해 모든 원소를 같게 만들 수 있는지 판단합니다.
난이도

어려움10점 중 8점

유형
배열, 구현
정답자
아직 제출이 없습니다

문제

11부터 NN까지의 정수를 하나씩 원소로 가지는 수열 A_1,A_2,⋯ ,A_NA\_1,A\_2,\cdots,A\_N이 주어진다.

다음 두 가지 연산을 최소 11번, 최대 44번 사용해서 수열의 모든 원소를 같은 값으로 만들어 보자.

  • 1 i1 \:i: A_iA\_i와 A_i+1A\_{i+1}의 값을 서로 바꾼다. (1≤i<N)(1\leq i < N)
  • 2 i j2 \:i \:j: i≤k≤ji\leq k \leq j인 모든 정수 kk에 대해 A_kA\_k를 다음과 같이 바꾼다. (1≤i≤j≤N)(1\leq i \leq j \leq N)
    • A_k>max⁡(A_i,A_j)A\_k > \max(A\_i,A\_j)라면 A_kA\_k를 min⁡(A_i,A_j)\min(A\_i,A\_j)로 바꾼다.
    • A_k<min⁡(A_i,A_j)A\_k<\min(A\_i,A\_j)라면 A_kA\_k를 max⁡(A_i,A_j)\max(A\_i,A\_j)로 바꾼다.

입력

첫째 줄에 수열의 길이 NN이 주어진다. (3≤N≤300 000)(3\leq N \leq 300\,000)

둘째 줄에 수열 A_1,A_2,⋯ ,A_NA\_1,A\_2,\cdots,A\_N이 공백으로 구분되어 주어진다. (1≤A_i≤N)(1\leq A\_i \leq N)

출력

1번 이상 4번 이하의 연산으로 수열의 모든 원소를 같게 만드는 방법이 있으면, 첫째 줄에 연산의 사용 횟수 M(1≤M≤4)M(1\leq M \leq 4)을 출력한다. 둘째 줄부터 MM개의 줄에 걸쳐 사용한 연산을 사용한 순서대로, 문제에서 정한 형식에 맞춰 한 줄에 하나씩 출력한다.

수열의 모든 원소를 같게 만드는 연산이 존재하지 않거나, 1번 이상 4번 이하의 연산으로 같게 만들 수 없는 경우에는 −1-1을 출력한다.

예제2

  1. 예제 1

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

    입력
    4
    2 1 4 3
    
    예상 출력
    4
    2 2 4
    1 1
    1 3
    2 1 4