#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
template<class __set_element_type>
using gnu_set= tree<__set_element_type, null_type,less<__set_element_type>, rb_tree_tag,tree_order_statistics_node_update>;
template<class __key_type, class __val_type>
using gnu_map = tree<__key_type, __val_type,less<__key_type>, rb_tree_tag,tree_order_statistics_node_update>;
#define ios ios::sync_with_stdio(0); cin.tie(0)
const ll oo = 1e18;
const ll MOD = 1e9 + 7;
int n;
int main() {
ios;
cin >> n;
set<string> names;
map<string, int> mp;
while(n--) {
string name;
cin >> name;
if(!(names.find(name) != names.end())) {
mp[name] = 1;
names.insert(name);
cout << "ok\n";
} else {
int &suffix = mp[name];
if(suffix == 0)
suffix++;
while(names.contains(name + to_string(suffix)))
suffix++;
name += to_string(suffix);
suffix++;
names.insert(name);
cout << name << '\n';
}
}
}
Copy