#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

int root;

struct rect
{
    int ind,Dx,Dy,Ux,Uy,S;
};

vector <int> a[2006];

rect r[2006];

bool f(const rect &u, const rect &v)
{
    if ( u.S > v.S ) return true;
    if ( u.S < v.S ) return false;
    if ( u.ind < v.ind ) return true;
    return false;
}

bool inside(int i, int j)
{
    if ( r[i].Dx < r[j].Dx && r[i].Dy < r[j].Dy && r[i].Ux > r[j].Ux && r[i].Uy > r[j].Uy ) return true;
    return false;
}

struct point
{
    int x,y;
};

bool inside1(int i, point d)
{
    if ( r[i].Dx < d.x && r[i].Ux > d.x && r[i].Dy < d.y && r[i].Uy > d.y ) return true;
    return false;
}

int main()
{
    int n,q,i,j;
    point o,w;
    scanf ("%d",&n);
    for ( i=1; i<=n; i++ )
    {
        r[i].ind = i;
        scanf ("%d%d%d%d",&r[i].Dx,&r[i].Dy,&r[i].Ux,&r[i].Uy);
        r[i].S = ( r[i].Ux - r[i].Dx ) * ( r[i].Uy - r[i].Dy );
    }
    
    sort (r+1,r+n+1,f);
        
    r[0].Dx = -1;
    r[0].Dy = -1;
    r[0].Ux = 1000001;
    r[0].Uy = 1000001;
    root = 0;
    
    int kid;
    
    for ( i=1; i<=n; i++ )
    {
        int curr = root;
        do
        {
            kid = curr;
            for ( j=0; j<a[curr].size(); j++ )
                if ( inside( a[curr][j], i ) ) kid = a[curr][j];
            if ( kid == curr )
            {
                a[curr].push_back(i);
                break;
            }
            curr = kid;
        }
        while (1);
    }
    
 //   for ( int i=0; i<a[2].size(); i++ ) printf ("--- %d\n",a[2][i]);
    
    scanf ("%d",&q);
    int flag;
    for ( i=1; i<=q; i++ )
    {
        scanf ("%d%d%d%d",&o.x, &o.y, &w.x, &w.y);
        int curr_,br=0,kid1,kid2,curr = root;
        flag = 0;
        do 
        {
            kid1 = kid2 = curr;
            for ( j=0; j<a[curr].size(); j++ )
            {
                if ( inside1( a[curr][j], o ) ) kid1 = a[curr][j];
                if ( inside1( a[curr][j], w ) ) kid2 = a[curr][j];
            }
            if ( kid1 != kid2 )
            {
                break;
            }
            if ( kid1 == curr ) { flag = 1; break; }
            curr = kid1;
        }
        while (1);
        
        if ( !flag )
        {
            curr_ = curr;
            if ( kid1 != curr ) 
            {
                do
                {
                    kid1 = curr;
                    for ( j=0; j<a[curr].size(); j++ )
                    {
                        if ( inside1( a[curr][j], o ) ) kid1 = a[curr][j];
                    }
                    
                    if ( kid1 == curr ) break;
                    br++;
                    curr = kid1;
                }
                while (1);
            }
            
            if ( kid2 != curr_ )
            {
                curr = curr_;
                do
                {
                    kid2 = curr;
                    for ( j=0; j<a[curr].size(); j++ )
                    {
                        if ( inside1( a[curr][j], w ) ) kid2 = a[curr][j];
                    }
                    if ( kid2 == curr ) break;
                    br++;
                    curr = kid2;
                }
                while (1);
            }
        }
            
        printf ("%d\n",br);
    }  
}