Problem: Numbers k-bonacci (k is integer, k > 1) are a generalization of Fibonacci numbers and are determined as follows:

  * F(k, n) = 0, for integer n, 1 ≤ n < k; 
  * F(k, k) = 1; 
  * F(k, n) = F(k, n - 1) + F(k, n - 2) + ... + F(k, n - k), for integer n, n > k. 



Note that we determine the k-bonacci numbers, F(k, n), only for integer values of n and k.

You've got a number s, represent it as a sum of several (at least two) distinct k-bonacci numbers. 

Input

The first line contains two integers s and k (1 ≤ s, k ≤ 109; k > 1).

Output

In the first line print an integer m (m ≥ 2) that shows how many numbers are in the found representation. In the second line print m distinct integers a1, a2, ..., am. Each printed integer should be a k-bonacci number. The sum of printed integers must equal s.

It is guaranteed that the answer exists. If there are several possible answers, print any of them.

Examples

Input

5 2


Output

3
0 2 3


Input

21 5


Output

3
4 1 16

Solution (in JAVA):

Solution:

import java.util.*;
import java.io.*;


public class B
{
   public static void main(String[] args)
   {
      new B(new FastScanner());
   }

   ArrayList<Long> generate(int K)
   {
      if (K < 100)
      {
         ArrayList<Long> res = new ArrayList<Long>();
         long[] arr = new long[300];
         long cur = 1;
         arr[K] = cur;
         res.add(1L);
         for (int i=K+1; i<300; i++)
         {
            for (int j=1; j<=K; j++)
            {
               arr[i] += arr[i-j];
               if (arr[i] > Integer.MAX_VALUE)
                  return res;
            }
            res.add(arr[i]);
         }
      
         return res;
      }

      ArrayList<Long> res = new ArrayList<Long>();
      res.add(1L);
      for (int i=0; i<300; i++)
      {
         long cur = 0;
         for (long v : res)
         {
            cur += v;
            if (cur > Integer.MAX_VALUE)
               return res;
         }
         res.add(cur);
      }
      return res;
   }
   
   public B(FastScanner in)
   {
      long S = in.nextInt();
      int K = in.nextInt();

      ArrayList<Long> vs = generate(K);
      Collections.reverse(vs);

      ArrayList<Long> res = new ArrayList<Long>();
      for (long v : vs)
      {
         if (S >= v)
         {
            S -= v;
            res.add(v);
         }
      }
      if (res.size() == 1)
         res.add(0L);

      System.out.println(res.size());
      StringBuilder sb = new StringBuilder();
      for (long v : res)
      {
         sb.append(v);
         sb.append(' ');
      }
      System.out.println(sb.toString().trim());
   }
}

class FastScanner{
    private InputStream stream;
    private byte[] buf = new byte[1024];
    private int curChar;
    private int numChars;
    
    public FastScanner()
    {
        stream = System.in;
    }
    
    int read()
    {
        if (numChars == -1)
            throw new InputMismatchException();
        if (curChar >= numChars){
            curChar = 0;
            try{
                numChars = stream.read(buf);
            } catch (IOException e) {
                throw new InputMismatchException();
            }
            if (numChars <= 0)
                return -1;
        }
        return buf[curChar++];
    }
    
    boolean isSpaceChar(int c)
    {
        return c==' '||c=='\n'||c=='\r'||c=='\t'||c==-1;
    }
    
    boolean isEndline(int c)
    {
        return c=='\n'||c=='\r'||c==-1;
    }
    
    int nextInt()
    {
        return Integer.parseInt(next());
    }
    
    long nextLong()
    {
        return Long.parseLong(next());
    }
    
    double nextDouble()
    {
        return Double.parseDouble(next());
    }
    
    String next(){
        int c = read();
        while (isSpaceChar(c))
            c = read();
        StringBuilder res = new StringBuilder();
        do{
            res.appendCodePoint(c);
            c = read();
        }while(!isSpaceChar(c));
        return res.toString();
    }
    
    String nextLine(){
        int c = read();
        while (isEndline(c))
            c = read();
        StringBuilder res = new StringBuilder();
        do{
            res.appendCodePoint(c);
            c = read();
        }while(!isEndline(c));
        return res.toString();
    }
}