#include #include #include #include #include typedef long long ll; #define mp make_pair namespace io { template void read(T&num) { static char CH; static bool F; F = false; for (CH = getchar(); CH<'0' || CH>'9'; F = CH == '-', CH = getchar()); for (num = 0; CH >= '0'&&CH <= '9'; num = num * 10 + CH - '0', CH = getchar()); F && (num = -num); } template inline void print(T p) { static int stk[70], tp; if (!p) { putchar('0'); return; } while (p) stk[++tp] = p % 10, p /= 10; while (tp) putchar(stk[tp--] + '0'); } template inline void println(T p) { print(p); putchar('\n'); } inline void space() { putchar(' '); } inline void ln() { putchar('\n'); } } using namespace io; using namespace std; const int N = 1e6 + 5; int par[N]; vector ch[N]; int group[N]; typedef vector::iterator iter; void dp(int p) { for (iter it = ch[p].begin(); it != ch[p].end(); ++it) { group[*it] = 1 - group[p]; dp(*it); } } int main() { int T; read(T); while (T--) { int n; read(n); for (int i = 0; i < n; ++i) ch[i].clear(); for (int i = 1; i < n; ++i) { read(par[i]); ch[par[i]].push_back(i); } group[0] = 0; ll dat = 0; dp(0); for (int i = 0; i < n; ++i) { int x; read(x); if (group[i] == 1) dat ^= x; } puts(dat == 0 ? "lose" : "win"); } return 0; }