#include <bits/stdc++.h>
using namespace std;
const char *imp = "Impossible", *pos = "Possible";
struct ta {
  int greets;
  int r;
  int idx;
} tmpa;
int n, res[200000];
struct pred {
  bool operator()(const ta& ta1, const ta& ta2) {
    return ta1.r < ta2.r || ta1.r == ta2.r && ta1.greets < ta2.greets;
  }
};
multiset<ta, pred> a;
int main() {
  cin >> n;
  for (int i = 0; i < n; ++i) {
    cin >> tmpa.greets;
    tmpa.r = tmpa.greets % 3;
    tmpa.idx = i + 1;
    a.insert(tmpa);
  }
  tmpa.r = tmpa.greets = 0;
  set<ta>::iterator it = a.find(tmpa);
  if (it == a.end())
    cout << imp << endl;
  else {
    int ridx = -1;
    res[++ridx] = it->idx;
    while (a.size() > 1) {
      tmpa.greets = it->greets + 1;
      tmpa.r = (it->greets + 1) % 3;
      a.erase(it);
      it = a.upper_bound(tmpa);
      if (it == a.begin() || (--it)->r != tmpa.r) {
        cout << imp << endl;
        break;
      } else
        res[++ridx] = it->idx;
    }
    if (res[n - 1]) {
      cout << pos << endl;
      for (int i = 0; i < n; ++i) cout << res[i] << " ";
      cout << endl;
    }
  }
  return 0;
}
