Problem:
パズル

たろう君は 9 × 9 のマス目に 1〜9 の数字を配置するパズルで遊んでいます。このパズルでは以下の規則で数字を配置しなければいけません。

同じ列に 1 つの数字はちょうど 1 回だけ現われる

同じ行に 1 つの数字はちょうど 1 回だけ現われる

二重線で区切られた 3 × 3 の各範囲には、1 つの数字はちょうど 1 回だけ現われる

例えば、下の図 1 はそのような規則を満たした配置の一つです。しかしたろう君は、図 2 のようによく規則に反した配置を作ってしまいます。左端の列に「2」が 2 回現われて、「1」が 1 回も現われず、左から2 番目の列に「1」が 2 回現われて、「2」が 1 回も現われていません。

図 1

図 2

たろう君を助けるために、数字の配置を読み込んで、その配置が規則を満たしているかどうかを調べ、規則に反していたらその場所を出力するプログラムを作成してください。3 つの規則に照らして誤っている (2 回以上現れている) 数字の前には * (半角アスタリスク)を、誤っていない数字の前には空白を表示してください。

Input

複数のデータセットが与えられます。最初の行にデータセットの数 n (n ≤ 20) が与えられます。各データセットとして、パズルの状態を示す 1 行 9 文字、9 行からなる数字列が与えられます。

Output

各データセットについて以下を出力してください。

与えられた数字と * (半角アスタリスク)と空白。誤っている数字の前には *、誤っていない数字の前には半角空白を付加する。

データセットの間に 1 行の空行を入れてください。

Sample Input

2
2 1 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
2 3 4 5 6 7 8 9 1
5 6 7 8 9 1 2 3 4
8 9 1 2 3 4 5 6 7
3 4 5 6 7 8 9 1 2
6 7 8 9 1 2 3 4 5
9 1 2 3 4 5 6 7 8
2 1 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
2 3 4 5 6 7 8 9 1
5 6 7 8 9 1 2 3 4
8 9 1 2 3 4 5 6 7
3 4 5 6 7 8 9 1 2
6 7 8 9 1 2 3 4 5
9 1 2 3 4 5 6 7 8

Output for the Sample Input

*2*1 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
*2 3 4 5 6 7 8 9 1
5 6 7 8 9 1 2 3 4
8 9 1 2 3 4 5 6 7
3 4 5 6 7 8 9 1 2
6 7 8 9 1 2 3 4 5
9*1 2 3 4 5 6 7 8

*2*1 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
*2 3 4 5 6 7 8 9 1
5 6 7 8 9 1 2 3 4
8 9 1 2 3 4 5 6 7
3 4 5 6 7 8 9 1 2
6 7 8 9 1 2 3 4 5
9*1 2 3 4 5 6 7 8

Solution in Ruby (judge verdict: Accepted)

formed_datasets = []

def repeated_num(line)
  line.map { |num, _| num }.sort.each_with_object([]) { |n, a| 
    !a.last.nil? && a.last[0] == n ? a.last[1] += 1 : a << [n, 1]
  }.map { |n, i| n if i > 1 }.compact
end

def checker(arr)
  arr.find_all { |n, _| repeated_num(arr).include?(n) }.map { |_, c| c }
end

def row_check(puzzle)
  puzzle.map { |row| checker(row) }.flatten(1)
end

def column_check(puzzle)
  puzzle.transpose.map { |col| checker(col) }.flatten(1)
end

def square_check(puzzle)
  squared = Array.new(9).map { [] }

  puzzle.each_with_index do |r, i|
    r.each_with_index do |n, j|
      squared[i / 3 * 3 + j / 3] << n
    end
  end
  
  squared.map { |chunk| checker(chunk) }.flatten(1)
end

gets.to_i.times do
  puzzle = Array.new(9) { Array.new(9) }

  9.times do |i|
    gets.split.map(&:to_i).each_with_index { |num, j| puzzle[i][j] = [num, [i, j]]}
  end

  repeated_num_coor =
    (row_check(puzzle) + column_check(puzzle) + square_check(puzzle)).uniq

  formed_datasets << puzzle.map { |row|
    row.map { |n, c| repeated_num_coor.include?(c) ? "*#{n}" : " #{n}" }.join
  }.join("\n")
end

puts formed_datasets.join("\n\n")