#include<iostream>
using namespace std;

void merge(int a[][4], int b[][4], int p, int q, int r)
{
    int i=p,k=p;
    int j=q+1;

    while( i<q+1 && j<r+1)
    {
        if(a[i][0]>a[j][0])
        {
            b[k][0]=a[j][0];
            b[k][1]=a[j][1];
            b[k][2]=a[j][2];
            b[k++][3]=a[j++][3];
        }
        else
        {
            b[k][0]=a[i][0];
            b[k][1]=a[i][1];
            b[k][2]=a[i][2];
            b[k++][3]=a[i++][3];
        }
    }

    while(i<q+1)
    {
            b[k][0]=a[i][0];
            b[k][1]=a[i][1];
            b[k][2]=a[i][2];
            b[k++][3]=a[i++][3];
    }

    while(j<r+1)
    {
        b[k][0]=a[j][0];
        b[k][1]=a[j][1];
        b[k][2]=a[j][2];
        b[k++][3]=a[j++][3];
    }

    for(int i=p;i<r+1;i++)
    {
        a[i][0]=b[i][0];
        a[i][1]=b[i][1];
        a[i][2]=b[i][2];
        a[i][3]=b[i][3];
    }
}

void merge2(int a[][4], int b[][4], int p, int q, int r)
{
    int i=p,k=p;
    int j=q+1;

    while( i<q+1 && j<r+1)
    {
        if(a[i][2]>a[j][2])
        {
            b[k][0]=a[j][0];
            b[k][1]=a[j][1];
            b[k][2]=a[j][2];
            b[k++][3]=a[j++][3];
        }
        else
        {
            b[k][0]=a[i][0];
            b[k][1]=a[i][1];
            b[k][2]=a[i][2];
            b[k++][3]=a[i++][3];
        }
    }

    while(i<q+1)
    {
            b[k][0]=a[i][0];
            b[k][1]=a[i][1];
            b[k][2]=a[i][2];
            b[k++][3]=a[i++][3];
    }

    while(j<r+1)
    {
        b[k][0]=a[j][0];
        b[k][1]=a[j][1];
        b[k][2]=a[j][2];
        b[k++][3]=a[j++][3];
    }

    for(int i=p;i<r+1;i++)
    {
        a[i][0]=b[i][0];
        a[i][1]=b[i][1];
        a[i][2]=b[i][2];
        a[i][3]=b[i][3];
    }
}

void merge3(int a[][4], int b[][4], int p, int q, int r)
{
    int i=p,k=p;
    int j=q+1;

    while( i<q+1 && j<r+1)
    {
        if(a[i][1]>a[j][1])
        {
            b[k][0]=a[j][0];
            b[k][1]=a[j][1];
            b[k][2]=a[j][2];
            b[k++][3]=a[j++][3];
        }
        else
        {
            b[k][0]=a[i][0];
            b[k][1]=a[i][1];
            b[k][2]=a[i][2];
            b[k++][3]=a[i++][3];
        }
    }

    while(i<q+1)
    {
            b[k][0]=a[i][0];
            b[k][1]=a[i][1];
            b[k][2]=a[i][2];
            b[k++][3]=a[i++][3];
    }

    while(j<r+1)
    {
        b[k][0]=a[j][0];
        b[k][1]=a[j][1];
        b[k][2]=a[j][2];
        b[k++][3]=a[j++][3];
    }

    for(int i=p;i<r+1;i++)
    {
        a[i][0]=b[i][0];
        a[i][1]=b[i][1];
        a[i][2]=b[i][2];
        a[i][3]=b[i][3];
    }
}

