#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<iostream>
using namespace std;
int n;
long long m;
int num[25];
bool mark[25];
void search(int t)
{
int cnt = 0;
for(int k = 1 ; k <= n ; k ++)
{
if(mark[k] == false)
cnt ++;
if(cnt == t && mark[k] == false)
{
//cout<<k<<"@@@"<<endl;
mark[k] = true;
cout<<num[k]<<" ";
break;
}
}
}
int main(void)
{
memset(mark,0,sizeof(mark));
cin>>n>>m;
long long c_sum = 1;
long long flag = m;
for(int i = 1 ; i <= n ; i ++)
{
cin>>num[i];
if(i != n)
c_sum *= i;
}
//cout<<c_sum<<endl;
//sort(num+1,num+1+n);
for(int i = n - 1 ; i >= 2 ; i --)
{
int temp;
if(m % c_sum == 0)
temp = m/c_sum;
else
temp = m/c_sum + 1;
m %= c_sum;
//cout<<c_sum<<" "<<temp<<" "<<m<<" !!!!!"<<endl;
search(temp);
c_sum /= i;
//cout<<c_sum<<endl;
}
/*for(int i = 1 ; i <= n ; i++)
cout<<mark[i]<<" ";
cout<<endl;*/
if(flag % 2 == 0)
{
for(int i = n ; i >= 1 ; i --)
if(mark[i] == false)
cout<<num[i]<<" ";
cout<<endl;
}
else
{
for(int i = 1 ; i <= n ; i ++)
if(mark[i] == false)
cout<<num[i]<<" ";
cout<<endl;
}
cout<<endl;
return 0;
}
/*
16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
*/