#include <bits/stdc++.h>
using namespace std;
void deba(int* a, int n) {
  cerr << "| ";
  for (int i = 0; i < (n); i++) cerr << a[i] << " ";
  cerr << "|" << endl;
}
inline bool EQ(double a, double b) { return fabs(a - b) < 1e-9; }
const int INF = 1 << 30;
vector<int> sums[20002];
int f(int a, int b, int op) {
  switch (op) {
    case 0:
      return a + b;
    case 1:
      return a * b;
    case 2:
      return a - b;
    case 3:
      return -a + b;
    case 4:
      return -a - b;
  }
}
void gen(int n) {
  int on = n;
  int d = n % 10;
  n /= 10;
  int c = n % 10;
  n /= 10;
  int b = n % 10;
  n /= 10;
  int a = n % 10;
  n /= 10;
  int r, r2, r3;
  for (int i = 0; i < (5); i++) {
    r = f(a, b, i);
    for (int i2 = 0; i2 < (5); i2++) {
      r2 = f(r, c, i2);
      for (int i3 = 0; i3 < (5); i3++) {
        r3 = f(r2, d, i3);
        sums[r3 + 10000].push_back(on);
      }
    }
  }
  for (int i = 0; i < (5); i++) {
    r = f(a * 10 + b, c, i);
    for (int i2 = 0; i2 < (5); i2++) {
      r2 = f(r, d, i2);
      sums[r2 + 10000].push_back(on);
    }
  }
  for (int i = 0; i < (5); i++) {
    r = f(a, b * 10 + c, i);
    for (int i2 = 0; i2 < (5); i2++) {
      r2 = f(r, d, i2);
      sums[r2 + 10000].push_back(on);
    }
  }
  for (int i = 0; i < (5); i++) {
    r = f(a, b, i);
    for (int i2 = 0; i2 < (5); i2++) {
      r2 = f(r, c * 10 + d, i2);
      sums[r2 + 10000].push_back(on);
    }
  }
  for (int i = 0; i < (5); i++) {
    r = f(a, b, i);
    for (int i2 = 0; i2 < (5); i2++) {
      r2 = f(c, d, i2);
      sums[r * r2 + 10000].push_back(on);
    }
  }
  for (int i = 0; i < (5); i++) {
    r = f(a * 100 + b * 10 + c, d, i);
    sums[r + 10000].push_back(on);
  }
  for (int i = 0; i < (5); i++) {
    r = f(a, b * 100 + c * 10 + d, i);
    sums[r + 10000].push_back(on);
  }
  for (int i = 0; i < (5); i++) {
    r = f(a * 10 + b, c * 10 + d, i);
    sums[r + 10000].push_back(on);
  }
  sums[on + 10000].push_back(on);
}
int main() {
  int k, m;
  scanf("%d %d", &k, &m);
  ;
  for (int i = 0; i < (10000); i++) {
    gen(i);
  }
  vector<int>::iterator it;
  for (int i = 0; i < (20000); i++) {
    sort(sums[i].begin(), sums[i].end());
    it = unique(sums[i].begin(), sums[i].end());
    sums[i].resize(it - sums[i].begin());
  }
  int n, n2, i2;
  int cnt = 0;
  set<int> s;
  for (int i = 0; i < (20000); i++) {
    n = i - 10000;
    n2 = k - n;
    if (n2 > 9999 || n2 < -9999) continue;
    i2 = n2 + 10000;
    for (int j = 0; j < (sums[i].size()); j++)
      for (int j2 = 0; j2 < (sums[i2].size()); j2++) {
        int nn = sums[i][j] * 10000 + sums[i2][j2];
        if (s.insert(nn).second) {
          printf("%08d\n", nn);
          if (++cnt >= m) return 0;
        }
      }
  }
  return 0;
}
