Pagini recente » Cod sursa (job #1735330) | Cod sursa (job #2928502) | Cod sursa (job #2450031) | Cod sursa (job #375593) | Cod sursa (job #472234)
Cod sursa(job #472234)
#include <fstream>
#include <algorithm>
#include <string>
using namespace std;
const int SIZE = 36001;
ifstream fin("restante.in");
ofstream fout("restante.out");
void Read();
void Solve();
void Write();
int n, res;
int v[SIZE][26], in[SIZE];
bool cmp(int i1, int i2)
{
for (int i = 0; i < 26; ++i)
if (v[in[i1]][i] != v[in[i2]][i])
return v[in[i1]][i] < v[in[i2]][i];
return 1;
}
bool equal(int* i1, int* i2)
{
for (int i = 0; i < 26; ++i)
if (i1[i] != i2[i])
return 0;
return 1;
}
int main()
{
Read();
Solve();
Write();
}
void Read()
{
fin >> n;
string aux;
for (int i = 1; i <= n; ++i)
{
fin >> aux;
for (string::iterator j = aux.begin(); j != aux.end(); ++j)
++v[i][*j - 'a'];
sort(v[i], v[i] + 26);
in[i] = i;
}
}
void Solve()
{
sort(in + 1, in + n + 1, cmp);
for (int i = 1; i <= n; ++i)
if ((i == 1 || !equal(v[i - 1], v[i])) && (i == n || !equal(v[i + 1], v[i])))
++res;
}
void Write()
{
fout << res;
}