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

using namespace std;

vector<pair<int, int> > input;

bool sort_fun(int p1, int p2){
//    return 0;
    return (input[p1].first < input[p2].first) ? true : false;
}
bool sort_fun2(int p1, int p2){
    return ! sort_fun(p1, p2);
}
int main(){
    int n, z;
    scanf("%d %d", &n, &z);
    input.resize(n);
    vector<int> dodatnie;
    vector<int> ujemne;
    for (int i=0; i<n; ++i){
        int a, b;
        scanf("%d %d", &a, &b);
        input[i] = pair<int, int>(a, b);
        if (b - a < 0){
            ujemne.push_back(i);
        }else{
            dodatnie.push_back(i);
        }
    }
    sort(dodatnie.begin(), dodatnie.end(), sort_fun);
    sort(ujemne.begin(), ujemne.end(), sort_fun2);
/*    for (int i=0; i<dodatnie.size(); ++i){
        printf("%d ", dodatnie[i]);
    }
    printf("\n");
    for (int i=0; i<ujemne.size(); ++i){
        printf("%d ", ujemne[i]);
    }
    printf("\n");*/
    int res = z;
    for (int i=0; i<dodatnie.size(); ++i){
        int j = dodatnie[i];
        if (res - input[j].first > 0){
            res += (input[j].second - input[j].first); 
        }else{
            printf("NIE\n");
            return 0;
        }
    }
//    printf("res = %d\n", res);
    for (int i=0; i<ujemne.size(); ++i){
        int j= ujemne[i];
        if (res - input[j].first > 0){
            res += (input[j].second - input[j].first);
        }else{
            printf("NIE\n");
            return 0;
        }
    }
    printf("TAK\n");
    for (int i=0; i<dodatnie.size(); ++i){
        printf("%d ", dodatnie[i]+1);
    }
    for (int i=0; i<ujemne.size(); ++i){
        printf("%d ", ujemne[i]+1);
    }
    printf("\n");
    return 0;
}