#include #include #include #include #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) using namespace std; inline int read() { int x=0,f=1;char c=getchar(); for(;!isdigit(c);c=getchar()) if(c=='-') f=-1; for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f; } typedef long long ll; const int maxn=100010; int n,first[maxn],Next[maxn],to[maxn],e; void AddEdge(int u,int v) { to[++e]=v;Next[e]=first[u];first[u]=e; } int A[maxn],vis[maxn],d[maxn]; int Q[maxn]; void solve() { n=read();e=0; rep(i,1,n) first[i]=0; rep(i,2,n) AddEdge(read()+1,i); rep(i,1,n) A[i]=read(); rep(i,1,n) vis[i]=d[i]=0; int l=1,r=0;Q[++r]=1; int ans=0; while(l<=r) { int x=Q[l++];if(d[x]&1) ans^=A[x]; for(int i=first[x];i;i=Next[i]) { if(!vis[to[i]]) { d[to[i]]=d[x]+1; vis[to[i]]=1; Q[++r]=to[i]; } } } puts(ans?"win":"lose"); } int main() { dwn(T,read(),1) solve(); return 0; }