#include <bits/stdc++.h>
using namespace std;
using VS = vector<string>;
using LL = long long;
using VI = vector<int>;
using VVI = vector<VI>;
using PII = pair<int, int>;
using PLL = pair<LL, LL>;
using VL = vector<LL>;
using VVL = vector<VL>;
const int INF = 1e9;
const LL LINF = 1e16;
const LL MOD = 1000000007;
const double PI = acos(-1.0);
int DX[8] = {0, 0, 1, -1, 1, 1, -1, -1};
int DY[8] = {1, -1, 0, 0, 1, -1, 1, -1};
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(false);
  LL N;
  cin >> N;
  VL a(N);
  vector<set<int>> vecset(N);
  for (int(i) = (0); (i) < (N); (i)++) {
    cin >> a[i];
    vecset[a[i]].insert(i);
  }
  VI ans(N);
  int num = 0;
  int ok = 1;
  for (int(i) = (0); (i) < (N); (i)++) {
    if (vecset[a[i]].find(i) == vecset[a[i]].end()) continue;
    LL s = N - a[i];
    if (int((vecset[a[i]]).size()) < s) {
      ok = 0;
      break;
    } else {
      num++;
      for (int(_) = (0); (_) < (s); (_)++) {
        auto it = vecset[a[i]].begin();
        ans[*it] = num;
        vecset[a[i]].erase(it);
      }
    }
  }
  if (num > N) ok = 0;
  if (ok) {
    cout << "Possible" << endl;
    for (int(i) = (0); (i) < (N); (i)++) {
      cout << ans[i] << " \n"[i == N - 1];
    }
  } else {
    cout << "Impossible" << endl;
  }
  return 0;
}
