喺練習咗數繪(Fillomino)技巧之後,小藍魚(Little Cyan Fish)決定喺遊戲「The Artisan of Glimmith」入面進行更多訓練。
小藍魚首先向你介紹數繪嘅規則:
對於一個 $m$ 行 $n$ 列嘅網格,將佢劃分為若干個區域(每個區域嘅單元格必須正交相連),使得任意兩個相鄰區域嘅面積唔同。 網格入面嘅某啲單元格已經填有數字。該數字表示佢所屬區域嘅面積。
數繪謎題嘅一個例子。來源:Puzzle GP 2022 R4
而家小藍魚畀你一個數繪棋盤,佢想你為呢個數繪謎題構造任意一個合法解。
當然,呢個問題對小藍魚嚟講太難喇,所以你只需要解決 $m = 1$ 嘅情況。換句話講,給定一行 $n$ 個單元格,你想將呢啲單元格劃分為若干個線段(每個線段完全包含若干個連續嘅單元格),要求:
- 任意兩個相鄰線段嘅長度唔同;
- 某啲單元格包含一啲數字,呢啲數字表示該單元格所屬線段嘅單元格數量(即線段長度)。
小藍魚請你判斷該棋盤係咪存在合法解。如果存在,你仲需要輸出任意一個合法解。
輸入格式
有多組測試數據。輸入嘅第一行包含一個整數 $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