output_description: Among the sets of problems with the total score of N, find a set in which the
  highest score of a problem is minimum, then print the indices of the problems
  in the set in any order, one per line.
  
  If there exists more than one such set, any of them will be accepted.
  
  * * *
input_description: The input is given from Standard Input in the following format:
  
      
      
      N
attempt: import math
  import bisect
  import collections
  import itertools
  import heapq
  import sys
  
  sys.setrecursionlimit(10**9)
  
  
  def gcd(a, b):
      return math.gcd  # 最大公約数
  
  
  def lcm(a, b):
      return (a * b) // math.gcd(a, b)  # 最小公倍数
  
  
  def iin():
      return int(input())  # 整数読み込み
  
  
  def isn():
      return input().split()  # 文字列読み込み
  
  
  def imn():
      return map(int, input().split())  # 整数map取得
  
  
  def iln():
      return list(map(int, input().split()))  # 整数リスト取得
  
  
  def iln_s():
      return sorted(iln())  # 昇順の整数リスト取得
  
  
  def iln_r():
      return sorted(iln(), reverse=True)  # 降順の整数リスト取得
  
  
  def join(l, s=""):
      return s.join(l)  # リストを文字列に変換
  
  
  def perm(l, n):
      return itertools.permutations(l, n)  # 順列取得
  
  
  def comb(l, n):
      return itertools.combinations(l, n)  # 組み合わせ取得
  
  
  def divisors(n):
      divisors = []
      for i in range(1, int(n**0.5) + 1):
          if n % i == 0:
              divisors.append(i)
              if i != n // i:
                  divisors.append(n // i)
      return divisors
  
  
  def is_prime(n):
      if n == 1:
          return False
      for i in range(2, int(n**0.5) + 1):
          if n % i == 0:
              return False
      return True
  
  
  def primes(n):
      is_prime = [True] * (n + 1)
      is_prime[0] = False
      is_prime[1] = False
      for i in range(2, int(n**0.5) + 1):
          if not is_prime[i]:
              continue
          for j in range(i * 2, n + 1, i):
              is_prime[j] = False
      return [i for i in range(n + 1) if is_prime[i]]
  
  
  def sieve_of_e(n):
      is_prime = [True] * (n + 1)
      is_prime[0] = False
      is_prime[1] = False
      for i in range(2, int(n**0.5) + 1):
          if not is_prime[i]:
              continue
          for j in range(i * 2, n + 1, i):
              is_prime[j] = False
      return is_prime
  
  
  N = iin()
  total = 0
  index = 0
  for i in range(1, N + 1):
      total += i
      if total >= N:
          index = i
          break
  diff = total - N
  for i in range(1, index + 1):
      if diff == i:
          continue
      print(i)
  
problem_description: Statement
  
  The problem set at _CODE FESTIVAL 20XX Finals_ consists of N problems.
  
  The score allocated to the i-th (1≦i≦N) problem is i points.
  
  Takahashi, a contestant, is trying to score exactly N points. For that, he is
  deciding which problems to solve.
  
  As problems with higher scores are harder, he wants to minimize the highest
  score of a problem among the ones solved by him.
  
  Determine the set of problems that should be solved.
samples: [{"input": "4", "output": "1\n    3\n    \n\nSolving only the 4-th problem will also result in the total score of 4 points,\nbut solving the 1-st and 3-rd problems will lower the highest score of a\nsolved problem.\n\n* * *"}, {"input": "7", "output": "1\n    2\n    4\n    \n\nThe set \\\\{3,4\\\\} will also be accepted.\n\n* * *"}, {"input": "1", "output": "1"}]