#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
set<int> s;
int seq[10];
int cnt = 0;
int m;
void outdata() {
  for (set<int>::iterator it = s.begin(); it != s.end(); it++) {
    printf("%08d\n", *it);
  }
  exit(0);
}
void construct() {
  int p[8];
  for (int mask = 0; mask < int((1 << 8)); mask++) {
    int l = 0, r = 7;
    for (int i = 0; i < int(7); i++) {
      if (mask & (1 << i))
        p[l++] = seq[i];
      else
        p[r--] = seq[i];
    }
    p[l++] = seq[7];
    int num = 0;
    for (int i = 0; i < int(8); i++) {
      num = num * 10 + p[i];
    }
    s.insert(num);
    if ((int)s.size() == m) {
      outdata();
    }
  }
}
void gen(int k) {
  if (cnt > 7) return;
  if (cnt == 7) {
    if (k > 9) return;
    seq[cnt++] = k;
    construct();
    cnt--;
    return;
  }
  vector<int> p;
  for (int i = 2; i <= 9; i++) p.push_back(i);
  random_shuffle(p.begin(), p.end());
  for (int i1 = 0; i1 < int(p.size()); i1++) {
    int i = p[i1];
    if (k % i == 0) {
      seq[cnt++] = i;
      gen(k / i);
      cnt--;
    }
    if (cnt > 5) continue;
    for (int j = 0; j < int(10); j++) {
      if (k > j && (k - j) % i == 0) {
        seq[cnt++] = j;
        seq[cnt++] = i;
        gen((k - j) / i);
        cnt--;
        cnt--;
      }
      if ((k + j) % i == 0) {
        seq[cnt++] = j;
        seq[cnt++] = i;
        gen((k + j) / i);
        cnt--;
        cnt--;
      }
    }
  }
}
int main() {
  int k;
  cin >> k >> m;
  gen(k);
  return 0;
}
