#include <bits/stdc++.h>
using namespace std;
struct Segment {
long long l, r;
long long w; // 覆盖次数
long long w1; // 奇数次覆盖长度
long long w2; // 偶数次覆盖长度
long long len; // 区间长度
};
struct Line {
long long l, r;
long long y;
long long v; // +1 开始,-1 结束
};
class SegmentTree {
private:
vector<Segment> tree;
vector<long long> p; // 离散化数组
void build(long long u, long long l, long long r) {
tree[u].l = l;
tree[u].r = r;
tree[u].len = p[r + 1] - p[l]; // 维护区间[l, r+1]
if (l == r) return;
long long mid = (l + r) / 2;
build(u * 2, l, mid);
build(u * 2 + 1, mid + 1, r);
}
public:
SegmentTree(long long n, const vector<long long>& points) : p(points) {
tree.resize(4 * n);
build(1, 1, n);
}
void update(long long u, long long l, long long r, long long k) {
if (tree[u].l > r || tree[u].r < l) return;
if (tree[u].l >= l && tree[u].r <= r) {
tree[u].w += k; // 更新覆盖次数
} else {
update(u * 2, l, r, k);
update(u * 2 + 1, l, r, k);
}
if (tree[u].l == tree[u].r) { // 叶节点
if (!tree[u].w) {
tree[u].w1 = tree[u].w2 = 0;
} else if (tree[u].w & 1) {
tree[u].w1 = tree[u].len;
tree[u].w2 = 0;
} else {
tree[u].w1 = 0;
tree[u].w2 = tree[u].len;
}
} else { // 非叶节点
if (!tree[u].w) {
tree[u].w1 = tree[u * 2].w1 + tree[u * 2 + 1].w1;
tree[u].w2 = tree[u * 2].w2 + tree[u * 2 + 1].w2;
} else if (tree[u].w & 1) {
tree[u].w2 = tree[u * 2].w1 + tree[u * 2 + 1].w1;
tree[u].w1 = tree[u].len - tree[u].w2;
} else {
tree[u].w1 = tree[u * 2].w1 + tree[u * 2 + 1].w1;
tree[u].w2 = tree[u].len - tree[u].w1;
}
}
}
long long getOddCovered() const { return tree[1].w1; }
long long getEvenCovered() const { return tree[1].w2; }
};
int main() {
long long n;
cin >> n;
vector<Line> lines;
vector<long long> points;
for (long long i = 0; i < n; ++i) {
long long l, d, r, u;
cin >> l >> d >> r >> u;
lines.push_back({l, r, d, 1});
lines.push_back({l, r, u, -1});
points.push_back(l);
points.push_back(r);
}
// 排序并去重
sort(lines.begin(), lines.end(), [](const Line& a, const Line& b) {
return a.y < b.y;
});
sort(points.begin(), points.end());
points.erase(unique(points.begin(), points.end()), points.end());
long long cnt = points.size() - 1;
SegmentTree st(cnt, points);
long long ans1 = 0, ans2 = 0;
for (size_t i = 0; i < lines.size(); ++i) {
if (i > 0) {
long long dy = lines[i].y - lines[i - 1].y;
ans1 += static_cast<long long>(st.getOddCovered()) * dy;
ans2 += static_cast<long long>(st.getEvenCovered()) * dy;
}
long long l = lower_bound(points.begin(), points.end(), lines[i].l) - points.begin() + 1;
long long r = lower_bound(points.begin(), points.end(), lines[i].r) - points.begin() + 1;
st.update(1, l, r - 1, lines[i].v);
}
printf("%lld\n%lld\n", ans1, ans2);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgU2VnbWVudCB7CiAgICBsb25nIGxvbmcgbCwgcjsKICAgIGxvbmcgbG9uZyB3OyAgICAgIC8vIOimhuebluasoeaVsAogICAgbG9uZyBsb25nIHcxOyAgICAgLy8g5aWH5pWw5qyh6KaG55uW6ZW/5bqmCiAgICBsb25nIGxvbmcgdzI7ICAgICAvLyDlgbbmlbDmrKHopobnm5bplb/luqYKICAgIGxvbmcgbG9uZyBsZW47ICAgIC8vIOWMuumXtOmVv+W6pgp9OwoKc3RydWN0IExpbmUgewogICAgbG9uZyBsb25nIGwsIHI7CiAgICBsb25nIGxvbmcgeTsKICAgIGxvbmcgbG9uZyB2OyAgICAgIC8vICsxIOW8gOWni++8jC0xIOe7k+adnwp9OwoKY2xhc3MgU2VnbWVudFRyZWUgewpwcml2YXRlOgogICAgdmVjdG9yPFNlZ21lbnQ+IHRyZWU7CiAgICB2ZWN0b3I8bG9uZyBsb25nPiBwOyAgLy8g56a75pWj5YyW5pWw57uECgogICAgdm9pZCBidWlsZChsb25nIGxvbmcgdSwgbG9uZyBsb25nIGwsIGxvbmcgbG9uZyByKSB7CiAgICAgICAgdHJlZVt1XS5sID0gbDsKICAgICAgICB0cmVlW3VdLnIgPSByOwogICAgICAgIHRyZWVbdV0ubGVuID0gcFtyICsgMV0gLSBwW2xdOyAgLy8g57u05oqk5Yy66Ze0W2wsIHIrMV0KICAgICAgICBpZiAobCA9PSByKSByZXR1cm47CiAgICAgICAgCiAgICAgICAgbG9uZyBsb25nIG1pZCA9IChsICsgcikgLyAyOwogICAgICAgIGJ1aWxkKHUgKiAyLCBsLCBtaWQpOwogICAgICAgIGJ1aWxkKHUgKiAyICsgMSwgbWlkICsgMSwgcik7CiAgICB9CgpwdWJsaWM6CiAgICBTZWdtZW50VHJlZShsb25nIGxvbmcgbiwgY29uc3QgdmVjdG9yPGxvbmcgbG9uZz4mIHBvaW50cykgOiBwKHBvaW50cykgewogICAgICAgIHRyZWUucmVzaXplKDQgKiBuKTsKICAgICAgICBidWlsZCgxLCAxLCBuKTsKICAgIH0KCiAgICB2b2lkIHVwZGF0ZShsb25nIGxvbmcgdSwgbG9uZyBsb25nIGwsIGxvbmcgbG9uZyByLCBsb25nIGxvbmcgaykgewogICAgICAgIGlmICh0cmVlW3VdLmwgPiByIHx8IHRyZWVbdV0uciA8IGwpIHJldHVybjsKICAgICAgICAKICAgICAgICBpZiAodHJlZVt1XS5sID49IGwgJiYgdHJlZVt1XS5yIDw9IHIpIHsKICAgICAgICAgICAgdHJlZVt1XS53ICs9IGs7ICAvLyDmm7TmlrDopobnm5bmrKHmlbAKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB1cGRhdGUodSAqIDIsIGwsIHIsIGspOwogICAgICAgICAgICB1cGRhdGUodSAqIDIgKyAxLCBsLCByLCBrKTsKICAgICAgICB9CgogICAgICAgIGlmICh0cmVlW3VdLmwgPT0gdHJlZVt1XS5yKSB7ICAvLyDlj7boioLngrkKICAgICAgICAgICAgaWYgKCF0cmVlW3VdLncpIHsKICAgICAgICAgICAgICAgIHRyZWVbdV0udzEgPSB0cmVlW3VdLncyID0gMDsKICAgICAgICAgICAgfSBlbHNlIGlmICh0cmVlW3VdLncgJiAxKSB7CiAgICAgICAgICAgICAgICB0cmVlW3VdLncxID0gdHJlZVt1XS5sZW47CiAgICAgICAgICAgICAgICB0cmVlW3VdLncyID0gMDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRyZWVbdV0udzEgPSAwOwogICAgICAgICAgICAgICAgdHJlZVt1XS53MiA9IHRyZWVbdV0ubGVuOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsgIC8vIOmdnuWPtuiKgueCuQogICAgICAgICAgICBpZiAoIXRyZWVbdV0udykgewogICAgICAgICAgICAgICAgdHJlZVt1XS53MSA9IHRyZWVbdSAqIDJdLncxICsgdHJlZVt1ICogMiArIDFdLncxOwogICAgICAgICAgICAgICAgdHJlZVt1XS53MiA9IHRyZWVbdSAqIDJdLncyICsgdHJlZVt1ICogMiArIDFdLncyOwogICAgICAgICAgICB9IGVsc2UgaWYgKHRyZWVbdV0udyAmIDEpIHsKICAgICAgICAgICAgICAgIHRyZWVbdV0udzIgPSB0cmVlW3UgKiAyXS53MSArIHRyZWVbdSAqIDIgKyAxXS53MTsKICAgICAgICAgICAgICAgIHRyZWVbdV0udzEgPSB0cmVlW3VdLmxlbiAtIHRyZWVbdV0udzI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0cmVlW3VdLncxID0gdHJlZVt1ICogMl0udzEgKyB0cmVlW3UgKiAyICsgMV0udzE7CiAgICAgICAgICAgICAgICB0cmVlW3VdLncyID0gdHJlZVt1XS5sZW4gLSB0cmVlW3VdLncxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxvbmcgbG9uZyBnZXRPZGRDb3ZlcmVkKCkgY29uc3QgeyByZXR1cm4gdHJlZVsxXS53MTsgfQogICAgbG9uZyBsb25nIGdldEV2ZW5Db3ZlcmVkKCkgY29uc3QgeyByZXR1cm4gdHJlZVsxXS53MjsgfQp9OwoKaW50IG1haW4oKSB7CiAgICBsb25nIGxvbmcgbjsKICAgIGNpbiA+PiBuOwogICAgCiAgICB2ZWN0b3I8TGluZT4gbGluZXM7CiAgICB2ZWN0b3I8bG9uZyBsb25nPiBwb2ludHM7CiAgICAKICAgIGZvciAobG9uZyBsb25nIGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgbG9uZyBsb25nIGwsIGQsIHIsIHU7CiAgICAgICAgY2luID4+IGwgPj4gZCA+PiByID4+IHU7CiAgICAgICAgCiAgICAgICAgbGluZXMucHVzaF9iYWNrKHtsLCByLCBkLCAxfSk7CiAgICAgICAgbGluZXMucHVzaF9iYWNrKHtsLCByLCB1LCAtMX0pOwogICAgICAgIHBvaW50cy5wdXNoX2JhY2sobCk7CiAgICAgICAgcG9pbnRzLnB1c2hfYmFjayhyKTsKICAgIH0KICAgIAogICAgLy8g5o6S5bqP5bm25Y676YeNCiAgICBzb3J0KGxpbmVzLmJlZ2luKCksIGxpbmVzLmVuZCgpLCBbXShjb25zdCBMaW5lJiBhLCBjb25zdCBMaW5lJiBiKSB7CiAgICAgICAgcmV0dXJuIGEueSA8IGIueTsKICAgIH0pOwogICAgCiAgICBzb3J0KHBvaW50cy5iZWdpbigpLCBwb2ludHMuZW5kKCkpOwogICAgcG9pbnRzLmVyYXNlKHVuaXF1ZShwb2ludHMuYmVnaW4oKSwgcG9pbnRzLmVuZCgpKSwgcG9pbnRzLmVuZCgpKTsKICAgIAogICAgbG9uZyBsb25nIGNudCA9IHBvaW50cy5zaXplKCkgLSAxOwogICAgU2VnbWVudFRyZWUgc3QoY250LCBwb2ludHMpOwogICAgCiAgICBsb25nIGxvbmcgYW5zMSA9IDAsIGFuczIgPSAwOwogICAgCiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgICAgIGxvbmcgbG9uZyBkeSA9IGxpbmVzW2ldLnkgLSBsaW5lc1tpIC0gMV0ueTsKICAgICAgICAgICAgYW5zMSArPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHN0LmdldE9kZENvdmVyZWQoKSkgKiBkeTsKICAgICAgICAgICAgYW5zMiArPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHN0LmdldEV2ZW5Db3ZlcmVkKCkpICogZHk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGxvbmcgbG9uZyBsID0gbG93ZXJfYm91bmQocG9pbnRzLmJlZ2luKCksIHBvaW50cy5lbmQoKSwgbGluZXNbaV0ubCkgLSBwb2ludHMuYmVnaW4oKSArIDE7CiAgICAgICAgbG9uZyBsb25nIHIgPSBsb3dlcl9ib3VuZChwb2ludHMuYmVnaW4oKSwgcG9pbnRzLmVuZCgpLCBsaW5lc1tpXS5yKSAtIHBvaW50cy5iZWdpbigpICsgMTsKICAgICAgICBzdC51cGRhdGUoMSwgbCwgciAtIDEsIGxpbmVzW2ldLnYpOyAKICAgIH0KICAgIAogICAgcHJpbnRmKCIlbGxkXG4lbGxkXG4iLCBhbnMxLCBhbnMyKTsKICAgIHJldHVybiAwOwp9