OIG I - sum

// https://szkopul.edu.pl/problemset/problem/Tczhl-p0p4d8QI5QKSByWTME/site/?key=statement

#include <iostream>

constexpr int sizik = 1024, END = 300, BASE = 10, COMMA_POS = 104;

// +2
int tab[sizik][sizik];
int sign[sizik];

int plus[sizik];
int minus[sizik];

int ans[sizik];

void add(int* taber, int s, const int n) {
    int next = 0, curr = 0;

    for (int i = END; i >= 0; i--) {
        for (int j = 1; j <= n; j++) {
            if (sign[j] == s) {
                curr += tab[j][i];
            }
        }

        taber[i] = next % BASE + curr % BASE;
        next = next / BASE + curr / BASE + taber[i] / BASE;
        taber[i] %= BASE;
        curr = 0;
    }
}

void print_num(int* taber) {
    bool start = false;
    for (int j = 1; j <= 110; j++) {
        if (!start) {
            if (taber[j] != 0) {
                start = true;
            }
        }

        if (j == COMMA_POS) {
            std::cout << ',';
        }

        if (start) {
            std::cout << taber[j];
        }
    }
}

void substract_2(int* num1, int* num2, int* res) {
    int start = END;

    for (int i = END; i >= 0; i--) {
        if (num1[i] != 0) {
            start = i;
            break;
        }
    }

    if (start == END) {
        return;
    }

    int start2 = END;
    for (int i = END; i >= 0; i--) {
        if (num2[i] != 0) {
            start2 = i;
            break;
        }
    }

    if (start2 == END) {
        for (int i = 0; i <= END; i++) {
            res[i] = num1[i];
        }

        return;
    } else {
        start = std::max(start, start2);
    }

    for (int i = start; i >= 0; i--) {
        if (num1[i] >= num2[i]) {
            res[i] = num1[i] - num2[i];
        } else {
            int j = i - 1;
            while (num1[j] == 0) {
                num1[j] = BASE - 1;
                j--;
            }
            num1[j]--;

            num1[i] += BASE;
            res[i] = num1[i] - num2[i];
        }
    }
}

bool isBigger(int* num1, int* num2) {
    int start_index1 = END + 1;
    for (int j = 1; j <= END; j++) {
        if (num1[j] != 0) {
            start_index1 = j;
            break;
        }
    }

    int start_index2 = END + 1;
    for (int j = 1; j <= END; j++) {
        if (num2[j] != 0) {
            start_index2 = j;
            break;
        }
    }

    if (start_index1 < start_index2) {
        return true;
    } else if (start_index1 == start_index2) {
        for (int i = start_index1; i <= END; i++) {
            if (num1[i] > num2[i]) {
                return true;
            } else if (num1[i] < num2[i]) {
                return false;
            }
        }

        return false;
    } else {
        return false;
    }
}

int main() {
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    int n;
    std::cin >> n;

    for (int i = 1; i <= n; i++) {
        std::string s;
        std::cin >> s;

        int start = 0;

        if (s[0] == '-') {
            sign[i] = -1;
            start++;
        } else if (s[0] == '+') {
            sign[i] = 1;
            start++;
        } else {
            sign[i] = 1;
        }

        int prev_start = start;

        while (s[start] != ',' && start < s.size()) {
            start++;
        }

        std::string num = s.substr(prev_start, start - prev_start);

        for (int j = 0; j < num.size(); j++) {
            tab[i][COMMA_POS - 1 - j] = num[num.size() - 1 - j] - '0';
        }

        if (start >= s.size()) {
            continue;
        }

        std::string dec = s.substr(start + 1);

        for (int j = 0; j < dec.size(); j++) {
            tab[i][COMMA_POS - 1 + 1 + j] = dec[j] - '0';
        }
    }

    add(plus, 1, n);
    add(minus, -1, n);

    bool isNegative = isBigger(minus, plus);

    if (isNegative) {
        std::swap(plus, minus);
    }

    substract_2(plus, minus, ans);

    if (isNegative) {
        std::cout << '-';
    }

    int start = END;
    for (int j = 1; j <= END; j++) {
        if (ans[j] != 0) {
            start = j;
            break;
        }
    }

    if (start == END) {
        std::cout << "0\n";
        return 0;
    }

    if (start > COMMA_POS - 1) {
        start = COMMA_POS - 1;
    }

    std::string local_ans;

    for (int i = start; i <= END; i++) {
        if (i == COMMA_POS) {
            local_ans += ',';
        }
        local_ans += std::to_string(ans[i]);
    }

    while (local_ans[local_ans.size() - 1] == '0') {
        local_ans.pop_back();
    }
    if (local_ans[local_ans.size() - 1] == ',') {
        local_ans.pop_back();
    }

    std::cout << local_ans << '\n';

    return 0;
}