#include<bits/stdc++.h>
using namespace std;
int dx[5]={0,0,0,1,-1};
int dy[5]={0,1,-1,0,0};
int a[305][305],b[305][305];
struct node{
int x,y,sum;
};
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int c,d,t;
cin>>c>>d>>t;
for(int j=0;j<5;j++){
if(c+dx[j]>=0&&c+dx[j]<=300&&d+dy[j]>=0&&d+dy[j]<=300){
a[c+dx[j]][d+dy[j]]=t;
}
}
}
queue<node>q;
node F={0,0,0};
b[0][0]=1;
q.push(F);
while(!q.empty()){
node N=q.front();
q.pop();
if(a[N.x][N.y]==0){
cout<<N.sum;
return 0;
}
for(int i=1;i<5;i++){
int sx=N.x+dx[i];
int sy=N.y+dy[i];
if(sx>=0&&sx<=300&&sy>=0&&sy<=300&&!b[sx][sy]){
if(N.sum+1<a[sx][sy]){
node E={sx,sy,N.sum+1};
b[sx][sy]=1;
q.push(E);
}
if(a[sx][sy]==0){
cout<<N.sum+1;
return 0;
}
}
}
}
cout<<-1;
return 0;
}