#include #include #include #include #include #include #include #include #include #include bool compareTwo(int i, int k, bool traineesBaloons[1000][10]) { for (int l = 0; l < 10; l++) { if (traineesBaloons[i][l] != traineesBaloons[k][l]) return false; } return true; } int main(int argc, char* argv[]) { int n; while (scanf("%d", &n) != EOF) { int trainees[1000]; bool traineesBaloons[1000][10]; std::vector types; memset(trainees, 0, sizeof(trainees)); memset(traineesBaloons, false, sizeof(traineesBaloons)); for (int i = 0; i < n; i++) { scanf("%d", &trainees[i]); int temp = trainees[i]; while (temp > 0) { int digit = temp % 10; temp /= 10; if (digit) traineesBaloons[i][digit] = true; } } for (int i = 0; i < n; i++) { bool found = false; for (auto type : types) { if (compareTwo(i, type, traineesBaloons)) { found = true; break; } } if (!found) { types.push_back(i); } } printf("%d\n", types.size()); } return 0; }