#include <bits/stdc++.h>
using namespace std;
const int N = (int)1.5e5;
const long long BS = 1234567;
int n, m, rd;
int gt[5], ans[10], v[N + 10];
vector<int> d[N + 10], O;
map<long long, bool> ex;
struct node {
  int v[4];
};
vector<node> ds[N + 10];
vector<int> Deal(int l, int r) {
  if (l == r) {
    vector<int> res = O;
    res.push_back(gt[l]);
    return res;
  }
  vector<int> sc = O, res = O;
  for (int i = l; i < r; ++i) {
    vector<int> sa = Deal(l, i), sb = Deal(i + 1, r);
    for (int j = 0, end = (int)sa.size(); j < end; ++j) {
      for (int k = 0, end = (int)sb.size(); k < end; ++k) {
        sc.push_back(sa[j] + sb[k]), sc.push_back(sa[j] * sb[k]),
            sc.push_back(sa[j] - sb[k]);
      }
    }
  }
  int t = 0;
  for (int i = l; i <= r; ++i) t = t * 10 + gt[i];
  sc.push_back(t);
  sort(sc.begin(), sc.end());
  for (int i = 0, end = (int)sc.size(); i < end; ++i)
    if (!i || sc[i] != sc[i - 1]) res.push_back(sc[i]);
  return res;
}
void Dfs(int x) {
  if (x > 4) {
    vector<int> rlt = Deal(1, 4);
    node md;
    for (int i = 0; i < 4; ++i) md.v[i] = gt[i + 1];
    for (int i = 0, end = (int)rlt.size(); i < end; ++i)
      ds[rlt[i] + 1000].push_back(md);
    return;
  }
  for (int i = 0; i <= 9; ++i) {
    gt[x] = i;
    Dfs(x + 1);
    gt[x] = 0;
  }
}
void Insert() {
  long long h = 0;
  for (int i = 1; i <= 8; ++i) h = h * BS + (long long)ans[i];
  if (ex[h]) return;
  ex[h] = 1, --m;
  for (int i = 1; i <= 8; ++i) printf("%d", ans[i]);
  printf("\n");
  if (!m) exit(0);
}
void Out(int x, int y) {
  if (x < 0 || y < 0) return;
  for (int i = 0, end = (int)ds[x].size(); i < end; ++i) {
    for (int k = 1; k <= 4; ++k) ans[k] = ds[x][i].v[k - 1];
    for (int j = 0, end = (int)ds[y].size(); j < end; ++j) {
      for (int k = 5; k <= 8; ++k) ans[k] = ds[y][j].v[k - 5];
      Insert();
    }
  }
}
int main() {
  scanf("%d%d\n", &n, &m);
  Dfs(1);
  for (int i = 0, end = 9 * 9 * 9 * 9; i <= end; ++i) {
    Out(i + 1000, n - i + 1000);
    if (i && n % i == 0) Out(i + 1000, n / i + 1000);
    Out(i + 1000, i - n + 1000);
  }
  return 0;
}
