Problem:
Blur

図 1 のような 10×10 のマス目の「布」があり、（1，2）のようにX座標・Y座標の値の対でマス目を示すことにします。座標値は 0 から始まる整数とします。例えば、図 1 の◎の座標は (1, 2) です。
この「布」に染料を少しずつたらして染物を作ります。たらす染料の滴には「大」「中」「小」の 3 サイズがあり、染料の滴の落ちたマス目を中心に図 1 のように周囲も色がつきます。図 1 で☆が中心、○が色のにじむ範囲です。

「布」は、最初は「まっしろ」つまり、どのマス目も色の濃さを示す値が 0 とします。染料の滴が落ちるごとに値が 1 ずつ増えていきます。「小」が（1, 2）、「中」が（3, 2）に落ちた場合、各マス目の値は図 2 の左のようになります。染料がもったいないので、図 2 の右に示すようなにじむ範囲が布の外にはみ出すような染料の落とし方はしないことになっています。また、同じ場所に複数の染料をたらすこともあります。

このような作業を何回か繰り返した結果、布にすばらしい模様が浮かび上がりましたが、残念なことに、うっかり作業経過を記録し忘れてしまいました。どうにもさっぱり思い出せませんが、かろうじて、落とした染料の滴数は覚えていました。あなたは、すばらしい染物を再現しなければなりません。すばらしい染物のデータを読みこんで、どこに、どのような染料をたらしたかを出力するプログラムを作成してください。なお、落とした染料の滴数は 12 以下とします。

入力

入力の形式は以下のとおりです：

最初の 1 行に落とした染料の滴数 n が与えられます。次の行から 10 行に各座標の色の濃さが空白区切りで与えられます。

出力

出力は n 行からなります。染料の滴の「大」を 3、「中」を 2、「小」を 1 で表し、落とした染料ごとに、そのX座標、Y座標、滴の大きさを空白で区切って1行に出力してください。

染料のたらし方はどのような順番で出力しても良いものとします。

入力例1

2
0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0
0 0 0 1 0 0 0 1 1 1
0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

出力例1

3 2 1
8 4 2

入力例2

6
0 0 1 0 0 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0
1 1 1 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 0 0
0 0 1 1 1 3 1 1 0 0
0 0 1 1 3 1 1 1 0 0
0 0 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 1 1 1
0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 1 0 0

出力例2

2 2 3
7 7 3
6 3 2
3 6 2
4 4 1
5 5 1

Solution in Ruby (judge verdict: Wrong Answer)

H = W = 10
Blur = [
  [[0,0], [1,-1], [1,0], [1,1], [2,0]],
  [[0,0], [0,1], [0,2], [1,0], [1,1], [1,2], [2,0], [2,1], [2,2]],
  [[0,0], [1,-1], [1,0], [1,1], [2,-2], [2,-1], [2,0], [2,1], [2,2], [3,-1], [3,0], [3,1], [4,0]],
]
Small, Medium, Large = 0, 1, 2
Y, X = 0, 1

def solve(cloth)
  @answer = Array.new
  dfs(cloth, 0, 0)
  @answer
end

def dfs(cloth, y, x)
  for ny in 0...H do
    for nx in 0...W do
      break if cloth[ny][nx] != 0
    end
    break if cloth[ny][nx] != 0
  end
  return true if ny==H-1 && nx==W-1 && cloth[ny][nx]==0
  return false if ny<y || (ny==y && nx<x)
  for b in 0...Blur.size do
    ok = true
    c = cloth.map(&:dup)
    Blur[b].each do |d|
      i = ny+d[Y]
      j = nx+d[X]
      if i<0 || H<=i || j<0 || W<=j || cloth[i][j]==0
        ok = false
        break
      end
      c[i][j] -= 1
    end
    next unless ok
    if dfs(c, ny, nx)
      case b
        when Small
          @answer.push([nx, ny+1, 1])
        when Medium
          @answer.push([nx+1, ny+1, 2])
        when Large
          @answer.push([nx, ny+2, 3])
      end
      return true
    end
  end
  false
end

ink = gets.to_i
cloth = Array.new
H.times do cloth.push(gets.split.map(&:to_i)) end
solve(cloth).each do |e|
  puts e*" "
end