#include<fstream.h>
#include<string.h>
int n,i,j,k,sol=0,q;
char v[36100][17],aux;
void pozitie1 (int li, int ls, int &q)
{ int p,r,di,dj,aux2;
char a;
p=li; r=ls; di=0; dj=1;
while(p<r)
{if(v[i][p]>v[i][r]) { a=v[i][p]; v[i][p]=v[i][r]; v[i][r]=a;
aux2=di;di=dj;dj=aux2;}
p=p+di;
r=r-dj;
}
q=p;
}
void quick1 ( int li , int ls)
{
if(li<ls)
{ pozitie1(li,ls,q);
quick1(li,q-1);
quick1(q+1,ls);
}
}
void pozitie (int li, int ls, int &q)
{ int p,r,di,dj,aux2;
char a[17];
p=li; r=ls; di=0; dj=1;
while(p<r)
{
if(strcmp(v[p],v[r])>0) { strcpy(a,v[p]);
strcpy(v[p],v[r]);
strcpy(v[r],a);
aux2=di; di=dj; dj=aux2;}
p=p+di;
r=r-dj;
}
q=p;
}
void quick ( int li , int ls)
{
if(li<ls)
{ pozitie(li,ls,q);
quick(li,q-1);
quick(q+1,ls);
}
}
void pozitie2 (int li, int ls, int &q)
{ int p,r,di,dj,aux2;
char a[17];
p=li; r=ls; di=0; dj=1;
while(p<r)
{
if(strlen(v[p])>strlen(v[r])) { strcpy(a,v[p]);
strcpy(v[p],v[r]);
strcpy(v[r],a);
aux2=di; di=dj; dj=aux2;}
p=p+di;
r=r-dj;
}
q=p;
}
void quick2 ( int li , int ls)
{
if(li<ls)
{ pozitie2(li,ls,q);
quick2(li,q-1);
quick2(q+1,ls);
}
}
int main()
{
ifstream f("restante.in");
ofstream g("restante.out");
f>>n;f.get();
for(i=1;i<=n;i++)
{
f.get(v[i],16);
f.get();
quick1(0,strlen(v[i])-1);
}
quick2(1,n);
j=1;
for(i=1;i<=n;i++)
{while(strlen(v[i])==strlen(v[i+1])) i++;
quick(j,i);
j=i+1;
}
for(i=1;i<=n;i++)
if(strcmp(v[i],v[i+1])!=0) sol++;
else while (strcmp(v[i],v[i+1])==0) i++;
g<<sol;
f.close();
g.close();
return 0;
}