Problem:
Problem F: Strawberry Cake

会津大学附属小学校 (会津大小) に入学したシャ、ネロ、エリ、コーは競技プログラマとして活躍するために IPPC というプログラミングコンテストに出場することにした。しかし IPPC は 3 人 1 組でチームとしてコンテストに出場する決まりで、4 人でチームを組むことはできない。そこで彼らは 2 人ずつに分かれてチームを組み、2 人 1 組で参加できる IPOCH というプログラミングコンテストに出場することにした。

チームは分かれてしまったが、実力は拮抗しており互いに良い練習相手になっている。

ある日彼らのコーチが差し入れにホールケーキを買ってきた。彼らはそれをシャの家で食べることにした。しかし家に着いて箱を開けてみるとケーキが変形していて、形は上から見ると円形ではなく凸多角形のようになっていた。ネロに運ばせたのが悪かったようだ。
ケーキの上にはイチゴが 1 つ乗っている。とりあえず 2 チームで分けるために、いまこのケーキをイチゴを通る直線にそって半分になるようにナイフで切ることが決定した。ケーキを切る前にイチゴを先にとってしまうのは彼らの美意識に反する。

あなたの仕事は 2 次元平面上に与えられる凸多角形 K を原点 (0, 0) を通る直線 L で分割したとき、分割で出来た 2 つの凸多角形の面積が等しくなるように直線 L を定めることである。もし複数あるならいずれかひとつで構わない。

Input

入力は複数のテストケースからなる。各テストケースは以下の形式に従う。

N
x1 y1
x2 y2
...
xN yN

N は与えられる凸多角形 K の頂点数である。点 (xi, yi) ( 1 ≤ i ≤ N ) はすべて凸多角形 K を成す頂点の座標であり、互いに異なる。これらは反時計回りの順で与えられる。また、凸多角形 K のどの辺上の点も原点との距離が 1 以上で、凸多角形 K は常に原点を内包する。入力の終了はひとつの0を含む１行で示される。原点を含む、入力で与えられる異なる 3 点は共線となりうることに注意して欲しい。

Constraints

入力はすべて整数

3 ≤ N ≤ 20

-100 ≤ xi ≤ 100 ( 1 ≤ i ≤ N )

-100 ≤ yi ≤ 100 ( 1 ≤ i ≤ N )

テストケースの数は 1,000 を超えない。

Output

以下の形式で直線 L 上の点 A (Ax, Ay) を出力せよ。ただし点 A と原点との距離は 1 以上でなければならない。

Ax Ay

原点とこの点 A を通る直線で凸多角形 K を分割したとき 2 つの凸多角形の面積の差が 10-5 未満でなければならない。点 A の座標は小数点以下 15 桁出力して欲しい。

Sample Input

4
-100 -100
100 -100
100 100
-100 100
4
-99 -100
100 -100
100 100
-99 100
4
-100 -99
100 -99
100 100
-100 100
14
-99 -70
-92 -79
10 -98
37 -100
62 -95
77 -69
88 -47
92 -10
96 28
100 91
42 92
-62 92
-88 91
-98 64
0

Sample Output

100.000000000000000 0.000000000000000
100.000000000000000 0.000000000000000
0.000000000000000 100.000000000000000
-96.983291994836122 66.745111613942484

Solution in Ruby (judge verdict: Wrong Answer)

### constant

DELTA = 1.0e-10

def tarea(p0x, p0y, p1x, p1y)
  (p0x * p1y - p0y * p1x).abs / 2
end

def cross(v0x, v0y, p0x, p0y, v1x, v1y)
  d = v0x * v1y - v0y * v1x
  return nil if d == 0.0

  sd = -v0y * p0x + v0x * p0y
  td = -v1y * p0x + v1x * p0y
  #[s * v1x, s * v1y]
  #(t >= 0.0 && t <= 1.0) ? s : nil
  [sd / d, td / d]
end

def divpol(k, t, lines, areas)
  n = lines.length
  lk = lines[k]
  vx = lk[0] * t + lk[2]
  vy = lk[1] * t + lk[3]

  ak = areas[k]
  s0 = ak * t
  s1 = ak - s0

  for h in (1...n)
    st = cross(*lines[(k + h) % n], vx, vy)
    if ! st.nil?
      sh, th = st
      break if th >= 0.0 && th <= 1.0 && sh < 0.0
    end
  end
  #p [h, sh, th]

  ah = areas[(k + h) % n]
  s1 += ah * th
  s0 += ah * (1.0 - th)

  for i in (1...h)
    s1 += areas[(k + i) % n]
  end

  for i in ((h + 1)...n)
    s0 += areas[(k + i) % n]
  end

  s1 - s0
end

### main

#p cross(100.0, -100.0, 0.0, 100.0, 1.0, 0.0); exit

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

  pts = n.times.map{gets.split.map(&:to_f)}
  #p pts

  lines = []
  areas = []
  for i in (0...n)
    j = (i + 1) % n
    vx = pts[j][0] - pts[i][0]
    vy = pts[j][1] - pts[i][1]
    lines << [vx, vy, *pts[i]]
    areas << tarea(*pts[i], *pts[j])
  end
  #p lines
  #p areas

  dps = []
  fisnished = false

  for i in (0...n)
    dpi = divpol(i, 0.0, lines, areas)
    dps << dpi
    if dpi.abs < DELTA
      puts [lines[i][2], lines[i][3]].join(' ')
      finished = true
      break
    end
  end
  next if finished
  dps[n] = dps[0]

  for k in (0...n)
    break if dps[k] * dps[k + 1] < 0.0
  end
  #p [k, k + 1]

  t0 = 0.0
  t1 = 1.0

  while t1 - t0 > DELTA
    th = (t0 + t1) / 2
    dpt = divpol(k, th, lines, areas)
    if dpt.abs < DELTA
      t0 = t1 = th
      break
    elsif dpt < 0.0
      t0 = th
    else
      t1 = th
    end
  end
  th = (t0 + t1) / 2

  lk = lines[k]
  px = lk[0] * th + lk[2]
  py = lk[1] * th + lk[3]
  puts [px, py].join(' ')
end