----------------------
/*
ID: wangxin12
PROG: crypt1
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <set>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define MAX 20001
vector<int> num;
bool flags(int index) {
bool flag = false;
for( int k = 0; k < num.size(); k++) {
if( index == num[k] ) {
flag = true;
break;
}
}
return flag;
}
int main() {
//FILE * fin = fopen("crypt1.in", "r");
ifstream fin("crypt1.in");
ofstream fout("crypt1.out");
int result = 0;
int N;
fin>>N;
for(int k = 0; k < N; k++) {
int temp;
fin>>temp;
num.push_back(temp);
}
/* cout<<N<<endl;
for(int k = 0; k < numbers.size(); k++) {
cout<<numbers[k]<<" ";
} */
for(int a = 0; a < N; a++)
for(int b = 0; b < N; b++)
for(int c = 0; c < N; c++)
for(int d = 0; d < N; d++)
for(int e = 0; e < N; e++)
{
int first = (num[a] * 100 + num[b] * 10 + num[c]) * num[e] ;
int second = (num[a] * 100 + num[b] * 10 + num[c]) * num[d];
int temp = (num[a] * 100 + num[b] * 10 + num[c]) * (num[d] * 10 + num[e]);
if( first > 999 || first < 100) continue;
if( second > 999 || second < 100) continue;
if( temp > 9999 || temp < 1000) continue;
if( !flags(first % 10) || !flags( (first/10) % 10) || !flags( first/100)) continue;
if( !flags(second % 10) || !flags( (second/10) % 10) || !flags( second/100)) continue;
int s1 = temp % 10;
int s2 = (temp % 100 - s1) / 10;
int s3 = (temp % 1000 - s2 * 10 - s1) / 100;
int s4 = (temp - s3 * 100 - s2 * 10 - s1) / 1000;
bool b1 = false, b2 = false, b3 = false, b4 = false;
for(int m = 0; m < num.size(); m++) {
if( s1 == num[m] ) b1 = true;
if( s2 == num[m] ) b2 = true;
if( s3 == num[m] ) b3 = true;
if( s4 == num[m] ) b4 = true;
}
if( b1 && b2 && b3 && b4) result++;
}
fout<<result<<endl;
// fclose(fin);
fin.close();
fout.close();
return 0;
}