from collections import defaultdict from collections import deque M=int(input()) dic=defaultdict(list) dat=[] l=[[] for _ in range(M)] for i in range(M): A,B,C=map(int,input().split()) dat.append((A,B,C)) l[i]=[[A,B],[B,C],[C,A]] dic[(A,B)].append(i) dic[(B,C)].append(i) dic[(A,C)].append(i) edge=[[] for _ in range(M)] for k in dic.keys(): if len(dic[k]) >= 3: print("NO") exit() if len(dic[k]) == 1: continue p=dic[k][0] p2=dic[k][1] se=set(dat[p])&set(dat[p2]) if len(l)==3: sel=list(se) use = [[sel[0],sel[1]],[sel[1],sel[2]],[sel[2],sel[0]]] else: sel=list(se) use = [[sel[0],sel[1]]] for a,b in use: #print(a,b,l[p],l[p2],int([a,b] in l[p] ),int( [a,b] in l[p2])) if int([a,b] in l[p] )^int( [a,b] in l[p2])==0: edge[p].append((p2,-1)) edge[p2].append((p,-1)) else: edge[p].append((p2,1)) edge[p2].append((p,1)) di=[0 for _ in range(M)] for i in range(M): if di[i]==0: di[i]=1 dq=deque([i]) while len(dq)!=0: p = dq.popleft() for e,o in edge[p]: if di[e]==0: di[e]=di[p]*o dq.append(e) else: if di[e]!=di[p]*o: print("NO") exit() print("YES")