#include <bits/stdc++.h>
#define ll long long
using namespace std;

int main() {
  int k;
  cin>>k;
  if(k<=500){
    cout<<k<<endl;
    for(int i=1;i<=k;i++){
      for(int j=0;j<k;j++){
        cout<<i<<" ";
      }
      cout<<endl;
    }
    return 0;
  }
  cout<<((k+3)/4)*2<<endl;
  int z=((k+3)/4)*2;
  if(k%4==1){
    k++;
    int vec[z][z];
    for(int i=0;i<z;i++){
      for(int j=0;j<z;j++){
        if(i==0){
          vec[j][i]=j+1;
        }
        if(i==1){
          vec[j][i]=vec[j][i-1]+k/2;
          if(vec[j][i]>k){
            vec[j][i]-=vec[j][i-1];
          }
        }
        if(i>1){
          if(i%2==0){
            vec[j][i]=vec[j][i-2]+z-2;
            if(vec[j][i]>k/2+1){
              vec[j][i]-=k/2+1;
            }
          }
          else{
            vec[j][i]=vec[j][i-1]+k/2;
            if(vec[j][i]>k){
              vec[j][i]-=vec[j][i-1];
            }
          }
        }
      }
    }
    for(int i=0;i<z;i++){
      if(vec[i][i]==1){
        vec[i][i]=vec[1][1];
      }
    }
    for(int i=0;i<z;i++){
      for(int j=0;j<z;j++){
        cout<<vec[i][j]-1<<" ";
      }
      cout<<endl;
    }
    return 0;
  }
  if(k%4==2){
    int vec[z][z];
    for(int i=0;i<z;i++){
      for(int j=0;j<z;j++){
        if(i==0){
          vec[j][i]=j+1;
        }
        if(i==1){
          vec[j][i]=vec[j][i-1]+k/2;
          if(vec[j][i]>k){
            vec[j][i]-=vec[j][i-1];
          }
        }
        if(i>1){
          if(i%2==0){
            vec[j][i]=vec[j][i-2]+z-2;
            if(vec[j][i]>k/2+1){
              vec[j][i]-=k/2+1;
            }
          }
          else{
            vec[j][i]=vec[j][i-1]+k/2;
            if(vec[j][i]>k){
              vec[j][i]-=vec[j][i-1];
            }
          }
        }
      }
    }
    for(int i=0;i<z;i++){
      for(int j=0;j<z;j++){
        cout<<vec[i][j]<<" ";
      }
      cout<<endl;
    }
    return 0;
  }
  if(k%4==3){
    k++;
    int vec[z][z];
    for(int i=0;i<z;i++){
      for(int j=0;j<z;j++){
        if(i==0){
          vec[j][i]=j+1;
        }
        if(i==1){
          vec[j][i]=vec[j][i-1]+k-1;
          if(vec[j][i]>k){
            vec[j][i]-=k/2;
          }
        }
        if(i>1){
          if(i%2==0){
            vec[j][i]=vec[j][i-2]+k/2-2;
            if(vec[j][i]>k/2){
              vec[j][i]-=k/2;
            }
          }
          else{
            vec[j][i]=vec[j][i-2]+k/2-2;
            if(vec[j][i]>k){
              vec[j][i]-=k/2;
            }
          }
        }
      }
    }
    for(int i=0;i<z;i++){
      if(vec[i][i]==1){
        vec[i][i]=vec[1][1];
      }
    }
    for(int i=0;i<z;i++){
      for(int j=0;j<z;j++){
        cout<<vec[i][j]-1<<" ";
      }
      cout<<endl;
    }
    return 0;
  }
  ///////////
  if(k%4==0){
    int vec[z][z];
    for(int i=0;i<z;i++){
      for(int j=0;j<z;j++){
        if(i==0){
          vec[j][i]=j+1;
        }
        if(i==1){
          vec[j][i]=vec[j][i-1]+k-1;
          if(vec[j][i]>k){
            vec[j][i]-=k/2;
          }
        }
        if(i>1){
          if(i%2==0){
            vec[j][i]=vec[j][i-2]+k/2-2;
            if(vec[j][i]>k/2){
              vec[j][i]-=k/2;
            }
          }
          else{
            vec[j][i]=vec[j][i-2]+k/2-2;
            if(vec[j][i]>k){
              vec[j][i]-=k/2;
            }
          }
        }
      }
    }
    for(int i=0;i<z;i++){
      for(int j=0;j<z;j++){
        cout<<vec[i][j]<<" ";
      }
      cout<<endl;
    }
  } 
}

Measured memory_bytes: 2176