#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> data;
    data.push_back(5);
    data.push_back(10);
    cout << "current size: " << data.size() << "\n";
    data.pop_back();
    data.push_back(3);
    data.push_back(7);
    cout << "last element: " << data.back() << "\n";
    cout << "2-th element: " << data[2] << "\n";

    data[1] = 4;
    // data[100] = 5; - ERROR
    for (int i = 0; i < data.size(); i++) {
        cout << i << " " << data[i] << "\n";
    }
    for (int i = static_cast<int>(data.size()) - 1;
             i >= 0;
             i--) {
        cout << i << " " << data[i] << "\n";
    }

    vector<int> another_data(10);
    vector<int> some_another_data(10, -1);

    {
        vector<int> a = {1, 5, 1, 3};
        vector<int> b;
        b = a;
        a[2] = 10;
        vector<int>& c = a;
    }

    for (int x : data) {
        // x - это копия элемента из data
        x += 1; // меняет копию
        cout << x << "\n";
    }
    for (int& x : data) {
        // x - ссылка на элемент из data
        x =+ 1; // изменит элемент в data
        cout << x << "\n";
    }
    // двумерный массив
    vector<vector<int>> empty_matrix;
    vector<vector<int>> matrix(10);
    matrix[5].push_back(7);
    vector<vector<int>> good_matrix(5, vector<int>(7, 1));
    cout << good_matrix[3][4] << "\n";

    {
        int n;
        cin >> n;
        vector<int> data;
        // first variant
        for (int i = 0; i < n; ++i) {
            int x;
            cin >> x;
            data.push_back(x);
        }
        // second variant
        vector<int> another_data(n);
        for (int& x : another_data) {
            cin >> x;
        }

    }
    return 0;
}
