Logo Universal Online Judge

UOJ

时间限制:1s s 空间限制:256MB MB

#16. Musha 与软件包依赖

Statistics

题目描述

Musha 写了一个超厉害的软件,但也依赖超多的软件包,它们又有各自的依赖。更让人讨厌的是,这些依赖,还有版本的要求。Musha 想让你帮忙判断一下,这些乱糟糟的依赖,是否能够被同时满足。

为了简化问题,我们规定,所有的软件包均使用一个小写英文字母表示(这意味着,系统中不会超过 26 个软件包),版本号使用 major.minor 的格式,majorminor 均为不包含前导零的非负整数

在比较版本号大小时,优先比较 major 部分,如果相同,再比较 minor 部分。因此 9.11 的版本号大于 9.8.

在描述依赖要求时,仅会使用以下三种模式:

a >= 3.12
b <= 0.2
c == 6.6

分别表示要求软件包 a 的版本为 3.12 或比 3.12 大,软件包 b 的版本不大于 0.2,而软件包 c 的版本必须恰好为 6.6.

为了简化问题,Musha 已经将全部依赖展开,因此同一个软件包会出现多次,你需要判断是否可以为每一个的软件包指定一个版本,能够满足全部的需求。我们假定,对于任一软件包,只要它的可行版本号不为空集,就一个可以找到一个存在的版本。

输入格式

本题采用多组输入。一个整数 t 表示测试的组数。接下来有 t 组测试,对于每一组:

第一行一个整数 n,表示需求的总条数。

接下来 n 行,每行均为一条依赖需求,严格按照下列格式给出:

<pkg> <op> <major>.<minor>

<pkg> 表示软件包名,为一个小写英文字母;<op>>= <= == 三者之一;<major> <minor> 均为一个不含前导零的非负整数。

输出格式

t 行,每行一个 YES 或者 NO,表示是否可以满足全部的依赖需求。

样例

Input
2
3
a >= 3.11
b <= 5.5
a <= 3.13
2
a <= 0.12
a == 0.13
Output
YES
NO

数据规模

1 ≤ t, n ≤ 100,版本号的每一部分均不超过 4 位数字。