#include <bits/stdc++.h>
using namespace std;
template <class T>
void vp(T &a, int p) {
  for (int i = 0; i < p; i++) cout << a[i] << " ";
  cout << endl;
}
const long long mod = 1000000007;
const int N = 16;
bool tc[N][N];
const string noans = "The times have changed";
void wf(int n) {
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      for (int k = 0; k < n; k++) tc[i][j] |= (tc[i][k] & tc[k][j]);
}
long long dp[1 << N][N];
long long compute(const int n, const int d, const vector<int> &a, int st,
                  int now, vector<int> &in) {
  if (now == in.size()) return 1;
  long long &ret = dp[st][now];
  if (ret != -1) return ret;
  ret = 0;
  for (int i = d; i < n; i++) {
    int nest = (1 << i);
    if ((nest & st) != 0) continue;
    bool isok = true;
    for (int j = 0; j < d; j++) {
      if (tc[i][j] && !(in[now] < a[j])) isok = false;
      if (tc[j][i] && !(a[j] < in[now])) isok = false;
    }
    for (int j = d; j < n; j++) {
      if (((1 << j) & st) && tc[i][j]) isok = false;
    }
    if (!isok) continue;
    ret += compute(n, d, a, st | nest, now + 1, in);
  }
  return ret;
}
void solve(int n, long long y) {
  vector<int> ans(n);
  for (int i = 0; i < n; i++)
    if (tc[i][i]) {
      cout << noans << endl;
      return;
    }
  for (int i = 0; i < (1 << n); i++)
    for (int j = 0; j < n; j++) dp[i][j] = -1;
  {
    vector<int> tmp;
    for (int i = 0; i < n; i++) tmp.push_back(i);
    long long total = compute(n, 0, ans, 0, 0, tmp);
    if (total < y) {
      cout << noans << endl;
      return;
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      ans[i] = j;
      vector<int> tmp;
      set<int> S;
      for (int ii = 0; ii < i; ii++) S.insert(ans[ii]);
      if (S.find(j) != S.end()) continue;
      S.insert(j);
      bool isok = true;
      for (int ii = 0; ii < i; ii++)
        if (tc[ii][i] && !(ans[ii] < ans[i]))
          isok = false;
        else if (tc[i][ii] && !(ans[i] < ans[ii]))
          isok = false;
      if (!isok) continue;
      for (int ii = 0; ii < n; ii++)
        if (S.find(ii) == S.end()) tmp.push_back(ii);
      for (int ii = 0; ii < (1 << n); ii++)
        for (int jj = 0; jj < n; jj++) dp[ii][jj] = -1;
      long long cnt = compute(n, i + 1, ans, 0, 0, tmp);
      if (cnt != 0 && cnt >= y)
        break;
      else
        y -= cnt;
    }
  }
  for (int i = 0; i < ans.size(); i++) {
    if (i) cout << " ";
    cout << ans[i] + 1;
  }
  cout << endl;
}
int main() {
  int n, m;
  long long y;
  while (cin >> n >> y >> m) {
    for (int i = 0; i < n; i++)
      for (int j = 0; j < n; j++) tc[i][j] = false;
    for (int i = 0; i < m; i++) {
      int f, t;
      cin >> f >> t;
      f--;
      t--;
      tc[f][t] = true;
    }
    wf(n);
    y -= 2000;
    solve(n, y);
  }
  return false;
}
