//EGOI 2025 Monster-Go
//https://qoj.ac/contest/2343/problem/13167
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;
int main(){
ll n, offset=0; vector<array<ll,4>> blocks;
cin >> n;
auto binom=[&](ll a,ll b){
ll res=1;
for(int i=1; i<=b; i++) res=res*(a-i+1)/i;
return res;
};
for(auto d:{1,2,3,4,6,12}) for(int i=0; 12+i*d<=50; i++){
blocks.push_back({d,i,binom(12/d+i,i),12+i*d});
}
vll dp(n+1,1e18), from(n+1,-1); dp[0]=0;
vector<array<ll,4>> res(n+1), ans; ll cur=n;
for(int i=0; i<n; i++) for(auto a:blocks){
ll nxt=i+a[2];
if(nxt<=n && dp[i]+a[3]<=50 && dp[i]+a[3]<dp[nxt]){
dp[nxt]=dp[i]+a[3]; from[nxt]=i; res[nxt]=a;
}
}
while(cur>0) ans.push_back(res[cur]), cur=from[cur];
for(auto [d,k,tot,cost]:ans){
ll x=12/d+k;
for(int mask=0; mask<(1<<x); mask++) if(__builtin_popcount(mask)==12/d){
for(int i=0; i<x; i++) if((mask>>i)&1){
for(int j=0; j<d; j++) cout << offset+i*d+j << " ";
}
cout << "\n";
}
offset+=x*d;
}
return 0;
}