#include <bits/stdc++.h>
using namespace std;
bool tick[100000000];
vector<int> res;
char s[20];
int x, k, m;
int n;
int k1, k2, k3, k4;
bool v() {
  return k1 + k2 + k3 + k4 == x || k1 * k2 * k3 * k4 == x ||
         k1 * k2 + k3 * k4 == x || k1 + k2 * k3 * k4 == x ||
         k1 * k2 * k3 + k4 == x || (k1 + k2) * k3 * k4 == x ||
         (k1 + k2) * (k3 * k4) == x || (k1 * k2) * (k3 + k4) == x ||
         (k1 + k2 + k3) * k4 == x || (k1) * (k2 + k3 + k4) == x ||
         k1 + k2 * k3 + k4 == x || k1 - k2 + k3 * k4 == x ||
         k1 + k2 - k3 + k4 == x || -k1 + k2 + k3 - k4 == x ||
         k1 * k2 - k3 + k4 == x || (k1 - k2) * (k3 + k4) == x ||
         k1 * k2 + (k3 * 10 + k4) == x ||
         k1 * 1000 + k2 * 100 + k3 * 10 + k4 == x ||
         (k1 * 10 + k2) + (k3 * 10 + k4) == x ||
         (k1 * 10 + k2) - (k3 * 10 + k4) == x ||
         -(k1 * 10 + k2) + (k3 * 10 + k4) == x ||
         (k1 * 10 + k2) * (k3 * 10 + k4) == x;
}
void getn() {
  for (int i = 0; i < 10000; i++) {
    x = abs(k - i);
    for (k1 = 0; k1 < 10; k1++) {
      for (k2 = 0; k2 < 10; k2++) {
        for (k3 = 0; k3 < 10; k3++) {
          for (k4 = 0; k4 < 10; k4++) {
            if (v()) {
              sprintf(s, "%d%d%d%d%04d", k1, k2, k3, k4, i);
              sscanf(s, "%d", &n);
              if (!tick[n]) {
                tick[n] = true;
                res.push_back(n);
              }
              sprintf(s, "%04d%d%d%d%d", i, k1, k2, k3, k4);
              sscanf(s, "%d", &n);
              if (!tick[n]) {
                tick[n] = true;
                res.push_back(n);
              }
              if (res.size() > m) return;
            }
          }
        }
      }
    }
  }
}
int main() {
  scanf("%d %d", &k, &m);
  getn();
  for (int i = 0; i < m; i++) {
    printf("%08d\n", res[i]);
  }
}
