#include <bits/stdc++.h>
using namespace std;
template <class T>
bool remin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
bool remax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
int nxt() {
  int first;
  scanf("%d", &first);
  return first;
}
long long gcd(long long a, long long b) {
  a = abs(a);
  b = abs(b);
  while (b) {
    a %= b;
    swap(a, b);
  }
  return a;
}
struct pt {
  long long first, second;
  pt() {}
  pt(long long first, long long second) : first(first), second(second) {}
  pt operator-(const pt &r) const {
    return pt(first - r.first, second - r.second);
  }
  pt operator+(const pt &r) const {
    return pt(first + r.first, second + r.second);
  }
  pt operator*(const long double &r) const { return pt(first * r, second * r); }
  long long sqlen() const { return abs(first * first + second * second); }
  long double len() const { return sqrtl(sqlen()); }
  bool operator<(const pt &r) const {
    if (first != r.first) return first < r.first;
    return second < r.second;
  }
  bool operator==(const pt &r) const {
    return first == r.first && second == r.second;
  }
};
long long cross(const pt &l, const pt &r) {
  return l.first * r.second - l.second * r.first;
}
long long dot(const pt &l, const pt &r) {
  return l.first * r.first + l.second * r.second;
}
long long pwmod(long long a, long long n, long long mod) {
  long long ret = 1;
  while (n) {
    if (n & 1) ret = ret * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return ret;
}
template <typename T>
inline T sqr(T first) {
  return first * first;
}
struct Fenwick {
  vector<int> t;
  void init(int n) { t.assign(n, 0); }
  void inc(int p, long long val) {
    for (; p < t.size(); p |= (p + 1)) {
      t[p] += val;
    }
  }
  int sum(int r) {
    int ret = 0;
    for (; r >= 0; r &= (r + 1), --r) {
      ret += t[r];
    }
    return ret;
  }
  int sum(int l, int r) {
    r = min(r, int(t.size() - 1));
    l = max(l, 0);
    if (l > r) return 0;
    return sum(r) - sum(l - 1);
  }
};
struct Q {
  int a, t, first;
  int id;
};
const int N = 1000 * 100;
double a[N];
double b[N];
long double aa[N];
long double bb[N];
const long double eps = 1e-10;
inline void solve() {
  int n;
  cin >> n;
  for (int i = 0; i < (int)(n); i++) {
    cin >> a[i];
  }
  for (int i = 0; i < (int)(n); i++) {
    cin >> b[i];
  }
  long double sa = 0;
  long double sb = 0;
  {
    long double ab = a[0] + b[0];
    long double pp = a[0];
    long double dd = fabsl(ab * ab - 4 * pp);
    dd = sqrtl(dd);
    aa[0] = (ab - dd) / 2.0;
    bb[0] = (ab + dd) / 2.0;
    sa += aa[0];
    sb += bb[0];
  }
  for (int i = 1; i < n; ++i) {
    long double ab = a[i] + b[i];
    long double B = (ab + sb - sa);
    long double C = -ab * sa + a[i];
    long double w = sqr(B) - 4 * C;
    if (w < -eps) {
      assert(false);
    }
    if (w < 0) w = 0;
    long double dd = sqrtl(fabsl(w));
    long double x1 = (B - dd) / 2;
    long double x2 = (B + dd) / 2;
    if (x1 >= -eps && x1 <= ab + eps) {
      aa[i] = x1;
      bb[i] = ab - aa[i];
    } else {
      aa[i] = x2;
      bb[i] = ab - aa[i];
    }
    sa += aa[i];
    sb += bb[i];
  }
  cout << setprecision(7) << fixed;
  for (int i = 0; i < (int)(n); i++) {
    cout << (double)fabsl(aa[i]) << " ";
  }
  cout << "\n";
  for (int i = 0; i < (int)(n); i++) {
    cout << (double)fabsl(bb[i]) << " ";
  }
  cout << "\n";
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  solve();
  cerr << "Time " << clock() / (double)CLOCKS_PER_SEC << endl;
  return 0;
}
