#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
const long double eps = 1e-6;
const long long inf = 1000000007;
const long double pi = acos(-1.0);
const int prime = 53;
inline void finclude() { srand(time(NULL)); }
long long dp[1 << 17], n, linf = 2e18;
bool g[17][17] = {};
bool use[17] = {};
long long ans[17] = {};
int get(long long x, int i) {
  x >>= i;
  return (x & 1);
}
int bitcnt(long long x) {
  int cnt = 0;
  while (x) {
    cnt += (x & 1);
    x >>= 1;
  }
  return cnt;
}
vector<bool> us;
bool dfs(int u, int frs, int pr = -1) {
  if (u == frs && pr != -1) return true;
  us[u] = true;
  for (int i = 1; i <= n; ++i) {
    if (g[u][i] && !us[i]) {
      if (dfs(i, frs, u)) return true;
    }
  }
  return false;
}
long long f(long long mask) {
  if (dp[mask] != -1) return dp[mask];
  if (mask == (1 << n) - 1) return dp[mask] = 1;
  long long sum = 0, cnt = 0;
  for (int i = 1; i <= n; ++i)
    if (!use[i]) {
      cnt = i;
      break;
    }
  bool find;
  if (mask == (1 << (n - 1)) - 1) {
    bool asf = false;
  }
  for (int i = 0; i < n; ++i) {
    if (!get(mask, i)) {
      find = true;
      for (int j = 1; j <= n && find; ++j)
        if ((g[i + 1][j] && get(mask, j - 1) && ans[j - 1] == 20) ||
            (g[i + 1][j] && ans[j - 1] < cnt))
          find = false;
      if (!find) continue;
      use[cnt] = true;
      sum += f(mask | (1 << i));
      if (mask == 0) {
        bool asf = false;
      }
      if (sum > linf || sum < 0) sum = linf;
      use[cnt] = false;
    }
  }
  return dp[mask] = sum;
}
int main() {
  long long y, m;
  cin >> n >> y >> m;
  y -= 2000;
  for (int i = 0; i < (1 << 17); ++i) dp[i] = -1;
  vector<int> a(m), b(m);
  for (int i = 0; i < 17; ++i) ans[i] = 20;
  for (int i = 0; i < m; ++i) {
    cin >> a[i] >> b[i];
    g[a[i]][b[i]] = true;
  }
  for (int i = 0; i < n; ++i) {
    us.assign(n + 1, false);
    if (dfs(i + 1, i + 1)) {
      cout << "The times have changed\n";
      return 0;
    }
  }
  if (f(0) < y) {
    cout << "The times have changed\n";
    return 0;
  }
  long long mask = 0, used = 0;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      if (!get(used, j)) {
        for (int k = 0; k < (1 << 17); ++k) dp[k] = -1;
        ans[i] = j + 1;
        use[j + 1] = true;
        if (j == 5 && i == 1) {
          bool af = false;
        }
        if (f(mask | (1 << i)) >= y) {
          cout << j + 1 << ' ';
          mask |= 1 << i;
          used |= 1 << j;
          break;
        } else
          y -= f(mask | (1 << i));
        use[j + 1] = false;
      }
    }
  }
  cout << '\n';
  return 0;
}
