using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var k = long.Parse(ReadLine()); var ok = 99_193_752_409_910_741; var ng = 0L; while (ok - ng > 1) { var mid = (ok + ng) / 2; var sum = Calc(mid); if (sum == k) { WriteLine(mid); return; } if (sum > k) ok = mid; else ng = mid; } WriteLine(-1); } static long Calc(long n) { var s = n.ToString().Select(c => c - '0').ToArray(); var count = 0L; var dp = new long[20]; for (var j = 1; j < s[0]; ++j) { ++dp[j]; ++count; } ++dp[s[0] + 10]; for (var i = 1; i < s.Length; ++i) { var ndp = new long[20]; for (var j = 0; j < 10; ++j) ndp[j] = dp[j] * 10 + count + (j > 0 ? 1 : 0); count = count * 10 + 9; for (var p = 0; p < 10; ++p) ndp[p] += dp[p + 10] * s[i]; for (var j = 0; j < s[i]; ++j) { ++ndp[j]; ++count; } for (var p = 10; p < 20; ++p) ndp[p] = dp[p]; ++ndp[s[i] + 10]; dp = ndp; } return dp[0] + dp[4] + dp[6] + dp[8] * 2 + dp[9] + dp[10] + dp[14] + dp[16] + dp[18] * 2 + dp[19]; } }