#include<iostream>
#include<utility>
#include<cmath>
#include<iomanip>
using namespace std;

struct Point{
    double x;
    double y;
    Point(double x, double y) : 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);
    }
};
typedef Point Vector;
double dot(Vector v1, Vector v2){
    return v1.x * v2.x + v1.y * v2.y;
}

struct Circle{
    Point  c;
    double r;
    Circle(Point c, double r) : c(c), r(r) {}
};

pair<Point, Point> cross_point(Circle c1, Circle c2){
    double d = sqrt(dot(c2.c - c1.c, c2.c - c1.c));
    double cos1 = (c1.r * c1.r + d * d - c2.r * c2.r) / (2 * c1.r * d);
    double theta1 = acos(cos1);
    double theta2 = atan2(c2.c.y - c1.c.y, c2.c.x - c1.c.x);
    double alpha = theta2 + theta1;
    double beta  = theta2 - theta1;
    Point p1 = c1.c + Point(c1.r * cos(alpha), c1.r * sin(alpha));
    Point p2 = c1.c + Point(c1.r * cos(beta ), c1.r * sin(beta ));
    return make_pair(p1, p2);
}
void disp(pair<Point, Point> p){
    Point p1 = p.first;
    Point p2 = p.second;
    if (p1.x > p2.x || p1.x == p2.x && p1.y > p2.y) swap(p1, p2);
    cout << fixed << setprecision(10);
    cout << p1.x << " " << p1.y << " ";
    cout << p2.x << " " << p2.y << endl;
}

int main(){
    int c1x, c1y, c1r;
    cin >> c1x >> c1y >> c1r;
    Circle c1(Point(c1x, c1y), c1r);
    int c2x, c2y, c2r;
    cin >> c2x >> c2y >> c2r;
    Circle c2(Point(c2x, c2y), c2r);
    pair<Point, Point> cp = cross_point(c1, c2);
    disp(cp);
    return 0;
}

