你刚从编程学校毕业,找到了一份 Python 编程的工作。上班第一天,你意识到你接手的是一团乱麻。前任维护者(最近已经逃往国外)选择了“意大利面条式”的设计模式。你试图理清代码,但很快发现不同的文件之间存在循环依赖。事实上,代码的测试和运行工作尚未开始。
在你坐下来思考后,你决定首先要做的是消除依赖图中的循环。因此,你从寻找一个最短的依赖循环开始。
输入格式
输入的第一行包含一个数字 $n$ ($1 \le n \le 500$),表示文件的数量。接下来一行包含 $n$ 个文件名。每个文件名是一个长度至少为 1 且至多为 8 的小写字母('a' 到 'z')字符串。随后是 $n$ 个部分,每个文件对应一个部分,顺序与第二行给出的顺序一致。每个部分以一行包含文件名和一个整数 $k$ 开头,随后是 $k$ 行,每行以 “import” 开头。
每个 “import” 行是一行以逗号加空格分隔的依赖项。没有文件会多次导入同一个文件,且每个被导入的文件都在输入的第二行中列出。逗号加空格分隔意味着每一行都将以 “import” 开头,然后是一个由 “, ” 分隔的类名列表(参见样例输入)。
输出格式
如果代码库中没有循环依赖,输出 “SHIP IT”。否则,输出一行包含最短循环中文件名的内容,按循环顺序排列。如果存在多个最短循环,输出其中任意一个即可。
样例
样例输入 1
4 a b c d a 1 import d, b, c b 2 import d import c c 1 import c d 0
样例输出 1
c
样例输入 2
5 classa classb myfilec execd libe classa 2 import classb import myfilec, libe classb 1 import execd myfilec 1 import libe execd 1 import libe libe 0
样例输出 2
SHIP IT
样例输入 3
5 classa classb myfilec execd libe classa 2 import classb import myfilec, libe classb 1 import execd myfilec 1 import libe execd 1 import libe, classa libe 0
样例输出 3
classa classb execd