// cas O( (velkost vstupu) + (rozsah znamok)**(max. dlzka zakazaneho retazca+1) * (dlzka vyslednej postupnosti)
#include <iostream>
#include <string>
#include <vector>
#include <queue>
using namespace std;
int main() {
vector< vector<bool> > zak(7); // zakazane i-tice, v 5-kovej sustave
zak[0].resize(1,true);
for(int i =1; i < 7; i++) zak[i].resize(zak[i-1].size()*5,true);
queue< pair<int,int> > q;
pair<int,int> p;
string s;
int M;
cin >> M;
for(int i =0; i < M; i++) {
cin >> s;
p.second =s.length();
p.first =0;
for(int i =0; i < s.length(); i++) p.first =5*p.first+(s[i]-'1');
q.push(p);
// vyrob vsetky touto zacinajuce 6-tice
while(!q.empty()) {
if(!zak[q.front().second][q.front().first]) {q.pop(); continue;}
zak[q.front().second][q.front().first] =false;
if(q.front().second == 6) {q.pop(); continue;}
p.second =q.front().second+1;
for(int j =0; j < 5; j++) {
p.first =q.front().first+j*zak[q.front().second].size();
q.push(p);
p.first =5*q.front().first+j;
q.push(p);}
q.pop();}}
vector< vector<long long> > C(10); // pocty postupnosti konciacich danou 6-ticou a dlzky 6+i
for(int i =0; i < zak[6].size(); i++) C[0].push_back((long long)zak[6][i]);
for(int i =0; i < 9; i++) {
C[i+1].resize(C[i].size(),0LL);
for(int j =0; j < C[i].size(); j++) for(int k =0; k < 5; k++)
// pridam k na koniec, ak je to platna koncova 6-tica priratam k uz exitujucim
C[i+1][(j*5+k)%15625] +=C[i][j]*(long long)zak[6][(j*5+k)%15625];}
long long odp =0LL;
for(int i =0; i < C[9].size(); i++) odp +=C[9][i];
cout << odp << endl;
return 0;}
Ly8gY2FzIE8oICh2ZWxrb3N0IHZzdHVwdSkgKyAocm96c2FoIHpuYW1vaykqKihtYXguIGRsemthIHpha2F6YW5laG8gcmV0YXpjYSsxKSAqIChkbHprYSB2eXNsZWRuZWogcG9zdHVwbm9zdGkpCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHF1ZXVlPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7Cgl2ZWN0b3I8IHZlY3Rvcjxib29sPiA+IHphayg3KTsgLy8gemFrYXphbmUgaS10aWNlLCB2IDUta292ZWogc3VzdGF2ZQoJemFrWzBdLnJlc2l6ZSgxLHRydWUpOwoJZm9yKGludCBpID0xOyBpIDwgNzsgaSsrKSB6YWtbaV0ucmVzaXplKHpha1tpLTFdLnNpemUoKSo1LHRydWUpOwoJcXVldWU8IHBhaXI8aW50LGludD4gPiBxOwoJcGFpcjxpbnQsaW50PiBwOwoJc3RyaW5nIHM7CglpbnQgTTsKCWNpbiA+PiBNOwoJZm9yKGludCBpID0wOyBpIDwgTTsgaSsrKSB7CgkJY2luID4+IHM7CgkJcC5zZWNvbmQgPXMubGVuZ3RoKCk7CgkJcC5maXJzdCA9MDsKCQlmb3IoaW50IGkgPTA7IGkgPCBzLmxlbmd0aCgpOyBpKyspIHAuZmlyc3QgPTUqcC5maXJzdCsoc1tpXS0nMScpOwoJCXEucHVzaChwKTsKCQkvLyB2eXJvYiB2c2V0a3kgdG91dG8gemFjaW5hanVjZSA2LXRpY2UKCQl3aGlsZSghcS5lbXB0eSgpKSB7CgkJCWlmKCF6YWtbcS5mcm9udCgpLnNlY29uZF1bcS5mcm9udCgpLmZpcnN0XSkge3EucG9wKCk7IGNvbnRpbnVlO30KCQkJemFrW3EuZnJvbnQoKS5zZWNvbmRdW3EuZnJvbnQoKS5maXJzdF0gPWZhbHNlOwoJCQlpZihxLmZyb250KCkuc2Vjb25kID09IDYpIHtxLnBvcCgpOyBjb250aW51ZTt9CgkJCXAuc2Vjb25kID1xLmZyb250KCkuc2Vjb25kKzE7CgkJCWZvcihpbnQgaiA9MDsgaiA8IDU7IGorKykgewoJCQkJcC5maXJzdCA9cS5mcm9udCgpLmZpcnN0K2oqemFrW3EuZnJvbnQoKS5zZWNvbmRdLnNpemUoKTsKCQkJCXEucHVzaChwKTsKCQkJCXAuZmlyc3QgPTUqcS5mcm9udCgpLmZpcnN0K2o7CgkJCQlxLnB1c2gocCk7fQoJCQlxLnBvcCgpO319CgoJdmVjdG9yPCB2ZWN0b3I8bG9uZyBsb25nPiA+IEMoMTApOyAvLyBwb2N0eSBwb3N0dXBub3N0aSBrb25jaWFjaWNoIGRhbm91IDYtdGljb3UgYSBkbHpreSA2K2kKCWZvcihpbnQgaSA9MDsgaSA8IHpha1s2XS5zaXplKCk7IGkrKykgQ1swXS5wdXNoX2JhY2soKGxvbmcgbG9uZyl6YWtbNl1baV0pOwoJZm9yKGludCBpID0wOyBpIDwgOTsgaSsrKSB7CgkJQ1tpKzFdLnJlc2l6ZShDW2ldLnNpemUoKSwwTEwpOwoJCWZvcihpbnQgaiA9MDsgaiA8IENbaV0uc2l6ZSgpOyBqKyspIGZvcihpbnQgayA9MDsgayA8IDU7IGsrKykKCQkJLy8gcHJpZGFtIGsgbmEga29uaWVjLCBhayBqZSB0byBwbGF0bmEga29uY292YSA2LXRpY2EgcHJpcmF0YW0gayB1eiBleGl0dWp1Y2ltCgkJCUNbaSsxXVsoaio1K2spJTE1NjI1XSArPUNbaV1bal0qKGxvbmcgbG9uZyl6YWtbNl1bKGoqNStrKSUxNTYyNV07fQoJbG9uZyBsb25nIG9kcCA9MExMOwoJZm9yKGludCBpID0wOyBpIDwgQ1s5XS5zaXplKCk7IGkrKykgb2RwICs9Q1s5XVtpXTsKCWNvdXQgPDwgb2RwIDw8IGVuZGw7CglyZXR1cm4gMDt9