#include <bits/stdc++.h>
#define fast ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define ll long long
#define ld long double
#define pb push_back
using namespace std;
vector<vector<int>>v;
map<pair<int,int>,int>cost;
bool vis[(int)1e5+5];
map<int,int>source;
int a,b;
bool o=0;
void dfs1(int node,int x)
{
vis[node]=1;
for(auto child:v[node])
{
if(!vis[child])
{
if(child!=b) // not reaching dest from source
{
source[x^cost[{node,child}]]=1;
dfs1(child,x^cost[{node,child}]);
}
}
}
}
void dfs2(int node,int x)
{
vis[node]=1;
for(auto child:v[node])
{
if(!vis[child])
{
if(source[x^cost[{node,child}]]|| (x^cost[{node,child}])==0)
o=1;
dfs2(child,x^cost[{node,child}]);
}
}
}
int main()
{fast
int t;
cin>>t;
while(t--)
{
int n;
cin>>n>>a>>b;
v.clear();
v.resize(n+1);
source.clear();
cost.clear();
o=0;
for(int i=1;i<=n;i++) vis[i]=0;
int x,y,z;
for(int i=0;i<n-1;i++)
{
cin>>x>>y>>z;
v[x].pb(y);
v[y].pb(x);
cost[{x,y}]=z;
cost[{y,x}]=z;
}
dfs1(a,0); //go from source
for(int i=1;i<=n;i++) vis[i]=0;
dfs2(b,0) ;//go from dest
(o)?cout<<"YES\n":cout<<"NO\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgZmFzdCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApLGNpbi50aWUoMCksY291dC50aWUoMCk7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBwYiBwdXNoX2JhY2sKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdmVjdG9yPHZlY3RvcjxpbnQ+PnY7Cm1hcDxwYWlyPGludCxpbnQ+LGludD5jb3N0Owpib29sIHZpc1soaW50KTFlNSs1XTsKbWFwPGludCxpbnQ+c291cmNlOwppbnQgYSxiOwpib29sIG89MDsKdm9pZCBkZnMxKGludCBub2RlLGludCB4KQp7CiAgICB2aXNbbm9kZV09MTsKICAgIGZvcihhdXRvIGNoaWxkOnZbbm9kZV0pCiAgICB7CiAgICAgICAgaWYoIXZpc1tjaGlsZF0pCiAgICAgICAgewogICAgICAgICAgICBpZihjaGlsZCE9YikgLy8gbm90IHJlYWNoaW5nIGRlc3QgZnJvbSBzb3VyY2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc291cmNlW3heY29zdFt7bm9kZSxjaGlsZH1dXT0xOwogICAgICAgICAgICAgICAgZGZzMShjaGlsZCx4XmNvc3Rbe25vZGUsY2hpbGR9XSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0Kdm9pZCBkZnMyKGludCBub2RlLGludCB4KQp7CiAgICB2aXNbbm9kZV09MTsKICAgICBmb3IoYXV0byBjaGlsZDp2W25vZGVdKQogICAgewogICAgICAgIGlmKCF2aXNbY2hpbGRdKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKHNvdXJjZVt4XmNvc3Rbe25vZGUsY2hpbGR9XV18fCAoeF5jb3N0W3tub2RlLGNoaWxkfV0pPT0wKQogICAgICAgICAgICAgICAgICAgbz0xOwogICAgICAgICAgICAgICAgZGZzMihjaGlsZCx4XmNvc3Rbe25vZGUsY2hpbGR9XSk7CiAgICAgICAgfQogICAgfQp9CmludCBtYWluKCkKe2Zhc3QKaW50IHQ7CmNpbj4+dDsKd2hpbGUodC0tKQp7CiAgaW50IG47CiAgY2luPj5uPj5hPj5iOwogIHYuY2xlYXIoKTsKICB2LnJlc2l6ZShuKzEpOwogIHNvdXJjZS5jbGVhcigpOwogIGNvc3QuY2xlYXIoKTsKICBvPTA7CiAgZm9yKGludCBpPTE7aTw9bjtpKyspIHZpc1tpXT0wOwogIGludCB4LHksejsKICBmb3IoaW50IGk9MDtpPG4tMTtpKyspCiAgewogICAgICBjaW4+Png+Pnk+Pno7CiAgICAgIHZbeF0ucGIoeSk7CiAgICAgIHZbeV0ucGIoeCk7CiAgICAgIGNvc3Rbe3gseX1dPXo7CiAgICAgIGNvc3Rbe3kseH1dPXo7CiAgfQpkZnMxKGEsMCk7IC8vZ28gZnJvbSBzb3VyY2UKZm9yKGludCBpPTE7aTw9bjtpKyspIHZpc1tpXT0wOwpkZnMyKGIsMCkgOy8vZ28gZnJvbSBkZXN0CihvKT9jb3V0PDwiWUVTXG4iOmNvdXQ8PCJOT1xuIjsKfQpyZXR1cm4gMDsKfQ==