[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$