// 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;}