//package misc.ukiepc2025 import java.util.TreeMap fun main() { val n = readInt() val rectangles = List(n) { readInts() } var wid = 0; var hei = 0; var area = 0L val events = mutableMapOf>() fun addEvent(y: Int, xFrom: Int, xTo: Int, value: Int) { events.getOrPut(y) { mutableListOf() }.add(Event(xFrom, xTo, value)) } for (rectangle in rectangles) { val (x, y, w, h) = rectangle val x2 = x + w; val y2 = y + h wid = maxOf(wid, x2) hei = maxOf(hei, y2) area += w.toLong() * h addEvent(y, x, x2, +1) addEvent(y2, x, x2, -1) } if (area != wid.toLong() * hei) return no() val ys = events.keys.sorted() val map = TreeMap() for (y in ys) { for (event in events[y]!!.sortedBy { it.value }) { val xFrom = event.xFrom val xTo = event.xTo if (event.value == -1) { require(map[xFrom] == xTo) map.remove(xFrom) continue } val prev = map.floorEntry(xFrom) if (prev != null && prev.value!! > xFrom) return no() val next = map.ceilingEntry(xFrom) if (next != null && next.key < xTo) return no() map[xFrom] = xTo } } println("yes") } private fun no() = println("no") private data class Event(val xFrom: Int, val xTo: Int, val value: Int) private fun readInt() = readln().toInt() private fun readStrings() = readln().split(" ") private fun readInts() = readStrings().map { it.toInt() }