#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
#include <iomanip>
#include <limits.h>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <deque>
#include <map>
#include <chrono>
#include <random>
#include <bitset>
#include <tuple>
#define SZ(x) int(x.size())
#define FR(i,a,b) for(int i=(a);i<(b);++i)
#define FOR(i,n) FR(i,0,n)
#define FAST ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define A first
#define B second
#define mp(a,b) make_pair(a,b)
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;
typedef unsigned __int128 U128;
typedef __int128 I128;
typedef std::pair<int,int> PII;
typedef std::pair<LL,LL> PLL;
using namespace std;
vector<vector<LL> > chunk;
vector<vector<LL> > chunk2;
vector<vector<LL> > chunk3;
vector<vector<LL> > ans;
signed main(){
FAST;
LL n; cin>>n;
if (n<=4){
FOR(i,n){
FOR(j,12) cout<<i*12+j<<" ";
cout<<"\n";
}
return 0;
}
if (n==28 || n==21 || n==15 || n==10 || n==6 || n==7 || n==8 || n==11 || n==16 || n==5){
LL k=0;
if (n==28) k=8;
else if (n==21) k=7;
else if (n==15 || n==16) k=6;
else if (n==10 || n==11) k=5;
else if (n==6 || n==7 || n==8) k=4;
else if (n==5) k=3;
vector<LL> cur;
FOR(i,50){
cur.push_back(i);
if (SZ(cur)==6){
chunk.push_back(cur);
cur.clear();
}
}
FOR(i,k) FR(j,i+1,k){
vector<LL> tmp;
for (LL x:chunk[i]) tmp.push_back(x);
for (LL x:chunk[j]) tmp.push_back(x);
ans.push_back(tmp);
}
if (n==7 || n==8 || n==11 || n==16 || n==5){
vector<LL> tmp;
for (int i=49; i>=38; i--) tmp.push_back(i);
ans.push_back(tmp);
}
if (n==8 || n==5){
vector<LL> tmp;
for (int i=37; i>=26; i--) tmp.push_back(i);
ans.push_back(tmp);
}
//cout<<SZ(ans);
FOR(i,n){
FOR(j,12) cout<<ans[i][j]<<" ";
cout<<"\n";
}
return 0;
}
else if (n==9 || n==13 || n==12){
LL k1=0, k2=0;
if (n==9){
k1=4;
k2=3;
}
else if (n==13){
k1=5;
k2=3;
}
else if (n==12){
k1=4;
k2=4;
}
vector<LL> cur;
FOR(i,50){
cur.push_back(i);
if (SZ(cur)==6){
chunk.push_back(cur);
cur.clear();
}
}
FOR(i,k1) FR(j,i+1,k1){
vector<LL> tmp;
for (LL x:chunk[i]) tmp.push_back(x);
for (LL x:chunk[j]) tmp.push_back(x);
ans.push_back(tmp);
}
FR(i,k1,k1+k2) FR(j,i+1,k1+k2){
vector<LL> tmp;
for (LL x:chunk[i]) tmp.push_back(x);
for (LL x:chunk[j]) tmp.push_back(x);
ans.push_back(tmp);
}
//cout<<SZ(ans)<<"\n";
FOR(i,n){
FOR(j,12) cout<<ans[i][j]<<" ";
cout<<"\n";
}
return 0;
}
else if (n==20 || n==35 || n==36 || n==23 || n==38){
LL k=0;
if (n==20 || n==23) k=6;
else if (n==35 || n==36 || n==38) k=7;
vector<LL> cur;
FOR(i,50){
cur.push_back(i);
if (SZ(cur)==4){
chunk.push_back(cur);
cur.clear();
}
}
FOR(i,k) FR(j,i+1,k) FR(h,j+1,k) {
vector<LL> tmp;
for (LL x:chunk[i]) tmp.push_back(x);
for (LL x:chunk[j]) tmp.push_back(x);
for (LL x:chunk[h]) tmp.push_back(x);
ans.push_back(tmp);
}
if (n==36){
vector<LL> tmp;
for (int i=49; i>=38; i--) tmp.push_back(i);
ans.push_back(tmp);
}
if (n==23 || n==38){
vector<LL> cur;
FOR(i,50){
cur.push_back(i);
if (SZ(cur)==6){
chunk2.push_back(cur);
cur.clear();
}
}
FR(i,5,8) FR(j,i+1,8){
vector<LL> tmp;
for (LL x:chunk2[i]) tmp.push_back(x);
for (LL x:chunk2[j]) tmp.push_back(x);
ans.push_back(tmp);
}
}
//cout<<SZ(ans);
FOR(i,n){
FOR(j,12) cout<<ans[i][j]<<" ";
cout<<"\n";
}
return 0;
}
else if (n==37 || n==45 || n==41){
LL k=0;
if (n==37 || n==45 || n==41) k=7;
vector<LL> cur;
FOR(i,50){
cur.push_back(i);
if (SZ(cur)==3){
chunk3.push_back(cur);
cur.clear();
}
}
FOR(i,k) FR(j,i+1,k) FR(h,j+1,k) FR(z,h+1,k) {
vector<LL> tmp;
for (LL x:chunk3[i]) tmp.push_back(x);
for (LL x:chunk3[j]) tmp.push_back(x);
for (LL x:chunk3[h]) tmp.push_back(x);
for (LL x:chunk3[z]) tmp.push_back(x);
ans.push_back(tmp);
}
if (n==37){
vector<LL> tmp;
for (int i=49; i>=38; i--) tmp.push_back(i);
ans.push_back(tmp);
}
if (n==37){
vector<LL> tmp;
for (int i=37; i>=26; i--) tmp.push_back(i);
ans.push_back(tmp);
}
if (n==45 || n==41){
vector<LL> cur;
FOR(i,50){
cur.push_back(i);
if (SZ(cur)==6){
chunk.push_back(cur);
cur.clear();
}
}
LL k1=0;
if (n==45) k1=3;
else k1=4;
FR(i,k1,8) FR(j,i+1,8){
vector<LL> tmp;
for (LL x:chunk[i]) tmp.push_back(x);
for (LL x:chunk[j]) tmp.push_back(x);
ans.push_back(tmp);
}
}
//cout<<SZ(ans);
FOR(i,n){
FOR(j,12) cout<<ans[i][j]<<" ";
cout<<"\n";
}
return 0;
}
}