#include <bits/stdc++.h>
#define ll long long
#define Shity ios_base::sync_with_stdio(0);
#define Code cin.tie(0), cout.tie(0);
#define TOO \
int t = 1; \
cin >> t;
#define nulll0 \
while (t--) { \
yEaGeR(); \
}
#define all(x) begin(x), end(x)
#define rall(x) rbegin(x), rend(x)
#define TO int t = 1;
#define sz(s) (int)s.size()
using namespace std;
/*==============================================*/
// EReN yEaGeR :)
/*==============================================*/
bool isprime(ll n) {
if (n < 2)
return false;
for (ll i = 2; i * i <= n; i++) {
if (n % i == 0)
return false;
}
return true;
}
/*==============================================*/
vector<ll> divisors(ll n) {
vector<ll> ans;
for (ll i = 1; i * i <= n; i++) {
if (n % i == 0) {
ans.push_back(i);
if (i * i != n)
ans.push_back(n / i);
}
}
sort(all(ans));
return ans;
}
/*==============================================*/
ll __lcm(ll a, ll b) {return (a * b) / __gcd(a, b);}
/*==============================================*/
const int N = 1e6 + 5;
vector<ll> primes;
bool is_prime[N];
ll n;
void sieve() {
fill(is_prime, is_prime + n + 1, true);
is_prime[0] = is_prime[1] = false;
for (int i = 2; i <= n; i++) {
if (is_prime[i]) {
primes.push_back(i);
for (long long j = (long long)i * i; j <= n; j += i) {
is_prime[j] = false;
}
}
}
}
/*==============================================*/
vector<ll> getprefix(const vector<ll>& nums) {
vector<ll> prefix(nums.size());
if (nums.empty()) return prefix;
prefix[0] = nums[0];
for (int i = 1; i < nums.size(); ++i) {
prefix[i] = prefix[i - 1] + nums[i];
}
return prefix;
}
/*==============================================*/
bool isPowerOfTwo(int n) {
if (n <= 0) return false;
return (n & (n - 1)) == 0;
}
/*==============================================*/
string tobinary(ll num) {
if (num == 0) return "0";
string binary = "";
while (num > 0) {
binary = (num % 2 == 0 ? "0" : "1") + binary;
num /= 2;
}
return binary;
}
/*==============================================*/
void yEaGeR() {
// sorting and search
// binary search
ll n;cin>>n;
vector<string>v(n);
for(int i=0;i<n;i++){
cin>>v[i];
}
map<string,ll>mp;
for(int i=0;i<n;i++){
mp[v[i]]++;
if(mp[v[i]]==1){
cout<<"ok\n";
}
else{
cout<<v[i]<<mp[v[i]]-1<<'\n';
}
}
}
/*==============================================*/
int main() {
// #ifndef ONLINE_JUDGE
// freopen("out.out", "w", stdout);
// freopen("in.in", "r", stdin);
// #else
// #endif
//Shity Code TOO nulll0
Shity Code TO nulll0
}