#include <bits/stdc++.h>
using namespace std;
const long long MAX = 1e3;
long long perm[MAX + 5];
long long new_perm[MAX + 5];
bool visited[MAX + 5];
long long adj[MAX + 5];
long long n;
void dfs(long long source, set<long long, greater<long long> > &s) {
  visited[source] = true;
  s.insert(source);
  if (!visited[adj[source]]) {
    dfs(adj[source], s);
  }
}
bool is_ok() {
  vector<set<long long, greater<long long> > > v;
  for (long long i = 1; i <= n; i++) {
    adj[i] = perm[i];
  }
  memset(visited, false, sizeof visited);
  for (long long i = 1; i <= n; i++) {
    set<long long, greater<long long> > cur;
    if (!visited[i]) {
      dfs(i, cur);
      v.push_back(cur);
    }
  }
  sort(v.begin(), v.end(),
       [](set<long long, greater<long long> > lhs,
          set<long long, greater<long long> > rhs) {
         return *lhs.begin() < *rhs.begin();
       });
  long long c = 1;
  for (auto each : v) {
    for (auto each_s : each) {
      new_perm[c++] = each_s;
    }
  }
  for (long long i = 1; i <= n; i++) {
    if (perm[i] != new_perm[i]) {
      return false;
    }
  }
  return true;
}
void toolkit() {
  cin >> n;
  for (long long i = 1; i <= n; i++) {
    perm[i] = i;
  }
  long long c = 1;
  do {
    if (is_ok()) {
      cout << c++ << ": ";
      for (long long i = 1; i <= n; i++) {
        cout << perm[i] << " ";
      }
      cout << '\n';
    }
  } while (next_permutation(perm + 1, perm + 1 + n));
}
string to_bin(long long n) {
  string bin = "";
  while (n) {
    bin += (n & 1) + '0';
    n >>= 1;
  }
  reverse(bin.begin(), bin.end());
  return bin;
}
int main() {
  ios_base::sync_with_stdio(false);
  long long fib[55];
  fib[1] = 1;
  fib[2] = 2;
  for (long long i = 3; i <= 50; i++) {
    fib[i] = fib[i - 1] + fib[i - 2];
  }
  long long N, K;
  cin >> N >> K;
  long long N_aux = N;
  long long mask = 0;
  long long cur = 0;
  for (long long i = N - 1; i >= 1; i--) {
    if (i != (N - 1)) {
      if (mask & (1LL << (i + 1))) {
        continue;
      }
    }
    long long f;
    if (!cur) {
      f = fib[i] + 1;
    } else {
      f = fib[i];
    }
    if (K >= f + cur) {
      mask |= (1LL << i);
      cur += f;
    }
  }
  long long p[55];
  for (long long i = 1; i <= N; i++) {
    p[i] = i;
  }
  for (long long i = 1, j = N - 1; i <= N; i++, j--) {
    if (mask & (1LL << j)) {
      swap(p[i], p[i + 1]);
    }
  }
  cout << p[1];
  for (long long i = 2; i <= N; i++) {
    cout << " " << p[i];
  }
  cout << '\n';
  return 0;
}
