#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;


// вместо int'а можно использовать и просто struct (и любой другой тип)
// тогда в компараторах нужно будет писать не int, а этот тип

void Print(const vector<int>& a) {
    for (int x : a) {
        cout << x << " ";
    }
    cout << "\n";
}

bool Greater(int a, int b) {
    return a > b;
}

bool ModuleLess(const int& a, const int& b) {
    return abs(a) < abs(b);
}

int main() {
    int n;
    cin >> n;
    vector<int> a;
    for (int i = 0; i < n; ++i) {
        int x;
        cin >> x;
        a.push_back(x);
    }
    // *a.begin() == a[0];
    // *(a.begin() + 1) == a[1];
    // *(a.end() - 1) == a[a.size() - 1];
    int sum = 0;
    for (auto iter = a.begin();
         iter != a.end();
         ++iter) {
        sum += *iter;
    }
    cout << sum << "\n";


    // std::less<int>() - это такой объект, который можно использовать как "функцию" для сравнения интов
    // например:
    // std::less<int> comparator;
    // comparator(5, 10) - вернет true
    // для работы std::less или std::greater на произвольным типом необходимо, чтобы для этого типа был определен оператор < или оператор > соответственно

    sort(a.begin(),
         a.begin() + a.size() / 2,
         less<int>());
    sort(a.begin() + a.size() / 2,
         a.end(),
         greater<int>());
    Print(a);
    // это самый простой способ вызова сортировки
    sort(a.begin(), a.end());
    Print(a);
    // это два продвинутых вызова сортировки, когда функция сравнения задается явно
    sort(a.begin(), a.end(), Greater);
    Print(a);
    sort(a.begin(), a.end(), ModuleLess);
    Print(a);

    // а это пример сравнения с использованием лямбда-выражения
    // когда-нибудь мы отдельно обсудим что такое лямбды и как с ними работать
    // желающие могут почитать http://en.cppreference.com/w/cpp/language/lambda
    sort(a.begin(), a.end(), [](int x, int y) {
        return x < y;
    });
    Print(a)
}
