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)

def get_all_index(a, value)
  index = []
  _a = a.dup
  while _a.include?(value)
    next_i = _a.index(value)
    index << next_i
    _a[next_i] = nil
  end
  index
end

n = gets.to_i
virgin = true

n.times do
  puzzle = []
  errata = []
  
  puts "" unless virgin

  9.times do
    puzzle << gets.split.map(&:to_i)
    errata << Array.new(9, true)
  end

  0.upto(8) do |i|
    0.upto(8) do |j|
      j.upto(8) do |k|
        if puzzle[i][j] == puzzle[i][k] && j != k
          errata[i][j] = false
          errata[i][k] = false
        end
        if puzzle[j][i] == puzzle[k][i] && j != k
          errata[j][i] = false
          errata[k][i] = false
        end
      end
    end
  end
  
  current_box = []
  box_index = []
  -1.upto(1) do |i|
    -1.upto(1) do |j|
      box_index << [i, j]
    end
  end
  [1,4,7].each do |i|
    [1,4,7].each do |j|
      current_box = []
      current_box_index = []
      box_index.each do |b|
        current_box_index << [b[0] + i, b[1] + j]
        current_box << puzzle[b[0] + i][b[1] + j]
      end
      if (temp = current_box.uniq.select{ |x| current_box.index(x) != current_box.rindex(x) }).any?
        temp.each do |m|
          get_all_index(current_box, m).each do |i|
            x, y = current_box_index[i]
            errata[x][y] = false
          end
        end
      end
    end
  end

  0.upto(8) do |i|
    0.upto(8) do |j|
      if errata[i][j]
        print " #{puzzle[i][j]}"
      else
        print "*#{puzzle[i][j]}"
      end
      puts "" if j == 8
    end
  end

  virgin = false if virgin
end