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
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<string>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
using namespace std;

int n,z,a,b,czy=1;
vector<int> wyn;
vector<pair<pair<int,int>,int> > dol,gora;

int main(){
    scanf("%d%d",&n,&z);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&a,&b);
        if(a<b) gora.pb(mp(mp(a,b),i));
        else dol.pb(mp(mp(b,a),i));
    }
    sort(gora.begin(),gora.end());
    sort(dol.begin(),dol.end());
    for(int i=0;i<gora.size();i++){
        if(z-gora[i].fi.fi>0) wyn.pb(gora[i].se);
        else czy=0;
        z+=-gora[i].fi.fi+gora[i].fi.se;
    }
    for(int i=dol.size()-1;i>=0;i--){
        if(z-dol[i].fi.se>0) wyn.pb(dol[i].se);
        else czy=0;
        z+=dol[i].fi.fi-dol[i].fi.se;
    }
    if(czy){
        printf("TAK\n");
        for(int i=0;i<n;i++) printf("%d ",wyn[i]);
    }
    else printf("NIE");
}