#include <stdio.h>
#include <string.h>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX=200000001;
int a[501],k,slen[501],scnt[501];
int lis(int n)
{
    int& t=slen[n+1];
    if(t!=-1) return t;
    t=1;
    for(int m=n+1;m<k;++m)
    {
        if(n==-1||a[n]<a[m]) t=max(t,lis(m)+1);
    }
    return t;
}
int cnt(int n)
{
    if(lis(n)==1) return 1;
    int& t=scnt[n+1];
    if(t!=-1) return t;
    t=0;
    for(int m=n+1;m<k;++m)
    {
        if((n==-1||a[n]<a[m])&&(lis(n)==lis(m)+1))
            t=min(MAX,t+cnt(m));
    }
    return t;
}
void re(int n,int s, vector<int>& l)
{
    if(n!=-1)l.push_back(a[n]);
    vector <pair<int,int> > f;
    for(int m=n+1;m<k;++m)
    {
        if((n==-1 || a[n]<a[m])&& lis(n)==lis(m)+1)
            f.push_back(make_pair(a[m],m));
    }
    sort(f.begin(),f.end());

    for(int i=0;i<f.size();++i)
    {
        int idx=f[i].second;
        int c=cnt(idx);
        if(c<=s) s-=c;
        else
        {
            re(idx,s,l);
            break;
        }
    }
}
int main()
{
    int i,t,b,j;
    vector<int> l;
    freopen(".20.in","r",stdin);
    freopen(".20.out","w",stdout);
        scanf("%d%d",&k,&t);
        for(i=0;i<k;++i) scanf("%d",&a[i]);
        memset(slen,-1,sizeof(slen)),memset(scnt,-1,sizeof(scnt));
        while(!l.empty())l.pop_back();
        re(-1,t-1,l);
        printf("%d\n",l.size());
        for(i=0;i<l.size();++i) printf("%d ",l[i]);
}
