在 Byteotia,一种名为“俄罗斯方块攻击”(Tetris Attack)的益智游戏最近非常流行。该游戏本身非常复杂,因此我们只介绍其简化规则:玩家拥有一个由 $2n$ 个元素组成的堆栈,这些元素一个叠一个地放置,并标记有 $n$ 种不同的符号。每种符号在堆栈中恰好出现两次。玩家的一次移动包括交换两个相邻的元素,即互换它们的位置。如果交换后,有两个标记相同符号的元素相邻,它们将同时从堆栈中移除。随后,原本位于它们之上的所有元素会下落,这很可能会引发进一步的消除。玩家的目标是以最少的移动次数清空堆栈。
编写一个程序,完成以下任务:
- 从标准输入读取初始堆栈内容的描述;
- 找到移动次数最少的解决方案;
- 将结果输出到标准输出。
输入格式
标准输入的第一行包含一个整数 $n$,$1 \le n \le 50,000$。接下来的 $2n$ 行描述了堆栈的初始内容。第 $(i+1)$ 行包含一个整数 $a_i$,表示从底部数第 $i$ 个元素所标记的符号($1 \le a_i \le n$)。每个符号在堆栈中恰好出现两次。此外,初始时没有两个相同的符号相邻。测试数据经过精心设计,保证存在不超过 $1,000,000$ 次移动的解决方案。
输出格式
应将移动次数最少的解决方案输出到标准输出,格式如下:第一行包含一个整数 $m$,表示最少的移动次数。接下来的 $m$ 行应描述最优解本身,即一个包含 $m$ 个整数的序列 $p_1, \dots, p_m$,每行一个。$p_i$ 表示在第 $i$ 次移动中,玩家选择了交换从底部数第 $p_i$ 个和第 $(p_i+1)$ 个元素。
如果存在多个最优解,程序可以输出其中任意一个。
样例
输入 1
5 5 2 3 1 4 1 4 3 5 2
输出 1
2 5 2
输入 2
3 1 2 3 1 2 3
输出 2
3 3 4 2
样例输出 2 的另一种解法
3 4 3 2