import java.util.Scanner

object Main extends App { 
  val sc = new Scanner(System.in)
  val n  = sc.nextInt()
  val list = (for (i <- 0 until n) yield (i, sc.nextLong(), sc.nextLong(), sc.nextLong(), sc.nextLong())).toList
 
  type XAux = (Int, Int, Long, Long, Long) // (id, state, x aux, top, bottom)
  type YAux = (Int, Int, Long) // (id, state, y aux)

  val xlist = (for ((i,l,t,r,b) <- list) yield List((i,0,l,t,b), (i,1,r,t,b))).flatten.sortBy(_._3)

  def area(x:Long, p:Long, ylist:List[YAux]):Long = {
    def iter(yl:List[YAux], c:Int, p:Long, ac:Long):Long = {
      if (yl.isEmpty) ac
      else {
        val (i,s,y) = yl.head
        (s, c) match {
          case (0, 0) => iter(yl.tail, c+1, y, ac)
          case (0, _) => iter(yl.tail, c+1, p, ac)
          case (1, 1) => iter(yl.tail, c-1, p, ac+y-p)
          case (_, _) => iter(yl.tail, c-1, p, ac)
        }
      }
    }
    iter(ylist.sortBy(_._3), 0, 0, 0)*(x-p)
  }

  def solver(xl:List[XAux], yl:List[YAux], c:Int, p:Long, acc:Long):Long = {
    def addRect(yl:List[YAux], xr:XAux):List[YAux] = {
      val (i,s,x,t,b) = xr
      if (b < t) (i,0,b)::(i,1,t)::yl else (i,0,t)::(i,1,b)::yl
    } 

    if (xl.isEmpty) acc
    else {
      val (i, s, x, t, b) = xl.head
      (s, c) match {
        case (0, 0) => solver(xl.tail, addRect(yl, xl.head), c+1, x, acc)
        case (0, _) => solver(xl.tail, addRect(yl, xl.head), c+1, x, acc+area(x, p, yl))
        case (_, _) => solver(xl.tail, yl.filter(_._1 != i), c-1, x, acc+area(x, p, yl))
      }
    } 
  }

  println(solver(xlist, Nil, 0, 0, 0))
}

