J - Divide and Sort Editorial /

Time Limit: 2 sec / Memory Limit: 1024 MB

配点 : 100

問題文

(1,2,\ldots,N) の順列 P = (P_1,P_2,\ldots,P_N) が与えられます。あなたは以下の操作を 0 回以上 15 回以下行うことができます。

  • 1\leq l \leq r \leq N かつ r-l+1 が奇数であるような整数組 (l,r) を選び、数列 (P_l,P_{l+1},\ldots,P_r) の中央値を M とする。このとき P_x = M なる整数 x が一意に定まる。Pl 番目から x-1 番目を(存在すれば)昇順に並び替え、x+1 番目から r 番目を(存在すれば)昇順に並び替える。

操作によって P を昇順に並び替えられるか判定し、可能な場合はそのような操作列を一つ求めてください。

中央値とは 長さ 2n - 1 の数列の中央値は、数列を昇順に並び替えたとき、前から n 番目の要素の値として定義されます。例えば、(5, 4,2) の中央値は 4(3,1,5,2,4) の中央値は 3(9) の中央値は 9 です。

制約

  • 入力は全て整数
  • 1 \leq N \leq 2\times 10^5
  • P(1,2,\ldots,N) の順列

部分点

  • 1 \leq N \leq 7 を満たすデータセットに正解した場合は 10 点が与えられる。

入力

入力は以下の形式で標準入力から与えられる。

N
P_1 P_2 \ldots P_N

出力

15 回以下の操作により P を昇順に並び替えられない場合 -1 を出力せよ。

そうでない場合、1 行目に操作を行う回数 k を出力せよ。ここで k0 以上 15 以下の整数でなくてはならない。

次に、k 行にわたって操作列を出力せよ。

i\ (2\leq i \leq k +1) 行目には、i-1 回目の操作で選んだ l,r を空白区切りで出力せよ。

解が複数存在する場合、どれを出力しても正解とみなされる。


入力例 1

5
2 1 3 5 4

出力例 1

1
1 5

l=1,r=5 として操作をします。

数列 (2,1,3,5,4) の中央値は 3 であり、P_x=3 なる x3 です。よって Pl=1 番目から x-1=2 番目を昇順に並び替え、 x+1=4 番目から r=5 番目を昇順に並び替えます。

この操作により、 P(1,2,3,4,5) となり確かに昇順に並び替えられています。


入力例 2

4
1 2 3 4

出力例 2

2
1 3
2 4

15 回以内の操作であれば、操作回数を最小化する必要はありません。


入力例 3

2
2 1

出力例 3

-1

15 回以内の操作で P を昇順に並び替えられない場合、 -1 を出力してください。