尽管加基森是一座充满机遇的城市,但这里街道上的秩序由帮派掌控。 最近,一群强盗闯入了加基森第一银行的外墙,偷走了几箱翡翠古董。银行老板刚刚在《加基森公报》上发布了一则公告,悬赏大量的奥术之尘和许多未使用的卡组,以抓捕罪犯。 作为加基森的一名著名侦探,你收集了来自证人的几份证词。这些证词看起来可能是这样的:
“抢劫那天,卡扎库斯不在家。” “如果信使在家,那么卡扎库斯也在家。” “如果那天卡扎库斯和信使都在家,那么卡扎库斯一定不是强盗。”
通常情况下,每份证词都属于以下四种形式之一:
- 无条件肯定:这类证词断言某个命题为真。
- 无条件否定:这类证词断言某个命题为假。
- 条件肯定:这类证词断言,如果若干个命题(称为前件)均为真,则某个命题为真。
- 条件否定:这类证词断言,如果若干个命题均为真,则某个命题为假。
注意,每个命题要么为真,要么为假。 在收集了这些证词后,你需要解开这个谜团。你想要找出这些证词之间是否存在冲突。如果没有冲突,你想要找出这起事件的真相;也就是说,你需要确定每个命题的真值,使得所有证词都成立。
输入格式
输入的第一行包含两个整数 $n, m$ ($1 \le n, m \le 10^6$),分别表示证词的数量和证词中涉及的命题数量。命题编号为 $1$ 到 $m$。 接下来 $n$ 行,描述这些证词。每行代表一份证词,格式如下:
- 无条件肯定:该行包含一个整数,即要确认的命题编号。
- 无条件否定:该行包含一个整数,前面带有一个感叹号(!)。
- 条件肯定:该行以一列整数开头,表示前件的编号,后跟
->符号,最后是一个整数,表示要确认的命题。 - 条件否定:该行以一列整数开头,表示前件的编号,后跟
->符号,最后是一个前面带有感叹号的整数,表示要否定的结论命题。
注意,数字之间、以及 -> 符号前后均恰好有一个空格,但感叹号后面没有空格。
保证条件证词的前件是互不相同的,且不包含结论命题。此外,所有条件证词中前件的总数不超过 $10^6$。
输出格式
如果这些证词相互冲突,请在单行内输出 conflict。否则,输出 $m$ 个字符(不含空格),每个字符为 T(代表真)或 F(代表假),表示符合这些证词的命题真值赋值。如果存在多种可能的赋值,输出任意一种即可。
样例
样例输入 1
3 3 !1 2 -> 1 1 2 -> !3
样例输出 1
FFT
样例输入 2
6 4 1 -> 2 1 3 -> !2 1 -> 3 4 -> 2 1 2 3 4 -> !1
样例输出 2
conflict