#include #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define per(i,a,b) for(int i=(a);i>=(b);i--) #define REP(i,n) for(int i=(0);i<(n);i++) #define fi first #define se second #define pb push_back #define mp make_pair using namespace std; typedef pair pii; typedef vector vi; typedef long long ll; template inline void read(T &x){ int f=0;x=0;char ch=getchar(); for(;!isdigit(ch);ch=getchar())f|=(ch=='-'); for(;isdigit(ch);ch=getchar())x=x*10+ch-'0'; if(f)x=-x; } const int N=100005; int s[N][3],a[N],n,top,rt; priority_queue,greater > Q; vi e[N]; void MAIN(){ read(n); rep(i,1,n)e[i].clear(); top=0; rep(i,1,n){ read(a[i]); s[++top][0]=a[i]; s[top][1]=0; s[top][2]=i; while(top>=2&&s[top-1][0]==s[top][0]){ top--; e[s[top][2]].pb(s[top][1]); e[s[top][2]].pb(s[top+1][1]); s[top][0]--; s[top][1]=s[top][2]; s[top][2]=s[top+1][2]; } } //printf("%d %d\n",top,s[top][0]); if(top>1||s[top][0]!=0){ puts("Impossible"); return; } puts("Possible"); rt=s[top][1]; Q.push(rt); int fir=1; while(!Q.empty()){ int x=Q.top(); Q.pop(); if(!fir)putchar(' '); else fir=0; printf("%d",x); for(auto y:e[x]) if(y)Q.push(y); } puts(""); } int main(){ int T; read(T); while(T--) MAIN(); return 0; }