#pragma GCC optimize("O3")
#pragma GCC optimize ("unroll-loops")
#include <assert.h>
#include <stdio.h>
typedef long long int lld;

void table(int prev[], int new[]) {
  for (int i = 0; i <= 9; i++) {
    if (prev == NULL) {
      new[i] = 1;
    } else {
      new[i] = 0;
      for (int j = -1; j <= 1; j++) {
        if (i + j < 0 || i + j > 9) {
          continue;
        }
        new[i] += prev[i + j];
      }
    }
  }
}

int main() {
  int k;
  assert(scanf("%d", &k) == 1);

  int cnt[20][10], last;
  lld tmp = k - 1;
  for (int i = 0; i < 20; i++) {
    table(i > 0 ? cnt[i - 1] : NULL, cnt[i]);
    for (int j = 1; j <= 9; j++) {
      if (tmp >= cnt[i][j]) {
        tmp -= cnt[i][j];
      } else {
        last = j;
        printf("%d", last);
        for (int l = i - 1; l >= 0; l--) {
          for (int m = -1; m <= 1; m++) {
            if (last + m < 0 || last + m > 9) {
              continue;
            }
            if (tmp >= cnt[l][last + m]) {
              tmp -= cnt[l][last + m];
            } else {
              last = last + m;
              printf("%d", last);
              break;
            }
          }
        }
        goto exit;
      }
    }
  }
  exit:
  puts("");
}
