P10687 True Liars

题目描述

在小船上漂流了几天后,Akira Crusoe Maeda 终于被抛到了一个雾蒙蒙的岛上。尽管他疲惫不堪,绝望不已,但他仍然幸运地记得他童年时从族长那里听到的雾岛传说。这一定是传说中的岛屿。传说中有两个部落居住在岛上,一个是神圣的,另一个是邪恶的,一旦神圣部落的成员保佑你,你的未来就会光明有希望,你的灵魂最终会去天堂,相比之下,一旦邪恶部落的成员诅咒你,你们的未来就会黯淡无望,你的心灵最终会坠入地狱。 为了防止最坏的情况发生,Akira Crusoe Maeda 应该区分恶魔和神灵。但是怎么做?他们看起来完全一样,他无法仅凭外表区分他们。然而,他还有最后的希望。神圣部落的成员是说实话的人,也就是说,他们总是说实话,而邪恶部落的成员则是骗子,也就是他们总是撒谎。 他问他们中的一些人是否有些是神圣的。他们彼此非常了解,总是根据自己的个性“忠实地”回应他(即,他们总是说实话或撒谎)。他不敢问任何其他形式的问题,因为传说中,当一个恶魔成员不喜欢这个问题时,他会永远诅咒一个人。他有另一条有用的信息,传说告诉了两个部落的人口。传说中的这些数字是值得信赖的,因为生活在这个岛上的每个人都是不朽的,至少在这几千年里没有人出生过。 你是一名优秀的计算机程序员,因此被要求帮助 Akira 编写一个程序,根据居民对他的询问的回答对他们进行分类。

输入格式

输入由多行组成,每个测试点的格式如下: ``` n p1 p2 x1 y1 a1 x2 y2 a2 ... xi yi ai ... xn yn an ``` 第一行有三个非负整数 $n$、$p_1$ 和 $p_2$。$n$ 是 Akira 提出的问题数量。$p_l$ 和 $p_2$ 分别是传说中神圣部落和恶魔部落的人口。接下来的 $n$ 行中的每一行都有两个整数 $x_i$、$y_i$ 和一个单词 $a_i$,表示询问了居民 $x_i$,问题是:“居民 $y_i$ 是神圣部落的人吗?”。$x_i$ 和 $y_i$ 是居民的识别号,每个识别号在 $1$ 和 $p_1+p_2$(包括 $1$ 和 $p_1+p_2$ )之间。$a_i$ 要么是 `yes`,要么是 `no`。请注意,$x_i$ 和 $y_i$ 可以是同一个数字,因为“你是神族的成员吗?”是一个有效的问题。还要注意,两行可能有相同的 $x$ 和 $y$ ,因为 Akira 非常沮丧,可能不止一次向同一行问同一个问题。 你可以假设 $n$ 小于 $1000$,$p_1$ 和 $p_2$ 小于 $300$。如果一行有三个零,即 `0 0 0`,表示输入的结束。你可以假设每个测试点都是一致的,没有矛盾的答案。

输出格式

对于每个数据集,如果它包含足够的信息来对所有居民进行分类,请按升序输出所有神圣居民的识别号,一行一个。此外,在输出数字之后,打印 `end` 于最后一行。否则,即如果给定的数据集不包括足够的信息来识别所有神圣的成员,请在最后一行中打印 `no`。

说明/提示

对于 $100\%$ 的数据,每个数据点内最多 10 组数据,$n