e4fcf71e243915a9b0bc7db2d6a3149d826dbc5e1b8cb3653138fadee1498341
// 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;
}