#include <bits/stdc++.h>
using namespace std;
const long double eps = 1e-9;
const long double pi = acos(-1.0);
const long long inf = 1e+9;
#pragma comment(linker, "/STACK:36777216")
template <typename T>
istream &operator>>(istream &, vector<T> &);
template <typename T>
ostream &operator<<(ostream &, const vector<T> &);
vector<vector<int> > get(int n) {
  vector<vector<int> > ans;
  vector<int> a(n);
  for (int i = 0; i < n; i++) a[i] = i + 1;
  do {
    vector<int> used(n, 0);
    vector<vector<int> > r;
    for (int i = 0; i < n; i++) {
      int val = a[i];
      if (used[val - 1]) continue;
      vector<int> tmp;
      while (!used[val - 1]) {
        tmp.push_back(val);
        used[val - 1] = 1;
        val = a[val - 1];
      }
      r.push_back(tmp);
    }
    for (int i = 0; i < r.size(); i++) {
      int maxP = max_element(r[i].begin(), r[i].end()) - r[i].begin();
      vector<int> q(r[i].size());
      for (int j = 0; j < r[i].size(); j++)
        q[j] = r[i][(j + maxP) % r[i].size()];
      r[i] = q;
    }
    vector<int> b(n);
    int sz = 0;
    for (int i = 0; i < r.size(); i++)
      for (int j = 0; j < r[i].size(); j++) b[sz++] = r[i][j];
    if (b == a) ans.push_back(b);
  } while (next_permutation(a.begin(), a.end()));
  return ans;
}
void solve2() {
  for (int n = 1; n < 9; n++) {
    cout << "-------------n = " << n << "----------" << endl;
    vector<vector<int> > ans = get(n);
    for (int i = 0; i < ans.size(); i++) {
      cout << i << ") ";
      for (int j = 0; j < ans[i].size(); j++) cout << ans[i][j] << " ";
      cout << endl;
    }
  }
}
vector<long long> fib;
vector<int> get(int n, long long l) {
  if (n == 1 && l == 0) return vector<int>(1, 1);
  long long L = fib[n];
  vector<int> res;
  vector<int> r1 = get(n - 1, l >= L ? l - L : l);
  if (l < L) {
    res.push_back(1);
    for (int i = 0; i < n - 1; i++) res.push_back(r1[i] + 1);
  } else {
    res.push_back(2);
    for (int i = 0; i < n - 1; i++) {
      if (r1[i] <= 1)
        res.push_back(r1[i]);
      else
        res.push_back(r1[i] + 1);
    }
  }
  return res;
}
void solve() {
  long long n, l;
  cin >> n >> l;
  fib.push_back(0);
  fib.push_back(1);
  for (int i = 2; i < 55; i++) fib.push_back(fib[i - 1] + fib[i - 2]);
  vector<int> ans = get(n, l - 1);
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << " ";
  cout << endl;
}
int main() {
  ios_base::sync_with_stdio(false);
  solve();
  return 0;
}
template <typename T>
istream &operator>>(istream &is, vector<T> &v) {
  for (int i = 0; i < v.size(); ++i) is >> v[i];
  return is;
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  for (int i = 0; i < v.size(); ++i) os << v[i] << " ";
  return os;
}
