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
77
78
79
80
81
82
83
84
85
86
87
88
#include<cstdio>
#include<algorithm>
using namespace std;
typedef struct
{
     int poz;   
     int kos;   
     int zys;   
        
}wzo;

bool ros(wzo x,wzo y)
{
     if (x.kos<y.kos) return true;     
     else return false;
}

int main()
{
    int n,hp;
    scanf("%d%d",&n,&hp);
    bool rez=true;
    int wyn[n];
    wzo w[n];
    wzo m[n];
    int mn=0,wi=0;
    for (int i=0; i<n; i++)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        if (a>b) 
        {
          m[mn].poz=i;
          m[mn].kos=a;
          m[mn].zys=b;         
          mn++;       
        } else
        {
          w[wi].poz=i;
          w[wi].kos=a;      
          w[wi].zys=b;  
          wi++;  
        }  
    }
    sort (w, w+wi, ros);
    sort (m, m+mn, ros);
    int k=0;
    for (int i=0; i<wi; i++)
    {
        if (hp-w[i].kos<=0) 
        {
           rez=false;
           goto stop;
        } else
        {
            wyn[k]=w[i].poz+1;    
            k++;    
        }
        hp-=w[i].kos;
        hp+=w[i].zys;
    }
    for (int i=mn-1; i>=0; i--)
    {
        if (hp-m[i].kos<=0) 
        {
           rez=false;
           goto stop;                           
        } else   
        {
           wyn[k]=m[i].poz+1;          
           k++;      
        }
        hp-=m[i].kos;
        hp+=m[i].zys;
    }
    stop:
    if (rez==false) printf("NIE\n");
    else
    {
         printf("TAK\n");
         for (int i=0; i<n; i++)
         {     
            if (i==n-1) printf("%d\n",wyn[i]);
            else  printf("%d ",wyn[i]);  
         }
    }
    return 0;   
}