import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.NoSuchElementException;


public class Main{
	static FastScanner sc = new FastScanner();
	static PrintWriter out = new PrintWriter(System.out);
	static int n;
	static String s;
	//static Queue <Long> q = new ArrayDeque <Long>();
	//static List<ArrayList<Integer>> e;
	//static LinkedList<Integer> adj[]; 
	
	static final long lim = 1_000_000_000_000_000_000L;

	public static void main(String[] args) {
		n = sc.nextInt();
		
		long a [] = sc.nextLongArray(n, false);
		
		Arrays.sort(a);
		
		if (a[0]==0)
			out.println(0);
		
		else {
			long A = a[0];
			boolean ok = true;
			for (int i=1; i<n; i++) {
				long cur = a[i];
				
				if (cur<=lim/A) {
					A*=cur;	
				}
				
				else {
					ok = false;
					break;
				}
				
				
			}
			
			if (ok)
				out.println(A);
			
			else
				out.println(-1);
		}
		out.flush();
	}
	
	
	
		static class FastScanner {
		    private final InputStream in = System.in;
		    private final byte[] buffer = new byte[1024];
		    private int ptr = 0;
		    private int buflen = 0;

		    private boolean hasNextByte() {
		      if (ptr < buflen) {
		        return true;
		      } else {
		        ptr = 0;
		        try {
		          buflen = in.read(buffer);
		        } catch (IOException e) {
		          e.printStackTrace();
		        }
		        if (buflen <= 0) {
		          return false;
		        }
		      }
		      return true;
		    }

		    private int readByte() {
		      if (hasNextByte()) return buffer[ptr++];
		      else return -1;
		    }

		    private static boolean isPrintableChar(int c) {
		      return 33 <= c && c <= 126;
		    }

