/* 邮票问题 双重回溯 先回溯出 邮票的面值 在回溯结果
*/
#include<iostream>
#include<cstring>#include<cstdio>
int h,k,max_val[3000],sta_val[3000],ph[10000],max,val[3000];
int judge(int cur,int temp,int num)
{
val[temp] = 1;
if(cur==h)
return 0;
for(int i = 0; i <= num; i++)
{
//printf("---%d %d\n",temp,sta_val[i]);
judge(cur+1,temp+sta_val[i],num);
}
}
int dfs(int cur)
{
if(cur>=k)
{
if(max_val[cur-1] > max)
{
max = max_val[cur-1];
//printf("%d...\n",max);
memcpy(ph,sta_val,sizeof(sta_val));
}
return 0;
}
for(int i = sta_val[cur-1]+1; i <=max_val[cur-1]+1; i++)
{
memset(val,0,sizeof(val));
sta_val[cur]=i;
judge(0,0,cur);
int p=1,num=0;
while(val[p++]) num++;
max_val[cur]=num;
//printf("%d %d %d///\n",sta_val[cur-1],i,num);
dfs(cur+1);
}
}
int main()
{
while(scanf("%d %d",&h,&k)==2)
{
if(!h&&!k) break;
memset(max_val,0,sizeof(max_val));
memset(sta_val,0,sizeof(sta_val));
max = 0;
max_val[0]=h;
sta_val[0]=1;
dfs(1);
for(int i = 0; i < k; i++)
printf("%3d",ph[i]);
printf(" ->%3d\n",max);
}
return 0;
}