1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>

using namespace std;


int suma_1_n( int n ) {
	return (n * (n + 1)) / 2;
}

bool mozliwy( int n ) {
	return (suma_1_n(n - 1) % 2 == 0)? true : false;
}






bool czy_stabilna(vector< int > const& v)
{
	int rozm = v.size();
	
	if(! mozliwy(rozm)) { return false; };
	
	int WWmm = 0;
	int mmWW = 0;
	for( int i = 0; i < rozm - 1; ++i) {
		for ( int j = i + 1 ; j < rozm; ++j ) {
			if( v[i] < v[j] ) {
				mmWW += 1;
			}
			else {
				WWmm += 1;
			}
		}
	}
	return mmWW == WWmm;
}

int main()
{
	int ile_liczb; cin >> ile_liczb;
	long long ile_wymaganych; cin >> ile_wymaganych;

	vector< int > liczby(ile_liczb);
	iota(liczby.begin(), liczby.end(), 1);

	int nr_iteracji = 0;
	int ile_stabilnych = 0;
	bool odp = false;

	do {
		bool stabilna = czy_stabilna(liczby);
		if( stabilna ) {
			ile_stabilnych += 1;
		}
		if( ile_stabilnych == ile_wymaganych ) {
			odp = true;
		}
	} while( (!odp) && next_permutation( liczby.begin(), liczby.end() )  );

	if( odp ) {
		cout << "TAK" << endl;
		for( auto l : liczby ) {
			cout << l << " ";
		}
		cout << endl;
	}
	else {
		cout << "NIE" << endl;
	}
}