#include <bits/stdc++.h>   using namespace std;   void readi(int &x) {     int v = 0, f = 1;     char c = getchar();     while (!isdigit(c) && c !=  - ) c = getchar();     if (c ==  - )       f = -1;     else       v = v * 10 + c -  0 ;     while (isdigit(c = getchar())) v = v * 10 + c -  0 ;     x = v * f;   }   void readll(long long &x) {     long long v = 0ll, f = 1ll;     char c = getchar();     while (!isdigit(c) && c !=  - ) c = getchar();     if (c ==  - )       f = -1;     else       v = v * 10 + c -  0 ;     while (isdigit(c = getchar())) v = v * 10 + c -  0 ;     x = v * f;   }   void readc(char &x) {     char c;     while ((c = getchar()) ==    )       ;     x = c;   }   void writes(string s) { puts(s.c_str()); }   void writeln() { writes(  ); }   void writei(int x) {     if (!x) putchar( 0 );     char a[25];     int top = 0;     while (x) {       a[++top] = (x % 10) +  0 ;       x /= 10;     }     while (top) {       putchar(a[top]);       top--;     }   }   void writell(long long x) {     if (!x) putchar( 0 );     char a[25];     int top = 0;     while (x) {       a[++top] = (x % 10) +  0 ;       x /= 10;     }     while (top) {       putchar(a[top]);       top--;     }   }   inline long long inc(int &x) { return ++x; }   inline long long inc(long long &x) { return ++x; }   inline long long inc(int &x, long long y) { return x += y; }   inline long long inc(long long &x, long long y) { return x += y; }   inline double inc(double &x, double y) { return x += y; }   inline long long dec(int &x) { return --x; }   inline long long dec(long long &x) { return --x; }   inline long long dec(int &x, long long y) { return x -= y; }   inline long long dec(long long &x, long long y) { return x -= y; }   inline double dec(double &x, double y) { return x -= y; }   inline long long mul(int &x) { return x = ((long long)x) * x; }   inline long long mul(long long &x) { return x = x * x; }   inline long long mul(int &x, long long y) { return x *= y; }   inline long long mul(long long &x, long long y) { return x *= y; }   inline double mul(double &x, double y) { return x *= y; }   inline long long divi(int &x) { return x = sqrt(x); }   inline long long divi(long long &x) { return x = sqrt(x); }   inline long long divi(int &x, long long y) { return x /= y; }   inline long long divi(long long &x, long long y) { return x /= y; }   inline double divi(double &x, double y) { return x /= y; }   inline long long mod(int &x, long long y) { return x %= y; }   inline long long mod(long long &x, long long y) { return x %= y; }   long long n, m, i, j, cnt, cas;   long long ans;   vector<long long> all;   struct Scanning_line {     long long l, r, h, ad;   } s[200005];   struct seg {     long long l, r, add;     long long sum;   } tr[800005];   void build(long long x, long long l, long long r) {     if (l == r) {       tr[x].l = l;       tr[x].r = r;       tr[x].add = tr[x].sum = 0;       return;     }     tr[x].l = l;     tr[x].r = r;     tr[x].add = tr[x].sum = 0;     build(x * 2, l, (l + r) / 2);     build(x * 2 + 1, (l + r) / 2 + 1, r);   }   void pushup(long long x) {     if (tr[x].add)       tr[x].sum = all[tr[x].r] - all[tr[x].l - 1];     else if (tr[x].l == tr[x].r)       tr[x].sum = 0;     else       tr[x].sum = tr[x * 2].sum + tr[x * 2 + 1].sum;   }   void update(long long x, long long l, long long r, long long c) {     if (tr[x].l > r || tr[x].r < l) return;     if (l <= tr[x].l && tr[x].r <= r) {       tr[x].add += c;       pushup(x);       return;     }     update(x * 2, l, r, c);     update(x * 2 + 1, l, r, c);     pushup(x);   }   bool cmp(Scanning_line x, Scanning_line y) { return x.h < y.h; }   int main() {     ios_base::sync_with_stdio(0);     cin >> n;     cnt = 0;     for (i = 1; i <= n; i++) {       long long w, x, y, z;       cin >> w >> x >> y >> z;       if (w > y) swap(w, y);       if (x > z) swap(x, z);       w--;       x--;       all.push_back(w);       all.push_back(y);       s[++cnt] = {w, y, x, 1};       s[++cnt] = {w, y, z, -1};     }     stable_sort(all.begin(), all.end());     stable_sort(s + 1, s + cnt + 1, cmp);     all.resize(unique(all.begin(), all.end()) - all.begin());     ans = 0;     build(1, 0, all.size());     for (i = 1; i <= cnt; i++) {       if (i != 1 && s[i].h != s[i - 1].h) {         ans += abs(s[i].h - s[i - 1].h) * tr[1].sum;       }       long long l = upper_bound(all.begin(), all.end(), s[i].l) - all.begin();       long long r = upper_bound(all.begin(), all.end(), s[i].r) - all.begin();       update(1, l, r - 1, s[i].ad);     }     cout << ans << endl;     return 0;   }