#include <bits/stdc++.h>
using namespace std;
int t;
bool vis[20][10];
vector<int> v;
int l;
long long n;
long long ans[6];
long long rev(long long x) {
  long long ans = 0;
  while (x) {
    ans *= 10;
    ans += (x % 10);
    x /= 10;
  }
  return ans;
}
void add(int s, int f) {
  for (int i = 0; i < 6; ++i) ans[i] *= 10;
  for (int i = 0; i < s; ++i) ans[i] += 7;
  for (int i = s; i < s + f; ++i) ans[i] += 4;
}
bool check(int i, int ex) {
  if (vis[i][ex]) return false;
  vis[i][ex] = true;
  if (i == 0) {
    for (int s = 0; s <= 6; ++s)
      for (int f = 0; s + f <= 6; ++f) {
        int num = (s * 7) + (f * 4);
        if (num % 10 == v[0] && num / 10 == ex) {
          add(s, f);
          return true;
        }
      }
    return false;
  }
  for (int s = 0; s <= 6; ++s)
    for (int f = 0; s + f <= 6; ++f) {
      for (int prev = 0; prev <= 9; ++prev) {
        int num = (s * 7) + (f * 4) + prev;
        if (num % 10 == v[i] && num / 10 == ex) {
          bool x = check(i - 1, prev);
          if (x) {
            add(s, f);
            return true;
          }
        }
      }
    }
  return false;
}
int main() {
  scanf("%d", &t);
  while (t--) {
    scanf("%I64d", &n);
    memset(vis, 0, sizeof vis);
    memset(ans, 0, sizeof ans);
    v.clear();
    long long x = n;
    while (x) {
      v.push_back(x % 10);
      x /= 10;
    }
    l = v.size();
    x = false;
    x = check(l - 1, 0);
    if (x) {
      for (int i = 0; i < 6; ++i) printf("%I64d ", rev(ans[i]));
      printf("\n");
      continue;
    }
    if (l >= 2) {
      x = check(l - 2, v[l - 1]);
      if (x) {
        for (int i = 0; i < 6; ++i) printf("%I64d ", rev(ans[i]));
        printf("\n");
        continue;
      }
    }
    puts("-1");
  }
  return 0;
}
