#include #include using namespace std; inline int find_min (vector & reseni, int n){ int min = reseni[0]; for (int i = 0 ; i < n ; ++i ){ if (reseni[i] & reseni, vector& sums, int n, int k){ int a,b,c; for (int i = 0; i < n; ++i ){ a = i; c = a + k + 1; for (int j = a + 1 ; j < c ; ++j) { b = j; reseni.push_back(sums[a]+sums[b]+sums[c]); } } } inline void natahni (vector& pockets){ int tmp = 2 * pockets.size() + 10; for (int i = 0 ; i < tmp; ++i){ pockets.push_back(pockets[i]); } } inline void count_sums ( vector& pockets, vector& sums, int k, int n){ for (int j = 0; j < k; ++j){ sums[0]+=pockets[j]; } for (int i = 1; i < n*2 + 1 ; ++i) { sums[i]=sums[i-1] - pockets[i-1] + pockets[i+k]; } } int main () { int n; vector pockets, sums, reseni; while ( cin >> n, n > 0 ){ int k = (n -1 ) /2 ; for (int i = 0; i < n; ++i){ int tmp; cin >> tmp; pockets.push_back(tmp); sums.push_back(0); } natahni (pockets); natahni (sums); count_sums (pockets, sums, k, n); generuj_reseni (reseni, sums, n, k); cout << find_min ( reseni,n) << endl; pockets.clear(); pockets.resize(0); sums.clear(); sums.resize(0); reseni.clear(); reseni.resize(0); } return 0; }