#TIMUS1096. 获取正确的路线牌!

获取正确的路线牌!

所有坐过叶卡捷琳堡公交车的人可能都注意到,印有路线编号的牌子另一面,还印着另一条路线的编号。

一天,一位新公交车的司机来到仓库,却发现没有印有他所分配路线编号的牌子。仓库管理员只好给了他一个随机的牌子,并建议他用这个牌子和其他公交车的司机交换。

只要对方的牌子上有自己的路线编号,任何司机都会同意交换牌子。请帮助这位新司机找到最短的交换序列,让他最终能得到印有自己路线编号的牌子。

输入

第一行包含一个整数KK,表示除新公交车外当前运行的公交车数量(1K10001 ≤ K ≤ 1000)。
接下来KK行,每行包含对应公交车的路线编号及其牌子另一面的编号。路线编号均为1120002000之间的整数。
输入的最后一行包含三个整数TTS1S1S2S2,分别表示新司机的路线编号以及仓库管理员给的牌子两面的编号(1T,S1,S220001 ≤ T, S1, S2 ≤ 2000,且TS1T ≠ S1TS2T ≠ S2)。

输出

如果无法通过一系列交换得到所需的路线编号牌子,输出“IMPOSSIBLE”。
否则,第一行输出最少需要的交换次数MMM>0M > 0),随后MM行依次输出需要交换牌子的公交车编号(注意:是公交车编号,不是路线编号!)。公交车编号从11KK,与输入中给出的顺序一致。如果存在多个最优解,输出任意一个即可。

样例

输入

4
8 5
5 4
7 4
1 5
4 1 8
2
4
2 

题目信息

  • 题目作者:Stanislav Vasilyev
  • 题目来源:美国犹他州立大学公开大学生程序设计竞赛 2001年3月 高级组(USU Open Collegiate Programming Contest March'2001 Senior Session)
  • 标签:图论(graph theory)(未解决题目隐藏标签)
  • 难度709709