#include <bits/stdc++.h>
using namespace std;
const int maxN = 10000;
int m, k, L;
set<int> ans;
void dfs(int LL, int gen_num) {
  if (ans.size() >= m) return;
  if (LL == 0) {
    int gap = abs(gen_num - k);
    if (gap < maxN) {
      ans.insert(L * maxN + gap);
      ans.insert(gap * maxN + L);
    }
    gap = abs(gen_num + k);
    if (gap < maxN) {
      ans.insert(L * maxN + gap);
      ans.insert(gap * maxN + L);
    }
    if (ans.size() >= m) return;
    return;
  }
  dfs(LL / 10, gen_num + (LL % 10));
  dfs(LL / 10, gen_num - (LL % 10));
  dfs(LL / 10, gen_num * (LL % 10));
}
void readf() {
  scanf("%d%d", &k, &m);
  for (L = 0; L < maxN; L++) dfs(L / 10, L % 10);
  set<int>::iterator i;
  for (i = ans.begin(); m != 0; i++, m--) printf("%08d\n", *i);
}
int main() { readf(); }
