배열 회전

시간 제한10초메모리 제한128 MB

문제

1부터 N까지의 자연수가 차례로 놓인 배열이 있다. 아래 배열은 N=6인 경우이다.

123456

이 배열에서 임의의 구간 (a, b)를 골라 한 번 회전할 수 있다. 회전하면 a번째 칸부터 b번째 칸까지의 수의 순서가 뒤집히고, 그 구간에 있는 모든 수의 부호도 바뀐다. (1 ≤ a ≤ b ≤ N) 위 배열에서 (1, 4)를 회전하면 다음과 같다.

-4-3-2-156

이미 회전한 배열에도 같은 연산을 계속 적용할 수 있다. 다시 (3, 5)를 회전하면 최종 배열은 다음과 같다.

-4-3-5126

초기 배열은 1부터 N까지의 자연수가 차례로 적힌 상태이다. 최종 배열 상태가 주어질 때, 회전 연산을 적게 사용하여 초기 배열에서 그 최종 배열을 만드는 프로그램을 작성하시오.

입력

첫째 줄에 배열의 크기 N(1 ≤ N ≤ 250)이 주어진다. 둘째 줄에는 최종 배열 상태가 빈칸을 사이에 두고 순서대로 주어진다. 주어지는 수열에는 절댓값이 1 이상 N 이하인 수가 각각 정확히 한 번씩 등장한다.

출력

첫 줄에 회전 연산을 사용한 횟수 K를 출력한다. 이어서 K줄에 걸쳐, 연산을 수행한 순서대로 각 회전 구간 (a, b)를 나타내는 두 정수 a와 b를 빈칸을 사이에 두고 출력한다. (1 ≤ a ≤ b ≤ N)