/*
暴力应该很好理解 不多说了
至于线段树维护的嘛 还没看懂
哪天突然想明白了在写吧
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 5010
#define bas 10000
using namespace std;
int n,m,f[maxn*4],ans;
struct node{
int l,r,h,t;
}A[maxn*2],B[maxn*2];
int cmp(const node &a,const node &b){
if(a.h==b.h)return a.t<b.t;
return a.h<b.h;
}
int main()
{
freopen("picture.in","r",stdin);
freopen("picture.out","w",stdout);
scanf("%d",&n);
int x1,x2,y1,y2;
for(int i=1;i<=n;i++){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
x1+=bas;x2+=bas;y1+=bas;y2+=bas;
A[++m].l=x1;A[m].r=x2;A[m].h=y1;A[m].t=1;
B[m].l=y1;B[m].r=y2;B[m].h=x1;B[m].t=1;
A[++m].l=x1;A[m].r=x2;A[m].h=y2;A[m].t=2;
B[m].l=y1;B[m].r=y2;B[m].h=x2;B[m].t=2;
}
sort(A+1,A+1+m,cmp);sort(B+1,B+1+m,cmp);
for(int i=1;i<=m;i++){
int l=A[i].l,r=A[i].r;
for(int j=l;j<r;j++){
if(A[i].t==1){if(f[j]==0)ans++;f[j]++;}
else{f[j]--;if(f[j]==0)ans++;}
}
}
memset(f,0,sizeof(f));
for(int i=1;i<=m;i++){
int l=B[i].l,r=B[i].r;
for(int j=l;j<r;j++){
if(B[i].t==1){if(f[j]==0)ans++;f[j]++;}
else{f[j]--;if(f[j]==0)ans++;}
}
}
printf("%d\n",ans);
}