using
System;
using
System.Collections;
using
System.Collections.Generic;
class
GFG {
private
static
void
Sort<T>(T[][] data,
int
col)
{
Comparer<T> comparer = Comparer<T>.Default;
Array.Sort<T[]>(data, (x,y) => comparer.Compare(x[col],y[col]));
}
public
static
void
findPossibleArray(
int
N,
int
[] arr)
{
int
[][] V =
new
int
[N][];
for
(
int
i = 0; i < N; i++){
V[i] =
new
int
[2];
}
int
[] res =
new
int
[N];
int
cnt = 0;
for
(
int
i = 0; i < N; i++) {
V[i][0] = N - arr[i];
V[i][1] = i;
}
Sort<
int
>(V, 0);
for
(
int
i = 0; i < N; i++) {
V[i][0] = N - arr[i];
V[i][1] = i;
}
for
(
int
l = 0, r = 0; l < N; l = r + 1) {
for
(r = l; r < N - 1; ++r) {
if
(V[r + 1][0] != V[r][0]) {
break
;
}
}
if
(((r - l + 1) % V[l][0]) != 0) {
Console.WriteLine(
"Impossible"
);
return
;
}
for
(
int
i = l; i <= r; i += V[l][0]) {
cnt++;
for
(
int
j = i; j < i + V[l][0] && j < N; ++j)
res[V[j][1]] = cnt;
}
}
for
(
int
i = 0; i < N; i++)
Console.Write(res[i] +
" "
);
}
static
void
Main() {
int
[] arr = { 4, 4, 4, 4, 4 };
int
N = arr.Length;
findPossibleArray(N, arr);
}
}