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
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#pragma GCC optimize ("Ofast")
#define _USE_MATH_DEFINES
#include <bits/stdc++.h>
#define FOR(i, a, b) for (auto i=(a); i<(b); i++)
#define FORD(i, a, b) for (int i=(a); i>(b); i--)
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(), (x).end()
#define PPC(x) __builtin_popcountll(x)
#define MSB(x) (63 - __builtin_clzll(x))
#define LSB(x) __builtin_ctzll(x)
#define ARG(x, i) (get<i>(x))
#define ithBit(m, i) ((m) >> (i) & 1)
#define pb push_back
#define ft first
#define sd second
#define kw(a) ((a) * (a))
#ifdef DEBUG
#include "debug.h"
#else
#define dbg(...) 0
#endif
using namespace std; 

template <typename T1, typename T2> inline void remin(T1& a, T2 b) { a = min(a, (T1)b);	}
template <typename T1, typename T2> inline void remax(T1& a, T2 b) { a = max(a, (T1)b);	}

const int maxN = 1 << 19, INF = 1 << 30;

int n, T[maxN], prefMn[maxN], sufMx[maxN];
bool res[maxN];

int firstNoinc(int* A, int* B)
{
	FOR(i, 1, n)
		if (A[i] >= B[i+1])
			return i;
	return n;
}
	
void solve()
{
	int k;
	scanf ("%d%d", &n, &k);
	prefMn[0] = INF;
	FOR(i, 1, n+1)
		scanf ("%d", T+i), prefMn[i] = min(prefMn[i-1], T[i]);
	FORD(i, n, 0)
		sufMx[i] = max(sufMx[i+1], T[i]);
	
	vector <int> posMn, posMx;
	
	FOR(i, 1, n+1)
	{
		if (T[i] == prefMn[n])
			posMn.pb(i);
		if (T[i] == sufMx[1])
			posMx.pb(i);
	}
	
	
	bool fail = false;
	
	#define MARK(x) k--, res[x] = true
	
	if (k > 3)
	{
		int i = firstNoinc(T, T);
		if (i == n)
			fail = true;
		else
		{
			MARK(i);
			if (i != 1)
				MARK(i-1);
			if (i+1 != n)
				MARK(i+1);
		}
	}
	
	else if (k == 3)
	{
		if (posMn == vector <int> {1} and posMx == vector <int> {n})
			fail = true;
		else
		{
			int i = posMn.back() == 1 ? posMx.front() : posMn.back();
			if (i != 1)
				MARK(i-1);
			if (i != n)
				MARK(i);
		}
	}
	
	else
	{
		int i = firstNoinc(prefMn, sufMx);
		if (i == n)
			fail = true;
		else
			MARK(i);
	}
	
	for (int i=1; i<=n and k>1 ;i++)
		if (!res[i])
			MARK(i);
			
	if (fail)
		printf("NIE\n");
	else
	{
		printf("TAK\n");
		FOR(i, 1, n+1)
			if (res[i])
				printf("%d ", i);
		printf("\n");
	}	
}
 
int main()
{
	int t = 1;
	//scanf ("%d", &t);
	FOR(tid, 1, t+1)
	{
		//printf("Case #%d: ", tid);
		solve();
	}
	return 0;
}