#include const int MN = 100005; int N, dep[MN], stk[MN]; int faz[MN * 2], ls[MN * 2], rs[MN * 2], sz[MN * 2], cnt; int Ans[MN], ta; void Solve(int u) { if (!ls[u]) sz[u] = 1; else Solve(ls[u]), Solve(rs[u]), sz[u] = sz[ls[u]] + sz[rs[u]]; } void gAns(int u, int t) { if (!ls[u]) return ; else gAns(rs[u], t + sz[ls[u]]), gAns(ls[u], t), Ans[++ta] = t + sz[ls[u]]; } int main() { int T; scanf("%d", &T); while (T--) { scanf("%d", &N); for (int i = 1; i <= N; ++i) scanf("%d", &dep[i]); for (int i = 1; i <= 2 * N; ++i) faz[i] = ls[i] = rs[i] = 0; int now = cnt = 1, nd = 0, ok = 1; for (int i = 1; i <= N; ++i) { if (nd > dep[i]) { ok = 0; break; } while (nd < dep[i]) { stk[++nd] = 0; faz[++cnt] = now; ls[now] = cnt; now = cnt; } while (nd && stk[nd]) { --nd; now = faz[now]; } if (!nd && i != N) { ok = 0; break; } if (nd && i == N) { ok = 0; break; } if (!nd && i == N) continue; stk[nd] = 1; faz[++cnt] = faz[now]; rs[faz[now]] = cnt; now = cnt; } if (!ok) { puts("Impossible"); continue; } puts("Possible"); Solve(1), ta = 0, gAns(1, 0); while (ta) printf("%d%c", Ans[ta], " \n"[ta == 1]), --ta; } return 0; }