int n;
string s;
int bas=131;
typedef unsigned long long ull;
const ull mod1=100001651;
ull a[100010];
ull Hash(string s){
ll ans=0;
for(int i=0;i<s.size();i++){
ans*=bas;
ans+=int(s[i]);
ans%=mod1;
}
return ans;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>s;
a[i]=Hash(s);
}
sort(a,a+n);
int ans=1;
for(int i=1;i<n;i++){
if(a[i]!=a[i-1]){
ans++;
}
}
cout<<ans;
}
using lom=unsigned long long ;
const lom bas1=131,bas2=233;
const int M=505;
int n,m;
char a[M][M];
lom _hash[M][M];
lom p1[M],p2[M];
void init(){
p1[0]=1;
p2[0]=1;
for(int i=1;i<=505;i++){
p1[i]=p1[i-1]*bas1;
p2[i]=p2[i-1]*bas2;
}
}
void Hash(){
_hash[0][0]=_hash[0][1]=_hash[1][0]=0;
for(int i=1;i<=n;i++){ //前缀和
for(int j=1;j<=m;j++){
_hash[i][j]=_hash[i][j-1]*bas1+a[i][j]-'a';
}
}
for(int i=1;i<=n;i++){ //二维前缀和
for(int j=1;j<=m;j++){
_hash[i][j]+=_hash[i-1][j]*bas2;
}
}
}