Chouti and his classmates are going to the university soon. To say goodbye to each other, the class has planned a big farewell party in which classmates, teachers and parents sang and danced.
Chouti remembered that $n$ persons took part in that party. To make the party funnier, each person wore one hat among $n$ kinds of weird hats numbered $1, 2, \ldots n$. It is possible that several persons wore hats of the same kind. Some kinds of hats can remain unclaimed by anyone.
After the party, the $i$-th person said that there were $a_i$ persons wearing a hat differing from his own.
It has been some days, so Chouti forgot all about others’ hats, but he is curious about that. Let $b_i$ be the number of hat type the $i$-th person was wearing, Chouti wants you to find any possible $b_1, b_2, \ldots, b_n$ that doesn’t contradict with any person’s statement. Because some persons might have a poor memory, there could be no solution at all.
Input
The first line contains a single integer $n$ ($1 \le n \le 10^5$), the number of persons in the party.
The second line contains $n$ integers $a_1, a_2, \ldots, a_n$ ($0 \le a_i \le n-1$), the statements of people.
Output
If there is no solution, print a single line “Impossible”.
Otherwise, print “Possible” and then $n$ integers $b_1, b_2, \ldots, b_n$ ($1 \le b_i \le n$).
If there are multiple answers, print any of them.
Examples
input
3
0 0 0
output
Possible
1 1 1
input
5
3 3 2 2 2
output
Possible
1 1 2 2 2
input
4
0 1 2 3
output
Impossible
Note
In the answer to the first example, all hats are the same, so every person will say that there were no persons wearing a hat different from kind $1$.
In the answer to the second example, the first and the second person wore the hat with type $1$ and all other wore a hat of type $2$.
So the first two persons will say there were three persons with hats differing from their own. Similarly, three last persons will say there were two persons wearing a hat different from their own.
In the third example, it can be shown that no solution exists.
In the first and the second example, other possible configurations are possible.
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<vector<int>> a(n + 1); for (int i = 0; i < n; i++) { int x; cin >> x; int same = n - x; a[same].push_back(i); } vector<int> res(n, -1); int cc = 0; for (int i = 1; i <= n; i++) { int sz = (int) a[i].size(); if (sz % i != 0) { cout << "Impossible" << '\n'; return 0; } for (int j = 0; j < sz; j += i) { for (int k = 0; k < i; k++) { res[a[i][j + k]] = cc; } ++cc; } } cout << "Possible" << '\n'; for (int i = 0; i < n; i++) { if (i > 0) { cout << " "; } cout << res[i] + 1; } cout << '\n'; return 0; }