import
java.util.ArrayList;
class
Graph{
int
[][] arr;
ArrayList<Integer> alpha;
ArrayList<Integer> answer;
public
Graph()
{
arr =
new
int
[
26
][
2
];
for
(
int
i =
0
; i <
26
; i++)
{
for
(
int
j =
0
; j <
2
; j++)
arr[i][j] = -
1
;
}
alpha =
new
ArrayList<>();
for
(
int
i =
0
; i <
26
; i++)
{
alpha.add(
0
);
}
answer =
new
ArrayList<>();
}
void
dfs(
int
v)
{
answer.add(v);
alpha.set(v,
1
);
for
(
int
i =
0
; i <
2
; i++)
{
if
(arr[v][i] == -
1
||
alpha.get(arr[v][i]) ==
1
)
continue
;
dfs(arr[v][i]);
}
}
void
minString(String str)
{
if
(str.length() ==
1
)
{
System.out.println(str);
return
;
}
boolean
flag =
true
;
for
(
int
i =
0
; i < str.length() -
1
; i++)
{
int
j = str.charAt(i) -
'a'
;
int
k = str.charAt(i +
1
) -
'a'
;
if
(arr[j][
0
] == k || arr[j][
1
] == k)
{}
else
if
(arr[j][
0
] == -
1
)
arr[j][
0
] = k;
else
if
(arr[j][
1
] == -
1
)
arr[j][
1
] = k;
else
{
flag =
false
;
break
;
}
if
(arr[k][
0
] == j || arr[k][
1
] == j)
{}
else
if
(arr[k][
0
] == -
1
)
arr[k][
0
] = j;
else
if
(arr[k][
1
] == -
1
)
arr[k][
1
] = j;
else
{
flag =
false
;
break
;
}
}
boolean
contain_ends =
false
;
int
count =
0
;
int
index =
0
;
for
(
int
i =
0
; i <
26
; i++)
{
if
((arr[i][
0
] == -
1
&& arr[i][
1
] != -
1
) ||
(arr[i][
1
] == -
1
&& arr[i][
0
] != -
1
))
{
count++;
index = i;
}
if
(count ==
2
)
contain_ends =
true
;
if
(count ==
3
)
contain_ends =
false
;
}
if
(contain_ends ==
false
|| flag ==
false
)
{
System.out.println(
"Impossible"
);
return
;
}
dfs(index);
for
(
int
i =
0
; i < answer.size(); i++)
{
char
ch = (
char
)(answer.get(i) +
'a'
);
System.out.print(ch);
}
}
}
class
GFG{
public
static
void
main(String[] args)
{
String s =
"acabpba"
;
Graph graph =
new
Graph();
graph.minString(s);
}
}