int main(){
    vector<vector<unsigned int> > pre_permutation;
    // first cycle:
    vector<unsigned int> first_cycle;
    first_cycle.push_back(1);
    first_cycle.push_back(5);
    first_cycle.push_back(8);
    first_cycle.push_back(6);
    first_cycle.push_back(4);
    pre_permutation.push_back(first_cycle);
    // second cycle:
    vector<unsigned int> second_cycle;
    second_cycle.push_back(5);
    second_cycle.push_back(12);
    second_cycle.push_back(9);
    second_cycle.push_back(6);
    pre_permutation.push_back(second_cycle);
    // third cycle:
    vector<unsigned int> third_cycle;
    third_cycle.push_back(13);
    third_cycle.push_back(2);
    third_cycle.push_back(12);
    third_cycle.push_back(1);
    third_cycle.push_back(3);
    pre_permutation.push_back(third_cycle);
    Permutation P = Permutation(pre_permutation);
    cout << "before reducing: " << P.get_string() << endl;
    P.reduce();
    cout << "after reducing: " << P.get_string() << endl;
    // Correct output after reducing:
    // (2~12~9~6~4~3~13)(5~8)
    Permutation* PP = P*P;
    cout << PP->get_string() << endl;
    delete PP;
    Permutation* P2 = P.power(2);
    cout << P2->get_string() << endl;
    delete P2;
    system("pause");}