#include<bits/stdc++.h>
using namespace std;
const int N=310;
bool s[N][N];
int m,t[N][N];
int dx[]={0,0,0,-1,1},dy[]={0,1,-1,0,0};
struct stu{
    int x,y,t;
}home;
int main(){
    cin>>m;
    int sx,sy,st;
  while(m--){
      cin>>sx>>sy>>st;
      for(int i=0;i<5;i++){
          int ex=sx+dx[i],ey=sy+dy[i];
         if(ex>=0&&ey>=0&&(st<t[ex][ey]||t[ex][ey]==0))
              t[ex][ey]=st;
      } 
  }
   queue<stu>q; 
   home.x=0,home.y=0,home.t=0;
    q.push({home});
    s[0][0]=1;
    while(q.size()){
        auto k=q.front();
        q.pop();
        for(int i=1;i<5;i++){
            int x=k.x+dx[i],y=k.y+dy[i],ti=k.t;
 if(x>=0&&y>=0&&!s[x][y]&&(ti+1<t[x][y]||t[x][y]==0)){
            s[x][y]=1;
             stu tp;   
     tp.x=x;
     tp.y=y;
     tp.t=ti+1;
     q.push(tp);
     if(t[x][y]==0){
         cout<<tp.t;
         return 0;
     }
            }
            
        }
    }
    
    cout<<-1;
    
    return 0;
}