#include <bits/stdc++.h>
using namespace std;



#define pb push_back
#define lb lower_bound
#define ull unsigned ll
#define gcd(a,b) __gcd(a,b)
#define pii pair<int,int>
#define all(x) x.begin(),x.end()
#define ll long long
#define mp make_pair
//#define pi acos(-1)

#define mod 1000000007
#define inf (1LL<<31)-1


map<int,vector<pii> > X,Y;
vector<pair<int,pii> > V;

const int mx = 200005;
int tree[mx], pos[mx],N;

int getPos(int n)
{
    return (int) (lb(pos,pos+N,n)-pos) + 1;
}

int update(int idx,int val)
{
    while(idx<=N)
    {
        tree[idx] += val;
        idx += (idx&-idx);
    }
    return 0;
}

int sum(int idx)
{
    int res = 0;
    while(idx>0)
    {
        res += tree[idx];
        idx -= (idx&-idx);
    }
    return  res;
}



int main()
{
    int i,j,k,n;
    scanf("%d",&n);
    int x1,y1,x2,y2;
    for(i=0;i<n;i++)
    {
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
        if(x1>x2) swap(x1,x2);
        if(y1>y2) swap(y1,y2);
        if(x1==x2) Y[x1].pb(mp(y1,y2));
        else X[y1].pb(mp(x1,x2));
        pos[N++] = y1;
        pos[N++] = y2;
    }
    sort(pos,pos+N);
    N = (int) (unique(pos,pos+N)-pos);

    map<int,vector<pii> > :: iterator it;

    ll ans = 0;
    for(it=X.begin();it!=X.end();it++)
    {
        vector<pii>& vt = it -> second;
        sort(all(vt));
        int y = (it -> first);
        int x1 = vt[0].first;
        int x2 = vt[0].second;
        int sz = vt.size();
        for(i=1;i<sz;i++)
        {
            if(x2<vt[i].first)
            {
                ans += (x2-x1+1);
                V.pb(mp(x1,mp(-1,y)));
                V.pb(mp(x2+1,mp(1,y)));
                x1 = vt[i].first;
                x2 = vt[i].second;
            }
            else x2 = max(x2,vt[i].second);
        }
        ans += (x2-x1+1);
        V.pb(mp(x1,mp(-1,y)));
        V.pb(mp(x2+1,mp(1,y)));
    }


    int m = V.size(), p = 0;
    sort(all(V));
    for(it=Y.begin();it!=Y.end();it++)
    {
        vector<pii>& vt = it -> second;
        sort(all(vt));
        int x = (it -> first);

        while(p<m&&x>=V[p].first)
        {
            int t1 = V[p].second.first;
            int t2 = V[p].second.second;
            t2 = getPos(t2);
            update(t2,-t1);
            p++;
        }

        int y1 = vt[0].first;
        int y2 = vt[0].second;
        int sz = vt.size();
        for(i=1;i<sz;i++)
        {
            if(y2<vt[i].first)
            {
                ans += (y2-y1+1);
                y2 = getPos(y2);
                y1 = getPos(y1);
                ans -= sum(y2) - sum(y1-1);
                y2 = vt[i].second;
                y1 = vt[i].first;
            }
            else y2 = max(y2,vt[i].second);
        }
        ans += (y2-y1+1);
        y2 = getPos(y2);
        y1 = getPos(y1);
        ans -= sum(y2) - sum(y1-1);
    }
    cout << ans << endl;
}