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

typedef std::pair<long long, std::pair<long long, long> > pll; // (index, (life needed, heal/damage))

int main()
{
	long long n, z;
	scanf("%lld%lld", &n, &z);
	std::vector<pll> plus;
	std::vector<pll> minus;
	for (int i = 1; i <= n; ++i) {
		long long d, a;
		scanf("%lld%lld", &d, &a);
		pll add = std::make_pair(i, std::make_pair(d, a - d));
		if (add.second.second < 0) {
			minus.push_back(add);
		} else {
			plus.push_back(add);
		}
	}
	int pidx = 0, midx = 0;
	std::sort(plus.begin(), plus.end(), 
		[&] (const pll &_lhs, const pll &_rhs) {
			return _lhs.second.first < _rhs.second.first;
		});
	std::sort(minus.begin(), minus.end(), 
		[&] (const pll &_lhs, const pll &_rhs) {
			return (_lhs.second.first > _rhs.second.first) || (_lhs.second.first == _rhs.second.first && _lhs.second.second > _rhs.second.second);
		});
	while (pidx < plus.size() && plus[pidx].second.first < z) {
		z += plus[pidx].second.second;
		++pidx;
	}
	if (pidx != plus.size()) {
		printf("NIE\n");
		return 0;
	}
	while (midx < minus.size() && minus[midx].second.first < z) {
		z += minus[midx].second.second;
		++midx;
	}
	if (midx != minus.size()) {
		printf("NIE\n");
		return 0;
	}
	printf("TAK\n");
	for (auto it = plus.begin(); it != plus.end(); ++it) {
		printf("%lld ", it->first);
	}
	for (auto it = minus.begin(); it != minus.end(); ++it) {
		printf("%lld ", it->first);
	}

	return 0;
}