Потренировавшись в решении филлomino (Fillomino), Little Cyan Fish решает продолжить тренировки в игре «The Artisan of Glimmith».
Сначала Little Cyan Fish знакомит вас с правилами филлomino:
Прямоугольную сетку из $m$ строк и $n$ столбцов требуется разбить на несколько областей (клетки каждой области должны быть ортогонально связны) так, чтобы любые две соседние области имели разную площадь. В некоторых клетках сетки уже записаны числа. Число указывает площадь области, которой принадлежит эта клетка.
Пример головоломки филлomino. Источник: Puzzle GP 2022 R4
Теперь Little Cyan Fish даёт вам поле филлomino и хочет построить любое корректное решение для этой головоломки.
Конечно, эта задача слишком сложна для Little Cyan Fish, поэтому вам нужно решить только случай $m = 1$. Другими словами, дана строка из $n$ клеток, и вы хотите разбить эти клетки на несколько отрезков (каждый отрезок полностью состоит из нескольких подряд идущих клеток), требуя, чтобы:
- Любые два соседних отрезка имели разную длину;
- В некоторых клетках были записаны числа, и эти числа указывали количество клеток в отрезке, которому принадлежит данная клетка.
Little Cyan Fish просит вас определить, существует ли корректное решение для данного поля. Если оно существует, вам также нужно вывести любое корректное решение.
Входные данные
Входные данные состоят из нескольких наборов входных данных. Первая строка входных данных содержит одно целое число $T$ ($1 \le T$), обозначающее количество наборов входных данных.
Для каждого набора входных данных первая строка содержит целое число $n$ ($1 \le n \le 10^6$).
Следующая строка содержит $n$ целых чисел $a_1, a_2, \dots, a_n$ ($0 \le a_i \le n$). Если $a_i = 0$, это означает, что в $i$-й клетке число не записано. В противном случае это означает, что в $i$-й клетке записано число $a_i$.
Гарантируется, что сумма $n$ по всем наборам входных данных не превышает $10^6$.
Выходные данные
Для каждого набора входных данных, если не существует ни одного корректного способа заполнить числа, выведите одну строку «No».
В противном случае первая строка выходных данных должна содержать строку «Yes». В следующей строке выведите $n$ целых чисел, представляющих длину отрезка, в котором находится каждая клетка в построенной вами схеме. Если подходящих схем несколько, вы можете вывести любую из них.
Пример
Входные данные 1
7 3 0 0 0 4 2 0 0 0 4 0 2 0 0 6 0 3 3 0 3 0 10 2 0 0 3 0 0 4 0 0 1 6 0 0 1 1 0 0 6 1 2 3 4 5 6
Выходные данные 1
Yes 2 2 1 No Yes 1 2 2 1 No Yes 2 2 3 3 3 4 4 4 4 1 No No