import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class DifferentSummands { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); List summands = getOptimalSummands(n); System.out.println(summands.size()); for (Integer summand : summands) { System.out.print(summand + " "); } } public static List getOptimalSummands(int n) { List summands = new ArrayList(); if (n < 3) { summands.add(n); return summands; } int runningSum = 0; for (int i = 1; i < n + 1; i++) { runningSum = runningSum + i; summands.add(i); if (runningSum == n) { break; } if (runningSum > n) { summands.remove(summands.size() - 1); summands.set(summands.size() - 1, summands.get(summands.size() - 1).intValue() + n - runningSum + i); break; } } return summands; } }