```cpp
int nx[510];
int A[510][510];
int main() {
int k = ri;
if(k <= 500) {
cout << k << endl;
for(int i = 1; i <= k; i++)
for(int j = 1; j <= k; j++)
printf("%d%c", i, " \n"[j == k]);
} else {
int n = 500, N = 0;
for(int i = 1; i <= n; i++) nx[i] = i + 1;
nx[n] = 1, cout << 500 << endl, k -= n;
for(int i = 1; i <= n; i++) {
int a = ++N, b = k ? ++N : N;
k -= b - a;
for(int x = 1, y = i; x <= n; x++, y = nx[y])
A[x][y] = x & 1 ? a : b;
}
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
printf("%d%c", A[i][j], " \n"[j == n]);
}
return 0;
}
```