#include<stdio.h>
#include<string.h>
#define NMAX 36001
/*#include<algorithm>
using namespace std;
int cmpf(const char a[],const char kkt b[])
{
if (strcmp(a,b)<=0) return 0;
return 1;
} */
int N;
long m,n,i,j,k,l,a,d,q;
char s[NMAX],x[NMAX][20],y[NMAX],c,z[NMAX];
char B[NMAX][20];
void merge_sort(int l, int r)
{
int m = (l + r) >> 1, i, j, k;
if (l == r) return;
merge_sort(l, m);
merge_sort(m + 1, r);
for (i=l, j=m+1, k=l; i<=m || j<=r; )
if (j > r || (i <= m && strcmp(x[i],x[j])<0/*A[i] < A[j]*/))
// B[k++] = A[i++];
strcpy(B[k++],x[i++]);
else
// B[k++] = A[j++];
strcpy(B[k++],x[j++]);
for (k = l; k <= r; k++)
//A[k] = B[k];
strcpy(x[k],B[k]);
}
int main()
{
freopen("restante.in","r",stdin);
freopen("restante.out","w",stdout);
scanf("%ld",&n);
gets(s);
for (i=1;i<=n;i++)
{
gets(x[i]);
a=1;
m=strlen(x[i])-1;
while (a)
{
a=0;
for (j=0;j<m;j++)
if (x[i][j]>x[i][j+1]) {c=x[i][j]; x[i][j]=x[i][j+1]; x[i][j+1]=c; a=1;}
m--;
}
}
/* a=1;
m=n;
while (a)
{
a=0;
for (i=1;i<m;i++)
if (strcmp(x[i],x[i+1])>0) {strcpy(y,x[i]); strcpy(x[i],x[i+1]); strcpy(x[i+1],y); a=1;}
m--;
}
*/
// sort(x+1,x+n+1/*,cmpf*/);
merge_sort(1,n);
q=0;
for (i=1;i<=n;i++)
if (strcmp(x[i],x[i+1])==0)
{
z[i]=1;
z[i+1]=1;
}
for (i=1;i<=n;i++)
if (z[i]==0) q++;
printf("%ld\n",q);
return 0;
}