#include <bits/stdc++.h>
using namespace std;
const int maxk = 10000 + 5;
const int M = 10000000;
int k, m;
int bit[maxk], f[10];
int v[10], c[10];
bool vis[M];
void init() {
  bit[0] = 0;
  for (int p = 1; p * 10 <= maxk; p *= 10)
    for (int i = p; i < p * 10; ++i) bit[i] = bit[p - 1] + 1;
  bit[0] = 1;
  for (int i = 10000; i < maxk; ++i) bit[i] = 5;
  f[0] = 1;
  for (int i = 1; i < 10; ++i) f[i] = f[i - 1] * 10;
}
void dfs(int n) {
  if (!m) return;
  bool flag = false;
  for (int i = 0; i < n; ++i) {
    if (bit[v[i]] == c[i]) continue;
    flag = true;
    int tv = v[i], tc = c[i];
    for (int j = n; j > i; --j) {
      v[j] = v[j - 1];
      c[j] = c[j - 1];
    }
    for (int j = 0; j <= tv; ++j) {
      int k = tv - j;
      if (bit[j] + bit[k] > tc) break;
      v[i] = j;
      v[i + 1] = k;
      for (int l = bit[j]; l + bit[k] <= tc; ++l) {
        c[i] = l;
        c[i + 1] = tc - l;
        dfs(n + 1);
      }
      if (j == k) continue;
      v[i] = k;
      v[i + 1] = j;
      for (int l = bit[k]; l + bit[j] <= tc; ++l) {
        c[i] = l;
        c[i + 1] = tc - l;
        dfs(n + 1);
      }
    }
    for (int j = 1; tv + j < 100000000; ++j) {
      int k = tv + j;
      if (bit[j] + bit[k] > tc) break;
      v[i] = j;
      v[i + 1] = k;
      for (int l = bit[j]; l + bit[k] <= tc; ++l) {
        c[i] = l;
        c[i + 1] = tc - l;
        dfs(n + 1);
      }
      if (j == k) continue;
      v[i] = k;
      v[i + 1] = j;
      for (int l = bit[k]; l + bit[j] <= tc; ++l) {
        c[i] = l;
        c[i + 1] = tc - l;
        dfs(n + 1);
      }
    }
    for (int j = 1; j <= tv; ++j)
      if (tv % j == 0) {
        int k = tv / j;
        if (bit[j] + bit[k] > tc) break;
        v[i] = j;
        v[i + 1] = k;
        for (int l = bit[j]; l + bit[k] <= tc; ++l) {
          c[i] = l;
          c[i + 1] = tc - l;
          dfs(n + 1);
        }
        if (j == k) continue;
        v[i] = k;
        v[i + 1] = j;
        for (int l = bit[k]; l + bit[j] <= tc; ++l) {
          c[i] = l;
          c[i + 1] = tc - l;
          dfs(n + 1);
        }
      }
    for (int j = i; j < n; ++j) {
      v[j] = v[j + 1];
      c[j] = c[j + 1];
    }
    v[i] = tv;
    c[i] = tc;
  }
  if (!flag) {
    int res = 0, p = 1;
    for (int i = n - 1; i >= 0; --i) {
      res += v[i] * p;
      p *= f[c[i]];
    }
    if (vis[res % M]) return;
    vis[res % M] = true;
    printf("%08d\n", res);
    --m;
  }
}
int main() {
  scanf("%d%d", &k, &m);
  init();
  v[0] = k;
  c[0] = 8;
  dfs(1);
  return 0;
}
