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 C# (judge verdict: Accepted)

using System;
using System.Text;

namespace _066_TicTacToe
{
	class Program
	{
		static void Main ( string[] args )
		{
			string inputStr;
			StringBuilder output = new StringBuilder (100);

			while ((inputStr = Console.ReadLine ()) != null)
			{
				char result = IsLine (inputStr);
				output.AppendLine (result.ToString ());
			}
			Console.Write (output);
		}

		static char IsLine ( string result )
		{
			//?¨?
			if (result[0] != 's' && result[0] == result[1] && result[1] == result[2])
			{
				return result[0];
			}
			else if (result[3] != 's' && result[3] == result[4] && result[4] == result[5])
			{
				return result[3];
			}
			else if (result[6] != 's' && result[6] == result[7] && result[7] == result[8])
			{
				return result[6];
			}

			//???
			else if (result[0] != 's' && result[0] == result[3] && result[3] == result[6])
			{
				return result[0];
			}
			else if (result[1] != 's' && result[1] == result[4] && result[4] == result[7])
			{
				return result[1];
			}
			else if (result[2] != 's' && result[2] == result[5] && result[5] == result[8])
			{
				return result[2];
			}

			//??????
			else if (result[0] != 's' && result[0] == result[4] && result[4] == result[8])
			{
				return result[0];
			}
			else if (result[2] != 's' && result[2] == result[4] && result[4] == result[6])
			{
				return result[2];
			}

			return 'd';
		}
	}
}