#include <fstream.h>
#include <math.h>
ifstream f("patrate1.in");
ofstream g("patrate1.out");
long i,j,n,p,m,k,l,o,q,OK;
long b[][9]={{0,0,0,0,0,0,0,0,0},{0,100,100,0,0,0,0,0,0},{0,100,60,80,0,0,0,0,0},{0,60,80,60,80,0,0,0,0},{0,36,48,80,60,80,0,0,0},{0,36,48,48,64,60,80,0,0},{0,36,48,48,64,36,48,80,0},{0,36,48,48,64,36,48,48,64}};
long a[][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{50,30,40,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,18,24,24,32,0,0,0,0,0,0,0,0,0,0,0},{25,15,20,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,9,12,12,16,0,0,0,0,0,0,0,0,0,0,0},{25,10,10,10,10,15,0,0,0,0,0,0,0,0,0,0},{25,6,8,10,10,10,15,0,0,0,0,0,0,0,0,0},{25,10,10,10,10,10,10,5,0,0,0,0,0,0,0,0},{25,5,5,5,5,10,10,10,15,0,0,0,0,0,0,0},{25,5,5,5,5,10,10,10,10,5,0,0,0,0,0,0},{25,5,5,5,5,5,6,8,10,10,10,0,0,0,0,0},{25,5,5,5,5,5,5,5,5,10,10,15,0,0,0,0},{25,5,5,5,5,5,5,5,5,5,10,10,10,0,0,0},{25,5,5,5,5,5,5,5,5,5,6,8,10,10,0,0},{25,5,5,5,5,5,5,5,5,5,5,5,5,10,15,0},{25,5,5,5,5,5,5,5,5,5,5,5,5,5,10,10}};
int main() {
f>>n>>p;
m=20000;
g<<m<<'\n';
OK=0;
if (p<=8)
{ for (i=p-1;i<n&&i<8;i++)
{ OK=1;
for (j=1;j<=8;j++)
{ if (b[i][j]) g<<b[i][j]<<' '; }
g<<'\n';
}
}
if (OK) p=9; o=1; k=8;
while (k<p) { k*=2; o++;}
if (o) { o--; k/=2;}
if (n>8)
{ for (i=p;i<=n;i++)
{ OK=1; i--;
for (j=1;j<=n-k&&OK&&n>=p&&i<=n;j++)
{ l=p-k; m=0;
while (l>0)
{ if (o==1||o==2||o==4) m=2;
else m=n;
for (q=1;q<=m&&a[o][q];q++) g<<a[o][q]<<' ';
l--;
if (l>0&&(o==2||o==4))
{ for (q=m+1;q<=4&&a[o][q];q++) g<<a[o][q]<<' ';
l--;
}
}
if ((p-k)%2==1) m=2;
else m=1;
l=p-(p-k)*2;
while (l>0)
{ if (a[o][0]) { g<<a[o][0]<<' '; l--; }
else
for (q=m;q<=n&&a[o-1][q]&&l>0;q++) { g<<a[o-1][q]<<' '; l--;}
m=1;
}
if (p==2*k) { k*=2; OK=0; o++; }
g<<'\n'; p++; i++;
}
}
}
f.close();
g.close();
return 0;
}