#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <iostream>
#include<algorithm>
#define eps 1e-6 
using namespace std;
int T;
__int64 N;
int cnt;
int an[20];
int tem[10][20];
int ans[10][20];
bool flag;
bool check(int x,int bn[],int in)//bn的第x位产生in的进位
{	
	if(in==0)
		return 1;
	__int64 sum=0;
	for(int i=cnt-1;i>x;i--)
		{
		sum*=10;
		sum+=bn[i];
		}
	if(sum<in)
		return 0;
	else
		{
		int tt=in;
		for(int i=x+1;i<cnt;i++)
			{
			bn[i]-=tt;
			if(bn[i]<0)
				{
					bn[i]+=10;
					tt=1;
				}
			else if(bn[i]>=0)
				return 1;
			}
		}
	return 0;
}
void dfs(int x,int num,int a[])//考虑第x位 这一位的数是多少
{	
	if(flag)
		return;
	if(x==cnt-1&&(num==4||num==7||num==8))
		{
		if(num==4||num==7)
			tem[0][x]=num;
		else if(num==8)
			{
			tem[0][x]=tem[1][x]=4;
			}
		for(int i=0;i<6;i++)
			for(int j=0;j<cnt;j++)
				ans[i][cnt-1-j]=tem[i][j];
		flag=1;
		return;
		}
	else if(x==cnt-1)
		return ;
	for(int i=0;i<=6;i++)
		{
		for(int j=0;j<=(6-i);j++)
			{
			int t=7*i+4*j;
			if(t%10==num)
				{
				for(int k=0;k<i;k++)
					tem[k][x]=7;
				for(int k=i;k<i+j;k++)
					tem[k][x]=4;
				for(int k=i+j;k<6;k++)
					tem[k][x]=0;
				t=t/10;
				int bn[20];
				memcpy(bn,a,sizeof(bn));
				if(check(x,bn,t))
					{
					dfs(x+1,bn[x+1],bn);
					if(flag)
						return;
					}
				}
			}
		}
	return ;
}
int main()
{	
	scanf("%d",&T);
	while(T--)
		{
		scanf("%I64d",&N);
		if(N==7||N==4)
			{
			printf("%d 0 0 0 0 0\n",N);
			continue;
			}
		cnt=0;
		flag=0;
		while(N)
			{
			an[cnt++]=N%10;
			N/=10;
			}
		memset(tem,0,sizeof(tem));
		dfs(0,an[0],an);
		if(flag)
			{
			int m;
			for(int i=0;i<6;i++)
				{
				for(m=0;m<cnt;m++)
					{
					if(ans[i][m]!=0)
						break;
					}
				if(m==cnt)
					printf("0");
				for(;m<cnt;m++)
					{
					printf("%d",ans[i][m]);
					}
				if(i==5)
					printf("\n");
				else
					printf(" ");
				}
			}
		else
			printf("-1\n");
		}
	}
