Problem:
Chicken or the Egg

Time Limit: 8 sec / Memory Limit: 64 MB

A: 卵が先か鶏が先か

2012/2/8

卵が先か鶏が先かという問題はいまだかつて誰もわからなかった．
しかし今回の琵琶湖遺跡で発掘で獲得した文書にはその答えが記されているという．

2012/2/9

文書はchickenとeggという単語のみで構成されていた．このままでは答えがわからない．

2012/2/10

さらに文書を読み進めると，文書中の単語の順番は産まれた順番を表していることがわかった．
"eggchicken"とあった場合は，先に鶏が産まれ，その後に鶏が卵を産んだということを示している．

2012/2/11

"eggchickenchickenegg"という文を見つけた．
この文では，先に卵が産まれ，その卵から鶏が産まれる．
さらに昨日のルールでいくと，この鶏が鶏を産むということになってしまう．
鶏は卵を産まなければならないのに，これはおかしい．

2012/2/12

調査をする内に，文は同一単語が連続で出てきたときに分割されることがわかった．
"eggchickenchickenegg"であれば，"eggchicken"と"chickenegg"という文に分割される．
複数の文がある場合は，先頭の単語から順番に同じ時代に産まれたことを表すらしい．
さっきの例だと，"eggchicken"の一つ目の単語eggと，"chickenegg"の一つ目の単語chickenは，同じ時代に産まれたことを表すようだ．
さらに，これらを産んだchickenとeggも同じ時代に産まれたことを表す．
ん？これだと結局鶏か卵かどっちが先に産まれたかわからないじゃないか．

2012/2/13

どうやら同じ時代として産まれたものの内，より文の前方に書かれた方が先に産まれたようだ．
昨日の例だと，chickenの方が文の前方にあるから，結局鶏が最初に産まれたことになるらしい．
解読のルールを理解することができた．これで安心だ．
いや，まだぼう大な量の文書を解読せねばならないのだ．早く解読を急がねば．

2012/3/15

もう寿命が近いそうだ．手も足もロクに動かない．
この文書も結局時間が足りず解読できなかった．
この際誰でもいいから，去る前にどちらが先だったかを私に教えてくれないだろうか…．

あなたは親族に依頼を受けてやってきた人です．
おじいさんの最後の願いを叶えるために解読してください．

Input

文字列 s が1行与えられる． 文字列 s はeggとchickenの二つの単語で構成されており，文字列内に含まれる単語数は1以上1000以下である．

Output

eggかchickenのいずれかを出力せよ．

Sample Input 1

eggchickenegg

Sample Output 1

egg

Sample Input 2

chickeneggeggchicken

Sample Output 2

egg

Sample Input 3

eggeggchicken

Sample Output 3

chicken

Solution in JAVA (judge verdict: Accepted)

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

	static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		char[] str = sc.next().toCharArray();
		ArrayList<ArrayList<Boolean>> statements = new ArrayList<ArrayList<Boolean>>();
		ArrayList<Boolean> statement = new ArrayList<Boolean>();
		int maxLen = 0;
		for (int i = 0; i < str.length;) {
			boolean next = str[i] == 'c';
			if (!statement.isEmpty() && statement.get(statement.size() - 1) == next) {
				statements.add(statement);
				maxLen = Math.max(maxLen, statement.size());
				statement = new ArrayList<Boolean>();
			}
			statement.add(next);
			i += next ? 7 : 3;
		}
		statements.add(statement);
		maxLen = Math.max(maxLen, statement.size());
		for (ArrayList<Boolean> st : statements) {
			if (st.size() == maxLen) {
				System.out.println(st.get(maxLen - 1) ? "chicken" : "egg");
				break;
			}
		}
	}
}