请问我能拐走你家使魔吗?
题号:NC53312
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
Special Judge, 64bit IO Format: %lld

题目描述

译自 ROI 2018 Day1 T2. Вирусы (Viruses)
现在有n只使魔与n个饲主,i号使魔的初始饲主的序号也为i,每个使魔心中对每位饲主都有一定的好感度。
使魔之间可以互相攻击,a号使魔如果攻击了b号使魔,且b号使魔「对a号使魔现在的饲主的好感度」比「对自家饲主的好感度」高,那么b号使魔就会被a号使魔的饲主拐走。
使魔们可以任意安排攻击顺序。当且仅当没有使魔可以被任意一名饲主拐走时,游戏宣告结束。
如果存在一种攻击顺序,使得饲主i最终拥有一只或以上的使魔,那么我们则称饲主i为「有希望的」。
如果对于任意一种攻击顺序,都使得饲主i最终拥有一只或以上的使魔,那么我们则称饲主i为「人生赢家」。
现在饲主们想知道,有多少个有希望的饲主与人生赢家。

输入描述:

第一行一个正整数n,表示使魔与饲主的数量。
下面n行,每行一个n个正整数,表示每名饲主按当前使魔心中的好感度降序排列后的饲主编号序列。
比如输入了,则表示该使魔对2号饲主的好感度最高,对1号饲主的好感度第二高,对3号饲主的好感度最差。
最后一行一个整数p。

输出描述:

第一行,一个整数x。如果p=1,输出人生赢家的数量;如果p=2,输出有希望的饲主的数量。
下面一行,x个整数,表示这x个饲主的编号,按升序排列。
示例1

输入

复制
2
1 2
2 1
1

输出

复制
2
1 2 
示例2

输入

复制
2
1 2
2 1
2

输出

复制
2
1 2 
示例3

输入

复制
2
2 1
1 2
1

输出

复制
0
示例4

输入

复制
2
2 1
1 2
2

输出

复制
2
1 2 
示例5

输入

复制
2
1 2
1 2
1

输出

复制
1
1 
示例6

输入

复制
2
1 2
1 2
2

输出

复制
1
1 
示例7

输入

复制
4
3 2 4 1
1 4 2 3
3 1 2 4
1 4 2 3
1

输出

复制
1
3 
示例8

输入

复制
4
3 2 4 1
1 4 2 3
3 1 2 4
1 4 2 3
2

输出

复制
3
1 3 4 

备注:


CC-BY-SA,感谢LOJ分享,译文来自 https://loj.ac/problem/2844