#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("inline")
#include<bits/stdc++.h>
using namespace std;
inline int my_getchar_unlocked( ) {
static char buf[ 1048576 ] ;
static int s = 1048576 ;
static int e = 1048576 ;
if ( s == e && e == 1048576 ) {
e = fread_unlocked( buf, 1 , 1048576 , stdin ) ;
s = 0 ;
}
if ( s == e) {
return EOF ;
}
return buf[ s++ ] ;
}
inline void rd( int & x) {
int k;
int m= 0 ;
x= 0 ;
for ( ;; ) {
k = my_getchar_unlocked( ) ;
if ( k== '-' ) {
m= 1 ;
break ;
}
if ( '0' <= k&& k<= '9' ) {
x= k- '0' ;
break ;
}
}
for ( ;; ) {
k = my_getchar_unlocked( ) ;
if ( k< '0' || k> '9' ) {
break ;
}
x= x* 10 + k- '0' ;
}
if ( m) {
x= - x;
}
}
struct MY_WRITER{
char buf[ 1048576 ] ;
int s;
int e;
MY_WRITER( ) {
s = 0 ;
e = 1048576 ;
}
~MY_WRITER( ) {
if ( s) {
fwrite_unlocked( buf, 1 , s, stdout ) ;
}
}
}
;
MY_WRITER MY_WRITER_VAR;
void my_putchar_unlocked( int a) {
if ( MY_WRITER_VAR.s == MY_WRITER_VAR.e ) {
fwrite_unlocked( MY_WRITER_VAR.buf , 1 , MY_WRITER_VAR.s , stdout ) ;
MY_WRITER_VAR.s = 0 ;
}
MY_WRITER_VAR.buf [ MY_WRITER_VAR.s ++ ] = a;
}
inline void wt_L( char a) {
my_putchar_unlocked( a) ;
}
inline void wt_L( int x) {
int s= 0 ;
int m= 0 ;
char f[ 10 ] ;
if ( x< 0 ) {
m= 1 ;
x= - x;
}
while ( x) {
f[ s++ ] = x% 10 ;
x/ = 10 ;
}
if ( ! s) {
f[ s++ ] = 0 ;
}
if ( m) {
my_putchar_unlocked( '-' ) ;
}
while ( s-- ) {
my_putchar_unlocked( f[ s] + '0' ) ;
}
}
inline void wt_L( const char c[ ] ) {
int i= 0 ;
for ( i= 0 ; c[ i] ! = '\0 ' ; i++ ) {
my_putchar_unlocked( c[ i] ) ;
}
}
template < class S> inline void arrInsert( const int k, int & sz, S a[ ] , const S aval) {
int i;
sz++ ;
for ( i= sz- 1 ; i> k; i-- ) {
a[ i] = a[ i- 1 ] ;
}
a[ k] = aval;
}
template < class S, class T> inline void arrInsert( const int k, int & sz, S a[ ] , const S aval, T b[ ] , const T bval) {
int i;
sz++ ;
for ( i= sz- 1 ; i> k; i-- ) {
a[ i] = a[ i- 1 ] ;
}
for ( i= sz- 1 ; i> k; i-- ) {
b[ i] = b[ i- 1 ] ;
}
a[ k] = aval;
b[ k] = bval;
}
template < class S, class T, class U> inline void arrInsert( const int k, int & sz, S a[ ] , const S aval, T b[ ] , const T bval, U c[ ] , const U cval) {
int i;
sz++ ;
for ( i= sz- 1 ; i> k; i-- ) {
a[ i] = a[ i- 1 ] ;
}
for ( i= sz- 1 ; i> k; i-- ) {
b[ i] = b[ i- 1 ] ;
}
for ( i= sz- 1 ; i> k; i-- ) {
c[ i] = c[ i- 1 ] ;
}
a[ k] = aval;
b[ k] = bval;
c[ k] = cval;
}
template < class S, class T, class U, class V> inline void arrInsert( const int k, int & sz, S a[ ] , const S aval, T b[ ] , const T bval, U c[ ] , const U cval, V d[ ] , const V dval) {
int i;
sz++ ;
for ( i= sz- 1 ; i> k; i-- ) {
a[ i] = a[ i- 1 ] ;
}
for ( i= sz- 1 ; i> k; i-- ) {
b[ i] = b[ i- 1 ] ;
}
for ( i= sz- 1 ; i> k; i-- ) {
c[ i] = c[ i- 1 ] ;
}
for ( i= sz- 1 ; i> k; i-- ) {
d[ i] = d[ i- 1 ] ;
}
a[ k] = aval;
b[ k] = bval;
c[ k] = cval;
d[ k] = dval;
}
int main( ) {
int i;
int K;
rd( K) ;
int N;
int mat[ 20 ] [ 20 ] = { } ;
int x;
int y;
int nx;
int M;
int A[ 400 ] ;
int B[ 400 ] ;
if ( K== 1 ) {
wt_L( "2 1\n 1 2" ) ;
wt_L( '\n ' ) ;
return 0 ;
}
if ( K== 2 ) {
wt_L( "4 4\n 1 2\n 1 3\n 2 3\n 3 4" ) ;
wt_L( '\n ' ) ;
return 0 ;
}
if ( K <= 20 ) {
int i;
wt_L( K) ;
wt_L( ' ' ) ;
wt_L( K) ;
wt_L( '\n ' ) ;
for ( i= ( 0 ) ; i< ( K) ; i++ ) {
wt_L( i+ 1 ) ;
wt_L( ' ' ) ;
wt_L( ( i+ 1 ) % K+ 1 ) ;
wt_L( '\n ' ) ;
}
return 0 ;
}
for ( x= ( 0 ) ; x< ( 20 ) ; x++ ) {
if ( ( x* x + x - 2 ) / 2 + x - 1 > K) {
break ;
}
}
x-- ;
y = K - ( ( x* x + x - 2 ) / 2 + x - 1 ) + 2 ;
for ( i= ( 0 ) ; i< ( x) ; i++ ) {
int j;
for ( j= ( i+ 1 ) ; j< ( x) ; j++ ) {
if ( i! = j) {
mat[ i] [ j] = 1 ;
}
}
}
mat[ x- 2 ] [ x- 1 ] = 0 ;
mat[ x- 1 ] [ x] = 1 ;
for ( i= ( 0 ) ; i< ( y) ; i++ ) {
nx = x + i + 1 ;
if ( i == y - 1 ) {
nx = x- 2 ;
}
mat[ x+ i] [ nx] = mat[ nx] [ x+ i] = 1 ;
}
auto KrdatlYV = ( ( x + y) ) ;
auto ao_dF3pO = ( ( 0 ) ) ;
N= KrdatlYV;
M= ao_dF3pO;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
int j;
for ( j= ( i+ 1 ) ; j< ( N) ; j++ ) {
if ( mat[ i] [ j] ) {
arrInsert( M,M,A,i,B,j) ;
}
}
}
wt_L( N) ;
wt_L( ' ' ) ;
wt_L( M) ;
wt_L( '\n ' ) ;
for ( i= ( 0 ) ; i< ( M) ; i++ ) {
wt_L( A[ i] + 1 ) ;
wt_L( ' ' ) ;
wt_L( B[ i] + 1 ) ;
wt_L( '\n ' ) ;
}
return 0 ;
}
// cLay version 20210917-1
// --- original code ---
// int @K;
// int N, mat[20][20] = {}, x, y, nx;
// int M, A[400], B[400];
//
// if(K==1) wt("2 1\n1 2"), return 0;
// if(K==2) wt("4 4\n1 2\n1 3\n2 3\n3 4"), return 0;
// if(K <= 20){
// wt(K, K);
// rep(i,K) wt(i+1, (i+1)%K+1);
// return 0;
// }
//
// rep(x,20) if((x*x + x - 2)/2 + x - 1 > K) break;
// x--;
// y = K - ((x*x + x - 2)/2 + x - 1) + 2;
//
// rep(i,x) rep(j,i+1,x) if(i!=j) mat[i][j] = 1;
// mat[x-2][x-1] = 0;
// mat[x-1][x] = 1;
// rep(i,y){
// nx = x + i + 1;
// if(i == y - 1) nx = x-2;
// mat[x+i][nx] = mat[nx][x+i] = 1;
// }
//
// (N, M) = (x + y, 0);
// rep(i,N) rep(j,i+1,N) if(mat[i][j]) arrInsert(M,M,A,i,B,j);
// wt(N,M);
// rep(i,M) wt(A[i]+1,B[i]+1);
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoInVucm9sbC1sb29wcyIpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJpbmxpbmUiKQojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbmxpbmUgaW50IG15X2dldGNoYXJfdW5sb2NrZWQoKXsKICBzdGF0aWMgY2hhciBidWZbMTA0ODU3Nl07CiAgc3RhdGljIGludCBzID0gMTA0ODU3NjsKICBzdGF0aWMgaW50IGUgPSAxMDQ4NTc2OwogIGlmKHMgPT0gZSAmJiBlID09IDEwNDg1NzYpewogICAgZSA9IGZyZWFkX3VubG9ja2VkKGJ1ZiwgMSwgMTA0ODU3Niwgc3RkaW4pOwogICAgcyA9IDA7CiAgfQogIGlmKHMgPT0gZSl7CiAgICByZXR1cm4gRU9GOwogIH0KICByZXR1cm4gYnVmW3MrK107Cn0KaW5saW5lIHZvaWQgcmQoaW50ICZ4KXsKICBpbnQgazsKICBpbnQgbT0wOwogIHg9MDsKICBmb3IoOzspewogICAgayA9IG15X2dldGNoYXJfdW5sb2NrZWQoKTsKICAgIGlmKGs9PSctJyl7CiAgICAgIG09MTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBpZignMCc8PWsmJms8PSc5Jyl7CiAgICAgIHg9ay0nMCc7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICBmb3IoOzspewogICAgayA9IG15X2dldGNoYXJfdW5sb2NrZWQoKTsKICAgIGlmKGs8JzAnfHxrPic5Jyl7CiAgICAgIGJyZWFrOwogICAgfQogICAgeD14KjEwK2stJzAnOwogIH0KICBpZihtKXsKICAgIHg9LXg7CiAgfQp9CnN0cnVjdCBNWV9XUklURVJ7CiAgY2hhciBidWZbMTA0ODU3Nl07CiAgaW50IHM7CiAgaW50IGU7CiAgTVlfV1JJVEVSKCl7CiAgICBzID0gMDsKICAgIGUgPSAxMDQ4NTc2OwogIH0KICB+TVlfV1JJVEVSKCl7CiAgICBpZihzKXsKICAgICAgZndyaXRlX3VubG9ja2VkKGJ1ZiwgMSwgcywgc3Rkb3V0KTsKICAgIH0KICB9Cn0KOwpNWV9XUklURVIgTVlfV1JJVEVSX1ZBUjsKdm9pZCBteV9wdXRjaGFyX3VubG9ja2VkKGludCBhKXsKICBpZihNWV9XUklURVJfVkFSLnMgPT0gTVlfV1JJVEVSX1ZBUi5lKXsKICAgIGZ3cml0ZV91bmxvY2tlZChNWV9XUklURVJfVkFSLmJ1ZiwgMSwgTVlfV1JJVEVSX1ZBUi5zLCBzdGRvdXQpOwogICAgTVlfV1JJVEVSX1ZBUi5zID0gMDsKICB9CiAgTVlfV1JJVEVSX1ZBUi5idWZbTVlfV1JJVEVSX1ZBUi5zKytdID0gYTsKfQppbmxpbmUgdm9pZCB3dF9MKGNoYXIgYSl7CiAgbXlfcHV0Y2hhcl91bmxvY2tlZChhKTsKfQppbmxpbmUgdm9pZCB3dF9MKGludCB4KXsKICBpbnQgcz0wOwogIGludCBtPTA7CiAgY2hhciBmWzEwXTsKICBpZih4PDApewogICAgbT0xOwogICAgeD0teDsKICB9CiAgd2hpbGUoeCl7CiAgICBmW3MrK109eCUxMDsKICAgIHgvPTEwOwogIH0KICBpZighcyl7CiAgICBmW3MrK109MDsKICB9CiAgaWYobSl7CiAgICBteV9wdXRjaGFyX3VubG9ja2VkKCctJyk7CiAgfQogIHdoaWxlKHMtLSl7CiAgICBteV9wdXRjaGFyX3VubG9ja2VkKGZbc10rJzAnKTsKICB9Cn0KaW5saW5lIHZvaWQgd3RfTChjb25zdCBjaGFyIGNbXSl7CiAgaW50IGk9MDsKICBmb3IoaT0wO2NbaV0hPSdcMCc7aSsrKXsKICAgIG15X3B1dGNoYXJfdW5sb2NrZWQoY1tpXSk7CiAgfQp9CnRlbXBsYXRlPGNsYXNzIFM+IGlubGluZSB2b2lkIGFyckluc2VydChjb25zdCBpbnQgaywgaW50ICZzeiwgUyBhW10sIGNvbnN0IFMgYXZhbCl7CiAgaW50IGk7CiAgc3orKzsKICBmb3IoaT1zei0xO2k+aztpLS0pewogICAgYVtpXSA9IGFbaS0xXTsKICB9CiAgYVtrXSA9IGF2YWw7Cn0KdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4gaW5saW5lIHZvaWQgYXJySW5zZXJ0KGNvbnN0IGludCBrLCBpbnQgJnN6LCBTIGFbXSwgY29uc3QgUyBhdmFsLCBUIGJbXSwgY29uc3QgVCBidmFsKXsKICBpbnQgaTsKICBzeisrOwogIGZvcihpPXN6LTE7aT5rO2ktLSl7CiAgICBhW2ldID0gYVtpLTFdOwogIH0KICBmb3IoaT1zei0xO2k+aztpLS0pewogICAgYltpXSA9IGJbaS0xXTsKICB9CiAgYVtrXSA9IGF2YWw7CiAgYltrXSA9IGJ2YWw7Cn0KdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVCwgY2xhc3MgVT4gaW5saW5lIHZvaWQgYXJySW5zZXJ0KGNvbnN0IGludCBrLCBpbnQgJnN6LCBTIGFbXSwgY29uc3QgUyBhdmFsLCBUIGJbXSwgY29uc3QgVCBidmFsLCBVIGNbXSwgY29uc3QgVSBjdmFsKXsKICBpbnQgaTsKICBzeisrOwogIGZvcihpPXN6LTE7aT5rO2ktLSl7CiAgICBhW2ldID0gYVtpLTFdOwogIH0KICBmb3IoaT1zei0xO2k+aztpLS0pewogICAgYltpXSA9IGJbaS0xXTsKICB9CiAgZm9yKGk9c3otMTtpPms7aS0tKXsKICAgIGNbaV0gPSBjW2ktMV07CiAgfQogIGFba10gPSBhdmFsOwogIGJba10gPSBidmFsOwogIGNba10gPSBjdmFsOwp9CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNzIFY+IGlubGluZSB2b2lkIGFyckluc2VydChjb25zdCBpbnQgaywgaW50ICZzeiwgUyBhW10sIGNvbnN0IFMgYXZhbCwgVCBiW10sIGNvbnN0IFQgYnZhbCwgVSBjW10sIGNvbnN0IFUgY3ZhbCwgViBkW10sIGNvbnN0IFYgZHZhbCl7CiAgaW50IGk7CiAgc3orKzsKICBmb3IoaT1zei0xO2k+aztpLS0pewogICAgYVtpXSA9IGFbaS0xXTsKICB9CiAgZm9yKGk9c3otMTtpPms7aS0tKXsKICAgIGJbaV0gPSBiW2ktMV07CiAgfQogIGZvcihpPXN6LTE7aT5rO2ktLSl7CiAgICBjW2ldID0gY1tpLTFdOwogIH0KICBmb3IoaT1zei0xO2k+aztpLS0pewogICAgZFtpXSA9IGRbaS0xXTsKICB9CiAgYVtrXSA9IGF2YWw7CiAgYltrXSA9IGJ2YWw7CiAgY1trXSA9IGN2YWw7CiAgZFtrXSA9IGR2YWw7Cn0KaW50IG1haW4oKXsKICBpbnQgaTsKICBpbnQgSzsKICByZChLKTsKICBpbnQgTjsKICBpbnQgbWF0WzIwXVsyMF0gPSB7fTsKICBpbnQgeDsKICBpbnQgeTsKICBpbnQgbng7CiAgaW50IE07CiAgaW50IEFbNDAwXTsKICBpbnQgQls0MDBdOwogIGlmKEs9PTEpewogICAgd3RfTCgiMiAxXG4xIDIiKTsKICAgIHd0X0woJ1xuJyk7CiAgICByZXR1cm4gMDsKICB9CiAgaWYoSz09Mil7CiAgICB3dF9MKCI0IDRcbjEgMlxuMSAzXG4yIDNcbjMgNCIpOwogICAgd3RfTCgnXG4nKTsKICAgIHJldHVybiAwOwogIH0KICBpZihLIDw9IDIwKXsKICAgIGludCBpOwogICAgd3RfTChLKTsKICAgIHd0X0woJyAnKTsKICAgIHd0X0woSyk7CiAgICB3dF9MKCdcbicpOwogICAgZm9yKGk9KDApO2k8KEspO2krKyl7CiAgICAgIHd0X0woaSsxKTsKICAgICAgd3RfTCgnICcpOwogICAgICB3dF9MKChpKzEpJUsrMSk7CiAgICAgIHd0X0woJ1xuJyk7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CiAgZm9yKHg9KDApO3g8KDIwKTt4KyspewogICAgaWYoKHgqeCArIHggLSAyKS8yICsgeCAtIDEgPiBLKXsKICAgICAgYnJlYWs7CiAgICB9CiAgfQogIHgtLTsKICB5ID0gSyAtICgoeCp4ICsgeCAtIDIpLzIgKyB4IC0gMSkgKyAyOwogIGZvcihpPSgwKTtpPCh4KTtpKyspewogICAgaW50IGo7CiAgICBmb3Ioaj0oaSsxKTtqPCh4KTtqKyspewogICAgICBpZihpIT1qKXsKICAgICAgICBtYXRbaV1bal0gPSAxOwogICAgICB9CiAgICB9CiAgfQogIG1hdFt4LTJdW3gtMV0gPSAwOwogIG1hdFt4LTFdW3hdID0gMTsKICBmb3IoaT0oMCk7aTwoeSk7aSsrKXsKICAgIG54ID0geCArIGkgKyAxOwogICAgaWYoaSA9PSB5IC0gMSl7CiAgICAgIG54ID0geC0yOwogICAgfQogICAgbWF0W3graV1bbnhdID0gbWF0W254XVt4K2ldID0gMTsKICB9CiAgYXV0byBLcmRhdGxZViA9ICgoeCArIHkpKTsKICBhdXRvIGFvX2RGM3BPID0gKCggMCkpOwogIE49S3JkYXRsWVY7CiAgTT1hb19kRjNwTzsKICBmb3IoaT0oMCk7aTwoTik7aSsrKXsKICAgIGludCBqOwogICAgZm9yKGo9KGkrMSk7ajwoTik7aisrKXsKICAgICAgaWYobWF0W2ldW2pdKXsKICAgICAgICBhcnJJbnNlcnQoTSxNLEEsaSxCLGopOwogICAgICB9CiAgICB9CiAgfQogIHd0X0woTik7CiAgd3RfTCgnICcpOwogIHd0X0woTSk7CiAgd3RfTCgnXG4nKTsKICBmb3IoaT0oMCk7aTwoTSk7aSsrKXsKICAgIHd0X0woQVtpXSsxKTsKICAgIHd0X0woJyAnKTsKICAgIHd0X0woQltpXSsxKTsKICAgIHd0X0woJ1xuJyk7CiAgfQogIHJldHVybiAwOwp9Ci8vIGNMYXkgdmVyc2lvbiAyMDIxMDkxNy0xCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gaW50IEBLOwovLyBpbnQgTiwgbWF0WzIwXVsyMF0gPSB7fSwgeCwgeSwgbng7Ci8vIGludCBNLCBBWzQwMF0sIEJbNDAwXTsKLy8gCi8vIGlmKEs9PTEpIHd0KCIyIDFcbjEgMiIpLCByZXR1cm4gMDsKLy8gaWYoSz09Mikgd3QoIjQgNFxuMSAyXG4xIDNcbjIgM1xuMyA0IiksIHJldHVybiAwOwovLyBpZihLIDw9IDIwKXsKLy8gICB3dChLLCBLKTsKLy8gICByZXAoaSxLKSB3dChpKzEsIChpKzEpJUsrMSk7Ci8vICAgcmV0dXJuIDA7Ci8vIH0KLy8gCi8vIHJlcCh4LDIwKSBpZigoeCp4ICsgeCAtIDIpLzIgKyB4IC0gMSA+IEspIGJyZWFrOwovLyB4LS07Ci8vIHkgPSBLIC0gKCh4KnggKyB4IC0gMikvMiArIHggLSAxKSArIDI7Ci8vIAovLyByZXAoaSx4KSByZXAoaixpKzEseCkgaWYoaSE9aikgbWF0W2ldW2pdID0gMTsKLy8gbWF0W3gtMl1beC0xXSA9IDA7Ci8vIG1hdFt4LTFdW3hdID0gMTsKLy8gcmVwKGkseSl7Ci8vICAgbnggPSB4ICsgaSArIDE7Ci8vICAgaWYoaSA9PSB5IC0gMSkgbnggPSB4LTI7Ci8vICAgbWF0W3graV1bbnhdID0gbWF0W254XVt4K2ldID0gMTsKLy8gfQovLyAKLy8gKE4sIE0pID0gKHggKyB5LCAwKTsKLy8gcmVwKGksTikgcmVwKGosaSsxLE4pIGlmKG1hdFtpXVtqXSkgYXJySW5zZXJ0KE0sTSxBLGksQixqKTsKLy8gd3QoTixNKTsKLy8gcmVwKGksTSkgd3QoQVtpXSsxLEJbaV0rMSk7Cg==