还原数列
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
Special Judge, 64bit IO Format: %lld

题目描述

小 D 有一个长度为 n 的正整数序列

小 D 定义一个区间 是好的当且仅当 升序排序后是一个等差数列。

小 D 定义一个区间 是优美的当且仅当其所有的子区间都是好的。

然而小 D 不小心把这个序列搞丢了,但是她存下了 m 条关于这个序列的信息,每一条信息为如下两种信息之一:
- 给出 l,r,表示区间 不是优美的;
- 给出 l,r,表示区间 是优美的。

现在她把这 m 条信息给了你,希望你帮她还原出这个序列,请你帮帮她。

如果有多个序列 a 满足 m 条信息,输出其中任意一个序列 a 即可。无解输出 “NO“。

输入描述:

第一行两个数 n,m

接下来 m 行每行三个数 op,l,r
- 若 ,则表示区间 不是优美的;
- 若 ,则表示区间 是优美的。
数据保证

输出描述:

若无解输出 "NO"。

否则输出两行,第一行一个字符串 "YES"(均不含引号),接下来一行 n 个正整数描述你还原的数列 a

你需要保证
示例1

输入

复制
5 3
1 1 4
2 2 5
2 2 4

输出

复制
YES
5 1 3 2 4
示例2

输入

复制
6 3
2 1 4
2 3 6
1 2 6

输出

复制
YES
1 3 2 4 3 5