#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T bigmod(T b, T p, T m) {
  T ret;
  if (p == 0) return 1;
  if (p & 1) {
    ret = (bigmod(b, p / 2, m) % m);
    return ((b % m) * ret * ret) % m;
  } else {
    ret = (bigmod(b, p / 2, m) % m);
    return (ret * ret) % m;
  }
}
int dx4[] = {1, -1, 0, 0};
int dy4[] = {0, 0, 1, -1};
int dx6[] = {0, 0, 1, -1, 0, 0};
int dy6[] = {1, -1, 0, 0, 0, 0};
int dz6[] = {0, 0, 0, 0, 1, -1};
int dx8[] = {1, -1, 0, 0, -1, 1, -1, 1};
int dy8[] = {0, 0, 1, -1, 1, 1, -1, -1};
int dkx8[] = {-1, 1, -1, 1, -2, -2, 2, 2};
int dky8[] = {2, 2, -2, -2, 1, -1, 1, -1};
int tc = 1;
const double eps = 1e-9;
const double pi = acos(-1.0);
const long long int mx = 1000000;
const long long int mod = 1000000007;
long long fib[mx + 5];
int main() {
  long long i, j, k, sum, last, s;
  while (cin >> s >> k) {
    vector<long long> out;
    fib[0] = 1;
    last = 0;
    sum = 0;
    for (i = 1;; i++) {
      if (i > k) last += fib[i - k - 1];
      sum += fib[i - 1];
      fib[i] = sum - last;
      if (sum > s) break;
    }
    for (; i >= 0 && s; i--) {
      if (s >= fib[i]) {
        s -= fib[i];
        out.push_back(fib[i]);
      }
    }
    out.push_back(0);
    cout << out.size() << "\n";
    for (i = 0; i < out.size(); i++) printf("%lld ", out[i]);
    printf("\n");
  }
  return 0;
}
