#include <bits/stdc++.h>
using namespace std;
long double pi = acos(-1);
const long long mod = 1e9 + 9;
long long QPow(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = ans * a % mod;
    a = a * a % mod;
    b >>= 1;
  }
  return ans;
}
long long toInt(string str) {
  long long ans = 0;
  for (int i = 0; i < str.size(); i++) {
    ans *= 10;
    ans += str[i] - '0';
  }
  return ans;
}
string toString(long long a) {
  if (a == 0) return "0";
  string temp = "";
  long long tp = a;
  while (tp) {
    temp.push_back('0' + tp % 10);
    tp /= 10;
  }
  string temp2 = temp;
  for (int ii = 0; ii < temp.size(); ii++) {
    temp[ii] = temp2[temp.size() - 1 - ii];
  }
  return temp;
}
const int MAXN = 1;
const int INF = 0x3f3f3f3f;
double eps = 1e-8;
int b[4][4];
int ans[4][4];
int md[4][4];
inline long long add(const long long& a, const long long& b) {
  return (a + b) >= mod ? (a + b) - mod : (a + b < 0 ? (a + b) + mod : a + b);
}
inline long long mul(const long long& a, const long long& b) {
  return 1LL * a * b % mod;
}
void matrixpow(int n) {
  while (n) {
    if (n & 1) {
      for (int i = 0; i < 4; i++)
        for (int j = 0; j < 4; j++) {
          md[i][j] = 0;
          for (int k = 0; k < 4; k++)
            md[i][j] = add(md[i][j], mul(ans[i][k], b[k][j]));
        }
      memcpy(ans, md, sizeof ans);
    }
    for (int i = 0; i < 4; i++)
      for (int j = 0; j < 4; j++) {
        md[i][j] = 0;
        for (int k = 0; k < 4; k++)
          md[i][j] = add(md[i][j], mul(b[i][k], b[k][j]));
      }
    memcpy(b, md, sizeof b);
    n >>= 1;
  }
}
int p[100002];
int mi[100002];
char aa[100002];
int val[100002];
int as[100002];
int ans3[220][220];
signed main() {
  ifstream in("Text.txt");
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int t, n;
  int m;
  cin >> m;
  n = 1;
  while ((n + 1) * n / 2 <= m) {
    n++;
  }
  n--;
  cout << n + 1 << endl;
  int cnt = 1;
  for (int i = 1; i <= n; i++) {
    for (int j = i; j <= n; j++) ans3[i][j] = cnt++;
  }
  for (int i = 2; i <= n + 1; i++) {
    for (int j = 1; j < i; j++) {
      ans3[i][j] = ans3[j][i - 1];
    }
  }
  for (int i = 1; i <= n + 1; i++) {
    for (int j = 1; j <= n; j++) cout << ans3[i][j] << " ";
    cout << endl;
  }
  return 0;
}
