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: Wrong Answer)

import java.io.*;
import java.util.*;

public class Main{
	public static void main(String args[]){
		try{
			new Main();
		}catch(IOException err){
			err.printStackTrace();
		}
	}

	public Main() throws IOException{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		List<Integer> Ans = new ArrayList<Integer>();
		String line;
		String c;
		String[] num1, num2, num3;
		int n1, n2, n3;

		while((line = in.readLine()) != null){
			if(line.length() == 0){
				break;
			}

			if(!line.contains("X")){
				Ans.add(-1);
				continue;
			}

			n1 = 0;
			n2 = 0;
			n3 = 0;
			String[] dst = line.split("\\+");
			n1 = dst[0].length();
			dst = dst[1].split("=");
			n2 = dst[0].length();
			n3 = dst[1].length();

			num1 = new String[n1];
			num2 = new String[n2];
			num3 = new String[n3];

			for(int i=0; i<line.length(); i++){

				if(i < n1){
					num1[n1-i-1] = line.substring(i, i+1);
				}

				else if(i >= n1+1 && i< n1+n2+1){
					num2[n2-i+n1] = line.substring(i, i+1);
				}

				else if(i>=n1+n2+2){
					num3[n3-i+n1+n2+1] = line.substring(i, i+1);
				}
			}

			for(int i=0; i<=9; i++){
				if(isOK(num1, num2, num3, i)){
					Ans.add(i);
					break;
				}

				if(i==9){
					Ans.add(-1);
				}
			}
		}

		for(int i=0; i<Ans.size(); i++){
			if(Ans.get(i) == -1){
				System.out.println("NA");
			}
			else{
				System.out.println(Ans.get(i));
			}
		}
	}

	public boolean isOK(String[] num1, String[] num2, String[] num3, int x){
		int a, b, c;
		int d = 0;
		int e = 0;
		if(x==0 && (
				(num1[num1.length-1].equals("X") && num1.length != 1) ||
				(num2[num2.length-1].equals("X") && num2.length != 1) ||
				(num3[num3.length-1].equals("X") && num3.length != 1) )){
			return false;
		}

		while(true){
			if(d >= num1.length) a = 0;
			else a = (num1[d].equals("X")) ? x : Integer.parseInt(num1[d]);
			if(d >= num2.length) b = 0;
			else b = (num2[d].equals("X")) ? x : Integer.parseInt(num2[d]);
			if(d >= num3.length) c = 0;
			else c = (num3[d].equals("X")) ? x : Integer.parseInt(num3[d]);

			if(d >= num1.length && d >= num2.length && d >= num3.length) break;

			if((a+b+e)%10 != c){
				return false;
			}
			else{
				e = (a+b) / 10;
				d++;
			}
		}

		return true;
	}
}