#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ll long long
#define rep(i,l,r)for(ll i=(l);i<(r);i++)

int upll(const void*a, const void*b){return*(ll*)a<*(ll*)b?-1:*(ll*)a>*(ll*)b?1:0;}
void sortup(ll*a,int n){qsort(a,n,sizeof(ll),upll);}

//座圧2
//前準備：
//圧縮したい配列aに-INFとINFを追加する
//uniquell(a,comp,n)でcompに昇順の配列を作る
ll compf(ll n,ll*comp,ll compcnt){
	//comp[i]<=n<comp[i+1]なるiを返す
	ll l=0,r=compcnt;
	while(r-l>1){
		ll m=(l+r)/2;
		if(comp[m]<=n)l=m;
		else r=m;
	}
	return l;
}
int uniquell(ll*t,ll*ans,int cnt){
	ll*a=calloc(cnt,sizeof(ll));
	memcpy(a,t,cnt*sizeof(ll));
	sortup(a,cnt);
	int c=0;
	ans[0]=a[0];
	rep(i,1,cnt)if(a[i]!=ans[c])ans[++c]=a[i];
	free(a);
	return c+1;
}

ll xx[4010],yy[4010];
ll xcnt,ycnt;
ll xx1[2010],yy1[2010],xx2[2010],yy2[2010];
ll cumsum[4010][4010];
int main(){
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%lld%lld%lld%lld",xx1+i,yy1+i,xx2+i,yy2+i);
		xx[2*i]=xx1[i];xx[2*i+1]=xx2[i];
		yy[2*i]=yy1[i];yy[2*i+1]=yy2[i];
	}
	xcnt=uniquell(xx,xx,2*n);
	ycnt=uniquell(yy,yy,2*n);
	for(int i=0;i<n;i++){
		int xxx1=compf(xx1[i],xx,xcnt);
		int xxx2=compf(xx2[i],xx,xcnt);
		int yyy1=compf(yy1[i],yy,ycnt);
		int yyy2=compf(yy2[i],yy,ycnt);
		cumsum[xxx1][yyy1]++;
		cumsum[xxx1][yyy2]--;
		cumsum[xxx2][yyy1]--;
		cumsum[xxx2][yyy2]++;
	}
	for(int i=0;i<xcnt;i++)for(int j=0;j<ycnt;j++)cumsum[i][j+1]+=cumsum[i][j];
	for(int j=0;j<ycnt;j++)for(int i=0;i<xcnt;i++)cumsum[i+1][j]+=cumsum[i][j];
	ll ans=0;
	for(int i=0;i<xcnt;i++)for(int j=0;j<ycnt;j++){
		if(cumsum[i][j])ans+=(xx[i+1]-xx[i])*(yy[j+1]-yy[j]);
	}
	printf("%lld\n",ans);
}
