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: Time Limit Exceeded)

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<string>
#include<vector>
#include<list>
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<cstring>
#include<stack>
#include<functional>
using namespace std;

int int_pow(int n,int m){
	int ans = 1;
	while(m--) ans *= n;
	return ans;
}

int main(){
	while(true){
		vector<int> n[3];
		char C;
		int r;
		int cnt = 0;
		while(r = scanf("%c",&C),C!='\n'){
			if(r==EOF) return 0;
			else if(C=='+' || C=='=') cnt++;
			else if(C=='X') n[cnt].push_back(-1);
			else n[cnt].push_back(C-'0');
		}
		bool na = true;
		for(int t=0;t<9;t++){
			int n_[3] = {};
			for(int i=0;i<3;i++){
				for(int j=0;j<n[i].size();j++){
					int a = n[i][n[i].size()-j-1];
					if(a==-1) a = t;
					n_[i] += a*int_pow(10,j);
				}
			}
			if(n_[0]+n_[1]==n_[2]){
				printf("%d\n",t); na = false; break;
			}
		}
		if(na) puts("NA");
	}
}