#include <bits/stdc++.h>
using namespace std;
int t, len;
long long int num;
int linha[30];
char linha2[30];
int pd[30][10];
int resp[10][30];
int doit(int atual, int resto) {
  if (len == atual) {
    if (resto) return 0;
    return 1;
  }
  for (int i = 0; i <= 6; i++) {
    for (int j = 0; j + i <= 6; j++) {
      int aux = 7 * i + 4 * j + resto;
      if ((linha[atual] == aux % 10) && (doit(atual + 1, aux / 10) == 1))
        return 1;
    }
  }
  return 0;
}
void doit2(int atual, int resto) {
  if (len == atual) {
    return;
  }
  for (int i = 0; i <= 6; i++) {
    for (int j = 0; j + i <= 6; j++) {
      int aux = 7 * i + 4 * j + resto;
      if ((linha[atual] == aux % 10) && (doit(atual + 1, aux / 10) == 1)) {
        for (int k = 0; k < i; k++) {
          resp[k][atual] = 7;
        }
        for (int k = 0; k < j; k++) {
          resp[k + i][atual] = 4;
        }
        doit2(atual + 1, aux / 10);
        return;
      }
    }
  }
}
int main(void) {
  scanf("%d", &t);
  while (t--) {
    memset(resp, 0, sizeof resp);
    scanf("%I64d", &num);
    len = 0;
    while (num) {
      linha[len++] = num % 10;
      num /= 10;
    }
    if (!doit(0, 0)) {
      printf("-1\n");
      continue;
    }
    doit2(0, 0);
    for (int i = 0; i < 6; i++) {
      long long int aux = 0;
      for (int j = 0; j < len; j++) {
        aux *= 10;
        aux += resp[i][j];
      }
      sprintf(linha2, "%I64d", aux);
      int tam = strlen(linha2);
      reverse(linha2, linha2 + tam);
      printf("%s ", linha2);
    }
    printf("\n");
  }
  return 0;
}
