Universal Cup Judging System

Universal Cup

Süre Sınırı: 1.0 s Bellek Sınırı: 1024 MB Toplam puan: 100 Zorluk: [göster] Hack'lenebilir ✓
İstatistikler

Потренувавшись у розв'язанні філломіно (Fillomino), Little Cyan Fish вирішує продовжити тренування у грі «The Artisan of Glimmith».

Спочатку Little Cyan Fish знайомить вас із правилами філломіно:

Прямокутну сітку з $m$ рядків і $n$ стовпців потрібно розбити на декілька областей (клітинки кожної області повинні бути ортогонально зв'язними) так, щоб будь-які дві сусідні області мали різну площу. У деяких клітинках сітки вже записані числа. Число вказує площу області, до якої належить ця клітинка.

problem_18007_e875ed6aff86064e6bfc40f5b6e7c6a4.png

Приклад головоломки філломіно. Джерело: Puzzle GP 2022 R4

Тепер Little Cyan Fish дає вам поле філломіно і хоче побудувати будь-який коректний розв'язок для цієї головоломки.

Звісно, ця задача занадто складна для 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

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.