#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct data {
int x, l, r, type;
};
struct seg {
int cnt;
ll len;
};
const int N = 2e5 + 5;
int n, m, k;
ll ans;
ll values[N];
data a[N];
seg t[4*N];
bool cmp(data u, data v) {
return (u.x < v.x || (u.x == v.x && u.type < v.type));
}
void update(int id, int l, int r, int u, int v, int type) {
if (r < u || v < l) return ;
if (u <= l && r <= v) {
t[id].cnt += type;
if (type == 1) t[id].len = values[r] - values[l - 1];
else if (t[id].cnt == 0) if (l < r) t[id].len = t[id * 2].len + t[id * 2 + 1].len;
else t[id].len = 0;
return ;
}
int mid = (l + r) / 2;
update(id * 2, l, mid, u, v, type);
update(id * 2 + 1, mid + 1, r, u, v, type);
if (t[id].cnt == 0 && l < r) t[id].len = t[id * 2].len + t[id * 2 + 1].len;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n;
vector<int> cost;
for (int i = 1; i <= n; i++) {
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
a[++m] = {x1, y1, y2, 1};
a[++m] = {x2, y1, y2, -1};
cost.push_back(y1);
cost.push_back(y2);
}
sort(cost.begin(), cost.end());
cost.resize(unique(cost.begin(), cost.end()) - cost.begin());
sort(a+1,a+m+1,cmp);
for (int i = 1; i <= m; i++) {
int l = a[i].l;
int m = lower_bound(cost.begin(), cost.end(), a[i].l) - cost.begin() + 1;
a[i].l = m;
values[m] = l;
int r = a[i].r;
int m_ = lower_bound(cost.begin(), cost.end(), a[i].r) - cost.begin() + 1;
a[i].r = m_;
values[m_] = r;
k = max(k, a[i].r);
}
for (int i = 1; i <= m; i++) {
ans += (ll)t[1].len * (ll)(a[i].x - a[i-1].x);
// cout << ans << " - > ";
// cout << t[1].len << " - > ";
update(1, 1, k, a[i].l + 1, a[i].r, a[i].type);
}
cout << ans;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKCnN0cnVjdCBkYXRhIHsKCWludCB4LCBsLCByLCB0eXBlOwp9OwoKc3RydWN0IHNlZyB7CglpbnQgY250OwoJbGwgbGVuOwp9OwoKY29uc3QgaW50IE4gPSAyZTUgKyA1OwoKaW50IG4sIG0sIGs7CmxsIGFuczsKbGwgdmFsdWVzW05dOwpkYXRhIGFbTl07CnNlZyB0WzQqTl07Cgpib29sIGNtcChkYXRhIHUsIGRhdGEgdikgewoJcmV0dXJuICh1LnggPCB2LnggfHwgKHUueCA9PSB2LnggJiYgdS50eXBlIDwgdi50eXBlKSk7Cn0KCnZvaWQgdXBkYXRlKGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYsIGludCB0eXBlKSB7CgkKCWlmIChyIDwgdSB8fCB2IDwgbCkgcmV0dXJuIDsKCWlmICh1IDw9IGwgJiYgciA8PSB2KSB7CgkJdFtpZF0uY250ICs9IHR5cGU7CgkJaWYgKHR5cGUgPT0gMSkgdFtpZF0ubGVuID0gdmFsdWVzW3JdIC0gdmFsdWVzW2wgLSAxXTsKCQllbHNlIGlmICh0W2lkXS5jbnQgPT0gMCkgaWYgKGwgPCByKSB0W2lkXS5sZW4gPSB0W2lkICogMl0ubGVuICsgdFtpZCAqIDIgKyAxXS5sZW47CgkJZWxzZSB0W2lkXS5sZW4gPSAwOwoJCXJldHVybiA7Cgl9CglpbnQgbWlkID0gKGwgKyByKSAvIDI7Cgl1cGRhdGUoaWQgKiAyLCBsLCBtaWQsIHUsIHYsIHR5cGUpOwoJdXBkYXRlKGlkICogMiArIDEsIG1pZCArIDEsIHIsIHUsIHYsIHR5cGUpOwoJaWYgKHRbaWRdLmNudCA9PSAwICYmIGwgPCByKSB0W2lkXS5sZW4gPSB0W2lkICogMl0ubGVuICsgdFtpZCAqIDIgKyAxXS5sZW47Cn0KCmludCBtYWluKCkgewppb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwpjaW4udGllKDApOwoKCWNpbiA+PiBuOwoJdmVjdG9yPGludD4gY29zdDsKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJCWludCB4MSwgeTEsIHgyLCB5MjsKCQljaW4gPj4geDEgPj4geTEgPj4geDIgPj4geTI7CgkJYVsrK21dID0ge3gxLCB5MSwgeTIsIDF9OwoJCWFbKyttXSA9IHt4MiwgeTEsIHkyLCAtMX07CgkJY29zdC5wdXNoX2JhY2soeTEpOwoJCWNvc3QucHVzaF9iYWNrKHkyKTsKCX0KCXNvcnQoY29zdC5iZWdpbigpLCBjb3N0LmVuZCgpKTsKCWNvc3QucmVzaXplKHVuaXF1ZShjb3N0LmJlZ2luKCksIGNvc3QuZW5kKCkpIC0gY29zdC5iZWdpbigpKTsKCXNvcnQoYSsxLGErbSsxLGNtcCk7Cglmb3IgKGludCBpID0gMTsgaSA8PSBtOyBpKyspIHsKCQlpbnQgbCA9IGFbaV0ubDsKCQlpbnQgbSA9IGxvd2VyX2JvdW5kKGNvc3QuYmVnaW4oKSwgY29zdC5lbmQoKSwgYVtpXS5sKSAtIGNvc3QuYmVnaW4oKSArIDE7CgkJYVtpXS5sID0gbTsKCQl2YWx1ZXNbbV0gPSBsOwoJCWludCByID0gYVtpXS5yOwoJCWludCBtXyA9IGxvd2VyX2JvdW5kKGNvc3QuYmVnaW4oKSwgY29zdC5lbmQoKSwgYVtpXS5yKSAtIGNvc3QuYmVnaW4oKSArIDE7CgkJYVtpXS5yID0gbV87CgkJdmFsdWVzW21fXSA9IHI7CgkJayA9IG1heChrLCBhW2ldLnIpOwoJfQoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CgkJYW5zICs9IChsbCl0WzFdLmxlbiAqIChsbCkoYVtpXS54IC0gYVtpLTFdLngpOwovLwkJY291dCA8PCBhbnMgPDwgIiAtID4gIjsKLy8JCWNvdXQgPDwgdFsxXS5sZW4gPDwgIiAtID4gIjsKCQl1cGRhdGUoMSwgMSwgaywgYVtpXS5sICsgMSwgYVtpXS5yLCBhW2ldLnR5cGUpOwoJfQoJY291dCA8PCBhbnM7CglyZXR1cm4gMDsKfQ==