Problem:
Problem A: Ennichi

縁日に来たうさぎが, ある出店のゲームの景品がキャロットケーキであるのを見つけた. このゲームのルールは以下の通りである.

縦h マス× 横w マスの格子状のフィールドがあり, 各マスにつき高々1 個のブロックが置かれる. 各ブロックにはアルファベット大文字(‘A’ - ‘Z’) のいずれかで表される色がついている. 同色のブロックが縦または横に一直線上にn 個以上連続して並ぶと, それらのブロックは消滅する.

参加者は横に隣り合う2 つのマスを選んで, それらの状態を互いに入れ替える操作ができる. ブロックの入れ替え, 消滅, 落下によってブロックの有るマスの1 つ下のマスにブロックが無くなると, このブロックは落下する. このときふたたび同色のブロックがn 個以上並ぶと消滅する. ただし, ブロックの消滅は, 落下するブロックが存在する間は起こらず, すべてのブロックの落下が終了したタイミングで同時に起こる.

1 回の操作でフィールド上のすべてのブロックを消滅させると, このゲームは成功となり景品のケーキを得ることができる. うさぎは1 回分の参加費で確実にケーキを手に入れたく, それができない場合は参加したくない. ゲーム開始時のフィールドの状態から, うさぎがこのゲームに参加すべきであるか答えよ.

Input

入力の一行目にはh, w, n がスペースで区切られて与えられる.

2 ≤ h,w, n ≤ 30

続くh 行にはフィールドの状態が上から順に与えられる. アルファベット大文字はブロックを, ‘.’ は空きマスを表す. 与えられるフィールドの状態には, 縦あるいは横にn 個以上連続する同色のブロックはなく, 落下する状態にあるブロックもない. 1 個以上のブロックが存在する.

Output

うさぎがこのゲームに参加すべきであるなら”YES”を, そうでないなら”NO”を一行に出力せよ.

Sample Input 1

4 6 3
......
...Y..
...Y..
RRYRYY

Sample Output 2

YES

Sample Input 1

4 6 3
......
...Y..
...Y..
RRYRY.

Sample Output 2

NO

Solution in Ruby (judge verdict: Wrong Answer)

def solve(block)
  clear(delete(Marshal.load(Marshal.dump(block))))
end

def delete(block)
  h = block.size
  w = block.first.size
  delete = Array.new(h) {Array.new(w)}
  for i in 0...h do
    for j in 2...w do
      if(block[i][j] == block[i][j-1] && block[i][j] == block[i][j-2])
        delete[i][j] = delete[i][j-1] = delete[i][j-2] = true
      end
    end
  end
  for j in 0...w do
    for i in 2...h do
      if(block[i][j] == block[i-1][j] && block[i][j] == block[i-2][j])
        delete[i][j] = delete[i-1][j] = delete[i-2][j] = true
      end
    end
  end
  for i in 0...h do
    for j in 0...w do
      block[i][j] = "." if(delete[i][j])
    end
  end
  block
end

def clear(block)
  h = block.size
  w = block.first.size
  ok = true
  for i in 0...h do
    for j in 0...w do
      ok = false if block[i][j] != "."
    end
  end
  ok
end

h, w, n = gets.split.map(&:to_i)
block = []
h.times do
  block.push(gets.chomp)
end
ok = false
for i in 0...h do
  for j in 1...w do
    next if block[i][j-1] == block[i][j]
    block[i][j-1], block[i][j] = block[i][j], block[i][j-1]
    ok = true if solve(Marshal.load(Marshal.dump(block)))
    block[i][j-1], block[i][j] = block[i][j], block[i][j-1]
  end
end
puts ok ? "YES" : "NO"