#include<bits/stdc++.h> //NeOWami
using namespace std;
#define ft first
#define sc second
#define int long long
using pii = pair<int, int>;
const int N = 1e5 + 5;
int n;
pii a[N];
int calcS(pii a, pii b, pii c) {
return (a.ft - b.ft) * c.sc + (b.ft - c.ft) * a.sc + (c.ft - a.ft) * b.sc;
}
pii S[N], T[N];
int szS = 0, szT = 0;
signed main() {
if (ifstream("XAYDUNGRAO.INP")) {
freopen("XAYDUNGRAO.INP", "r", stdin);
freopen("XAYDUNGRAO.OUT", "w", stdout);
}
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i].ft >> a[i].sc;
sort(a + 1, a + n + 1, [&] (pii &x, pii &y) {
if (x.sc != y.sc) return x.sc < y.sc;
return x.ft < y.ft;
});
for (int i = 1; i <= n; i++) {
while(szS >= 2 && calcS(S[szS - 1], S[szS], a[i]) >= 0) szS--;
S[++szS] = a[i];
while(szT >= 2 && calcS(T[szT - 1], T[szT], a[i]) <= 0) szT--;
T[++szT] = a[i];
}
for (int i = szT - 1; i > 1; i--) S[++szS] = T[i];
// for (int i = 1; i <= szS; i++) cerr << S[i].ft << " " << S[i].sc << "\n";
long long val = 0;
for (int i = 1; i < szS; i++) {
val += (S[i + 1].sc * S[i].ft - S[i + 1].ft * S[i].sc);
}
val += (S[1].sc * S[szS].ft - S[1].ft * S[szS].sc);
val = abs(val);
cout << szS << "\n";
if (val & 1) cout << val / 2 << ".5\n";
else cout << val / 2 << ".0\n";
for (int i = 1; i <= szS; i++) cout << S[i].ft << " " << S[i].sc << "\n";
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4gLy9OZU9XYW1pCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGZ0IGZpcnN0CiNkZWZpbmUgc2Mgc2Vjb25kCiNkZWZpbmUgaW50IGxvbmcgbG9uZwp1c2luZyBwaWkgPSBwYWlyPGludCwgaW50PjsKY29uc3QgaW50IE4gPSAxZTUgKyA1OwppbnQgbjsKcGlpIGFbTl07CmludCBjYWxjUyhwaWkgYSwgcGlpIGIsIHBpaSBjKSB7CiAgICByZXR1cm4gKGEuZnQgLSBiLmZ0KSAqIGMuc2MgKyAoYi5mdCAtIGMuZnQpICogYS5zYyArIChjLmZ0IC0gYS5mdCkgKiBiLnNjOwp9CnBpaSBTW05dLCBUW05dOwppbnQgc3pTID0gMCwgc3pUID0gMDsKCnNpZ25lZCBtYWluKCkgewogICAgaWYgKGlmc3RyZWFtKCJYQVlEVU5HUkFPLklOUCIpKSB7CiAgICAgICAgZnJlb3BlbigiWEFZRFVOR1JBTy5JTlAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKCJYQVlEVU5HUkFPLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIGNpbiA+PiBuOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBjaW4gPj4gYVtpXS5mdCA+PiBhW2ldLnNjOwogICAgc29ydChhICsgMSwgYSArIG4gKyAxLCBbJl0gKHBpaSAmeCwgcGlpICZ5KSB7CiAgICAgICAgaWYgKHguc2MgIT0geS5zYykgcmV0dXJuIHguc2MgPCB5LnNjOwogICAgICAgIHJldHVybiB4LmZ0IDwgeS5mdDsKICAgIH0pOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgd2hpbGUoc3pTID49IDIgJiYgY2FsY1MoU1tzelMgLSAxXSwgU1tzelNdLCBhW2ldKSA+PSAwKSBzelMtLTsKICAgICAgICBTWysrc3pTXSA9IGFbaV07CgogICAgICAgIHdoaWxlKHN6VCA+PSAyICYmIGNhbGNTKFRbc3pUIC0gMV0sIFRbc3pUXSwgYVtpXSkgPD0gMCkgc3pULS07CiAgICAgICAgVFsrK3N6VF0gPSBhW2ldOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN6VCAtIDE7IGkgPiAxOyBpLS0pIFNbKytzelNdID0gVFtpXTsKLy8gICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gc3pTOyBpKyspIGNlcnIgPDwgU1tpXS5mdCA8PCAiICIgPDwgU1tpXS5zYyA8PCAiXG4iOwogICAgbG9uZyBsb25nIHZhbCA9IDA7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IHN6UzsgaSsrKSB7CiAgICAgICAgdmFsICs9IChTW2kgKyAxXS5zYyAqIFNbaV0uZnQgLSBTW2kgKyAxXS5mdCAqIFNbaV0uc2MpOwogICAgfQogICAgdmFsICs9IChTWzFdLnNjICogU1tzelNdLmZ0IC0gU1sxXS5mdCAqIFNbc3pTXS5zYyk7CiAgICB2YWwgPSBhYnModmFsKTsKICAgIGNvdXQgPDwgc3pTIDw8ICJcbiI7CiAgICBpZiAodmFsICYgMSkgY291dCA8PCB2YWwgLyAyIDw8ICIuNVxuIjsKICAgIGVsc2UgY291dCA8PCB2YWwgLyAyIDw8ICIuMFxuIjsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHN6UzsgaSsrKSBjb3V0IDw8IFNbaV0uZnQgPDwgIiAiIDw8IFNbaV0uc2MgPDwgIlxuIjsKfQo=