#include <bits/stdc++.h>
using namespace std;
vector<int> v;
int n;
int check() {
  int vis[102];
  memset(vis, 0, sizeof(vis));
  vector<int> vec;
  vec.push_back(0);
  vector<vector<int> > store;
  for (int i = 1; i <= n; i++) {
    if (vis[i]) continue;
    vis[i] = 1;
    vector<int> temp;
    temp.push_back(i);
    int in = i;
    while (1) {
      in = v[in];
      if (vis[in]) break;
      vis[in] = 1;
      temp.push_back(in);
    }
    sort(temp.begin(), temp.end());
    reverse(temp.begin(), temp.end());
    store.push_back(temp);
  }
  sort(store.begin(), store.end());
  for (int i = 0; i < store.size(); i++) {
    vector<int> tt = store[i];
    for (int j = 0; j < tt.size(); j++) vec.push_back(tt[j]);
  }
  if (vec == v)
    return 1;
  else
    return 0;
}
void test() {
  cin >> n;
  v.resize(n + 1);
  for (int i = 1; i <= n; i++) v[i] = i;
  int counter = 0;
  do {
    counter++;
    if (check()) {
      for (int i = 1; i <= n; i++) cout << v[i] << " ";
      cout << "\t " << counter << endl;
    }
  } while (next_permutation(v.begin() + 1, v.end()));
}
void solve() {
  long long n, k;
  cin >> n >> k;
  long long fib[102];
  fib[1] = fib[0] = 1;
  for (int i = 2; i <= 100; i++) fib[i] = fib[i - 1] + fib[i - 2];
  deque<int> deq;
  for (int i = 1; i <= n; i++) deq.push_back(i);
  int in = n - 1;
  for (int i = 0; i < n; i++) {
    if (k > fib[in]) {
      cout << *(deq.begin() + 1) << " ";
      k = k - fib[in];
      deq.erase(deq.begin() + 1);
    } else {
      cout << *(deq.begin()) << " ";
      deq.erase(deq.begin());
    }
    in--;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(nullptr);
  solve();
}
