#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-9;
const double pi = 2 * acos((double)0);
struct tri {
  double x, y, r;
  bool operator<(tri z) const {
    if (fabs(r - z.r) > eps) return r > z.r;
    if (fabs(x - z.x) > eps) return x < z.x;
    return y < z.y;
  }
};
vector<tri> stadium;
struct Line {
  double a, b, c;
};
Line getParalelLine(tri a, tri b) {
  Line res;
  double x, y;
  x = (a.x + b.x) / 2.0;
  y = (a.y + b.y) / 2.0;
  res.a = b.x - a.x;
  res.b = b.y - a.y;
  res.c = -1 * res.a * x - res.b * y;
  return res;
}
pair<double, double> getIntersection(Line a, Line b) {
  Line ta, tb;
  ta.a = a.a * b.b;
  ta.b = a.b * b.b;
  ta.c = a.c * b.b;
  tb.a = b.a * a.b;
  tb.b = b.b * a.b;
  tb.c = b.c * a.b;
  double x, y;
  x = 1.0 * (tb.c - ta.c) / (ta.a - tb.a);
  if (fabs(a.b) > eps) {
    y = (-1 * a.c - a.a * x) / a.b;
  } else {
    y = (-1 * b.c - b.a * x) / b.b;
  }
  return make_pair(x, y);
}
pair<double, double> findLineIntersection(tri a, tri b, tri c) {
  Line paralel1, paralel2;
  paralel1 = getParalelLine(a, b);
  paralel2 = getParalelLine(b, c);
  return getIntersection(paralel1, paralel2);
}
tri findSpot(tri a, tri b) {
  tri res;
  res.x = 1.0 * (a.r * a.r * b.x - b.r * b.r * a.x) / (a.r * a.r - b.r * b.r);
  res.y = 1.0 * (a.r * a.r * b.y - b.r * b.r * a.y) / (a.r * a.r - b.r * b.r);
  double dx, dy;
  dx = 1.0 * (a.r * b.x + b.r * a.x) / (a.r + b.r) - res.x;
  dy = 1.0 * (a.r * b.y + b.r * a.y) / (a.r + b.r) - res.y;
  res.r = sqrt(dx * dx + dy * dy);
  return res;
}
void tryFindCircleIntersection(tri a, tri b, bool &gotIntersection,
                               pair<double, double> &res) {
  double dist = sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
  if (dist > a.r + b.r || fabs(a.r - b.r) > dist) {
    gotIntersection = false;
    return;
  }
  double x1 = (a.r * a.r - b.r * b.r + dist * dist) / (2 * dist);
  double y1 = sqrt(a.r * a.r - x1 * x1);
  double dy = b.y - a.y, dx = b.x - a.x, dr = sqrt(dx * dx + dy * dy);
  double x1x = x1 * dx / dr, x1y = x1 * dy / dr;
  pair<double, double> p1, p2;
  p1 = make_pair(a.x + x1x + y1 * dy / dr, a.y + x1y - y1 * dx / dr);
  p2 = make_pair(a.x + x1x - y1 * dy / dr, a.y + x1y + y1 * dx / dr);
  gotIntersection = true;
  double j1, j2;
  j1 = sqrt((stadium[0].x - p1.first) * (stadium[0].x - p1.first) +
            (stadium[0].y - p1.second) * (stadium[0].y - p1.second));
  j2 = sqrt((stadium[0].x - p2.first) * (stadium[0].x - p2.first) +
            (stadium[0].y - p2.second) * (stadium[0].y - p2.second));
  if (j1 < j2) {
    res = p1;
  } else {
    res = p2;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  tri ttri;
  tri obs[2];
  pair<double, double> ans;
  for (long long i = (0); i < (3); i++) {
    cin >> ttri.x >> ttri.y >> ttri.r;
    stadium.push_back(ttri);
  }
  sort((stadium).begin(), (stadium).end());
  bool gotIntersection;
  if (fabs(stadium[0].r - stadium[2].r) < eps) {
    ans = findLineIntersection(stadium[0], stadium[1], stadium[2]);
    printf("%.5lf %.5lf\n", ans.first, ans.second);
  } else {
    if (fabs(stadium[0].r - stadium[1].r) < eps) {
      swap(stadium[0], stadium[2]);
    }
    obs[0] = findSpot(stadium[0], stadium[1]);
    obs[1] = findSpot(stadium[0], stadium[2]);
    tryFindCircleIntersection(obs[0], obs[1], gotIntersection, ans);
    if (gotIntersection) {
      printf("%.5lf %.5lf\n", ans.first, ans.second);
    }
  }
  return 0;
}
