#include <iostream>
#include <cstdio>
using namespace std;
int n,r;
int ans[100];
int fun(int i,int x) //功能单元:根据现在的深度和上一次选出来的数字,决定下一次选出的数
{
if(i==r)
{
for(int j=0;j<r;j++) //这个for循环决定了决策树伸展到哪一步
printf("%d ",ans[j]); //输出dfs每一支的前r个
cout<<endl;
return 0;
}
for(int y=x;y<=n-(r-i)+1;y++) //为了保证给后面的留出位置
{
ans[i]=y; //这里对ans数组是有覆盖的,所以只需要ans数组开得和r一样大就行了
fun(i+1,y+1); //i最大不超过r
}
}
int main()
{
cin>>n>>r; //输入要计算的组合数
fun(0,1); //从深度为0,基数为1开始
return 0;
}