#include <bits/stdc++.h>
#define upf(i, n, k) for (int i = k; i <= n; i++)
#define lowf(i, n, k) for (int i = n; i >= k; i--)
#define Max(a, b, c) max(a, max(b, c))
#define Min(a, b, c) min(a, min(b, c))
#define ofile(N) freopen(N ".in", "r", stdin), freopen(N ".out", "w", stdout)
#define ri register int
#define ie inline
#define ll long long
using namespace std;
ie int read() {
int s = 0, w = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-')
w = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9')
s = s * 10 + ch - '0', ch = getchar();
return s * w;
}
ie void out(int a) {
if (a < 0) putchar('-'), a = -a;
if (a >= 10)
out(a / 10);
putchar(a % 10 + '0');
}
int n, cnt, tt, nb, ld, ff;
// map<char*,int> mp;
int bk[10000001], vis[10000010];
vector<int> g;
char c[1010];
int main() {
// ofile("");
n = read();
for (ri i = 1; i <= n; i++) {
scanf("%s", c);
cnt = 1000000, tt = 0, ff = 0;
for (int i = 0; i < strlen(c); i++)
if (cnt == 0) {
if (c[i] != '-') ff = 1;
} else if (c[i] >= '0' && c[i] <= '9')
tt += cnt * (c[i] - 48), cnt /= 10;
else if (c[i] >= 'A' && c[i] <= 'Z') {
if (c[i] == 'Q' || c[i] == 'Z') continue;
if (c[i] == 'A' || c[i] == 'B' || c[i] == 'C')
tt += (cnt) << 1;
else if (c[i] == 'D' || c[i] == 'E' || c[i] == 'F')
tt += (cnt << 1) + cnt;
else if (c[i] == 'G' || c[i] == 'H' || c[i] == 'I')
tt += (cnt << 2);
else if (c[i] == 'J' || c[i] == 'K' || c[i] == 'L')
tt += (cnt << 2) + cnt;
else if (c[i] == 'M' || c[i] == 'N' || c[i] == 'O')
tt += (cnt << 2) + (cnt << 1);
else if (c[i] == 'P' || c[i] == 'R' || c[i] == 'S')
tt += (cnt << 2) + (cnt << 1) + cnt;
else if (c[i] == 'T' || c[i] == 'U' || c[i] == 'V')
tt += (cnt << 3);
else if (c[i] == 'W' || c[i] == 'X' || c[i] == 'Y')
tt += (cnt << 3) + cnt;
cnt /= 10;
}
if (!ff) bk[tt]++;
if (bk[tt] > 1 && !vis[tt]) g.push_back(tt), vis[tt] = 1;
}
// for (ri i = 0; i <= 9999999; i++)
// if (bk[i]>1)
sort(g.begin(), g.end());
for (auto i : g) {
// out(i / 10000)
ld = i / 10000;
if (ld < 10)
putchar('0'), putchar('0'), out(ld);
else if (ld < 100)
putchar('0'), out(ld);
else
out(ld);
putchar('-'); //, out(i % 10000),
ld = i % 10000;
if (ld < 10)
putchar('0'), putchar('0'), putchar('0'), out(ld);
else if (ld < 100)
putchar('0'), putchar('0'), out(ld);
else if (ld < 1000)
putchar('0'), out(ld);
else
out(ld);
putchar(' '), out(bk[tt]), puts(""), nb = 1;
}
if (!nb) puts("No duplicates.");
return 0;
}
貌似是统计个数出错,不会调了