Problem:


Score : 200 points

Problem Statement

Given N integers A_1, ..., A_N, compute A_1 \times ... \times A_N.

However, if the result exceeds 10^{18}, print -1 instead.

Constraints

2 \leq N \leq 10^5

0 \leq A_i \leq 10^{18}

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1 ... A_N

Output

Print the value A_1 \times ... \times A_N as an integer, or -1 if the value exceeds 10^{18}.

Sample Input 1

2
1000000000 1000000000

Sample Output 1

1000000000000000000

We have 1000000000 \times 1000000000 = 1000000000000000000.

Sample Input 2

3
101 9901 999999000001

Sample Output 2

-1

We have 101 \times 9901 \times 999999000001 = 1000000000000000001, which exceeds 10^{18}, so we should print -1 instead.

Sample Input 3

31
4 1 5 9 2 6 5 3 5 8 9 7 9 3 2 3 8 4 6 2 6 4 3 3 8 3 2 7 9 5 0

Sample Output 3

0



Sample input:
2
1000000000 1000000000


Sample output:
1000000000000000000

Submission status: Runtime Error

Solution code:
N = int(input())
ans = 1
for i in range(N):
    ans = ans * int(input())
if ans <= 10 ** 18:
    print(ans)
else:
    print(-1)

Submission status: Runtime Error

Solution code:
n = int(input)
a, b = input().split()
d = 1
for i in range(n):
  d *= i
print(d)

Submission status: Runtime Error

Solution code:
import numpy as np
import math

n = int(input())
A = list(map(int, input().split()))
ans = np.prod(A)
l = int(math.log10(ans)+1)
if l >= 18:
    print(-1)
else:
    print(int(ans))

Submission status: Runtime Error

Solution code:
N = int(input())
A = map(int, input().split())
if N > len(A):
  print(0)
else:
  tmp = 1
  for i in range(len(A)):
    tmp *= A[i]
  if np.log(tmp) > 18:
    print(tmp)
  else:
    print(-1)

Submission status: Runtime Error

Solution code:
n=int(input())
x=[int(input()) for i in range(n)]
 
ans=1
for i in x:
  ans = ans*i
  
if ans > 1000000000000000000:
  ans=-1
print(ans)

Submission status: Runtime Error

Solution code:

N = int(input())

aaa = list(map(int, input().split()))



ans = 1

for i in range(N):
    if ans > 10 ** 18:
    ans = -1
    break
    else:
        ans = ans * aaa[i]

print(ans)

Submission status: Runtime Error

Solution code:
N = int(input())
A = list(map(int, input().split()))
M= 1

