Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

消える数列、消えない数列

ただお君は頭の体操をするために、数列を使ったゲームをしています。このゲームでは、はじめに、１から９までの数字がランダムに並んだ列が与えられます。ただお君は、数列からその一部分を消していきます。ルールは、以下の通りです。

数列から、同じ数字が２つ以上並んでいる部分を適当に選ぶ。その部分を含み、連続して現れている同じ数字をすべて消す。

消した部分の右側に数列が残っていた場合は、それを左に詰めて、数列を１つにまとめる。

上の２つの操作を繰り返した結果、すべての数字が消えればゲームクリアとなる。

例えば、上の図のような 1,2,3,3,2,2,1,2,2 という数列の場合、

左から数えて、３番目、４番目の３を消すと 1,2,2,2,1,2,2

左から数えて、２番目から４番目の２を消すと 1,1,2,2

左から数えて、１番目と２番目の１を消すと 2,2

左から数えて、１番目と２番目の２を消すと、ゲームクリアとなります。

ただし、どのように数字を消してもクリアできない数列があります。たとえば、1,2,3,3,1,2 や 1,2,3,1,2,3 などの数列です。短い数列であれば、ただお君でもクリアできるかどうかがすぐに分かり、クリアできないと分かれば違う数列にチャレンジできますが、長い数列になるとそう簡単にはいきません。

与えられた数列が上のゲームをクリアできるかどうか判定するプログラムを作成せよ。

Input

入力は以下の形式で与えられる。

N
c1 c2 ... cN

１行目の N (1 ≤ N ≤ 100) は、数列の長さを表す整数である。２行目には１つの空白で区切られた N 個の整数 ci (1 ≤ ci ≤ 9) が与えられる。ci は数列の i 番目の数字を示す。

Output

上に示されたルールで数列を消すことができる場合は「yes」、できない場合は「no」を出力する。

Sample Input 1

8
1 2 3 3 2 1 2 2

Sample Output 1

yes

Sample Input 2

7
1 2 2 1 1 3 3

Sample Output 2

yes

Sample Input 3

16
9 8 8 7 7 6 5 4 4 5 1 1 2 2 3 3

Sample Output 3

no

Sample Input 4

5
1 1 2 2 1

Sample Output 4

yes

Solution in Ruby (judge verdict: Wrong Answer)

n = gets.to_i
a = gets.split.map(&:to_i)

def f(a, l, r)
    return false if l >= r
    i = l
    i += 1 until i > r || a[i] != a[l]
    return true if i > r
    return true if i > l + 1 && f(a, i, r)

    j = i
    loop do
        j += 1 until j > r || a[j] == a[l]
        break if j > r
        return true if f(a, i, j - 1) && g(a, j, r)

        j += 1 until j > r || a[j] != a[l]
        break if j > r
    end
    return false
end

def g(a, l, r)
    return true if l >= r
    i = l
    i += 1 until i > r || a[i] != a[l]
    return true if i > r
    return true if f(a, i, r)

    j = i
    loop do
        j += 1 until j > r || a[j] == a[l]
        break if j > r
        return true if f(a, i, j - 1) && g(a, j, r)

        j += 1 until j > r || a[j] != a[l]
        break if j > r
    end
    return false
end

p f(a, 0, n - 1)