#include <iostream> //组合
using namespace std;
int n[1001], vtd[1001], digits, nums;
void dfs(int x, int crnt);
int main()
{
memset(n, 0, sizeof n);
memset(vtd, 0, sizeof vtd);
cin >> nums >> digits;
dfs(1, 1);
return 0;
}
void dfs(int x, int crnt)
{
if(x <= digits)
{
for(int j = crnt; j <= nums; j++)
if(!vtd[j])
{
vtd[j] = 1;
n[x] = j;
dfs(x + 1, j);
vtd[j] = 0;
}
}
else
{
for(int i = 1; i <= digits; i++)
cout << n[i];
cout << endl;
}
}
#include <iostream> //排列
using namespace std;
int n, m;
int vst[11];
int p[11];
void
__read__()
{
cin >> n >> m;
}
void
__outp__()
{
for( int i = 1; i <= m; i++ )
cout << p[i];
cout << endl;
}
void
__dfs__( int x )
{
if( x <= m )
for( int i = 1; i <= n; i++ )
if( !vst[i] )
{
vst[i] = true;
p[x] = i;
__dfs__( x + 1 );
vst[i] = false;
}
if( x > m )
__outp__();
}
int
main()
{
__read__();
__dfs__( 1 );
return 0;
}