2日目 問題1(ソート)

 ソーティング(sorting; ソート(sort, 整列化)すること)は、コンピュータ を使って行なう作業の中でも最もよく行なわれるものである。ここでは、 ソートの対象になる値(キー: key)の種類がたかだか3つという特殊な ソーティング問題を考える。例えば、このような問題設定は次のような場合に 起こる: ある競技のメダリストをメダルの色でソートする。つまり、 最初に金メダルを取った人が、次に銀メダルを取った人が、最後に銅メダルを 取った人が来るように並びかえる。
 この問題では、ソートの対象になる可能性があるキーの値は1,2,3の3つの 整数だけとし、昇順にソートするものとする。 また、ソーティングは交換操作(exchange operation)だけを何回か繰り返す ことによって行なうものとする。ただし、 交換操作は2つの数 p と q の組で表わすことにする。これは p の 位置にある要素と q の位置にある要素を交換することを意味する。

 キーの値の列が与えられる。この入力列をソートするのに必要な交換操作の 必要回数を計算するプログラムを書け(Subtask A)。さらに、Subtask Aの答 を実現するソーティングに対応する交換操作の列を一つ示せ。

入力データ

 ファイル INPUT.TXT の最初の行にはキーの数 N (1≦N≦1000) が 書いてある。それに続く N 行にはそれぞれのキーの値が書いてある。

出力データ

 ファイル OUTPUT.TXT の最初の行には、ソートを行なうのに必要な交換操作の 最小回数 L を書け(Subtask A)。それに続く L 行には、解となる ソーティングに対応する交換操作の列をその実行順に書け。各行には、 交換される2つの要素の位置を表わす2つの数を書け(Subtask B)。 位置は1から N までの整数で表わされているものとする。

入出力例

 次は、ある入力ファイルと、それに対応する出力ファイルの例である。

    INPUT.TXT       OUTPUT.TXT
    ---------    ----------
    9               4 
    2               1 3 
    2               4 7 
    1               2 9 
    3               5 9 
    3                   
    3                   
    2                   
    3                   
    1