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
    /* 
     * UMANG PANCHAL
     * DAIICT
     */
     
    import java.util.*;
    import java.io.*;
    import java.math.BigInteger;
    import java.util.Comparator;
    public class Main
    {
     
    	private static final Comparator<? super Integer> Comparator = null;
    	static LinkedList<Integer> adj[];
    	static ArrayList<Integer> adj1[];
    	static int[] color,visited1;
    	static boolean b[],visited[],possible;
    	static int level[];
    	static Map<Integer,HashSet<Integer>> s;
    	static int totalnodes,colored;
    	static int count[];
    	static long sum[];
    	static int nodes;
    	static long ans=0;
    	static long[] as=new long[10001];
    	static long c1=0,c2=0;
    	static int[] a,d,k;
    	static int max=100000000;
    	static long MOD = (long) (1e9+7),sm=0,m=Long.MIN_VALUE;
    	static boolean[] prime=new boolean[1000005];
    	static int[] levl;
        static int[] eat;
        static int price[];
        static int res[],par[];
        static int result=0;
        static int[] root,size;
        static int[][] K,p;
        static boolean yes = true;
        static long P=Long.MAX_VALUE;
        static int start,end;
    	// --------------------My Code Starts Here----------------------
    	
    	public static void main(String[] args) throws IOException
    	{
    		in=new InputReader(System.in);
    		w=new PrintWriter(System.out);
    	 
     int k=ni();
     if(k>36)
    	 w.print(-1);
     else if(k==1)
    	 w.print(4);
     else
     {
    	 String ans="";
        int d=k/2;
        for(int i=0;i<d;i++)
        	ans+='8';
        if(k%2==1)
        	ans+='0';
        long p=Long.parseLong(ans);
        if(p>(long)1e18)
        	w.print(-1);
        else
        	w.print(ans);
        		
        
     }
           
           
            w.close();
        }
     
     
    	
     
     
    	// --------------------My Code Ends Here------------------------
         
    	
    	/*
    	 *  PriorityQueue<Integer> pq = new PriorityQueue<Integer>(new Comparator<Integer>()
      			{
      				public int compare(Integer o1, Integer o2)
      				{
      					return Integer.compare(o2,o1);
      				}
      			});
    	 * 
    	 * 
    	 */
     
    	 
    	 
    	 public static void buildgraph(int n)
    	 {
             adj=new LinkedList[n];
             visited=new boolean[n];
             level=new int[n];
             par=new int[n];
             for(int i=0;i<n;i++)
             	{
            	 adj[i]=new LinkedList<Integer>();
             	
             	}
          
    	 }
    	
    	/*public static long kruskal(Pair[] p)
    	{
    		long ans=0;
    		int w=0,x=0,y=0;
    		for(int i=0;i<p.length;i++)
    		{
    			w=p[i].w;
    			x=p[i].x;
    			y=p[i].y;
    			if(root(x)!=root(y))
    			{
    				ans+=w;
    				union(x,y);
    			}
    		}
    		return ans;
    	}*/
    	
    	 static class Pair implements Comparable<Pair>
    	 {
    		int[] a;
    		long ct;
    		long c;
    	
    		Pair(int[] a,long ct,long c)
    		{
    			this.a=a;
    			this.ct=ct;
    			this.c=c;
    		}
    		public int compareTo(Pair o)
    		{
    			if(this.c==o.c)
    				return Long.compare(this.ct,o.ct);
    		  return Long.compare(this.c,o.c);
    		} 
    		
    	}
    	
    	public static int root(int i)
    	{
    		while(root[i]!=i)
    		{
    			root[i]=root[root[i]];
    			i=root[i];
    		}
    		return i;
    	}
    	
    	public static void init(int n)
    	{
    		root=new int[n+1];
    		for(int i=1;i<=n;i++)
    			root[i]=i;
    	}
    	public static void union(int a,int b)
    	{
    	    int root_a=root(a);	
    	    int root_b=root(b);
    	    root[root_a]=root_b;
    	   // size[root_b]+=size[root_a];
    	}
     
     
    	
    	public static boolean isPrime(int n)
    	{
    	    // Corner cases
    	    if (n <= 1)  return false;
    	    if (n <= 3)  return true;
    	 
    	    // This is checked so that we can skip 
    	    // middle five numbers in below loop
    	    if (n%2 == 0 || n%3 == 0)
    	    	return false;
    	 
    	    for (int i=5; i*i<=n; i=i+6)
    	        if (n%i == 0 || n%(i+2) == 0)
    	           return false;
    	 
    	    return true;
    	}
    	
     
    	
    	public static String ns()
    	{
    		return in.nextLine();
    	}
    	public static int ni()
    	{
    		return in.nextInt();
    	}
    	public static long nl()
    	{
    		return in.nextLong();
    	}
    	public static int[] na(int n)
    	{
    		a=new int[n];
    		for(int i=0;i<n;i++)
    		a[i]=ni();
    		return a;
    	}
    	public static void sieve()
    	    {
    	       int n=prime.length;
    	        for(int i=0;i<n;i++)
    	            prime[i] = true;
    	         
    	        for(int p = 2; p*p <=n; p++)
    	        {
    	            if(prime[p] == true)
    	            {
    	                for(int i = p*2; i <n; i += p)
    	                    prime[i] = false;
    	            }
    	        }
    	    }
     
      public static String rev(String s)
    	{
    		StringBuilder sb=new StringBuilder(s);
    		sb.reverse();
    		return sb.toString();
    	}
    	static long lcm(long a, long b)
    	{
    	    return a * (b / gcd(a, b));
    	}
    	static long gcd(long a, long b)
    	{
    	    while (b > 0)
    	    {
    	        long temp = b;
    	        b = a % b; // % is remainder
    	        a = temp;
    	    }
    	    return a;
    	}
    	static InputReader in;
    	static PrintWriter w;
    static class InputReader 
    {
     
    private final InputStream stream;
    private final byte[] buf = new byte[8192];
    private int curChar, snumChars;
    private SpaceCharFilter filter;
     
    public InputReader(InputStream stream)
    {
      this.stream = stream;
    }
     
    public int snext()
    {
      if (snumChars == -1)
        throw new InputMismatchException();
      if (curChar >= snumChars)
      {
        curChar = 0;
        try 
        {
          snumChars = stream.read(buf);
        }
        catch (IOException e)
        {
          throw new InputMismatchException();
        }
        if (snumChars <= 0)
          return -1;
      }
      return buf[curChar++];
    }
     
    public int nextInt() 
    {
      int c = snext();
      while (isSpaceChar(c)) 
      {
        c = snext();
      }
      int sgn = 1;
      if (c == '-')
      {
        sgn = -1;
        c = snext();
      }
      int res = 0;
      do
      {
        if (c < '0' || c > '9')
          throw new InputMismatchException();
        res *= 10;
        res += c - '0';
        c = snext();
      }
      while (!isSpaceChar(c));
      return res * sgn;
    }
     
    public long nextLong() 
    {
      int c = snext();
      while (isSpaceChar(c)) 
      {
        c = snext();
      }
      int sgn = 1;
      if (c == '-')
      {
        sgn = -1;
        c = snext();
      }
      long res = 0;
      do
      {
        if (c < '0' || c > '9')
          throw new InputMismatchException();
        res *= 10;
        res += c - '0';
        c = snext();
      }
      while (!isSpaceChar(c));
      return res * sgn;
    }	    
    public String readString() 
    {
      int c = snext();
      while (isSpaceChar(c)) 
      {
        c = snext();
      }
      StringBuilder res = new StringBuilder();
      do
      {
        res.appendCodePoint(c);
        c = snext();
      }
      while (!isSpaceChar(c));
      return res.toString();
    }
     
    public String nextLine() 
    {
      int c = snext();
      while (isSpaceChar(c))
        c = snext();
      StringBuilder res = new StringBuilder();
      do
      {
        res.appendCodePoint(c);
        c = snext();
      }
      while (!isEndOfLine(c));
      return res.toString();
    }
     
    public boolean isSpaceChar(int c)
    {
      if (filter != null)
        return filter.isSpaceChar(c);
      return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
    }
     
    private boolean isEndOfLine(int c) 
    {
      return c == '\n' || c == '\r' || c == -1;
    }
     
    public interface SpaceCharFilter
    {
      public boolean isSpaceChar(int ch);
    }
    }
    	
    }