local mmi, mma = math.min, math.max
local n = io.read("*n")
local a, b = {}, {}
local ta, tb = io.read("*n"), io.read("*n")
if tb < ta then ta, tb = tb, ta end
local a, b = {ta}, {tb}
local minv, minp, maxv, maxp = ta, 1, tb, 1
for i = 2, n do
  ta, tb= io.read("*n", "*n")
  if tb < ta then ta, tb = tb, ta end
  a[i], b[i] = ta, tb
  if ta < minv then
    minv = ta
    minp = i
  end
  if maxv < tb then
    maxv = tb
    maxp = i
  end
end
local ret = nil
if minv == maxv then
  -- (A) all same
  ret = 0
else
  -- (B) R has min, B has max value
  local redmax, bluemin = a[1], b[1]
  for i = 2, n do
    redmax = mma(redmax, a[i])
    bluemin = mmi(bluemin, b[i])
  end
  ret = (redmax - minv) * (maxv - bluemin)
end

-- (C) R has both of min and max values
do
  local t = {}
  for i = 1, n do t[i] = i end
  table.sort(t, function(x, y) return a[x] < a[y] end)
  local bmin = nil
  local bmax = nil
  local minlen = a[t[n]] - a[t[1]]
  for i = 1, n do
    if i == 1 then
      bmin, bmax = b[t[1]], b[t[1]]
    else
      bmin = mmi(bmin, b[t[i]])
      bmax = mma(bmax, b[t[i]])
    end
    local l = i == n and bmin or mmi(a[t[i + 1]], bmin)
    local r = i == n and bmax or mma(a[t[n]], bmax)
    minlen = mmi(minlen, r - l)
  end
  ret = mmi(ret, minlen * (maxv - minv))
end
print(ret)
