#include <bits/stdc++.h>
using namespace std;
typedef struct node {
  double x;
  double y;
  double r;
} NODE;
NODE sta[3], ans[3];
double center_x, center_y;
bool comp(const NODE &x, const NODE &y) { return (x.r < y.r); }
bool cmp(const NODE &x, const NODE &y) { return (x.y < y.y); }
void output() {
  int alpha, beta;
  alpha = sqrt((sta[0].x - ans[0].x) * (sta[0].x - ans[0].x) +
               (sta[0].y - ans[0].y) * (sta[0].y - ans[0].y));
  beta = sqrt((sta[0].x - ans[1].x) * (sta[0].x - ans[1].x) +
              (sta[0].y - ans[1].y) * (sta[0].y - ans[1].y));
  if (alpha < beta)
    printf("%.5lf %.5lf\n", ans[0].x, ans[0].y);
  else
    printf("%.5lf %.5lf\n", ans[1].x, ans[1].y);
}
void deal_all_same() {
  double point[3][2];
  double temp[3][2];
  double center_x, center_y;
  for (int i = 0; i < 3; i++) {
    point[i][0] = sta[i].x;
    point[i][1] = sta[i].y;
  }
  temp[0][0] = (point[1][0] * point[1][0] - point[2][0] * point[2][0] +
                point[1][1] * point[1][1] - point[2][1] * point[2][1]) /
               2;
  temp[0][1] = point[1][1] - point[2][1];
  temp[1][0] = (point[2][0] * point[2][0] - point[0][0] * point[0][0] +
                point[2][1] * point[2][1] - point[0][1] * point[0][1]) /
               2;
  temp[1][1] = point[2][1] - point[0][1];
  temp[2][0] = point[1][0] - point[2][0];
  temp[2][1] = point[2][0] - point[0][0];
  center_x = temp[1][1] * temp[0][0] - temp[0][1] * temp[1][0];
  center_y = temp[2][0] * temp[1][0] - temp[0][0] * temp[2][1];
  center_x /= temp[2][0] * temp[1][1] - temp[0][1] * temp[2][1];
  center_y /= temp[2][0] * temp[1][1] - temp[0][1] * temp[2][1];
  printf("%.5lf %.5lf\n", center_x, center_y);
}
void deal_same(int i, int j, int k) {
  double x0, y0, k0, x1, y1;
  k0 = sta[i].r / sta[k].r;
  x0 = (sta[i].x + sta[k].x * k0) / (1 + k0);
  y0 = (sta[i].y + sta[k].y * k0) / (1 + k0);
  x1 = (sta[i].x - sta[k].x * k0) / (1 - k0);
  y1 = (sta[i].y - sta[k].y * k0) / (1 - k0);
  if (sta[i].y != sta[j].y) k0 = -(sta[i].x - sta[j].x) / (sta[i].y - sta[j].y);
  NODE round;
  round.x = (x0 + x1) / 2;
  round.y = (y0 + y1) / 2;
  round.r = sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)) / 2;
  x0 = (sta[i].x + sta[j].x) / 2;
  y0 = (sta[i].y + sta[j].y) / 2;
  double d;
  if (sta[i].y != sta[j].y)
    d = abs((k0 * (round.x - x0) + y0 - round.y) / sqrt(1 + k0 * k0));
  else
    d = abs(round.x - x0);
  double temp, lenth, alpha;
  if (d < round.r) {
    lenth = sqrt(round.r * round.r - d * d);
    temp = k0 * k0 + 1;
    if (sta[i].y != sta[j].y) {
      x1 = (1 * round.x + k0 * round.y - k0 * (y0 - k0 * x0)) / temp;
      y1 = (k0 * k0 * round.y + k0 * round.x + 1 * (y0 - k0 * x0)) / temp;
      if (k0 >= 0)
        alpha = atan(k0);
      else
        alpha = atan(k0) + 3.14159265358;
    } else {
      x1 = x0;
      y1 = round.y;
      alpha = 3.14159265358 / 2;
    }
    ans[0].x = x1 + lenth * cos(alpha);
    ans[0].y = y1 + lenth * sin(alpha);
    ans[1].x = x1 - lenth * cos(alpha);
    ans[1].y = y1 - lenth * sin(alpha);
    output();
  }
}
void deal_different(int i, int j, int k) {
  NODE round1, round2;
  double x0, x1, y0, y1, k0, d;
  double alpha, beta, gama;
  k0 = sta[i].r / sta[k].r;
  x0 = (sta[i].x + sta[k].x * k0) / (1 + k0);
  y0 = (sta[i].y + sta[k].y * k0) / (1 + k0);
  x1 = (sta[i].x - sta[k].x * k0) / (1 - k0);
  y1 = (sta[i].y - sta[k].y * k0) / (1 - k0);
  round1.x = (x0 + x1) / 2;
  round1.y = (y0 + y1) / 2;
  round1.r = sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)) / 2;
  k0 = sta[j].r / sta[k].r;
  x0 = (sta[j].x + sta[k].x * k0) / (1 + k0);
  y0 = (sta[j].y + sta[k].y * k0) / (1 + k0);
  x1 = (sta[j].x - sta[k].x * k0) / (1 - k0);
  y1 = (sta[j].y - sta[k].y * k0) / (1 - k0);
  round2.x = (x0 + x1) / 2;
  round2.y = (y0 + y1) / 2;
  round2.r = sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)) / 2;
  d = sqrt((round1.x - round2.x) * (round1.x - round2.x) +
           (round1.y - round2.y) * (round1.y - round2.y));
  if (d <= round1.r + round2.r) {
    if (round2.x == round1.x)
      alpha = 3.14159265358 / 2;
    else {
      k0 = (round2.y - round1.y) / (round2.x - round1.x);
      if (k0 >= 0)
        alpha = atan(k0);
      else
        alpha = atan(k0) + 3.14159265358;
    }
    k0 = (round1.r * round1.r + d * d - round2.r * round2.r) /
         (2 * round1.r * d);
    beta = acos(k0);
    if (round1.y > round2.y) {
      beta = 3.14159265358 - beta;
    }
    ans[0].x = round1.x + round1.r * cos(alpha + beta);
    ans[0].y = round1.y + round1.r * sin(alpha + beta);
    ans[1].x = round1.x + round1.r * cos(alpha - beta);
    ans[1].y = round1.y + round1.r * sin(alpha - beta);
    output();
  }
}
int main(int argc, char const *argv[]) {
  for (int i = 0; i < 3; i++) {
    cin >> sta[i].x >> sta[i].y >> sta[i].r;
  }
  sort(sta, sta + 3, comp);
  if (sta[0].r == sta[2].r) {
    deal_all_same();
  } else if (sta[0].r == sta[1].r) {
    deal_same(0, 1, 2);
  } else if (sta[1].r == sta[2].r) {
    deal_same(1, 2, 0);
  } else {
    sort(sta, sta + 3, cmp);
    if (sta[0].y == sta[1].y)
      deal_different(0, 1, 2);
    else
      deal_different(1, 2, 0);
  }
  return 0;
}
