32. 迷你數獨

迷你數獨由4*4個格子組成,每格空白或1~4間的整數,而4*4個格子又可以被分為左上、右上、左下、右下4個2*2大小的區域。例如以下的迷你數獨矩陣:
3 1 4 2
4 2 3 1
1 3 2 4
2 4 1 3
此矩陣又可分為左上、右上、左下、右下4個2*2大小的區域 (Block),以上面的矩陣為例,左上區域為
3 1
4 2
右下區域為
2 4
1 3
矩陣中的值須滿足以下數獨規則:
1. 每個直欄  (Column)中,數字1~4皆不能缺少也不會重複出現。
2. 每個橫列 (Row)中,數字1~4皆不能缺少也不會重複出現。
3. 每個區域(Block)中,數字1~4皆不能缺少也不會重複出現。

本題目需計算出完整的迷你數獨矩陣,例如輸入矩陣:
0 0 0 0
0 2 3 1
0 3 2 4
2 0 0 3
其中:
(1) 本題目0 表示需要程式計算取代數字的地方;
(2) 本題目非0數字固定8個;
(3) 本題目至少2個直欄、橫列、或區域,存在一個0,
計算出完整數獨矩陣步驟:
(1)右下區域中已知有[2 3 4],因此0應被取代為1。
(2) index=3的直欄  (Column)已有[1 3 4],因此0應被取代為2。
(3) index=1的橫列(Row)已有[1 2 3],因此0應被取代為4。
(4) index=2的橫列(Row)已有[2 3 4],因此0應被取代為1。
因此矩陣變為
0 0 0 2
4 2 3 1
1 3 2 4
2 0 1 3
繼續第二、三輪計算,即可完成所有0的替換。

【輸入說明】
輸入共有4行,每行有4個0~4的整數,其中0表示空白的格子,輸入的每個整數中間以一個空白隔開,表示一個4*4迷你數獨的初始狀態

【輸出說明】
輸出共有4行,每行有4個1~4的整數,每個整數間以一個空白隔開。表示一個4*4迷你數獨的結果,且結果符合數獨規則。

【測試資料一】
輸入:
3 0 1 4
0 0 0 2
2 0 4 0
1 4 0 0

輸出:
3 2 1 4
4 1 3 2
2 3 4 1
1 4 2 3

【測試資料二】
輸入:
1 0 4 2
4 0 3 0
0 1 0 4
0 0 1 0

輸出:
1 3 4 2
4 2 3 1
3 1 2 4
2 4 1 3

【測試資料三】
輸入:
1 0 0 0
4 2 3 0
0 0 1 0
3 1 0 2

輸出:
1 3 2 4
4 2 3 1
2 4 1 3
3 1 4 2

【隱藏測試資料一】
輸入:
0 2 3 0
4 0 0 2
0 0 0 3
3 4 0 1

輸出:
1 2 3 4
4 3 1 2
2 1 4 3
3 4 2 1

【隱藏測試資料二】
輸入:
0 4 0 0
2 3 4 0
0 0 2 0
4 2 0 3

輸出:
1 4 3 2
2 3 4 1
3 1 2 4
4 2 1 3

【隱藏測試資料三】
輸入:
1 3 0 0
0 2 1 0
3 0 2 0
0 4 3 0

輸出:
1 3 4 2
4 2 1 3
3 1 2 4
2 4 3 1