#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-7;
typedef struct Point {
  double x, y;
} Point;
typedef struct Line {
  Point s;
  Point e;
} Line;
typedef struct Circle {
  Point p;
  double r;
} Circle;
double dist(Point &p1, Point &p2) {
  return sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));
}
double cross(Point &v1, Point &v2) { return v1.x * v2.y - v2.x * v1.y; }
void setVec(Point &v, Point &p1, Point &p2) {
  v.x = p2.x - p1.x;
  v.y = p2.y - p1.y;
  return;
}
void setUnit(Point &v) {
  double d = sqrt(v.x * v.x + v.y * v.y);
  v.x *= 1.0 / d;
  v.y *= 1.0 / d;
  return;
}
void setNormal(Point &v, Point &nv) {
  nv.x = v.y;
  nv.y = -v.x;
  return;
}
bool intersect(Line l1, Line l2, Point &p) {
  Point l1v, l2v;
  setVec(l1v, l1.s, l1.e);
  setVec(l2v, l2.s, l2.e);
  double x = cross(l1v, l2v);
  if (fabs(x) < EPS) return false;
  Point v;
  setVec(v, l1.s, l2.s);
  double r = cross(v, l2v) / x;
  p.x = l1.s.x + r * l1v.x;
  p.y = l1.s.y + r * l1v.y;
  return true;
}
int intersectCircleLine(Circle c, Line l, Point &t1, Point &t2) {
  Point v, nv;
  setVec(v, l.s, l.e);
  setUnit(v);
  setNormal(v, nv);
  double a0 = l.e.y - l.s.y;
  double b0 = -(l.e.x - l.s.x);
  double c0 = -(a0 * l.s.x + b0 * l.s.y);
  double di = -(a0 * c.p.x + b0 * c.p.y + c0) / (a0 * nv.x + b0 * nv.y);
  double nx = c.p.x + nv.x * di;
  double ny = c.p.y + nv.y * di;
  t1.x = nx + v.x * sqrt(c.r * c.r - di * di);
  t1.y = ny + v.y * sqrt(c.r * c.r - di * di);
  t2.x = nx - v.x * sqrt(c.r * c.r - di * di);
  t2.y = ny - v.y * sqrt(c.r * c.r - di * di);
  if (fabs(di) > c.r) return 0;
  if (c.r - EPS < fabs(di) && fabs(di) < c.r + EPS) return 1;
  return 2;
}
int intersectCircleCircle(Circle c1, Circle c2, Point &t1, Point &t2) {
  double d = sqrt((c1.p.x - c2.p.x) * (c1.p.x - c2.p.x) +
                  (c1.p.y - c2.p.y) * (c1.p.y - c2.p.y));
  double r_max = max(c1.r, c2.r);
  double r_min = min(c1.r, c2.r);
  if (d > r_max + r_min) return 0;
  if (r_max > d + r_min) return 0;
  if (r_max + r_min - EPS < d && d < r_max + r_min + EPS ||
      r_max - EPS < d + r_min && d + r_min < r_max + EPS) {
    Point v;
    setVec(v, c1.p, c2.p);
    t1.x = c1.p.x + c1.r / (c1.r + c2.r) * v.x;
    t1.y = c1.p.y + c1.r / (c1.r + c2.r) * v.y;
    return 1;
  }
  Point v0, nv;
  setVec(v0, c1.p, c2.p);
  setUnit(v0);
  setNormal(v0, nv);
  double d1 = (c1.r * c1.r - c2.r * c2.r) / (2.0 * d) + d / 2.0;
  double d2 = sqrt(c1.r * c1.r - d1 * d1);
  t1.x = c1.p.x + v0.x * d1 + nv.x * d2;
  t1.y = c1.p.y + v0.y * d1 + nv.y * d2;
  t2.x = c1.p.x + v0.x * d1 - nv.x * d2;
  t2.y = c1.p.y + v0.y * d1 - nv.y * d2;
  return 2;
}
int main(int argc, char *argv[]) {
  cin.sync_with_stdio(false);
  Circle c[3];
  for (int i = 0; i < 3; ++i) cin >> c[i].p.x >> c[i].p.y >> c[i].r;
  if (c[0].r == c[2].r)
    swap(c[1], c[2]);
  else if (c[1].r == c[2].r)
    swap(c[0], c[2]);
  Line l[2];
  for (int i = 0; i < 2; ++i) {
    l[i].s.x = (c[i].p.x + c[i + 1].p.x) / 2.0;
    l[i].s.y = (c[i].p.y + c[i + 1].p.y) / 2.0;
    l[i].e.x = l[i].s.x + (c[i].p.y - c[i + 1].p.y);
    l[i].e.y = l[i].s.y - (c[i].p.x - c[i + 1].p.x);
  }
  Circle cc[2];
  for (int i = 0; i < 2; ++i) {
    if (c[i].r == c[i + 1].r) continue;
    double m = c[i].r;
    double n = c[i + 1].r;
    double lr = -n / (m - n);
    double rr = n / (m + n);
    double xl = lr * c[i].p.x + (1.0 - lr) * c[i + 1].p.x;
    double yl = lr * c[i].p.y + (1.0 - lr) * c[i + 1].p.y;
    double xr = rr * c[i].p.x + (1.0 - rr) * c[i + 1].p.x;
    double yr = rr * c[i].p.y + (1.0 - rr) * c[i + 1].p.y;
    cc[i].p.x = (xl + xr) / 2.0;
    cc[i].p.y = (yl + yr) / 2.0;
    cc[i].r = sqrt((xr - xl) * (xr - xl) + (yr - yl) * (yr - yl)) / 2.0;
  }
  int n;
  Point t1, t2;
  if (c[0].r == c[1].r) {
    if (c[1].r == c[2].r) {
      if (intersect(l[0], l[1], t1)) n = 1;
    } else {
      n = intersectCircleLine(cc[1], l[0], t1, t2);
      if (n == 2) {
        double s1, s2;
        s1 = s2 = 0.0;
        for (int i = 0; i < 3; ++i) {
          s1 += (t1.x - c[i].p.x) * (t1.x - c[i].p.x) +
                (t1.y - c[i].p.y) * (t1.y - c[i].p.y);
          s2 += (t2.x - c[i].p.x) * (t2.x - c[i].p.x) +
                (t2.y - c[i].p.y) * (t2.y - c[i].p.y);
        }
        if (s1 > s2) swap(t1, t2);
      }
    }
  } else {
    n = intersectCircleCircle(cc[0], cc[1], t1, t2);
    if (n == 2) {
      double s1, s2;
      s1 = s2 = 0.0;
      for (int i = 0; i < 3; ++i) {
        s1 += (t1.x - c[i].p.x) * (t1.x - c[i].p.x) +
              (t1.y - c[i].p.y) * (t1.y - c[i].p.y);
        s2 += (t2.x - c[i].p.x) * (t2.x - c[i].p.x) +
              (t2.y - c[i].p.y) * (t2.y - c[i].p.y);
      }
      if (s1 > s2) swap(t1, t2);
    }
  }
  if (n >= 1) printf("%.5lf %.5lf\n", t1.x, t1.y);
  return 0;
}
