#P1570. Exchange Rates

Exchange Rates

本题没有可用的提交语言。

使用货币购买商品和服务通常使生活更容易,但有时人们更喜欢直接交易物品而不需要任何货币转手。为了确保一致的“价格”,贸易商设定了商品之间的汇率。两件物品A和B之间的汇率被表示为两个正整数m和n,并且表示A的m值B的n。例如,2个炉子可能值3个冰箱。(数学上,1个炉子值1.5个冰箱,但由于很难找到半个冰箱,汇率总是用整数表示。)

你的任务是写一个程序,给定一个汇率列表,计算任意两种商品之间的汇率。

Input

输入包含一个或多个命令,后跟以句点开始的行,表示文件结束。每个命令单独在一行中,可以是断言,也可以是查询。断言以感叹号开头,格式为

! M itemma = n itemb!\ M\ itemma\ =\ n\ itemb

,其中itemmaitembitemma和itemb是不同的项目名称,M和n都是小于100的正整数。这个命令表示itemma的m值itemb的n。查询以问号开头,格式是否为

? Itema = itemb?\ Itema\ =\ itemb

,并请求Itema和itemb之间的汇率,其中Itema和itemb是不同的项,它们都出现在以前的断言中(尽管不一定是相同的断言)。

Output

对于每个查询,根据截至该点的所有断言输出itema和itemb之间的汇率。汇率必须是整数,并且必须降至最低。如果此时无法确定汇率,请使用问号而不是整数。按照示例中所示的格式格式化所有输出。

备注:

项目名称的长度不超过20,并且只包含小写字母。

只使用项目名的单数形式(不使用复数形式)。

最多有60个不同的项。

任何对不同的项最多只能有一个断言。

没有相互矛盾的断言。例如,"2 pig = 1 cow2\ pig\ =\ 1\ cow", "2 cow = 1 horse2\ cow\ =\ 1\ horse"和"2 horse = 3 pig2\ horse\ =\ 3\ pig"是矛盾的。

断言不一定是最低的,但输出必须是最低的。

! 6 shirt = 15 sock
! 47 underwear = 9 pant
? sock = shirt
? shirt = pant
! 2 sock = 1 underwear
? pant = shirt
.
5 sock = 2 shirt
? shirt = ? pant
45 pant = 188 shirt

来源

美国中南部1999