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
#include <cstdio>
#include <algorithm>
#include <cmath>

using namespace std;

const int MX=100005;

int wynikowa[MX];

pair<int,pair<int,int> > t[MX], opylajace[MX];

int main(){
	int N, HP;
	scanf("%d%d", &N, &HP);
	int k=HP;
	int y=0, i, x=0;
	long long suma=0;
	for(i=0;i<N;++i){
		int a,b;
		scanf("%d%d", &a, &b);
		if(b>=a){
			opylajace[x].first=a;
			opylajace[x].second.first=b;
			opylajace[x].second.second=i+1;
			++x;
		}
		else{
			t[y].first=b;
			t[y].second.first=a;
			t[y].second.second=i+1;
			++y;
		}
		suma+=a-b;
	}
	if(k<=suma){
		printf("NIE\n");
		return 0;
	}
	sort(opylajace,opylajace+x);
	sort(t,t+y);
	for(int j=0;j<x;++j){
		if(opylajace[j].first>=k){
			printf("NIE\n");
			return 0;
		}
		else{
			k+=opylajace[j].second.first;
			wynikowa[j]=opylajace[j].second.second;
		}
	}
	for(int j=y;j>0;--j){
		if(t[j-1].second.first>=k){
			printf("NIE\n");
			return 0;
		}
		else{
			k+=t[j-1].first-t[j-1].second.first;
			wynikowa[x]=t[j-1].second.second;
		}
		++x;
		//printf("%d\n", t[j].first);
	}
	printf("TAK\n");
	for(int j=0;j<N;++j){
		printf("%d ", wynikowa[j]);
	}
	return 0;
}