for _ in for _ in range(Ｎ）
    M = [M*a for (a) in zip(A)]
    if M > 10**18:
        print(-1)
    else:
        print(M)

Submission status: Runtime Error

Solution code:
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
const int maxn = 2e5 + 10;
ll a[maxn];
int pos(ll x)
{
    int num = 0;
    while (x)
    {
        num++;
        x /= 10;
    }
    return num;
}
int main()
{
    int n, f = 0;
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    ll sum = a[1];
    for (int i = 2; i <= n; i++)
    {
        int x = pos(sum);
        int y = pos(a[i]);
        if (x + y >= 21)
        {
            f = 1;
            break;
        }
        else
            sum *= a[i];
        if(sum>1000000000000000000)
            break;
    }
    if ((sum > 1000000000000000000) || f == 1)
        cout << -1 << endl;
    else
        cout << sum << endl;
}

Submission status: Runtime Error

Solution code:
n = input()
kakeru = input().split()
kakekake = kakeru[0]
    if n > 1:
        for i in range(n-3):
            kakekake = kakekake * kakeru[i+1]
if kakekake > 10**18:
    print(-1)
print(kakekake)

Submission status: Runtime Error

Solution code:
n = int(input())
a = input().split(" ")
lista = [int(n) for n in a]
if 0 in lista:
  print(0)
  exit()
else:
  kotae=1
  for i in range(n+1):
    kotae=kotae*lista[i]
    if kotae>10**18:
        print(-1)  
        exit()
  print(kotae)

Submission status: Runtime Error

Solution code:
#include<iostream>
using namespace std;
int main(){
	long t;
	long long x,res=1;
	cin>>t;
	while(t--){
		cin>>x;
		res = res*x;
	}
	if(res > 1000000000000000000){
		cout<<-1<<endl;
	}else{
		cout<<res<<endl;
	}
	
	return 0;
}

Submission status: Runtime Error

Solution code:
N = int(input())
A = list(map(int, input().split()))
ans = 1

for _ in for _ in range(Ｎ）
    ans = [ans*a for (a) in zip(A)]
    if ans > 10**18:
        print(-1)
    else:
        print(ans)

Submission status: Runtime Error

Solution code:
# your code goes here
n = int(raw_input())
nums = raw_input().split()
nums1 = []
for i in nums:
	nums1.append(int(i))
nums1.sort()
ans = 1
flag = 0
for i in range(len(nums1)):
	ans = ans*nums1[i]
	if ans>1e18:
		flag=1
		break

if flag==1:
	print(-1)
else:
	print(ans)

Submission status: Runtime Error

Solution code:
n = int(input())
arr = list()
for i in range(0, n):
    a = int(input())
    arr.append(a)

max1 = 10**18
ans=1
fg=0
for i in arr:
    ans=ans*i
    if ans>max1:
        fg=1
        break

if fg==1:
    print(-1)
else:
    print(ans)

Submission status: Runtime Error

Solution code:
# -*- coding: utf-8 -*-
import sys

#input = stdin.readline


j=0
k=0
n=3
r=1
a=[0]
#n=int(input())
#r=int(input())
#print(M)
#A=int(input())
#B=int(input())
#print(N)
"1行1つの整数を入力を取得し、整数と取得する"


#number_list=list(map(int, input().split(" ")))#数字の時
#print(number_list)
"12 21 332 とか入力する時に使う"
"1行に複数の整数の入力を取得し、整数として扱う"

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#メモ
for i in number_list:#こっちの方がrage使うより早いらしい
    print(number_list[i-1])#

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'''
x=[]
y=[]
for i in range(N):
    x1, y1=[int(i) for i in input().split()]
    x.append(x1)
    y.append(y1)
print(x)
print(y)
"複数行に2数値を入力する形式 x座標とy座標を入力するイメージ"
'''

'''
mixlist=[]
for i in range(N):
    a,b=input().split()
    mixlist.append((int(a),b))
print(mixlist)
"複数行にintとstrを複合して入力するやつ，今回はリスト一つで処理している"
'''

'''
#array=[input().split()for i in range(N)]
#print(type(array[0][0]))
#print(array)
"正方行列にstr型の値を入力"
'''

#brray=[list(map(int, input().split(" ")))for i in range(N)]
#print(type(brray[0][0]))
#print(brray)
'''
入力
1 2
4 5
7 8
出力結果
[[1, 2], [4, 5], [7, 8]]
'''
"列数に関して自由度の高いint型の値を入力するタイプの行列"
#以下に別解を記載
#N, M = [int(i) for i in input().split()]
'''
table = [[int(i) for i in input().split()] for m in range(m)]

print(type(N))
print(N)
print(type(M))
print(M)

print(type(table))
print(table)
'''




#s=input()
#a=[int(i) for i in s]
#print(a[0])
#print([a])
#単数値．桁ごとに分割したい．入力と出力は以下の通り
#イメージとして1桁ごとにリストに値を入れているかんじ
#intを取ると文字列分解に使える
'''
入力
1234
出力
1
[[1, 2, 3, 4]]
'''




'''
word_list= input().split(" ")
print(word_list[0])
"連続文字列の入力"
"qw er ty とかの入力に使う"
"入力すると空白で区切ったところでlistの番号が与えられる"
'''



'''
A, B, C=stdin.readline().rstrip().split()#str style 何個でもいけることが多い
print(A)
"リストではなく独立したstr型を入れるなら以下のやり方でOK"
'''


#a= stdin.readline().rstrip()
#print(a.upper())
"aという変数に入っているものを大文字にして出力"


#a,b=map(int, input().split())  #int style 複数数値入力　「A B」みたいなスペース空いた入力のとき

#なんかうまく入力されるけど
#a=[[int(i) for i in 1.strip()]for 1 in sys.stdin]
#a = [[int(c) for c in l.strip()] for l in sys.stdin]]
#print(a)
#複数行の数値を入力して正方行列を作成


##############################################################################################
##############################################################################################
#under this line explains example calculation



'''
コンビネーションの組み合わせの中身を出力する形式
for i in itertools.combinations(brray, 2)
combinationsをpermutationsにすれば順列になる
今回なら(abc133B)
入力
1 2
5 5
-2 8
出力
[[1, 2], [5, 5], [-2, 8]]
もちろん一次元リストでも使えるし
何よりiもリストのように使えるので便利
'''

#nCr combination
'''
def cmb(n,r):
    #When n < r , this function isn't valid
    r= min(n-r,r)
    #print(n,r)
    if r == 0: return 1
    over = reduce(mul, range(n, n-r, -1))
    #flochart mul(n,n-1)=x
    #next     mul(x,n-2)........(n-r+1,n-r)
    #mul read a,b and returns a*b

    under = reduce(mul, range(1, r+1))
    #print(over, under)
    #reduce is applied mul(1,2)=2
    #next   mul(2,3)=6
    #next   mul(6,4)=4.........last(r!,r+1)=r+1!

    return over // under
    #// is integer divide
    #calc example 5C2
    #over=5*4*3
    #under=3*2*1
a = cmb(n, r)
#print(a)
'''

'''
import itertools
from itertools import combinations_with_replacement

combinationについて
以下の違いを意識しよう
combinations() p, r 長さrのタプル列、ソートされた順で重複なし

combinations_with_replacement() p, r 長さrのタプル列、ソートされた順で重複あり


使用例 　　　　　　　　　　　                  出力　　
combinations('ABCD', 2)　　　　　　　　　　　　AB AC AD BC BD CD
combinations_with_replacement('ABCD', 2)　　 AA AB AC AD BB BC BD CC CD DD
'''



'''
#集計
#example
#a=[2,2,2,3,4,3,1,2,1,3,1,2,1,2,2,1,2,1]
#a=Counter(a)
for i in a.most_common(n):print(i)
#most_common()メソッドは、出現回数が多い要素順にCounterオブジェクトを並び替えます。
#引数にint型の数字nを設定した場合は、出現回数が高い上位ｎ個の要素を返します。
#何も設定しなければ、コンテナ型にあるすべての要素を出現回数の順番に並び替えたタプル型オブジェクトを返します。
#out put
#(2, 8)
 #(1, 6)
#(3, 3)
#(4, 1)
'''


#二部探索(binary search)
#A = [1, 2, 3, 3, 3, 4, 4, 6, 6, 6, 6]
#print(A)
#index = bisect.bisect_left(A, 5) # 7 最も左(前)の挿入箇所が返ってきている
#A.insert(index, 5)
#print(index)
#print(A)
'''
bisect.bisect_left(a, x, lo=0, h=len(a))
引数
a: ソート済みリスト
x: 挿入したい値
lo: 探索範囲の下限
hi: 探索範囲の上限
(lo, hiはスライスと同様の指定方法)
bisect_leftはソートされたリストaに対して順序を保ったままxを挿入できる箇所を探索します。leftが示す通り、aにすでにxが存在している場合は、挿入箇所は既存のxよりも左側になります。また、lo, hiを指定することで探索範囲を絞り込むことも可能です。デフォルトはaの全体が探索対象です。
'''

'''
素数の判定
'''
def is_prime(n):
    if n == 1: return False

    for k in range(2, int(np.sqrt(n)) + 1):
        #sqrt(n)+1以上は考えて約数はないので却下
        if n % k == 0:
            return False
            #割り切れたらFalse
    return True


'''
npのmaxとmaximumの違い
xs = np.array([1, -2, 3])
np.max(xs, 0)
この出力は3となります．[1, -2, 3]と0の4つの数字のうち，最も大きい値を出力します．

一方で，[max(1, 0), max(-2, 0), max(3, 0)]を出力したい時があります．
その時は，numpyのmaximum関数を用います．

xs = np.array([1, -2, 3])
np.maximum(xs, 0)  # [1, 0, 3]

'''

def factorial(x, mod=10**9+7):
    # x!
    # 階乗
    # ex) factorial(5) = 120
    tmp = 1
    for i in range(1, x+1):
        tmp = (tmp * i) % mod
    return tmp
    '''
    Basically, when you do a**d % n, you actually have to calculate a**d, which could be quite large.
    But there are ways of computing a**d % n without having to compute a**d itself, and that is what pow does.
    '''
"#a,bの最大公約数"
def gcd(a, b):
    while b:#0以外なら進んでいくが、0になった時にとまる余りが0より、最大公約数と言える
        #print(a,b)#2,3
        #やり方てきにユークリッドの互除法か
        a, b = b, a % b#aには2 bには2%3が入る
    return a

"#a,bの最小公倍数"
def lcm(a, b):
    return a * b // gcd (a, b)

"#nの約数を全て求める"
def divisor(n):
    i = 1
    table = []
    while i * i <= n:
        if n%i == 0:
            table.append(i)
            table.append(n//i)
        i += 1
    table = list(set(table))
    return table


########################################################################
########################################################################
#b2=a[:]  #1次元のときはコピーはこれで良い
#print(b2)

#a= [[0]*3 for i in range(5)] #2次元配列はこう準備、[[0]*3]*5だとだめ
#b3=copy.deepcopy(a)  #2次元配列はこうコピーする
#print(b3)

'''
ascii_letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
digits = '0123456789'
hexdigits = '0123456789abcdefABCDEF'
letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv...\xaf\xb0...
lowercase = 'abcdefghijklmnopqrstuvwxyz'
octdigits = '01234567'
printable = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU...
punctuation = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
whitespace = '\t\n\x0b\x0c\r '
'''
'''
引数endに任意の文字列を指定すると、その文字列が改行の代わりに最後に挿入される。例えば連続するprint()の出力を改行なしで単純に連結したい場合は空文字列''を指定すればよい。

print('abc', end='---')
print('xyz')
# abc---xyz

print('abc', end='')
print('xyz')
# abcxyz
source: print_basic.py
なお、デフォルトで改行されるのは引数endのデフォルト値が改行文字'\n'に設定されているから。
'''

def main():
    n=3
    steps=0
    state=0
    w=1
    j=0
    k=0
    #lenを変数に置くと事故るから注意
    n=int(input())
    #a,b=input().split(#" ")#a,bがともに文字列のとき
    #a,b=map(int, input().split(" "))
    #mapでとってもstrで変換すればappend可能
    #s=input()
    #a=[i for i in s]#int(i)にすれば数字も行ける
    nl=list(map(int, input().split(" ")))#数字の時
    #print(a)
    #brray=[list(map(int, input().split(" ")))for i in range(n)]
    #print(brray)
    n=len(nl)
    ans=1
    #from itertools import accumulate

#a = list(range(1, 11))
    #ans = list(accumulate(nl))     # itertoolsの戻り値はイテレータとなっているので必要に応じてlist化します．
    #print(a)
    #print(b)
    for i in range(n):
        ans=ans*nl[i]
    if ans>10**(18):
        print(-1)
        sys.exit()
    print(ans)
    #for i in range(1,n+1,2):#これで1個飛ばしループになる
    # pass
     #print(i)

    l = ['aaa', 'bbb', 'ccc']
    x=l.index('aaa')#ある要素のインデックス番号を取得
    #s = ''.join(l)
    #s = " ".join(map(str,a))#スペースを空ける時はこう
    #print(s)
    # aaabbbccc

    #if state in known_states and not flag: # state => 2 steps => 5
        #こうやってある要素がリストの中にあるか探すのか
    #print(f'steps: {steps}, state: {state}')
    #こう書いてあるとデバックしやすい

    #dp= [[0]*3 for i in range(5)]#列　行
    #dp用の0の入ったやつ
    #dp= [[0]*(w+1) for i in range(n+1)]#0からwまでのw+1回計算するから
    #print(dp)＃初期条件が入る分計算回数+1列分必要(この場合は判断すべきものの数)
    DP = np.zeros(w+1, dtype=int)#これでも一次元リストが作れる
    exdp=np.zeros((3,4)) # ３×４の２次元配列を生成。2次元ならこう
    #dtypeは指定しないとfloatになる
    #for i in range(n):#ちょっとした入力に便利
    #    a, b = map(int, input().split())
        #dp[i][0] += [a]
        #これだとintとlistをつなぐことになって不適
    #    dp[i] += [a]
    #    dp[i] += [b]
        #これはうまくいく
        #やり方はいろいろあるということ
    #print(dp)


    #brray=[list(map(int, input().split(" ")))for i in range(N)
    #print(brray)



    '''
    入力
    1234
    出力
    [1, 2, 3, 4]
    '''
    pin_l=["x" for i in range(10)]#内包表記に慣れろ
    #print(pin_l)

    ls = ["a", "b", "c", "d", "e"]


    #print(ls[2:5])
    #スライスでの取得

    #print(ls[:-3])
    #一番左端から右から3番目より左まで取得

    #print(ls[:4:2])
    #スライスで1個飛ばしで取得
    #ないときは左端スタート
    #始点のインデックス番号 : 終点のインデックス番号 : スキップする数+1
    #print(ls[::2])
    '''
    lsというリストの場合に、1つ飛びの値を取得したい場合には
    ls[::2]
    のようにします。こうすると、
    ["a", "c", "d"]と出力される
    '''

if __name__ == "__main__":
    main()

Submission status: Runtime Error

Solution code:

MX = 1000000000000000000

n = int(input())
lst = map(int, raw_input().split())

ans = 1
for i in range(0, n):
	if lst[i] == 0:
		ans = 0

if ans == 0:
	print 0
else:
	ans = 1
	flag = 0
	for i in range(0, n):
		ans = ans * lst[i]
		if ans > MX:
			flag = 1
			break;
	
	if flag == 1:
		print -1
	else:
		print ans

Submission status: Runtime Error

Solution code:
from functools import reduce
import array
b = int(input())
a= array.array("f",[float(x) for x in input().split()])

mm = int(reduce(lambda x, y: x * y, a))

if mm > 10**18:
    print(-1)
else:
    print(mm)

Submission status: Runtime Error

Solution code:
#include <bits/stdc++.h>
using namespace std;
#define ll long long 
#define ld double 
#define  pb push_back
#define  ff(n) for(i=0; i<n; i++)
#define mo 10000
ll max(ll a,ll b){return (a>b)?a:b;}
int main()
{
    ll n,m=0,i,x,y,k=0,j;
    cin>>n;
    unsigned ll k1=1;
    vector<ll>a(n);
    for(i=0; i<n; i++)
      cin>>a[i];
    sort(a.begin(),a.end());
    for(i=0; i<n; i++)
    {
        
        if(k1*a[i]>1000000000000000000)
         {
             cout<<-1<<endl;
             return 0;
         }
         k1*=a[i];
    }  

     cout<<k1<<endl;    
}

Submission status: Runtime Error

Solution code:
import numpy as np
N=int(input())
p=list(map(int,input().split()))
x=np.prod(p,axis=1)
if x<10**18:
  print(x)
else:
  print(-1)

Submission status: Runtime Error

Solution code:
n = int(input())
ans = 1
for i in range(n):
  ans *= int(input())
if ans > 1000000000000000000:
  print("-1")
else:
  print(ans)

Submission status: Runtime Error

Solution code:
N = int(input())
Ａ = list(map(int, input().split()))
ans = 1

for _ in for _ in range(Ｎ）
    ans = [ans*a for (a) in zip(A)]
    if ans > 10**18:
        print(-1)
    else:
        print(ans)

Submission status: Runtime Error

Solution code:
N = int(input())
A = list(map(int, input().split()))

tar = reduce(lambda x, y: x*y, A)

if tar > 10 ** 18:
    print(-1)
else:
    print(tar)

Submission status: Runtime Error

Solution code:
#include"bits/stdc++.h"
#define endl '\n'

using namespace std;

int main(){
    ios::sync_with_stdio(0), cin.tie(0);
    vector<unsigned long long> v;
    int N;
    cin >> N;
    for(int i = 0; i < N; i++){
        unsigned long long tmp;
        cin >> tmp;
        v.push_back(tmp);
        if(tmp == 0){
            cout << 0;
            return 0;
        }
    }
    unsigned long long rvalue = 1;
    for(int i = 0; i< N; i++){
        rvalue *= v[i];
        if(rvalue >= 1e18){
            cout<<-1;
            return 0;
        }
    }
    cout << rvalue;
    return 0;
}

Submission status: Runtime Error

Solution code:
import sys

N = int(input())
A = list(map(int, input().split()))multiple = 1

if 0 in A:
    print(0)
else:   
    for i in range(N):
        multiple *= A[i]
        if multiple > 10 ** 18:
            print(-1)
            sys.exit( )

    print(multiple)

Submission status: Runtime Error

Solution code:
N = input()
A = input().split()
Seki = 1

for i in N:
  Seki = Seki*int(A[i])
  if Seki > 10**18:
    break

if Seki > 10**18:
  print("-1")
else:
  print(Seki)

Submission status: Runtime Error

Solution code:
N = int(input())
A = list(map(int, input().split()))

tar = reduce(lambda x, y: x*y, values)

if tar > 10 ** 18:
    print(-1)
else:
    print(tar)

Submission status: Runtime Error

Solution code:
n=input()
a = list(map(int, input().split()))
ans=1
az=a.index(0)

for i in range(len(a)):
    ans*= a[i]

    if az>0:
        ans=0
        break
    if ans>=1000000000000000001:
        ans=-1
        break

print(ans)

Submission status: Runtime Error

Solution code:
n = int(input())

sum = 0
i = 0

for i in range(n):
  x = int(input())
  sum *= x
  i += 1
  
  if sum > 10 ** 18:
    print(-1)
    break
    
print(sum)

Submission status: Runtime Error

Solution code:
import sys
import math                                               
a,b = [float(x) for x in sys.stdin.readline().split(" ")]
c = str(a * b).split(".")[0]                              
print(c)

Submission status: Runtime Error

Solution code:
import sys
input = sys.stdin.readline

N = int(input())
A = map(int, input().split())

A.sort()

ans = 1
for a in A:
  ans = ans * a
  if ans > 1000000000000000000:
    print -1
    quit()

print(ans)

Submission status: Runtime Error

Solution code:
N = int(input())
As = list(map(int,input().split()))

import numpy

ans = np.prod(As)

if ans > 10**8:
  print(-1)
else:
  print(ans)

Submission status: Runtime Error

Solution code:
n = int(input())
x=1
a=list(map(int,input().split(" ")))
for i in a:
	x=x*i
    if(x==0):
		break
	if(x>=1000000000000000000):
		break
if(x<=1000000000000000000):
	print(x)
else:
	print(-1)

Submission status: Runtime Error

Solution code:
#include <bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for (ll i = a; i < b; i++)
#define REP(i,b) FOR(i,0,b)
#define RFOR(i,a,b) for (ll i = a-1; i >= b; i--)
#define RREP(i,a) RFOR(i,a,0)
#define REPALL(i,x) for (ll i = 0; i < x.size(); i++)
#define RREPALL(i,x) for (ll i = x.size()-1; i >= 0; i--)
#define REPITR(itr,x) for (auto itr = (x).begin(); itr != (x).end(); itr++)
#define ALL(x) (x).begin(), (x).end()
#define SORT(x) sort(ALL(x))
#define MIN_ELEMENT(x) min_element(ALL(x))
#define MAX_ELEMENT(x) max_element(ALL(x))
#define COUNT(x,num) count(ALL(x), num)
#define MEMSET(x,val) memset(x, val, sizeof(x))
#define MAX(a,b) a = max(a,b)
#define MIN(a,b) a = min(a,b)
#define debug(x) cerr<<__LINE__<<": "<<(#x)<<" = "<<(x)<<endl;
void YES(bool flag) {cout<<(flag ? "YES" : "NO")<<endl;}
void Yes(bool flag) {cout<<(flag ? "Yes" : "No")<<endl;}
void yes(bool flag) {cout<<(flag ? "yes" : "no")<<endl;}
#define e1 first
#define e2 second
#define nextline putchar('\n')
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> VI;
typedef vector<vector<int>> VVI;
typedef vector<ll> VLL;
typedef vector<vector<ll>> VVLL;
const int INF = 1e7;
const ll MOD = 1e9 + 7;
const double pi = 3.141592653589793;

int main()
{
    int n;
    cin>>n;
    ll ans = 1ll;

    bool flag = true;
    REP(i,n) {
        ll nans = ans;
        ll a;
        cin>>a;
        nans *= a;

        if (nans > (ll)1e18 || nans < ans) {
            flag = false;
        }
        ans = nans;
    }
    cout<<(flag || ans == 0 ? ans : -1)<<endl;

    return 0;
}

Submission status: Runtime Error

Solution code:
n = input()
kakeru = input().split()
kakekake = kakeru[0]
    if n > 2:
        for i in range(n-2):
            kakekake = kakekake #* kakeru[i+1]
if kakekake > 10**18:
    print(-1)
print(kakekake)

Submission status: Runtime Error

Solution code:
n=int(input())
a = list(map(int, input().split()))
ans=1

if 0 in a :
  ans=0
else:
  for i in range(n+1):
    if len(str(ans))>=19:
      ans=-1
      break
    else:
      ans*=a[i]

print(ans)

Submission status: Runtime Error

Solution code:
N = input()
A = input()split()
Seki = 1

for i in N:
  Seki = Seki*int(A[i])
  if Seki > 10**18:
    break

if Seki > 10**18:
  print("-1")
else:
  print(Seki)

Submission status: Runtime Error

Solution code:
n = int(input())

a = list(map(int, input().split()))
for _, val in enumerate(a):
    ans *= val
if ans > 10**18:
    print(-1)
else:
    print(ans)

Submission status: Runtime Error

Solution code:
n=input()
a = list(map(int, input().split()))
ans=1
a0=a.index(0)

for i in range(len(a)):
    ans*= a[i]

    if a0>0:
        ans=0
        break
    if ans>=1000000000000000001:
        ans=-1
        break

print(ans)

Submission status: Runtime Error

Solution code:
#include <bits/stdc++.h>
#include <boost/multiprecision/cpp_int.hpp>
#define MOD 1000000007
#define ll long long int
#define fastio ios_base::sync_with_stdio(false);cin.tie(NULL);
 
using namespace std;

std::ostream& operator<<(std::ostream& os, __int128 t) {
    // TODO: Convert t to string
    return os << str;
}
 
int main()
{
	
    fastio
    ll n;
  int128_t x, ans=1;;
  cin>>n;
  for(int i=0; i<n; i++)
  {
    cin>>x;
    ans*=x;
    if(ans>1e18)
    {
      ans=-1;
      break;
    }
  }
  cout<<ans;
}

Submission status: Runtime Error

Solution code:
N = int(input())
A = list(map(int,input().split()))
PI = 1
for i in range(N):
    PI = PI*A[i]
if PI > 10**(18):
    print(-1)
    else:
      print(PI)

Submission status: Runtime Error

Solution code:
N = int(input())
A = list(map(int, input().split()))
ans = 1
for i in range (0, N):
	if A[i] == 0:
		ans = 0
        break
	else:
		ans *= A[i]

if ans > 10 ** 18:
	print(-1)
else:
	print(ans)

Submission status: Runtime Error

Solution code:
from decimal import Decimal

n = int(input())
a = list(map(int, input().split()))

ans = 1
for i in a:
    ans = Decimal(str(ans * i))

print(ans) if ans <= Decimal(str(10 ** 18)) else print(-1)

Submission status: Runtime Error

Solution code:
import numpy  
n = int(input())
a = list(map(int, input().split()))
p = numpy.prod(a)

  
if p <= 10**(18):
  print(p)
else:
  print(-1)

Submission status: Runtime Error

Solution code:
ans = 1
if 0 in A:
    print(-1)
else:
    for i in A:
        ans *= i
        if ans > 1000000000000000000:
            print(-1)
            exit()
print(ans)

Submission status: Runtime Error

Solution code:
a = input()
b = [int(a) for a in input().split()]
all = 0
 
for x in b:
  all = all * int(x)
  if all > 10**18:
    all = -1
    break
    
print(string(all))

Submission status: Runtime Error

Solution code:
n = int(input())
a = list(map(int, input().split()))

ans = 1

for i in range(n):
    ans *= a[i]
    if ans = 0:
        print(0)
        exit()
    elif ans > 10**18:
        print(-1)
        exit()

print(ans)

Submission status: Runtime Error

Solution code:
n=int(input())
lis=list(map(int, input().split()))

def calc(i, y):
  if i==n-1:
    return y
  else:
    return calc(i+1, lis[i+1])*y

result=calc(0, lis[0])

if result>10**18:
  print("-1")
else:
  print(result)