시간 제한
메모리 제한
시간 제한
10초
메모리 제한
128 MB
1부터 N까지의 자연수가 차례로 놓인 배열이 있다. 아래 배열은 N=6인 경우이다.
| 1 | 2 | 3 | 4 | 5 | 6 |
이 배열에서 임의의 구간 (a, b)를 골라 한 번 회전할 수 있다. 회전하면 a번째 칸부터 b번째 칸까지의 수의 순서가 뒤집히고, 그 구간에 있는 모든 수의 부호도 바뀐다. (1 ≤ a ≤ b ≤ N) 위 배열에서 (1, 4)를 회전하면 다음과 같다.
| -4 | -3 | -2 | -1 | 5 | 6 |
이미 회전한 배열에도 같은 연산을 계속 적용할 수 있다. 다시 (3, 5)를 회전하면 최종 배열은 다음과 같다.
| -4 | -3 | -5 | 1 | 2 | 6 |
초기 배열은 1부터 N까지의 자연수가 차례로 적힌 상태이다. 최종 배열 상태가 주어질 때, 회전 연산을 적게 사용하여 초기 배열에서 그 최종 배열을 만드는 프로그램을 작성하시오.
첫째 줄에 배열의 크기 N(1 ≤ N ≤ 250)이 주어진다. 둘째 줄에는 최종 배열 상태가 빈칸을 사이에 두고 순서대로 주어진다. 주어지는 수열에는 절댓값이 1 이상 N 이하인 수가 각각 정확히 한 번씩 등장한다.
첫 줄에 회전 연산을 사용한 횟수 K를 출력한다. 이어서 K줄에 걸쳐, 연산을 수행한 순서대로 각 회전 구간 (a, b)를 나타내는 두 정수 a와 b를 빈칸을 사이에 두고 출력한다. (1 ≤ a ≤ b ≤ N)