#include <iostream>
#include <vector>
using namespace std;

struct ik{
long long i,k ;
};

ik brtacaka(int n){
    int k=0,i=2;
    ik a ;
    while(k<n){
        i++ ;
        k=(i*(i-1)*(i-2))/6 ;
    }
    if(k==n){
        a.i=i ;
        a.k=k ;
        return a ;
    }
    else{
        a.i=i-1 ;
        a.k=((i-3)*(i-1)*(i-2))/6 ;
        return a ;
    }
}

int main()
{
    int n;
    long long kraj=0,red=0;
    ik bt,p;
    vector <ik> v ;
    cin >> n ;
    while(n!=0){
        bt=brtacaka(n) ;
        for(long long i=kraj*2+1; i<=kraj*2+bt.i; i++){
            p.i=red;
            p.k=i;
            v.push_back(p) ;
        }
        n-=bt.k ;
        kraj=kraj*2+bt.i ;
        red++ ;
    }
    cout << v.size() << endl ;
    for(int i=0; i<v.size(); i++){
        cout << v[i].i << " " << v[i].k << endl ;
    }
    return 0;
}