'''
2231 - 분해합

어떤 자연수 N이 있을때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다.

어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다.
예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다.
따라서 245는 256의 생성자가 된다.

물론, 어떤 자연수의 경우에는 생성자가 없을수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.

자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오

입력: 첫째 줄에 자연수 (1<=N<=1000000)이 주어진다
출력: 첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.

풀이:
첫째 줄 입력값은 분해합, 출력값은 생성자가 된다.
해당 문제는 브루트 포스 알고리즘을 사용하므로 단순히 처음 값부터 끝값까지 비교하여 가장 작은 생성자를 구해내야 한다.

먼저 n이라는 분해합을 입력받는다. 연산 결과를 받을 result를 0으로 초기화 시킨다.
이후 반복문으로 1부터 입력값까지 반복하면서 작은 값을 찾아낸다.

m이라는 리스트에 들어갈 값은 생성자를 쪼갠 값이 들어가게 된다.(ex)196 = 1, 9, 6)
result는 결국 (생성자 + 생성자를 쪼개고 더한 값)이 되므로 분해합을 표현하게 된다.

결국 result가 입력받은 값(분해합)과 동일하다면 i(생성자)값을 출력하고
문제에서 생성자가 없는 경우, 즉, 생성자와 분해합이 같다면 생성자가 없는 것이므로 0을 출력한다.
'''

n = int(input())
result = 0

for i in range(1,n+1):
    m = list(map(int,str(i)))
    result = i + sum(m)         # result는 i(생성자) + sum(m)(해당 숫자를 쪼갠 합) = 분해합

    if result == n:
        print(i)
        break
    if i == n:
        print(0)
