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 JAVA (judge verdict: Accepted)

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		BigInteger a, b, c;
		boolean flag;
		String s;

		a = new BigInteger("0");
		b = new BigInteger("0");
		c = new BigInteger("0");
		while (sc.hasNext()) {
			s = sc.next();
			flag = true;
			for (int i = 0; i < 10; i++) {
				String s2 = s;
				s2 = s2.replace('X', (char)(i + '0'));
				int index = 0;
				a = f(s2, index);
				while (Character.isDigit(s2.charAt(index))) {
					index++;
				}
				index++;
				b = f(s2, index);
				while (Character.isDigit(s2.charAt(index))) {
					index++;
				}
				index++;
				c = f(s2, index);
				if (a == null || b == null || c == null) {
					continue;
				}
				if (a.add(b).equals(c)) {
					System.out.println(i);
					flag = false;
					break;
				}
			}
			if (flag) {
				System.out.println("NA");
			}
		}
	}

	public static BigInteger f(String s, int i) {
		BigInteger a = new BigInteger(Integer.toString(s.charAt(i) - '0'));
		i++;
		if (a.equals(BigInteger.ZERO) && i < s.length() && Character.isDigit(s.charAt(i))) {
			return null;
		}
		while (i < s.length() && Character.isDigit(s.charAt(i))) {
			a = a.multiply(BigInteger.TEN);
			a = a.add(new BigInteger(Integer.toString(s.charAt(i) - '0')));
			i++;
		}
		return a;
	}
}