import
java.util.*;
public
class
Main {
public
static
List<Integer>
mergePiles(List<List<Integer> > v)
{
List<Integer> ans =
new
ArrayList<Integer>();
while
(
true
) {
int
minu = Integer.MAX_VALUE;
int
index = -
1
;
for
(
int
i =
0
; i < v.size(); i++) {
if
(!v.get(i).isEmpty()
&& minu > v.get(i).get(v.get(i).size()
-
1
)) {
minu
= v.get(i).get(v.get(i).size() -
1
);
index = i;
}
}
if
(index == -
1
) {
break
;
}
ans.add(minu);
v.get(index).remove(v.get(index).size() -
1
);
if
(v.get(index).isEmpty()) {
v.remove(index);
}
}
return
ans;
}
public
static
List<Integer>
patienceSorting(List<Integer> arr)
{
List<List<Integer> > piles
=
new
ArrayList<List<Integer> >();
for
(
int
i =
0
; i < arr.size(); i++) {
if
(piles.isEmpty()) {
List<Integer> temp
=
new
ArrayList<Integer>();
temp.add(arr.get(i));
piles.add(temp);
}
else
{
int
flag =
1
;
for
(
int
j =
0
; j < piles.size(); j++) {
if
(arr.get(i) < piles.get(j).get(
piles.get(j).size() -
1
)) {
piles.get(j).add(arr.get(i));
flag =
0
;
break
;
}
}
if
(flag ==
1
) {
List<Integer> temp
=
new
ArrayList<Integer>();
temp.add(arr.get(i));
piles.add(temp);
}
}
}
List<Integer> ans = mergePiles(piles);
for
(
int
i =
0
; i < ans.size(); i++) {
System.out.print(ans.get(i) +
" "
);
}
return
ans;
}
public
static
void
main(String[] args)
{
List<Integer> arr =
new
ArrayList<Integer>();
arr.add(
6
);
arr.add(
12
);
arr.add(
2
);
arr.add(
8
);
arr.add(
3
);
arr.add(
7
);
patienceSorting(arr);
}
}