#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
int n;
int ans=0;
vector<vector<int>> a;
vector<int> spi;
int sum = 10;
void f2(int x);
void dfs(int x);
void f1(vector<int> spi) {
for_each(spi.begin(), spi.end(), f2);
printf("\n");
}
void f2(int x) {
printf("%d ", x);
}
void dfs(int x) {
if (x > 9 ) {
if (sum == n) {
a.push_back(spi);
ans++;
return;
}
else return;
}
for (int i = 0; i <= 2,spi[x]+i<3,sum+i<=n; i++) {
spi[x]+=i;
sum +=i;
dfs(x + 1);
spi[x]-=i;
sum-=i;
}
}
int main() {
spi.resize(10, 1);
cin >>n;
if (n < 10||n>30) {
cout << 0;
return 0;
}
dfs(0);
cout << ans<<endl;
for_each(a.begin(), a.end(), f1);
return 0 ;
}