### subroutines

def o_prod(x0, y0, x1, y1)
  x0 * y1 - x1 * y0
end

def col_segs(seg0, seg1)
  vx = seg1[0]- seg0[0]
  vy = seg1[1]- seg0[1]
  v0x = seg0[2] - seg0[0]
  v0y = seg0[3] - seg0[1]
  v1x = seg1[2] - seg1[0]
  v1y = seg1[3] - seg1[1]

  op_01 = o_prod(v0x, v0y, v1x, v1y)
  return nil if op_01 == 0.0

  op_0 = o_prod(vx, vy, v0x, v0y)
  op_1 = o_prod(vx, vy, v1x, v1y)

  t0 = op_1 / op_01
  t1 = op_0 / op_01

  return nil if t0 < 0.0 || t0 > 1.0 || t1 < 0.0 || t1 > 1.0

  [seg0[0] + v0x * t0, seg0[1] + v0y * t0]
end

def area(x0, y0, x1, y1, x2, y2, x3, y3)
  (o_prod(x1 - x0, y1 - y0, x2 - x0, y2 - y0) +
   o_prod(x3 - x2, y3 - y2, x0 - x2, y0 - y2)) * 0.5
end

### main

loop do
  n = gets.to_i
  break if n == 0

  nn = n + 2
  
  ais = [0.0] + gets.split.map(&:to_f) + [1.0]
  bis = [0.0] + gets.split.map(&:to_f) + [1.0]
  cis = [0.0] + gets.split.map(&:to_f) + [1.0]
  dis = [0.0] + gets.split.map(&:to_f) + [1.0]
  #p [ais, bis, cis, dis]

  vsegs = (0...nn).map{|i| [ais[i], 0.0, bis[i], 1.0]}
  hsegs = (0...nn).map{|i| [0.0, cis[i], 1.0, dis[i]]}
  #p vsegs
  #p hsegs

  cols = nn.times.map{[]}

  for y in (0...nn)
    for x in (0...nn)
      cols[y][x] = col_segs(vsegs[x], hsegs[y])
    end
  end
  #p cols

  maxar = 0.0

  for y in (0..n)
    for x in (0..n)
      c0 = cols[y][x]
      c1 = cols[y][x + 1]
      c2 = cols[y + 1][x + 1]
      c3 = cols[y + 1][x]
      ar = area(*c0, *c1, *c2, *c3)
      maxar = ar if maxar < ar
    end
  end

  puts "%.6f" % maxar
end