#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
  point(double x = 0, double y = 0) {
    this->x = x;
    this->y = y;
  }
  void print() { cout << fixed << setprecision(9) << x << " " << y << endl; }
};
struct vecto {
  double x, y;
  vecto(double x = 0, double y = 0) {
    this->x = x;
    this->y = y;
  }
  double len() { return sqrt(x * x + y * y); }
  void print() { cout << fixed << setprecision(9) << x << " " << y << endl; }
};
double crossProduct(vecto a, vecto b) { return a.x * b.y - a.y * b.x; }
vecto toN(vecto a) { return vecto(-a.y, a.x); }
vecto toVec(point a, point b) { return vecto(b.x - a.x, b.y - a.y); }
point toPoint(point a, vecto v, double len) {
  double h = v.len();
  v.x *= len / h;
  v.y *= len / h;
  return point(a.x + v.x, a.y + v.y);
}
int main() {
  ios::sync_with_stdio(0);
  double px, py, vx, vy, a, b, c, d;
  cin >> px >> py >> vx >> vy >> a >> b >> c >> d;
  point origin = point(px, py);
  vecto chinh = vecto(vx, vy);
  vecto xuong = vecto(-vx, -vy);
  point top = toPoint(origin, chinh, b);
  vecto ngang = toN(chinh);
  point left = toPoint(origin, ngang, a / 2);
  vecto ngang2 = vecto(-ngang.x, -ngang.y);
  point right = toPoint(origin, ngang2, a / 2);
  if (crossProduct(toVec(left, top), toVec(left, right)) > 0) swap(left, right);
  point topLeft = toPoint(origin, ngang, c / 2);
  point topRight = toPoint(origin, ngang2, c / 2);
  if (crossProduct(toVec(topLeft, top), toVec(topLeft, topRight)) > 0)
    swap(topLeft, topRight);
  point botLeft = toPoint(topLeft, xuong, d);
  point botRight = toPoint(topRight, xuong, d);
  top.print();
  left.print();
  topLeft.print();
  botLeft.print();
  botRight.print();
  topRight.print();
  right.print();
  return 0;
}
