// Задача "Купол"
// 4-ая Интернет-олимпиада сезона 2007-2008, базовый уровень
// Автор задачи: Федор Царев, tsarev@rain.ifmo.ru
// Автор решения: Ахи Антон, akhi@rain.ifmo.ru
import java.io.*;
import java.util.*;
import java.math.*;

public class dome_aa implements Runnable {

	public static void main(String[] args) {
		new Thread(new dome_aa()).start();
	}

	public void run() {
		try {
			solve();
		} catch (IOException e) {
		}
	}

	private void MyAssert(boolean u, String message) {
		if (!u) {
			throw new Error("Assertion failed!!! " + message);
		}
	}

	BufferedReader br;

	StringTokenizer st;

	PrintWriter out;

	boolean eof = false;

	String nextToken() {
		while (st == null || !st.hasMoreTokens()) {
			try {
				st = new StringTokenizer(br.readLine());
			} catch (IOException e) {
				eof = true;
				return "0";
			}
		}
		return st.nextToken();
	}

	String nextToken(String delim) {
		while (st == null || !st.hasMoreTokens()) {
			try {
				st = new StringTokenizer(br.readLine());
			} catch (IOException e) {
				eof = true;
				return "0";
			}
		}
		return st.nextToken(delim);
	}

	int nextInt() {
		return Integer.parseInt(nextToken());
	}

	int nextInt(String delim) {
		return Integer.parseInt(nextToken(delim));
	}

	String FILENAME = "dome";

	class Line {
		public Line(int x1, int y1, int x2, int y2) {
			a = y1 - y2;
			b = x2 - x1;
			c = -a * x1 - b * y1;
		}

		int a, b, c;

		Point move(int x, int y, int r) {
			Point p = new Point();
			p.x = x + (1.0 * b * r) / Math.sqrt(a * a + b * b);
			p.y = y - (1.0 * a * r) / Math.sqrt(a * a + b * b);
			return p;
		}

	}

	class Point {
		double x, y;

		double dist(Point o) {
			return Math.sqrt((x - o.x) * (x - o.x) + (y - o.y) * (y - o.y));
		}
	}

	void solve() throws IOException {
		br = new BufferedReader(new FileReader(FILENAME + ".in"));
		out = new PrintWriter(FILENAME + ".out");
		int x1 = nextInt();
		MyAssert(Math.abs(x1) <= 10000, "x1 not in bounds!!!");
		int y1 = nextInt();
		MyAssert(Math.abs(y1) <= 10000, "y1 not in bounds!!!");
		int r1 = nextInt();
		MyAssert(Math.abs(r1) <= 10000, "r1 not in bounds!!!");
		int x2 = nextInt();
		MyAssert(Math.abs(x2) <= 10000, "x2 not in bounds!!!");
		int y2 = nextInt();
		MyAssert(Math.abs(y2) <= 10000, "y2 not in bounds!!!");
		int r2 = nextInt();
		MyAssert(Math.abs(r2) <= 10000, "r2 not in bounds!!!");
		if (x1 == x2 && y1 == y2) {
			out.println(Math.max(r1, r2) + " " + x1 + " " + y1);
			out.close();
			return;
		}
		Line l = new Line(x1, y1, x2, y2);
		Point[] p = new Point[] { l.move(x1, y1, r1), l.move(x1, y1, -r1),
				l.move(x2, y2, r2), l.move(x2, y2, -r2) };
		double max = 0;
		int ii = 0, jj = 0;
		for (int i = 0; i < p.length; i++) {
			for (int j = 0; j < p.length; j++) {
				if (max <= p[i].dist(p[j])) {
					max = p[i].dist(p[j]);
					ii = i;
					jj = j;
				}
			}
		}
		out.println((max / 2) + " " + ((p[ii].x + p[jj].x) / 2) + " "
				+ ((p[ii].y + p[jj].y) / 2));
		out.close();
	}
}
