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
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <stdio.h>

int check(int *tab, int n)
{
  int i = n - 1;

  while (i > 0 && tab[i - 1] >= tab[i])
  {
    i--;
  }

  if (i <= 0)
  {
    return 0;
  }

  if (i > 0)
  {
    int j = n - 1;

    while (tab[j] <= tab[i - 1])
    {
      j--;
    }

    int temp = tab[i - 1];

    tab[i - 1] = tab[j];

    tab[j] = temp;

    j = n - 1;

    while (i < j)
    {
      temp = tab[i];

      tab[i] = tab[j];

      tab[j] = temp;

      i++;
      j--;
    }
  }

  return 1;
}

int main()
{
  int n;
  long long int k;
  long long int m = 0;

  int tab[250001];

  scanf("%d %lld", &n, &k);

  for (int i = 0; i < n; i++)
  {
    tab[i] = i + 1;
  }

  while (check(tab, n) == 1)
  {
    int l = 0;
    int r = 0;

    for (int i = 0; i < n; i++)
    {
      for (int j = i + 1; j < n; j++)
      {
        if (tab[i] > tab[j])
        {
          l++;
        }
      }
    }

    for (int i = n - 1; i >= 0; i--)
    {
      for (int j = i - 1; j >= 0; j--)
      {
        if (tab[i] > tab[j])
        {
          r++;
        }
      }
    }

    if (l == r)
    {
      m++;

      if (m == k)
      {
        printf("TAK\n");

        for (int i = 0; i < n; i++)
        {
          if (i < n -1)
          {
            printf("%d ", tab[i]);
          }
          else
          {
            printf("%d\n", tab[i]);
          }
        }

        break;
      }
    }
  }

  if (m != k)
  {
    printf("NIE\n");
  }

  return 0;
}