#CF2052A. 肾上腺素冲刺

肾上腺素冲刺

A. 肾上腺素冲刺

每个测试用例的时间限制:3 秒 每个测试用例的内存限制:1024 兆字节

爱丽丝的朋友是“肾上腺素冲刺”赛车比赛的狂热粉丝,总是努力不错过任何一场比赛。不过这一次,轮到爱丽丝来观看比赛了。为了确保朋友不会错过任何赛场的重要细节,爱丽丝决定记录下赛道上发生的一切。

比赛开始前,爱丽丝首先注意到的是赛车的编号。所有赛车按特定顺序在起跑线前排成一列。最靠近起跑线的赛车编号为 11,第二辆为 22,依此类推,直到最后一辆赛车,编号为 nn。“太方便了!”——爱丽丝心想。

随着倒计时“三!二!一!开始!”,比赛正式启动。爱丽丝观察到,赛车们以初始顺序出发。然而,随着比赛进行,它们的顺序发生了变化。每当一辆赛车超越另一辆赛车(本质上是在赛道上交换位置)时,她都会记录下来。

比赛过程中,爱丽丝发现了一个有趣的现象:没有一辆赛车会超越另一辆赛车超过一次。换句话说,对于任意两辆赛车 xxyy,它们之间最多发生两次超越事件:“xx 超越 yy”和/或“yy 超越 xx”。

比赛结束时,爱丽丝仔细记录下了赛车的最终排名 c1,c2,,cnc_1, c_2, \dots, c_n,其中 c1c_1 代表比赛的冠军。

然而,爱丽丝的朋友只关心最终排名,于是把爱丽丝的所有记录都扔掉了,只保留了最终顺序。由于爱丽丝好奇心旺盛,她想知道:她观察到的超越事件序列的最长可能长度是多少? 你的任务是帮她解答这个问题。

输入格式

第一行输入一个整数 nn1n10001 \le n \le 1000),表示赛车的数量。

第二行输入一个排列 c1,c2,,cnc_1, c_2, \dots, c_n1cin1 \le c_i \le ncicjc_i \neq c_j),表示赛车的最终顺序。

输出格式

第一行输出一个整数 mm,表示比赛中可能发生的超越事件的最大数量。

接下来 mm 行,每行输出两个整数 xxyy1x,yn1 \le x, y \le nxyx \neq y),代表一个超越事件,表示赛车 xx 超越了赛车 yy。这意味着 xx 原本紧跟在 yy 正后方,随后完成了超越。 超越事件必须按比赛中发生的顺序输出。

在所有 mm 次超越发生后,赛车必须恰好以顺序 c1,c2,,cnc_1, c_2, \dots, c_n 抵达终点。 注意:任意赛车 xx 都不能超越另一辆赛车 yy 超过一次

如果存在多个最长的超越序列,输出任意一个即可。

样例输入

3
2 3 1

样例输出

4
2 1
3 1
3 2
2 3

样例输入

1
1

样例输出

0

样例输入

2
1 2

样例输出

2
2 1
1 2