#include<bits/stdc++.h>
using namespace std;
const int N = 4e5+10;
int n, idx, Y[2*N];
struct line{
long long o, u, z;
int b;
bool operator < (line x){
return z < x.z;
}
} ln[2*N];
struct Node{
int l, r, cnt;
long long len;
} tr[4*N];
void build(int u, int l, int r){
tr[u].l = l;
tr[u].r = r;
if(l == r) return ;
int mid = (l+r)>>1;
build(u<<1, l, mid);
build(u<<1|1, mid+1, r);
return ;
}
void pushup(int u){
if(tr[u].cnt) tr[u].len = Y[tr[u].r+1]-Y[tr[u].l];
else tr[u].len = tr[u<<1].len + tr[u<<1|1].len;
}
void change(int u, long long L, long long R, int s){
int l = tr[u].l;
int r = tr[u].r;
// cout << u << ' ' << Y[l] << ' ' << Y[r] << ' '<< L << ' ' << R << ' '<< s << endl;
if(Y[l] >= L && Y[r+1] <= R){
tr[u].cnt+=s;
pushup(u);
return ;
}
int mid = (l+r)>>1;
if(L <= Y[mid]) change(u<<1, L, R, s);
if(R > Y[mid+1]) change(u<<1|1, L, R, s);
pushup(u);
}
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; i++){
long long xo, yo, xt, yt;
scanf("%lld%lld%lld%lld", &xo, &yo, &xt, &yt);
Y[2*i-1] = yo, Y[2*i] = yt;
ln[2*i-1].b = 1, ln[2*i-1].o = yt, ln[2*i-1].u = yo, ln[2*i-1].z = xo;
ln[2*i].b = -1, ln[2*i].o = yt, ln[2*i].u = yo, ln[2*i].z = xt;
}
n <<= 1;
sort(ln + 1, ln + 1 + n);
sort(Y + 1, Y + 1 + n);
int m = unique(Y + 1, Y + 1 + n) - Y - 1;
build(1, 1, m-1);
long long res = 0;
for(int i = 1; i < n; i++){
change(1, ln[i].u, ln[i].o, ln[i].b);
res += tr[1].len * (ln[i+1].z - ln[i].z);
}
printf("%lld", res);
return 0;
}