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;
import java.util.regex.MatchResult;
import java.util.regex.Pattern;

public class Main {
 public static void main(String[] args) {
	Pattern pattern = Pattern
	  .compile("([0-9X]+)\\+([0-9X]+)=([0-9X]+)");
	Scanner in = new Scanner(System.in);
	while (in.hasNext(pattern)) {
	 in.next(pattern);
	 MatchResult mr = in.match();
	 String a = mr.group(1);
	 String b = mr.group(2);
	 String c = mr.group(3);
	 int num = 0;
	 if ((a.startsWith("X") && (a.length() > 1)) ||
		 (b.startsWith("X") && (b.length() > 1)) ||
		 (c.startsWith("X") && (c.length() > 1))) {
		num++;
	 }
	 char cnum = 'N';
	 for (; num <= 9; num++) {
		cnum = Character.forDigit(num, 10);
		BigInteger ia = new BigInteger(a.replace('X', cnum));
		BigInteger ib = new BigInteger(b.replace('X', cnum));
		BigInteger ic = new BigInteger(c.replace('X', cnum));
		if (ia.add(ib).equals(ic)) {
		 break;
		} else {
		 cnum = 'N';
		}
	 }
	 if (cnum == 'N') {
		System.out.println("NA");
	 } else {
		System.out.println(cnum);
	 }
	}
 }
}