#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
typedef unsigned long long ull;
using namespace std;
const long long h1=998244353,h2=1000000007,h3=2147483647,h4=999971;
struct T{
unsigned long long hh1,hh2,hh3,hh4;
}t[10000+10];
char s[3000];
ull hash1(char *s,int len){
ull ans=0;
for(int i=0;i<len;i++){
ans=ans*h1+s[i];
}
return ans;
}
ull hash2(char *s,int len){
ull ans=0;
for(int i=0;i<len;i++){
ans=ans*h2+s[i];
}
return ans;
}
ull hash3(char *s,int len){
ull ans=0;
for(int i=0;i<len;i++){
ans=ans*h3+s[i];
}
return ans;
}
ull hash4(char *s,int len){
ull ans=0;
for(int i=0;i<len;i++){
ans=ans*h4+s[i];
}
return ans;
}
bool cmp(T u,T v){
return u.hh1<v.hh1;
}
int main(){
int i,j,k,m,n;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%s",s);
int len=strlen(s);
t[i].hh1=hash1(s,len),t[i].hh2=hash2(s,len),t[i].hh3=hash3(s,len),t[i].hh4=hash4(s,len);
}
int ans=0;
sort(t+1,t+1+n,cmp);
for(i=1;i<=n;i++){
while(t[i].hh1==t[i+1].hh1){
if(t[i].hh2==t[i+1].hh2){
if(t[i].hh3==t[i+1].hh3){
if(t[i].hh4==t[i+1].hh4){
i++;
}
}
}
}
ans++;
}
printf("%d",ans);
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-679313.html