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<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<vector>
#include<algorithm>
#include<set>
#include<map>
#include<queue>
#include<cstring>

#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define VI vector<int>
#define PII pair<int,int>
#define st first
#define nd second
#define mp make_pair
#define pb push_back
#define lint long long int

using namespace std;


int main(){
	int n;
	lint z;
	scanf("%d%lld",&n,&z);
	vector<pair<PII,int> > dobre;
	vector<pair<PII,int> > zle;
	FOR(i,0,n){
		int a,b;
		scanf("%d%d",&a,&b);
		if(b>=a) dobre.pb(mp(mp(a,b),i));
		if(a>b) zle.pb(mp(mp(b,a),i));
	}
	VI wynik;
	VI wynik2;
	sort(dobre.begin(),dobre.end());
	FOR(i,0,dobre.size()){
		if(dobre[i].st.st<z){
			z+=dobre[i].st.nd-dobre[i].st.st;
			wynik.pb(dobre[i].nd+1);
		}
		else{
			printf("NIE\n");
			return 0;
		}
	}
	lint x = z;
	FOR(i,0,zle.size()) x+=zle[i].st.st-zle[i].st.nd;
	if(x<=0){
		printf("NIE\n");
		return 0;
	}
	sort(zle.begin(),zle.end());
	
	FOR(i,0,zle.size()){
		if(zle[i].st.st<x){
			x+=zle[i].st.nd-zle[i].st.st;
			wynik2.pb(zle[i].nd+1);
		}
		else{
			printf("NIE\n");
			return 0;
		}
	}
	printf("TAK\n");
	FOR(i,0,wynik.size()) printf("%d ",wynik[i]);
	FOR(i,0,wynik2.size()) printf("%d ",wynik2[wynik2.size()-i-1]);
	printf("\n");
	
	return 0;
}