#include<vector>
#include<iostream>
#include<set>
#include<limits.h>

using namespace std;

typedef pair<int, int> cover;
cover c1, c2, c3;
vector<int> prices;
int cK;
int min_price = INT_MAX;

int get_price() {
	int price = 0;
	for (int i = c1.first; i <= c1.second; i++) {
		price += prices[i%prices.size()];
	}
	for (int j = c2.first; j <= c2.second; j++) {
		price += prices[j%prices.size()];
	}
	for (int k = c3.first; k <= c3.second; k++) {
		price += prices[k%prices.size()];
	}
	return price;
}

bool is_ok() {
	set<int> s;
	for (int i = c1.first; i <= c1.second; i++) {
		s.insert(i % prices.size());
	}
	for (int j = c2.first; j <= c2.second; j++) {
		s.insert(j % prices.size());
	}
	for (int k = c3.first; k <= c3.second; k++) {
		s.insert(k % prices.size());
	}
	return (s.size() == prices.size());
}

void gen_covers() {
	int price = 0; 
	for (unsigned int i = 0; i < prices.size(); i++) {
		for (unsigned int j = 0; j < prices.size(); j++) {
			for (unsigned int k = 0; k < prices.size(); k++) {
				c1.first = i; c1.second = (i + cK - 1); //c1.second is index of last member!
				c2.first = j; c2.second = (j + cK - 1);
				c3.first = k; c3.second = (k + cK - 1);
				if (is_ok()) {
					price = get_price();
					if (price < min_price) {
						min_price = price;
					}
				}
			}
		}
	}
}

int main() {
	int npock;
	int price;
	while(true) {
		min_price = INT_MAX;
		cin >> npock;
		if (npock == 0) return 0;
		for (int i = 0; i < npock; i++) {
			cin >> price;
			prices.push_back(price);
		}
		cK = (npock - 1) / 2;
		gen_covers();
		cout << min_price << endl;
		prices.clear();
	}

	return 0;
}
