#include using namespace std; #define rep(i,a,b) for(int i=(a);i<(b);i++) #define all(a) begin(a),end(a) #define sz(a) (int)(a).size() typedef long long ll; typedef vector vi; typedef pair pii; int main(){ cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); int M;cin>>M; vectorA(M),B(M),C(M); rep(i,0,M)cin>>A[i]>>B[i]>>C[i]; { set>S; rep(i,0,M)S.insert(make_pair(A[i],pii(B[i],C[i]))); if(sz(S)E; rep(i,0,M){ E.emplace_back(pii(A[i],B[i])); E.emplace_back(pii(B[i],C[i])); E.emplace_back(pii(A[i],C[i])); } sort(all(E)); E.erase(unique(all(E)),E.end()); int L=sz(E); vector>F(L); rep(i,0,M){ F[lower_bound(all(E),pii(A[i],B[i]))-E.begin()].emplace_back(i); F[lower_bound(all(E),pii(B[i],C[i]))-E.begin()].emplace_back(i); F[lower_bound(all(E),pii(A[i],C[i]))-E.begin()].emplace_back(i); } vector>>es(M); rep(i,0,L)rep(j,0,sz(F[i])-1){ if(sz(F[i])>2){cout<<"NO"<pot(M),seen(M); functiondfs=[&](int v){ seen[v]=1; for(auto[u,b]:es[v]){ if(!seen[u]){pot[u]=(pot[v]^b);dfs(u);} else if(pot[u]!=(pot[v]^b))ok=0; } }; rep(i,0,M)if(!seen[i])dfs(i); if(ok)cout<<"YES"<