给定某次比赛中若干名选手的得分。你的任务是建立一个选手的排行榜,按照得分从大到小(降序)进行排序。
不幸的是,用于存储选手列表的数据结构仅支持一种操作:将处于位置 $i$ 的选手移动到位置 $j$,而不改变其他选手的相对顺序。如果 $i > j$,则处于位置 $j$ 到 $i - 1$ 之间的选手的位置全部增加 1;否则,如果 $i < j$,则处于位置 $i + 1$ 到 $j$ 之间的选手的位置全部减少 1。
该操作需要花费 $i$ 步来定位要移动的选手,以及 $j$ 步来定位其要移动到的目标位置。因此,将选手从位置 $i$ 移动到位置 $j$ 的总代价为 $i + j$。在这里,位置编号从 1 开始。
请确定一个移动序列来建立排行榜,使得所有移动的代价之和最小。
输入格式
第一行包含一个整数 $n$($2 \le n \le 1000$),表示选手的数量。
接下来的 $n$ 行,每行包含一个非负整数 $s_i$($0 \le s_i \le 1,000,000$),表示选手按当前顺序排列的得分。你可以认为所有得分都是互不相同的。
输出格式
第一行输出一个整数,表示建立排行榜所需的移动次数。
接下来的各行应按应用顺序指定每次移动。每次移动由一行包含两个整数 $i$ 和 $j$ 的内容来描述,表示将位置 $i$ 处的选手移动到位置 $j$。数字 $i$ 和 $j$ 之间必须用单个空格分隔。
样例
输入样例 1
5 20 30 5 15 10
输出样例 1
2 2 1 3 5
子任务
对于 $30\%$ 的测试数据,满足 $n \le 10$。