output_description: If there exists an integer b (b \geq 2) such that f(b,n)=s, print the smallest
  such b. If such b does not exist, print `-1` instead.
  
  * * *
input_description: The input is given from Standard Input in the following format:
  
      
      
      n
      s
attempt: import sys
  import math
  
  n=int(sys.stdin.readline().strip())
  s=int(sys.stdin.readline().strip())
  
  def divlist(n):
     sl=[]
     ll=[]
     for x in range(1,int(math.sqrt(n))+1):
         if n%x==0:
             sl.append(x)
             ll.append(n//x)
     ll.reverse()
     sl.extend(ll)
     return sl
  
  def f(b,n):
      if n<b:
          return n
      else:
          return f(b,n//b)+(n%b)
  
  if n<s:
      print(-1
  elif n==s:
      print(n+1)
  else:
      dl=divlist(n-s)
      for x in dl:
          if s==f(x+1,n):
              print(x+1)
              sys.exit()
      print(-1)
  
  
problem_description: Statement
  
  For integers b (b \geq 2) and n (n \geq 1), let the function f(b,n) be defined
  as follows:
  
    * f(b,n) = n, when n < b
    * f(b,n) = f(b,\,{\rm floor}(n / b)) + (n \ {\rm mod} \ b), when n \geq b
  
  Here, {\rm floor}(n / b) denotes the largest integer not exceeding n / b, and
  n \ {\rm mod} \ b denotes the remainder of n divided by b.
  
  Less formally, f(b,n) is equal to the sum of the digits of n written in base
  b. For example, the following hold:
  
    * f(10,\,87654)=8+7+6+5+4=30
    * f(100,\,87654)=8+76+54=138
  
  You are given integers n and s. Determine if there exists an integer b (b \geq
  2) such that f(b,n)=s. If the answer is positive, also find the smallest such
  b.
samples: [{"input": "87654\n    30", "output": "10\n    \n\n* * *"}, {"input": "87654\n    138", "output": "100\n    \n\n* * *"}, {"input": "87654\n    45678", "output": "-1\n    \n\n* * *"}, {"input": "31415926535\n    1", "output": "31415926535\n    \n\n* * *"}, {"input": "1\n    31415926535", "output": "-1"}]