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


include <iostream>
#include <string>
#include <vector>

using namespace std;

void printBinaryToDecimal(const std::string& binStr) {
    int decimal = 0;
    for (char c : binStr) {
        if (c == '0' || c == '1') {
            decimal = (decimal << 1) + (c - '0');
        }
    }
    std::cout  << decimal << "\n"<<endl;
}
void printOneSets(int n, const string& vec) {

    size_t required_length = 1ULL << n;
    if (vec.length() != required_length) {
        cout << "Error! Invalid vector!\n";
        return;
    }

    for (size_t i = 0; i < vec.length(); ++i) {
        if (vec[i] != '0' && vec[i] != '1') {
            cout << "Error! Invalid vector!\n";
            return;
        }

        if (vec[i] == '1') {
            string binary_set = "";
            for (int bit = n - 1; bit >= 0; --bit) {
                binary_set += ((i >> bit) & 1) ? '1' : '0';
            }
            cout << binary_set << "\n";
        }
    }
    cout << "\n";
}


void analyzeVariables(int n, const string& vec) {

    size_t required_length = 1ULL << n;
    if (vec.length() != required_length) {
        cout << "Error! Invalid vector!\n";
        return;
    }

    for (char c : vec) {
        if (c != '0' && c != '1') {
            cout << "Error! Invalid vector!\n";
            return;
        }
    }

    vector<int> essential;
    vector<int> dummy;

    for (int i = 1; i <= n; ++i) {
        int bit_pos = n - i;
        bool is_essential = false;

        for (size_t j = 0; j < required_length; ++j) {

            if (((j >> bit_pos) & 1) == 0) {

                size_t paired_j = j | (1ULL << bit_pos);

                if (vec[j] != vec[paired_j]) {
                    is_essential = true;
                    break; 
                }
            }
        }

        if (is_essential) {
            essential.push_back(i);
        }
        else {
            dummy.push_back(i);
        }
    }

    cout << "Essential variables: ";
    if (essential.empty()) {
        cout << "None";
    }
    else {
        for (size_t i = 0; i < essential.size(); ++i) {
            cout << "x" << essential[i] << (i + 1 < essential.size() ? ", " : "");
        }
    }
    cout << "\n";

    cout << "Dummy variables : ";
    if (dummy.empty()) {
        cout << "None";
    }
    else {
        for (size_t i = 0; i < dummy.size(); ++i) {
            cout << "x" << dummy[i] << (i + 1 < dummy.size() ? ", " : "");
        }
    }
    cout << "\n";
}

int main() {
    int n;
    if (!(cin >> n) || n < 1 || n > 5) {
        cout << "Error! Invalid vector!\n";
        return 0;
    }

    string vector_str;
    if (!(cin >> vector_str)) {
        cout << "Error! Invalid vector!\n";
        return 0;
    }

    printBinaryToDecimal(vector_str);

    printOneSets(n, vector_str);

    analyzeVariables(n, vector_str);
    return 0;
}