#include<bits/stdc++.h>
using namespace std;
#define int long long
int ls(int p){return p<<1;}
int rs(int p){return p<<1|1;}
const int N=2000005;
struct Scanline{
int l,r,h,inout;
Scanline(){}
Scanline(int a,int b,int c,int d):l(a),r(b),h(c),inout(d) {}
}line[N];
bool cmp(Scanline &a,Scanline &b){return a.h<b.h;}
bool lbd[N],rbd[N];
int num[N];
int Tag[N];
int length[N];
void pushup(int p,int pl,int pr){
if(Tag[p]){
lbd[p]=rbd[p]=true;
length[p]=pr-pl+1;
num[p]=1;
}
else if(pl==pr)
length[p]=num[p]=lbd[p]=rbd[p]=0;
else{
lbd[p]=lbd[ls(p)];
rbd[p]=rbd[rs(p)];
length[p]=length[ls(p)]+length[rs(p)];
num[p]=num[ls(p)]+num[rs(p)];
if(lbd[rs(p)] && rbd[ls(p)]) num[p]-=1;
}
}
void update(int L,int R,int io,int p,int pl,int pr){
if(L<=pl && R>=pr){
Tag[p]+=io;
pushup(p,pl,pr);
return;
}
int mid=(pl+pr)>>1;
if(L<=mid) update(L,R,io,ls(p),pl,mid);
if(R>mid) update(L,R,io,rs(p),mid+1,pr);
pushup(p,pl,pr);
}
signed main(){
int n;
cin>>n;
int cnt=0,Lbd=1e6,Rbd=-1e6;
for(int i=1;i<=n;i++){
int x1,x2,y1,y2; cin>>x1>>y1>>x2>>y2;
Lbd=min(Lbd,x1);
Rbd=max(Rbd,x2);
line[++cnt]=Scanline(x1,x2,y1,1);
line[++cnt]=Scanline(x1,x2,y2,-1);
}
sort(line+1,line+cnt+1,cmp);
int ans=0,last=0;
for(int i=1;i<=cnt;i++){
if(line[i].l<line[i].r)
update(line[i].l,line[i].r-1,line[i].inout,1,Lbd,Rbd-1);
ans+=num[1]*2*(line[i+1].h-line[i].h);
ans+=abs(length[1]-last);
last=length[1];
}
cout<<ans<<endl;
return 0;
}