#include <bits/stdc++.h>
using namespace std;
const string c[43] = {
    "000000", "nil",    "nil",    "nil",    "000004", "nil",    "nil",
    "000007", "000044", "nil",    "nil",    "000047", "000444", "nil",
    "000077", "000447", "004444", "nil",    "000477", "004447", "044444",
    "000777", "004477", "044447", "444444", "004777", "044477", "444447",
    "007777", "044777", "444477", "nil",    "047777", "444777", "nil",
    "077777", "447777", "nil",    "nil",    "477777", "nil",    "nil",
    "777777"};
long long Possi[21][43];
long long D[21], D0;
void mainprocess() {
  cin >> D[0];
  D0 = 0;
  while (D[D0] > 9) {
    D[D0 + 1] = D[D0] / 10;
    D[D0] %= 10;
    D0++;
  }
  long long i, j, k, L;
  for (i = 0; i <= 42; i++) Possi[0][i] = (c[i] == "nil") ? -1 : i;
  for (i = 1; i <= D0; i++)
    for (j = 0; j <= 42; j++) {
      L = max(j - 4, 0ll);
      if ((j - L) * 10 + D[i - 1] > 42) L++;
      Possi[i][j] = -1;
      for (k = L; k <= j; k++)
        if ((Possi[i - 1][(j - k) * 10 + D[i - 1]] != -1) && (c[k] != "nil")) {
          Possi[i][j] = k;
          break;
        }
    }
  if (Possi[D0][D[D0]] == -1) {
    printf("-1\n");
    return;
  }
  long long answers[6];
  for (i = 0; i <= 5; i++) answers[i] = 0;
  j = D[D0];
  for (i = D0; i >= 0; i--) {
    for (k = 0; k <= 5; k++)
      answers[k] = answers[k] * 10 + c[Possi[i][j]][k] - '0';
    if (i) j = (j - Possi[i][j]) * 10 + D[i - 1];
  }
  for (i = 0; i <= 5; i++) {
    cout << answers[i];
    if (i == 5)
      putchar('\n');
    else
      putchar(' ');
  }
}
int main() {
  int T;
  for (scanf("%d", &T); T; T--) mainprocess();
}
