Problem:
E : Sigma / Σ

Problem

小学生のづあい君は同じ足し算にも得意不得意があり、 0 以上の整数 X, Y に対して、X + Y を計算するのにかかる時間(秒)が次のように決まる。

1 の位から順番に計算していく。

10 進数表記で 10i 位の計算には xi × yi + ci 秒かかる。

xi は X の10進数表記で 10i の位の数である。

yi は Y の10進数表記で 10i の位の数である。

ただし i が X の桁数より大きくなる時は xi = 0 とする。Y についても同様である。

ci は、 i = 0 または xi-1 + yi-1 + ci-1 < 10 ならば 0、 そうでなければ 1 である。

0 以上の整数 i についての xi × yi + ci の総和が X + Y の計算にかかる時間である。

ある日、づあい君の先生は長さ N の整数列 a0, ... , aN-1 の和を計算する宿題を出した。づあい君は数列の順番を並び替えることはできないが、足し算の式に括弧を付けることにより、足し算の順番を自由に変えることができる。例えば N = 4 の場合、順番は次の 5 通りある。

((a0 + a1) + a2) + a3

(a0 + a1) + (a2 + a3)

(a0 + (a1 + a2)) + a3

a0 + ((a1 + a2) + a3)

a0 + (a1 + (a2 + a3))

それぞれの括弧 (x + y) の中で上で説明した時間がかかるとすると、総和を求めるのにかかる時間は最小で何秒になるだろうか。

Input

入力は次のような形式で与えられる。

N
a0 a1 ... aN-1

Constraints

入力はすべて整数である。

2 ≦ N ≦ 300

0 ≦ ai ≦ 1,000,000

Output

答えの秒数を1行で出力せよ。

Samples

Sample Input 1

3
1 2 3

Sample Output 1

11

次のように計算すると最も速い。

2 + 3 = 5 ( 2 × 3 = 6 秒かかる)

1 + 5 = 6 ( 1 × 5 = 5 秒かかる)

Solution in C++11 (judge verdict: Accepted)

#include <bits/stdc++.h>
 
using namespace std;
 
#define MAX 310
#define INF LLONG_MAX/4
typedef long long ll;
 
ll N,a[MAX],s[MAX];
ll memo[MAX][MAX];
 
int getSize(ll v){
    int cnt = 0;
    while(v > 0){
        v /= 10; cnt++;
    }
    return cnt;
}
 
ll calc(ll X,ll Y){
    ll res = 0LL,c = 0;
    int size = max(getSize(X),getSize(Y));
    for(int i = 0 ; i < size ; i++){
        ll x = X%10,y = Y%10;
        c = (x + y + c) / 10;
        res += x*y+c;
        X /= 10; Y /= 10;
    }
    return res;
}
 
ll solve(int L,int R){
    if(L+1 == R) return 0;
    ll &res = memo[L][R];
    if(res != INF) return res;
    for(int i = L+1 ; i < R ; i++){
        ll cost = calc(s[i]-s[L],s[R]-s[i]);
        res = min(res,solve(L,i)+solve(i,R)+cost);
    }
    return res;
}
 
int main(){
    int N;
    cin >> N;
    for(int i = 0 ; i < N ; i++){
        cin >> a[i];
        s[i+1] = a[i] + s[i];
    }
    fill(memo[0],memo[0]+MAX*MAX,INF);
    cout << solve(0,N) << endl;
    return 0;
}