from scipy.sparse.csgraph import connected_components from scipy.sparse import csr_matrix N = int(input()) node = set() RC = [tuple(map(int, input().split())) for _ in range(N)] for r0, c0, r1, c1 in RC: node.add((r0, c0)) node.add((r1, c1)) node_d = {rc: i for i, rc in enumerate(node)} size = len(node_d) frm, to = [], [] for r0, c0, r1, c1 in RC: frm.append(node_d[(r0, c0)]) to.append(node_d[(r1, c1)]) matr = csr_matrix(([1] * N, (frm, to)), shape=(size, size)) p, labels = connected_components(matr) conn_node = [0] * p conn_edge = [0] * p for x in labels: conn_node[x] += 1 for r0, c0, _, _ in RC: conn_edge[labels[node_d[(r0, c0)]]] += 1 for n,e in zip(conn_node, conn_edge): if n < e: print('NO') exit() print('YES')