#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <queue>
#include <ctime>
#define pb push_back
#define mp make_pair
#define ll long long
#define MOD 1e9 + 7
#define ull unsigned long long
#define iloop(a,b) for(ll i = a; i < b; ++i)
#define jloop(a,b) for(ll j = a; j < b; ++j)
using namespace std;
typedef vector<int> vi; 
typedef vector<vi> vvi; 
typedef pair<int,int> ii; 
#define sz(a) int((a).size()) 
#define pb push_back 
#define all(c) (c).begin(),(c).end() 
#define tr(c,i) for(typeof((c).begin() i = (c).begin(); i != (c).end(); i++) 
#define present(c,x) ((c).find(x) != (c).end()) 
#define cpresent(c,x) (find(all(c),x) != (c).end()) 
#define p(a) cout << a << "\n";
void solve()
{
	int n;
	while(scanf("%d",&n) != EOF)
	{
		ll arr[n];
		iloop(0,n)
		{
			scanf("%lld",&arr[i]);
		}
		vector<vector<pair<ll, ll> > > dp(n,vector<pair<ll, ll> >(n));//second -- smoke, first -- sum
		for(int i = n-1; i >= 0; --i)
		{
			for(int j = i, k = n-1; j >= 0 && k >= 0; --j, --k)
			{
				if(j == k)
					dp[j][k] = mp(arr[j],0);
				else
				{
					if(dp[j+1][k].first*arr[j] + dp[j+1][k].second <= dp[j][k-1].first*arr[k] + dp[j][k-1].second)
					{
						dp[j][k].first = (dp[j+1][k].first + arr[j])%100;
						dp[j][k].second = dp[j+1][k].first*arr[j] + dp[j+1][k].second;
					}
					else
					{
						dp[j][k].first = (dp[j][k-1].first + arr[k])%100;
						dp[j][k].second = dp[j][k-1].first*arr[k] + dp[j][k-1].second; 
					}
				}
			}
		}
		/*iloop(0,n)
		{
			jloop(0,n)
			{
				printf("%lld,%lld 	", dp[i][j].first, dp[i][j].second);
			}
			printf("\n");
		}*/
		printf("%lld\n", dp[0][n-1].second);
	}
}
int main()
{
	bool testing = false;
	/*std::ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);*/
	if(testing)
	{
		freopen("test.txt","rt",stdin);
		int start = clock();
		solve();
		int end = clock();
		cout << "time: " << (end - start)/(double)(CLOCKS_PER_SEC)*1000 << " milliseconds\n";
	}
	else
	{
		solve();
	}
} 