#include <bits/stdc++.h>
using namespace std;
template <typename T>
string toStr(T Number) {
  stringstream ss;
  ss << Number;
  return ss.str();
}
template <typename T>
T toNum(const string &Text) {
  stringstream ss(Text);
  T result;
  return ss >> result ? result : 0;
}
int inGrid(int x, int y, int r, int c) {
  return (x >= 0 && x < r && y >= 0 && y < c ? 1 : 0);
}
int leap(int m) {
  if (m % 4 == 0 && m % 100 != 0)
    return 1;
  else if (m % 400 == 0)
    return 1;
  else
    return 0;
}
int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
string months[] = {"January",   "February", "March",    "April",
                   "May",       "June",     "July",     "August",
                   "September", "October",  "November", "December"};
int dx4[] = {-1, 0, 1, 0};
int dy4[] = {0, 1, 0, -1};
const double pi = acos(-1.0), eps = 1e-9;
const int N = 2e5 + 5, M = 1e9 + 7;
int n, a[N], ptr[N];
vector<int> v[N], ans;
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    int x;
    scanf("%d", &x);
    a[i] = x;
    v[x].push_back(i);
  }
  int cnt = 0, cur = 0;
  while (cnt < n) {
    if (ptr[cur] >= v[cur].size()) {
      cout << "Impossible" << endl;
      return 0;
    }
    int p = ptr[cur];
    ans.push_back(v[cur][p]);
    ptr[cur]++;
    cnt++;
    while (cnt < n && ptr[cur + 1] >= v[cur + 1].size()) {
      if (cur < 2) {
        cout << "Impossible" << endl;
        return 0;
      } else
        cur -= 3;
    }
    cur++;
  }
  cout << "Possible" << endl;
  for (int i = 0; i < ans.size(); i++) printf("%d ", ans[i] + 1);
  return 0;
}
