#include <bits/stdc++.h>
using namespace std;
long long int pow_ar[26];
vector<long long int> primes;
long long int sieve[105];
long long int pascal_triangle[1][1];
long long int fact[1];
long long int dx[] = {1, -1, 0, 0};
long long int dy[] = {0, 0, 1, -1};
long long int mod_pow(long long int n, long long int p, long long int mod) {
  long long int res = 1;
  while (p) {
    if (p & 1) res = (res * n) % mod;
    n = (n * n) % mod;
    p /= 2;
  }
  return res;
}
long long int mod_inv(long long int n, long long int mod) {
  return mod_pow(n, mod - 2, mod);
}
long long int mod_divison(long long int dividend, long long int divisor,
                          long long int mod) {
  return (dividend * mod_inv(divisor, mod)) % mod;
}
long long int get_nCr(long long int n, long long int k, long long int mod) {
  return mod_divison(fact[n], (fact[k] * fact[n - k]) % mod, mod);
}
long long int gcd(long long int a, long long int b) {
  long long int temp;
  if (a < b) {
    temp = a;
    a = b;
    b = temp;
  }
  while (a % b) {
    temp = a;
    a = b;
    b = temp % b;
  }
  return b;
}
void generate_power(long long int n, long long int p) {
  pow_ar[0] = 1;
  for (long long int i = 1; i < p; i++) pow_ar[i] = pow_ar[i - 1] * n;
}
void calc_sieve() {
  for (long long int i = 0; i < 105; i++) sieve[i] = 0;
  sieve[0] = sieve[1] = -1;
  for (long long int i = 2; i < 105; i++) {
    if (sieve[i] == 0) {
      primes.push_back(i);
      for (long long int j = i; j < 105; j = j + i) {
        sieve[j]++;
      }
    }
  }
}
void generate_pascal_triangle(long long int n) {
  pascal_triangle[0][0] = 1;
  for (int i = 1; i < n; i++) {
    pascal_triangle[i][0] = 1;
    for (int j = 1; j < i; j++)
      pascal_triangle[i][j] =
          (pascal_triangle[i - 1][j - 1] + pascal_triangle[i - 1][j]) %
          1000000007L;
    pascal_triangle[i][i] = 1;
  }
}
long long int fibo[100];
int main() {
  fibo[0] = 1;
  fibo[1] = 1;
  for (long long int i = 2; i <= 60; i++) fibo[i] = (fibo[i - 2] + fibo[i - 1]);
  long long int n, k;
  cin >> n >> k;
  long long int start = 1;
  while (start <= n && k > 0) {
    if (k < fibo[n - start]) {
      cout << start << " ";
      start++;
      continue;
    }
    if (k == fibo[n - start]) {
      k -= fibo[n - start];
      cout << start << " ";
      for (long long int i = start + 1; i <= n; i += 2) {
        if (i == n)
          cout << n << endl;
        else
          cout << i + 1 << " " << i << " ";
      }
      continue;
    }
    cout << start + 1 << " " << start << " ";
    k -= fibo[n - start];
    start += 2;
  }
  return 0;
}
