      MODULE solveMod
        implicit none
        
        public
        integer(16) :: counter=0,maxDigit,k
        integer(16) :: ans(10)
        
        contains
        function numLun( digit ) result( num )
          implicit none
          integer(16),intent(in) :: digit
          integer(16) :: num,i
          logical dummy
          
          maxDigit = digit
          
          do i = 1,9
            dummy = check( i,1_16 )
            ans(1) = i
          end do
          
          num = counter
        end function numLun
        
        recursive function check( num,numCall ) result( dummy )
          implicit none
          integer(16) :: num,numCall,i
          logical :: dummy
          character(10) :: s
          
          ans(numCall) = num
          
          if( num==-1.or.num==10 )then
            dummy = .false.
            return
          else
            if( numCall==maxDigit )then
              counter = counter + 1
              if(counter==k)then
                do i = 1,maxDigit
                  write(s(i:i),'(i1)') ans(i)
                end do
                !print*,ans(1:maxDigit)
                print*,s(1:maxDigit)
                stop
              end if
              return
            else
              dummy = check( num-1,numCall+1 )
              dummy = check( num  ,numCall+1 )
              dummy = check( num+1,numCall+1 )
            end if
          end if
        end function check
          
      END MODULE solveMod
      
      PROGRAM LunlunNumber
      use solveMod
      IMPLICIT NONE
      integer(16) ::  digit,buffer
      
      read*,k
      
      digit = 1 !digit is digit
      buffer = 0
      do while(.true.)
        buffer = buffer + numLun( digit )
        digit = digit + 1
      end do 
      
      
      END PROGRAM