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
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
struct pole
{
	int a;
	int b;
	int x;
};
pole p;
vector<pole> v1; //wygrane
vector<pole> v2; //przegrane
vector<pole> q;
bool cmp(pole s, pole q)
{ 
	if (s.a!=q.a) return s.a < q.a;
	else return s.b >q.b;
}
bool cmp2(pole s, pole q)
{ 
	if (s.b != q.b) return s.b > q.b;
	else return s.a > q.a;
}
int main()
{
	int n;
	long long hp;
	scanf("%d%lld", &n, &hp);
	for (int i=1; i<=n; i++)
	{
		scanf("%d%d",&p.a, &p.b);
		p.x=i;
		if (p.b>=p.a) v1.push_back(p);
		else v2.push_back(p);
	}
	sort(v1.begin(),v1.end(),cmp);
	sort(v2.begin(),v2.end(),cmp2);
	int d1=v1.size(),d2=v2.size();
	int i=0, test=0;
	while (i<d1)
	{
		if (v1[i].a>=hp) test=1;
		else hp+=v1[i].b-v1[i].a;
		i++;
	} i=0;
//	printf("%lld", hp);
	//for (int i=0; i<d2; i++)
	//
	//	printf("%d %d %d\n", v2[i].a, v2[i].b, v2[i].x);
	//
	while(i<d2)
	{
		if (v2[i].a>=hp) test=1;
		else hp+=v2[i].b-v2[i].a;
		++i;
	}
	if (test !=0) printf("NIE\n");
	else 
	{
		printf("TAK\n");
		for (int i=0; i<d1; i++) printf("%d ", v1[i].x);
		for (int i=0; i<d2; i++) printf("%d ", v2[i].x);
	}
}