N = int( input() ) R0 = [] C0 = [] R1 = [] C1 = [] bag = set() for i in range( N ): r0, c0, r1, c1 = map( int, input().split() ) R0.append( r0 ) C0.append( c0 ) bag.add( ( r0, c0 ) ) R1.append( r1 ) C1.append( c1 ) bag.add( ( r1, c1 ) ) mp = dict() _ = 0 for key in bag: mp[ key ] = _ _ += 1 G = [ [] for i in range( N ) ] for i in range( N ): G[ i ].append( mp[ ( R0[ i ], C0[ i ] ) ] ) G[ i ].append( mp[ ( R1[ i ], C1[ i ] ) ] ) def dfs( u, bf, vis = None ): if vis == None: vis = [ False for i in range( len( mp ) ) ] for i in range( len( G[ u ] ) ): if vis[ G[ u ][ i ] ]: continue vis[ G[ u ][ i ] ] = True if bf[ G[ u ][ i ] ] == -1 or dfs( bf[ G[ u ][ i ] ], bf, vis ): bf[ G[ u ][ i ] ] = u return True return False bf = [ -1 for i in range( len( mp ) ) ] for i in range( N ): if not dfs( i, bf ): exit( print( "NO" ) ) print( "YES" )