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;

public class hello
{
    public static void Main()
    {
        string line;
        for (; (line = Console.ReadLine()) != null;)
        {
            string[] chkx = line.Trim().Split('+', '=');
            var a = chkx[0][0]; var b = chkx[1][0]; var c = chkx[2][0];
            if (a == 'X' | b == 'X' | c == 'X')
            {
                for (int i = 1; i < 10; i++)
                {
                    string[] s0 = line.Replace("X", i.ToString()).Split('+', '=');
                    if (ChkAdd(s0[0],s0[1],s0[2]))
                    {
                        Console.WriteLine(i);
                        goto loopend;
                    }
                }
                Console.WriteLine("NA");
            }
            else
            {
                for (int i = 0; i < 10; i++)
                {
                    string[] s0 = line.Replace("X", i.ToString()).Split('+', '=');
                    if (ChkAdd(s0[0], s0[1], s0[2]))
                    {
                        Console.WriteLine(i);
                        goto loopend;
                    }
                }
                Console.WriteLine("NA");
            }
        loopend:;
        }
    }
    public static bool ChkAdd(string a, string b, string c)
    {
        var a0 = a.Length; var b0 = b.Length; var abmax = Math.Max(a0, b0);
        var c0 = c.Length;
        a = new string('0', abmax - a0 + 1) + a;
        b = new string('0', abmax - b0 + 1) + b;
        c = new string('0', abmax - c0 + 1) + c;
        var aandb = new int[abmax+1];
        var cc = new int[abmax + 1];
        for (int i = abmax; i > 0; i--)
        {
            cc[i] = int.Parse(c[i].ToString());
            aandb[i] += int.Parse(a[i].ToString()) + int.Parse(b[i].ToString());
                if (aandb[i] > 9)
                {
                    aandb[i] -= 10;
                    aandb[i - 1] += 1;
                }
        }
        var count = 0;
        for (int i = 0; i < abmax+1; i++)
        {
            if (aandb[i] != cc[i]) count = 1;
        }
        return count == 0;
    }
}