#define task "CONSTRUCT"
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <cassert>
using namespace std;
using ll = long long;
using ld = long double;
constexpr int N = 1e5 + 5;
int n;
ll x[N], y[N];
ld a[N], b[N];
void Read()
{
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> x[i] >> y[i];
}
ld SolveEquation(ll c1, ll c2)
{
// assert(!((c1 + c2) & 1));
return (ld)1.0 * (c1 + c2) / 2;
}
void Cal(ll x[N], ld a[N], int n)
{
ll tmp = 0;
for (int i = 1; i < n; ++i)
if (i & 1)
tmp = tmp + x[i] * 2;
else
tmp = tmp - x[i] * 2;
a[1] = SolveEquation(x[n] * 2, tmp);
for (int i = 2; i <= n; ++i)
a[i] = x[i - 1] * 2 - a[i - 1];
}
void Constrain_4(ll x[N], ld a[N])
{
ld I2 = (x[1] + x[2]) / 2.0,
I3 = (x[2] + x[3]) / 2.0,
I4 = (x[3] + x[4]) / 2.0,
I1 = (x[4] + x[1]) / 2.0,
I = (x[1] + x[3]) / 2.0;
// a_1 + I = 2I1 => a_1 = 2I1 - I
a[1] = 2 * I1 - I;
a[2] = 2 * I2 - I;
a[3] = 2 * I3 - I;
a[4] = 2 * I4 - I;
}
void Solve()
{
if (n == 4)
{
Constrain_4(x, a);
Constrain_4(y, b);
for (int i = 1; i <= n; ++i)
cout << fixed << setprecision(2) << a[i] << " " << b[i] << "\n";
}
else
{
Cal(x, a, n);
Cal(y, b, n);
for (int i = 1; i <= n; ++i)
cout << fixed << setprecision(2) << a[i] << " " << b[i] << "\n";
}
}
int32_t main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
if (fopen(task ".INP", "r"))
{
freopen(task ".INP", "r", stdin);
freopen(task ".OUT", "w", stdout);
}
Read();
Solve();
}
I2RlZmluZSB0YXNrICJDT05TVFJVQ1QiCiAKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNhc3NlcnQ+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAp1c2luZyBsbCA9IGxvbmcgbG9uZzsKdXNpbmcgbGQgPSBsb25nIGRvdWJsZTsKIApjb25zdGV4cHIgaW50IE4gPSAxZTUgKyA1OwppbnQgbjsKbGwgeFtOXSwgeVtOXTsKbGQgYVtOXSwgYltOXTsKIAp2b2lkIFJlYWQoKQp7CiAgICBjaW4gPj4gbjsKIAogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKQogICAgICAgIGNpbiA+PiB4W2ldID4+IHlbaV07Cn0KIApsZCBTb2x2ZUVxdWF0aW9uKGxsIGMxLCBsbCBjMikKewogICAgLy8gYXNzZXJ0KCEoKGMxICsgYzIpICYgMSkpOwogICAgcmV0dXJuIChsZCkxLjAgKiAoYzEgKyBjMikgLyAyOwp9CiAKdm9pZCBDYWwobGwgeFtOXSwgbGQgYVtOXSwgaW50IG4pCnsKICAgIGxsIHRtcCA9IDA7CiAKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgKytpKQogICAgICAgIGlmIChpICYgMSkKICAgICAgICAgICAgdG1wID0gdG1wICsgeFtpXSAqIDI7CiAgICAgICAgZWxzZQogICAgICAgICAgICB0bXAgPSB0bXAgLSB4W2ldICogMjsKIAogICAgYVsxXSA9IFNvbHZlRXF1YXRpb24oeFtuXSAqIDIsIHRtcCk7CiAKICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IG47ICsraSkKICAgICAgICBhW2ldID0geFtpIC0gMV0gKiAyIC0gYVtpIC0gMV07Cn0KIAp2b2lkIENvbnN0cmFpbl80KGxsIHhbTl0sIGxkIGFbTl0pCnsKICAgIGxkIEkyID0gKHhbMV0gKyB4WzJdKSAvIDIuMCwKICAgICAgIEkzID0gKHhbMl0gKyB4WzNdKSAvIDIuMCwKICAgICAgIEk0ID0gKHhbM10gKyB4WzRdKSAvIDIuMCwKICAgICAgIEkxID0gKHhbNF0gKyB4WzFdKSAvIDIuMCwKICAgICAgIEkgPSAoeFsxXSArIHhbM10pIC8gMi4wOwogCiAgICAvLyBhXzEgKyBJID0gMkkxID0+IGFfMSA9IDJJMSAtIEkKIAogICAgYVsxXSA9IDIgKiBJMSAtIEk7CiAgICBhWzJdID0gMiAqIEkyIC0gSTsKICAgIGFbM10gPSAyICogSTMgLSBJOwogICAgYVs0XSA9IDIgKiBJNCAtIEk7Cn0KIAp2b2lkIFNvbHZlKCkKewogICAgaWYgKG4gPT0gNCkKICAgIHsKICAgICAgICBDb25zdHJhaW5fNCh4LCBhKTsKICAgICAgICBDb25zdHJhaW5fNCh5LCBiKTsKIAogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkKICAgICAgICAgICAgY291dCA8PCBmaXhlZCA8PCBzZXRwcmVjaXNpb24oMikgPDwgYVtpXSA8PCAiICIgPDwgYltpXSA8PCAiXG4iOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIENhbCh4LCBhLCBuKTsKICAgICAgICBDYWwoeSwgYiwgbik7CiAKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpCiAgICAgICAgICAgIGNvdXQgPDwgZml4ZWQgPDwgc2V0cHJlY2lzaW9uKDIpIDw8IGFbaV0gPDwgIiAiIDw8IGJbaV0gPDwgIlxuIjsKICAgIH0KfQogCmludDMyX3QgbWFpbigpCnsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgaWYgKGZvcGVuKHRhc2sgIi5JTlAiLCAiciIpKQogICAgewogICAgICAgIGZyZW9wZW4odGFzayAiLklOUCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4odGFzayAiLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KIAogICAgUmVhZCgpOwogICAgU29sdmUoKTsKfQog