#include <bits/stdc++.h>
using namespace std;
#define pb push_back
typedef long long ll;
int conv(string &s){
string S="",S2="";
for(int t=s.size()-1;t>=0;t--){
if((s[t]-'0')>=0&&(s[t]-'0')<=9&&S.size()<8){
S+=s[t];
}else{
for(int i=0;i<=t;i++)
S2+=s[i];
break;
}
}
reverse(S.begin(),S.end());
for(int t=0;t<S.size();t++){
if(S[t]=='0'){
S2+='0';
}else{
if(t>0)
S.erase(S.begin()+(t-1));
break;
}
}
s=S2;
return S.size()>0? stoi(S):-1;
}
bool isNumber(string s){
if(s[0]-'0'<=0||s[0]>'9')
return false;
for(int t=1;t<s.size();t++)
if(s[t]-'0'<0||s[t]>'9')
return false;
return true;
}
int main(){
int T,n,k,t,a,c=0;
cin>>n;
string s;
unordered_map<string,pair<set<int>,int>>ma;
for(t=0;t<n;t++){
cin>>s;
if(ma[s].first.size()==0){
string S=s;
int te=conv(S);
if(te!=-1){
if(isNumber(s)){
for(int x=1;x<min(8,(int)s.size());x++){
string nu=s.substr(s.size()-x,x);
if(nu[0]!='0'){
ma[s.substr(0,s.size()-x)].first.insert(stoi(nu));
}
}
}else{
ma[S].first.insert(te);
}
}
ma[s].first.insert(0);
cout<<"ok\n";
}else{
for(int y=ma[s].second;y<1000000;y++){
ma[s].second=y;
if(ma[s].first.find(y)==ma[s].first.end()){
ma[s].first.insert(y);
if(y==0){
cout<<"ok\n";
}else{
ma[(s+to_string(y))].first.insert(0);
cout<<s<<y<<"\n";
}
break;
}
}
}
}
}
Copy