#include <bits/stdc++.h>
using namespace std;
vector<int> x[10010];
vector<int>::iterator it;
int k, m;
void dfs(int now) {
  int i, j, dk, r, l;
  x[now].push_back(now);
  dk = 10;
  while (dk <= now) {
    r = now % dk;
    l = now / dk;
    for (i = 0; i < x[l].size(); i++) {
      for (j = 0; j < x[r].size(); j++) {
        x[now].push_back(x[l][i] + x[r][j]);
        x[now].push_back(x[l][i] * x[r][j]);
        if (x[l][i] > x[r][j])
          x[now].push_back(x[l][i] - x[r][j]);
        else
          x[now].push_back(x[r][j] - x[l][i]);
      }
    }
    dk *= 10;
  }
  sort(x[now].begin(), x[now].end());
  it = unique(x[now].begin(), x[now].end());
  x[now].resize(distance(x[now].begin(), it));
}
int main() {
  int i, j;
  for (i = 0; i < 10000; i++) dfs(i);
  while (~scanf("%d%d", &k, &m)) {
    for (i = 0; i < 10000; i++) {
      for (j = 0; j < x[i].size(); j++) {
        if (k + x[i][j] >= 0 && k + x[i][j] < 10000 && x[i][j] > 0) {
          printf("%04d%04d\n", i, k + x[i][j]);
          m--;
        }
        if (!m) break;
        if (k - x[i][j] >= 0 && k - x[i][j] < 10000) {
          printf("%04d%04d\n", i, k - x[i][j]);
          m--;
        }
        if (!m) break;
      }
      if (!m) break;
    }
  }
  return 0;
}