		    private void skipUnprintable() {
		      while (hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++;
		    }

		    public boolean hasNext() {
		      skipUnprintable();
		      return hasNextByte();
		    }

		    public String next() {
		      if (!hasNext()) throw new NoSuchElementException();
		      StringBuilder sb = new StringBuilder();
		      int b = readByte();
		      while (isPrintableChar(b)) {
		        sb.appendCodePoint(b);
		        b = readByte();
		      }
		      return sb.toString();
		    }

		    public long nextLong() {
		      if (!hasNext()) throw new NoSuchElementException();
		      long n = 0;
		      boolean minus = false;
		      int b = readByte();
		      if (b == '-') {
		        minus = true;
		        b = readByte();
		      }
		      if (b < '0' || '9' < b) {
		        throw new NumberFormatException();
		      }
		      while (true) {
		        if ('0' <= b && b <= '9') {
		          n *= 10;
		          n += b - '0';
		        } else if (b == -1 || !isPrintableChar(b)) {
		          return minus ? -n : n;
		        } else {
		          throw new NumberFormatException();
		        }
		        b = readByte();
		      }
		    }

		    public int nextInt() {
		      return (int) nextLong();
		    }
		    
		    public double nextDouble(){
		    	return Double.parseDouble(next());
		    }

		    public int[] nextIntArray(int N, boolean oneBased) {
		      if (oneBased) {
		        int[] array = new int[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      } else {
		        int[] array = new int[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      }
		    }

		    public long[] nextLongArray(int N, boolean oneBased) {
		      if (oneBased) {
		        long[] array = new long[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      } else {
		        long[] array = new long[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      }
		    }
		  }

		}	 


 import java.io.IOException; IOException java.io import java.io.InputStream; InputStream java.io import java.io.PrintWriter; PrintWriter java.io import java.util.Arrays; Arrays java.util import java.util.NoSuchElementException; NoSuchElementException java.util public class Main{
	static FastScanner sc = new FastScanner();
	static PrintWriter out = new PrintWriter(System.out);
	static int n;
	static String s;
	//static Queue <Long> q = new ArrayDeque <Long>();
	//static List<ArrayList<Integer>> e;
	//static LinkedList<Integer> adj[]; 
	
	static final long lim = 1_000_000_000_000_000_000L;

	public static void main(String[] args) {
		n = sc.nextInt();
		
		long a [] = sc.nextLongArray(n, false);
		
		Arrays.sort(a);
		
		if (a[0]==0)
			out.println(0);
		
		else {
			long A = a[0];
			boolean ok = true;
			for (int i=1; i<n; i++) {
				long cur = a[i];
				
				if (cur<=lim/A) {
					A*=cur;	
				}
				
				else {
					ok = false;
					break;
				}
				
				
			}
			
			if (ok)
				out.println(A);
			
			else
				out.println(-1);
		}
		out.flush();
	}
	
	
	
		static class FastScanner {
		    private final InputStream in = System.in;
		    private final byte[] buffer = new byte[1024];
		    private int ptr = 0;
		    private int buflen = 0;

		    private boolean hasNextByte() {
		      if (ptr < buflen) {
		        return true;
		      } else {
		        ptr = 0;
		        try {
		          buflen = in.read(buffer);
		        } catch (IOException e) {
		          e.printStackTrace();
		        }
		        if (buflen <= 0) {
		          return false;
		        }
		      }
		      return true;
		    }

		    private int readByte() {
		      if (hasNextByte()) return buffer[ptr++];
		      else return -1;
		    }

		    private static boolean isPrintableChar(int c) {
		      return 33 <= c && c <= 126;
		    }

		    private void skipUnprintable() {
		      while (hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++;
		    }

		    public boolean hasNext() {
		      skipUnprintable();
		      return hasNextByte();
		    }

		    public String next() {
		      if (!hasNext()) throw new NoSuchElementException();
		      StringBuilder sb = new StringBuilder();
		      int b = readByte();
		      while (isPrintableChar(b)) {
		        sb.appendCodePoint(b);
		        b = readByte();
		      }
		      return sb.toString();
		    }

		    public long nextLong() {
		      if (!hasNext()) throw new NoSuchElementException();
		      long n = 0;
		      boolean minus = false;
		      int b = readByte();
		      if (b == '-') {
		        minus = true;
		        b = readByte();
		      }
		      if (b < '0' || '9' < b) {
		        throw new NumberFormatException();
		      }
		      while (true) {
		        if ('0' <= b && b <= '9') {
		          n *= 10;
		          n += b - '0';
		        } else if (b == -1 || !isPrintableChar(b)) {
		          return minus ? -n : n;
		        } else {
		          throw new NumberFormatException();
		        }
		        b = readByte();
		      }
		    }

		    public int nextInt() {
		      return (int) nextLong();
		    }
		    
		    public double nextDouble(){
		    	return Double.parseDouble(next());
		    }

		    public int[] nextIntArray(int N, boolean oneBased) {
		      if (oneBased) {
		        int[] array = new int[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      } else {
		        int[] array = new int[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      }
		    }

		    public long[] nextLongArray(int N, boolean oneBased) {
		      if (oneBased) {
		        long[] array = new long[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      } else {
		        long[] array = new long[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      }
		    }
		  }

		} Main static FastScanner sc = new FastScanner(); sc new FastScanner() static PrintWriter out = new PrintWriter(System.out); out new PrintWriter(System.out) static int n; n static String s; s static final long lim = 1_000_000_000_000_000_000L; lim 1_000_000_000_000_000_000L public static void main(String[] args) {
		n = sc.nextInt();
		
		long a [] = sc.nextLongArray(n, false);
		
		Arrays.sort(a);
		
		if (a[0]==0)
			out.println(0);
		
		else {
			long A = a[0];
			boolean ok = true;
			for (int i=1; i<n; i++) {
				long cur = a[i];
				
				if (cur<=lim/A) {
					A*=cur;	
				}
				
				else {
					ok = false;
					break;
				}
				
				
			}
			
			if (ok)
				out.println(A);
			
			else
				out.println(-1);
		}
		out.flush();
	} main {
		n = sc.nextInt();
		
		long a [] = sc.nextLongArray(n, false);
		
		Arrays.sort(a);
		
		if (a[0]==0)
			out.println(0);
		
		else {
			long A = a[0];
			boolean ok = true;
			for (int i=1; i<n; i++) {
				long cur = a[i];
				
				if (cur<=lim/A) {
					A*=cur;	
				}
				
				else {
					ok = false;
					break;
				}
				
				
			}
			
			if (ok)
				out.println(A);
			
			else
				out.println(-1);
		}
		out.flush();
	} n = sc.nextInt() n sc.nextInt() sc.nextInt sc long a [] = sc.nextLongArray(n, false); a sc.nextLongArray(n, false) sc.nextLongArray sc n false Arrays.sort(a) Arrays.sort Arrays a if (a[0]==0)
			out.println(0);
		
		else {
			long A = a[0];
			boolean ok = true;
			for (int i=1; i<n; i++) {
				long cur = a[i];
				
				if (cur<=lim/A) {
					A*=cur;	
				}
				
				else {
					ok = false;
					break;
				}
				
				
			}
			
			if (ok)
				out.println(A);
			
			else
				out.println(-1);
		} a[0]==0 a[0] a 0 0 out.println(0) out.println out 0 {
			long A = a[0];
			boolean ok = true;
			for (int i=1; i<n; i++) {
				long cur = a[i];
				
				if (cur<=lim/A) {
					A*=cur;	
				}
				
				else {
					ok = false;
					break;
				}
				
				
			}
			
			if (ok)
				out.println(A);
			
			else
				out.println(-1);
		} long A = a[0]; A a[0] a 0 boolean ok = true; ok true for (int i=1; i<n; i++) {
				long cur = a[i];
				
				if (cur<=lim/A) {
					A*=cur;	
				}
				
				else {
					ok = false;
					break;
				}
				
				
			} int i=1; int i=1; i 1 i<n i n i++ i++ i {
				long cur = a[i];
				
				if (cur<=lim/A) {
					A*=cur;	
				}
				
				else {
					ok = false;
					break;
				}
				
				
			} {
				long cur = a[i];
				
				if (cur<=lim/A) {
					A*=cur;	
				}
				
				else {
					ok = false;
					break;
				}
				
				
			} long cur = a[i]; cur a[i] a i if (cur<=lim/A) {
					A*=cur;	
				}
				
				else {
					ok = false;
					break;
				} cur<=lim/A cur lim/A lim A {
					A*=cur;	
				} A*=cur A cur {
					ok = false;
					break;
				} ok = false ok false break; if (ok)
				out.println(A);
			
			else
				out.println(-1); ok out.println(A) out.println out A out.println(-1) out.println out -1 1 out.flush() out.flush out String[] args args static class FastScanner {
		    private final InputStream in = System.in;
		    private final byte[] buffer = new byte[1024];
		    private int ptr = 0;
		    private int buflen = 0;

		    private boolean hasNextByte() {
		      if (ptr < buflen) {
		        return true;
		      } else {
		        ptr = 0;
		        try {
		          buflen = in.read(buffer);
		        } catch (IOException e) {
		          e.printStackTrace();
		        }
		        if (buflen <= 0) {
		          return false;
		        }
		      }
		      return true;
		    }

		    private int readByte() {
		      if (hasNextByte()) return buffer[ptr++];
		      else return -1;
		    }

		    private static boolean isPrintableChar(int c) {
		      return 33 <= c && c <= 126;
		    }

		    private void skipUnprintable() {
		      while (hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++;
		    }

		    public boolean hasNext() {
		      skipUnprintable();
		      return hasNextByte();
		    }

		    public String next() {
		      if (!hasNext()) throw new NoSuchElementException();
		      StringBuilder sb = new StringBuilder();
		      int b = readByte();
		      while (isPrintableChar(b)) {
		        sb.appendCodePoint(b);
		        b = readByte();
		      }
		      return sb.toString();
		    }

		    public long nextLong() {
		      if (!hasNext()) throw new NoSuchElementException();
		      long n = 0;
		      boolean minus = false;
		      int b = readByte();
		      if (b == '-') {
		        minus = true;
		        b = readByte();
		      }
		      if (b < '0' || '9' < b) {
		        throw new NumberFormatException();
		      }
		      while (true) {
		        if ('0' <= b && b <= '9') {
		          n *= 10;
		          n += b - '0';
		        } else if (b == -1 || !isPrintableChar(b)) {
		          return minus ? -n : n;
		        } else {
		          throw new NumberFormatException();
		        }
		        b = readByte();
		      }
		    }

		    public int nextInt() {
		      return (int) nextLong();
		    }
		    
		    public double nextDouble(){
		    	return Double.parseDouble(next());
		    }

		    public int[] nextIntArray(int N, boolean oneBased) {
		      if (oneBased) {
		        int[] array = new int[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      } else {
		        int[] array = new int[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      }
		    }

		    public long[] nextLongArray(int N, boolean oneBased) {
		      if (oneBased) {
		        long[] array = new long[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      } else {
		        long[] array = new long[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      }
		    }
		  } FastScanner private final InputStream in = System.in; in System.in System System.in private final byte[] buffer = new byte[1024]; buffer new byte[1024] 1024 private int ptr = 0; ptr 0 private int buflen = 0; buflen 0 private boolean hasNextByte() {
		      if (ptr < buflen) {
		        return true;
		      } else {
		        ptr = 0;
		        try {
		          buflen = in.read(buffer);
		        } catch (IOException e) {
		          e.printStackTrace();
		        }
		        if (buflen <= 0) {
		          return false;
		        }
		      }
		      return true;
		    } hasNextByte {
		      if (ptr < buflen) {
		        return true;
		      } else {
		        ptr = 0;
		        try {
		          buflen = in.read(buffer);
		        } catch (IOException e) {
		          e.printStackTrace();
		        }
		        if (buflen <= 0) {
		          return false;
		        }
		      }
		      return true;
		    } if (ptr < buflen) {
		        return true;
		      } else {
		        ptr = 0;
		        try {
		          buflen = in.read(buffer);
		        } catch (IOException e) {
		          e.printStackTrace();
		        }
		        if (buflen <= 0) {
		          return false;
		        }
		      } ptr < buflen ptr buflen {
		        return true;
		      } return true; true {
		        ptr = 0;
		        try {
		          buflen = in.read(buffer);
		        } catch (IOException e) {
		          e.printStackTrace();
		        }
		        if (buflen <= 0) {
		          return false;
		        }
		      } ptr = 0 ptr 0 try {
		          buflen = in.read(buffer);
		        } catch (IOException e) {
		          e.printStackTrace();
		        } catch (IOException e) {
		          e.printStackTrace();
		        } IOException e {
		          e.printStackTrace();
		        } e.printStackTrace() e.printStackTrace e {
		          buflen = in.read(buffer);
		        } buflen = in.read(buffer) buflen in.read(buffer) in.read in buffer if (buflen <= 0) {
		          return false;
		        } buflen <= 0 buflen 0 {
		          return false;
		        } return false; false return true; true private int readByte() {
		      if (hasNextByte()) return buffer[ptr++];
		      else return -1;
		    } readByte {
		      if (hasNextByte()) return buffer[ptr++];
		      else return -1;
		    } if (hasNextByte()) return buffer[ptr++];
		      else return -1; hasNextByte() hasNextByte return buffer[ptr++]; buffer[ptr++] buffer ptr++ ptr return -1; -1 1 private static boolean isPrintableChar(int c) {
		      return 33 <= c && c <= 126;
		    } isPrintableChar {
		      return 33 <= c && c <= 126;
		    } return 33 <= c && c <= 126; 33 <= c && c <= 126 33 <= c 33 c c <= 126 c 126 int c c private void skipUnprintable() {
		      while (hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++;
		    } skipUnprintable {
		      while (hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++;
		    } while (hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++; hasNextByte() && !isPrintableChar(buffer[ptr]) hasNextByte() hasNextByte !isPrintableChar(buffer[ptr]) isPrintableChar(buffer[ptr]) isPrintableChar buffer[ptr] buffer ptr ptr++ ptr public boolean hasNext() {
		      skipUnprintable();
		      return hasNextByte();
		    } hasNext {
		      skipUnprintable();
		      return hasNextByte();
		    } skipUnprintable() skipUnprintable return hasNextByte(); hasNextByte() hasNextByte public String next() {
		      if (!hasNext()) throw new NoSuchElementException();
		      StringBuilder sb = new StringBuilder();
		      int b = readByte();
		      while (isPrintableChar(b)) {
		        sb.appendCodePoint(b);
		        b = readByte();
		      }
		      return sb.toString();
		    } next {
		      if (!hasNext()) throw new NoSuchElementException();
		      StringBuilder sb = new StringBuilder();
		      int b = readByte();
		      while (isPrintableChar(b)) {
		        sb.appendCodePoint(b);
		        b = readByte();
		      }
		      return sb.toString();
		    } if (!hasNext()) throw new NoSuchElementException(); !hasNext() hasNext() hasNext throw new NoSuchElementException(); new NoSuchElementException() StringBuilder sb = new StringBuilder(); sb new StringBuilder() int b = readByte(); b readByte() readByte while (isPrintableChar(b)) {
		        sb.appendCodePoint(b);
		        b = readByte();
		      } isPrintableChar(b) isPrintableChar b {
		        sb.appendCodePoint(b);
		        b = readByte();
		      } sb.appendCodePoint(b) sb.appendCodePoint sb b b = readByte() b readByte() readByte return sb.toString(); sb.toString() sb.toString sb public long nextLong() {
		      if (!hasNext()) throw new NoSuchElementException();
		      long n = 0;
		      boolean minus = false;
		      int b = readByte();
		      if (b == '-') {
		        minus = true;
		        b = readByte();
		      }
		      if (b < '0' || '9' < b) {
		        throw new NumberFormatException();
		      }
		      while (true) {
		        if ('0' <= b && b <= '9') {
		          n *= 10;
		          n += b - '0';
		        } else if (b == -1 || !isPrintableChar(b)) {
		          return minus ? -n : n;
		        } else {
		          throw new NumberFormatException();
		        }
		        b = readByte();
		      }
		    } nextLong {
		      if (!hasNext()) throw new NoSuchElementException();
		      long n = 0;
		      boolean minus = false;
		      int b = readByte();
		      if (b == '-') {
		        minus = true;
		        b = readByte();
		      }
		      if (b < '0' || '9' < b) {
		        throw new NumberFormatException();
		      }
		      while (true) {
		        if ('0' <= b && b <= '9') {
		          n *= 10;
		          n += b - '0';
		        } else if (b == -1 || !isPrintableChar(b)) {
		          return minus ? -n : n;
		        } else {
		          throw new NumberFormatException();
		        }
		        b = readByte();
		      }
		    } if (!hasNext()) throw new NoSuchElementException(); !hasNext() hasNext() hasNext throw new NoSuchElementException(); new NoSuchElementException() long n = 0; n 0 boolean minus = false; minus false int b = readByte(); b readByte() readByte if (b == '-') {
		        minus = true;
		        b = readByte();
		      } b == '-' b '-' {
		        minus = true;
		        b = readByte();
		      } minus = true minus true b = readByte() b readByte() readByte if (b < '0' || '9' < b) {
		        throw new NumberFormatException();
		      } b < '0' || '9' < b b < '0' b '0' '9' < b '9' b {
		        throw new NumberFormatException();
		      } throw new NumberFormatException(); new NumberFormatException() while (true) {
		        if ('0' <= b && b <= '9') {
		          n *= 10;
		          n += b - '0';
		        } else if (b == -1 || !isPrintableChar(b)) {
		          return minus ? -n : n;
		        } else {
		          throw new NumberFormatException();
		        }
		        b = readByte();
		      } true {
		        if ('0' <= b && b <= '9') {
		          n *= 10;
		          n += b - '0';
		        } else if (b == -1 || !isPrintableChar(b)) {
		          return minus ? -n : n;
		        } else {
		          throw new NumberFormatException();
		        }
		        b = readByte();
		      } if ('0' <= b && b <= '9') {
		          n *= 10;
		          n += b - '0';
		        } else if (b == -1 || !isPrintableChar(b)) {
		          return minus ? -n : n;
		        } else {
		          throw new NumberFormatException();
		        } '0' <= b && b <= '9' '0' <= b '0' b b <= '9' b '9' {
		          n *= 10;
		          n += b - '0';
		        } n *= 10 n 10 n += b - '0' n b - '0' b '0' if (b == -1 || !isPrintableChar(b)) {
		          return minus ? -n : n;
		        } else {
		          throw new NumberFormatException();
		        } b == -1 || !isPrintableChar(b) b == -1 b -1 1 !isPrintableChar(b) isPrintableChar(b) isPrintableChar b {
		          return minus ? -n : n;
		        } return minus ? -n : n; minus ? -n : n minus -n n n {
		          throw new NumberFormatException();
		        } throw new NumberFormatException(); new NumberFormatException() b = readByte() b readByte() readByte public int nextInt() {
		      return (int) nextLong();
		    } nextInt {
		      return (int) nextLong();
		    } return (int) nextLong(); (int) nextLong() nextLong public double nextDouble(){
		    	return Double.parseDouble(next());
		    } nextDouble {
		    	return Double.parseDouble(next());
		    } return Double.parseDouble(next()); Double.parseDouble(next()) Double.parseDouble Double next() next public int[] nextIntArray(int N, boolean oneBased) {
		      if (oneBased) {
		        int[] array = new int[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      } else {
		        int[] array = new int[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      }
		    } nextIntArray {
		      if (oneBased) {
		        int[] array = new int[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      } else {
		        int[] array = new int[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      }
		    } if (oneBased) {
		        int[] array = new int[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      } else {
		        int[] array = new int[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      } oneBased {
		        int[] array = new int[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      } int[] array = new int[N + 1]; array new int[N + 1] N + 1 N 1 for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextInt();
		        } int i = 1; int i = 1; i 1 i <= N i N i++ i++ i {
		          array[i] = sc.nextInt();
		        } {
		          array[i] = sc.nextInt();
		        } array[i] = sc.nextInt() array[i] array i sc.nextInt() sc.nextInt sc return array; array {
		        int[] array = new int[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      } int[] array = new int[N]; array new int[N] N for (int i = 0; i < N; i++) {
		          array[i] = sc.nextInt();
		        } int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
		          array[i] = sc.nextInt();
		        } {
		          array[i] = sc.nextInt();
		        } array[i] = sc.nextInt() array[i] array i sc.nextInt() sc.nextInt sc return array; array int N N boolean oneBased oneBased public long[] nextLongArray(int N, boolean oneBased) {
		      if (oneBased) {
		        long[] array = new long[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      } else {
		        long[] array = new long[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      }
		    } nextLongArray {
		      if (oneBased) {
		        long[] array = new long[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      } else {
		        long[] array = new long[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      }
		    } if (oneBased) {
		        long[] array = new long[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      } else {
		        long[] array = new long[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      } oneBased {
		        long[] array = new long[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      } long[] array = new long[N + 1]; array new long[N + 1] N + 1 N 1 for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextLong();
		        } int i = 1; int i = 1; i 1 i <= N i N i++ i++ i {
		          array[i] = sc.nextLong();
		        } {
		          array[i] = sc.nextLong();
		        } array[i] = sc.nextLong() array[i] array i sc.nextLong() sc.nextLong sc return array; array {
		        long[] array = new long[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      } long[] array = new long[N]; array new long[N] N for (int i = 0; i < N; i++) {
		          array[i] = sc.nextLong();
		        } int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
		          array[i] = sc.nextLong();
		        } {
		          array[i] = sc.nextLong();
		        } array[i] = sc.nextLong() array[i] array i sc.nextLong() sc.nextLong sc return array; array int N N boolean oneBased oneBased public class Main{
	static FastScanner sc = new FastScanner();
	static PrintWriter out = new PrintWriter(System.out);
	static int n;
	static String s;
	//static Queue <Long> q = new ArrayDeque <Long>();
	//static List<ArrayList<Integer>> e;
	//static LinkedList<Integer> adj[]; 
	
	static final long lim = 1_000_000_000_000_000_000L;

	public static void main(String[] args) {
		n = sc.nextInt();
		
		long a [] = sc.nextLongArray(n, false);
		
		Arrays.sort(a);
		
		if (a[0]==0)
			out.println(0);
		
		else {
			long A = a[0];
			boolean ok = true;
			for (int i=1; i<n; i++) {
				long cur = a[i];
				
				if (cur<=lim/A) {
					A*=cur;	
				}
				
				else {
					ok = false;
					break;
				}
				
				
			}
			
			if (ok)
				out.println(A);
			
			else
				out.println(-1);
		}
		out.flush();
	}
	
	
	
		static class FastScanner {
		    private final InputStream in = System.in;
		    private final byte[] buffer = new byte[1024];
		    private int ptr = 0;
		    private int buflen = 0;

		    private boolean hasNextByte() {
		      if (ptr < buflen) {
		        return true;
		      } else {
		        ptr = 0;
		        try {
		          buflen = in.read(buffer);
		        } catch (IOException e) {
		          e.printStackTrace();
		        }
		        if (buflen <= 0) {
		          return false;
		        }
		      }
		      return true;
		    }

		    private int readByte() {
		      if (hasNextByte()) return buffer[ptr++];
		      else return -1;
		    }

		    private static boolean isPrintableChar(int c) {
		      return 33 <= c && c <= 126;
		    }

		    private void skipUnprintable() {
		      while (hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++;
		    }

		    public boolean hasNext() {
		      skipUnprintable();
		      return hasNextByte();
		    }

		    public String next() {
		      if (!hasNext()) throw new NoSuchElementException();
		      StringBuilder sb = new StringBuilder();
		      int b = readByte();
		      while (isPrintableChar(b)) {
		        sb.appendCodePoint(b);
		        b = readByte();
		      }
		      return sb.toString();
		    }

		    public long nextLong() {
		      if (!hasNext()) throw new NoSuchElementException();
		      long n = 0;
		      boolean minus = false;
		      int b = readByte();
		      if (b == '-') {
		        minus = true;
		        b = readByte();
		      }
		      if (b < '0' || '9' < b) {
		        throw new NumberFormatException();
		      }
		      while (true) {
		        if ('0' <= b && b <= '9') {
		          n *= 10;
		          n += b - '0';
		        } else if (b == -1 || !isPrintableChar(b)) {
		          return minus ? -n : n;
		        } else {
		          throw new NumberFormatException();
		        }
		        b = readByte();
		      }
		    }

		    public int nextInt() {
		      return (int) nextLong();
		    }
		    
		    public double nextDouble(){
		    	return Double.parseDouble(next());
		    }

		    public int[] nextIntArray(int N, boolean oneBased) {
		      if (oneBased) {
		        int[] array = new int[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      } else {
		        int[] array = new int[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      }
		    }

		    public long[] nextLongArray(int N, boolean oneBased) {
		      if (oneBased) {
		        long[] array = new long[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      } else {
		        long[] array = new long[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      }
		    }
		  }

		} public class Main{
	static FastScanner sc = new FastScanner();
	static PrintWriter out = new PrintWriter(System.out);
	static int n;
	static String s;
	//static Queue <Long> q = new ArrayDeque <Long>();
	//static List<ArrayList<Integer>> e;
	//static LinkedList<Integer> adj[]; 
	
	static final long lim = 1_000_000_000_000_000_000L;

	public static void main(String[] args) {
		n = sc.nextInt();
		
		long a [] = sc.nextLongArray(n, false);
		
		Arrays.sort(a);
		
		if (a[0]==0)
			out.println(0);
		
		else {
			long A = a[0];
			boolean ok = true;
			for (int i=1; i<n; i++) {
				long cur = a[i];
				
				if (cur<=lim/A) {
					A*=cur;	
				}
				
				else {
					ok = false;
					break;
				}
				
				
			}
			
			if (ok)
				out.println(A);
			
			else
				out.println(-1);
		}
		out.flush();
	}
	
	
	
		static class FastScanner {
		    private final InputStream in = System.in;
		    private final byte[] buffer = new byte[1024];
		    private int ptr = 0;
		    private int buflen = 0;

		    private boolean hasNextByte() {
		      if (ptr < buflen) {
		        return true;
		      } else {
		        ptr = 0;
		        try {
		          buflen = in.read(buffer);
		        } catch (IOException e) {
		          e.printStackTrace();
		        }
		        if (buflen <= 0) {
		          return false;
		        }
		      }
		      return true;
		    }

		    private int readByte() {
		      if (hasNextByte()) return buffer[ptr++];
		      else return -1;
		    }

		    private static boolean isPrintableChar(int c) {
		      return 33 <= c && c <= 126;
		    }

		    private void skipUnprintable() {
		      while (hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++;
		    }

		    public boolean hasNext() {
		      skipUnprintable();
		      return hasNextByte();
		    }

		    public String next() {
		      if (!hasNext()) throw new NoSuchElementException();
		      StringBuilder sb = new StringBuilder();
		      int b = readByte();
		      while (isPrintableChar(b)) {
		        sb.appendCodePoint(b);
		        b = readByte();
		      }
		      return sb.toString();
		    }

		    public long nextLong() {
		      if (!hasNext()) throw new NoSuchElementException();
		      long n = 0;
		      boolean minus = false;
		      int b = readByte();
		      if (b == '-') {
		        minus = true;
		        b = readByte();
		      }
		      if (b < '0' || '9' < b) {
		        throw new NumberFormatException();
		      }
		      while (true) {
		        if ('0' <= b && b <= '9') {
		          n *= 10;
		          n += b - '0';
		        } else if (b == -1 || !isPrintableChar(b)) {
		          return minus ? -n : n;
		        } else {
		          throw new NumberFormatException();
		        }
		        b = readByte();
		      }
		    }

		    public int nextInt() {
		      return (int) nextLong();
		    }
		    
		    public double nextDouble(){
		    	return Double.parseDouble(next());
		    }

		    public int[] nextIntArray(int N, boolean oneBased) {
		      if (oneBased) {
		        int[] array = new int[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      } else {
		        int[] array = new int[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      }
		    }

		    public long[] nextLongArray(int N, boolean oneBased) {
		      if (oneBased) {
		        long[] array = new long[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      } else {
		        long[] array = new long[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      }
		    }
		  }

		} Main
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.NoSuchElementException;


public class Main{
	static FastScanner sc = new FastScanner();
	static PrintWriter out = new PrintWriter(System.out);
	static int n;
	static String s;
	//static Queue <Long> q = new ArrayDeque <Long>();
	//static List<ArrayList<Integer>> e;
	//static LinkedList<Integer> adj[]; 
	
	static final long lim = 1_000_000_000_000_000_000L;

	public static void main(String[] args) {
		n = sc.nextInt();
		
		long a [] = sc.nextLongArray(n, false);
		
		Arrays.sort(a);
		
		if (a[0]==0)
			out.println(0);
		
		else {
			long A = a[0];
			boolean ok = true;
			for (int i=1; i<n; i++) {
				long cur = a[i];
				
				if (cur<=lim/A) {
					A*=cur;	
				}
				
				else {
					ok = false;
					break;
				}
				
				
			}
			
			if (ok)
				out.println(A);
			
			else
				out.println(-1);
		}
		out.flush();
	}
	
	
	
		static class FastScanner {
		    private final InputStream in = System.in;
		    private final byte[] buffer = new byte[1024];
		    private int ptr = 0;
		    private int buflen = 0;

		    private boolean hasNextByte() {
		      if (ptr < buflen) {
		        return true;
		      } else {
		        ptr = 0;
		        try {
		          buflen = in.read(buffer);
		        } catch (IOException e) {
		          e.printStackTrace();
		        }
		        if (buflen <= 0) {
		          return false;
		        }
		      }
		      return true;
		    }

		    private int readByte() {
		      if (hasNextByte()) return buffer[ptr++];
		      else return -1;
		    }

		    private static boolean isPrintableChar(int c) {
		      return 33 <= c && c <= 126;
		    }

		    private void skipUnprintable() {
		      while (hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++;
		    }

		    public boolean hasNext() {
		      skipUnprintable();
		      return hasNextByte();
		    }

		    public String next() {
		      if (!hasNext()) throw new NoSuchElementException();
		      StringBuilder sb = new StringBuilder();
		      int b = readByte();
		      while (isPrintableChar(b)) {
		        sb.appendCodePoint(b);
		        b = readByte();
		      }
		      return sb.toString();
		    }

		    public long nextLong() {
		      if (!hasNext()) throw new NoSuchElementException();
		      long n = 0;
		      boolean minus = false;
		      int b = readByte();
		      if (b == '-') {
		        minus = true;
		        b = readByte();
		      }
		      if (b < '0' || '9' < b) {
		        throw new NumberFormatException();
		      }
		      while (true) {
		        if ('0' <= b && b <= '9') {
		          n *= 10;
		          n += b - '0';
		        } else if (b == -1 || !isPrintableChar(b)) {
		          return minus ? -n : n;
		        } else {
		          throw new NumberFormatException();
		        }
		        b = readByte();
		      }
		    }

		    public int nextInt() {
		      return (int) nextLong();
		    }
		    
		    public double nextDouble(){
		    	return Double.parseDouble(next());
		    }

		    public int[] nextIntArray(int N, boolean oneBased) {
		      if (oneBased) {
		        int[] array = new int[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      } else {
		        int[] array = new int[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextInt();
		        }
		        return array;
		      }
		    }

		    public long[] nextLongArray(int N, boolean oneBased) {
		      if (oneBased) {
		        long[] array = new long[N + 1];
		        for (int i = 1; i <= N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      } else {
		        long[] array = new long[N];
		        for (int i = 0; i < N; i++) {
		          array[i] = sc.nextLong();
		        }
		        return array;
		      }
		    }
		  }

		}	 



