E. Простая операция Compare-and-Set
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Предположим, у нас есть глобальная переменная $$$v$$$, и мы определили операцию "Compare-and-Set" для нее. Операция проверяет, равна ли переменная $$$a$$$. Если это верно, значение переменной изменяется на $$$b$$$, и операция успешна. В противном случае переменная не изменяется, и операция неудачна. Обозначим эту операцию как $$$\operatorname{CAS}(a,b)$$$.

Представьте, что у вас есть список таких операций $$$\operatorname{CAS}(a_1,b_1), \dots, \operatorname{CAS}(a_n,b_n)$$$. Также у вас есть начальное значение переменной, $$$c$$$, и список желаний $$$w_1, \dots w_n$$$, где $$$w_i$$$ указывает, должна ли операция $$$\operatorname{CAS}(a_i,b_i)$$$ быть успешной. Ваша задача - определить порядок выполнения операций так, чтобы все желания были удовлетворены.

Входные данные

Первая строка содержит два целых числа $$$n$$$ и $$$c$$$ ($$$1 \le n \le 10^5$$$; $$$1 \le c \le 10^9$$$) — количество операций и начальное значение переменной.

Каждая из следующих $$$n$$$ строк содержит три целых числа $$$a_i, b_i, w_i$$$ ($$$1 \le a_i, b_i \le 10^9$$$; $$$0 \le w_i \le 1$$$), обозначающих операцию $$$\operatorname{CAS}(a_i, b_i)$$$, которую вы хотите, чтобы она была успешной, если $$$w_i = 1$$$, и неудачной, если $$$w_i = 0$$$. Операции пронумерованы от $$$1$$$ до $$$n$$$ в порядке ввода.

Выходные данные

Если не существует правильного порядка операций, выведите слово "No".

В противном случае выведите слово "Yes" и затем $$$n$$$ различных целых чисел $$$p_1, p_2, \ldots p_n$$$ ($$$1 \le p_i \le n$$$), означающих, что операция $$$p_1$$$ должна быть выполнена первой, затем операция $$$p_2$$$ и так далее. Если существует несколько возможных порядков, выведите любой из них.

Примеры
Входные данные
4 1
1 2 0
1 2 1
2 3 1
3 4 0
Выходные данные
Yes
4 2 1 3
Входные данные
3 1
1 2 1
1 2 1
1 2 0
Выходные данные
No