#include #define For(i,j,k) for (int i=(int)(j);i<=(int)(k);i++) #define Rep(i,j,k) for (int i=(int)(j);i>=(int)(k);i--) #define pii pair #define pll pair #define ll long long #define fi first #define se second #define PB push_back #define uint unsigned #define ull unsigned ll using namespace std; const int N=200005; int a[N],ls[N],rs[N],q[N],at[N]; int n,nd,ans[N]; void getans(int x){ if (x<=n) return; ans[++*ans]=at[ls[x]]; getans(ls[x]); getans(rs[x]); } void solve(){ scanf("%d",&n); nd=n; *q=0; For(i,1,2*n) ls[i]=rs[i]=0; For(i,1,n) scanf("%d",&a[i]); For(i,1,n){ q[++*q]=i; at[i]=i; for (;(*q)>=2&&a[q[*q]]==a[q[(*q)-1]];){ at[++nd]=at[q[*q]]; ls[nd]=q[(*q)-1]; rs[nd]=q[*q]; a[nd]=a[q[*q]]-1; --*q; --*q; q[++*q]=nd; } } if ((*q)!=1||a[q[1]]){ puts("Impossible"); return; } *ans=0; getans(q[1]); puts("Possible"); For(i,1,n-1) printf("%d%c",ans[i],i==n-1?'\n':' '); } int main(){ int T; scanf("%d",&T); while (T--) solve(); }