#include <bits/stdc++.h>
template <class T1, class T2>
inline void gmax(T1 &a, T2 b) {
  if (b > a) a = b;
}
template <class T1, class T2>
inline void gmin(T1 &a, T2 b) {
  if (b < a) a = b;
}
using namespace std;
const int maxn = 1e6 + 4;
map<int, int> H;
vector<int> vc[maxn];
int cnt[maxn];
int main(int argc, char const *argv[]) {
  int n;
  scanf("%d", &n);
  memset(cnt, 0, sizeof(cnt));
  for (int i = 0; i < n; i++) {
    int x;
    scanf("%d", &x);
    H[x]++;
    vc[x].push_back(i + 1);
  }
  vector<int> ans;
  int cur = 0, tot = 0;
  while (tot < n && cur >= 0) {
    if (H[cur] > 0) {
      H[cur]--;
      ans.push_back(vc[cur][cnt[cur]]);
      cnt[cur]++;
      cur++;
    } else {
      cur -= 3;
    }
  }
  int len_ans = (int)ans.size();
  if (len_ans == n) {
    printf("Possible\n");
    for (int i = 0; i < len_ans - 1; i++) {
      printf("%d ", ans[i]);
    }
    printf("%d\n", ans[len_ans - 1]);
  } else {
    printf("Impossible\n");
  }
  return 0;
}
