[CTSC2005] 玩具的重量
题目描述
冰冰有三个玩具:皮卡秋、维妮孙悟空和芭比娃娃。她并不知道这些玩具的具体重量(采用NOI单位),但是知道每个玩具重量的大概范围,如下表:
表1. 玩具和它们的最小、最大可能重量|皮卡秋|维妮孙悟空|芭比娃娃
:-:|:-:|:-:|:-:
最小可能重量|1|2|3
最大可能重量|3|4|5
这些范围太粗略,冰冰希望能把它们缩小一些。
正好佳佳有一个电子天平,不仅可以告诉你左右两边是否一样重,还可以告诉你左边比右边重(或轻)多少。天平很大,左右两边都可以放任意多件玩具。
冰冰向佳佳借电子天平,希望能算出每个玩具的精确重量。佳佳为了考验冰冰,只允许她把任意一个玩具往天平的左侧和右侧最多各放一次。例如,如果她曾经把皮卡秋放在天平的左侧,则她不能再次把它放在天平的左侧。冰冰同意了。她一共称量了两次,结果如下(数字表示左边比右边重多少):
![](https://cdn.luogu.com.cn/upload/pic/18477.png)
根据结果和表1,可以确定三个玩具的重量一定是3,4,3,也就是说,通过称量结果所得到的更新后的重量范围是:
表2. 根据称量结果所得到的精确范围|皮卡秋|维妮孙悟空|芭比娃娃
:-:|:-:|:-:|:-:
最小可能重量|3|4|3
最大可能重量|3|4|3
冰冰以后还会买很多很多玩具,她不想每次都自己计算每个玩具的重量。她需要写一个程序计算每个玩具最精确的重量下限和上限,你能帮她吗?
输入输出格式
输入格式
输入文件第一行包含两个整数n和m,即玩具的个数和称量的次数。第二行包含2n个数,第2i-1个数和第2i个数分别表示第i个玩具的重量初始下限和初始上限。以下m行,每行前三个数L,R,D表示左边的玩具数、右边的玩具数和左右两边的重量差(L, R>=0),接下来的L个数为天平左边的玩具编号,再接下来的R个数为天平右边的玩具编号。输入保证每个玩具在天平的每一边最多出现一次。
输出格式
输出文件包含2n个整数,第2i-1个数和第2i个数分别表示第i个玩具的重量下限和上限,即最小可能的整数重量和最大可能的整数重量。如果无解(可能是天平坏了),只输出一个数-1。
输入输出样例
输入样例 #1
3 2
1 3 2 4 3 5
1 1 -1 1 2
1 1 1 2 3
输出样例 #1
3 3 4 4 3 3
输入样例 #2
3 1
1 5 2 5 1 3
2 1 1 1 2 3
输出样例 #2
1 2 2 3 2 3
说明
【样例解释】
样例1对应于题目描述中的例子。
在样例2中,冰冰有三个玩具,重量的原始范围为1~5, 2~5, 1~3。只有一次称量,天平的左边是玩具1和玩具2,右边是玩具3。左边比右边重1个单位。根据此结果,可以判断三个玩具的重量范围为1~2,2~3和2~3。
【约定】
3<=n<=200, 1<=m<=100,重量上限不超过20000。
50%的数据满足3<=n<=10,1<=m<=5。