Problem:
覆面算

数式の一部を隠してしまって、隠した数字を探す問題を覆面算といいます。今回は、数式の中のある数字のいくつかを X で隠してしまった式を扱います。以下の数式を入力して、結果を出力するプログラムを作成してください。

数式

「数字列 + 数字列 = 数字列」の形で、1 行の単純な足し算式です。

「数字列」は、数字 0 から 9 と文字 X の並びです。

2 桁以上の「数字列」の左端の数字は 0 ではないものとします。

X は、数式全体の中で必ず 1 つ以上含まれます。

結果

覆面算の答えです。数式が成り立つ様な X の値で 0 ~ 9 のどれか 1 つです。2 つ以上の答えはないものとします。

答えがない場合、結果は“NA”としてください。

Input

複数のデータセットが与えられます。各データセットとして、X を 1 つ以上含む足し算式(空白を含まない 126 文字以内の文字列) が１行に与えられます。データセットの数は 150 を超えません。

Output

各データセットについて、覆面算の結果を１行に出力してください。数字 0 ~ 9 または NA を出力してください。

Sample Input

123+4X6=X79
12X+4X6=X79
XX22+89=X2XX

Output for the Sample Input

5
NA
1

Solution in C# (judge verdict: Wrong Answer)

using System;

namespace AOJ.Volume1
{
    public class Alphametic
    {
        private static long Replace(string st, int num)
        {
            long ret = 0;
            int cnt = st.Length;
            for (int i = 0; i < cnt; i++)
            {
                int n;
                if (st.Substring(i, 1) == "X") { n = num; }
                else { n = int.Parse(st.Substring(i, 1)); }

                ret += n * (long)Math.Pow(10, cnt - 1 - i);
            }

            return ret;
        }

        public static void Main()
        {
            while (true)
            {
                string question = Console.ReadLine();
                if (string.IsNullOrEmpty(question)) { break; }

                // ??°??????????§£
                var str = question.Split('+', '=');

                // 0???9?????°?????§??°??????????????????????????§??????
                int st = 0;
                if (str[0].Substring(0, 1) == "X" || str[1].Substring(0, 1) == "X" || str[2].Substring(0, 1) == "X")
                {
                    st = 1;
                }

                bool find = false;
                for (int i = st; i <= 9; i++)
                {
                    long n1 = Replace(str[0], i);
                    long n2 = Replace(str[1], i);
                    long n3 = Replace(str[2], i);

                    if (n1 + n2 == n3)
                    {
                        find = true;
                        Console.WriteLine(i);
                        break;
                    }
                }
                if (!find) { Console.WriteLine("NA"); }
            }
        }
    }
}