#include<cstdio>
#include<vector>
#include<algorithm>
#include<cstring>
#define pii pair<int,int>
#define ll long long
#define pb push_back
using namespace std;
const int N=5005;
const int M=2e4+10;
struct Node
{
int le,re,num,len,cnt;//段数 有覆盖长度 覆盖次数
}t[M*4];
void update(int idx)
{
if(t[idx].cnt)return;
t[idx].le=t[idx<<1].le,t[idx].re=t[idx<<1|1].re;
t[idx].len=t[idx<<1].len+t[idx<<1|1].len;
t[idx].num=t[idx<<1].num+t[idx<<1|1].num-(t[idx<<1].re&&t[idx<<1|1].le);
}
void add(int idx,int l,int r,int a,int b,int d)
{
if(a<=l&&b>=r)
{
t[idx].cnt+=d;
if(t[idx].cnt)
{
t[idx].num=t[idx].le=t[idx].re=1;
t[idx].len=r-l+1;
}
else if(l==r)t[idx].num=t[idx].le=t[idx].re=t[idx].len=0;
else update(idx);
return;
}
int mid=(l+r)>>1;
if(b<=mid)add(idx<<1,l,mid,a,b,d);
else if(a>mid)add(idx<<1|1,mid+1,r,a,b,d);
else add(idx<<1,l,mid,a,b,d),add(idx<<1|1,mid+1,r,a,b,d);
update(idx);
}
struct Node1{int a,b1,b2,d;}op[N*2];
bool cmp(Node1 x,Node1 y){return (x.a==y.a)?x.d>y.d:x.a<y.a;}
int num[N*2];
int main()
{
int n;
while(~scanf("%d",&n))
{
int tot=0,cnt=0,res=0;
for(int i=0;i<n;i++)
{
int a1,b1,a2,b2;
scanf("%d%d%d%d",&a1,&b1,&a2,&b2);
op[tot++]=Node1{a1,b1,b2-1,1};
op[tot++]=Node1{a2,b1,b2-1,-1};
num[cnt++]=a1,num[cnt++]=a2;
}
sort(op,op+tot,cmp);
sort(num,num+cnt);
cnt=unique(num,num+cnt)-num;
for(int i=0,j=0;i<cnt;i++)
{
while(j<tot&&op[j].a<=num[i])
{
int rec=t[1].len;
add(1,-10001,10000,op[j].b1,op[j].b2,op[j].d),j++;
res+=abs(t[1].len-rec);
}
res+=t[1].num*2*(num[i+1]-num[i]);
}
printf("%d\n",res);
}
return 0;
}