Apart from Nian, there is a daemon named Sui, which terrifies children and causes them to become sick. Parents give their children money wrapped in red packets and put them under the pillow, so that when Sui tries to approach them, it will be driven away by the fairies inside.

Big Banban is hesitating over the amount of money to give out. He considers loops to be lucky since it symbolizes unity and harmony.

He would like to find a positive integer n not greater than 1018, such that there are exactly k loops in the decimal representation of n, or determine that such n does not exist.

A loop is a planar area enclosed by lines in the digits' decimal representation written in Arabic numerals. For example, there is one loop in digit 4, two loops in 8 and no loops in 5. Refer to the figure below for all exact forms.

<image>

Input

The first and only line contains an integer k (1 ≤ k ≤ 106) — the desired number of loops.

Output

Output an integer — if no such n exists, output -1; otherwise output any such n. In the latter case, your output should be a positive decimal integer not exceeding 1018.

Examples

Input

2


Output

462

Input

6


Output

8080


import java.util.*;


import java.io.*;
public class Solution {
	static FastScanner scr=new FastScanner();
	static PrintStream out=new PrintStream(System.out);
	static StringBuilder sb=new StringBuilder();
	
	static int gcd(int a,int b){
		if(b==0) {
			return a;
		}
			
		return gcd(b,a%b);
	}
	static void print(int ele) {
		sb.append(ele).append(" ");
	}
	static void println(int ele) {
//		AccessBridge.
		sb.append(ele).append('\n');
		
	}
	static void println() {
		sb.append('\n');
	}
	static long modPow(long base,long exp,long mod) {
		if(exp==0) {
			return 1;
		}
		if(exp%2==0) {
			long res=(modPow(base,exp/2,mod));
			return (res*res)%mod;
		}
		return (base*modPow(base,exp-1,mod))%mod;
	}
	static class FastScanner {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=new StringTokenizer("");
	 	String next() {
	 		while (!st.hasMoreTokens())
	 			try {
	 				st=new StringTokenizer(br.readLine());
	 			} catch (IOException e) {
	 				e.printStackTrace();
	 			}
	 			return st.nextToken();
		}
		int[] sort(int a[]) {
			Arrays.sort(a);
			return a;
		}
		int []reverse(int a[]){
			int b[]=new int[a.length];
			int index=0;
			for(int i=a.length-1;i>=0;i--) {
				b[index]=a[i];
			}
			return b;
		}
		int nextInt() {
			return Integer.parseInt(next());
		}
		int[] readArray(int n) {
			int[] a=new int[n];
			for (int i=0; i<n; i++) a[i]=nextInt();
			return a;
		}
		long[] readLongArray(int n) {
			long  [] a=new long  [n];
			for (int i=0; i<n; i++) a[i]=nextLong();
			return a;
		}
		long nextLong() {
			return Long.parseLong(next());
		}
	}
	static ArrayList<Integer>list[];
	static void solve() {
		
		int k=scr.nextInt();
		int []a=new int[11];
//		out.println(k);
		a[1]=6;
		a[2]=8;
		a[3]=86;
		a[4]=88;
		a[5]=886;
		a[6]=888;
		a[7]=8886;
		a[8]=8888;
		a[9]=88886;
		a[10]=88888;
		if(k>36) {
			out.println(-1);
			return;
		}
		for(int i=10;i>=1;i--) {
			int ele=k/i;
			while(ele-->0) {
				out.print(a[i]);
				k-=i;
			}
		}
	}
	static int  MAX=Integer.MAX_VALUE;
	static int  MIN=Integer.MIN_VALUE;
	public static void main(String []args) {
//		int t=scr.nextInt();
//		while(t-->0) {
			solve();
//		}
//		out.println(sb);
	}
}
