#CF2052A. 肾上腺素冲刺
肾上腺素冲刺
A. 肾上腺素冲刺
每个测试用例的时间限制:3 秒 每个测试用例的内存限制:1024 兆字节
爱丽丝的朋友是“肾上腺素冲刺”赛车比赛的狂热粉丝,总是努力不错过任何一场比赛。不过这一次,轮到爱丽丝来观看比赛了。为了确保朋友不会错过任何赛场的重要细节,爱丽丝决定记录下赛道上发生的一切。
比赛开始前,爱丽丝首先注意到的是赛车的编号。所有赛车按特定顺序在起跑线前排成一列。最靠近起跑线的赛车编号为 ,第二辆为 ,依此类推,直到最后一辆赛车,编号为 。“太方便了!”——爱丽丝心想。
随着倒计时“三!二!一!开始!”,比赛正式启动。爱丽丝观察到,赛车们以初始顺序出发。然而,随着比赛进行,它们的顺序发生了变化。每当一辆赛车超越另一辆赛车(本质上是在赛道上交换位置)时,她都会记录下来。
比赛过程中,爱丽丝发现了一个有趣的现象:没有一辆赛车会超越另一辆赛车超过一次。换句话说,对于任意两辆赛车 和 ,它们之间最多发生两次超越事件:“ 超越 ”和/或“ 超越 ”。
比赛结束时,爱丽丝仔细记录下了赛车的最终排名 ,其中 代表比赛的冠军。
然而,爱丽丝的朋友只关心最终排名,于是把爱丽丝的所有记录都扔掉了,只保留了最终顺序。由于爱丽丝好奇心旺盛,她想知道:她观察到的超越事件序列的最长可能长度是多少? 你的任务是帮她解答这个问题。
输入格式
第一行输入一个整数 (),表示赛车的数量。
第二行输入一个排列 (,),表示赛车的最终顺序。
输出格式
第一行输出一个整数 ,表示比赛中可能发生的超越事件的最大数量。
接下来 行,每行输出两个整数 和 (,),代表一个超越事件,表示赛车 超越了赛车 。这意味着 原本紧跟在 正后方,随后完成了超越。 超越事件必须按比赛中发生的顺序输出。
在所有 次超越发生后,赛车必须恰好以顺序 抵达终点。 注意:任意赛车 都不能超越另一辆赛车 超过一次。
如果存在多个最长的超越序列,输出任意一个即可。
样例输入
3
2 3 1
样例输出
4
2 1
3 1
3 2
2 3
样例输入
1
1
样例输出
0
样例输入
2
1 2
样例输出
2
2 1
1 2