#include <iostream>
#include <algorithm>


using namespace std;
int n,i;		
long long int o, ilestabilnych=0;

int myints[250000];

//funkcja sprawdza ile jest inwersji (większych elementów wcześniej) w danej permutacji. (
//Najpierw liczy ile jest permutacji w danej permutacji (leksykalnie-wiekszychwleksyk) a później w odwrotnej (antyleksykalnie-wiekszychwanty)
//później porównuje te liczby, jeśli są różen, drukuje je

int sprawdz (void)
{
	int wiekszychwleksyk=0, wiekszychwanty=0, i, j, k;
	for (j=1;j<=n-1;j++)
	 for (k=j;k<=n;k++)
	if (myints[j]>myints[k]) wiekszychwleksyk++;
	
	for (j=n;j>=2;j--)
	 for (k=j;k>=1;k--)
	if (myints[j]>myints[k]) wiekszychwanty++;
	
	
	if (wiekszychwleksyk==wiekszychwanty) 
	{
		ilestabilnych++; 
		if (ilestabilnych==o) 
		{	
			cout<<"TAK\n";
			for (i=1;i<=n;i++)cout << myints[i]<<' ';
			
		}
	
	}	
	
	return 0;
}


int main(void) 
{
	ios_base::sync_with_stdio(0); 
	cin>>n>>o;		//zamiast n i k jako zmienne o które pyta program, zastosowano n i o
	for (i=1;i<=n;i++) myints[i]=i;
	do 
	{
    	sprawdz();
  	} 
  	while (next_permutation(myints+1,myints+n+1) );
	if (ilestabilnych<o)	cout<<"NIE";
	return 0;
}


