立體光刻(Stereolithography,簡稱 SLA)係一種利用激光逐層將液態材料固化成固體物件嘅 3D 打印技術。喺呢道題目入面,我哋考慮 SLA 嘅一個 2D 簡化版本:要打印嘅物件設計可以表示成一個由 # 同 . 字元組成嘅矩形網格,其中 # 代表被物件佔據嘅網格格仔,而 . 代表空白位置。例如,下面係一個 $4 \times 8$ 嘅設計:
..#..... ..#..#.. #.#.##.. #.#####.
一個設計唔一定係由單一一個連通塊組成,但係除咗設計最底嗰行嘅 # 格仔之外,每一個 # 格仔都必須由佢正下方嘅另一個 # 格仔支撐住。
用 SLA 打印物件嘅過程係由最底嗰行開始逐層進行嘅。首先,嗰一行嘅所有格仔都會被液態光敏樹脂浸滿。跟住激光會掃過成行,將所有 # 格仔入面嘅樹脂固化成固體,並跳過所有 . 格仔。然後,最左邊嘅 # 左側同埋最右邊嘅 # 右側剩低嘅液體會流走,而其他液體就會被困住。(如果嗰一行完全冇 # 格仔——呢種情況只會發生喺物件已經完全打印好之後、靠近設計頂部嘅行——咁嗰一行嘅所有液體都會流走。)之後呢個過程會對隨後的每一行重複進行。對於上面嘅設計,喺打印完成之後,樹脂會被困喺下面標有 ~ 字元嘅所有格仔入面:
..#..... ..#~~#.. #~#~##.. #~#####.
當你手動將物件入面剩低嘅樹脂吸走嗰陣,你開始好奇:如果淨係知道打印之後設計嘅每一行剩低幾多液態樹脂,可以還原出幾多原本嘅設計呢?對於上面嘅設計,每一行(由設計頂部開始數起)剩低嘅樹脂數量係 $0, 2, 2, 1$。其他設計亦都可以有相同嘅剩餘樹脂特徵;例如:
.... #..# #..# #.##
畀定一個列表,表示每一行(由最頂嗰行開始)剩低幾多個液態樹脂格仔,請輸出喺打印之後每一行會包含相應數量液態樹脂嘅最窄物件設計嘅闊度。如果唔存在噉樣嘅設計,請輸出 impossible。
輸入格式
輸入嘅第一行包含一個整數 $N$($1 \le N \le 10^5$),代表物件設計嘅行數。接住落嚟有 $N$ 行,每行包含一個整數 $x$($0 \le x \le 10^9$),按由上到下嘅順序代表目標物件設計入面每一行剩低嘅液態樹脂格仔數量。
至少有一行會有至少一個剩低嘅液態樹脂格仔。
輸出格式
請輸出每一行剩低嘅液態樹脂格仔數量都同輸入相符嘅最窄物件設計嘅闊度(即列數)。(「最窄」嘅意思係列數盡可能細。)如果唔存在噉樣嘅設計,請改為輸出 impossible。
範例
輸入格式 1
4 0 2 2 1
輸出格式 1
4
輸入格式 2
3 4 0 4
輸出格式 2
11
說明
範例輸入 1 對應上面嘅例子。對於範例輸入 2,其中一個可能嘅最窄設計係:
#....#..... ######..... ######....#