#include<cstdio>
#include<algorithm>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
const int maxn=100000+10;
int ans[maxn],d[maxn*2],fa[maxn*2],h[maxn*2],now[maxn*2],go[maxn*6],nxt[maxn*6],sta[maxn*6];
bool bz[maxn*6],czy;
int i,j,k,l,r,s,t,n,m,tot,top,rot1,rot2;
void add(int x,int y){
	go[++tot]=y;
	nxt[tot]=h[x];
	h[x]=tot;
}
void dfs(int x,int y){
	int t=h[x];
	while (t){
		if (go[t]!=y){
			dfs(go[t],x);
			d[x]^=1;
		}
		t=nxt[t];
	}
	d[x]^=1;
}
void travel(int x){
	int t=now[x];
	while (t){
		if (!bz[(t+1)/2]){
			bz[(t+1)/2]=1;
			now[x]=nxt[t];
			travel(go[t]);
		}
		t=nxt[t];
	}
	sta[++top]=x;
}
int main(){
	scanf("%d",&n);
	fo(i,1,n){
		scanf("%d",&fa[i]);
		if (fa[i]==-1){
			fa[i]=0;
			rot1=i;
		}
		else{
			add(fa[i],i);
			add(i,fa[i]);
		}
	}
	fo(i,n+1,2*n){
		scanf("%d",&fa[i]);
		if (fa[i]==-1){
			fa[i]=0;
			rot2=i;
		}
		else{
			add(fa[i]+n,i);
			add(i,fa[i]+n);
		}
	}
	dfs(rot1,0);
	dfs(rot2,0);
	czy=1;
	fo(i,1,n)
		if (d[i]^d[i+n]){
			czy=0;
			break;
		}
	if (!czy){
		printf("IMPOSSIBLE\n");
		return 0;
	}
	printf("POSSIBLE\n");
	s=0;
	add(s,rot1);
	add(rot1,s);
	add(s,rot2);
	add(rot2,s);
	fo(i,1,n)
		if (d[i]){
			add(i,i+n);
			add(i+n,i);
		}
	fo(i,s,2*n) now[i]=h[i];
	travel(s);
	fo(i,1,n)
		if (d[i]) ans[i]=-1;
	fo(i,1,top-1)
		if (sta[i]>0&&sta[i]<=n&&sta[i+1]==sta[i]+n) ans[sta[i]]=1;
	fo(i,1,n) printf("%d ",ans[i]);
}