#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>

int n;

int A[20];

long long DP(int l,int lx,int r,int rx){
	if (r-l==1) return 0;
	long long res=0x3f3f3f3f3f3f3f3f;
	for (int k=l+1;k<=r-1;k++)
		res=std::min(res,DP(l,lx,k,lx+rx)+DP(k,lx+rx,r,rx)+static_cast<long long>(A[k])*(lx+rx));
	return res;
}

int main(){
	scanf("%d",&n);
	for (int i=1;i<=n;i++) scanf("%d",&A[i]);
	printf("%lld\n",DP(1,1,n,1)+A[1]+A[n]);
}
