import
java.util.HashMap;
import
java.util.Map;
class
Additional {
boolean
is;
int
add;
public
Additional() {
this
.is =
false
;
this
.add = -
1
;
}
}
class
Trie {
Map<Character, Trie> children;
Additional a;
public
Trie() {
this
.children =
new
HashMap<>();
this
.a =
new
Additional();
}
}
public
class
Main {
public
static
Trie getNewNode() {
return
new
Trie();
}
public
static
void
insert(Trie root, String s) {
Trie curr = root;
for
(
int
i =
0
; i < s.length(); i++) {
char
c = s.charAt(i);
if
(Character.isDigit(c)) {
if
(!curr.children.containsKey(c)) {
curr.children.put(c, getNewNode());
}
curr = curr.children.get(c);
}
else
{
if
(!curr.children.containsKey(c)) {
curr.children.put(c, getNewNode());
}
curr = curr.children.get(c);
}
}
curr.a.is =
true
;
}
public
static
Additional search(Trie root, String s) {
Additional x =
new
Additional();
if
(root ==
null
) {
return
x;
}
Trie curr = root;
for
(
int
i =
0
; i < s.length(); i++) {
char
c = s.charAt(i);
if
(!curr.children.containsKey(c)) {
return
x;
}
curr = curr.children.get(c);
}
x.is = curr.a.is;
x.add = curr.a.add;
return
x;
}
public
static
void
update(Trie root, String s,
int
z) {
Trie curr = root;
for
(
int
i =
0
; i < s.length(); i++) {
char
c = s.charAt(i);
curr = curr.children.get(c);
}
curr.a.add = z;
}
public
static
void
printUsernames(String[] username,
int
n) {
Trie root = getNewNode();
for
(
int
i =
0
; i < n; i++) {
String s = username[i];
Additional x = search(root, s);
if
(!x.is) {
System.out.println(s);
insert(root, s);
}
else
{
int
y = x.add +
1
;
String xString = s;
while
(
true
) {
if
(!search(root, xString + y).is) {
System.out.println(xString + y);
insert(root, xString + y);
update(root, xString, y);
break
;
}
y++;
}
}
}
}
public
static
void
main(String[] args) {
String[] name = {
"geek"
,
"geek0"
,
"geek1"
,
"geek"
};
int
n = name.length;
printUsernames(name, n);
}
}