#include <bits/stdc++.h>
using namespace std;
const long long MOD = 998244353;
const long long N = 1e6 + 10;
long long a[N];
vector<long long> graph[N];
vector<long long> output;
void dfs(int i, int n) {
  int size = graph[i].size();
  if (size == 0) {
    if (i == 0 || i - 3 < 0) return;
    dfs(i - 3, n);
    return;
  }
  output.push_back(graph[i].back());
  graph[i].pop_back();
  dfs(i + 1, n);
}
void go() {
  long long n;
  cin >> n;
  for (int i = 0; i < n; i++) cin >> a[i];
  for (int i = 0; i < n; i++) graph[a[i]].push_back(i + 1);
  dfs(0, n);
  if (output.size() != n)
    cout << "Impossible";
  else {
    cout << "Possible" << endl;
    for (int i = 0; i < n; i++) cout << output[i] << " ";
  }
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  int t = 1;
  cout << fixed << setprecision(6);
  while (t--) {
    go();
  }
}