void merge4(int a[][4], int b[][4], int p, int q, int r)
{
    int i=p,k=p;
    int j=q+1;

    while( i<q+1 && j<r+1)
    {
        if(a[i][3]>a[j][3])
        {
            b[k][0]=a[j][0];
            b[k][1]=a[j][1];
            b[k][2]=a[j][2];
            b[k++][3]=a[j++][3];
        }
        else
        {
            b[k][0]=a[i][0];
            b[k][1]=a[i][1];
            b[k][2]=a[i][2];
            b[k++][3]=a[i++][3];
        }
    }

    while(i<q+1)
    {
            b[k][0]=a[i][0];
            b[k][1]=a[i][1];
            b[k][2]=a[i][2];
            b[k++][3]=a[i++][3];
    }

    while(j<r+1)
    {
        b[k][0]=a[j][0];
        b[k][1]=a[j][1];
        b[k][2]=a[j][2];
        b[k++][3]=a[j++][3];
    }

    for(int i=p;i<r+1;i++)
    {
        a[i][0]=b[i][0];
        a[i][1]=b[i][1];
        a[i][2]=b[i][2];
        a[i][3]=b[i][3];
    }
}

void mergesort4(int a[][4], int b[][4], int p, int r)
{
        if(p>=r)
            return;
        int q=(p+r)/2;
        mergesort4(a,b,p,q);
        mergesort4(a,b,q+1,r);
        merge4(a,b,p,q,r);
}

void mergesort3(int a[][4], int b[][4], int p, int r)
{
        if(p>=r)
            return;
        int q=(p+r)/2;
        mergesort3(a,b,p,q);
        mergesort3(a,b,q+1,r);
        merge3(a,b,p,q,r);
}

void mergesort2(int a[][4], int b[][4], int p, int r)
{
        if(p>=r)
            return;
        int q=(p+r)/2;
        mergesort2(a,b,p,q);
        mergesort2(a,b,q+1,r);
        merge2(a,b,p,q,r);
}

void mergesort(int a[][4], int b[][4], int p, int r)
{
        if(p>=r)
            return;
        int q=(p+r)/2;
        mergesort(a,b,p,q);
        mergesort(a,b,q+1,r);
        merge(a,b,p,q,r);
}



void print4(int a[][4], int n)
{
    for(int i=1;i<n+1;i++)
        cout<<a[i][0]<<" "<<a[i][1]<<" "<<a[i][2]<<" "<<a[i][3]<<endl;
}



void swap4(int a[4], int b[4])
{
    int temp=b[0];
    b[0]=a[0];
    a[0]=temp;
    temp=b[1];
    b[1]=a[1];
    a[1]=temp;
    temp=b[2];
    b[2]=a[2];
    a[2]=temp;
    temp=b[3];
    b[3]=a[3];
    a[3]=temp;
}




