#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005;
const int MOD = 1e9 + 7;
const int INF = 1e9 + 7;
int N;
int order[MAXN];
vector<int> times[MAXN];
int cur[MAXN];
int aaa[MAXN];
int solve() {
  int step = 2;
  int lastn = 1;
  while (step <= N && lastn >= 0) {
    if (cur[lastn] < times[lastn].size()) {
      order[step++] = times[lastn][cur[lastn]];
      cur[lastn++]++;
    } else
      lastn -= 3;
  }
  if (step == N + 1)
    return 1;
  else
    return 0;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  ;
  while (cin >> N) {
    for (int i = 0; i <= N; ++i) times[i].clear();
    memset(order, 0, sizeof(order));
    memset(cur, 0, sizeof(cur));
    for (int i = 1; i <= N; ++i) {
      cin >> aaa[i];
      times[aaa[i]].push_back(i);
    }
    int flag = 1;
    if (times[0].size() > 0) {
      cur[0]++;
      order[1] = times[0][0];
      flag = solve();
    } else
      flag = 0;
    if (flag) {
      cout << "Possible" << endl;
      for (int i = 1; i <= N; ++i) cout << order[i] << " ";
      cout << endl;
    } else
      cout << "Impossible" << endl;
  }
  return 0;
}
