Загрузка данных


    if (reflexive)
        cout << "Рефлексивно\n";
    else if (antiReflexive)
        cout << "Антирефлексивно\n";
    else
        cout << "Нерефлексивно\n";

    if (symmetric)
        cout << "Симметрично\n";
    else if (antiSymmetric)
        cout << "Антисимметрично\n";
    else
        cout << "Несимметрично\n";

    if (transitive)
        cout << "Транзитивно\n";
    else
        cout << "Нетранзитивно\n";
}

vector<vector<int>> transpose(const vector<vector<int>>& R) {
    int n = R.size();
    vector<vector<int>> T(n, vector<int>(n));

    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            T[j][i] = R[i][j];

    return T;
}

vector<vector<int>> compose(const vector<vector<int>>& A,
                            const vector<vector<int>>& B) {
    int n = A.size();
    vector<vector<int>> C(n, vector<int>(n, 0));

    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            for (int k = 0; k < n; k++)
                if (A[i][k] && B[k][j]) {
                    C[i][j] = 1;
                    break;
                }

    return C;
}

int main() {
    int n;
    cin >> n;

    set<int> s;

    while (s.size() < n) {
        int x;
        cin >> x;

        if (s.count(x))
            cout << "Повтор! Введите другое число: ";
        else
            s.insert(x);
    }

    vector<int> A(s.begin(), s.end());

    printSet(A);
    printPairs(A);

    auto R = buildMatrix(A);
    printMatrix(R, A);

    checkProperties(R);

    int type;
    cin >> type;

    auto Rinv = transpose(R);
    vector<vector<int>> result;

    if (type == 1) result = compose(R, Rinv);
    else if (type == 2) result = compose(Rinv, R);
    else if (type == 3) result = compose(R, R);
    else result = compose(Rinv, Rinv);

    cout << "Композиция:\n";
    printMatrix(result, A);

    return 0;
}