int main()
{
    int n;
    cin>>n;
    int m=n;
    int polozenie[n+1][4];
    int pol_x[n+1][4];
    int tempx[n+1][4];
    for(int i=1;i<n+1;i++)
    {
        cin>>polozenie[i][0]>>polozenie[i][2]>>polozenie[i][1]>>polozenie[i][3]; //x1,x2,y1,y2 0-x1 1-y1 2-x2 3-y2
        pol_x[i][0]=polozenie[i][0];
        pol_x[i][1]=polozenie[i][1];
        pol_x[i][2]=polozenie[i][2];
        pol_x[i][3]=polozenie[i][3];
    }

    mergesort(pol_x,tempx,1,n);
    //print4(pol_x,n);
    int zmiana=1;
    while((zmiana!=0))
    {
        //if(m==3)
            //cout<<"1 petla"<<endl;
        zmiana=0;
        for(int i=1;i<m+1;i++)
        {
            //if(m==3)
             //cout<<"2 petla. "<<"i jest równe "<<i<<endl;
            bool wew_zmiana=false;
            int j;
            for(j=i+1;(pol_x[i][2]>pol_x[j][0])&&(j<m+1);j++)
            {
                //if(m==3)
                //cout<<"3 petla. "<<"j jest równe "<<j<<endl;
                if(pol_x[i][1]>=pol_x[j][1]) //y1i>=y1j
                {
                    //if(m==3)
                    //cout<<"1 if. "<<pol_x[i][1]<<"<"<<pol_x[j][3]<<endl;
                    if(pol_x[i][1]<pol_x[j][3])
                    {
                        m--;
                        zmiana++;
                        wew_zmiana=true;
                        //cout<<"Zmiana: "<<i<<" ("<<pol_x[i][0]<<" "<<pol_x[i][1]<<" "<<pol_x[i][2]<<" "<<pol_x[i][3]<<") <-> "<<j<<" ("<<pol_x[j][0]<<" "<<pol_x[j][1]<<" "<<pol_x[j][2]<<" "<<pol_x[j][3]<<")"<<endl;
                        pol_x[i][1]=pol_x[j][1];
                        pol_x[i][2]=max(pol_x[i][2],pol_x[j][2]);
                        pol_x[i][3]=max(pol_x[i][3],pol_x[j][3]);

                        //cout<<"Wynik: "<<i<<" <-> "<<j<<" Polozenie: "<<pol_x[i][0]<<" "<<pol_x[i][1]<<" "<<pol_x[i][2]<<" "<<pol_x[i][3]<<endl;
                        break;
                    }

                }
                if(pol_x[i][1]<=pol_x[j][1])//y1i<=y1j
                {
                    //if(m==3)
                    //cout<<"1 if. "<<pol_x[i][3]<<">"<<pol_x[j][1]<<endl;
                    if(pol_x[i][3]>pol_x[j][1])
                    {
                        m--;
                        zmiana++;
                        wew_zmiana=true;
                        //cout<<"Zmiana: "<<i<<" ("<<pol_x[i][0]<<" "<<pol_x[i][1]<<" "<<pol_x[i][2]<<" "<<pol_x[i][3]<<") <-> "<<j<<" ("<<pol_x[j][0]<<" "<<pol_x[j][1]<<" "<<pol_x[j][2]<<" "<<pol_x[j][3]<<")"<<endl;
                        pol_x[i][1]=pol_x[i][1];
                        pol_x[i][2]=max(pol_x[i][2],pol_x[j][2]);
                        pol_x[i][3]=max(pol_x[i][3],pol_x[j][3]);

                        //cout<<"Wynik: "<<i<<" <-> "<<j<<" Polozenie: "<<pol_x[i][0]<<" "<<pol_x[i][1]<<" "<<pol_x[i][2]<<" "<<pol_x[i][3]<<endl;
                        break;
                    }
                }

            }

            if(wew_zmiana==true)
            {
                while(j<m+1)
                {
                    swap4(pol_x[j],pol_x[j+1]);
                    j++;
                }

            }
        }
        /*if(m==3)
        {
            print4(pol_x,m);

        }*/
        //cout<<"Petla max zewn zmian: "<<zmiana<<endl;
        //print4(pol_x,m);

    }

    for(int i=1;i<m;i++)
    {
        if(pol_x[i][0]==pol_x[i+1][0])
        {
            int j;
            for(j=i;(pol_x[i][0]==pol_x[j][0])&&(j<m+1);j++);
            mergesort2(pol_x,tempx,i,j-1);
            i=j;
        }
    }

    for(int i=1;i<m;i++)
    {
        if(pol_x[i][0]==pol_x[i+1][0])
        {
            if(pol_x[i][2]==pol_x[i+1][2])
            {
                int j;
                for(j=i;(pol_x[i][2]==pol_x[j][2])&&(j<m+1);j++);
                    mergesort3(pol_x,tempx,i,j-1);
                i=j;
            }

        }
    }



    cout<<m<<endl;
    for(int i=1;i<m+1;i++)// /porzadek leksykograficzny - popraw !
        cout<<pol_x[i][0]<<" "<<pol_x[i][2]<<" "<<pol_x[i][1]<<" "<<pol_x[i][3]<<endl;
    return 0;
}
