#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
  point() {}
  point(double _x, double _y) : x(_x), y(_y) {}
  double val;
};
double dis(point a, point b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
point a[25];
point edge[5];
double get_val(point aa) {
  double s[5], sum = 0;
  for (int i = 0; i < 3; i++) {
    s[i] = (dis(aa, edge[i]) / edge[i].val -
            dis(aa, edge[(i + 1) % 3]) / edge[(i + 1) % 3].val);
    s[i] = s[i] * s[i];
    sum += s[i];
  }
  return sum;
}
point rand_point(point aa, point bb) {
  double x = aa.x + (bb.x - aa.x) * ((double)(rand() % 10001) / 10000.0);
  double y = aa.y + (bb.y - aa.y) * ((double)(rand() % 10001) / 10000.0);
  point tmp = point(x, y);
  tmp.val = get_val(tmp);
  return tmp;
}
int main() {
  srand(time(0));
  point ld, ru;
  ld = point(0x7fffffff, 0x7fffffff);
  ru = point(-0x7fffffff, -0x7fffffff);
  for (int i = 0; i < 3; i++) {
    scanf("%lf%lf%lf", &edge[i].x, &edge[i].y, &edge[i].val);
    ld.x = min(ld.x, edge[i].x);
    ld.y = min(ld.y, edge[i].y);
    ru.x = max(ru.x, edge[i].x);
    ru.y = max(ru.y, edge[i].y);
  }
  double dist = max(ru.x - ld.x, ru.y - ld.y);
  for (int i = 0; i < 20; i++) a[i] = rand_point(ld, ru);
  while (dist > 0.0001) {
    for (int i = 0; i < 20; i++) {
      for (int j = 0; j < 20; j++) {
        point tmp;
        point L, R;
        L = point(max(ld.x, a[i].x - dist), max(ld.y, a[i].y - dist));
        R = point(min(ru.x, a[i].x + dist), min(ru.y, a[i].y + dist));
        tmp = rand_point(L, R);
        if (tmp.val < a[i].val) a[i] = tmp;
      }
    }
    dist *= 0.9;
  }
  point ans;
  double ss = 0;
  ans.val = 0x7fffffff;
  for (int i = 0; i < 20; i++) {
    double rec = edge[0].val / (dis(edge[0], a[i]));
    if (a[i].val <= ans.val && rec >= ss || (a[i].val < 1e-6 && rec >= ss)) {
      ans = a[i];
      ss = rec;
    }
  }
  if (ans.val < 1e-6) printf("%.5lf %.5lf\n", ans.x, ans.y);
}
