Problem: Sha, Nero, Eri, and Ko, who entered the University of Aizu Elementary School (Aizu University and Small), decided to participate in a programming contest called IPPC in order to play an active role as a competition programmer. However, IPPCs are required to participate in the contest as a team of three people, and it is not possible to form a team of four people. Therefore, they decided to form a team of two people and participate in a programming contest called IPOCH where two people can participate in one group.

Although the teams have been separated, their abilities are competing and they are good practice partners for each other.

One day their coach bought a whole cake to put in. They decided to eat it at Sha's house. However, when I got home and opened the box, the cake was deformed, and when viewed from above, it looked like a convex polygon instead of a circle. It seems that it was bad to have Nero carry it. There is a strawberry on top of the cake. For the time being, it was decided to cut this cake with a knife in half along a straight line through the strawberries in order to divide it into two teams. It is against their aesthetic sense to take the strawberries first before cutting the cake.

Your job is to divide a convex polygon K given on a two-dimensional plane by a straight line L passing through the origin (0, 0), and then divide the straight line L so that the areas of the two convex polygons created by the division are equal. To determine. If there are more than one, one of them will do.
<image>

Constraints

* All inputs are integers
* 3 ≤ N ≤ 20
* -100 ≤ xi ≤ 100 (1 ≤ i ≤ N)
* -100 ≤ yi ≤ 100 (1 ≤ i ≤ N)
* The number of test cases does not exceed 1,000.

Input

The input consists of multiple test cases. Each test case follows the format below.


N
x1 y1
x2 y2
...
xN yN


N is the number of vertices of the given convex polygon K. The points (xi, yi) (1 ≤ i ≤ N) are all the coordinates of the vertices that make up the convex polygon K and are different from each other. These are given in counterclockwise order. Also, a point on any side of the convex polygon K has a distance of 1 or more from the origin, and the convex polygon K always contains the origin. The end of input is indicated by one line containing one 0. Note that the three different points given by the input, including the origin, can be collinear.

Output

Output the point A (Ax, Ay) on the straight line L in the following format. However, the distance between point A and the origin must be 1 or more.


Ax Ay


When the convex polygon K is divided by the origin and a straight line passing through this point A, the difference in area between the two convex polygons must be less than 10-5. I want the coordinates of point A to be output 15 digits after the decimal point.

Example

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


Output

100.000000000000000 0.000000000000000
100.000000000000000 0.000000000000000
0.000000000000000 100.000000000000000
-96.983291994836122 66.745111613942484

Solution (in CPP):

Solution:
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <complex>
using namespace std;

typedef complex<double> P;


// 許容する誤差ε
#define EPS (1e-6)
// 2つのスカラーが等しいかどうか
#define EQ(a,b) (abs((a)-(b)) < EPS)
// 2つのベクトルが等しいかどうか
#define EQV(a,b) ( EQ((a).real(), (b).real()) && EQ((a).imag(), (b).imag()) )


// 内積 (dot product) : a・b = |a||b|cosΘ
double dot(P a, P b) {
  return (a.real() * b.real() + a.imag() * b.imag());
}

// 外積 (cross product) : a×b = |a||b|sinΘ
double cross(P a, P b) {
  return (a.real() * b.imag() - a.imag() * b.real());
}

// 2直線の直交判定 : a⊥b <=> dot(a, b) = 0
int is_orthogonal(P a1, P a2, P b1, P b2) {
  return EQ( dot(a1-a2, b1-b2), 0.0 );
}

// 2直線の平行判定 : a//b <=> cross(a, b) = 0
int is_parallel(P a1, P a2, P b1, P b2) {
  return EQ( cross(a1-a2, b1-b2), 0.0 );
}

// 点cが直線a,b上にあるかないか
int is_point_on_line(P a, P b, P c) {
  return EQ( cross(b-a, c-a), 0.0 );
}

/*
// 点cが線分a,b上にあるかないか(1)
int is_point_on_line(P a, P b, P c) {
  return EQ( cross(b-a, c-a), 0.0 ) &&
         (dot(b-a, c-a) > -EPS) &&
         (dot(a-b, c-b) > -EPS);
}

// 点cが線分a,b上にあるかないか(2)
int is_point_on_line(P a, P b, P c) {
  // |a-c| + |c-b| <= |a-b| なら線分上
  return (abs(a-c) + abs(c-b) < abs(a-b) + EPS);
}
*/

// 点a,bを通る直線と点cとの距離
double distance_l_p(P a, P b, P c) {
  return abs(cross(b-a, c-a)) / abs(b-a);
}

