#P1718. River Crossing

River Crossing

描述

BytelandByteland的市民热爱所有逻辑思维与身体技能同样重要的运动。其中一项运动是跨越HexHex河——BytelandByteland最宽的河流。河上有nn根编号为11nn(从左到右)的柱子。市民必须从左岸出发,经过若干柱子,最终到达右岸。左岸位于柱子11左侧一个单位的位置,右岸位于柱子nn右侧一个单位的位置。

在时间00时,市民位于HexHex河的左岸,目标是尽快到达右岸。在任意时刻,每根柱子要么是“upup”状态(升起)要么是“downdown”状态(降下),市民只能站在升起的柱子或河岸上。

每根柱子在时间00时处于降下状态,随后会保持aa个时间单位升起、bb个时间单位降下,如此循环。每根柱子的aabb是独立定义的。例如,a=2a = 2b=3b = 3的柱子在时间00时降下,时间1122时升起,时间334455时降下,依此类推。

在时间t+1t + 1时,市民可以选择移动到当前位置(时间tt时的位置)左右55根柱子范围内的任意可用柱子或河岸,也可以停留在当前位置(如果当前位置是可用柱子或河岸)。例如,从柱子55出发,市民可以到达柱子1122334455667788991010或左岸。

编写程序,计算市民首次到达右岸的时间(若可到达)。

输入

输入第一行包含数据块数量xx1x51\leq x\leq 5)。接下来的行包含xx个数据块,第一个数据块从输入文件的第二行开始,后续数据块紧接在前一个之后。

每个数据块的第一行包含整数nn5<n10005 < n\leq 1000),表示柱子数量。接下来的nn行每行包含两个整数aabb1a,b51\leq a, b\leq 5),第i+1i + 1行(1in1\leq i\leq n)描述柱子ii的状态变化规律。

输出

对于第kk个数据块(1kx1\leq k\leq x),输出市民首次到达右岸的时间,若无法到达则输出“NONO”。

输入数据1

2
10
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
10
1 1
1 1
1 1
1 1
2 1
1 1
1 1
1 1
1 1
1 1

输出数据1

NO
4

来源

CEOI 1997