//#include <iostream>
//#include <cmath>
//#include <vector>
//#include <cstdlib>
//#include <string>
//#include <iomanip>
//#include<set>
//#include <algorithm>
//
//using namespace std;
//
//int func(int n){
//    if(n ==0) return 0;
//    return n + func(n-1);
//}
//
//int fibo_basic(int n) {
//    //ベースケース
//    if(n==0) return 0;
//    else if(n ==1) return 1;
//
//    //　再帰呼び出し
//    return fibo_basic(n-1) + fibo_basic(n-2);
//}
//
//long long fibo(int n, vector<long long> &memo){
//    //ベースケース
//    if(n==0) return 0;
//    else if(n ==1) return 1;
//
//    // メモをチェック（すでに計算済みなら答えをリターンする）
//    if(memo[n] != -1) return memo[n];
//
//    // 答えをメモしながら再帰呼び出し
//    return memo[n] = fibo(n-1, memo) + fibo(n-2, memo);
//}
//
//
//int main() {
//    for (int n = 0; n <=10; ++n){
//        cout << n << "までの和 = " << func(n) << endl;
//    }
//    for (int i = 0; i <= 10; ++i){
//        cout << i << "項目の値 :" << fibo_basic(i) << endl;
//    }
//    int n = 50;
//    // fiboを使うと50くらいまでくると計算量が多すぎる
//    // そこでメモ化を行う
//    //  計算ずみのものがあれば、再帰呼び出しを使わずに直接リターンする
//    vector<long long> memo(n, -1);
//    for (int i = 0; i < n; ++i) {
//        cout << i << "項目：" << fibo(i, memo) << endl;
//    }
//    return 0;
//}
//

#include <iostream>
#include <vector>
#include <cstdlib>
#include <queue>
#include <cstdio>

using namespace std;
//template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
//template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
//
//int MAX_N = 10;
//vector<int> heap{MAX_N};
//int sz = 0;
//void push(int x){
//    //自分のノードの番号
//    int i = sz++;
//    while (i>0){
//        // 親ノードの番号
//        int p = (i -1) / 2;
//        //もう逆転していないなら抜ける
//        if (heap[p] <= x) break;
//        // 親のノードの数字を下ろして、自分は上に
//        heap[i] = heap[p];
//        i = p;
//    }
//}
//int pop(){
//    // 最小値
//    int ret = heap[0];
//
//    // 根に持ってくる値
//    int x = heap[--sz];
//
//    int i = 0;
//    while(i * 2 + 1 < sz) {
//        // 子同士を比較
//        int a = i *2 + 1, b = i * 2 + 2;
//        if(b < sz && heap[b] < heap[a]) a = b;
//
//        // もう逆転していないなら終わり
//        if (heap[a] >= x) break;
//
//        // この数うじを持ち上げる
//        heap[i] = heap[a];
//        i = a;
//    }
//    heap[i] = x;
//
//    return ret;
//}
//
//int L, P, N;
//vector<int> A{N+1}, B{N+1};
//void solve(){
//    // 簡単のためにゴールをガソリンスタンドに追加
//    A[N] = L;
//    B[N] = 0;
//    N++;
//
//    //ガソリンスタンドを管理する順位キュー
//    priority_queue<int> que;
//
//    int ans = 0, pos = 0, tank = P;
//    for(int i =0; i<N; i++){
//        //　次に進む距離
//        int d = A[i] - pos;
//        // 十分な量になるまでガソリンを補給
//        while (tank - d < 0){
//            if ( que.empty()){
//                cout << (-1) << endl;
//                return;
//            }
//            tank += que.top();
//            que.pop();
//            ans++;
//        }
//        tank -= d;
//        pos = A[i];
//        que.push(B[i]);
//    }
//    cout << ans << endl;
//}
int main() {
    int N;
    cin >> N;
    vector<int> list(N);
    int sum;
    float ave;
    sum = 0;
    for(int i=0;i<N;i++){
        cin >> list.at(i);
        sum += list.at(i);
    }
    ave = sum/2;
    int zenhan = 0, kohan=0;
    int flag;
    for(int i=0; zenhan<ave; i++){
        zenhan += list.at(i);
        flag = i;
    }

    for(int i=flag+1; i<N; i++){
        kohan += list.at(i);
    }
    int result_1;
    result_1 = abs(zenhan - kohan);
    if(result_1 > list.at(flag)){
        cout << abs(result_1-2*list.at(flag)) << endl;
    } else{
        cout << result_1 << endl;
    }


    return 0;

}

Measured memory_bytes: 256