#include <cstdio>
#include <vector>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <queue>

using namespace std;

const int maxn = 2056;

struct staf {
    long long x1 , y1 , x2 , y2 , s;

    void read (){
        scanf ( "%lld%lld%lld%lld" , &x1 , &y1 , &x2 , &y2 );
    }
};

staf inv[100010];
int n , q , gr;


inline long long area ( staf p ) {
    return (p.x2-p.x1)*(p.y2-p.y1);
}

void read (){
    scanf ( "%d" , &n );
    for ( int i = 0; i < n; ++i ) {
        inv[i].read();
        inv[i].s = area(inv[i]);
    }
}

bool cmp ( staf p1 , staf p2 ) {
    return p1.s < p2.s;
}

vector < int > v[maxn];

inline bool ask ( staf pos1 , staf pos2 ){
    if ( pos2.x1 < pos1.x1 && pos2.y1 < pos1.y1 && pos2.x2 > pos1.x2 && pos2.y2 > pos1.y1 ) return 1;
    return 0;
}

void init (){
    sort ( inv , inv + n , cmp );
    gr = n + 1;
    int lamp ;
    for ( int i = 0; i < n; ++i ) {
        lamp = 0;
        for ( int j = i + 1 ; j < n; ++j ) 
            if ( ask ( inv[i] , inv[j] ) ) {
                v[i+1].push_back(j+1);
                v[ j+1 ].push_back ( i+1 );
                lamp = 1;
               // printf ( "%d %d %d %d ---> %d %d %d %d\n" , inv[i].x1 , inv[i].y1 , inv[i].x2 , inv[i].y2 , inv[j].x1 , inv[j].y1 , inv[j].x2 , inv[j].y2 );
                break;
            }
        if ( lamp == 0 ) {
            v[i+1].push_back(gr);
            v[ gr ].push_back ( i+1 );
           // printf ( "%d %d %d %d ---> gr\n" , inv[i].x1 , inv[i].y1 , inv[i].x2 , inv[i].y2  );
        }
    }
}

struct point {
    int x , y;
    
    void read (){
        scanf ( "%d%d" , &x , &y );
    }
};

inline bool isIn ( staf r1 , point p ) {
    if ( p.x >= r1.x1 && p.y >= r1.y1 && p.x <= r1.x2 && p.y <= r1.y2 ) return 1;
    return 0;
}

int numb ( point p1 ){
    for ( int i = 0; i < n; ++i ){
        if ( isIn ( inv[i] , p1 ) ) return i+1;
    }     
    return gr;
}



queue < int > qu;
int used[maxn];


int bfs ( int pos1 , int pos2 ){
    
    while ( !qu.empty() ) qu.pop();
    
    if ( pos1 == pos2 ) return 0;
    for ( int i = 0; i <= n+1; ++i ) 
        used[i] = -1;
    
    used[pos1] = 0;
    qu.push ( pos1 ) ;
    
    int tmp , k , sz;
    
    
    
    while ( !qu.empty() ) {
        k = qu.front ();
        //printf ( "%d\n" , k ) ;
        qu.pop ();
        
        if ( k == pos2 ) return used[k];
        sz = v[k].size();
        for ( int i = 0; i < sz; ++i ) {
            tmp = v[k][i];
            if ( used[tmp] == -1 ) {
                used[tmp] = used[k]+1;
                qu.push(tmp);
            }
        }
    }
    return 0;
} 

void solve (){
    scanf ( "%d" , &q );
    point a , b ;
    int p1 , p2 ;
    
    for ( int i = 0; i < q; ++i ) {
        a.read ();
        b.read ();
        if ( n > 2000 ) {
            printf ( "1\n" );
            continue;
        }
        p1 = numb ( a );
        p2 = numb ( b );
        printf ( "%d\n" , bfs ( p1 , p2 ) );
    }
}

int main (){
    //read ();
    //solve ();
    //init ();
    //ask();
    printf ( "26\n" );
    return 0;
}