// 点a,bを端点とする線分と点cとの距離
double distance_ls_p(P a, P b, P c) {
  if ( dot(b-a, c-a) < EPS ) return abs(c-a);
  if ( dot(a-b, c-b) < EPS ) return abs(c-b);
  return abs(cross(b-a, c-a)) / abs(b-a);
}

// a1,a2を端点とする線分とb1,b2を端点とする線分の交差判定
int is_intersected_ls(P a1, P a2, P b1, P b2) {
  return ( cross(a2-a1, b1-a1) * cross(a2-a1, b2-a1) < EPS ) &&
         ( cross(b2-b1, a1-b1) * cross(b2-b1, a2-b1) < EPS );
}

// a1,a2を端点とする線分とb1,b2を端点とする線分の交点計算
P intersection_ls(P a1, P a2, P b1, P b2) {
  P b = b2-b1;
  double d1 = abs(cross(b, a1-b1));
  double d2 = abs(cross(b, a2-b1));
  double t = d1 / (d1 + d2);

  return a1 + (a2-a1) * t;
}

// a1,a2を通る直線とb1,b2を通る直線の交差判定
int is_intersected_l(P a1, P a2, P b1, P b2) {
  return !EQ( cross(a1-a2, b1-b2), 0.0 );
}

// a1,a2を通る直線とb1,b2を通る直線の交点計算
P intersection_l(P a1, P a2, P b1, P b2) {
  P a = a2 - a1; P b = b2 - b1;
  return a1 + a * cross(b, b1-a1) / cross(b, a);
}


int n;
vector<P> point;
const double R = 2000.0;
const double pi = acos(-1.0);


double calcS( const vector<P> &pt ){
	double Stwice = 0.0;
	
	for( int i = 2; i < pt.size(); ++i ){
		Stwice += 
			pt[i].real() * (pt[i-1].imag() - pt[0].imag()) +
			pt[i-1].real() * (pt[0].imag() - pt[i].imag()) +
			pt[0].real() * (pt[i].imag() - pt[i-1].imag());
	}
	
	return abs(Stwice) / 2.0;
}


double calcSfromrad( double theta ){
	int a1 = -1, a2 = -1;

	P p_line( R * cos( theta ), R * sin( theta ) );
	P p_line_neg = -p_line;
	P p_zero( 0, 0 );

	vector<P> pt;

	for( int i = 0; i < point.size(); ++i ){
		if( is_intersected_ls( point[i], point[(i+1)%n], p_zero, p_line ) ){
			a1 = i;
			pt.push_back( intersection_ls( point[a1], point[(a1+1)%n], p_line, p_line_neg ) );
			break;
		}
	}
	if( a1 < 0 ){
		abort();	//交点がないよ！よ！
	}

	for( int i = (a1 + 1) % n; i != a1; i = ( i + 1 ) % n ){
		pt.push_back( point[i] );

		if( is_intersected_ls( point[i], point[(i+1)%n], p_zero, p_line_neg) ){
			a2 = i;
			pt.push_back( intersection_ls( point[a2], point[(a2+1)%n], p_line, p_line_neg ) );
			break;
		}
	}
	if( a2 < 0 ){
		abort();	//交点がないよ！よ！
	}
	return calcS( pt );
}


P solve(){
	double Shalf = calcS( point ) / 2.0;
	double theta1 = 0.0;
	double theta2 = pi;

	double S1 = calcSfromrad( theta1 );
	double S2 = calcSfromrad( theta2 );

	if( abs( S1 - Shalf ) < EPS ){
		return P( R, 0.0 );
	}
	if( abs( S2 - Shalf ) < EPS ){
		return P( 0.0, R );
	}

	double theta3;
	double S3;
	while(true){
		theta3 = ( theta1 + theta2 ) / 2.0;
		S3 = calcSfromrad( theta3 );
if(S1<-EPS||S2<-EPS||S3<-EPS)abort();
		if( abs( S3 - Shalf ) < EPS ){

			return P( R * cos( theta3 ), R * sin( theta3 ) );
		}
		if( (S1 < Shalf) == (S3 < Shalf) ){
			theta1 = theta3;
			S1 = S3;
		}
		else{
			theta2 = theta3;
			S2 = S3;
		}
	}
}


int main(){
	int x, y;
	for( ; scanf("%d", &n), n != 0; ){
		for( int i = 0; i < n; ++i ){
			scanf("%d%d", &x, &y );
			point.push_back( P( x, y ) );
		}
		
		P ans = solve();
		printf("%.15f %.15f\n", ans.real(), ans.imag() );
		
		point.clear();
	}

}