#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>

#define MAX    9

typedef struct {
   long iXStart, iYStart, iXEnd, iYEnd;
} stBodiesPostions;

long i,j,iN,iTotalD1,iTotalD2;
short abVisited[MAX];
long aiDistances[MAX][MAX];
stBodiesPostions atBodies[MAX];

void search(long iVertex, long iDistance, long iBodies) {
   long i;
   
   abVisited[iVertex]= 1;
   if (iBodies==iN)
      iTotalD2= iDistance;
   for (i= 0; i< iN; i++)
      if ((!abVisited[i]) & (iDistance+aiDistances[iVertex][i]< iTotalD2))
	 search(i, iDistance+aiDistances[iVertex][i], iBodies+1);
   abVisited[iVertex]= 0;
}

int main(void) {
   scanf("%ld", &iN);
   iTotalD1= 0;
   for (i= 0; i< iN; i++) {
      scanf("%ld %ld %ld %ld", &atBodies[i].iXStart, &atBodies[i].iYStart,
         &atBodies[i].iXEnd, &atBodies[i].iYEnd);
      iTotalD1+= abs(atBodies[i].iXEnd -atBodies[i].iXStart) +
         abs(atBodies[i].iYEnd -atBodies[i].iYStart);
      for (j= i-1; j>= 0; j--) {
	 aiDistances[i][j]= abs(atBodies[i].iXEnd -atBodies[j].iXStart) +
            abs(atBodies[i].iYEnd -atBodies[j].iYStart);
	 aiDistances[j][i]= abs(atBodies[j].iXEnd -atBodies[i].iXStart) +
            abs(atBodies[j].iYEnd -atBodies[i].iYStart);
      }
   }
   iTotalD2= LONG_MAX;
   memset(abVisited, 0, sizeof(abVisited));
   for (i= 0; i< iN; i++)
      search(i, atBodies[i].iXStart +atBodies[i].iYStart, 1);
   printf("%ld\n",iTotalD1+iTotalD2);

   return(0);
}
