Problem:
三目並べ

三目並べは，３ × ３のマス目の中に交互に ○ と × を入れていき、縦・横・斜めの何れかに一列 ○ か × が並んだときに、勝ちとなるゲームです（図1〜図3 を参照）

図１：○の勝ち

図２：× の勝ち

図３：引き分け

三目並べは、○と×が交互にマス目を埋めていき、どちらかが一列揃ったときにゲーム終了となります。そのため、図 4 のように、○と×が両方とも一列そろっている場合はありえない局面です。ありえない局面が入力されることはありません。

図４：ありえない局面

三目並べの盤面を読み込んで、勝敗の結果を出力するプログラムを作成して下さい。

Input

入力は複数のデータセットからなります。各データセットとして、盤面を表す１つの文字列が１行に与えられます。
盤面の文字列は、○、×、空白をそれぞれ半角英小文字の o、x、s であらわし、下図のマス目の順に並んでいます。

データセットの数は 50 を超えません。

Output

データセットごとに、○が勝ちなら半角英小文字の o を、×が勝ちなら半角英小文字の x を、引き分けならば半角英小文字の d を１行に出力してください。

Sample Input

ooosxssxs
xoosxsosx
ooxxxooxo

Output for the Sample Input

o
x
d

Solution in Ruby (judge verdict: Wrong Answer)

def judge(hori, vert, cros, pat)
  datas = "hori,vert,cros".split(",")
  datas.each {|elem|
    list = Array.new
    last = elem == "cros" ? 1 : 2
    for i in 0..last
      eval("list = #{elem}[i].uniq")
      return true if (list[0] == pat) and (list.size == 1)
    end    
  }
  return false
end

lines = Array.new(3)
data = Array.new(3){ Array.new(3) }

for i in 0..2
  lines[i] = gets
end

dlist = Array.new(3)
dlist[0] = lines[0].scan(/.{3}/)
dlist[1] = lines[1].scan(/.{3}/)
dlist[2] = lines[2].scan(/.{3}/)

hRow = Array.new(3)
crs = Array.new(2){ Array.new }
for i in 0..dlist[0].length - 1
  hRow[0] = dlist[0][i].split("")
  hRow[1] = dlist[1][i].split("")
  hRow[2] = dlist[2][i].split("")
  vRow = hRow.transpose
  crs[0].push(hRow[0][0])
  crs[0].push(hRow[1][1])
  crs[0].push(hRow[2][2])
  crs[1].push(hRow[0][2])
  crs[1].push(hRow[1][1])
  crs[1].push(hRow[2][0])

  if judge(hRow, vRow, crs, "o")
    puts "o"
  elsif judge(hRow, vRow, crs, "x")
    puts "x"
  else
    puts "d"
  end

  crs[0].clear
  crs[1].clear
end