#include <bits/stdc++.h>
using namespace std;
template <typename T>
T Gmax(T a, T b) {
  return a > b ? a : b;
}
template <typename T>
T Gmin(T a, T b) {
  return a < b ? a : b;
}
const int N = 100005;
int a[100000];
int main() {
  int n, s = 1, d = 1, p;
  scanf("%d", &n);
  int k = (1 + sqrt(double(1 + 8 * n))) / 2.0;
  printf("%d\n", k);
  for (int i = 1; i <= k - 1; i++) {
    printf("%d ", i);
    a[s++] = i;
    d++;
  }
  printf("\n");
  for (int i = 1; i < k; i++) {
    for (int j = i, p = 1; p <= i; j = p * (k - 1) + i, p++) {
      printf("%d ", a[j]);
      a[s++] = a[j];
    }
    for (int j = 1; j <= k - 1 - i; j++) {
      printf("%d ", d++);
      a[s++] = d - 1;
    }
    printf("\n");
  }
  return 0;
}
