#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int n; //给的质量
int fang = 0; //方案数
int sum; //总质量
int a[11]; //每个方案的具体
int b[50000][11]; //整个方案
int i; //到哪了
//j,k:输出二维数组循环使用
void dfs(int i,int sum)
{
if (sum > n)
return ;
if (i == 10)
{
if (sum == n)
{
int tmp = 0;
for (tmp = 0; tmp < 10; tmp++)
{
b[fang][tmp] = a[tmp];
}
fang++;
}
return ;
}
int p = 0;
for (p = 1; p < 4; p++)
{
a[i] = p;
dfs(i+1, sum+p);
a[i] = 0;
}
}
int main()
{
scanf("%d",&n);
dfs(0, 0);
int j = 0;
if (fang == 0)
printf("0");
else
printf("%d\n", fang);
for (j = 0; j < fang; j++)
{
int k = 0;
for (k = 0; k < 10; k++)
printf("%d ", b[j][k]);
printf("\n");
}
return 0;
}