Problem:
ABC Gene

文字列 ABC で表される遺伝子配列がある。あなたは次の操作を何回か行い、この遺伝子配列を書き換えていくことができる。

文字 A，B，C のうち 1 つを選ぶ。これを x とおく。遺伝子配列に含まれるすべての x をそれぞれ ABC へ同時に置き換える。

A，B，C だけからなる文字列 S が与えられる。遺伝子配列を S に一致させられるか判定せよ。

Constraints

1 ≤ |S| ≤ 5,000

S は A，B，C だけからなる。

Input Format

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

S

Output Format

遺伝子配列を S に一致させられるならば Yes を、一致させられないならば No を一行に出力せよ。

Sample Input 1

ABC

Sample Output 1

Yes

遺伝子配列ははじめから ABC である。

Sample Input 2

AABCC

Sample Output 2

Yes

B を選んで操作を行うと ABC → AABCC となる。

Sample Input 3

AABCABC

Sample Output 3

No

例えば、C を選んで操作を行っても AABCC → AABCABC とはならない。すべての C をそれぞれ ABC へ同時に置き換えるので、実際は AABCC → AABABCABC となる。

Solution in C# (judge verdict: Accepted)

using System;

public class Hello
{
    public static void Main()
    {
        var s = Console.ReadLine().Trim();
        var b = check(s);
        Console.WriteLine(b? "Yes":"No");
    }
    static bool check(string s)
    {
        while (true)
        {
            if (s.IndexOf("ABC") < 0) return false;
            if (s == "ABC") return true;
            if (s.Length > 3 && s.Substring(0, 3) == "ABC")
            {
                var w = s.Replace("ABC", "A");
                s = w;
            }
            else if (s.Length > 3 && s.Substring(s.Length - 3) == "ABC")
            {
                var w = s.Replace("ABC", "C");
                s = w;
            }
            else if (s.Length > 3)
            {
                var t = s.Replace("ABC", "");
                if (t.IndexOf("ABA") >= 0 | t.IndexOf("CBC") >= 0) return false;
                var w = s.Replace("ABC", "B");
                s = w;
            }
        }
    }
}