[POI2007] TET-Tetris Attack
题目描述
一种名为 *Tetris Attack* 的猜谜游戏风靡 Byteotia。游戏本身非常复杂,因此我们只介绍它的简化规则:
玩家拥有一个有 $2n$ 个元素的栈,一个元素放置在另一个元素上,这样一个组合有 $n$ 个不同的符号标记。对于每个符号,栈中恰好有两个元素用一个符号标记。
玩家可以交换两个相邻元素,即互换他们的位置。交换后,如果有两个相邻的元素标有相同的符号,则将他们都从栈中删除。然后,位于其上方的所有元素都会掉落下来,并且可以造成再次删除。
玩家的目标是以最少的移动次数清空堆栈。请你编写一个程序,找出最少的移动次数及方案。
输入输出格式
输入格式
第一行一个整数 $n$。
接下来的 $2n$ 行里给出了栈的初始内容,第 $i+1$ 行包含一个整数 $a_i$($1 \leq a_i \leq n $),表示从底部数起第 $i$ 个元素所标记的符号(每个符号都在栈中出现正好两次)。
最初不存在相邻的两个元素符号相同的情况,保证有不超过 $10^6$ 次操作的方案。
输出格式
第一行一个整数 $m$ ,表示最小的移动次数。
接下来 $m$ 行,每行输出一个数。
第 $i + 1$ 行输出 $p_i$,即表示玩家在第 $i$ 步时选择交换 $p_i$ 与 $p_{i+1}$。
如果存在多个方案,则输出其中任何一个。
输入输出样例
输入样例 #1
5
5
2
3
1
4
1
4
3
5
2
输出样例 #1
2
5
2
说明
$1 \le n \le 50000$