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
76
//============================================================================
// Name        : Bog[B].cpp
// Author      : Łukasz Eckert
// Version     :
// Copyright   : 
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct p{
	int a;
	int b;
	int poz;
};
bool wie(p a,p b)
{
	if(a.a<b.a)return 1;
	return 0;
}
bool mni(p a,p b)
{
	if(a.b<b.b)return 1;
	return 0;
}
int main() {
	ios_base::sync_with_stdio(0);
	int n;
	int z;
	cin >> n >> z;
	vector <p> wieksze;
	vector <p> mniejsze;
	int a,b;
	for(int i=0;i<n;i++)
	{
		p z;
		cin >> a >> b;
		z.a=a;
		z.b=b;
		z.poz=i+1;
		if(b-a>=0)wieksze.push_back(z);
		else mniejsze.push_back(z);
	}
	sort(wieksze.begin(),wieksze.end(),wie);
	for(int i=0;i<wieksze.size();i++)
	{
		if(z>wieksze[i].a)
		{
			z=z-wieksze[i].a+wieksze[i].b;
		}
		else
		{
			cout << "NIE \n";
			return 0;
		}
	}
	sort(mniejsze.begin(),mniejsze.end(),mni);
	int zy=0;
	if(mniejsze.size())zy=mniejsze[0].a+1;

	for(int i=1;i<mniejsze.size();i++)
	{
		if(mniejsze[i].b>zy)zy=mniejsze[i].b+1;
		zy=zy-mniejsze[i].b+mniejsze[i].a;
	}
	if(zy<=z){cout << "TAK \n";
	for(int i=0;i<wieksze.size();i++)
		cout << wieksze[i].poz << " ";
	for(int i=mniejsze.size()-1;i >=0;i--)
		cout << mniejsze[i].poz  << " ";
	}
	else cout << "NIE \n";
	return 0;
}