Cod sursa(job #691661)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("restante.in");
ofstream g("restante.out");
struct cuvant {
int c[28];
bool o;
};
cuvant v[36005];
int n,i,j,nr;
char a;
bool check (cuvant a,cuvant b) {
int i;
if (a.c[0]!=b.c[0])
return false;
for (i=1;i<=27;i++)
if (a.c[i]!=b.c[i])
return false;
return true;
}
bool cmp (cuvant a,cuvant b) {
if (a.c[0]<b.c[0]) return 1;
else if (a.c[0]>b.c[0]) return 0;
for (i=1;i<=27;i++) {
if (a.c[i]<b.c[i]) return 1;
if (a.c[i]>b.c[i]) return 0;
}
return 1;
}
int main() {
f>>n;
f.get();
for (i=1;i<=n;i++) {
f.get(a);
j=1;
while (a!='\n') {
v[i].c[(int)a-'a'+1]++;
j++;
f.get(a);
}
v[i].c[0]=j;
}
sort(v+1,v+n+1,cmp);
nr=n;
for (i=2;i<=n;i++) if (check(v[i-1],v[i])) {
if (!v[i-1].o) nr--;
if (!v[i].o) nr--;
v[i-1].o=true;
v[i].o=true;
}
g<<nr;
return 0;
}