N=gets.to_i h={} m=N.times.map{ a=gets.split.map(&:to_i) a<<(b=a[0]*1000+a[1]) a<<(c=a[2]*1000+a[3]) (h[b]=(h[b]||[]))<m,h,a,r,o,u{ return true if o[a] u[a]=true o[a]=true b=h[a[4]] c=h[a[5]] if b.size==1 if c.size==1 return true else z=true c.each{|d| z&&=F[m,h,d,r,o,u] } o[a]=false return z end elsif c.size==1 z=true b.each{|d| z&&=F[m,h,d,r,o,u] } o[a]=false return z else unless r[a[0]][a[1]] r[a[0]][a[1]]=true z=true c.each{|d| z&&=F[m,h,d,r,o,u] } b.each{|d| z&&=F[m,h,d,r,o,u] } r[a[0]][a[1]]=false if z o[a]=false return true end end unless r[a[2]][a[3]] r[a[2]][a[3]]=true z=true c.each{|d| z&&=F[m,h,d,r,o,u] } b.each{|d| z&&=F[m,h,d,r,o,u] } r[a[2]][a[3]]=false o[a]=false return z end end o[a]=false false } u={} m.each{|a| next if u[a] r=112.times.map{[]} unless F[m,h,a,r,{},u] puts "NO" exit end } puts "YES"