#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int maxN = 1e2 + 10;
int n, a[maxN], k = 1e4;
int read();
string s;
int main(){
	n = read(); n++;
	cin >> s; a[0] = read();
	int t = 0;
	for(int i = 1; i < n; i++){
		a[i] = read();
		k = min(k, abs(a[i] - a[i - 1]));
	}
	printf("%d\n", k);
	while(k--){
		for(int i = 0; i < n; i++){
			printf("%d ", a[i] / (k + 1));
			a[i] -= a[i] / (k + 1);
		}
		printf("\n");
	}
	return 0;
}
int read(){
	int s = 0, f = 1; char ch = getchar();
	while(!isdigit(ch)){
		if(ch == '-') f = -1;
		ch = getchar();
	}
	while(isdigit(ch)) s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar();
	return s * f;
}


#include <iostream>
#include <string>
#include <complex>
#include <cstdio>
#include<functional>
#include<cmath>
#include<string>
#include<ctime>
#include<cstring>
#include<algorithm>
using namespace std;
typedef complex<double> cp;
#define ll long long
#define sci(x) scanf("%d",&x)
#define scl(x) scanf("%lld",&x)
#define scf(x) scanf("%lf",&x)
#define fo(a,b,c)for(int a=b;a<=c;a++)
#define getname(x) #x
template<typename T>
inline void printT(T *arr,int n)
{
	for(int i=0;i<n;i++)
	cout<<arr[i]<<' ';
	cout<<endl;
}
inline void printcarr(cp *arr,int n,string d)
{
    for(int i=0;i<n;i++)
    {
        cout<<(int)arr[i].real()<<' ';
    }
    cout<<d<<endl;
}
inline void printBit(int x)
{
	for(int i=0;i<20;i++)
		cout<<bool(x&(1<<i));
	cout<<endl;
}
inline void copyarr(int *arr1,int *arr2,int n)
{
    for(int i=0;i<n;i++)*(arr1+i)=*(arr2+i);
}
inline void randarr(int *arr,int n)
{
	srand(time(0));
	for(int i=0;i<n;i++)*(arr+i)=rand()%100;
}
inline void qsctr(char *a,int &len)
{
    len=0;
    char c;
    while(c=getchar(),!isdigit(c));
    while(isdigit(c)){a[len++]=c;c=getchar();}
    a[len]='\0';
}
inline void showint(int *arr,int n)
{
	for(int i=0;i<n;i++)
	cout<<arr[i]<<' ';
	cout<<endl;
}
inline ll read(ll mod)//快速输入（取模)
{
     char ch;
    ll ans=0;bool isN=false;
    while(ch=getchar(),!isdigit(ch)&&ch!='-');
    if(ch=='-')isN=true;
    else ans=(ch^48);
    while(ch=getchar(),isdigit(ch)){ans=(ans<<3)+(ans<<1)+(ch^48);ans%=mod;}
    if(isN)ans*=-1;
    return ans;
}
inline ll QJY(ll *a,ll n,ll x,ll mod)//秦九韶算法 快速计算多项式的和(02n)取模
{
    ll ans=0;
    for(int i=n;i>0;i--)
        ans=(ans*x%mod+a[i-1])%mod;
    return ans;
}
inline void init(ll* eular,ll maxn)//埃氏筛 不能用欧拉 欧拉不全面 而且从 j=i开始
{
    for(int i=0;i<1e5+5;i++)eular[i]=i;
    for(int i=2;i<1e5+5;i++)
    {
        if(eular[i]==i)
            for(int j=i;j<=maxn;j+=i)
            eular[j]=eular[j]/i*(i-1);
    }
}
inline void elp(ll *jug,ll *pri,ll maxn)//欧拉筛 jug为最小质因子 maxn为数据范围
{
    for(ll i=2;i<maxn;i++)
    {
        if(!jug[i])
        {
            pri[++pri[0]]=i;
            jug[i]=i;
        }
        for(ll j=1;j<=pri[0];j++)
        {
            if(1LL*i*pri[j]>maxn)break;
            jug[i*pri[j]]=pri[j];
            if(i%pri[j]==0)break;//放后面
        }
    }
}
inline void dispose(ll x,ll *pri,ll *ert,ll *stp)//分解质因子 数据 质因子集合 质因子个数集合 分解后质因子集合
{
    for(ll j=1;j<=pri[0]&&x>=pri[j]*pri[j];j++)
    {
        if(x%pri[j]==0)
        {
            stp[++stp[0]]=pri[j];++ert[0];
            while(x%pri[j]==0){x/=pri[j];ert[ert[0]]++;}
        }
    }
    if(x>1)
        {ert[++ert[0]]++;stp[++stp[0]]=x;}
}
inline void disposefact(ll x,ll *p,ll *ans)//分解阶乘的质因子 p为x的质因子集合 ans为答案集合
{

	for(int i=1;i<=p[0];i++)//阶乘分解的原理 x的幂在(1~n)自身的倍数中，出现总次数恰好等于幂次。
	{
		ll now=p[i];
		ans[i]=0;
		while(now<=x)
		{
			ans[i]+=x/now;
			now*=p[i];
		}
	}
}
inline ll ext_gcd(ll a,ll b,ll &x,ll &y)
{
	if(b==0)
	{
		x=1;y=0;
		return a;
	}
	ll r=ext_gcd(b,a%b,y,x);//x=y' y=x'-(a/b)*y' ->  y=x' x=y'
	y-=(a/b)*x;
	return r;
}

int n;
string s;
const int maxn=200;
int st[maxn];
bool judge(int mid)
{
    for(int i=1;i<n;i++){
        if(st[i]/mid==st[i+1]/mid)
            return false;
    }
    return true;
}
int main()
{
    cin>>n;
    n++;
    cin>>s;for(int i=1;i<=n;i++)sci(st[i]);
    int l=10001;
    for(int i=1;i<n;i++){
        l=min(l,abs(st[i+1]-st[i]));
    }
    cout<<l<<endl;
    for(int i=1;i<=l;i++){
        for(int j=1;j<=n;j++)
        cout<<(st[j]+i-1)/l<<' ';
    cout<<endl;
    }
}
