#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<fstream>
#include<map>
#include<ctime>
#include<set>
#include<queue>
#include<cmath>
#include<vector>
#include<bitset>
#include<functional>
#define x first
#define y second
#define mp make_pair
#define pb push_back
#define REP(i,l,r) for((i)=(l);(i)<=(r);++(i))
#define REP2(i,l,r) for((i)=(l);(i)!=(r);++(i))
using namespace std;
typedef long long LL;
typedef double ld;
const int MAX=1000+10;
int n;
string a;
vector<short> ne[MAX][10];
int main()
{
int t,i,j;
scanf("%d",&n);
REP(i,1,n)
{
cin>>t>>a;
REP2(t,0,10)
ne[i][t]=vector<short>(a.size(),-1);
for(j=a.size()-1;j>=0;--j)
{
if(j!=(int)a.size()-1)
REP2(t,0,10)
ne[i][t][j]=ne[i][t][j+1];
ne[i][a[j]-'0'][j]=j;
}
}
int ans=0;
REP2(i,0,10000)
{
int a[10],top=0,u=i;
for(j=0;j<4;++j,u/=10)
if(top==0 || u%10!=a[top-1])
a[top++]=u%10;
reverse(a,a+top);
int flag=1;
REP(j,1,n)
{
int u=0;
REP2(t,0,top)
{
u=ne[j][a[t]][u];
if(u==-1)
{
flag=0;
break;
}
}
if(flag==0)
break;
}
ans+=flag;
}
cout<<ans<<endl;
return 0;
}
I2luY2x1ZGU8Y3N0ZGlvPgojaW5jbHVkZTxjc3RkbGliPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxmc3RyZWFtPgojaW5jbHVkZTxtYXA+CiNpbmNsdWRlPGN0aW1lPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxjbWF0aD4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxiaXRzZXQ+CiNpbmNsdWRlPGZ1bmN0aW9uYWw+CiNkZWZpbmUgeCBmaXJzdAojZGVmaW5lIHkgc2Vjb25kCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgUkVQKGksbCxyKSBmb3IoKGkpPShsKTsoaSk8PShyKTsrKyhpKSkKI2RlZmluZSBSRVAyKGksbCxyKSBmb3IoKGkpPShsKTsoaSkhPShyKTsrKyhpKSkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIExMOwp0eXBlZGVmIGRvdWJsZSBsZDsKCmNvbnN0IGludCBNQVg9MTAwMCsxMDsKCmludCBuOwpzdHJpbmcgYTsKdmVjdG9yPHNob3J0PiBuZVtNQVhdWzEwXTsKCmludCBtYWluKCkKewoJaW50IHQsaSxqOwoJc2NhbmYoIiVkIiwmbik7CglSRVAoaSwxLG4pCgl7CgkJY2luPj50Pj5hOwoJCVJFUDIodCwwLDEwKQoJCQluZVtpXVt0XT12ZWN0b3I8c2hvcnQ+KGEuc2l6ZSgpLC0xKTsKCQlmb3Ioaj1hLnNpemUoKS0xO2o+PTA7LS1qKQoJCXsKCQkJaWYoaiE9KGludClhLnNpemUoKS0xKQoJCQkJUkVQMih0LDAsMTApCgkJCQkJbmVbaV1bdF1bal09bmVbaV1bdF1baisxXTsKCQkJbmVbaV1bYVtqXS0nMCddW2pdPWo7CgkJfQoJfQoJaW50IGFucz0wOwoJUkVQMihpLDAsMTAwMDApCgl7CgkJaW50IGFbMTBdLHRvcD0wLHU9aTsKCQlmb3Ioaj0wO2o8NDsrK2osdS89MTApCgkJCWlmKHRvcD09MCB8fCB1JTEwIT1hW3RvcC0xXSkKCQkJCWFbdG9wKytdPXUlMTA7CgkJcmV2ZXJzZShhLGErdG9wKTsKCQlpbnQgZmxhZz0xOwoJCVJFUChqLDEsbikKCQl7CgkJCWludCB1PTA7CgkJCVJFUDIodCwwLHRvcCkKCQkJewoJCQkJdT1uZVtqXVthW3RdXVt1XTsKCQkJCWlmKHU9PS0xKQoJCQkJewoJCQkJCWZsYWc9MDsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQlpZihmbGFnPT0wKQoJCQkJYnJlYWs7CgkJfQoJCWFucys9ZmxhZzsKCX0KCWNvdXQ8PGFuczw8ZW5kbDsKCXJldHVybiAwOwp9Cg==