import
java.util.*;
class
GFG{
static
void
sieveOfEratosthenes(
boolean
prime[],
int
n)
{
prime[
0
] = prime[
1
] =
false
;
for
(
int
p =
2
; p * p <= n; p++)
{
if
(prime[p] ==
true
)
{
for
(
int
i = p * p; i <= n; i += p)
prime[i] =
false
;
}
}
}
static
void
sortSpecialPrimes(
int
arr[],
int
n)
{
int
maxVal = Arrays.stream(arr).max().getAsInt();
boolean
[]prime =
new
boolean
[maxVal +
1
];
for
(
int
i =
0
; i < prime.length; i++)
prime[i] =
true
;
sieveOfEratosthenes(prime, maxVal);
Vector<Integer> list =
new
Vector<Integer>();
for
(
int
i =
0
; i < n; i++)
{
if
(prime[arr[i]] && prime[arr[i] -
2
])
{
list.add(arr[i]);
arr[i] = -
1
;
}
}
Collections.sort(list);
int
j =
0
;
for
(
int
i =
0
; i < n; i++)
{
if
(arr[i] == -
1
)
System.out.print(list.get(j++) +
" "
);
else
System.out.print(arr[i] +
" "
);
}
}
public
static
void
main(String[] args)
{
int
arr[] = {
31
,
5
,
2
,
1
,
7
};
int
n = arr.length;
sortSpecialPrimes(arr, n);
}
}