神奇的数组

Time Limit: 5000 ms Memory Limit: 65536 KiB

Problem Description

铁牌狗拿着一个数组A过河,一不小心把数组A掉进了河里,懊恼不已之时,河神凌波而至,问道:这个金数组是你的,还是这个银数组是你的?铁牌狗怒道:你少来骗我,老子的数组是钻石的。

铁牌狗最终没有找回他的数组A,但是铁牌狗还依稀记得数组A的一些限制条件:

(1)数组A的长度为n,即数组A中共有n个数字,下标从1n

(2)数组A中的每个元素均不小于0且小于2^15,且均为整数。

(3)数组A中的一些子区间[Li,Ri]满足与值为Vi

(4)数组A的一些位置的数字为Tk0 <= Tk < 2^15) 。

与操作:位运算的一种,在C语言中为&,为双目运算符。两者相与,对应位上同为1则为1,否则为0,如5&4的值为4。 

例如:设数组A为 {1,2,3,4,5},那么A的一段子区间[1,2,3,4,5]的与值为0,子区间[2,3]的与值为2,子区间[4,5]的与值为4

 

现在给出这些限制条件,问是否存在一个数组满足上述条件。

Input

 

多组输入。对于每组数据:

第一行输入一个整数1 <= n <= 10^5)。

接下来的一行有n整数Xi,若Xi == -1,则说明铁牌狗不记得第i个数字,否则第i个数字为XiXi == -1 或者 0 <= Xi < 2^15)。

接下来的一行包含一个数字m1 <= m <= 10^5)。

接下来的m行,每行三个整数LiRi,Vi1<= Li <= Ri <= n ,0 <= Vi < 2^15) 。

Output

 

对于每组数据,若不存在一个数据满足上述要求,则输出“No”

否则输出“Yes”,接下来的一行输出n个整数,代表数组

若有多解,则输出累加和最小的那个。

具体格式见样例。

Sample Input

2
0 1
1
1 2 3
3
-1 -1 -1
2
2 3 2
3 3 3

Sample Output

No
Yes
0 2 3

Hint

 

Source

zmx