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
#include <stdio.h>
#include <stdlib.h>

typedef struct potw
{
 int zabiera;
 int roznica;
 int nr;
} potw;

int n,z1;
long long int z;
potw dod[100001],uje[100001];
int kol[100001];
int ndod=0,nuje=0,nkol=0;

int dodCmp(const void *a, const void *b)
{
   return ( (*(potw*)a).zabiera - (*(potw*)b).zabiera );
}

int ujeCmp(const void *a, const void *b)
{
   return ( (*(potw*)b).zabiera - (*(potw*)a).zabiera );
}

int main(void)
{
 int i=0,d,a;
 scanf("%d %d",&n,&z1);
 z=z1;
 for(;i<n;++i)
 {
  scanf("%d %d",&d,&a);
  if(a-d>=0)
  {
   dod[ndod].zabiera=d;
   dod[ndod].roznica=a-d;
   dod[ndod].nr=i+1;
   ++ndod;
  }
  else
  {
   uje[nuje].zabiera=d;
   uje[nuje].roznica=a-d;
   uje[nuje].nr=i+1;
   ++nuje;
  }
 }
 qsort(dod, ndod, sizeof(potw), dodCmp);
 qsort(uje, nuje, sizeof(potw), ujeCmp);

 for(i=0;i<ndod;++i)
 {
  if(dod[i].zabiera>=z)
  {
   printf("NIE\n");
   return 0;
  }
  else 
  {
   z+=dod[i].roznica;
   kol[nkol++]=dod[i].nr;
  }
 }
 for(i=0;i<nuje;++i)
 {
  if(uje[i].zabiera>=z)
  {
   printf("NIE\n");
   return 0;
  }
  else
  {
   z+=uje[i].roznica;
   kol[nkol++]=uje[i].nr;
  }
 }
 printf("TAK\n");
 for(i=0;i<n;++i)
 {
  printf("%d ",kol[i]);
 }
 printf("\n");
 return 0;
}