using
System;
using
System.Collections.Generic;
class
GFG{
static
readonly
int
hell = 1000000007;
static
readonly
int
N = 100005;
static
int
c_0, c_1, c_2;
static
void
count_k(
int
[]arr,
Stack<
int
> ones,
Stack<
int
> twos,
Stack<
int
> zeros)
{
for
(
int
i = 0; i < arr.Length; i++)
{
if
(arr[i] % 3 == 0)
{
c_0++;
zeros.Push(arr[i]);
}
else
if
(arr[i] % 3 == 1)
{
c_1++;
ones.Push(arr[i]);
}
else
{
c_2++;
twos.Push(arr[i]);
}
}
return
;
}
static
void
printArrangement(
int
[]arr,
Stack<
int
> ones,
Stack<
int
> twos,
Stack<
int
> zeros)
{
if
((c_0 == 0 && c_1 != 0 && c_2 != 0) ||
c_0 > c_1 + c_2 + 1)
{
Console.Write(
"-1"
);
return
;
}
int
i;
if
(c_0 == 0)
{
for
(i = 0; i < arr.Length; i++)
{
Console.Write(arr[i] +
" "
);
}
return
;
}
int
j;
int
[]ans =
new
int
[N];
for
(i = 0; i < ans.Length; i++)
ans[i] = -1;
for
(i = 1, j = 0; j < c_1; i += 2, j++)
{
ans[i] = ones.Peek();
ones.Pop();
}
ans[i - 1] = zeros.Peek();
zeros.Pop();
c_0--;
for
(j = 0; j < c_2; j++, i += 2)
{
ans[i] = twos.Peek();
twos.Pop();
}
for
(
int
k = 0; c_0 > 0; k += 2)
{
if
(ans[k] == -1)
{
ans[k] = zeros.Peek();
c_0--;
}
}
for
(
int
i1 = 0; i1 < N; i1++)
{
if
(ans[i1] != -1)
Console.Write(ans[i1] +
" "
);
}
return
;
}
static
void
solve(
int
n,
int
[]arr)
{
Stack<
int
> ones =
new
Stack<
int
>();
Stack<
int
> zeros =
new
Stack<
int
>();
Stack<
int
> twos =
new
Stack<
int
>();
c_0 = 0;
c_1 = 0;
c_2 = 0;
count_k(arr, ones, twos, zeros);
printArrangement(arr, ones, twos, zeros);
}
public
static
void
Main(String[] args)
{
int
n = 5;
int
[]arr = {1, 2, 3, 4, 5};
solve(n, arr);
}
}