#include <bits/stdc++.h>
using namespace std;
long double cross(complex<long double> a, complex<long double> b) {
  return imag(b * conj(a));
}
long double dot(complex<long double> a, complex<long double> b) {
  return real(b * conj(a));
}
long double Arg(complex<long double> a, complex<long double> b) {
  return arg(b * conj(a));
}
long double eps = 1e-8;
long double PI = acos(-1.0);
bool eq(long double a, long double b) { return (-eps < a - b && a - b < eps); }
long double Sqrt(long double x) { return sqrt(abs(x)); }
struct S {
  complex<long double> p, q;
  S(complex<long double> p, complex<long double> q) : p(p), q(q) {}
};
struct C {
  complex<long double> p;
  long double r;
  C(complex<long double> p, long double r) : p(p), r(r) {}
  C(long double x, long double y, long double r)
      : p(complex<long double>(x, y)), r(r) {}
};
vector<complex<long double> > intersect(C a, C b) {
  vector<complex<long double> > res;
  complex<long double> base = b.p - a.p;
  long double dist = abs(base);
  if (dist > a.r + b.r + eps) return res;
  if (dist < abs(a.r - b.r) - eps) return res;
  long double ca = (a.r * a.r + dist * dist - b.r * b.r) / (2.0 * a.r * dist);
  long double sa = Sqrt(1.0 - ca * ca);
  complex<long double> fi =
      a.p + base / dist * a.r * complex<long double>(ca, sa);
  complex<long double> se =
      a.p + base / dist * a.r * complex<long double>(ca, -sa);
  res.push_back(fi);
  res.push_back(se);
  return res;
}
long double intersectArea(C a, C b) {
  long double dist = abs(a.p - b.p);
  if (dist > a.r + b.r + eps) return 0;
  if (dist < abs(a.r - b.r) + eps) return min(a.r * a.r, b.r * b.r) * PI;
  vector<complex<long double> > v = intersect(a, b);
  if (v.size() < 2) return 0;
  long double sa = 0, sb = 0;
  sa = a.r * a.r * PI * abs(Arg(v[0] - a.p, v[1] - a.p)) / (2.0 * PI);
  sa -= abs(cross(v[0] - a.p, v[1] - a.p)) / 2.0;
  sb = b.r * b.r * PI * abs(Arg(v[0] - b.p, v[1] - b.p)) / (2.0 * PI);
  sb -= abs(cross(v[0] - b.p, v[1] - b.p)) / 2.0;
  if (dot(b.p - a.p, v[0] - a.p) < 0) {
    sa = a.r * a.r * PI - sa;
  }
  if (dot(a.p - b.p, v[0] - b.p) < 0) {
    sb = b.r * b.r * PI - sb;
  }
  return sa + sb;
}
int main() {
  double px, py, pr;
  cin >> px >> py >> pr;
  C ca = C(px, py, pr);
  cin >> px >> py >> pr;
  C cb = C(px, py, pr);
  cout << (double)abs(ca.p - cb.p) << endl;
  cout << (double)intersectArea(ca, cb) << endl;
  while (1) {
    long double H, W;
    long double A, B, AB;
    cin >> W >> H >> A >> B >> AB;
    if (H == 0 && W == 0) break;
    bool flg = false;
    if (A < B) {
      flg = true;
      swap(A, B);
    }
    long double ar = sqrt(A / PI);
    long double br = sqrt(B / PI);
    if (max(ar, br) * 2 > min(H, W) + eps) {
      cout << "impossible" << endl;
      continue;
    }
    long double L = abs(ar - br), R = ar + br, M;
    assert(eq(0, intersectArea(C(0, 0, ar), C(R, 0, br))));
    assert(eq(br * br * PI, intersectArea(C(0, 0, ar), C(L, 0, br))));
    for (int i = 0; i < 100; i++) {
      M = (L + R) / 2.0;
      long double val = intersectArea(C(0, 0, ar), C(M, 0, br));
      if (val <= AB + eps)
        R = M;
      else
        L = M;
    }
    complex<long double> pa = complex<long double>(ar, ar);
    complex<long double> pb = complex<long double>(W - br, H - br);
    if (eq(AB, intersectArea(C(pa, ar), C(pb, br)))) {
      if (flg) {
        swap(pa, pb);
        swap(ar, br);
      }
      printf("%.8f %.8f %.8f %.8f %.8f %.8f\n", (double)real(pa),
             (double)imag(pa), (double)ar, (double)real(pb), (double)imag(pb),
             (double)br);
      continue;
    }
    complex<long double> base = pb - pa;
    base /= abs(base);
    base *= L;
    pb = pa + base;
    if (real(pb) + br < W + eps && imag(pb) + br < H + eps &&
        -eps < real(pb) - br && imag(pb) - br > -eps) {
      if (flg) {
        swap(pa, pb);
        swap(ar, br);
      }
      printf("%.8f %.8f %.8f %.8f %.8f %.8f\n", (double)real(pa),
             (double)imag(pa), (double)ar, (double)real(pb), (double)imag(pb),
             (double)br);
    } else {
      cout << "impossible" << endl;
    }
  }
  return 0;
}
