#include <bits/stdc++.h>
int w[1000][1000] = {0};
int main() {
  int k;
  scanf("%d", &k);
  int n, f;
  for (int i = 1; i <= k; i++) {
    if ((i * (i + 1)) / 2 > k) {
      f = i * (i - 1);
      f /= 2;
      n = i;
      break;
    }
  }
  int m = n - 1;
  w[0][0] = w[1][0] = 1;
  w[2][0] = w[0][1] = 2;
  w[1][1] = w[2][1] = 3;
  int st = 4, l = 3;
  int nx = 3, ny = 2;
  if (f < st) {
    printf("%d\n", 3);
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 2; j++) {
        printf("%d%c", w[i][j], (j == 1 ? '\n' : ' '));
      }
    }
    return 0;
  }
  while (1) {
    for (int i = ny; i >= 0; i--) {
      w[nx][i] = st + (ny - i);
    }
    for (int i = nx - 1; i >= 0; i--) {
      w[i][ny] = st + (ny - i);
    }
    if (st + l - 1 == f) break;
    st += l;
    l++;
    nx++;
    ny++;
  }
  printf("%d\n", nx + 1);
  for (int i = 0; i < nx + 1; i++) {
    for (int j = 0; j < ny + 1; j++) {
      if (w[i][j] != 0) {
        printf("%d%c", w[i][j], (j == ny ? '\n' : ' '));
      } else
        break;
    }
  }
  return 0;
}
