
def cross_point(p1, p2, p3, p4)
  d = (p2[0] - p1[0])*(p4[1] - p3[1]) - (p2[1] - p1[1])*(p4[0] - p3[0])
  return nil if d == 0
  u = ((p3[0] - p1[0])*(p4[1]-p3[1]) - (p3[1]-p1[1])*(p4[0]-p3[0]))/d.to_f
  return [p1[0] + u * (p2[0] - p1[0]), p1[1] + u * (p2[1] - p1[1])]
end

$len = {}
def length(p1, p2)
  unless $len[[p1,p2]]
    $len[[p1,p2]] =  Math.sqrt((p1[0]-p2[0])**2 + (p1[1]-p2[1])**2)
  end
  return $len[[p1,p2]]
end

def area(p1, p2, p3)
  a = length(p1, p2)
  b = length(p2, p3)
  c = length(p3, p1)
  s = (a+b+c)/2.0
  return Math.sqrt(s*(s-a)*(s-b)*(s-c))
end

n = gets.to_i
pt = []
n.times{|i|
  pt[i] = gets.split.map(&:to_i)
}

q = gets.to_i
q.times{
  x1,y1,x2,y2 = gets.split.map(&:to_i)
  left = []
  n.times{|i|
    side = pt[i][0] * (y1-y2) + x1 * (y2-pt[i][1]) + x2 * (pt[i][1]-y1)
    left << i if side > 0
  }
  ans = 0
  if left.size > 0
    if left[0] == 0 && left[-1] == n-1
      left.push(left.shift)
      while left[-1] + 1 == left[0]
        left.push(left.shift)
      end
    end
    pol = []
    cpt = cross_point(pt[left[0]-1], pt[left[0]], [x1, y1], [x2,y2])
    pol << cpt
    left.each{|i|
      pol << pt[i]
    }
    cpt = cross_point(pt[left[-1]], pt[(left[-1]+1)%n], [x1, y1], [x2,y2])
    pol << cpt
    s = pol.shift
    (pol.size-1).times{|i|
      ans += area(s, pol[i], pol[i+1])
    }
  end
  puts "%.5f" % ans
}