#include <bits/stdc++.h>
using namespace std;
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <typename T>
istream &operator>>(istream &is, vector<T> &vec) {
  for (auto &v : vec) is >> v;
  return is;
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &vec) {
  for (int i = 0; i < vec.size(); i++) {
    os << vec[i];
    if (i + 1 != vec.size()) os << " ";
  }
  return os;
}
template <typename T>
ostream &operator<<(ostream &os, const set<T> &st) {
  for (auto itr = st.begin(); itr != st.end(); ++itr) {
    os << *itr;
    auto titr = itr;
    if (++titr != st.end()) os << " ";
  }
  return os;
}
template <typename T>
ostream &operator<<(ostream &os, const unordered_set<T> &st) {
  for (auto itr = st.begin(); itr != st.end(); ++itr) {
    os << *itr;
    auto titr = itr;
    if (++titr != st.end()) os << " ";
  }
  return os;
}
template <typename T>
ostream &operator<<(ostream &os, const multiset<T> &st) {
  for (auto itr = st.begin(); itr != st.end(); ++itr) {
    os << *itr;
    auto titr = itr;
    if (++titr != st.end()) os << " ";
  }
  return os;
}
template <typename T>
ostream &operator<<(ostream &os, const unordered_multiset<T> &st) {
  for (auto itr = st.begin(); itr != st.end(); ++itr) {
    os << *itr;
    auto titr = itr;
    if (++titr != st.end()) os << " ";
  }
  return os;
}
template <typename T1, typename T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
  os << p.first << " " << p.second;
  return os;
}
template <typename T1, typename T2>
ostream &operator<<(ostream &os, const map<T1, T2> &mp) {
  for (auto itr = mp.begin(); itr != mp.end(); ++itr) {
    os << itr->first << ":" << itr->second;
    auto titr = itr;
    if (++titr != mp.end()) os << " ";
  }
  return os;
}
template <typename T1, typename T2>
ostream &operator<<(ostream &os, const unordered_map<T1, T2> &mp) {
  for (auto itr = mp.begin(); itr != mp.end(); ++itr) {
    os << itr->first << ":" << itr->second;
    auto titr = itr;
    if (++titr != mp.end()) os << " ";
  }
  return os;
}
using ll = long long int;
using P = pair<int, int>;
const int inf = 1e9;
const ll linf = 1LL << 50;
const double EPS = 1e-10;
const int mod = 1000000007;
const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, -1, 0, 1};
struct fast_io {
  fast_io() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout << fixed << setprecision(5);
  }
} fast_io_;
int main(int argc, char const *argv[]) {
  vector<long double> x(3), y(3), r(3);
  for (int i = (0); i < (3); ++i) cin >> x[i] >> y[i] >> r[i];
  if (r[0] == r[1] && r[1] == r[2]) {
    long double a1 = x[0] - x[1], a2 = x[1] - x[2];
    long double b1 = y[0] - y[1], b2 = y[1] - y[2];
    long double c1 = -(x[0] + x[1]) / 2. * (x[0] - x[1]);
    c1 -= (y[0] + y[1]) / 2. * (y[0] - y[1]);
    long double c2 = -(x[1] + x[2]) / 2. * (x[1] - x[2]);
    c2 -= (y[1] + y[2]) / 2. * (y[1] - y[2]);
    long double rem = a1 * b2 - a2 * b1;
    if (abs(rem) < EPS) {
      return 0;
    }
    long double X = (-b2 * c1 + b1 * c2) / rem;
    long double Y = (a2 * c1 - a1 * c2) / rem;
    cout << X << " " << Y << endl;
  } else {
    if (r[0] == r[1] || r[1] == r[2]) {
      swap(r[0], r[1]);
      swap(x[0], x[1]);
      swap(y[0], y[1]);
    }
    if (r[0] == r[1] || r[1] == r[2]) {
      swap(r[1], r[2]);
      swap(x[1], x[2]);
      swap(y[1], y[2]);
    }
    long double a1 = (r[0] * r[0] - r[1] * r[1]);
    long double b1 = -2. * (r[0] * r[0] * x[1] - r[1] * r[1] * x[0]);
    long double c1 = -2. * (r[0] * r[0] * y[1] - r[1] * r[1] * y[0]);
    long double d1 = -r[0] * r[0] * x[1] * x[1] - r[0] * r[0] * y[1] * y[1];
    d1 += r[1] * r[1] * x[0] * x[0] + r[1] * r[1] * y[0] * y[0];
    long double a2 = (r[1] * r[1] - r[2] * r[2]);
    long double b2 = -2. * (r[1] * r[1] * x[2] - r[2] * r[2] * x[1]);
    long double c2 = -2. * (r[1] * r[1] * y[2] - r[2] * r[2] * y[1]);
    long double d2 = -r[1] * r[1] * x[2] * x[2] - r[1] * r[1] * y[2] * y[2];
    d2 += r[2] * r[2] * x[1] * x[1] + r[2] * r[2] * y[1] * y[1];
    d1 += (b1 / (2. * a1)) * (b1 / (2.)) + (c1 / (2. * a1)) * (c1 / (2.));
    d2 += (b2 / (2. * a2)) * (b2 / (2.)) + (c2 / (2. * a2)) * (c2 / (2.));
    if (d2 / a2 < 0. || d1 / a1 < 0.) return 0;
    long double x0 = -b1 / (2. * a1), y0 = -c1 / (2. * a1), r0 = sqrt(d1 / a1);
    long double x1 = -b2 / (2. * a2), y1 = -c2 / (2. * a2), r1 = sqrt(d2 / a2);
    x1 -= x0, y1 -= y0;
    long double A = (x1 * x1 + y1 * y1 + r0 * r0 - r1 * r1) / 2.;
    if (x1 * x1 * r0 * r0 + y1 * y1 * r0 * r0 - A * A < 0.) return 0;
    long double X1 =
        (A * x1 - y1 * sqrt(x1 * x1 * r0 * r0 + y1 * y1 * r0 * r0 - A * A)) /
        (x1 * x1 + y1 * y1);
    long double Y1 =
        (A * y1 + x1 * sqrt(x1 * x1 * r0 * r0 + y1 * y1 * r0 * r0 - A * A)) /
        (x1 * x1 + y1 * y1);
    long double X2 =
        (A * x1 + y1 * sqrt(x1 * x1 * r0 * r0 + y1 * y1 * r0 * r0 - A * A)) /
        (x1 * x1 + y1 * y1);
    long double Y2 =
        (A * y1 - x1 * sqrt(x1 * x1 * r0 * r0 + y1 * y1 * r0 * r0 - A * A)) /
        (x1 * x1 + y1 * y1);
    X1 += x0, X2 += x0, Y1 += y0, Y2 += y0;
    long double t1 =
        (r[0] * r[0]) / ((X1 - x[0]) * (X1 - x[0]) + (Y1 - y[0]) * (Y1 - y[0]));
    long double t2 =
        (r[0] * r[0]) / ((X2 - x[0]) * (X2 - x[0]) + (Y2 - y[0]) * (Y2 - y[0]));
    if (t1 > t2)
      cout << X1 << " " << Y1 << endl;
    else
      cout << X2 << " " << Y2 << endl;
  }
  return 0;
}
