#include <bits/stdc++.h>
using namespace std;
const int upp = 10000;
set<int> ans;
set<int>::iterator ls;
int n, m, now;
int abs(int x) {
  if (x < 0) return -x;
  return x;
}
bool boo;
int dfs(int sy, int nsum) {
  if (ans.size() >= m && boo) return 0;
  if (sy == 0) {
    int ng = abs(n - nsum);
    if (ng < upp) ans.insert(now * upp + ng), ans.insert(ng * upp + now);
    ng = abs(n + nsum);
    if (ng < upp) ans.insert(now * upp + ng), ans.insert(ng * upp + now);
    if (nsum != 0 && n % nsum == 0) {
      ng = abs(n / nsum);
      if (ng < upp) ans.insert(now * upp + ng), ans.insert(ng * upp + now);
    }
    if (ans.size() >= m) {
      boo = true;
      int i = 1;
      for (ls = ans.begin(); i <= m; i++, ls++) printf("%08d\n", *ls);
      return 0;
    }
    return 0;
  }
  int g = sy % 10;
  dfs(sy / 10, nsum + g);
  dfs(sy / 10, nsum - g);
  dfs(sy / 10, nsum * g);
  return 0;
}
int main() {
  scanf("%d%d", &n, &m);
  for (now = 0; now < upp; now++) dfs(now / 10, now % 10);
  return 0;
}
