#include <bits/stdc++.h>
#define chmin(a, b) ((a)=min((a), (b)))
#define chmax(a, b) ((a)=max((a), (b)))
#define fs first
#define sc second
#define eb emplace_back
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
typedef tuple<int, int, int> T;
const ll MOD=1e9+7;
const ll INF=1e18;
int dx[]={1, -1, 0, 0};
int dy[]={0, 0, 1, -1};
char s[14][12],alp[12];
int n;
int alpsum;
bool notzero[12];
int tmp[12];
int multi[12];
bool check(int k){
bool num[12];
for(int i = 0;i < 11;i++) num[i] = false;
for(int i = 0;i < alpsum;i++){
tmp[i] = k % 10;
if(num[tmp[i]] == true) return true;
num[tmp[i]] = true;
if(tmp[i] == 0 && notzero[i] == true) return true;
k /= 10;
}
return false;
}
int main(){
while(true){
cin >> n;
if(n == 0)break;
alpsum = 0;
for(int i = 0;i < 11;i++){
notzero[i] = 0;
multi[i] = 0;
}
for(int i = 0;i < n;i++){
cin >> s[i];
int slen = strlen(s[i]);
for(int j = 0;j < slen;j++){
bool flag = true;
if(alpsum != 0){
for(int k = 0;k < alpsum;k++){
if(alp[k] == s[i][j]){
flag = false;
int c = 1;
for(int l = 0;l < slen-j-1;l++){
c *= 10;
}
if(i == n-1)c *= -1;
multi[k] += c;
break;
}
}
}
if(flag == true){
alp[alpsum] = s[i][j];
int c = 1;
for(int l = 0;l < slen-j-1;l++) c *= 10;
if(i == n-1)c *= -1;
multi[alpsum] += c;
if(j == 0 && strlen(s[i]) != 1) notzero[alpsum] = true;
alpsum++;
}
}
}
int size = 1;
int ans = 0;
for(int i = 0;i < alpsum;i++) size *= 10;
for(int i = size;i < size*2;i++){
if(check(i) == true)continue;
int total = 0;
for(int j = 0;j < alpsum;j++){
total += tmp[j] * multi[j];
}
if(total == 0)ans++;
}
cout << ans << endl;
}
}