#include <bits/stdc++.h>
using namespace std;
namespace Fast_read {
inline int read_for_int() {
  int s = 0, f = 1;
  char ssd = getchar();
  while (ssd < '0' || ssd > '9') f = ssd == '-' ? -1 : 1, ssd = getchar();
  while (ssd >= '0' && ssd <= '9')
    s = (s << 3) + (s << 1) + (ssd - '0'), ssd = getchar();
  return s * f;
}
inline long long read_for_ll() {
  long long s = 0, f = 1;
  char ssd = getchar();
  while (ssd < '0' || ssd > '9') f = ssd == '-' ? -1 : 1, ssd = getchar();
  while (ssd >= '0' && ssd <= '9')
    s = (s << 3) + (s << 1) + (ssd - '0'), ssd = getchar();
  return s * f;
}
inline unsigned long long read_for_ull() {
  unsigned long long s = 0, f = 1;
  char ssd = getchar();
  while (ssd < '0' || ssd > '9') f = ssd == '-' ? -1 : 1, ssd = getchar();
  while (ssd >= '0' && ssd <= '9')
    s = (s << 3) + (s << 1) + (ssd - '0'), ssd = getchar();
  return s * f;
}
inline char nc() {
  static char buf[100000], *p1 = buf, *p2 = buf;
  return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2)
             ? EOF
             : *p1++;
}
inline void read(int &x) {
  char ch = nc();
  int f = 1;
  x = 0;
  while (!(ch >= '0' && ch <= '9')) f = ch == '-' ? -1 : 1, ch = nc();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - 48, ch = nc();
  x = x * f;
}
inline void read(long long &x) {
  char ch = nc();
  long long f = 1;
  x = 0ll;
  while (!(ch >= '0' && ch <= '9')) f = ch == '-' ? -1 : 1, ch = nc();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - 48, ch = nc();
  x = x * f;
}
inline void read(unsigned long long &x) {
  char ch = nc();
  unsigned long long f = 1;
  x = (unsigned long long)0;
  while (!(ch >= '0' && ch <= '9')) f = ch == '-' ? -1 : 1, ch = nc();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - 48, ch = nc();
  x = x * f;
}
}  // namespace Fast_read
using namespace Fast_read;
const int maxn = 17;
const int MAXN = (1 << 16);
long long f[MAXN];
int num[maxn], n, m;
long long y;
vector<int> small[maxn];
bool vis[maxn];
int all;
inline int lowbit(int x) { return x & (-x); }
inline int Count(int sta) {
  int cnt = 0;
  while (sta) {
    cnt += 1;
    sta -= lowbit(sta);
  }
  return cnt;
}
inline bool Insert(int sta, int id) {
  if (sta & (1 << (id - 1))) return false;
  for (register int i = 0; i < (int)small[id].size(); i += 1)
    if (sta & (1 << (small[id][i] - 1))) return false;
  return true;
}
inline long long dp(int x) {
  memset(f, 0, sizeof(f));
  f[0] = 1;
  for (int sta = 0; sta <= all; sta += 1)
    for (int i = 1; i <= n; i += 1)
      if (Insert(sta, i)) {
        int nxt = sta | (1 << (i - 1));
        if (i > x)
          f[nxt] += f[sta];
        else if (Count(nxt) == num[i])
          f[nxt] += f[sta];
      }
  return f[all];
}
inline void solve(int n, long long rest) {
  for (register int i = 1; i <= n; i += 1) {
    bool find = false;
    for (register int j = 1; j <= n; j += 1)
      if (!vis[j]) {
        num[i] = j;
        long long step = dp(i);
        if (step >= rest) {
          vis[j] = true;
          find = true;
          break;
        }
        rest -= step;
      }
    if (!find) {
      puts("The times have changed");
      return;
    }
  }
  if (rest != 1) {
    puts("The times have changed");
    return;
  }
  for (register int i = 1; i <= n; i += 1) cout << num[i] << " ";
  puts("");
}
int main() {
  scanf("%d %lld %d", &n, &y, &m);
  all = (1 << n) - 1;
  for (register int i = 1; i <= m; i += 1) {
    int a, b;
    scanf("%d %d", &a, &b);
    small[a].push_back(b);
  }
  y -= 2000;
  solve(n, y);
  return 0;
}
