#include <bits/stdc++.h>
using namespace std;
int n, a;
vector<pair<int, int> > v[3];
vector<pair<int, int> > ans;
vector<int> dsu[3];
int c[3];
void init() {
  for (int i = 0; i < 3; i++) {
    for (int j = 0; j < v[i].size(); j++) dsu[i].push_back(j);
  }
}
int findset(int cur, int x) {
  return dsu[cur][x] = (dsu[cur][x] == x || dsu[cur][x] == -1
                            ? dsu[cur][x]
                            : findset(cur, dsu[cur][x]));
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a;
    v[a % 3].push_back(make_pair(a, i));
  }
  for (int i = 0; i < 3; i++) sort(v[i].begin(), v[i].end());
  if (v[0].empty() || v[0][0].first != 0) {
    cout << "Impossible";
    return 0;
  }
  init();
  int cur = 1, count = 1, idx;
  int t = (int)(upper_bound(v[0].begin(), v[0].end(), make_pair(0, INT_MAX)) -
                v[0].begin() - 1);
  ans.push_back(v[0][t]);
  dsu[0][t] = t - 1;
  c[0]++;
  while (count < n && c[cur] < v[cur].size()) {
    int t =
        (int)(upper_bound(v[cur].begin(), v[cur].end(),
                          make_pair(ans[ans.size() - 1].first + 1, INT_MAX)) -
              v[cur].begin());
    t--;
    idx = findset(cur, t);
    if (idx == -1) {
      cout << "Impossible";
      return 0;
    }
    dsu[cur][idx] = idx - 1;
    ans.push_back(v[cur][idx]);
    c[cur]++;
    cur = (cur + 1) % 3;
    count++;
  }
  if (count < n) {
    cout << "Impossible";
    return 0;
  }
  cout << "Possible" << endl;
  for (int i = 0; i < ans.size(); i++) cout << ans[i].second << " ";
  return 0;
}
