#include <bits/stdc++.h>
using namespace std;
const int inf = (int)1e9, maxn = (int)1e5 + 1;
const double eps = (double)1e-8;
const int mod = (int)1000000007;
int c[200009], a[200009], t, k, f, n;
vector<int> b[200009], o;
int main() {
  cin >> n;
  memset((c), 0, sizeof(c));
  ;
  for (int i = (1); i <= (n); i++) {
    scanf("%d", &(a[i]));
    b[a[i]].push_back(i);
  }
  k = 0;
  t = 1;
  for (int i = 1; i <= n && t; i++) {
    if (b[k].size() == c[k]) {
      t = 0;
      break;
    }
    o.push_back(b[k][c[k]]);
    c[k]++;
    if (k - 2 < 0 || b[k - 2].size() == c[k - 2] ||
        b[k - 1].size() == c[k - 1] || b[k].size() == c[k]) {
      k++;
      continue;
    }
    k -= 2;
  }
  if (t) {
    cout << "Possible" << endl;
    for (int i = 0; i < o.size(); i++) {
      cout << o[i] << " ";
    }
    return 0;
  }
  k--;
  for (int i = n; i >= 0; i--) {
    if ((b[i].size() != c[i] && i >= k) || (b[i].size() > c[i] + 1)) {
      cout << "Impossible";
      return 0;
    }
    if (b[i].size() == c[i] + 1 && (i == 0 || b[i - 1].size() == c[i - 1])) {
      if ((k - i + 1) % 3 != 0) {
        cout << "Impossible";
        return 0;
      }
      k = i;
      o.push_back(b[i][c[i]]);
      if (b[i + 1].size() != c[i + 1]) {
        o.push_back(b[i + 1][c[i + 1]]);
        k = i + 1;
      }
    }
  }
  cout << "Possible" << endl;
  for (int i = 0; i < o.size(); i++) {
    cout << o[i] << " ";
  }
  return 0;
}
