#include #include #include #include using namespace std; #define MAXM 41 typedef struct _A { int num; struct _A *next[26]; }A; A *root; void init() { root = new A(); memset (root, 0, sizeof(*root)); } int searchString(char *str) { A *p = root; for (int i = 0, index; str[i] != '\0'; ++i) { index = str[i] - 'A'; if (p->next[index] == NULL) { p->next[index] = new A(); memset (p->next[index], 0, sizeof(*p->next[index])); } p = p->next[index]; } int rs = p->num; p->num++; return rs; } int main() { int N, i; scanf ("%d", &N); char str[MAXM]; init(); while (N--) { scanf (" %s", str); sort(str, str+strlen(str)); i = searchString(str); printf("%d\n", i); } return 0; }