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: Accepted)

using System;
using System.Collections.Generic;
using System.Text;

class TEST{
	static void Main(){
		while(true){
			String s=Console.ReadLine();
			if(s==null)break;
			Sol mySol=new Sol(s);
			Console.WriteLine(mySol.Ans);
		}
	}
}


class Sol{
	String ans;
	public String Ans{
		get{return ans;}
	}
	
	
	public Sol(String expr){
		String A=expr.Substring(0,expr.IndexOf("+"));
		String B=expr.Substring(expr.IndexOf("+")+1,(expr.IndexOf("=")-expr.IndexOf("+")-1));
		String C=expr.Substring(expr.IndexOf("=")+1);
		bool chk=false;
		for(char x='0';x<='9';x++){
			chk=CheckCal(A,B,C,x);
			if(chk){ans=x.ToString();return;}
		}
		ans="NA";
	}
	
	bool CheckCal(String A,String B,String C,char X){
		
		int MaxLength=C.Length;
		if(MaxLength<A.Length || MaxLength<B.Length)return false;
		
		char[] Carr=C.ToCharArray();
		char[] Aarr=new char[MaxLength];
		char[] Barr=new char[MaxLength];
		var t=A.ToCharArray();
		int i=0;
		int j=MaxLength-1;
		for(i=t.Length-1;i>=0;i--){
			Aarr[j]= t[i]=='X'?X:t[i];
			j--;
		}
		for(;j>=0;j--)Aarr[j]='0';

		var tt=B.ToCharArray();
		j=MaxLength-1;				
		for(i=tt.Length-1;i>=0;i--){
			Barr[j]= tt[i]=='X'?X:tt[i];
			j--;
		}
		for(;j>=0;j--)Barr[j]='0';

		for(i=MaxLength-1;i>=0;i--){
			Carr[i]= Carr[i]=='X'?X:Carr[i];
		}
	
		int carry=0;
		for(i=MaxLength-1;i>=0;i--){
			int sum=(int)(Aarr[i]-'0'+Barr[i]-'0')+carry;
			carry=sum/10;
			if(((int)(Carr[i]-'0'))!=sum%10)return false;
		}
		return true;
	}
}



static class dbg{
	public static void w(String s){
		Console.WriteLine(s);
	}
	public static void w(int d){
		Console.WriteLine(d);
	}
	public static void w(long d){
		Console.WriteLine(d);
	}
}