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
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<queue>
#include<stack>
#include<cmath>
#include<map>
using namespace std;
typedef pair<int,int> PI;
typedef long long LL;
typedef double D;
#define FI first
#define SE second
#define MP make_pair
#define PB push_back
#define R(I,N) for(int I=0;I<N;I++)
#define F(I,A,B) for(int I=A;I<B;I++)
#define FD(I,N) for(int I=N-1;I>=0;I--)
#define make(A) scanf("%d",&A)
#define MAX 100001
int n,z;
struct pot{
	int a,b,nr;
};
bool q(pot a,pot b){
	return a.a < b.a;
}
vector<pot> t[2];
bool zle(vector<pot> &t,LL ak){
	sort(t.begin(),t.end(),q);
	R(i,t.size()){
		if(t[i].a >= ak)return 1;
		ak -= t[i].a;
		ak += t[i].b;
	}
	return 0;
}
main(){
	make(n);make(z);
	LL sum = z;
	R(i,n){
		int a,b;
		make(a);
		make(b);
		sum -= a;
		sum += b;
		pot pom = {a:a,b:b,nr:i+1};
		if(b>a)
			t[0].PB(pom);
		else{
			swap(pom.a,pom.b);
			t[1].PB(pom);
		}
	}
	if(zle(t[0],z) || zle(t[1],sum))
		puts("NIE");
	else{
		puts("TAK");
		R(i,t[0].size())
			printf("%d ",t[0][i].nr);
		FD(i,int(t[1].size()))
			printf("%d ",t[1][i].nr);
		puts("");
	}
}