Problem: For given two circles $c1$ and $c2$, print the coordinates of the cross points of them.

Constraints

* The given circle have at least one cross point and have different center coordinates.
* $-10,000 \leq c1x, c1y, c2x, c2y \leq 10,000$
* $1 \leq c1r, c2r \leq 10,000$

Input

The input is given in the following format.

$c1x\; c1y\; c1r$
$c2x\; c2y\; c2r$


$c1x$, $c1y$ and $c1r$ represent the coordinate and radius of the first circle. $c2x$, $c2y$ and $c2r$ represent the coordinate and radius of the second circle. All input values are given in integers.

Output

Print the coordinates ($x1$, $y1$) and ($x2$, $y2$) of the cross points $p1$ and $p2$ respectively in the following rules.

* If there is one cross point, print two coordinates with the same values.
* Print the coordinate with smaller $x$ first. In case of a tie, print the coordinate with smaller $y$ first.



The output values should be in a decimal fraction with an error less than 0.000001.

Examples

Input

0 0 2
2 0 2


Output

1.00000000 -1.73205080 1.00000000 1.73205080


Input

0 0 2
0 3 1


Output

0.00000000 2.00000000 0.00000000 2.00000000

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define P pair<ll,ll>
#define FOR(I,A,B) for(ll I = ll(A); I < ll(B); ++I)
#define FORR(I,A,B) for(ll I = ll((B)-1); I >= ll(A); --I)
#define TO(x,t,f) ((x)?(t):(f))
#define SORT(x) (sort(x.begin(),x.end())) // 0 2 2 3 4 5 8 9
#define POSL(x,v) (lower_bound(x.begin(),x.end(),v)-x.begin()) //xi>=v  x is sorted
#define POSU(x,v) (upper_bound(x.begin(),x.end(),v)-x.begin()) //xi>v  x is sorted
#define NUM(x,v) (POSU(x,v)-POSL(x,v))  //x is sorted
#define REV(x) (reverse(x.begin(),x.end())) //reverse
ll gcd(ll a,ll b){if(a%b==0)return b;return gcd(b,a%b);}
ll lcm(ll a,ll b){ll c=gcd(a,b);return ((a/c)*(b/c)*c);}
#define NEXTP(x) next_permutation(x.begin(),x.end())
const ll INF=ll(1e16)+ll(7);
const ll MOD=1000000007LL;
#define out(a) cout<<fixed<<setprecision((a))
//tie(a,b,c) = make_tuple(10,9,87);
#define pop(a) __builtin_popcount((a))
ll keta(ll a){ll r=0;while(a){a/=10;r++;}return r;} 




#define EPS (1e-10)
#define equals(a,b) (fabs((a)-(b))<EPS)

class Point{
public:
	double x,y;
	Point(double x=0,double y=0):x(x),y(y){}
	Point operator + (Point p) {return Point(x + p.x, y + p.y);}
	Point operator - (Point p) {return Point(x - p.x, y - p.y);}
	Point operator * (double a) {return Point(x * a, y * a);}
	Point operator / (double a) {return Point(x / a, y / a);}
	double abs(){return sqrt(norm());}
	double norm(){return x*x+y*y;}
	bool operator < (const Point &p) const{
		return x != p.x ? x<p.x : y<p.y;
	}
	bool operator == (const Point &p) const {
		return fabs(x-p.x)<EPS && fabs(y-p.y)<EPS;
	}
};
class Circle{
public:
	Point c;
	double r;
	Circle(Point c = Point(),double r = 0.0):c(c),r(r){}
};

typedef Point Vector;
double arg(Vector p){return atan2(p.y,p.x);}
Vector polar(double a,double r){ return Point(cos(r) * a, sin(r)*a); }

pair<Point,Point> getCrossPoints(Circle c1,Circle c2){
	//assert(intersect(c1,c2));
	double d = (c1.c - c2.c).abs();
	double a = acos((c1.r*c1.r + d*d - c2.r*c2.r ) / (2.0*c1.r*d) );
	double t = arg(c2.c - c1.c);
	return make_pair(c1.c+polar(c1.r,t+a), c1.c + polar(c1.r ,t-a));
}

int main(){
	Circle c1,c2;
	cin >> c1.c.x >> c1.c.y >> c1.r;
	cin >> c2.c.x >> c2.c.y >> c2.r;

	auto ans = getCrossPoints(c1,c2);
	if(ans.first.x < ans.second.x){
		out(7) << ans.first.x << " " << ans.first.y << " " << ans.second.x << " " << ans.second.y << endl;
	}else if(ans.first.x > ans.second.x){
		out(7) << ans.second.x << " " << ans.second.y << " " << ans.first.x << " " << ans.first.y << endl;
	}else if(ans.first.y < ans.second.y){
		out(7) << ans.first.x << " " << ans.first.y << " " << ans.second.x << " " << ans.second.y << endl;
	}else{
		out(7) << ans.second.x << " " << ans.second.y << " " << ans.first.x << " " << ans.first.y << endl;
	}

}