#include <cstdio>
#include<string>
#define maxn 50001
struct nod { int x, y, z;nod(){};nod(int a, int b, int c){x=a; y=b;z=c;};};
nod a[maxn];
int n;
void read()
{
freopen("inundatii.in","r",stdin);
scanf("%d\n", &n);
int i;
for(i=1;i<=n;++i) scanf("%d %d %d\n", &a[i].x, &a[i].y, &a[i].z);
}
inline int sgn(int a)
{
if(a<0) return -a;
return a;
}
inline long long dist(nod a, nod b)
{
return (long long)sgn(a.x-b.x)+sgn(a.y-b.y)+sgn(a.z-b.z);
}
long long f(nod t)
{
long long sum=0;
int i;
sum+=(long long)dist(t, a[1]);
for(i=2;i<=n;++i){ ++t.x; ++t.y; ++t.z; sum+=(long long)dist(t, a[i]);}
return sum;
}
inline int min(int a, int b)
{
if(a<b) return a;
return b;
}
void solve()
{
nod m,t;
int i, j,k;
m.x=0;m.y=0;m.z=0;
long long mx=0, my=0, mz=0;
for(i=1;i<=n;++i) mx+=(long long)a[i].x, my+=(long long)a[i].y, mz+=(long long)a[i].z;
//printf("%d\n", n);
mx/=n;
my/=n;
mz/=n;
m.x=mx;
m.y=my;
m.z=mz;
int cnt=10000;
long long sum=0, sol=0x3f3f3f3f;
sum+=dist(a[1], m);
#define ll long long
for(i=2;i<=n;++i){++m.x; ++m.y;++m.z; sum+=(ll)dist(a[i], m);}
m.x=mx;m.y=my;m.z=mz;
/*
for(i=1;i<=n;++i) m.x+=a[i].x, m.y+=a[i].y, m.z+=a[i].z;
m.x/=n;
m.y/=n;
m.z/=n;
*/
sol=sum;
int ok;
#define cn continue
#define C 200000000
while(cnt>0)
{
//ok=1;
// printf("%d\n", cnt);
t.x=m.x+cnt;
t.y=m.y;
t.z=m.z;
sum=f(t);
if(sum<sol){ sol=sum; m=t;cn;}
//sol=min(sum, sol);
if(m.x-cnt>=0)
{
t.x=m.x-cnt;
t.y=m.y;
t.z=m.z;
sum=f(t);
//sol=min(f(t), sol);
if(sum<sol) { sol=sum;m=t;cn;}
}
t.x=m.x;
t.y=m.y+cnt;
t.z=m.z;
sum=f(t);
if(sum<sol) { sol=sum;m=t; cn;}
if(m.y-cnt>=0)
{
t.x=m.x;
t.y=m.y-cnt;
t.z=m.z;
sum=f(t);
if(sum<sol) { sol=sum;m=t;cn;}
}
t.x=m.x;
t.y=m.y;
t.z=m.z+cnt;
sum=f(t);
if(sum<sol){ sol=sum;m=t;cn;}
if(m.z-cnt>=0)
{
t.x=m.x;
t.y=m.y;
t.z=m.z-cnt;
sum=f(t);
if(sum<sol){ sol=sum;m=t;cn;}
}
/*
t.x=m.x+cnt;
t.y=m.y+cnt;
t.z=m.z;
sum=f(t);
if(sum<sol){ sol=sum;m=t;cn;}
if(m.x-cnt>=0)
{
t.x=m.x-cnt;
t.y=m.y+cnt;
t.z=m.z;
sum=f(t);
if(sum<sol) { sol=sum;m=t; cn;}
}
if(m.y-cnt>=0)
{
t=nod(m.x+cnt, m.y-cnt, m.z);
sum=f(t);
if(sum<sol){sol=sum;m=t;cn;}
}
t=nod(m.x-cnt, m.y-cnt, m.z);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x+cnt, m.y, m.z+cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x+cnt, m.y, m.z-cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x-cnt, m.y, m.z+cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x-cnt, m.y, m.z-cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x, m.y+cnt, m.z+cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x, m.y+cnt, m.z-cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x, m.y-cnt, m.z+cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x, m.y-cnt, m.z-cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x+cnt, m.y+cnt, m.z+cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x+cnt, m.y+cnt, m.z-cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x+cnt, m.y-cnt, m.z+cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x-cnt, m.y+cnt, m.z+cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x-cnt, m.y-cnt, m.z+cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x-cnt, m.y+cnt, m.z-cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x+cnt, m.y-cnt, m.z-cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
t=nod(m.x-cnt, m.y-cnt, m.z-cnt);
sum=f(t);
if(sum<sol) { sol=sum; m=t; cn;}
*/
if(cnt!=0) cnt>>=1;
}
freopen("inundatii.out","w",stdout);
printf("%lld\n", sol);
}
void solve2()
{
int i, j, k;
nod m;
int sol=0x3f3f3f3f;
for(i=0;i<=300;++i)
for(j=0;j<=300;++j)
for(k=0;k<=300;++k)
{
m=nod(i, j, k);
sol=min(f(m), sol);
}
printf("%d\n", sol);
m.x=2;
m.y=2;
m.z=0;
// printf("%d\n", f(m));
}
int main()
{
read();
solve();
// solve2();
return 0;
}