#include <fstream.h>
#include <string.h>
#define MAX 36010
#define MAX1 20
ifstream fin ("restante.in");
ofstream fout ("restante.out");
char a[MAX][MAX1];
long n,numar,k,ordine;
void citire()
{
fin>>n;
fin.getline(a[0],MAX1);
for (int i=0;i<n;i++)
fin.getline(a[i],MAX1);
}
void poz (long li,long ls,long &k,char a[MAX1])
{
int i=li,j=ls,i1=0,j1=-1,aux;
char c;
while (i<j)
{
if (a[i]>a[j])
{
c=a[i];
a[i]=a[j];
a[j]=c;
aux=i1;
i1=-j1;
j1=-aux;
}
i+=i1;
j+=j1;
}
k=i;
}
void qsort (long li,long ls)
{
if (li<ls)
{
poz (li,ls,k,a[ordine]);
qsort (li,k-1);
qsort (k+1,ls);
}
}
void ordonare()
{
for (int i=0;i<n;i++)
{
k=0;
ordine=i;
qsort (0,strlen(a[i])-1);
}
}
void poz1 (long li,long ls,long &k,char a[MAX][MAX1])
{
long i=li,j=ls,i1=0,j1=-1,c;
char s[MAX1];
while (i<j)
{
if (strcmp(a[i],a[j])>0)
{
strcpy(s,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],s);
c=i1;
i1=-j1;
j1=-c;
}
i+=i1;
j+=j1;
}
k=i;
}
void qsort1 (long li,long ls)
{
if (li<ls)
{
poz1(li,ls,k,a);
qsort1 (li,k-1);
qsort1 (k+1,ls);
}
}
void afisare()
{
for (int i=1;i<n-1;i++)
if (strcmp(a[i],a[i+1])!=0 && strcmp(a[i],a[i-1])!=0)
numar++;
if (strcmp(a[0],a[1])!=0)
numar++;
if (strcmp(a[n-1],a[n-2])!=0)
numar++;
fout<<numar;
}
int main ()
{
citire();
ordonare();
k=0;
qsort1(0,n-1);
afisare();
fin.close();
fout.close();
return 0;
}