// libsemigroups - C++ library for semigroups and monoids
// Copyright (C) 2019 James D. Mitchell
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
// These tests are derived from:
//
// https://github.com/james-d-mitchell/libsemigroups/pull/39
//
// by Alex Levine and Luke Elliott. Many examples here taken from
//
// http://brauer.maths.qmul.ac.uk/Atlas/
#include // for size_t
#include // for uint64_t
#include "catch.hpp" // for LIBSEMIGROUPS_TEST_CASE
#include "libsemigroups-config.hpp" // for LIBSEMIGROUPS_HPCOMBI
#include "report.hpp" // for ReportGuard
#include "schreier-sims.hpp" // for SchreierSims, SchreierSims<>::ele...
#include "test-main.hpp" // for LIBSEMIGROUPS_TEST_CASE
#include "transf.hpp" // for Perm
namespace libsemigroups {
struct LibsemigroupsException;
constexpr bool REPORT = false;
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"001",
"trivial perm. group (degree 1)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
SchreierSims<1> S;
using Perm = decltype(S)::element_type;
S.add_generator(Perm({0}));
REQUIRE(S.size() == 1);
REQUIRE(S.contains(Perm({0})));
// REQUIRE(!S.contains(Perm({1, 0})));
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"002",
"trivial perm. group (degree 2)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
SchreierSims<2> S;
using Perm = SchreierSims<2>::element_type;
S.add_generator(Perm({0, 1}));
REQUIRE(S.size() == 1);
REQUIRE(S.sift(Perm({1, 0})) == Perm({1, 0}));
REQUIRE(!S.contains(Perm({1, 0})));
REQUIRE(S.contains(Perm({0, 1})));
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"003",
"trivial perm. group (degree 500)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
size_t constexpr N = 100;
// We allocate using "new" to avoid allocation on the stack,
// since 100 is too large, and causes this test to seg fault.
auto S = new SchreierSims();
using Perm = std::remove_pointer::type::element_type;
std::array::point_type, N> rry;
std::iota(rry.begin(), rry.end(), 0);
S->add_generator(Perm(rry));
REQUIRE(S->size() == 1);
REQUIRE(S->contains(Perm(rry)));
std::swap(rry[30], rry[31]);
REQUIRE(!S->contains(Perm(rry)));
std::swap(rry[73], rry[32]);
REQUIRE(!S->contains(Perm(rry)));
std::swap(rry[73], rry[32]);
std::swap(rry[30], rry[31]);
std::swap(rry[0], rry[99]);
REQUIRE(!S->contains(Perm(rry)));
delete S;
}
// The next tests fail (04 to 09, inclusive), with default template
// parameters, due to HPCombi 0.0.3 currently composing functions from
// right to left.
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"004",
"symmetric perm. group (degree 5)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
SchreierSims<5> S;
using Perm = decltype(S)::element_type;
S.add_generator(Perm({1, 0, 2, 3, 4}));
S.add_generator(Perm({1, 2, 3, 4, 0}));
REQUIRE(S.size() == 120);
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"005",
"symmetric perm. group (degree 8)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
SchreierSims<8> S;
using Perm = decltype(S)::element_type;
S.add_generator(Perm({0, 6, 2, 3, 4, 5, 1, 7}));
S.add_generator(Perm({1, 2, 3, 4, 5, 6, 7, 0}));
REQUIRE(S.size() == 40320);
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"006",
"symmetric perm. group (degree 9)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
SchreierSims<9> S;
using Perm = decltype(S)::element_type;
S.add_generator(Perm({1, 0, 2, 3, 4, 5, 6, 7, 8}));
S.add_generator(Perm({1, 2, 3, 4, 5, 6, 7, 8, 0}));
REQUIRE(S.size() == 362880);
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"007",
"alternating perm. group (degree 12)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
SchreierSims<12> S;
using Perm = decltype(S)::element_type;
S.add_generator(Perm({1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11}));
S.add_generator(Perm({0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1}));
REQUIRE(!S.contains(Perm({11, 10, 0, 6, 8, 2, 3, 5, 4, 7, 9, 1})));
REQUIRE(S.contains(Perm({7, 11, 2, 3, 0, 6, 9, 10, 8, 5, 4, 1})));
// REQUIRE(!S.contains(Perm({11, 10, 0, 6, 8, 2, 3, 5, 4, 7, 9, 1, 12})));
REQUIRE(S.size() == 239500800);
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"008",
"symmetric perm. group (degree 16)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
SchreierSims<16> S;
using Perm = decltype(S)::element_type;
S.add_generator(
Perm({1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}));
S.add_generator(
Perm({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0}));
REQUIRE(S.size() == static_cast(20922789888000));
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"009",
"alternating perm. group (degree 15)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
SchreierSims<15> S;
using Perm = decltype(S)::element_type;
S.add_generator(Perm({1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}));
S.add_generator(Perm({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0}));
REQUIRE(S.size() == static_cast(653837184000));
REQUIRE(
S.contains(Perm({0, 1, 7, 8, 9, 10, 11, 12, 13, 14, 2, 3, 4, 5, 6})));
REQUIRE(
S.contains(Perm({1, 12, 0, 13, 14, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11})));
REQUIRE(
S.contains(Perm({12, 0, 1, 13, 14, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11})));
REQUIRE(
!S.contains(Perm({12, 0, 1, 13, 14, 2, 3, 5, 4, 6, 7, 8, 9, 10, 11})));
REQUIRE(
!S.contains(Perm({1, 12, 0, 14, 13, 3, 2, 5, 4, 6, 7, 8, 9, 10, 11})));
REQUIRE(
!S.contains(Perm({0, 1, 7, 9, 8, 11, 10, 12, 13, 14, 2, 3, 6, 5, 4})));
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"010",
"alternating perm. group (degree 16)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
SchreierSims<16> S;
using Perm = decltype(S)::element_type;
S.add_generator(
Perm({1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}));
S.add_generator(
Perm({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 15}));
S.add_generator(
Perm({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 13}));
REQUIRE(S.size() == static_cast(10461394944000));
REQUIRE(S.contains(
Perm({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 13})));
REQUIRE(!S.contains(
Perm({1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 13})));
REQUIRE(S.contains(
Perm({1, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 13})));
REQUIRE(S.contains(
Perm({1, 2, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15})));
REQUIRE(S.contains(S.generator(0)));
REQUIRE(S.contains(S.generator(1)));
REQUIRE(S.contains(S.generator(2)));
REQUIRE(S.contains(
Perm({0, 1, 7, 8, 9, 10, 11, 12, 13, 14, 2, 3, 4, 5, 6, 15})));
REQUIRE(S.contains(
Perm({1, 12, 0, 13, 14, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15})));
REQUIRE(S.contains(
Perm({12, 0, 1, 13, 14, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15})));
REQUIRE(!S.contains(
Perm({12, 0, 1, 13, 14, 2, 3, 5, 4, 6, 7, 8, 9, 10, 11, 15})));
REQUIRE(!S.contains(
Perm({1, 12, 0, 14, 13, 3, 2, 5, 4, 6, 7, 8, 9, 10, 11, 15})));
REQUIRE(!S.contains(
Perm({0, 1, 7, 9, 8, 11, 10, 12, 13, 14, 2, 3, 6, 5, 4, 15})));
REQUIRE(!S.contains(
Perm({1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 13})));
S.add_generator(
Perm({1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 13}));
REQUIRE(S.contains(
Perm({1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 13})));
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"011",
"dihedral perm. group (order 10)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
SchreierSims<5> S;
using Perm = decltype(S)::element_type;
S.add_generator(Perm({0, 4, 3, 2, 1}));
S.add_generator(Perm({1, 2, 3, 4, 0}));
REQUIRE(S.size() == 10);
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"012",
"dihedral perm. group (order 200)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
// At N = 4000 or so, this starts to take an appreciable amount of time.
constexpr size_t N = 200;
auto S = new SchreierSims();
using Perm = std::remove_pointer::type::element_type;
Perm::container_type cntnr;
std::fill(cntnr.begin(), cntnr.end(), 0);
std::iota(cntnr.begin(), cntnr.end() - 1, 1);
S->add_generator(Perm(cntnr));
std::iota(cntnr.rbegin(), cntnr.rend() - 1, 1);
cntnr[0] = 0;
S->add_generator(Perm(cntnr));
REQUIRE(S->size() == 2 * N);
REQUIRE(S->contains(S->generator(0)));
REQUIRE(S->contains(S->generator(1)));
REQUIRE(S->contains(S->generator(1) * S->generator(0)));
std::iota(cntnr.begin(), cntnr.end(), 0);
for (auto it = cntnr.begin(); it < cntnr.end(); it += 2) {
std::swap(*it, *(it + 1));
}
REQUIRE(!S->contains(Perm(cntnr)));
std::swap(*cntnr.begin(), *(cntnr.begin() + 1));
REQUIRE(!S->contains(Perm(cntnr)));
delete S;
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"013",
"perm. group T (order 12)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
SchreierSims<12> S;
using Perm = decltype(S)::element_type;
S.add_generator(Perm({1, 2, 3, 4, 5, 0, 7, 8, 9, 10, 11, 6}));
S.add_generator(Perm({6, 11, 10, 9, 8, 7, 3, 2, 1, 0, 5, 4}));
REQUIRE(S.size() == 12);
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"014",
"quaternion perm. group (order 8)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
SchreierSims<9> S;
using Perm = decltype(S)::element_type;
S.add_generator(Perm({0, 2, 4, 6, 7, 3, 8, 1, 5}));
S.add_generator(Perm({0, 3, 5, 4, 8, 7, 2, 6, 1}));
REQUIRE(S.generator(0) == Perm({0, 2, 4, 6, 7, 3, 8, 1, 5}));
REQUIRE(S.size() == 8);
REQUIRE(S.sift(S.generator(0)) == S.identity());
REQUIRE(S.contains(S.generator(0)));
REQUIRE(S.contains(S.generator(1)));
REQUIRE(S.contains(Perm({0, 6, 3, 7, 5, 1, 4, 8, 2})));
REQUIRE(S.contains(Perm({0, 8, 6, 1, 3, 2, 7, 5, 4})));
REQUIRE(!S.contains(Perm({0, 1, 5, 4, 8, 7, 2, 6, 3})));
REQUIRE(!S.contains(Perm({3, 5, 4, 6, 1, 8, 2, 7, 0})));
REQUIRE(!S.contains(Perm({1, 3, 2, 5, 7, 8, 6, 4, 0})));
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"015",
"perm. group (order 84129611558952960)",
"[quick][schreier-sims][no-valgrind]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 729;
auto S = new SchreierSims();
using Perm = std::remove_pointer::type::element_type;
S->add_generator(Perm(
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
238, 239, 240, 241, 242, 486, 487, 488, 489, 490, 491, 492, 493, 494,
495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508,
509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522,
523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536,
537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550,
551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564,
565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578,
579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592,
593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606,
607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620,
621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634,
635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648,
649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662,
663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676,
677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690,
691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704,
705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718,
719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 243, 244, 245, 246,
247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260,
261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302,
303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330,
331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386,
387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400,
401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414,
415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428,
429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442,
443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456,
457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470,
471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484,
485}));
S->add_generator(Perm(
{0, 6, 3, 18, 24, 21, 9, 15, 12, 54, 60, 57, 72, 78,
75, 63, 69, 66, 27, 33, 30, 45, 51, 48, 36, 42, 39, 162,
168, 165, 180, 186, 183, 171, 177, 174, 216, 222, 219, 234, 240, 237,
225, 231, 228, 189, 195, 192, 207, 213, 210, 198, 204, 201, 81, 87,
84, 99, 105, 102, 90, 96, 93, 135, 141, 138, 153, 159, 156, 144,
150, 147, 108, 114, 111, 126, 132, 129, 117, 123, 120, 486, 492, 489,
504, 510, 507, 495, 501, 498, 540, 546, 543, 558, 564, 561, 549, 555,
552, 513, 519, 516, 531, 537, 534, 522, 528, 525, 648, 654, 651, 666,
672, 669, 657, 663, 660, 702, 708, 705, 720, 726, 723, 711, 717, 714,
675, 681, 678, 693, 699, 696, 684, 690, 687, 567, 573, 570, 585, 591,
588, 576, 582, 579, 621, 627, 624, 639, 645, 642, 630, 636, 633, 594,
600, 597, 612, 618, 615, 603, 609, 606, 243, 249, 246, 261, 267, 264,
252, 258, 255, 297, 303, 300, 315, 321, 318, 306, 312, 309, 270, 276,
273, 288, 294, 291, 279, 285, 282, 405, 411, 408, 423, 429, 426, 414,
420, 417, 459, 465, 462, 477, 483, 480, 468, 474, 471, 432, 438, 435,
450, 456, 453, 441, 447, 444, 324, 330, 327, 342, 348, 345, 333, 339,
336, 378, 384, 381, 396, 402, 399, 387, 393, 390, 351, 357, 354, 369,
375, 372, 360, 366, 363, 487, 493, 490, 505, 511, 508, 496, 502, 499,
541, 547, 544, 559, 565, 562, 550, 556, 553, 514, 520, 517, 532, 538,
535, 523, 529, 526, 649, 655, 652, 667, 673, 670, 658, 664, 661, 703,
709, 706, 721, 727, 724, 712, 718, 715, 676, 682, 679, 694, 700, 697,
685, 691, 688, 568, 574, 571, 586, 592, 589, 577, 583, 580, 622, 628,
625, 640, 646, 643, 631, 637, 634, 595, 601, 598, 613, 619, 616, 604,
610, 607, 244, 250, 247, 262, 268, 265, 253, 259, 256, 298, 304, 301,
316, 322, 319, 307, 313, 310, 271, 277, 274, 289, 295, 292, 280, 286,
283, 406, 412, 409, 424, 430, 427, 415, 421, 418, 460, 466, 463, 478,
484, 481, 469, 475, 472, 433, 439, 436, 451, 457, 454, 442, 448, 445,
325, 331, 328, 343, 349, 346, 334, 340, 337, 379, 385, 382, 397, 403,
400, 388, 394, 391, 352, 358, 355, 370, 376, 373, 361, 367, 364, 1,
7, 4, 19, 25, 22, 10, 16, 13, 55, 61, 58, 73, 79, 76,
64, 70, 67, 28, 34, 31, 46, 52, 49, 37, 43, 40, 163, 169,
166, 181, 187, 184, 172, 178, 175, 217, 223, 220, 235, 241, 238, 226,
232, 229, 190, 196, 193, 208, 214, 211, 199, 205, 202, 82, 88, 85,
100, 106, 103, 91, 97, 94, 136, 142, 139, 154, 160, 157, 145, 151,
148, 109, 115, 112, 127, 133, 130, 118, 124, 121, 245, 251, 248, 263,
269, 266, 254, 260, 257, 299, 305, 302, 317, 323, 320, 308, 314, 311,
272, 278, 275, 290, 296, 293, 281, 287, 284, 407, 413, 410, 425, 431,
428, 416, 422, 419, 461, 467, 464, 479, 485, 482, 470, 476, 473, 434,
440, 437, 452, 458, 455, 443, 449, 446, 326, 332, 329, 344, 350, 347,
335, 341, 338, 380, 386, 383, 398, 404, 401, 389, 395, 392, 353, 359,
356, 371, 377, 374, 362, 368, 365, 2, 8, 5, 20, 26, 23, 11,
17, 14, 56, 62, 59, 74, 80, 77, 65, 71, 68, 29, 35, 32,
47, 53, 50, 38, 44, 41, 164, 170, 167, 182, 188, 185, 173, 179,
176, 218, 224, 221, 236, 242, 239, 227, 233, 230, 191, 197, 194, 209,
215, 212, 200, 206, 203, 83, 89, 86, 101, 107, 104, 92, 98, 95,
137, 143, 140, 155, 161, 158, 146, 152, 149, 110, 116, 113, 128, 134,
131, 119, 125, 122, 488, 494, 491, 506, 512, 509, 497, 503, 500, 542,
548, 545, 560, 566, 563, 551, 557, 554, 515, 521, 518, 533, 539, 536,
524, 530, 527, 650, 656, 653, 668, 674, 671, 659, 665, 662, 704, 710,
707, 722, 728, 725, 713, 719, 716, 677, 683, 680, 695, 701, 698, 686,
692, 689, 569, 575, 572, 587, 593, 590, 578, 584, 581, 623, 629, 626,
641, 647, 644, 632, 638, 635, 596, 602, 599, 614, 620, 617, 605, 611,
608}));
REQUIRE(S->size() == static_cast(84129611558952960));
delete S;
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"016",
"perm. group SL(3, 5) (order 372000)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 126;
auto S = new SchreierSims();
using Perm = std::remove_pointer::type::element_type;
S->add_generator(
Perm({0, 1, 76, 101, 26, 51, 6, 81, 106, 31, 56, 11, 86, 111, 36,
61, 16, 91, 116, 41, 66, 21, 96, 121, 46, 71, 2, 77, 102, 27,
52, 7, 82, 107, 32, 57, 12, 87, 112, 37, 62, 17, 92, 117, 42,
67, 22, 97, 122, 47, 72, 3, 78, 103, 28, 53, 8, 83, 108, 33,
58, 13, 88, 113, 38, 63, 18, 93, 118, 43, 68, 23, 98, 123, 48,
73, 4, 79, 104, 29, 54, 9, 84, 109, 34, 59, 14, 89, 114, 39,
64, 19, 94, 119, 44, 69, 24, 99, 124, 49, 74, 5, 80, 105, 30,
55, 10, 85, 110, 35, 60, 15, 90, 115, 40, 65, 20, 95, 120, 45,
70, 25, 100, 125, 50, 75}));
S->add_generator(
Perm({0, 1, 77, 103, 29, 55, 6, 82, 108, 34, 60, 11, 87, 113, 39,
65, 16, 92, 118, 44, 70, 21, 97, 123, 49, 75, 2, 78, 105, 26,
54, 7, 83, 110, 31, 59, 12, 88, 115, 36, 64, 17, 93, 120, 41,
69, 22, 98, 125, 46, 74, 3, 80, 104, 27, 51, 8, 85, 109, 32,
56, 13, 90, 114, 37, 61, 18, 95, 119, 42, 66, 23, 100, 124, 47,
71, 4, 76, 102, 30, 53, 9, 81, 107, 35, 58, 14, 86, 112, 40,
63, 19, 91, 117, 45, 68, 24, 96, 122, 50, 73, 5, 79, 101, 28,
52, 10, 84, 106, 33, 57, 15, 89, 111, 38, 62, 20, 94, 116, 43,
67, 25, 99, 121, 48, 72}));
S->add_generator(
Perm({0, 1, 81, 111, 41, 71, 6, 86, 121, 26, 66, 11, 96, 116, 31,
51, 16, 76, 106, 46, 61, 21, 91, 101, 36, 56, 2, 82, 112, 42,
72, 7, 87, 122, 27, 67, 12, 97, 117, 32, 52, 17, 77, 107, 47,
62, 22, 92, 102, 37, 57, 3, 83, 113, 43, 73, 8, 88, 123, 28,
68, 13, 98, 118, 33, 53, 18, 78, 108, 48, 63, 23, 93, 103, 38,
58, 4, 84, 114, 44, 74, 9, 89, 124, 29, 69, 14, 99, 119, 34,
54, 19, 79, 109, 49, 64, 24, 94, 104, 39, 59, 5, 85, 115, 45,
75, 10, 90, 125, 30, 70, 15, 100, 120, 35, 55, 20, 80, 110, 50,
65, 25, 95, 105, 40, 60}));
S->add_generator(
Perm({0, 1, 76, 101, 26, 51, 7, 82, 107, 32, 57, 13, 88, 113, 38,
63, 19, 94, 119, 44, 69, 25, 100, 125, 50, 75, 2, 77, 102, 27,
52, 8, 83, 108, 33, 58, 15, 90, 115, 40, 65, 16, 91, 116, 41,
66, 24, 99, 124, 49, 74, 3, 78, 103, 28, 53, 10, 85, 110, 35,
60, 14, 89, 114, 39, 64, 17, 92, 117, 42, 67, 21, 96, 121, 46,
71, 4, 79, 104, 29, 54, 6, 81, 106, 31, 56, 12, 87, 112, 37,
62, 20, 95, 120, 45, 70, 23, 98, 123, 48, 73, 5, 80, 105, 30,
55, 9, 84, 109, 34, 59, 11, 86, 111, 36, 61, 18, 93, 118, 43,
68, 22, 97, 122, 47, 72}));
REQUIRE(S->size() == 372000);
REQUIRE(S->contains(S->generator(0)));
REQUIRE(S->contains(S->generator(1)));
REQUIRE(S->contains(S->generator(2)));
REQUIRE(S->contains(S->generator(3)));
REQUIRE(!S->contains(
Perm({0, 1, 76, 101, 26, 51, 7, 82, 107, 32, 57, 13, 88, 113, 38,
63, 19, 94, 119, 44, 69, 25, 100, 125, 50, 75, 2, 77, 102, 27,
52, 8, 83, 108, 33, 58, 15, 90, 115, 40, 65, 16, 91, 116, 41,
66, 24, 99, 124, 49, 74, 3, 78, 103, 28, 53, 10, 85, 110, 35,
60, 14, 89, 114, 39, 64, 17, 92, 117, 42, 67, 21, 96, 121, 46,
71, 4, 79, 104, 29, 54, 6, 81, 106, 31, 56, 12, 87, 112, 37,
62, 20, 120, 95, 45, 70, 23, 98, 123, 48, 73, 5, 80, 105, 30,
55, 9, 84, 109, 34, 59, 11, 86, 111, 36, 61, 18, 93, 118, 43,
68, 22, 97, 122, 47, 72})));
REQUIRE(!S->contains(
Perm({1, 77, 103, 109, 55, 6, 82, 108, 34, 60, 11, 87, 113, 39, 65,
16, 92, 118, 44, 70, 21, 97, 123, 49, 75, 2, 78, 105, 26, 54,
7, 83, 110, 31, 59, 12, 88, 115, 36, 64, 17, 93, 120, 41, 69,
22, 98, 125, 46, 74, 3, 80, 104, 27, 51, 8, 85, 29, 32, 56,
13, 90, 114, 37, 61, 18, 95, 119, 42, 66, 23, 100, 124, 47, 71,
4, 76, 0, 102, 30, 53, 9, 81, 107, 35, 58, 14, 86, 112, 40,
63, 19, 91, 117, 45, 68, 24, 96, 122, 50, 73, 5, 79, 101, 28,
52, 10, 84, 106, 33, 57, 15, 89, 111, 38, 62, 20, 94, 116, 43,
67, 25, 99, 121, 48, 72})));
REQUIRE(!S->contains(Perm(
{0, 1, 80, 77, 103, 109, 55, 6, 82, 108, 34, 60, 11, 87, 113,
39, 65, 16, 92, 118, 44, 70, 21, 97, 123, 49, 75, 2, 78, 105,
26, 54, 7, 83, 110, 31, 59, 12, 88, 115, 36, 64, 17, 93, 120,
41, 69, 22, 98, 125, 46, 74, 3, 104, 27, 51, 8, 85, 29, 32,
56, 13, 90, 114, 37, 61, 18, 95, 119, 42, 66, 23, 100, 124, 47,
71, 4, 76, 102, 30, 53, 9, 81, 107, 35, 58, 14, 86, 112, 40,
63, 19, 91, 117, 45, 68, 24, 96, 122, 50, 73, 5, 79, 101, 28,
52, 10, 84, 106, 33, 57, 15, 89, 111, 38, 62, 20, 94, 116, 43,
67, 25, 99, 121, 48, 72})));
REQUIRE(S->contains(
Perm({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
41, 42, 43, 44, 45, 26, 27, 28, 29, 30, 31, 32, 33,
34, 35, 46, 47, 48, 49, 50, 36, 37, 38, 39, 40, 71,
72, 73, 74, 75, 66, 67, 68, 69, 70, 51, 52, 53, 54,
55, 61, 62, 63, 64, 65, 56, 57, 58, 59, 60, 81, 82,
83, 84, 85, 86, 87, 88, 89, 90, 96, 97, 98, 99, 100,
76, 77, 78, 79, 80, 91, 92, 93, 94, 95, 111, 112, 113,
114, 115, 121, 122, 123, 124, 125, 116, 117, 118, 119, 120, 106,
107, 108, 109, 110, 101, 102, 103, 104, 105})));
delete S;
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"017",
"perm. group PSL(4, 8) (order 34558531338240)",
"[quick][schreier-sims][no-valgrind]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 585;
auto S = new SchreierSims();
using Perm = std::remove_pointer::type::element_type;
S->add_generator(Perm(
{1, 9, 17, 25, 33, 41, 49, 57, 65, 73, 81, 89, 97, 105,
113, 121, 129, 137, 145, 153, 161, 169, 177, 185, 193, 201, 209, 217,
225, 233, 241, 249, 257, 265, 273, 281, 289, 297, 305, 313, 321, 329,
337, 345, 353, 361, 369, 377, 385, 393, 401, 409, 417, 425, 433, 441,
449, 457, 465, 473, 481, 489, 497, 505, 513, 521, 529, 537, 545, 553,
561, 569, 577, 74, 82, 90, 98, 106, 114, 122, 130, 138, 146, 154,
162, 170, 178, 186, 194, 202, 210, 218, 226, 234, 242, 250, 258, 266,
274, 282, 290, 298, 306, 314, 322, 330, 338, 346, 354, 362, 370, 378,
386, 394, 402, 410, 418, 426, 434, 442, 450, 458, 466, 474, 482, 490,
498, 506, 514, 522, 530, 538, 546, 554, 562, 570, 578, 0, 2, 8,
7, 6, 5, 4, 3, 10, 18, 26, 34, 42, 50, 58, 66, 16,
72, 24, 32, 40, 48, 56, 64, 15, 63, 71, 23, 31, 39, 47,
55, 14, 54, 62, 70, 22, 30, 38, 46, 13, 45, 53, 61, 69,
21, 29, 37, 12, 36, 44, 52, 60, 68, 20, 28, 11, 27, 35,
43, 51, 59, 67, 19, 78, 118, 126, 134, 86, 94, 102, 110, 398,
438, 446, 454, 406, 414, 422, 430, 462, 502, 510, 518, 470, 478, 486,
494, 526, 566, 574, 582, 534, 542, 550, 558, 142, 182, 190, 198, 150,
158, 166, 174, 206, 246, 254, 262, 214, 222, 230, 238, 270, 310, 318,
326, 278, 286, 294, 302, 334, 374, 382, 390, 342, 350, 358, 366, 75,
91, 99, 107, 115, 123, 131, 83, 203, 219, 227, 235, 243, 251, 259,
211, 267, 283, 291, 299, 307, 315, 323, 275, 331, 347, 355, 363, 371,
379, 387, 339, 395, 411, 419, 427, 435, 443, 451, 403, 459, 475, 483,
491, 499, 507, 515, 467, 523, 539, 547, 555, 563, 571, 579, 531, 139,
155, 163, 171, 179, 187, 195, 147, 80, 136, 88, 96, 104, 112, 120,
128, 528, 584, 536, 544, 552, 560, 568, 576, 144, 200, 152, 160, 168,
176, 184, 192, 208, 264, 216, 224, 232, 240, 248, 256, 272, 328, 280,
288, 296, 304, 312, 320, 336, 392, 344, 352, 360, 368, 376, 384, 400,
456, 408, 416, 424, 432, 440, 448, 464, 520, 472, 480, 488, 496, 504,
512, 76, 100, 108, 116, 124, 132, 84, 92, 268, 292, 300, 308, 316,
324, 276, 284, 332, 356, 364, 372, 380, 388, 340, 348, 396, 420, 428,
436, 444, 452, 404, 412, 460, 484, 492, 500, 508, 516, 468, 476, 524,
548, 556, 564, 572, 580, 532, 540, 140, 164, 172, 180, 188, 196, 148,
156, 204, 228, 236, 244, 252, 260, 212, 220, 77, 109, 117, 125, 133,
85, 93, 101, 333, 365, 373, 381, 389, 341, 349, 357, 397, 429, 437,
445, 453, 405, 413, 421, 461, 493, 501, 509, 517, 469, 477, 485, 525,
557, 565, 573, 581, 533, 541, 549, 141, 173, 181, 189, 197, 149, 157,
165, 205, 237, 245, 253, 261, 213, 221, 229, 269, 301, 309, 317, 325,
277, 285, 293, 79, 127, 135, 87, 95, 103, 111, 119, 463, 511, 519,
471, 479, 487, 495, 503, 527, 575, 583, 535, 543, 551, 559, 567, 143,
191, 199, 151, 159, 167, 175, 183, 207, 255, 263, 215, 223, 231, 239,
247, 271, 319, 327, 279, 287, 295, 303, 311, 335, 383, 391, 343, 351,
359, 367, 375, 399, 447, 455, 407, 415, 423, 431, 439}));
S->add_generator(Perm(
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14,
15, 16, 10, 25, 27, 28, 29, 30, 31, 32, 26, 33, 35, 36,
37, 38, 39, 40, 34, 41, 43, 44, 45, 46, 47, 48, 42, 49,
51, 52, 53, 54, 55, 56, 50, 57, 59, 60, 61, 62, 63, 64,
58, 65, 67, 68, 69, 70, 71, 72, 66, 17, 19, 20, 21, 22,
23, 24, 18, 73, 80, 74, 75, 76, 77, 78, 79, 129, 136, 130,
131, 132, 133, 134, 135, 81, 88, 82, 83, 84, 85, 86, 87, 89,
96, 90, 91, 92, 93, 94, 95, 97, 104, 98, 99, 100, 101, 102,
103, 105, 112, 106, 107, 108, 109, 110, 111, 113, 120, 114, 115, 116,
117, 118, 119, 121, 128, 122, 123, 124, 125, 126, 127, 457, 464, 458,
459, 460, 461, 462, 463, 513, 520, 514, 515, 516, 517, 518, 519, 465,
472, 466, 467, 468, 469, 470, 471, 473, 480, 474, 475, 476, 477, 478,
479, 481, 488, 482, 483, 484, 485, 486, 487, 489, 496, 490, 491, 492,
493, 494, 495, 497, 504, 498, 499, 500, 501, 502, 503, 505, 512, 506,
507, 508, 509, 510, 511, 521, 528, 522, 523, 524, 525, 526, 527, 577,
584, 578, 579, 580, 581, 582, 583, 529, 536, 530, 531, 532, 533, 534,
535, 537, 544, 538, 539, 540, 541, 542, 543, 545, 552, 546, 547, 548,
549, 550, 551, 553, 560, 554, 555, 556, 557, 558, 559, 561, 568, 562,
563, 564, 565, 566, 567, 569, 576, 570, 571, 572, 573, 574, 575, 137,
144, 138, 139, 140, 141, 142, 143, 193, 200, 194, 195, 196, 197, 198,
199, 145, 152, 146, 147, 148, 149, 150, 151, 153, 160, 154, 155, 156,
157, 158, 159, 161, 168, 162, 163, 164, 165, 166, 167, 169, 176, 170,
171, 172, 173, 174, 175, 177, 184, 178, 179, 180, 181, 182, 183, 185,
192, 186, 187, 188, 189, 190, 191, 201, 208, 202, 203, 204, 205, 206,
207, 257, 264, 258, 259, 260, 261, 262, 263, 209, 216, 210, 211, 212,
213, 214, 215, 217, 224, 218, 219, 220, 221, 222, 223, 225, 232, 226,
227, 228, 229, 230, 231, 233, 240, 234, 235, 236, 237, 238, 239, 241,
248, 242, 243, 244, 245, 246, 247, 249, 256, 250, 251, 252, 253, 254,
255, 265, 272, 266, 267, 268, 269, 270, 271, 321, 328, 322, 323, 324,
325, 326, 327, 273, 280, 274, 275, 276, 277, 278, 279, 281, 288, 282,
283, 284, 285, 286, 287, 289, 296, 290, 291, 292, 293, 294, 295, 297,
304, 298, 299, 300, 301, 302, 303, 305, 312, 306, 307, 308, 309, 310,
311, 313, 320, 314, 315, 316, 317, 318, 319, 329, 336, 330, 331, 332,
333, 334, 335, 385, 392, 386, 387, 388, 389, 390, 391, 337, 344, 338,
339, 340, 341, 342, 343, 345, 352, 346, 347, 348, 349, 350, 351, 353,
360, 354, 355, 356, 357, 358, 359, 361, 368, 362, 363, 364, 365, 366,
367, 369, 376, 370, 371, 372, 373, 374, 375, 377, 384, 378, 379, 380,
381, 382, 383, 393, 400, 394, 395, 396, 397, 398, 399, 449, 456, 450,
451, 452, 453, 454, 455, 401, 408, 402, 403, 404, 405, 406, 407, 409,
416, 410, 411, 412, 413, 414, 415, 417, 424, 418, 419, 420, 421, 422,
423, 425, 432, 426, 427, 428, 429, 430, 431, 433, 440, 434, 435, 436,
437, 438, 439, 441, 448, 442, 443, 444, 445, 446, 447}));
REQUIRE(S->size() == static_cast(34558531338240));
delete S;
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"018",
"perm. Mathieu group M11 (order 7920)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 11;
using Perm = Perm>;
auto S = SchreierSims();
S.add_generator(Perm({0, 9, 2, 10, 6, 5, 4, 8, 7, 1, 3}));
S.add_generator(Perm({3, 4, 7, 2, 5, 8, 6, 0, 1, 9, 10}));
REQUIRE(S.size() == 7920);
REQUIRE(S.contains(S.generator(0)));
REQUIRE(S.contains(S.generator(1)));
REQUIRE(S.contains(Perm({10, 8, 5, 0, 1, 2, 4, 9, 7, 6, 3})));
REQUIRE(S.contains(Perm({3, 6, 0, 9, 4, 10, 7, 5, 2, 8, 1})));
REQUIRE(!S.contains(Perm({4, 5, 6, 7, 8, 9, 10, 0, 1, 2, 3})));
REQUIRE(!S.contains(Perm({6, 7, 8, 9, 10, 0, 2, 1, 3, 5, 4})));
REQUIRE(!S.contains(Perm({9, 10, 1, 2, 3, 4, 0, 5, 6, 7, 8})));
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"019",
"perm. Mathieu group M24 (order 244823040)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 24;
auto S = SchreierSims();
using Perm = decltype(S)::element_type;
S.add_generator(Perm({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, 23}));
S.add_generator(Perm({0, 1, 16, 12, 3, 5, 8, 17, 2, 6, 11, 22,
13, 18, 19, 14, 9, 10, 4, 21, 15, 20, 7, 23}));
S.add_generator(Perm({23, 22, 11, 15, 17, 9, 19, 13, 20, 5, 16, 2,
21, 7, 18, 3, 10, 4, 14, 6, 8, 12, 1, 0}));
REQUIRE(S.size() == 244823040);
REQUIRE(S.contains(S.generator(0)));
REQUIRE(S.contains(S.generator(1)));
REQUIRE(S.contains(Perm({1, 16, 12, 3, 5, 8, 17, 2, 6, 11, 22, 13,
18, 19, 14, 9, 10, 4, 21, 15, 20, 7, 0, 23})));
REQUIRE(S.contains(Perm({12, 16, 18, 10, 20, 14, 21, 6, 17, 3, 22, 8,
19, 4, 11, 5, 15, 7, 9, 13, 2, 23, 0, 1})));
REQUIRE(S.contains(Perm({19, 9, 21, 13, 10, 22, 6, 16, 7, 8, 11, 17,
12, 5, 15, 1, 14, 0, 4, 18, 20, 3, 23, 2})));
REQUIRE(
!S.contains(Perm({0, 3, 2, 1, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23})));
REQUIRE(
!S.contains(Perm({0, 1, 3, 4, 2, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23})));
REQUIRE(
!S.contains(Perm({0, 1, 3, 4, 2, 6, 5, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23})));
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"020",
"perm. Janko Group J1 (order 175560)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 267;
auto S = new SchreierSims();
using Perm = std::remove_pointer::type::element_type;
S->add_generator(Perm(
{0, 262, 107, 21, 213, 191, 22, 133, 234, 232, 151, 139, 176, 202,
253, 222, 16, 195, 206, 68, 55, 3, 6, 179, 217, 216, 256, 87,
70, 131, 44, 105, 170, 77, 104, 198, 137, 243, 56, 124, 223, 134,
42, 174, 30, 45, 51, 128, 94, 250, 264, 46, 183, 231, 115, 20,
38, 85, 233, 261, 95, 235, 177, 249, 91, 247, 155, 67, 19, 219,
28, 237, 211, 84, 192, 130, 251, 33, 78, 260, 112, 193, 156, 242,
73, 57, 238, 27, 143, 168, 148, 64, 119, 212, 48, 60, 150, 199,
140, 189, 180, 147, 111, 159, 34, 31, 162, 2, 194, 166, 200, 102,
80, 120, 141, 54, 182, 181, 225, 92, 113, 254, 125, 146, 39, 122,
208, 221, 47, 210, 75, 29, 255, 7, 41, 135, 175, 36, 207, 11,
98, 114, 240, 88, 172, 185, 123, 101, 90, 224, 96, 10, 169, 241,
190, 66, 82, 214, 161, 103, 236, 158, 106, 239, 229, 230, 109, 188,
89, 152, 32, 258, 144, 186, 43, 136, 12, 62, 245, 23, 100, 117,
116, 52, 205, 145, 173, 228, 167, 99, 154, 5, 74, 81, 108, 17,
196, 203, 35, 97, 110, 252, 13, 197, 204, 184, 18, 138, 126, 248,
129, 72, 93, 4, 157, 259, 25, 24, 246, 69, 227, 127, 15, 40,
149, 118, 226, 220, 187, 164, 165, 53, 9, 58, 8, 61, 160, 71,
86, 163, 142, 153, 83, 37, 244, 178, 218, 65, 209, 63, 49, 76,
201, 14, 121, 132, 26, 263, 171, 215, 79, 59, 1, 257, 50, 266,
265}));
S->add_generator(Perm(
{0, 146, 132, 3, 156, 242, 107, 125, 245, 174, 241, 264, 248, 36,
116, 47, 178, 170, 197, 233, 121, 1, 228, 48, 201, 15, 136, 212,
6, 175, 77, 237, 30, 226, 31, 129, 44, 161, 232, 219, 78, 139,
9, 211, 13, 222, 97, 25, 173, 70, 153, 186, 29, 203, 35, 169,
140, 260, 91, 199, 108, 208, 206, 11, 55, 103, 65, 95, 73, 151,
131, 41, 221, 225, 18, 143, 7, 32, 159, 217, 93, 181, 2, 258,
163, 154, 182, 38, 133, 117, 33, 243, 191, 122, 27, 205, 20, 135,
98, 229, 138, 61, 194, 66, 104, 149, 62, 28, 164, 123, 17, 137,
16, 69, 37, 238, 128, 247, 57, 167, 134, 96, 80, 193, 185, 76,
83, 218, 14, 54, 8, 49, 82, 215, 189, 46, 190, 183, 188, 71,
230, 231, 239, 202, 224, 158, 21, 119, 214, 184, 250, 113, 72, 200,
213, 22, 166, 102, 220, 40, 92, 114, 257, 177, 60, 179, 4, 147,
168, 64, 110, 171, 148, 23, 42, 52, 195, 84, 112, 246, 19, 252,
196, 111, 105, 265, 209, 24, 100, 120, 26, 160, 39, 109, 157, 266,
86, 74, 204, 227, 50, 187, 75, 216, 207, 67, 106, 198, 101, 51,
141, 251, 94, 85, 172, 88, 53, 254, 261, 192, 145, 152, 240, 262,
249, 68, 90, 59, 155, 263, 56, 210, 87, 180, 12, 115, 142, 34,
235, 236, 45, 244, 253, 58, 10, 130, 165, 89, 234, 144, 259, 43,
81, 5, 79, 223, 162, 256, 126, 150, 118, 127, 255, 99, 63, 124,
176}));
REQUIRE(S->size() == 175560);
REQUIRE(S->contains(S->generator(0)));
REQUIRE(S->contains(S->generator(1)));
REQUIRE(S->contains(Perm(
{0, 174, 56, 262, 210, 214, 81, 21, 160, 230, 148, 170, 67, 91,
126, 238, 25, 85, 260, 32, 16, 29, 181, 66, 248, 143, 167, 39,
241, 115, 98, 139, 226, 20, 12, 73, 152, 10, 141, 165, 121, 117,
169, 84, 11, 211, 112, 116, 234, 38, 131, 48, 219, 222, 68, 217,
9, 265, 188, 176, 74, 173, 69, 255, 163, 40, 77, 45, 264, 147,
225, 63, 33, 58, 212, 17, 51, 261, 3, 119, 59, 65, 6, 41,
103, 80, 231, 43, 184, 201, 151, 189, 47, 49, 42, 245, 124, 92,
206, 71, 123, 61, 259, 239, 105, 178, 113, 183, 96, 104, 111, 195,
199, 194, 192, 216, 83, 97, 64, 180, 94, 130, 8, 156, 134, 144,
246, 89, 110, 221, 82, 243, 190, 76, 154, 28, 120, 249, 114, 87,
23, 102, 150, 218, 34, 202, 57, 235, 127, 26, 253, 257, 258, 108,
205, 37, 132, 177, 208, 18, 191, 233, 54, 35, 182, 251, 55, 27,
247, 254, 19, 266, 44, 99, 5, 122, 186, 88, 60, 136, 24, 30,
242, 166, 50, 263, 75, 256, 118, 52, 187, 158, 53, 1, 237, 209,
240, 14, 4, 204, 140, 155, 90, 145, 146, 153, 86, 198, 175, 252,
236, 125, 109, 193, 223, 250, 227, 215, 72, 129, 93, 13, 15, 213,
7, 168, 172, 224, 128, 203, 244, 22, 200, 133, 161, 142, 171, 135,
138, 31, 2, 106, 197, 157, 196, 185, 164, 159, 137, 79, 107, 149,
228, 62, 179, 101, 100, 229, 162, 220, 70, 232, 95, 78, 36, 46,
207})));
REQUIRE(S->contains(Perm(
{0, 56, 118, 229, 217, 125, 79, 100, 1, 259, 190, 122, 60, 260,
52, 206, 189, 71, 120, 23, 44, 160, 186, 148, 265, 170, 243, 195,
204, 151, 179, 202, 254, 161, 169, 201, 235, 96, 46, 200, 37, 90,
121, 54, 3, 212, 130, 248, 156, 143, 141, 246, 106, 146, 43, 234,
116, 171, 178, 105, 64, 20, 29, 164, 137, 113, 182, 209, 31, 163,
159, 227, 197, 262, 107, 66, 22, 59, 58, 244, 73, 230, 115, 2,
165, 152, 6, 240, 158, 167, 4, 264, 36, 255, 191, 101, 261, 192,
239, 62, 117, 231, 30, 17, 241, 14, 75, 144, 40, 147, 119, 132,
203, 174, 133, 136, 78, 16, 155, 18, 139, 95, 11, 68, 258, 228,
13, 8, 5, 177, 193, 124, 238, 50, 112, 70, 157, 218, 61, 224,
85, 55, 166, 104, 142, 97, 84, 232, 129, 74, 24, 266, 123, 215,
108, 49, 173, 87, 127, 126, 45, 28, 245, 249, 47, 69, 226, 21,
138, 196, 63, 57, 72, 91, 53, 111, 140, 48, 88, 149, 199, 187,
216, 222, 32, 172, 33, 253, 131, 225, 81, 256, 221, 237, 109, 211,
210, 250, 114, 183, 150, 15, 236, 154, 181, 39, 25, 214, 134, 207,
175, 220, 251, 145, 180, 233, 77, 7, 94, 80, 162, 213, 247, 67,
103, 41, 102, 110, 27, 184, 38, 185, 205, 198, 153, 99, 252, 242,
26, 83, 219, 98, 10, 34, 263, 128, 12, 223, 35, 65, 42, 93,
176, 76, 168, 257, 51, 89, 135, 92, 188, 208, 82, 86, 19, 194,
9})));
REQUIRE(S->contains(Perm(
{0, 201, 243, 31, 229, 136, 122, 223, 164, 155, 185, 45, 3, 81,
166, 48, 14, 105, 162, 169, 228, 94, 212, 43, 167, 190, 93, 202,
224, 55, 56, 29, 118, 116, 194, 161, 184, 39, 134, 22, 181, 66,
8, 216, 112, 110, 58, 183, 131, 156, 103, 244, 144, 203, 5, 59,
9, 231, 108, 238, 52, 111, 255, 178, 226, 23, 92, 82, 173, 51,
145, 26, 146, 138, 196, 143, 163, 37, 249, 246, 53, 191, 117, 245,
200, 4, 30, 106, 247, 32, 192, 263, 49, 142, 171, 34, 188, 151,
65, 260, 36, 6, 68, 259, 265, 123, 20, 73, 193, 63, 258, 100,
2, 41, 16, 7, 124, 132, 230, 86, 135, 113, 83, 17, 149, 33,
256, 84, 42, 128, 180, 236, 47, 187, 11, 74, 253, 61, 67, 209,
211, 70, 237, 198, 25, 266, 130, 182, 125, 213, 250, 257, 141, 199,
147, 13, 175, 102, 91, 27, 205, 75, 222, 242, 153, 206, 76, 88,
1, 140, 96, 18, 69, 85, 189, 10, 50, 208, 227, 21, 139, 165,
40, 87, 35, 204, 179, 99, 158, 176, 79, 251, 38, 109, 57, 89,
221, 90, 24, 219, 252, 214, 159, 157, 239, 262, 129, 121, 160, 232,
80, 97, 77, 60, 54, 44, 177, 195, 19, 154, 28, 225, 114, 62,
240, 248, 150, 120, 126, 133, 168, 119, 218, 64, 172, 217, 197, 98,
170, 78, 174, 15, 186, 101, 220, 115, 254, 137, 46, 207, 261, 95,
152, 235, 148, 215, 107, 72, 264, 234, 210, 127, 71, 104, 241, 12,
233})));
REQUIRE(!S->contains(Perm(
{0, 250, 199, 41, 146, 23, 54, 53, 254, 33, 40, 80, 184, 78,
34, 92, 102, 263, 45, 195, 153, 106, 58, 192, 127, 93, 209, 70,
126, 143, 152, 166, 85, 87, 112, 49, 222, 159, 42, 210, 238, 150,
191, 239, 52, 179, 174, 55, 75, 51, 142, 165, 1, 81, 56, 9,
198, 225, 64, 197, 234, 38, 178, 132, 183, 226, 265, 202, 241, 129,
26, 36, 116, 103, 28, 90, 252, 57, 119, 67, 171, 211, 161, 60,
94, 18, 180, 134, 236, 136, 131, 176, 201, 66, 167, 182, 124, 137,
220, 181, 262, 50, 27, 256, 135, 74, 113, 245, 118, 91, 160, 109,
186, 97, 215, 105, 20, 175, 24, 149, 71, 17, 144, 125, 207, 43,
59, 224, 242, 235, 82, 189, 84, 13, 227, 156, 120, 7, 208, 139,
117, 257, 2, 30, 35, 244, 6, 114, 217, 72, 44, 63, 89, 145,
31, 266, 76, 121, 204, 240, 115, 163, 98, 264, 233, 260, 162, 65,
219, 253, 194, 151, 111, 123, 5, 39, 46, 212, 99, 108, 16, 22,
138, 83, 104, 148, 69, 203, 187, 157, 206, 3, 246, 29, 243, 232,
101, 168, 229, 221, 140, 213, 231, 47, 228, 188, 100, 248, 185, 128,
200, 88, 155, 122, 14, 107, 95, 73, 77, 110, 169, 79, 193, 32,
223, 249, 11, 205, 173, 190, 251, 196, 10, 218, 62, 37, 21, 86,
147, 258, 214, 130, 237, 164, 133, 19, 172, 247, 177, 255, 12, 158,
48, 261, 259, 170, 216, 154, 230, 96, 15, 141, 4, 61, 25, 68,
8})));
REQUIRE(!S->contains(Perm(
{0, 89, 18, 6, 159, 73, 100, 91, 110, 216, 66, 56, 144, 22,
62, 15, 23, 146, 188, 11, 245, 148, 86, 96, 156, 114, 221, 103,
217, 7, 129, 26, 111, 51, 232, 12, 141, 243, 212, 167, 225, 219,
177, 34, 104, 64, 54, 255, 165, 250, 136, 202, 227, 20, 246, 124,
134, 65, 84, 61, 77, 97, 162, 259, 247, 263, 215, 139, 150, 48,
196, 181, 106, 187, 95, 44, 2, 33, 5, 260, 19, 127, 195, 69,
58, 75, 142, 32, 203, 224, 45, 251, 4, 99, 88, 233, 184, 189,
173, 85, 163, 249, 16, 43, 93, 27, 264, 140, 208, 166, 101, 39,
211, 14, 206, 192, 230, 107, 87, 63, 102, 204, 205, 70, 115, 145,
8, 3, 198, 182, 24, 153, 168, 174, 200, 154, 55, 40, 53, 59,
125, 30, 112, 38, 265, 236, 223, 242, 262, 76, 190, 133, 28, 194,
183, 213, 130, 60, 257, 123, 171, 253, 234, 149, 94, 109, 83, 118,
256, 126, 176, 164, 31, 228, 151, 42, 261, 201, 226, 248, 244, 78,
258, 220, 120, 178, 239, 71, 90, 67, 119, 197, 50, 199, 143, 175,
92, 52, 29, 9, 80, 82, 157, 160, 147, 240, 49, 122, 191, 170,
252, 13, 131, 209, 161, 254, 266, 74, 113, 41, 179, 116, 21, 185,
1, 137, 17, 108, 214, 193, 172, 238, 105, 152, 218, 47, 117, 25,
222, 35, 79, 180, 210, 138, 46, 37, 241, 81, 135, 169, 237, 128,
121, 98, 158, 132, 235, 10, 36, 68, 207, 155, 231, 72, 57, 186,
229})));
REQUIRE(!S->contains(Perm(
{0, 56, 118, 229, 217, 125, 79, 100, 1, 259, 190, 122, 60, 260,
52, 206, 189, 71, 120, 23, 44, 160, 186, 148, 265, 170, 243, 195,
204, 151, 179, 202, 254, 161, 169, 201, 235, 96, 46, 200, 37, 90,
121, 54, 4, 212, 130, 248, 156, 143, 141, 246, 106, 146, 43, 234,
116, 171, 178, 105, 64, 20, 29, 164, 137, 113, 182, 209, 31, 163,
159, 227, 197, 262, 107, 66, 22, 59, 58, 244, 73, 230, 115, 3,
165, 152, 2, 240, 158, 167, 5, 264, 36, 255, 191, 101, 261, 192,
239, 62, 117, 231, 30, 17, 241, 14, 75, 144, 40, 147, 119, 132,
203, 174, 133, 136, 78, 16, 155, 18, 139, 95, 11, 68, 258, 228,
13, 8, 6, 177, 193, 124, 238, 50, 112, 70, 157, 218, 61, 224,
85, 55, 166, 104, 142, 97, 84, 232, 129, 74, 24, 266, 123, 215,
108, 49, 173, 87, 127, 126, 45, 28, 245, 249, 47, 69, 226, 21,
138, 196, 63, 57, 72, 91, 53, 111, 140, 48, 88, 149, 199, 187,
216, 222, 32, 172, 33, 253, 131, 225, 81, 256, 221, 237, 109, 211,
210, 250, 114, 183, 150, 15, 236, 154, 181, 39, 25, 214, 134, 207,
175, 220, 251, 145, 180, 233, 77, 7, 94, 80, 162, 213, 247, 67,
103, 41, 102, 110, 27, 184, 38, 185, 205, 198, 153, 99, 252, 242,
26, 83, 219, 98, 10, 34, 263, 128, 12, 223, 35, 65, 42, 93,
176, 76, 168, 257, 51, 89, 135, 92, 188, 208, 82, 86, 19, 194,
9})));
delete S;
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"021",
"perm. Hall-Janko group (order 604800)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 101;
auto S = new SchreierSims();
using Perm = std::remove_pointer::type::element_type;
S->add_generator(Perm(
{0, 84, 20, 48, 56, 82, 67, 55, 41, 35, 40, 78, 100, 49, 37, 94, 76,
19, 44, 17, 2, 34, 85, 92, 57, 75, 28, 64, 26, 90, 97, 38, 68, 69,
21, 9, 53, 14, 31, 61, 10, 8, 73, 91, 18, 86, 81, 89, 3, 13, 93,
96, 72, 36, 74, 7, 4, 24, 99, 95, 63, 39, 83, 60, 27, 70, 88, 6,
32, 33, 65, 87, 52, 42, 54, 25, 16, 98, 11, 80, 79, 46, 5, 62, 1,
22, 45, 71, 66, 47, 29, 43, 23, 50, 15, 59, 51, 30, 77, 58, 12}));
S->add_generator(Perm(
{0, 80, 9, 53, 23, 51, 37, 7, 27, 11, 62, 2, 65, 64, 61, 98, 73,
39, 5, 13, 97, 96, 1, 78, 6, 15, 93, 60, 57, 71, 69, 12, 16, 17,
86, 28, 36, 24, 59, 33, 43, 41, 68, 91, 42, 30, 85, 10, 76, 92, 66,
18, 14, 87, 95, 29, 54, 35, 20, 94, 8, 52, 47, 74, 19, 31, 88, 21,
44, 45, 81, 55, 63, 32, 72, 70, 90, 49, 4, 100, 22, 75, 34, 79, 84,
89, 82, 3, 50, 46, 48, 40, 77, 99, 38, 56, 67, 58, 25, 26, 83}));
REQUIRE(S->size() == 604800);
REQUIRE(S->contains(S->generator(0)));
REQUIRE(S->contains(S->generator(1)));
REQUIRE(S->contains(Perm(
{0, 22, 11, 87, 78, 18, 24, 7, 60, 2, 47, 9, 31, 19, 52, 25, 32,
33, 51, 64, 58, 67, 80, 4, 37, 98, 99, 8, 35, 55, 45, 65, 73, 39,
82, 57, 36, 6, 94, 17, 91, 41, 44, 40, 68, 69, 89, 62, 90, 77, 88,
5, 61, 3, 56, 71, 95, 28, 97, 38, 27, 14, 10, 72, 13, 12, 50, 96,
42, 30, 75, 29, 74, 16, 63, 81, 48, 92, 23, 83, 1, 70, 86, 100, 84,
46, 34, 53, 66, 85, 76, 43, 49, 26, 59, 54, 21, 20, 15, 93, 79})));
REQUIRE(S->contains(Perm(
{0, 59, 20, 76, 38, 35, 13, 73, 45, 94, 84, 82, 10, 14, 58, 39, 68,
95, 37, 54, 52, 16, 89, 26, 51, 81, 50, 23, 18, 71, 60, 43, 7, 25,
9, 88, 48, 97, 2, 96, 46, 92, 53, 62, 32, 66, 80, 40, 5, 28, 57,
90, 93, 29, 70, 55, 33, 77, 6, 78, 74, 19, 31, 12, 24, 72, 99, 17,
30, 42, 100, 3, 27, 67, 21, 98, 36, 41, 8, 15, 79, 56, 34, 75, 47,
91, 86, 44, 69, 49, 87, 65, 85, 4, 22, 64, 63, 11, 83, 61, 1})));
REQUIRE(S->contains(Perm(
{0, 74, 78, 68, 70, 20, 98, 18, 21, 75, 85, 44, 43, 67, 50, 37, 42,
31, 72, 60, 54, 3, 83, 9, 34, 47, 28, 13, 32, 36, 52, 91, 87, 46,
24, 93, 71, 86, 99, 82, 65, 56, 53, 12, 73, 88, 62, 89, 45, 58, 14,
7, 66, 16, 100, 55, 97, 94, 51, 35, 4, 69, 15, 80, 26, 39, 30, 27,
2, 76, 38, 29, 49, 57, 5, 23, 48, 63, 8, 95, 84, 11, 6, 77, 22,
10, 33, 96, 61, 17, 90, 25, 79, 59, 81, 41, 64, 92, 40, 19, 1})));
REQUIRE(!S->contains(Perm(
{0, 2, 1, 4, 3, 5, 6, 8, 9, 10, 7, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100})));
REQUIRE(!S->contains(Perm(
{0, 3, 100, 4, 8, 5, 6, 7, 1, 33, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 89, 27, 28, 29, 30, 31, 32, 2,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 93, 83, 84,
85, 86, 87, 88, 82, 90, 91, 92, 26, 94, 95, 96, 97, 98, 99, 9})));
REQUIRE(!S->contains(Perm(
{0, 5, 3, 1, 4, 100, 6, 7, 23, 9, 19, 11, 12, 13, 14, 15, 16,
17, 18, 8, 20, 21, 22, 45, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 10, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 2, 84,
85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 83})));
delete S;
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"022",
"perm. Hall-Janko group (alt.) (order 604800)",
"[quick][schreier-sims][no-valgrind]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 841;
auto S = new SchreierSims();
using Perm = std::remove_pointer::type::element_type;
S->add_generator(Perm(
{0, 2, 1, 5, 7, 3, 10, 4, 12, 13, 6, 16, 8, 9,
20, 21, 11, 24, 25, 27, 14, 15, 31, 32, 17, 18, 36, 19,
38, 39, 41, 22, 23, 45, 46, 48, 26, 51, 28, 29, 55, 30,
57, 58, 59, 33, 34, 63, 35, 65, 66, 37, 67, 68, 70, 40,
73, 42, 43, 44, 77, 78, 80, 47, 83, 49, 50, 52, 53, 89,
54, 91, 72, 56, 92, 93, 95, 60, 61, 99, 62, 101, 102, 64,
103, 104, 106, 108, 110, 69, 113, 71, 74, 75, 118, 76, 120, 121,
123, 79, 126, 81, 82, 84, 85, 132, 86, 134, 87, 136, 88, 138,
139, 90, 140, 141, 142, 144, 94, 147, 96, 97, 151, 98, 153, 154,
100, 155, 156, 158, 160, 162, 105, 165, 107, 168, 109, 171, 111, 112,
114, 115, 116, 177, 117, 179, 180, 119, 181, 182, 184, 122, 187, 124,
125, 127, 128, 193, 129, 195, 130, 197, 131, 199, 200, 133, 201, 202,
135, 205, 206, 137, 207, 208, 210, 212, 214, 143, 217, 145, 146, 148,
149, 223, 150, 224, 186, 152, 225, 226, 228, 230, 192, 157, 234, 159,
237, 161, 240, 163, 164, 166, 167, 204, 203, 169, 170, 172, 173, 251,
174, 253, 175, 255, 176, 257, 258, 178, 259, 260, 262, 264, 266, 183,
185, 188, 189, 272, 190, 274, 191, 276, 277, 278, 194, 279, 280, 196,
283, 284, 198, 285, 286, 288, 290, 292, 294, 295, 297, 250, 249, 209,
302, 211, 305, 213, 308, 215, 216, 218, 219, 314, 220, 316, 221, 318,
222, 320, 321, 322, 323, 325, 227, 328, 229, 331, 231, 232, 233, 235,
236, 282, 281, 238, 239, 241, 242, 342, 243, 344, 244, 345, 245, 347,
246, 247, 350, 248, 298, 352, 353, 354, 252, 355, 356, 254, 359, 360,
256, 361, 362, 364, 366, 368, 261, 371, 263, 374, 265, 377, 267, 268,
269, 270, 382, 271, 384, 385, 273, 386, 387, 275, 390, 391, 392, 335,
395, 397, 398, 400, 402, 379, 287, 406, 289, 291, 409, 293, 412, 414,
296, 407, 299, 300, 301, 303, 304, 358, 357, 306, 307, 309, 310, 422,
311, 423, 312, 425, 313, 427, 428, 315, 429, 430, 317, 433, 434, 319,
435, 341, 437, 439, 324, 442, 326, 327, 329, 330, 389, 388, 332, 333,
334, 450, 451, 336, 417, 337, 338, 454, 339, 456, 340, 458, 459, 460,
343, 351, 461, 346, 410, 462, 348, 465, 349, 467, 469, 396, 471, 473,
420, 476, 363, 365, 480, 367, 483, 369, 370, 372, 373, 432, 431, 375,
376, 378, 493, 380, 495, 381, 497, 498, 383, 444, 443, 501, 503, 504,
506, 507, 393, 394, 511, 470, 399, 487, 401, 516, 403, 404, 405, 408,
411, 523, 524, 413, 527, 415, 530, 416, 453, 418, 533, 419, 535, 536,
421, 538, 539, 540, 424, 543, 544, 426, 545, 546, 548, 455, 488, 513,
550, 532, 509, 436, 518, 438, 556, 440, 441, 560, 500, 445, 561, 446,
447, 564, 448, 449, 566, 492, 567, 452, 552, 489, 568, 569, 457, 572,
494, 573, 575, 577, 578, 463, 464, 581, 582, 466, 583, 576, 468, 586,
491, 472, 590, 474, 475, 594, 477, 478, 479, 542, 541, 481, 482, 484,
485, 604, 486, 606, 490, 608, 512, 609, 610, 611, 496, 612, 613, 615,
499, 502, 617, 619, 505, 622, 508, 510, 514, 515, 571, 570, 517, 519,
629, 520, 529, 521, 522, 632, 633, 525, 526, 528, 637, 638, 531, 607,
639, 640, 534, 641, 642, 643, 537, 644, 645, 647, 649, 651, 602, 653,
600, 656, 547, 659, 549, 587, 551, 553, 554, 555, 557, 558, 668, 559,
669, 562, 672, 563, 636, 674, 565, 675, 676, 678, 661, 681, 682, 574,
685, 687, 579, 580, 691, 693, 620, 584, 585, 588, 589, 591, 592, 593,
595, 596, 699, 597, 701, 598, 684, 599, 704, 601, 706, 707, 603, 709,
710, 605, 711, 626, 662, 703, 712, 714, 697, 717, 614, 616, 721, 722,
618, 725, 621, 623, 624, 728, 625, 679, 729, 627, 628, 732, 650, 630,
686, 631, 733, 724, 735, 634, 737, 635, 739, 740, 742, 666, 745, 646,
720, 648, 749, 663, 652, 751, 654, 655, 727, 657, 658, 660, 664, 713,
665, 756, 757, 667, 759, 760, 700, 670, 671, 762, 689, 673, 763, 708,
677, 680, 765, 767, 683, 688, 770, 690, 772, 692, 774, 694, 695, 776,
696, 778, 779, 698, 781, 782, 775, 702, 783, 705, 752, 784, 755, 754,
715, 716, 786, 718, 719, 789, 723, 726, 773, 730, 793, 731, 795, 796,
734, 798, 736, 764, 738, 748, 741, 801, 743, 744, 803, 746, 747, 750,
753, 806, 758, 808, 809, 761, 805, 812, 813, 766, 816, 768, 769, 819,
771, 820, 821, 777, 807, 780, 814, 790, 785, 802, 787, 788, 822, 825,
791, 792, 804, 827, 794, 828, 829, 797, 799, 800, 810, 830, 833, 811,
834, 815, 817, 818, 823, 832, 831, 824, 826, 835, 839, 837, 840, 836,
838}));
S->add_generator(Perm(
{0, 3, 4, 6, 8, 9, 1, 11, 2, 14, 15, 17, 18, 19,
5, 22, 23, 7, 26, 28, 29, 30, 10, 33, 34, 35, 12, 37,
13, 40, 42, 43, 44, 16, 47, 49, 50, 52, 53, 54, 20, 56,
21, 59, 60, 61, 62, 24, 64, 25, 51, 36, 27, 69, 71, 72,
74, 75, 76, 31, 32, 79, 81, 82, 84, 85, 86, 87, 88, 38,
90, 39, 73, 55, 41, 94, 96, 97, 98, 45, 100, 46, 83, 63,
48, 105, 107, 109, 111, 112, 114, 115, 116, 117, 57, 119, 58, 122,
124, 125, 127, 128, 129, 130, 131, 65, 133, 66, 135, 67, 137, 68,
113, 89, 70, 142, 143, 145, 146, 148, 149, 150, 77, 152, 78, 126,
99, 80, 157, 159, 161, 163, 164, 166, 167, 169, 170, 172, 173, 174,
175, 176, 91, 92, 178, 93, 147, 118, 95, 183, 185, 186, 188, 189,
190, 191, 192, 101, 194, 102, 196, 103, 198, 104, 165, 132, 106, 203,
204, 108, 171, 136, 110, 209, 211, 213, 215, 216, 218, 219, 220, 221,
222, 120, 223, 121, 187, 151, 123, 227, 229, 231, 232, 233, 235, 236,
238, 239, 241, 242, 243, 244, 245, 134, 246, 247, 248, 249, 250, 138,
252, 139, 254, 140, 256, 141, 217, 177, 144, 261, 263, 265, 267, 268,
269, 270, 271, 153, 273, 154, 275, 155, 156, 234, 193, 158, 281, 282,
160, 240, 197, 162, 287, 289, 291, 293, 168, 296, 298, 299, 300, 301,
303, 304, 306, 307, 309, 310, 311, 312, 313, 179, 315, 180, 317, 181,
319, 182, 184, 323, 324, 326, 327, 329, 330, 332, 333, 276, 334, 335,
336, 195, 337, 338, 339, 340, 341, 199, 343, 200, 295, 201, 346, 202,
348, 349, 205, 351, 206, 207, 208, 302, 251, 210, 357, 358, 212, 308,
255, 214, 363, 365, 367, 369, 370, 372, 373, 375, 376, 378, 379, 380,
381, 224, 225, 383, 226, 328, 272, 228, 388, 389, 230, 277, 393, 394,
396, 237, 399, 401, 403, 404, 405, 354, 407, 408, 410, 411, 413, 290,
344, 353, 352, 297, 288, 415, 416, 253, 417, 418, 419, 420, 421, 257,
422, 258, 424, 259, 426, 260, 371, 314, 262, 431, 432, 264, 377, 318,
266, 436, 438, 440, 441, 386, 443, 444, 325, 445, 274, 446, 447, 448,
449, 278, 279, 452, 280, 453, 430, 283, 455, 284, 457, 285, 286, 406,
342, 350, 409, 345, 292, 463, 464, 294, 466, 468, 470, 305, 472, 474,
475, 477, 478, 479, 481, 482, 484, 485, 486, 487, 488, 316, 489, 490,
491, 492, 320, 494, 321, 496, 322, 442, 382, 499, 500, 502, 331, 505,
507, 508, 509, 510, 512, 513, 429, 514, 515, 517, 518, 519, 520, 521,
522, 347, 525, 526, 528, 529, 355, 531, 356, 532, 359, 534, 360, 361,
537, 362, 364, 541, 542, 366, 483, 425, 368, 547, 549, 454, 398, 374,
551, 552, 553, 458, 554, 555, 557, 558, 559, 384, 385, 498, 387, 562,
563, 390, 565, 391, 392, 567, 511, 451, 395, 397, 400, 570, 571, 402,
493, 574, 576, 578, 579, 580, 523, 412, 527, 465, 414, 584, 585, 587,
588, 589, 591, 592, 593, 595, 596, 597, 598, 423, 599, 600, 601, 602,
603, 427, 605, 428, 607, 433, 434, 435, 437, 556, 495, 439, 614, 501,
560, 616, 618, 620, 621, 623, 624, 450, 625, 626, 456, 627, 628, 609,
459, 630, 460, 631, 461, 462, 524, 634, 635, 636, 467, 586, 530, 469,
471, 590, 533, 473, 643, 594, 536, 476, 646, 648, 650, 480, 652, 654,
655, 657, 658, 660, 661, 640, 662, 663, 664, 665, 666, 667, 497, 668,
670, 671, 503, 673, 504, 622, 564, 506, 677, 679, 680, 516, 683, 684,
686, 688, 689, 690, 692, 674, 687, 649, 694, 608, 550, 695, 696, 535,
697, 698, 538, 700, 539, 702, 540, 703, 543, 705, 544, 545, 708, 546,
659, 604, 548, 678, 639, 573, 713, 715, 716, 718, 719, 720, 561, 723,
724, 726, 582, 710, 727, 566, 606, 568, 569, 730, 731, 572, 685, 629,
575, 583, 577, 734, 736, 735, 581, 738, 740, 741, 743, 744, 746, 669,
747, 748, 637, 728, 750, 752, 753, 676, 754, 709, 755, 693, 732, 610,
712, 611, 612, 758, 613, 615, 699, 761, 721, 617, 725, 672, 619, 707,
651, 764, 766, 768, 714, 769, 632, 771, 633, 773, 711, 775, 638, 641,
777, 642, 644, 780, 645, 647, 749, 701, 751, 704, 653, 783, 656, 675,
785, 778, 787, 742, 788, 722, 790, 733, 791, 792, 681, 794, 682, 763,
797, 691, 772, 774, 737, 799, 800, 759, 786, 802, 804, 805, 760, 706,
784, 807, 757, 717, 782, 810, 811, 729, 814, 815, 817, 818, 796, 798,
770, 739, 801, 776, 803, 779, 745, 822, 823, 756, 808, 821, 824, 762,
826, 812, 765, 816, 793, 767, 830, 825, 831, 832, 781, 827, 789, 834,
813, 806, 835, 836, 795, 837, 809, 833, 819, 838, 840, 820, 828, 839,
829}));
REQUIRE(S->size() == 604800);
delete S;
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"023",
"perm. Conway group Co3 (order 495766656000)",
"[quick][schreier-sims][no-valgrind]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 277;
auto S = new SchreierSims();
using Perm = std::remove_pointer::type::element_type;
S->add_generator(Perm(
{0, 245, 42, 112, 15, 131, 7, 188, 75, 132, 10, 11, 187, 186,
265, 22, 159, 256, 43, 101, 123, 134, 4, 32, 209, 238, 35, 45,
235, 126, 5, 19, 60, 66, 80, 154, 251, 117, 206, 71, 118, 93,
87, 167, 271, 221, 261, 182, 155, 47, 230, 172, 236, 109, 191, 76,
156, 73, 116, 147, 23, 127, 231, 38, 53, 122, 210, 24, 68, 86,
255, 196, 139, 149, 21, 111, 203, 252, 72, 262, 114, 214, 9, 181,
174, 85, 95, 2, 250, 257, 243, 90, 158, 170, 148, 69, 105, 249,
263, 16, 54, 31, 115, 51, 104, 125, 219, 92, 46, 64, 204, 8,
266, 225, 34, 175, 145, 161, 180, 237, 241, 224, 169, 269, 12, 96,
129, 189, 190, 29, 17, 30, 82, 143, 74, 168, 13, 227, 217, 78,
258, 220, 178, 228, 146, 58, 254, 273, 215, 57, 106, 77, 110, 50,
26, 248, 260, 274, 107, 99, 253, 37, 25, 272, 44, 52, 119, 18,
201, 65, 41, 233, 103, 246, 200, 102, 160, 198, 207, 157, 40, 223,
49, 267, 79, 1, 136, 124, 6, 61, 268, 100, 70, 98, 171, 121,
39, 62, 211, 208, 84, 135, 97, 55, 152, 141, 63, 142, 259, 67,
33, 177, 173, 14, 242, 94, 113, 240, 264, 150, 205, 27, 183, 83,
195, 216, 163, 247, 133, 36, 153, 197, 140, 194, 120, 270, 165, 166,
162, 218, 138, 234, 81, 91, 89, 185, 212, 137, 48, 202, 276, 229,
151, 176, 144, 192, 130, 244, 232, 199, 56, 108, 184, 193, 239, 213,
3, 222, 128, 20, 28, 164, 226, 59, 179, 275, 88}));
S->add_generator(Perm(
{0, 204, 203, 33, 236, 5, 172, 77, 76, 47, 146, 133, 224, 229,
53, 84, 16, 223, 228, 130, 131, 252, 190, 13, 263, 242, 10, 32,
196, 199, 65, 246, 209, 40, 99, 241, 198, 269, 251, 75, 118, 176,
271, 183, 116, 197, 238, 22, 29, 178, 26, 174, 129, 2, 153, 272,
257, 41, 12, 59, 20, 27, 175, 106, 159, 218, 259, 137, 258, 261,
164, 262, 189, 45, 177, 260, 85, 25, 15, 226, 96, 24, 1, 274,
148, 264, 132, 48, 117, 36, 60, 171, 201, 101, 253, 95, 120, 142,
213, 165, 51, 115, 44, 103, 167, 243, 66, 141, 108, 88, 97, 276,
30, 139, 222, 166, 173, 231, 3, 73, 239, 56, 170, 82, 162, 163,
207, 145, 128, 52, 104, 90, 216, 220, 155, 74, 237, 28, 4, 113,
273, 230, 270, 248, 180, 206, 50, 250, 78, 127, 150, 54, 232, 217,
121, 69, 156, 6, 125, 210, 86, 89, 46, 184, 211, 265, 93, 19,
138, 23, 126, 43, 188, 102, 244, 219, 192, 256, 83, 58, 144, 181,
187, 91, 158, 205, 235, 147, 157, 114, 9, 152, 57, 39, 64, 143,
67, 119, 161, 87, 200, 111, 79, 14, 123, 21, 149, 122, 191, 61,
194, 266, 225, 31, 81, 62, 160, 151, 112, 215, 254, 234, 72, 17,
179, 105, 267, 227, 18, 169, 249, 109, 208, 275, 68, 233, 168, 55,
124, 80, 240, 35, 7, 212, 100, 245, 98, 195, 247, 107, 182, 42,
185, 94, 11, 255, 135, 154, 221, 63, 193, 134, 71, 214, 8, 34,
70, 202, 268, 37, 110, 38, 136, 140, 49, 186, 92}));
REQUIRE(S->size() == static_cast(495766656000));
REQUIRE(S->contains(S->generator(0)));
REQUIRE(S->contains(S->generator(1)));
REQUIRE(S->contains(Perm(
{0, 123, 14, 40, 168, 5, 188, 25, 85, 22, 50, 220, 179, 169,
2, 148, 16, 17, 18, 104, 90, 185, 9, 229, 214, 7, 146, 209,
67, 87, 218, 98, 61, 118, 165, 35, 161, 37, 42, 260, 3, 192,
38, 91, 173, 119, 124, 190, 199, 83, 10, 244, 52, 203, 217, 136,
154, 176, 224, 59, 131, 32, 219, 66, 210, 112, 63, 28, 221, 134,
211, 71, 114, 197, 256, 193, 264, 242, 84, 267, 120, 263, 204, 49,
78, 8, 216, 29, 231, 198, 20, 43, 111, 115, 94, 95, 239, 270,
31, 265, 174, 166, 116, 103, 19, 212, 259, 230, 108, 117, 142, 92,
65, 113, 72, 93, 102, 109, 33, 45, 80, 257, 126, 1, 46, 184,
122, 206, 128, 129, 167, 60, 160, 254, 69, 177, 55, 196, 236, 139,
140, 249, 110, 247, 144, 149, 26, 182, 15, 145, 150, 153, 208, 151,
56, 261, 156, 172, 163, 194, 132, 36, 238, 158, 266, 34, 101, 130,
4, 13, 207, 183, 157, 44, 100, 215, 57, 135, 274, 12, 180, 181,
147, 171, 125, 21, 233, 250, 6, 222, 47, 232, 41, 75, 159, 248,
137, 73, 89, 48, 200, 276, 226, 53, 82, 252, 127, 170, 152, 27,
64, 70, 105, 246, 24, 175, 86, 54, 30, 62, 11, 68, 189, 223,
58, 243, 202, 227, 228, 23, 107, 88, 191, 186, 258, 275, 138, 272,
162, 96, 240, 241, 77, 225, 51, 245, 213, 143, 195, 141, 187, 271,
205, 253, 133, 255, 74, 121, 234, 106, 39, 155, 262, 81, 76, 99,
164, 79, 268, 269, 97, 251, 237, 273, 178, 235, 201})));
REQUIRE(S->contains(Perm(
{0, 205, 48, 70, 190, 65, 157, 172, 276, 1, 146, 133, 162, 237,
31, 236, 165, 104, 19, 246, 37, 177, 84, 20, 137, 46, 121, 234,
110, 52, 90, 115, 13, 194, 222, 10, 169, 89, 106, 67, 144, 126,
203, 228, 211, 32, 108, 178, 247, 187, 217, 103, 265, 159, 51, 14,
193, 127, 206, 140, 209, 114, 119, 149, 88, 23, 40, 61, 258, 95,
57, 75, 15, 41, 155, 76, 272, 54, 113, 158, 99, 7, 216, 17,
200, 264, 261, 271, 92, 100, 171, 212, 141, 176, 62, 132, 163, 79,
39, 210, 152, 130, 219, 188, 167, 120, 150, 125, 134, 2, 232, 260,
33, 160, 96, 44, 12, 269, 118, 93, 68, 143, 218, 131, 147, 243,
199, 27, 268, 207, 135, 5, 47, 18, 252, 111, 235, 195, 240, 189,
208, 21, 122, 220, 11, 173, 180, 59, 253, 45, 215, 185, 123, 249,
241, 29, 257, 58, 201, 16, 192, 231, 124, 267, 38, 168, 55, 183,
74, 170, 101, 64, 174, 225, 148, 166, 94, 266, 270, 49, 3, 274,
22, 72, 71, 245, 229, 224, 77, 145, 128, 153, 255, 214, 275, 179,
262, 109, 256, 63, 244, 138, 107, 85, 97, 254, 251, 83, 87, 263,
259, 161, 98, 34, 24, 78, 105, 4, 80, 66, 230, 197, 202, 181,
56, 139, 136, 28, 248, 42, 26, 175, 221, 43, 35, 196, 129, 73,
242, 8, 151, 239, 81, 60, 154, 204, 102, 227, 69, 142, 117, 198,
25, 86, 50, 164, 223, 36, 273, 191, 156, 238, 226, 213, 112, 53,
30, 91, 9, 82, 233, 116, 184, 250, 6, 186, 182})));
REQUIRE(S->contains(Perm(
{0, 205, 48, 70, 190, 65, 157, 172, 276, 1, 146, 133, 162, 237,
31, 236, 165, 104, 19, 246, 37, 177, 84, 20, 137, 46, 121, 234,
110, 52, 90, 115, 13, 194, 222, 10, 169, 89, 106, 67, 144, 126,
203, 228, 211, 32, 108, 178, 247, 187, 217, 103, 265, 159, 51, 14,
193, 127, 206, 140, 209, 114, 119, 149, 88, 23, 40, 61, 258, 95,
57, 75, 15, 41, 155, 76, 272, 54, 113, 158, 99, 7, 216, 17,
200, 264, 261, 271, 92, 100, 171, 212, 141, 176, 62, 132, 163, 79,
39, 210, 152, 130, 219, 188, 167, 120, 150, 125, 134, 2, 232, 260,
33, 160, 96, 44, 12, 269, 118, 93, 68, 143, 218, 131, 147, 243,
199, 27, 268, 207, 135, 5, 47, 18, 252, 111, 235, 195, 240, 189,
208, 21, 122, 220, 11, 173, 180, 59, 253, 45, 215, 185, 123, 249,
241, 29, 257, 58, 201, 16, 192, 231, 124, 267, 38, 168, 55, 183,
74, 170, 101, 64, 174, 225, 148, 166, 94, 266, 270, 49, 3, 274,
22, 72, 71, 245, 229, 224, 77, 145, 128, 153, 255, 214, 275, 179,
262, 109, 256, 63, 244, 138, 107, 85, 97, 254, 251, 83, 87, 263,
259, 161, 98, 34, 24, 78, 105, 4, 80, 66, 230, 197, 202, 181,
56, 139, 136, 28, 248, 42, 26, 175, 221, 43, 35, 196, 129, 73,
242, 8, 151, 239, 81, 60, 154, 204, 102, 227, 69, 142, 117, 198,
25, 86, 50, 164, 223, 36, 273, 191, 156, 238, 226, 213, 112, 53,
30, 91, 9, 82, 233, 116, 184, 250, 6, 186, 182})));
REQUIRE(!S->contains(Perm(
{0, 185, 87, 266, 22, 30, 188, 6, 111, 82, 10, 13, 124, 136,
213, 100, 99, 130, 167, 31, 269, 74, 15, 60, 67, 162, 154, 221,
270, 129, 131, 101, 23, 210, 114, 26, 229, 161, 63, 196, 180, 170,
3, 18, 164, 27, 108, 49, 248, 182, 153, 103, 165, 64, 230, 203,
260, 149, 145, 273, 32, 189, 197, 206, 109, 169, 33, 209, 68, 95,
192, 39, 78, 57, 134, 8, 55, 151, 139, 184, 34, 242, 132, 223,
200, 85, 69, 42, 276, 244, 91, 243, 107, 41, 215, 86, 125, 202,
193, 159, 191, 19, 175, 172, 104, 96, 150, 158, 261, 53, 152, 75,
5, 216, 80, 102, 58, 37, 40, 166, 234, 195, 65, 20, 187, 105,
29, 61, 268, 126, 256, 1, 9, 228, 2, 201, 186, 247, 240, 72,
232, 205, 207, 133, 254, 116, 144, 59, 94, 73, 219, 252, 204, 11,
35, 48, 56, 179, 92, 16, 176, 117, 238, 226, 271, 236, 237, 43,
135, 122, 93, 194, 51, 212, 84, 115, 253, 211, 142, 274, 118, 83,
47, 222, 262, 245, 17, 12, 7, 127, 128, 54, 255, 263, 233, 224,
71, 231, 177, 259, 174, 168, 249, 76, 110, 220, 38, 178, 199, 24,
66, 198, 246, 265, 81, 148, 225, 138, 239, 106, 141, 45, 267, 181,
121, 113, 272, 137, 143, 251, 50, 62, 258, 171, 241, 28, 52, 119,
25, 264, 217, 120, 214, 90, 257, 21, 173, 227, 155, 97, 88, 4,
77, 160, 146, 70, 36, 89, 140, 208, 156, 46, 79, 98, 218, 14,
112, 183, 190, 123, 235, 44, 163, 147, 157, 275, 250})));
REQUIRE(!S->contains(Perm(
{0, 123, 14, 40, 168, 2, 188, 25, 85, 22, 50, 220, 179, 169,
1, 148, 16, 36, 18, 104, 90, 185, 9, 229, 214, 7, 146, 209,
67, 87, 218, 98, 61, 118, 165, 35, 161, 37, 42, 260, 21, 192,
38, 91, 173, 119, 124, 190, 199, 83, 10, 244, 52, 203, 217, 136,
154, 176, 224, 59, 131, 32, 219, 66, 210, 112, 63, 28, 221, 134,
211, 71, 114, 197, 256, 193, 264, 242, 84, 267, 120, 263, 204, 49,
78, 8, 216, 29, 231, 198, 20, 43, 111, 115, 94, 95, 239, 270,
31, 265, 174, 166, 116, 103, 19, 212, 259, 11, 108, 117, 142, 92,
65, 113, 72, 93, 102, 109, 33, 45, 80, 257, 126, 3, 46, 184,
122, 206, 128, 129, 167, 60, 160, 254, 69, 177, 55, 196, 236, 139,
140, 249, 110, 247, 144, 149, 26, 182, 15, 145, 150, 153, 208, 151,
56, 261, 156, 172, 163, 194, 132, 4, 238, 158, 266, 34, 101, 130,
100, 17, 207, 183, 157, 44, 230, 215, 57, 135, 274, 12, 180, 181,
147, 171, 125, 5, 233, 250, 6, 222, 47, 232, 41, 75, 159, 248,
137, 73, 89, 48, 200, 276, 226, 53, 82, 252, 127, 170, 152, 27,
64, 70, 105, 246, 24, 175, 86, 54, 30, 62, 13, 68, 189, 223,
58, 243, 202, 227, 228, 23, 107, 88, 191, 186, 258, 275, 138, 272,
162, 96, 240, 241, 77, 225, 51, 245, 213, 143, 195, 141, 187, 271,
205, 253, 133, 255, 74, 121, 234, 106, 39, 155, 262, 81, 76, 99,
164, 79, 268, 269, 97, 251, 237, 273, 178, 235, 201})));
REQUIRE(!S->contains(Perm(
{0, 185, 87, 266, 22, 30, 188, 6, 111, 82, 10, 100, 124, 136,
213, 17, 99, 130, 167, 31, 269, 74, 15, 60, 67, 162, 154, 221,
270, 129, 131, 101, 23, 210, 114, 26, 229, 161, 63, 196, 180, 170,
1, 18, 164, 27, 108, 49, 248, 182, 153, 103, 165, 64, 36, 203,
260, 149, 145, 273, 32, 189, 197, 206, 109, 169, 33, 209, 68, 95,
192, 39, 78, 57, 134, 8, 55, 151, 139, 184, 34, 242, 132, 223,
200, 85, 69, 42, 276, 244, 91, 243, 107, 41, 215, 86, 125, 202,
193, 159, 191, 19, 175, 172, 104, 96, 150, 158, 261, 53, 152, 75,
21, 216, 80, 102, 58, 37, 40, 166, 234, 195, 65, 20, 187, 105,
29, 61, 268, 126, 256, 2, 9, 228, 5, 201, 186, 247, 240, 72,
232, 205, 207, 133, 254, 116, 144, 59, 94, 73, 219, 252, 204, 4,
35, 48, 56, 179, 92, 16, 176, 117, 238, 226, 271, 236, 237, 43,
135, 122, 93, 194, 51, 212, 84, 115, 253, 211, 142, 274, 118, 83,
47, 222, 262, 245, 230, 12, 7, 127, 128, 54, 255, 263, 233, 224,
71, 231, 177, 259, 174, 168, 249, 76, 110, 220, 38, 178, 199, 24,
66, 198, 246, 265, 81, 148, 225, 138, 239, 106, 141, 45, 267, 181,
121, 113, 272, 137, 143, 251, 50, 62, 258, 171, 241, 28, 52, 119,
25, 264, 217, 120, 214, 90, 257, 3, 173, 227, 155, 97, 88, 13,
77, 160, 146, 70, 11, 89, 140, 208, 156, 46, 79, 98, 218, 14,
112, 183, 190, 123, 235, 44, 163, 147, 157, 275, 250})));
delete S;
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"024",
"perm. Conway group Co3 (alt.) (order 495766656000) ",
"[quick][schreier-sims][no-valgrind]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 553;
auto S = new SchreierSims();
using Perm = std::remove_pointer::type::element_type;
S->add_generator(Perm(
{0, 3, 4, 5, 6, 1, 2, 10, 12, 14, 16, 18, 20, 21,
23, 25, 7, 27, 29, 31, 8, 34, 36, 9, 39, 41, 43, 45,
47, 11, 50, 52, 54, 56, 13, 59, 61, 63, 64, 66, 67, 15,
70, 71, 73, 17, 76, 78, 80, 81, 83, 84, 19, 87, 88, 90,
92, 94, 95, 97, 99, 22, 102, 104, 105, 93, 24, 107, 109, 110,
112, 26, 115, 117, 119, 120, 122, 124, 28, 127, 129, 130, 118, 30,
132, 134, 135, 137, 32, 139, 141, 143, 33, 145, 147, 149, 150, 35,
152, 154, 156, 155, 157, 159, 37, 38, 162, 40, 165, 167, 169, 121,
42, 173, 174, 176, 178, 44, 180, 182, 184, 185, 46, 186, 151, 189,
188, 190, 192, 48, 49, 195, 51, 198, 200, 202, 96, 53, 206, 208,
209, 55, 212, 214, 215, 65, 218, 57, 219, 58, 136, 77, 223, 225,
60, 227, 229, 62, 232, 234, 235, 236, 238, 240, 241, 243, 245, 68,
220, 69, 249, 250, 252, 254, 256, 257, 72, 260, 262, 263, 82, 266,
74, 267, 75, 111, 270, 272, 274, 276, 79, 279, 281, 282, 283, 285,
287, 288, 290, 292, 85, 268, 86, 296, 297, 222, 300, 302, 89, 304,
172, 306, 286, 308, 91, 231, 312, 314, 316, 317, 318, 320, 258, 98,
322, 324, 325, 101, 328, 100, 330, 144, 331, 333, 103, 336, 338, 340,
106, 177, 342, 344, 346, 108, 348, 350, 352, 353, 265, 310, 355, 207,
210, 357, 113, 359, 114, 361, 205, 363, 239, 364, 116, 278, 368, 301,
371, 372, 373, 375, 123, 376, 378, 379, 126, 382, 125, 384, 179, 385,
387, 128, 390, 392, 394, 131, 142, 396, 307, 399, 133, 401, 403, 405,
406, 217, 366, 408, 255, 409, 138, 248, 251, 412, 140, 414, 415, 197,
418, 420, 170, 397, 423, 424, 295, 425, 146, 148, 168, 246, 391, 381,
380, 429, 153, 430, 271, 432, 434, 435, 436, 158, 438, 400, 440, 442,
160, 269, 161, 305, 444, 445, 163, 446, 164, 448, 450, 280, 451, 386,
166, 388, 319, 455, 457, 171, 327, 458, 460, 298, 462, 175, 464, 465,
466, 468, 203, 343, 471, 472, 473, 181, 183, 201, 293, 337, 326, 477,
187, 478, 224, 480, 482, 483, 417, 191, 485, 347, 487, 489, 193, 221,
194, 362, 491, 492, 196, 493, 494, 496, 233, 497, 332, 199, 334, 374,
501, 503, 204, 504, 506, 411, 507, 329, 339, 211, 428, 277, 213, 511,
512, 419, 513, 216, 515, 437, 516, 427, 517, 488, 226, 519, 356, 345,
228, 413, 230, 315, 402, 490, 404, 377, 521, 522, 237, 453, 367, 476,
433, 449, 242, 244, 525, 341, 474, 247, 422, 518, 253, 459, 528, 461,
529, 383, 393, 259, 261, 531, 524, 467, 532, 264, 534, 484, 535, 475,
508, 441, 273, 537, 321, 398, 275, 463, 370, 349, 443, 351, 323, 538,
539, 284, 499, 311, 481, 495, 289, 291, 523, 395, 426, 294, 470, 536,
299, 505, 542, 303, 447, 543, 510, 421, 309, 456, 452, 313, 500, 416,
354, 545, 520, 335, 486, 533, 365, 514, 530, 547, 358, 360, 546, 469,
502, 498, 369, 454, 407, 549, 389, 439, 509, 550, 410, 540, 544, 431,
526, 551, 548, 479, 552, 527, 541}));
S->add_generator(Perm(
{0, 2, 1, 4, 3, 7, 8, 9, 11, 13, 15, 17, 19, 5,
22, 24, 26, 6, 28, 30, 32, 33, 35, 37, 38, 40, 42, 44,
46, 48, 49, 51, 53, 55, 57, 58, 60, 62, 10, 65, 25, 68,
69, 54, 72, 74, 75, 77, 79, 12, 82, 31, 85, 86, 43, 89,
91, 93, 14, 96, 98, 100, 101, 103, 81, 39, 106, 34, 108, 16,
111, 113, 114, 116, 118, 18, 121, 123, 125, 126, 128, 64, 50, 131,
45, 133, 20, 136, 138, 21, 140, 142, 144, 67, 146, 148, 59, 122,
151, 153, 155, 23, 127, 158, 160, 152, 161, 163, 164, 166, 168, 170,
171, 172, 27, 175, 177, 179, 84, 181, 183, 76, 97, 154, 187, 188,
29, 102, 191, 193, 186, 194, 196, 197, 199, 201, 203, 204, 205, 207,
95, 210, 211, 213, 92, 216, 217, 182, 90, 220, 221, 36, 222, 224,
47, 226, 228, 230, 231, 233, 112, 232, 237, 239, 41, 242, 244, 246,
110, 247, 248, 104, 251, 253, 255, 120, 258, 259, 261, 117, 264, 265,
147, 115, 268, 269, 252, 271, 273, 275, 277, 278, 280, 137, 279, 284,
286, 52, 289, 291, 293, 135, 294, 295, 129, 298, 299, 301, 256, 303,
305, 56, 200, 307, 309, 310, 311, 313, 315, 134, 312, 319, 321, 270,
302, 323, 61, 326, 327, 329, 157, 63, 66, 332, 334, 335, 337, 339,
285, 341, 320, 343, 345, 347, 267, 349, 351, 290, 70, 354, 317, 71,
356, 297, 358, 314, 208, 360, 362, 73, 167, 344, 365, 366, 367, 369,
370, 109, 368, 374, 223, 359, 377, 78, 380, 381, 383, 190, 80, 83,
386, 388, 389, 391, 393, 238, 395, 375, 397, 398, 400, 219, 402, 404,
243, 87, 407, 372, 88, 250, 410, 357, 99, 411, 413, 384, 363, 416,
417, 419, 421, 422, 420, 94, 409, 414, 426, 206, 218, 427, 387, 105,
227, 428, 225, 241, 424, 431, 433, 371, 176, 418, 437, 429, 439, 441,
346, 423, 396, 443, 325, 107, 430, 340, 447, 445, 449, 202, 350, 452,
453, 260, 454, 234, 456, 401, 130, 139, 459, 124, 461, 463, 330, 306,
436, 467, 469, 470, 468, 119, 464, 474, 173, 266, 475, 333, 274, 476,
272, 288, 472, 479, 481, 316, 141, 466, 484, 477, 486, 488, 399, 471,
342, 490, 379, 132, 478, 394, 492, 495, 169, 403, 498, 499, 212, 500,
281, 502, 348, 174, 505, 487, 262, 508, 318, 509, 143, 510, 493, 462,
149, 480, 145, 514, 322, 511, 276, 150, 324, 287, 518, 156, 263, 328,
300, 483, 520, 159, 390, 353, 257, 519, 304, 162, 457, 165, 523, 178,
364, 485, 524, 521, 507, 408, 352, 501, 526, 473, 516, 482, 527, 440,
214, 517, 373, 530, 446, 412, 184, 432, 180, 533, 376, 531, 229, 185,
378, 240, 536, 189, 215, 382, 254, 435, 192, 336, 406, 209, 537, 361,
195, 503, 198, 525, 308, 438, 512, 538, 529, 355, 405, 455, 540, 425,
535, 434, 541, 245, 442, 496, 494, 491, 415, 532, 236, 534, 544, 489,
392, 235, 448, 451, 546, 385, 465, 331, 249, 460, 458, 292, 450, 444,
513, 283, 515, 548, 338, 282, 497, 543, 296, 506, 504, 550, 528, 549,
547, 551, 542, 545, 552, 522, 539}));
REQUIRE(S->size() == static_cast(495766656000));
delete S;
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"025",
"perm. Suzuki group (order 448345497600)",
"[no-valgrind][quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 1783;
auto S = new SchreierSims();
using Perm = std::remove_pointer::type::element_type;
S->add_generator(Perm(
{0, 926, 1366, 1336, 1696, 1688, 610, 1412, 1390, 374, 1774, 1572,
1588, 1690, 1127, 616, 197, 240, 761, 935, 301, 1776, 1078, 23,
588, 1388, 799, 69, 1318, 839, 438, 517, 1510, 33, 1241, 611,
843, 791, 1526, 162, 1053, 474, 706, 1012, 1076, 739, 556, 937,
296, 1755, 208, 151, 225, 883, 952, 1405, 149, 396, 1781, 949,
181, 1008, 1529, 63, 743, 243, 500, 288, 1027, 27, 1579, 723,
1622, 1172, 1710, 1179, 1328, 1377, 638, 217, 356, 986, 1183, 519,
1203, 377, 241, 294, 1484, 1198, 717, 630, 311, 481, 1252, 95,
213, 118, 280, 823, 247, 786, 726, 721, 1750, 1369, 367, 325,
334, 238, 573, 427, 1525, 830, 1278, 600, 912, 1536, 97, 119,
828, 1226, 1555, 1550, 410, 1761, 148, 522, 928, 1338, 888, 161,
797, 1075, 1176, 1769, 840, 1272, 869, 1574, 462, 732, 865, 495,
1586, 223, 1590, 375, 126, 56, 1745, 51, 546, 488, 154, 1108,
1652, 443, 1051, 1122, 1732, 131, 39, 1212, 609, 192, 333, 1110,
446, 340, 922, 613, 1514, 1573, 399, 1775, 1042, 363, 646, 1339,
1770, 60, 1262, 467, 793, 496, 528, 430, 858, 661, 405, 838,
165, 980, 552, 606, 947, 16, 568, 401, 1468, 1143, 1589, 1503,
1044, 720, 1599, 1235, 50, 985, 1493, 1378, 957, 96, 1628, 1089,
1749, 79, 738, 835, 1634, 368, 1006, 145, 1606, 52, 1054, 1242,
964, 774, 1251, 1661, 579, 1354, 341, 1100, 837, 1610, 109, 862,
17, 86, 392, 65, 788, 746, 1545, 100, 1679, 735, 1167, 1723,
523, 1639, 1694, 1605, 718, 433, 1553, 815, 1568, 939, 1289, 1223,
1061, 946, 1672, 1535, 1299, 729, 740, 1752, 1020, 1418, 1132, 1773,
887, 329, 429, 702, 98, 1511, 1446, 619, 898, 518, 801, 369,
67, 992, 466, 1146, 960, 318, 87, 1569, 48, 472, 304, 493,
780, 20, 1116, 593, 298, 1625, 944, 307, 545, 1505, 457, 92,
1022, 1546, 768, 1415, 1693, 543, 293, 625, 492, 1428, 1296, 1292,
680, 107, 1576, 1542, 436, 277, 1455, 744, 1285, 166, 108, 800,
1213, 458, 1441, 1169, 169, 234, 1356, 449, 1206, 1135, 1374, 1248,
417, 695, 594, 1219, 395, 1683, 1626, 1598, 80, 491, 851, 787,
431, 582, 1671, 177, 1221, 758, 917, 106, 221, 287, 1105, 1236,
1325, 539, 9, 147, 1200, 85, 1417, 875, 426, 1346, 587, 1192,
813, 802, 1410, 1365, 550, 1364, 475, 423, 242, 1692, 479, 352,
57, 525, 1580, 174, 1281, 199, 1102, 1471, 1189, 190, 1751, 1190,
658, 1259, 124, 411, 1298, 1389, 1582, 896, 1700, 348, 1277, 520,
731, 982, 1623, 391, 1578, 1072, 380, 111, 1085, 278, 187, 360,
1077, 257, 1400, 967, 328, 1015, 30, 1125, 979, 1350, 455, 157,
1187, 1184, 168, 694, 654, 343, 1335, 831, 1643, 1063, 1368, 442,
688, 310, 337, 1007, 1396, 586, 140, 1243, 1091, 1495, 290, 183,
1230, 469, 750, 784, 297, 808, 41, 390, 592, 1344, 524, 394,
480, 93, 1757, 1343, 1725, 961, 1633, 508, 153, 1040, 864, 357,
320, 299, 1011, 143, 185, 549, 1759, 1552, 66, 557, 1577, 1268,
1004, 642, 1109, 1095, 487, 620, 510, 1161, 736, 715, 704, 834,
971, 31, 285, 83, 419, 1596, 127, 252, 478, 397, 1250, 853,
186, 1113, 551, 760, 1332, 1779, 910, 535, 1523, 1469, 712, 373,
585, 945, 1607, 317, 709, 308, 152, 663, 1275, 497, 388, 530,
194, 558, 1066, 969, 46, 501, 553, 1119, 993, 1740, 1150, 1258,
873, 1686, 759, 657, 198, 956, 936, 1720, 766, 110, 1482, 1649,
1019, 859, 1363, 232, 1018, 621, 361, 659, 1559, 540, 461, 382,
24, 902, 1571, 1462, 476, 303, 350, 1651, 675, 1403, 725, 1048,
115, 1129, 927, 1068, 1302, 1156, 195, 1512, 1608, 164, 6, 35,
1098, 171, 1300, 1079, 15, 966, 1486, 283, 509, 581, 754, 1090,
1566, 319, 1130, 1456, 1039, 1762, 91, 1084, 1411, 1009, 730, 1327,
1501, 814, 78, 1765, 640, 1508, 505, 643, 924, 1287, 178, 1297,
1440, 1164, 1506, 1246, 1001, 1768, 448, 655, 842, 567, 408, 583,
1204, 189, 1031, 547, 1430, 1467, 1715, 890, 1731, 1474, 1756, 1271,
1630, 1408, 881, 596, 1530, 1322, 1584, 930, 324, 681, 1101, 1466,
792, 1291, 1205, 1117, 456, 1123, 915, 948, 1443, 1669, 447, 349,
974, 1283, 900, 1734, 1112, 1705, 279, 876, 514, 1237, 42, 1653,
1670, 544, 1153, 1025, 538, 1301, 1321, 513, 1663, 90, 256, 763,
205, 103, 1724, 71, 891, 598, 102, 905, 773, 269, 634, 420,
141, 1228, 1666, 249, 512, 999, 218, 45, 270, 1464, 1667, 64,
331, 809, 245, 1128, 1660, 1706, 470, 1431, 1217, 1279, 622, 1662,
1477, 1516, 365, 566, 531, 18, 1207, 719, 1028, 806, 572, 1406,
314, 1637, 1222, 1245, 1094, 728, 229, 775, 866, 1029, 1185, 1249,
300, 1502, 1280, 1708, 471, 962, 101, 359, 244, 973, 1311, 37,
684, 184, 794, 846, 1052, 132, 820, 26, 335, 286, 385, 824,
989, 1445, 765, 1640, 473, 745, 1358, 1707, 1587, 384, 637, 259,
1449, 1736, 1157, 1675, 798, 1379, 844, 99, 803, 1433, 1611, 1380,
120, 832, 113, 451, 829, 1037, 515, 219, 1170, 236, 191, 29,
136, 919, 656, 36, 822, 940, 795, 1106, 1058, 913, 863, 358,
1617, 527, 1778, 1498, 1677, 1729, 188, 577, 1737, 959, 239, 850,
490, 142, 776, 1017, 904, 138, 925, 1453, 1155, 564, 972, 379,
703, 995, 970, 1470, 1404, 674, 1032, 53, 1713, 1728, 1307, 276,
130, 1427, 667, 724, 1261, 893, 1333, 1544, 415, 1414, 284, 1452,
698, 997, 589, 1370, 868, 727, 1632, 1465, 1444, 1081, 534, 1227,
116, 849, 1121, 690, 1551, 366, 1103, 841, 1320, 1730, 170, 1210,
644, 870, 1, 602, 128, 1485, 679, 1648, 1162, 1655, 934, 19,
570, 47, 1305, 261, 845, 1093, 1744, 1293, 306, 541, 265, 196,
691, 59, 1303, 1392, 54, 1522, 1138, 1416, 569, 212, 1402, 861,
292, 485, 785, 1188, 228, 1458, 617, 435, 1527, 555, 878, 516,
874, 789, 696, 1255, 1564, 1483, 1533, 440, 193, 1581, 421, 1460,
1082, 209, 81, 1664, 1211, 804, 1432, 1005, 289, 560, 1673, 877,
1615, 901, 1254, 737, 1375, 652, 1064, 1196, 504, 991, 222, 459,
61, 633, 1438, 494, 43, 1434, 1014, 437, 1602, 867, 580, 576,
272, 1743, 312, 1257, 1086, 711, 1202, 68, 764, 777, 1083, 662,
882, 1238, 1034, 1681, 1036, 833, 1647, 628, 489, 1140, 176, 1420,
204, 1201, 1609, 1385, 599, 1763, 1348, 158, 796, 40, 226, 1540,
1515, 1627, 848, 1229, 1631, 264, 1087, 453, 1002, 1317, 554, 1638,
603, 1371, 1273, 1656, 425, 1703, 1247, 133, 44, 432, 22, 615,
1563, 909, 984, 1030, 631, 428, 1024, 1062, 1126, 215, 623, 464,
1507, 941, 772, 507, 1439, 1480, 612, 1738, 235, 682, 402, 918,
1104, 370, 847, 1680, 155, 506, 167, 1111, 700, 529, 1313, 1240,
302, 687, 1233, 559, 1163, 914, 159, 689, 1148, 439, 1088, 14,
747, 601, 626, 1195, 274, 1342, 1435, 345, 1547, 1312, 954, 1721,
1041, 1697, 1193, 201, 1620, 1319, 291, 1554, 1124, 1423, 562, 1450,
1152, 710, 1355, 872, 605, 818, 1209, 1614, 1476, 511, 932, 1120,
649, 1314, 1597, 250, 1391, 339, 836, 1687, 73, 1334, 1174, 1359,
134, 1711, 1436, 75, 1181, 1180, 1182, 82, 445, 778, 1186, 444,
963, 404, 407, 1357, 383, 1142, 1315, 1131, 1003, 1384, 89, 1777,
376, 1045, 1026, 84, 660, 686, 344, 762, 1329, 1158, 923, 988,
163, 336, 1214, 1603, 1270, 752, 1674, 351, 1726, 364, 770, 263,
1459, 1437, 121, 911, 733, 1059, 468, 1764, 1678, 1118, 1539, 207,
371, 705, 1033, 1447, 1115, 34, 227, 463, 1442, 771, 651, 1074,
347, 779, 526, 230, 94, 1717, 998, 975, 1518, 1023, 563, 409,
1282, 892, 182, 1422, 1294, 1487, 1601, 1665, 503, 1585, 1216, 671,
137, 1070, 1636, 548, 1767, 418, 114, 753, 782, 400, 1260, 697,
1489, 332, 1409, 645, 1504, 262, 1290, 685, 323, 943, 1264, 1488,
322, 647, 412, 268, 614, 713, 604, 950, 1337, 938, 1772, 886,
1593, 1641, 1654, 790, 1137, 1114, 1165, 1194, 1766, 1065, 28, 1145,
920, 714, 677, 1753, 1616, 372, 1531, 635, 76, 1208, 1397, 1448,
532, 894, 1173, 450, 3, 1304, 129, 179, 1519, 1642, 1133, 483,
477, 1746, 381, 1701, 1050, 1407, 441, 1457, 1500, 1401, 233, 1154,
342, 1191, 810, 1175, 1646, 1650, 1689, 578, 389, 387, 2, 1538,
454, 105, 903, 1069, 1695, 1386, 346, 1000, 1398, 77, 211, 821,
827, 1760, 1413, 1383, 1197, 1047, 1373, 1712, 25, 413, 8, 1168,
951, 1478, 1583, 1635, 460, 1330, 1376, 1520, 434, 1353, 958, 597,
880, 55, 767, 1349, 673, 1286, 386, 632, 7, 1382, 897, 315,
955, 378, 273, 1419, 1043, 1421, 1263, 1149, 1698, 1619, 1685, 889,
321, 1497, 664, 751, 990, 825, 1013, 1134, 1178, 1225, 1010, 1096,
648, 338, 1244, 692, 908, 805, 282, 1239, 1331, 816, 1151, 1532,
899, 871, 1558, 330, 627, 1351, 965, 1224, 983, 1490, 591, 1644,
741, 907, 683, 665, 200, 537, 879, 403, 1754, 1716, 669, 1612,
1160, 756, 1393, 1733, 1097, 1537, 574, 977, 88, 929, 618, 1265,
1295, 1284, 1461, 1714, 1704, 210, 1494, 465, 1541, 1429, 855, 1565,
1352, 636, 781, 203, 1288, 309, 650, 1092, 641, 1682, 32, 281,
607, 1524, 172, 1056, 757, 1517, 1256, 1340, 1399, 1556, 953, 536,
1513, 112, 38, 968, 1621, 62, 676, 1326, 1451, 978, 1534, 267,
117, 1481, 1367, 1234, 1055, 1496, 327, 1629, 895, 246, 313, 1136,
1684, 1549, 123, 916, 499, 258, 1147, 122, 1521, 1575, 1454, 584,
1780, 1657, 1562, 1080, 976, 1499, 624, 1591, 260, 295, 1748, 590,
11, 173, 139, 1557, 326, 502, 424, 70, 398, 981, 414, 1394,
678, 1269, 144, 812, 12, 202, 146, 1567, 1604, 1308, 1659, 1618,
521, 1166, 355, 206, 1719, 1266, 1016, 1215, 1592, 255, 224, 542,
608, 1046, 237, 826, 1475, 1702, 1159, 996, 1324, 852, 1595, 1425,
1144, 1528, 72, 422, 1624, 305, 354, 1057, 214, 1543, 672, 1060,
906, 486, 220, 1395, 1274, 769, 1067, 253, 807, 1309, 1341, 452,
1463, 1722, 1360, 1038, 931, 575, 1361, 595, 156, 707, 1310, 933,
1071, 1561, 1735, 1594, 748, 231, 755, 716, 987, 1267, 734, 742,
1668, 693, 708, 362, 266, 994, 1218, 819, 1782, 856, 1232, 248,
1107, 1035, 1509, 353, 1548, 1426, 565, 1171, 5, 1362, 13, 1747,
393, 316, 254, 1372, 4, 1141, 1424, 1742, 416, 1347, 1613, 1073,
1492, 701, 749, 811, 783, 1758, 74, 1177, 1387, 884, 1491, 666,
1473, 1253, 1739, 1600, 571, 1139, 1645, 251, 722, 484, 1220, 1771,
885, 857, 921, 668, 160, 1479, 699, 1658, 817, 860, 1099, 1718,
561, 1741, 1699, 1021, 942, 150, 1345, 1691, 1570, 216, 104, 406,
271, 1323, 1472, 49, 670, 482, 1709, 498, 1381, 125, 629, 1049,
1231, 639, 1316, 1276, 653, 135, 180, 1727, 1306, 275, 10, 175,
21, 1199, 854, 533, 1560, 58, 1676}));
S->add_generator(Perm(
{0, 28, 33, 42, 49, 51, 17, 59, 14, 70, 73, 81,
84, 87, 22, 99, 101, 26, 15, 117, 120, 124, 8, 133,
135, 140, 6, 145, 40, 156, 160, 72, 163, 47, 134, 179,
3, 186, 188, 192, 1, 57, 36, 4, 210, 213, 137, 2,
222, 43, 231, 68, 240, 247, 250, 89, 75, 255, 261, 79,
37, 276, 279, 287, 290, 299, 302, 305, 5, 311, 94, 324,
97, 98, 333, 331, 340, 342, 347, 7, 62, 108, 359, 361,
112, 372, 375, 104, 23, 329, 391, 399, 402, 407, 9, 416,
38, 31, 10, 18, 427, 131, 438, 445, 13, 448, 451, 453,
11, 462, 465, 468, 12, 304, 481, 486, 377, 150, 498, 500,
154, 511, 518, 521, 159, 529, 532, 535, 543, 545, 548, 16,
556, 88, 220, 171, 288, 274, 573, 576, 177, 588, 591, 289,
597, 184, 609, 616, 415, 623, 19, 632, 608, 638, 20, 647,
199, 658, 491, 21, 204, 674, 676, 208, 136, 690, 400, 700,
702, 707, 710, 24, 351, 118, 722, 725, 729, 25, 228, 229,
430, 745, 748, 752, 27, 759, 60, 182, 96, 774, 596, 779,
245, 787, 792, 795, 803, 806, 810, 29, 817, 621, 823, 828,
30, 837, 840, 843, 32, 848, 268, 859, 862, 272, 872, 587,
882, 141, 449, 612, 34, 785, 285, 896, 422, 708, 280, 904,
885, 35, 627, 297, 921, 926, 503, 933, 936, 940, 943, 864,
281, 82, 218, 905, 959, 39, 963, 318, 881, 975, 322, 986,
506, 991, 238, 41, 1001, 559, 1010, 1012, 525, 338, 293, 1029,
61, 1036, 1038, 193, 44, 622, 1052, 1054, 45, 1062, 46, 1065,
264, 76, 169, 80, 1073, 52, 1042, 875, 1030, 48, 1083, 355,
164, 738, 371, 1093, 1096, 1099, 1105, 1108, 1053, 50, 1117, 382,
1125, 605, 386, 1135, 603, 389, 1143, 1146, 1147, 1090, 1153, 397,
1157, 717, 571, 1164, 1166, 1171, 53, 1180, 561, 1022, 54, 1190,
414, 1110, 426, 452, 306, 55, 1204, 56, 1210, 425, 1218, 198,
1221, 1224, 58, 1228, 277, 1234, 436, 1245, 1247, 719, 1154, 443,
421, 515, 851, 883, 1268, 1271, 797, 63, 505, 215, 1276, 241,
1004, 460, 1281, 457, 1282, 670, 203, 352, 455, 138, 1290, 64,
473, 1301, 309, 477, 814, 619, 1313, 485, 1025, 244, 65, 358,
1329, 1333, 66, 798, 1338, 67, 441, 496, 1116, 671, 861, 107,
469, 69, 1352, 437, 857, 1273, 509, 1047, 1371, 1372, 1373, 516,
1382, 1387, 1144, 162, 246, 1393, 71, 528, 527, 1384, 1398, 1085,
1324, 995, 1086, 628, 639, 74, 1396, 541, 723, 982, 912, 1109,
1424, 1430, 1416, 1399, 77, 91, 554, 1440, 1168, 1443, 1286, 78,
691, 563, 1452, 1215, 566, 242, 1310, 570, 1207, 395, 119, 1464,
1104, 804, 553, 624, 83, 546, 583, 1468, 1296, 586, 1201, 1155,
574, 1474, 1077, 1476, 1478, 85, 1482, 1233, 1327, 86, 558, 1492,
1148, 607, 1497, 917, 1500, 1202, 614, 1507, 530, 1512, 1514, 816,
1515, 1187, 625, 821, 90, 1375, 173, 1519, 454, 533, 1521, 1123,
360, 1460, 878, 1531, 1534, 92, 1538, 645, 618, 1150, 974, 1388,
93, 1549, 654, 296, 1552, 656, 937, 1558, 600, 1149, 216, 95,
148, 665, 773, 1562, 669, 1496, 1568, 672, 1537, 1265, 1266, 1576,
730, 100, 934, 594, 1581, 684, 1311, 1072, 688, 562, 1590, 1469,
1592, 1445, 102, 630, 698, 1596, 1481, 781, 947, 1380, 1601, 103,
459, 1222, 105, 522, 1606, 405, 106, 1356, 1610, 369, 111, 1615,
720, 895, 409, 819, 784, 221, 889, 109, 1256, 332, 110, 357,
217, 219, 768, 736, 1427, 1314, 128, 1098, 951, 743, 1626, 756,
1138, 251, 1631, 113, 344, 1328, 1627, 114, 786, 758, 1504, 1308,
589, 1013, 115, 1640, 765, 898, 993, 116, 860, 999, 1255, 772,
564, 1633, 1417, 1103, 1334, 617, 1078, 227, 783, 1340, 1361, 1651,
1199, 712, 790, 1572, 1659, 1212, 1337, 1541, 1170, 121, 801, 802,
1665, 1463, 1467, 1198, 1302, 1261, 122, 1670, 123, 1046, 815, 939,
1049, 668, 1158, 1415, 1240, 125, 575, 1189, 1677, 126, 836, 1517,
127, 315, 834, 1434, 411, 1341, 362, 1516, 517, 606, 599, 1381,
129, 1264, 1689, 1169, 130, 1690, 855, 1470, 298, 901, 1075, 990,
641, 994, 132, 1317, 825, 343, 870, 1694, 793, 1484, 1693, 278,
1088, 766, 880, 1242, 1699, 1700, 185, 1546, 847, 1354, 408, 1439,
139, 307, 893, 1397, 263, 888, 886, 1248, 1448, 900, 1040, 664,
1557, 497, 1041, 580, 142, 1707, 143, 911, 1447, 1114, 716, 144,
1711, 919, 927, 270, 187, 1342, 1102, 626, 924, 1684, 1094, 1404,
682, 1582, 146, 714, 1501, 1674, 1493, 256, 1718, 147, 918, 1696,
1252, 1269, 653, 308, 149, 488, 949, 539, 800, 1254, 1502, 955,
732, 257, 1330, 151, 735, 581, 152, 267, 1681, 1641, 153, 1679,
968, 1035, 973, 972, 965, 962, 1064, 1128, 1283, 1284, 155, 981,
363, 992, 891, 283, 824, 1005, 335, 489, 964, 1617, 1232, 157,
158, 997, 961, 1423, 753, 869, 1236, 1006, 1736, 167, 1692, 1738,
366, 762, 967, 1632, 706, 1528, 161, 1612, 365, 1019, 1494, 487,
1023, 1374, 1733, 1027, 1300, 1473, 746, 742, 1034, 1367, 1551, 1365,
1749, 1067, 897, 165, 1425, 166, 1080, 1045, 1251, 1288, 1048, 1089,
1145, 1151, 844, 1653, 1413, 495, 168, 1747, 1060, 1032, 833, 807,
677, 1142, 252, 1437, 170, 1137, 526, 172, 1364, 178, 1598, 1654,
175, 954, 273, 197, 418, 174, 398, 1044, 1081, 1176, 629, 699,
176, 1346, 1559, 388, 631, 1008, 849, 873, 728, 749, 1229, 1636,
180, 1723, 1664, 1322, 1566, 1426, 709, 181, 1748, 1115, 1697, 1051,
183, 1106, 1122, 846, 1306, 667, 1339, 744, 537, 1131, 1238, 1635,
1002, 567, 464, 1705, 1140, 970, 439, 254, 957, 1018, 1113, 976,
1715, 189, 370, 190, 1249, 303, 582, 191, 1520, 1394, 796, 381,
1623, 1613, 354, 412, 1753, 958, 1230, 1275, 194, 1237, 1756, 1175,
195, 1758, 1272, 1179, 560, 711, 1181, 1569, 1028, 196, 1410, 662,
740, 703, 601, 1518, 1235, 275, 1141, 1195, 1420, 512, 1480, 348,
633, 200, 838, 201, 689, 763, 236, 1459, 504, 1766, 202, 1524,
243, 1535, 1213, 1347, 1216, 1177, 841, 852, 392, 551, 1709, 205,
687, 948, 1385, 206, 1752, 1495, 295, 207, 1076, 724, 1092, 928,
907, 1600, 209, 704, 1057, 1456, 1243, 1525, 540, 1461, 1280, 466,
577, 211, 1703, 1058, 212, 1671, 858, 1629, 747, 519, 1260, 513,
1603, 265, 403, 914, 214, 1644, 890, 1639, 387, 989, 1011, 1303,
1432, 1401, 1522, 979, 1498, 226, 330, 1586, 980, 1431, 555, 456,
1050, 223, 868, 1287, 1331, 1318, 224, 1604, 225, 1444, 374, 552,
284, 1294, 1159, 1768, 1298, 1039, 1550, 262, 1253, 867, 1761, 230,
1079, 1307, 1565, 1616, 1026, 1257, 1395, 482, 1548, 1775, 1435, 232,
1016, 692, 1223, 339, 592, 826, 233, 234, 1024, 1326, 1152, 1070,
1226, 930, 1722, 235, 1683, 922, 1345, 953, 310, 248, 524, 1716,
237, 695, 1556, 328, 1402, 239, 721, 771, 1597, 260, 1055, 1442,
1390, 1136, 1441, 1583, 760, 1350, 983, 754, 1436, 916, 1217, 1132,
673, 1450, 1363, 1770, 1594, 1020, 1370, 1369, 971, 1720, 508, 1172,
854, 613, 727, 249, 1378, 1655, 1160, 1490, 523, 1100, 1239, 1577,
420, 929, 1392, 1686, 1455, 507, 1087, 253, 1289, 1191, 1595, 1488,
1539, 1043, 379, 686, 1074, 484, 1751, 327, 1309, 1706, 585, 385,
696, 258, 1112, 1409, 259, 1726, 1412, 1673, 1295, 1267, 1698, 1773,
1418, 1735, 799, 1769, 1119, 1717, 1406, 902, 376, 1451, 1428, 1642,
1638, 1561, 542, 1250, 731, 1667, 977, 266, 463, 701, 845, 604,
1178, 1348, 1186, 620, 590, 1185, 1483, 269, 1704, 431, 1278, 835,
271, 770, 1429, 1743, 1391, 932, 1419, 336, 367, 1325, 856, 1376,
514, 1529, 1725, 830, 383, 1220, 1355, 1742, 282, 678, 1465, 776,
646, 471, 1422, 286, 394, 1728, 950, 884, 433, 446, 291, 1277,
938, 378, 292, 1646, 866, 1386, 1593, 853, 1353, 1173, 1031, 294,
1611, 1446, 1605, 461, 1710, 1297, 1591, 1772, 1332, 899, 419, 598,
634, 1299, 1661, 1408, 1188, 769, 300, 1527, 301, 1505, 1407, 1487,
1454, 1211, 423, 1745, 1687, 1542, 903, 1129, 996, 876, 909, 1621,
913, 1554, 693, 1066, 952, 813, 312, 404, 894, 1656, 313, 1258,
314, 1279, 1545, 1650, 1263, 1320, 683, 316, 1291, 350, 1485, 906,
1731, 317, 644, 1351, 569, 1544, 1014, 733, 353, 648, 319, 1009,
320, 1362, 718, 842, 1526, 321, 373, 578, 349, 1682, 1126, 685,
323, 1532, 944, 325, 326, 428, 892, 1411, 1130, 1746, 410, 960,
1708, 1165, 966, 782, 1740, 447, 429, 435, 334, 1082, 1509, 1734,
1587, 751, 337, 538, 805, 1645, 442, 579, 1584, 1270, 483, 1120,
341, 1713, 1292, 470, 1489, 879, 1741, 741, 1182, 1433, 557, 345,
942, 346, 865, 390, 863, 458, 1208, 984, 908, 1061, 1405, 475,
1293, 1139, 1316, 1466, 1563, 536, 850, 1588, 356, 734, 956, 1652,
368, 364, 1192, 1730, 1244, 1017, 444, 761, 1063, 1246, 396, 1567,
1285, 550, 1622, 1414, 697, 478, 1624, 777, 1658, 1630, 1007, 1084,
636, 1068, 1589, 1688, 1510, 829, 998, 380, 501, 1111, 547, 544,
1205, 1156, 1511, 572, 1647, 384, 1343, 839, 1513, 1479, 479, 778,
811, 1543, 1540, 1523, 1744, 393, 1777, 1648, 1462, 1649, 1127, 492,
1486, 1097, 417, 476, 874, 401, 615, 1193, 413, 871, 1174, 1379,
1573, 1457, 1662, 1574, 490, 1625, 642, 1508, 406, 1755, 1620, 635,
1214, 680, 595, 1458, 1669, 1774, 1134, 1227, 877, 780, 1184, 1231,
655, 969, 1675, 1037, 1579, 925, 1161, 1781, 1666, 1071, 568, 602,
424, 1680, 1200, 737, 775, 493, 1614, 1602, 1643, 1499, 1739, 467,
432, 1312, 694, 434, 1003, 1183, 1477, 593, 1091, 652, 440, 651,
1438, 480, 726, 1779, 1712, 549, 1564, 1760, 1194, 450, 1570, 920,
1421, 1359, 1503, 611, 1259, 818, 1724, 666, 1685, 1349, 1368, 1782,
715, 1506, 472, 1403, 474, 643, 1319, 681, 1225, 923, 1366, 1571,
1637, 494, 1599, 1729, 739, 831, 822, 1472, 1530, 1765, 988, 1678,
1449, 1608, 1321, 610, 499, 502, 1609, 1547, 649, 1101, 1672, 978,
1304, 827, 705, 1727, 1315, 915, 510, 1389, 1059, 1377, 534, 1780,
1219, 520, 1560, 660, 887, 1668, 1471, 531, 1274, 661, 1580, 1695,
1536, 1702, 1663, 1163, 820, 1107, 1197, 1719, 1767, 1203, 1000, 1778,
1121, 832, 985, 791, 1764, 1133, 565, 637, 1754, 1206, 788, 657,
584, 659, 1762, 1575, 755, 945, 1585, 931, 1033, 1262, 1167, 1021,
1453, 910, 1763, 1336, 1305, 1335, 1400, 1344, 1578, 1676, 1162, 640,
1196, 935, 650, 1618, 1619, 1383, 663, 1628, 808, 1771, 1657, 757,
1323, 675, 1357, 1360, 679, 1721, 1069, 1533, 1607, 1015, 1691, 1701,
1124, 812, 713, 1358, 941, 1737, 794, 1553, 1056, 750, 1209, 764,
767, 789, 809, 1491, 1776, 1555, 1714, 1757, 1660, 1118, 1759, 946,
1095, 987, 1750, 1634, 1241, 1475, 1732}));
REQUIRE(S->size() == static_cast(448345497600));
delete S;
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"026",
"perm. Fischer group Fi22 (order 64561751654400)",
"[standard][schreier-sims]") {
auto rg = ReportGuard(REPORT);
// Slower than GAP
constexpr size_t N = 3511;
auto S = new SchreierSims();
using Perm = std::remove_pointer::type::element_type;
S->add_generator(Perm(
{0, 524, 2, 789, 2130, 777, 491, 3059, 3096, 2636, 527, 11,
822, 3013, 14, 872, 2392, 2504, 108, 2816, 20, 3295, 851, 23,
2196, 1503, 2131, 2285, 1061, 1382, 174, 1063, 32, 3057, 490, 846,
827, 1494, 1640, 3025, 2769, 2858, 42, 1987, 237, 45, 1962, 3393,
1038, 2974, 50, 1272, 52, 3089, 425, 1109, 1275, 821, 1121, 2314,
638, 1900, 1649, 63, 64, 1132, 1370, 1590, 68, 2968, 2775, 71,
3423, 2393, 2154, 75, 1070, 3010, 2642, 79, 2135, 1764, 463, 83,
417, 2407, 3424, 2748, 3377, 1184, 776, 670, 2072, 653, 3183, 2690,
96, 1821, 98, 1427, 2804, 1028, 2873, 397, 1196, 207, 3108, 2619,
18, 2960, 110, 111, 2400, 2492, 245, 2216, 116, 3015, 632, 712,
3451, 2055, 3036, 2178, 124, 2418, 3030, 127, 1453, 732, 283, 3283,
273, 2183, 561, 135, 1936, 806, 571, 261, 1460, 669, 142, 1071,
1431, 145, 3252, 785, 1177, 1469, 327, 1116, 1863, 3087, 3298, 2215,
156, 2518, 3389, 1289, 160, 1967, 162, 1519, 164, 3210, 166, 3135,
2507, 169, 3236, 1659, 3403, 299, 30, 2365, 2082, 3080, 415, 1790,
180, 3359, 3028, 3014, 1876, 2774, 2151, 1444, 188, 1633, 190, 2808,
1326, 2401, 3308, 988, 1949, 2261, 198, 2246, 200, 2829, 202, 203,
204, 421, 3148, 105, 2958, 1489, 1542, 211, 814, 1166, 1231, 1334,
216, 217, 911, 624, 2306, 3055, 1573, 223, 687, 2649, 759, 3215,
2603, 229, 306, 368, 3195, 2689, 234, 1245, 2009, 44, 1777, 305,
2260, 3434, 1101, 3292, 1964, 114, 2032, 2014, 918, 249, 474, 1760,
252, 3119, 254, 1384, 3045, 2132, 3022, 825, 3051, 139, 1745, 263,
3257, 2647, 266, 1533, 268, 2849, 270, 2606, 866, 132, 1322, 1012,
1831, 2834, 694, 279, 2912, 2620, 689, 130, 3073, 1862, 286, 848,
1859, 289, 290, 291, 3297, 2593, 294, 2036, 2395, 339, 1675, 173,
3198, 1312, 3344, 3238, 2660, 239, 230, 739, 3490, 530, 952, 1521,
2880, 313, 2628, 905, 3507, 2101, 318, 1681, 2956, 1935, 2699, 1491,
953, 958, 326, 150, 1536, 2723, 2321, 1671, 2369, 1986, 2140, 1945,
2113, 3505, 556, 297, 1302, 1963, 1602, 1361, 1386, 345, 346, 371,
807, 2842, 973, 351, 885, 2719, 2561, 1441, 356, 1984, 358, 359,
803, 1403, 365, 3373, 1424, 362, 1359, 1508, 231, 1466, 2382, 347,
1566, 373, 2126, 375, 2991, 2718, 3035, 1451, 2920, 1750, 382, 1554,
384, 2493, 3040, 1767, 1692, 1068, 2021, 1565, 3110, 393, 3182, 1913,
1304, 103, 3340, 1197, 3294, 2514, 2687, 2836, 1141, 1828, 2851, 917,
1713, 409, 2973, 2773, 2417, 611, 1696, 178, 1890, 84, 1955, 3156,
1877, 205, 3240, 1513, 1162, 54, 426, 427, 2891, 3348, 1232, 630,
2979, 2162, 2817, 2992, 578, 1131, 3289, 813, 2397, 2819, 1472, 2665,
838, 1108, 3479, 2744, 3112, 950, 450, 888, 770, 479, 3181, 2462,
456, 542, 458, 3253, 3070, 3442, 3136, 82, 1179, 1225, 3031, 3127,
468, 1126, 783, 471, 2426, 473, 250, 2560, 2289, 477, 1150, 453,
2006, 481, 482, 2908, 484, 1784, 486, 2445, 2905, 1971, 34, 6,
492, 3027, 494, 3321, 3362, 709, 1161, 1260, 3438, 501, 2308, 503,
504, 505, 2041, 3245, 2771, 1813, 510, 623, 512, 2934, 2825, 515,
2931, 2743, 2473, 1135, 3388, 521, 2310, 717, 1, 525, 526, 10,
1709, 529, 309, 1013, 3432, 533, 1346, 3363, 765, 537, 3016, 2323,
3081, 541, 457, 543, 2494, 2923, 1376, 1761, 1866, 2508, 2040, 551,
1994, 1609, 3176, 3235, 338, 886, 3186, 2982, 2625, 134, 562, 563,
1707, 1477, 566, 567, 568, 1147, 570, 138, 2324, 2458, 2794, 1406,
1992, 577, 436, 579, 2480, 581, 582, 583, 2146, 3462, 1801, 587,
588, 2726, 2252, 2727, 1230, 593, 594, 2410, 3415, 856, 3171, 3456,
1096, 755, 3137, 2618, 1817, 2214, 1735, 2868, 608, 1549, 1788, 413,
2283, 1220, 3376, 615, 616, 617, 2906, 747, 3124, 826, 1010, 511,
219, 3023, 2278, 3139, 1855, 629, 431, 3293, 118, 796, 1606, 2052,
2529, 2338, 60, 2386, 2302, 1251, 642, 1823, 3497, 1966, 3416, 2631,
1570, 3333, 3190, 651, 2424, 93, 828, 2478, 1550, 1958, 658, 3160,
990, 1595, 2878, 1267, 793, 1835, 1564, 667, 3303, 141, 91, 1423,
993, 1119, 2759, 1942, 2350, 2919, 3046, 1128, 834, 681, 1358, 683,
3218, 3338, 2156, 224, 2137, 282, 2758, 1800, 1772, 2039, 278, 2481,
3209, 1861, 698, 2573, 2557, 2367, 702, 2199, 2616, 2045, 1931, 2909,
1204, 497, 3427, 2076, 119, 713, 714, 762, 716, 523, 718, 2864,
3206, 721, 722, 891, 2938, 3174, 2056, 727, 728, 2643, 730, 1829,
129, 2211, 1605, 735, 2785, 3169, 738, 307, 3009, 2892, 742, 1787,
744, 1098, 746, 619, 3260, 2074, 3012, 1222, 1909, 753, 3473, 601,
756, 757, 2525, 226, 3214, 2926, 715, 1380, 3287, 536, 1476, 919,
768, 889, 452, 2610, 2447, 773, 2972, 775, 90, 5, 778, 779,
1693, 781, 1325, 470, 1258, 147, 2016, 787, 1944, 3, 1163, 3018,
2187, 664, 1045, 2062, 633, 2528, 798, 1253, 2372, 801, 1281, 360,
2889, 3422, 137, 348, 2066, 2213, 810, 1397, 931, 439, 212, 1896,
2706, 817, 960, 819, 1537, 57, 12, 2870, 824, 259, 621, 36,
654, 2584, 830, 831, 832, 833, 680, 852, 3406, 837, 444, 839,
987, 2537, 1341, 843, 3384, 2688, 35, 2231, 287, 1144, 2364, 22,
835, 2389, 1922, 3185, 597, 1183, 858, 1889, 860, 3396, 2053, 2844,
2821, 3097, 272, 2253, 2127, 2930, 2205, 2501, 15, 873, 874, 2702,
876, 877, 1661, 2377, 1051, 1978, 882, 883, 908, 352, 557, 1102,
451, 769, 3159, 723, 1879, 893, 894, 1555, 1921, 1103, 898, 899,
1516, 1387, 1626, 2513, 3301, 315, 3350, 1187, 884, 909, 936, 218,
912, 3021, 2398, 2124, 1724, 407, 248, 767, 1716, 2442, 922, 3410,
2020, 2746, 1704, 2093, 928, 929, 930, 812, 1153, 1686, 1151, 1138,
910, 937, 1528, 1865, 3037, 3378, 3399, 2413, 944, 1229, 1685, 2818,
1799, 1324, 449, 2320, 310, 324, 954, 3092, 1703, 1878, 325, 3251,
818, 961, 962, 1571, 2900, 2259, 1379, 967, 2910, 1027, 1408, 971,
2035, 350, 1015, 1905, 1449, 3113, 978, 1295, 1425, 981, 2692, 3044,
984, 3417, 2133, 840, 195, 1321, 660, 1851, 1893, 672, 1130, 2847,
996, 1646, 2411, 3158, 1611, 2585, 2770, 2275, 3409, 1273, 2075, 1708,
1407, 1669, 622, 1459, 275, 531, 1014, 974, 1016, 1017, 1018, 3177,
1020, 1422, 3413, 1246, 3394, 1201, 1420, 969, 101, 1623, 3197, 1372,
3402, 2943, 1034, 1498, 1568, 1789, 48, 1039, 3047, 1041, 1042, 1285,
1044, 794, 1700, 2159, 2678, 1049, 1743, 880, 1297, 3157, 3200, 3327,
2312, 3062, 1058, 2648, 3421, 28, 1882, 31, 2102, 1065, 1858, 1067,
389, 3263, 76, 143, 1139, 1757, 2089, 2359, 1076, 3365, 1953, 2195,
1080, 1081, 3226, 2669, 1816, 3098, 1086, 2614, 2345, 1792, 3265, 1142,
1092, 2115, 2490, 1095, 600, 1097, 745, 3366, 2857, 242, 887, 897,
1104, 1562, 2929, 1107, 445, 55, 1552, 2258, 2422, 1113, 2284, 2977,
151, 3279, 1118, 673, 1445, 58, 2611, 2519, 2841, 1125, 469, 2043,
679, 1129, 994, 437, 65, 3472, 2371, 519, 1136, 1689, 935, 1072,
2896, 404, 1091, 2833, 849, 1247, 2280, 569, 1148, 1677, 478, 934,
1207, 932, 2299, 1155, 1674, 1157, 1846, 2083, 2731, 498, 424, 790,
3448, 1165, 213, 1167, 1168, 1169, 1170, 1171, 1208, 1812, 1517, 3420,
1176, 148, 2476, 464, 1319, 2331, 2136, 857, 89, 1215, 2177, 907,
2766, 1189, 2640, 3216, 3352, 2353, 1526, 3391, 104, 399, 2226, 1199,
2098, 1025, 2047, 1320, 708, 1487, 1912, 1152, 1172, 2532, 3061, 1328,
3499, 1213, 3437, 1185, 3048, 3168, 2155, 1656, 613, 2477, 751, 2434,
2884, 465, 2791, 2852, 3330, 945, 592, 214, 430, 2621, 2733, 3155,
1236, 1616, 1641, 2827, 3219, 1898, 1242, 2029, 1282, 235, 1023, 1145,
2262, 3380, 2370, 641, 1547, 799, 1437, 3364, 1509, 2176, 784, 2326,
499, 3116, 2850, 3481, 1402, 2576, 1266, 663, 3202, 2003, 2965, 2281,
51, 1005, 1350, 56, 1627, 1277, 1310, 1960, 3072, 802, 1244, 1283,
1284, 1043, 2291, 1639, 1288, 159, 3493, 3050, 2543, 1293, 2012, 979,
2713, 1052, 1679, 2071, 3225, 1762, 340, 2650, 396, 3334, 1306, 2235,
3447, 2073, 1278, 1652, 301, 1393, 1797, 1315, 2419, 2762, 2450, 1180,
1203, 989, 274, 1894, 949, 782, 192, 1399, 1211, 1329, 1957, 2962,
2034, 3228, 215, 2854, 3404, 3466, 3319, 3291, 1340, 842, 1342, 2347,
3006, 2598, 534, 2712, 3115, 2704, 1274, 2292, 1916, 1353, 2287, 2862,
2189, 2980, 682, 366, 2536, 343, 1362, 1363, 3024, 2559, 3485, 1367,
2489, 2679, 66, 1371, 1031, 1414, 1644, 2182, 546, 1377, 3100, 966,
763, 1906, 29, 3175, 255, 1385, 344, 901, 1388, 1389, 2768, 3132,
1392, 1313, 1781, 3005, 1673, 811, 1398, 1327, 3503, 2685, 1264, 361,
1404, 3114, 575, 1008, 970, 1409, 2595, 1411, 3085, 3020, 1373, 2387,
1416, 1417, 1418, 2166, 1026, 1421, 1021, 671, 364, 980, 2334, 99,
1428, 1429, 1672, 144, 2247, 1433, 1434, 2792, 2668, 1254, 1438, 3502,
2019, 355, 1442, 1819, 187, 1120, 2879, 1447, 2303, 976, 2317, 379,
2198, 128, 1454, 1485, 2753, 1457, 2463, 1011, 140, 3149, 3458, 1902,
1464, 3429, 369, 1467, 1468, 149, 1556, 1601, 442, 2388, 1560, 2000,
766, 565, 2894, 1970, 1480, 1481, 3026, 2005, 2809, 1455, 1486, 1205,
1488, 209, 3347, 323, 2128, 1871, 37, 1495, 1496, 3302, 1035, 1499,
2095, 3213, 3118, 25, 1504, 2491, 2959, 1806, 367, 1256, 3322, 2990,
1512, 423, 2680, 1814, 900, 1174, 1518, 163, 1574, 311, 1522, 1995,
3351, 2895, 1194, 3082, 938, 3058, 1775, 1636, 2815, 267, 3449, 1535,
328, 820, 1538, 2835, 1540, 2918, 210, 3326, 3487, 1545, 3343, 1252,
1887, 609, 656, 1551, 1110, 1589, 383, 895, 1470, 1631, 1852, 1559,
1474, 1561, 1105, 1941, 666, 391, 372, 2351, 1036, 2406, 648, 963,
1572, 222, 1520, 1608, 2629, 2193, 3361, 1952, 1596, 2637, 1582, 2732,
1584, 1722, 1586, 1587, 1588, 1553, 67, 3262, 1650, 2695, 1594, 661,
1580, 1834, 1598, 2749, 2218, 1471, 342, 1603, 2957, 734, 634, 1744,
1575, 553, 1610, 1000, 1612, 2944, 1765, 1615, 1237, 2589, 1618, 3304,
1620, 2772, 3001, 1029, 1624, 1625, 902, 1276, 2666, 2033, 1630, 1557,
1632, 189, 1807, 2158, 1531, 3258, 1702, 1287, 38, 1238, 1642, 1647,
1374, 1645, 997, 1643, 1648, 62, 1592, 2112, 1311, 2380, 3280, 2148,
1219, 3443, 1885, 171, 1660, 878, 2446, 2813, 2309, 1950, 1666, 2781,
1926, 1009, 2145, 331, 1430, 1396, 1156, 298, 1918, 1149, 2935, 1298,
1680, 319, 2638, 2673, 1684, 946, 933, 2339, 2186, 1137, 2191, 2787,
388, 780, 1741, 1695, 414, 1888, 2684, 1699, 1046, 1972, 1638, 956,
926, 1705, 2617, 564, 1007, 528, 2855, 1711, 2266, 408, 3066, 3099,
920, 1997, 3275, 1872, 2984, 1721, 1585, 1897, 916, 1725, 1726, 1727,
1756, 1729, 3203, 1731, 2736, 3360, 1892, 606, 1736, 1737, 1738, 2945,
3341, 1694, 1742, 1050, 1607, 262, 3288, 2222, 1748, 3232, 381, 2729,
3141, 3128, 1754, 1755, 1728, 1073, 1758, 1759, 251, 547, 1301, 2170,
81, 1614, 3426, 387, 3370, 1769, 3480, 1771, 692, 1773, 2175, 1530,
2947, 238, 2171, 2119, 2304, 1394, 2928, 1783, 485, 2663, 1786, 743,
610, 1037, 179, 2467, 1089, 2533, 1794, 1795, 1796, 1314, 2555, 948,
691, 586, 2921, 1803, 1804, 1805, 1507, 1634, 2658, 3064, 2898, 1811,
1173, 509, 1515, 3468, 1084, 604, 1818, 1443, 1820, 97, 2233, 643,
1824, 1825, 2343, 2812, 405, 731, 1830, 276, 2683, 1833, 1597, 665,
2703, 3060, 2234, 3034, 1840, 2153, 1842, 2567, 1844, 1845, 1158, 1847,
1925, 2025, 1850, 991, 1558, 1853, 2720, 628, 2192, 1857, 1066, 288,
3095, 697, 285, 152, 1864, 939, 548, 1867, 1868, 2756, 2571, 1493,
1719, 2267, 2438, 3450, 184, 420, 957, 892, 2883, 1924, 1062, 3126,
2042, 1658, 2142, 1548, 1697, 859, 416, 2163, 1734, 992, 1323, 1895,
815, 1723, 1241, 2988, 61, 2562, 1463, 1969, 1904, 975, 1381, 2866,
2544, 752, 3277, 2811, 1206, 395, 2783, 2487, 1352, 3431, 1676, 2644,
1920, 896, 854, 3247, 1881, 1848, 1668, 2010, 1928, 3077, 2523, 706,
2157, 3273, 2778, 321, 136, 2444, 3315, 1939, 1940, 1563, 675, 2439,
788, 335, 2325, 3227, 1948, 196, 1665, 3332, 1579, 1078, 3408, 418,
2933, 1330, 657, 3111, 1279, 3356, 46, 341, 244, 1965, 645, 161,
1968, 1903, 1479, 489, 1701, 2856, 2989, 3266, 1976, 1977, 881, 2298,
3331, 3397, 2028, 1983, 357, 1985, 333, 43, 1988, 1989, 2767, 2107,
576, 3267, 552, 1523, 3131, 1717, 3400, 3088, 1475, 3017, 2527, 1269,
3163, 1483, 480, 2007, 3278, 236, 1927, 2061, 1294, 2013, 247, 3476,
786, 2017, 2018, 1440, 924, 390, 2569, 3101, 2255, 1849, 2026, 2046,
1982, 1243, 2290, 2993, 246, 1629, 1332, 972, 295, 2037, 2038, 693,
550, 506, 1884, 1127, 3459, 705, 2027, 1202, 3311, 2144, 3282, 2220,
635, 862, 2566, 121, 726, 2057, 3482, 2169, 2348, 2011, 795, 2063,
3033, 3296, 808, 2067, 3065, 2069, 2828, 1299, 92, 1309, 749, 1006,
711, 2077, 2078, 2510, 2206, 2081, 176, 1159, 2139, 2085, 2700, 2224,
2535, 1074, 2313, 2091, 2381, 927, 2094, 1500, 2096, 2826, 1200, 2099,
2615, 317, 1064, 2538, 2552, 2597, 2106, 1991, 2763, 2202, 2360, 2111,
1651, 336, 2114, 1093, 2116, 2890, 3381, 1779, 2645, 2714, 2122, 2123,
915, 3140, 374, 868, 1492, 2129, 4, 26, 257, 986, 2134, 80,
1182, 688, 2138, 2084, 334, 3193, 1886, 2655, 2049, 1670, 584, 2147,
1655, 3474, 2150, 186, 2914, 1841, 74, 1218, 686, 1932, 1635, 1047,
2160, 2795, 433, 1891, 2626, 2605, 1419, 2742, 3076, 2059, 1763, 1778,
2172, 2188, 2174, 1774, 1257, 1186, 123, 2822, 2564, 2181, 1375, 133,
2969, 2185, 1688, 792, 2173, 1356, 2190, 1690, 1856, 1577, 2357, 1079,
24, 2197, 1452, 703, 2981, 2201, 2109, 2203, 3509, 870, 2080, 2207,
3405, 3102, 3191, 733, 2212, 809, 605, 155, 115, 2468, 1600, 2219,
2051, 2936, 1747, 2551, 2087, 3506, 1198, 2227, 2228, 2229, 2639, 847,
2755, 1822, 1838, 1307, 2236, 2797, 2531, 2239, 2452, 2241, 2405, 2243,
2244, 2599, 199, 1432, 2248, 2249, 2250, 2863, 590, 867, 2254, 2024,
2256, 3411, 1111, 965, 240, 197, 1248, 2263, 3056, 2940, 1712, 1873,
2268, 2591, 2911, 2271, 2272, 2273, 2764, 1003, 2329, 3371, 626, 2971,
1146, 1271, 2282, 612, 1114, 27, 2861, 1354, 3117, 476, 2030, 1286,
1351, 3488, 2488, 3196, 3038, 3342, 1979, 1154, 2300, 3084, 640, 1448,
1780, 3105, 220, 3071, 502, 1664, 522, 2872, 1056, 2090, 59, 2654,
2316, 1450, 2318, 2319, 951, 330, 2451, 539, 572, 1946, 1259, 3063,
2786, 2276, 2330, 1181, 2332, 2579, 1426, 2335, 2484, 2337, 637, 1687,
2340, 2341, 3079, 1826, 2344, 1088, 2346, 1343, 2060, 2349, 676, 1567,
2352, 1193, 2354, 2355, 2563, 2194, 2358, 1075, 2110, 3372, 3425, 2363,
850, 175, 2366, 701, 2368, 332, 1250, 1134, 800, 2423, 2374, 3281,
2506, 879, 2378, 3104, 1653, 2092, 370, 2485, 2384, 2385, 639, 1415,
1473, 853, 2390, 2697, 16, 73, 3246, 296, 3285, 440, 914, 2399,
112, 193, 2902, 2466, 3053, 2242, 1569, 85, 3457, 2409, 595, 998,
3368, 943, 2464, 2521, 2503, 412, 125, 1316, 2420, 2425, 1112, 2373,
652, 2421, 472, 2472, 2428, 3325, 2952, 2460, 3008, 3300, 1223, 2541,
2436, 3134, 1874, 1943, 2440, 2600, 921, 2922, 1937, 487, 1662, 772,
2454, 3433, 1318, 2322, 2240, 2499, 2448, 2932, 3069, 2457, 573, 3339,
2431, 2927, 455, 1458, 2414, 2832, 2403, 1791, 2217, 2469, 2470, 2471,
2427, 518, 2474, 2475, 1178, 1221, 655, 2479, 580, 695, 2482, 2670,
2336, 2383, 2486, 1915, 2294, 1368, 1094, 1505, 113, 385, 544, 2495,
2887, 2497, 3207, 2453, 2500, 871, 3002, 2416, 17, 3043, 2376, 168,
549, 3049, 2079, 3454, 2512, 903, 401, 2661, 3491, 2517, 157, 1123,
2520, 2415, 2522, 1930, 3032, 758, 3355, 2002, 797, 636, 2985, 2238,
1209, 1793, 2747, 2088, 1360, 841, 2103, 3153, 2540, 2435, 3029, 1292,
1908, 2545, 2546, 2547, 3483, 2549, 3354, 2223, 2104, 2553, 2554, 1798,
2556, 700, 2784, 1365, 475, 354, 1901, 2356, 2180, 2716, 2054, 1843,
2901, 2022, 2570, 1870, 2572, 699, 2574, 2575, 1265, 3165, 2578, 2333,
2707, 2581, 2582, 2602, 829, 1001, 2586, 2587, 3143, 1617, 2846, 2269,
2592, 293, 2823, 1410, 2596, 2105, 1345, 2245, 2441, 2961, 2583, 228,
2604, 2165, 271, 2607, 2608, 2609, 771, 1122, 3349, 2613, 1087, 2100,
704, 1706, 603, 107, 281, 1233, 2622, 3455, 2624, 560, 2164, 2627,
314, 1576, 2630, 647, 2632, 2633, 3230, 2635, 9, 1581, 1682, 2230,
1190, 2667, 78, 729, 1919, 2120, 2646, 265, 1059, 225, 1303, 3130,
2843, 3107, 2315, 2143, 2656, 2657, 1808, 2721, 304, 2515, 2662, 1785,
2664, 443, 1628, 2641, 1436, 1083, 2483, 2853, 2672, 1683, 2674, 2978,
2676, 3248, 1048, 1369, 1514, 3313, 3264, 1832, 1698, 1401, 2686, 402,
845, 233, 95, 2691, 982, 2946, 2694, 1593, 3353, 2391, 2698, 322,
2086, 3395, 875, 1836, 1349, 2705, 816, 2580, 3387, 2709, 2710, 3328,
1347, 1296, 2121, 2715, 2565, 2999, 377, 353, 1854, 2659, 2722, 329,
2724, 2725, 589, 591, 2728, 1751, 3145, 1160, 1583, 1234, 2734, 3469,
1732, 2871, 3484, 2739, 3310, 2964, 2167, 517, 447, 2745, 925, 2534,
87, 1599, 3379, 2796, 3106, 1456, 2760, 2232, 1869, 3414, 690, 674,
2754, 2802, 1317, 2108, 2274, 2765, 1188, 1990, 1390, 40, 1002, 508,
1621, 411, 185, 70, 2776, 2997, 1934, 2779, 2780, 1667, 2782, 1914,
2558, 736, 2328, 1691, 2788, 2937, 2790, 1226, 1435, 2793, 574, 2161,
2751, 2237, 2798, 2799, 3255, 3173, 2761, 2803, 100, 2805, 2897, 2807,
191, 1484, 2810, 1911, 1827, 1663, 2814, 1532, 19, 434, 947, 441,
2820, 864, 2179, 2594, 2824, 514, 2097, 1239, 2070, 201, 2830, 3256,
2465, 1143, 277, 1539, 403, 2837, 3375, 3220, 2840, 1124, 349, 2652,
863, 3486, 2590, 995, 2848, 269, 1262, 406, 1227, 2671, 1335, 1710,
1973, 1100, 41, 2859, 2860, 2286, 1355, 2251, 719, 3501, 1907, 2867,
607, 2963, 823, 2737, 2311, 102, 2975, 2875, 2876, 2877, 662, 1446,
312, 2881, 3446, 1880, 1224, 3221, 2886, 2496, 2888, 804, 2117, 428,
741, 2893, 1478, 1525, 1140, 2806, 1810, 3357, 964, 2568, 2402, 2996,
2904, 488, 618, 2907, 483, 707, 968, 2270, 280, 3103, 2152, 3090,
2916, 2917, 1541, 677, 380, 1802, 2443, 545, 2967, 2925, 761, 2461,
1782, 1106, 869, 516, 2455, 1956, 513, 1678, 2221, 2789, 724, 3374,
2265, 3467, 3307, 1033, 1613, 1739, 2693, 1776, 2948, 2949, 3270, 3316,
2430, 2953, 2954, 3299, 320, 1604, 208, 1506, 109, 2601, 1331, 2869,
2741, 1270, 2966, 2924, 69, 2184, 3234, 2279, 774, 410, 49, 2874,
2976, 1115, 2675, 432, 1357, 2200, 559, 3383, 1720, 2530, 2986, 2987,
1899, 1974, 1511, 376, 435, 2031, 2994, 2995, 2903, 2777, 3439, 2717,
3000, 1622, 2502, 3286, 3004, 1395, 1344, 3007, 2432, 740, 77, 3011,
750, 13, 183, 117, 538, 2001, 791, 3244, 1413, 913, 258, 625,
1364, 39, 1482, 493, 182, 2542, 126, 466, 2524, 2064, 1839, 378,
122, 940, 2296, 3039, 386, 3041, 3042, 2505, 983, 256, 678, 1040,
1216, 2509, 1291, 260, 3052, 2404, 3054, 221, 2264, 33, 1529, 7,
1837, 1210, 1057, 2327, 1809, 2068, 1714, 3067, 3068, 2456, 460, 2307,
1280, 284, 3120, 3075, 2168, 1929, 3211, 2342, 177, 540, 1527, 3083,
2301, 1412, 3086, 153, 1999, 53, 2915, 3091, 955, 3093, 3162, 1860,
8, 865, 1085, 1715, 1378, 2023, 2209, 2913, 2379, 2305, 2752, 2653,
106, 3164, 392, 1959, 448, 977, 1405, 1348, 1261, 2288, 1502, 253,
3074, 3440, 3306, 3123, 620, 3125, 1883, 467, 1753, 3129, 2651, 1996,
1391, 3133, 2437, 167, 462, 602, 3249, 627, 2125, 1752, 3142, 2588,
3144, 2730, 3464, 3358, 206, 1461, 3150, 3154, 3152, 2539, 3151, 1235,
419, 1053, 999, 890, 659, 3161, 3094, 2004, 3109, 2577, 3166, 3167,
1217, 737, 3390, 598, 3495, 2801, 725, 1383, 554, 1019, 3178, 3345,
3180, 454, 394, 94, 3385, 855, 558, 3407, 3188, 3445, 650, 2210,
3192, 2141, 3194, 232, 2295, 1030, 300, 3199, 1054, 3201, 1268, 1730,
3335, 3205, 720, 2498, 3208, 696, 165, 3078, 3212, 1501, 760, 227,
1191, 3217, 684, 1240, 2839, 2885, 3222, 3223, 3224, 1300, 1082, 1947,
1333, 3229, 2634, 3231, 1749, 3233, 2970, 555, 170, 3237, 303, 3239,
422, 3241, 3401, 3243, 3019, 507, 2394, 1923, 2677, 3138, 3250, 959,
146, 459, 3254, 2800, 2831, 264, 1637, 3259, 748, 3261, 1591, 1069,
2682, 1090, 1975, 1993, 3268, 3269, 2950, 3271, 3317, 1933, 3274, 1718,
3276, 1910, 2008, 1117, 1654, 2375, 2050, 131, 3284, 2396, 3003, 764,
1746, 438, 3444, 1339, 243, 631, 400, 21, 2065, 292, 154, 2955,
2433, 904, 1497, 668, 1619, 3305, 3122, 2942, 194, 3496, 2740, 2048,
3312, 2681, 3314, 1938, 2951, 3272, 3318, 1338, 3320, 495, 1510, 3489,
3324, 2429, 1543, 1055, 2711, 3329, 1228, 1980, 1951, 649, 1305, 3204,
3336, 3337, 685, 2459, 398, 1740, 2297, 1546, 302, 3179, 3346, 1490,
429, 2612, 906, 1524, 1192, 2696, 2550, 2526, 1961, 2899, 3147, 181,
1733, 1578, 496, 535, 1255, 1077, 1099, 3367, 2412, 3369, 1768, 2277,
2361, 363, 2939, 2838, 614, 88, 941, 2750, 1249, 2118, 3382, 2983,
844, 3184, 3386, 2708, 520, 158, 3170, 1195, 3392, 47, 1024, 2701,
861, 1981, 3398, 942, 1998, 3242, 1032, 172, 1336, 2208, 836, 3187,
1954, 1004, 923, 2257, 3412, 1022, 2757, 596, 646, 985, 3418, 3419,
1175, 1060, 805, 72, 86, 2362, 1766, 710, 3428, 1465, 3510, 1917,
532, 2449, 241, 3435, 3478, 1214, 500, 2998, 3121, 3441, 461, 1657,
3290, 3189, 2882, 1308, 1164, 1534, 1875, 120, 3452, 3453, 2511, 2623,
599, 2408, 1462, 2044, 3460, 3461, 585, 3463, 3146, 3465, 1337, 2941,
1815, 2735, 3470, 3471, 1133, 754, 2149, 3475, 2015, 3477, 3436, 446,
1770, 1263, 2058, 2548, 2738, 1366, 2845, 1544, 2293, 3323, 308, 2516,
3492, 1290, 3494, 3172, 3309, 644, 3498, 1212, 3500, 2865, 1439, 1400,
3504, 337, 2225, 316, 3508, 2204, 3430}));
S->add_generator(Perm(
{0, 556, 325, 67, 1579, 391, 2643, 1896, 2439, 2666, 3145, 820,
2475, 3036, 1735, 2023, 1741, 3404, 1633, 363, 3334, 1163, 2404, 3217,
230, 225, 3302, 2527, 1117, 2398, 2936, 2177, 3233, 2216, 472, 3428,
2479, 7, 813, 2321, 376, 199, 1853, 1621, 2948, 2510, 1569, 838,
2158, 521, 195, 1768, 2337, 3118, 1594, 863, 790, 1631, 2818, 3098,
712, 2188, 2149, 254, 2574, 662, 72, 381, 580, 805, 3380, 517,
1640, 414, 1366, 2998, 147, 539, 179, 385, 2902, 1816, 1100, 1951,
519, 475, 2060, 3264, 3168, 1551, 3465, 2134, 537, 3149, 2739, 2029,
1529, 2494, 1185, 2975, 2165, 963, 1049, 1337, 3095, 2489, 1749, 1428,
162, 2323, 2701, 276, 764, 3122, 1459, 792, 917, 1176, 2298, 2349,
1298, 1303, 1870, 2281, 3244, 2930, 1580, 701, 2525, 3068, 2225, 2577,
1242, 1630, 681, 1077, 1372, 770, 1183, 263, 2063, 2085, 3164, 724,
1383, 2740, 3214, 971, 1029, 2978, 346, 2347, 697, 100, 3017, 612,
2032, 2529, 1507, 2956, 1773, 888, 954, 957, 2091, 280, 1571, 3496,
153, 950, 3426, 1706, 1079, 3229, 3369, 190, 3381, 1933, 1881, 1849,
2935, 2890, 3076, 2362, 3314, 2836, 3405, 1032, 258, 1419, 3097, 2248,
2427, 1876, 2136, 598, 2721, 79, 2878, 1355, 1921, 3191, 1505, 731,
2580, 352, 972, 2394, 3014, 473, 3286, 2410, 1423, 2880, 3278, 348,
3101, 924, 2150, 1647, 196, 1022, 3331, 418, 779, 2456, 2954, 1394,
224, 592, 1772, 149, 471, 3031, 510, 2436, 1479, 668, 165, 3431,
2141, 3418, 2985, 3459, 2246, 1830, 2429, 751, 1648, 1244, 753, 1230,
3117, 379, 2812, 2786, 847, 1090, 2653, 1265, 251, 3333, 2745, 14,
2539, 489, 2670, 3134, 1747, 3305, 41, 3374, 616, 2720, 1239, 1555,
1233, 2581, 1878, 487, 3040, 333, 450, 467, 1092, 2639, 1632, 2184,
3272, 2760, 1657, 1786, 2118, 1015, 368, 309, 1364, 2911, 2966, 2684,
35, 2449, 931, 2025, 2520, 2803, 197, 2810, 2926, 2987, 1144, 1862,
809, 2832, 484, 1128, 2605, 1306, 465, 982, 219, 1578, 3258, 2901,
3398, 1399, 1089, 1894, 928, 2842, 2689, 2499, 2830, 3326, 2395, 1908,
2563, 1188, 2843, 2982, 3323, 1985, 89, 710, 366, 1626, 1696, 3094,
1296, 2758, 480, 2516, 2846, 30, 3132, 1181, 1357, 406, 1488, 2715,
1794, 68, 1638, 1374, 407, 2594, 2077, 3204, 1590, 1930, 3243, 2528,
1251, 2162, 2426, 3169, 1024, 166, 1107, 979, 401, 2466, 3420, 2259,
894, 1819, 40, 207, 1553, 1644, 624, 1361, 3282, 1755, 3375, 2900,
514, 1234, 2089, 3315, 28, 3137, 744, 2218, 2127, 3277, 1545, 1453,
2800, 597, 1543, 1434, 2081, 2062, 528, 2775, 506, 1487, 3373, 298,
2537, 661, 759, 2488, 3127, 657, 1573, 2957, 987, 1070, 193, 2596,
328, 1132, 551, 1174, 703, 1986, 481, 2864, 1668, 3056, 2899, 718,
2100, 2887, 245, 1746, 1129, 2609, 815, 1481, 647, 1186, 3016, 2920,
549, 3120, 3256, 2088, 1471, 846, 2033, 2211, 2641, 1599, 882, 844,
1161, 1609, 2419, 1695, 2601, 428, 2752, 1886, 3173, 46, 1536, 2202,
2271, 3065, 862, 2727, 1082, 1882, 855, 1528, 2490, 2686, 66, 520,
919, 831, 2942, 1663, 3294, 1393, 1879, 2815, 2895, 2955, 370, 990,
2631, 570, 500, 3113, 1898, 1651, 636, 2802, 2334, 1950, 257, 1760,
3208, 1139, 1194, 1759, 761, 213, 3043, 3035, 2953, 3291, 1028, 1130,
188, 2416, 980, 2546, 3207, 15, 1470, 2952, 2048, 2018, 2317, 1057,
2498, 2433, 925, 2523, 672, 1734, 1023, 2460, 1327, 2674, 2283, 1386,
344, 3506, 1719, 2729, 1702, 3450, 1007, 3276, 641, 1974, 1506, 3030,
585, 1548, 1795, 1929, 2749, 3340, 1382, 2505, 1439, 1865, 2716, 148,
999, 329, 497, 2458, 2254, 1381, 503, 3469, 3152, 2109, 1109, 1937,
788, 802, 1263, 709, 553, 600, 3249, 1813, 2947, 2422, 1586, 2785,
2233, 1510, 1652, 1456, 3355, 588, 3077, 3212, 2204, 2240, 2662, 3241,
457, 1825, 554, 1272, 1591, 1325, 2759, 1087, 2129, 34, 2262, 1291,
2229, 3013, 2521, 1600, 1869, 1859, 821, 3458, 229, 2756, 1671, 2147,
1350, 2207, 1836, 2130, 2869, 2870, 3084, 1678, 1472, 2572, 2050, 659,
2703, 2583, 873, 1422, 3187, 2264, 3432, 1063, 2001, 772, 541, 606,
781, 604, 872, 2116, 3339, 2201, 1880, 3438, 617, 3395, 1452, 479,
1259, 1465, 3254, 1673, 2356, 1440, 2951, 1227, 1524, 1550, 3170, 3111,
2724, 903, 109, 3410, 3054, 2891, 1627, 969, 857, 1847, 2943, 654,
1531, 3327, 1302, 3473, 23, 373, 2205, 3008, 1135, 1831, 3044, 1561,
1797, 2455, 2293, 994, 2015, 508, 1566, 2371, 2789, 1368, 2808, 2557,
743, 2181, 2894, 169, 183, 3041, 783, 817, 3102, 2157, 906, 2892,
1119, 2389, 1576, 3061, 139, 1684, 3037, 776, 3146, 2235, 1872, 2630,
1981, 71, 3228, 1448, 2984, 335, 2698, 2534, 1714, 3449, 3320, 1318,
2330, 544, 656, 2620, 1909, 3154, 2872, 3042, 2968, 974, 2250, 92,
2065, 2223, 2904, 2159, 2006, 1450, 1037, 1098, 575, 3003, 3344, 1468,
3051, 3387, 2772, 161, 1924, 118, 2725, 87, 1069, 2567, 267, 1873,
3226, 828, 1041, 3090, 97, 1313, 2299, 1775, 260, 2106, 246, 522,
3163, 3005, 2669, 2096, 2690, 3236, 766, 1511, 1829, 2738, 2359, 1143,
1467, 275, 774, 1277, 1311, 3171, 2889, 1305, 2989, 1949, 318, 3058,
890, 729, 431, 3251, 1283, 593, 1165, 2055, 2324, 1988, 1515, 1681,
2095, 2707, 1637, 867, 1756, 995, 2279, 1120, 1178, 3309, 1748, 2101,
2308, 3049, 2011, 496, 1217, 829, 2251, 2030, 2156, 2042, 441, 2569,
2076, 1431, 2092, 2980, 860, 1400, 3143, 3131, 3250, 301, 1522, 1977,
2289, 3107, 3456, 2152, 849, 2604, 2370, 926, 2965, 1332, 981, 2179,
558, 1517, 2859, 1064, 121, 1793, 2122, 2817, 1567, 2495, 464, 117,
1570, 3025, 3429, 321, 1964, 2588, 1076, 2565, 1796, 2656, 1740, 762,
914, 2450, 2350, 2163, 3248, 228, 2858, 945, 650, 694, 2592, 128,
912, 1102, 1142, 1269, 3141, 607, 2909, 608, 3328, 2833, 3088, 78,
2685, 1238, 2940, 2175, 2452, 2708, 2331, 733, 2501, 2417, 2391, 2781,
1792, 2237, 2493, 3350, 3147, 707, 2514, 2914, 1834, 486, 3497, 3492,
640, 1353, 1764, 2244, 1213, 722, 3280, 2228, 1054, 2663, 1257, 419,
1841, 1935, 2491, 3177, 1762, 143, 57, 154, 2423, 2549, 1597, 1261,
2671, 2265, 3160, 451, 1601, 3158, 3073, 320, 456, 2687, 1003, 3466,
1941, 395, 1822, 1086, 3411, 1267, 953, 1389, 2160, 2369, 403, 3383,
929, 2000, 2766, 3114, 1474, 1855, 2682, 63, 2420, 86, 962, 868,
2515, 1616, 2658, 3481, 3507, 3112, 3099, 559, 270, 192, 2829, 3234,
2937, 448, 3487, 1771, 2477, 1712, 758, 1699, 2634, 2699, 460, 1140,
1589, 2480, 495, 2125, 2916, 996, 1915, 986, 527, 3010, 3384, 172,
2428, 2632, 175, 2418, 2691, 1560, 2912, 1961, 1430, 2867, 905, 1343,
3270, 2313, 2341, 763, 2069, 222, 2140, 2187, 2447, 262, 2616, 2322,
2917, 1147, 3015, 1584, 3162, 1913, 1701, 1060, 84, 1846, 2387, 135,
2044, 3424, 787, 2117, 2485, 702, 3048, 1154, 561, 1655, 1180, 212,
2763, 3489, 704, 932, 609, 1823, 698, 2757, 2407, 2664, 728, 2260,
1598, 1987, 2113, 3028, 2003, 1942, 564, 2075, 3480, 1222, 25, 2268,
880, 65, 1919, 1451, 3494, 1266, 1593, 2288, 3303, 2793, 2950, 3299,
2570, 303, 1953, 455, 1574, 1346, 2151, 2624, 2877, 1770, 1936, 1101,
157, 2047, 2622, 1767, 3376, 1653, 502, 1669, 2470, 2137, 2028, 947,
2777, 2131, 271, 3505, 3399, 483, 3096, 3190, 1820, 2608, 1606, 185,
281, 1541, 840, 324, 1351, 443, 1779, 1532, 1732, 2991, 3001, 708,
24, 64, 2502, 1160, 1072, 2226, 3128, 988, 423, 289, 3213, 1246,
878, 664, 3060, 2326, 1776, 2933, 3237, 3219, 1379, 1608, 383, 1067,
2209, 687, 9, 314, 433, 1656, 916, 3423, 1038, 1002, 1397, 970,
1863, 1385, 1828, 2182, 2508, 1198, 534, 360, 3322, 1700, 2276, 799,
2329, 3275, 2087, 2790, 1339, 3498, 1643, 2114, 151, 2052, 555, 1503,
1056, 1916, 2166, 2478, 1088, 2469, 2301, 3316, 241, 531, 367, 3401,
1206, 1, 992, 2929, 1193, 2782, 232, 130, 8, 2519, 3471, 55,
2650, 1324, 2190, 2778, 2714, 2041, 1293, 634, 2688, 2734, 3508, 1861,
1493, 327, 1612, 1031, 2451, 3440, 31, 653, 584, 1676, 1686, 3115,
2355, 645, 2309, 3455, 1564, 1731, 2311, 1280, 2801, 2962, 1838, 1322,
1983, 870, 2178, 3400, 264, 2067, 778, 504, 651, 209, 3441, 793,
1352, 976, 3416, 2161, 1403, 3119, 1965, 871, 1310, 615, 3437, 769,
342, 2421, 2963, 688, 791, 1934, 1288, 3109, 2411, 2614, 2090, 1218,
752, 174, 1131, 2755, 3343, 1091, 171, 1697, 719, 3183, 3092, 1535,
2425, 1677, 1408, 422, 2704, 3150, 678, 3503, 2277, 2970, 3142, 1094,
1946, 832, 646, 1745, 2668, 2958, 3445, 3361, 294, 3468, 1294, 1226,
1641, 138, 2340, 1483, 1066, 2949, 1525, 1808, 515, 103, 425, 627,
876, 1437, 2771, 3349, 104, 2252, 3488, 775, 2432, 3, 1791, 1463,
2373, 2545, 2886, 959, 1477, 74, 1494, 2120, 1016, 3103, 1464, 305,
689, 3495, 438, 639, 1051, 2338, 2841, 907, 2788, 234, 1486, 2078,
2086, 48, 133, 1809, 3246, 296, 3224, 748, 227, 738, 1979, 392,
1126, 36, 3189, 2376, 396, 1093, 1957, 3133, 1708, 2651, 3446, 2811,
818, 2071, 833, 705, 198, 2804, 3193, 44, 3439, 676, 200, 2339,
3464, 1683, 543, 663, 2221, 1380, 509, 1806, 3403, 622, 105, 540,
1211, 2659, 2600, 1208, 2054, 2526, 548, 2683, 3342, 1595, 3281, 2927,
966, 341, 2552, 936, 3021, 1295, 691, 1052, 250, 2014, 1384, 814,
1447, 3216, 2016, 898, 3079, 3257, 2133, 3290, 1857, 1190, 1247, 1944,
2839, 1672, 2692, 3012, 3341, 442, 1720, 602, 3055, 1152, 3351, 429,
2976, 239, 3370, 3397, 1162, 357, 2571, 2835, 536, 524, 693, 960,
3195, 3385, 2995, 1014, 816, 2375, 2806, 2465, 563, 795, 1004, 2903,
319, 2093, 315, 566, 777, 2748, 12, 453, 1396, 463, 1682, 1975,
1807, 1729, 1134, 690, 1501, 1750, 454, 290, 2312, 1877, 1780, 2342,
842, 1539, 3345, 187, 2486, 985, 1349, 1001, 3285, 1801, 3451, 317,
2819, 3413, 2762, 1905, 1892, 3346, 3407, 1489, 3067, 2765, 2357, 1670,
1556, 1818, 2316, 2124, 2173, 2598, 851, 2021, 1138, 2327, 1858, 416,
843, 1982, 786, 2606, 1415, 1520, 735, 3148, 1301, 3034, 205, 322,
240, 952, 739, 3288, 3287, 869, 323, 1629, 934, 1421, 201, 1219,
2296, 1519, 194, 1084, 574, 268, 293, 3363, 22, 2773, 21, 412,
1976, 2167, 411, 1885, 3414, 717, 1478, 2361, 2628, 884, 1484, 137,
2827, 2750, 331, 2072, 2705, 2504, 347, 767, 726, 111, 2795, 1245,
421, 3274, 3421, 3330, 2587, 951, 1237, 2068, 2913, 2981, 848, 3463,
711, 2058, 1685, 69, 339, 1549, 1932, 3417, 1781, 3070, 3500, 42,
1170, 27, 1718, 2481, 2415, 3313, 2706, 345, 1034, 1763, 413, 132,
2040, 1664, 3394, 2013, 2462, 1997, 1614, 3106, 1375, 1080, 3198, 2754,
2657, 677, 2145, 167, 1401, 466, 1966, 58, 3105, 398, 2798, 1938,
2287, 3304, 2862, 1177, 3485, 2138, 1320, 1104, 2744, 2655, 389, 1508,
159, 3130, 1223, 3412, 2414, 2295, 2884, 388, 220, 468, 2828, 1062,
1262, 1914, 2363, 1694, 599, 2399, 338, 2195, 1895, 1713, 3289, 435,
2320, 2105, 1654, 3448, 3032, 1639, 1711, 1011, 1509, 545, 1330, 2518,
2575, 823, 16, 399, 1412, 3180, 2993, 2266, 3402, 20, 1071, 2589,
1688, 1758, 261, 2532, 565, 2200, 911, 2144, 3462, 1215, 885, 3477,
1722, 2629, 2257, 33, 1254, 649, 2702, 1996, 1166, 658, 458, 1241,
3156, 3074, 2189, 2831, 2861, 1404, 2635, 184, 2183, 1842, 1738, 1742,
3359, 2169, 1207, 2440, 3377, 2718, 145, 1457, 529, 2977, 1344, 1476,
2307, 557, 2747, 1377, 3186, 2697, 2559, 1392, 2665, 208, 1111, 2192,
29, 252, 1435, 765, 3482, 808, 2304, 1420, 1728, 516, 353, 2285,
2352, 3223, 3353, 2358, 1201, 3461, 61, 2213, 2774, 377, 32, 1123,
1546, 2944, 1784, 1596, 856, 955, 1179, 2258, 47, 1623, 243, 623,
755, 2328, 1124, 426, 247, 3336, 1615, 2681, 2660, 2536, 249, 2906,
1646, 2678, 1426, 2405, 287, 940, 3231, 3179, 918, 579, 369, 644,
2132, 2733, 1660, 1018, 1212, 2857, 1906, 675, 2004, 1317, 152, 1158,
3222, 113, 2263, 1040, 601, 1620, 382, 3009, 3319, 2234, 365, 633,
11, 256, 238, 1592, 3062, 3011, 1993, 1243, 1200, 2712, 1947, 1821,
1043, 2860, 1492, 291, 1777, 1149, 2735, 444, 2825, 2568, 302, 1514,
1462, 1931, 2123, 686, 866, 1649, 2238, 2020, 2325, 3047, 1871, 1925,
2102, 1943, 3029, 618, 3175, 807, 2112, 498, 1611, 923, 1390, 1495,
2284, 1480, 1371, 1568, 1363, 1628, 2677, 3260, 2241, 1005, 3259, 1248,
2314, 364, 2554, 1999, 2026, 2146, 3501, 1025, 1971, 1537, 437, 1911,
393, 893, 218, 3201, 2578, 713, 2865, 430, 136, 1407, 2471, 2056,
1053, 3306, 2343, 210, 1959, 1577, 2550, 1150, 680, 2066, 1661, 1336,
2059, 2792, 4, 746, 3123, 1387, 292, 1499, 3367, 96, 1460, 3491,
875, 756, 2918, 896, 2761, 3268, 1300, 1899, 1956, 2876, 2302, 858,
2533, 83, 3182, 1753, 259, 1328, 1417, 3178, 94, 3002, 2103, 3318,
1766, 3218, 19, 578, 106, 1897, 3253, 1926, 1153, 2517, 3225, 1710,
538, 1726, 2472, 1187, 2780, 2807, 2531, 2497, 1666, 1675, 2390, 2142,
282, 1693, 3486, 417, 91, 2769, 2783, 1096, 3378, 1282, 3504, 1019,
334, 737, 3215, 217, 248, 2522, 1105, 1308, 1169, 660, 989, 1854,
114, 796, 1727, 1680, 1444, 3347, 307, 1314, 2805, 2435, 1252, 2104,
2994, 3184, 2560, 1115, 2824, 2474, 2813, 1402, 2199, 380, 3108, 967,
278, 2164, 3202, 3022, 2007, 1075, 614, 2799, 942, 1497, 1733, 108,
900, 745, 1737, 3181, 1354, 2496, 1255, 1017, 277, 155, 1196, 2667,
1581, 968, 2627, 2905, 1491, 3185, 1991, 170, 3292, 311, 3238, 1890,
2402, 2403, 62, 2064, 810, 2888, 1513, 3069, 427, 354, 362, 2743,
1645, 3422, 469, 3075, 3338, 1837, 2111, 447, 854, 669, 2535, 1315,
2919, 98, 937, 2008, 3389, 283, 899, 90, 3396, 511, 3443, 1835,
1736, 2551, 1236, 2896, 2941, 1202, 1703, 3444, 176, 1184, 891, 146,
1279, 1068, 2885, 2434, 523, 1047, 1662, 1866, 2206, 2468, 445, 2875,
3493, 1427, 2882, 1572, 2722, 1073, 2584, 284, 3296, 804, 2170, 2646,
1216, 1199, 825, 378, 2043, 1044, 3196, 1978, 2821, 2840, 2997, 2492,
586, 2675, 211, 336, 1839, 1225, 2196, 1891, 3135, 834, 2261, 3194,
2649, 1469, 1690, 2220, 1376, 5, 1845, 297, 836, 1155, 1010, 415,
2354, 3063, 629, 39, 2483, 203, 3203, 1006, 797, 2585, 2139, 1761,
1922, 1214, 2097, 552, 1338, 2617, 1810, 3057, 1475, 2879, 2400, 53,
394, 3419, 1224, 2332, 3221, 2555, 1256, 3293, 1544, 2543, 304, 1157,
99, 811, 3209, 1625, 494, 273, 60, 535, 3110, 1232, 1636, 1455,
1260, 2378, 1583, 568, 269, 2680, 1604, 189, 1585, 1963, 3430, 789,
1917, 2874, 2694, 1103, 2547, 3091, 3165, 1405, 2300, 984, 983, 2923,
2736, 1658, 798, 596, 1785, 1319, 682, 2513, 1148, 3357, 1716, 3391,
695, 101, 265, 3307, 3510, 569, 226, 1461, 3317, 1359, 3406, 1962,
571, 2924, 887, 1108, 3245, 432, 51, 2080, 2297, 861, 1276, 1348,
1709, 124, 1802, 595, 839, 3392, 2382, 2603, 2, 330, 1228, 2544,
1429, 158, 3232, 1634, 37, 3064, 3144, 1370, 1500, 619, 3227, 125,
2907, 964, 2197, 2845, 2171, 3078, 127, 1373, 1958, 1458, 1466, 2027,
343, 3261, 2820, 2742, 235, 2612, 355, 2392, 45, 2599, 131, 3038,
2726, 2019, 2847, 1026, 1035, 95, 3087, 1788, 1358, 2245, 2834, 2126,
1167, 725, 2637, 2850, 2553, 2823, 1973, 1814, 93, 115, 122, 1538,
2464, 3262, 1482, 991, 902, 242, 1164, 819, 439, 749, 1642, 1840,
3337, 3379, 2597, 2463, 611, 2121, 620, 1078, 1021, 300, 2454, 1312,
859, 1803, 1774, 1533, 1112, 2654, 589, 2210, 1603, 279, 2779, 3499,
2348, 3027, 3467, 2652, 3435, 610, 1192, 938, 1945, 110, 85, 2119,
372, 1083, 434, 2005, 1730, 374, 1033, 2070, 1715, 3200, 409, 841,
715, 2232, 732, 1650, 1045, 1940, 505, 2396, 1446, 82, 877, 1912,
2255, 3442, 2816, 356, 734, 1948, 2253, 625, 3255, 1362, 2049, 306,
2476, 2611, 2290, 785, 2443, 2174, 2897, 2243, 3199, 993, 2203, 2045,
440, 2647, 3046, 920, 3474, 1582, 1864, 2270, 1743, 1046, 977, 782,
3019, 3081, 901, 3300, 491, 1347, 2278, 684, 1268, 107, 879, 1030,
3151, 1013, 43, 683, 2524, 2272, 1137, 3080, 3509, 1851, 3475, 1843,
3382, 2441, 1027, 2979, 1039, 3457, 1159, 3172, 1235, 2446, 181, 1928,
1050, 824, 1156, 2484, 1960, 2856, 613, 2384, 3279, 2282, 1264, 1074,
3023, 1285, 2615, 436, 1954, 2107, 628, 864, 2360, 2208, 182, 1443,
2217, 2379, 1844, 3026, 845, 123, 408, 2191, 2219, 1171, 939, 2696,
2128, 2180, 2945, 997, 2176, 126, 2227, 3354, 2383, 2564, 671, 1765,
2057, 3329, 1175, 2051, 1805, 852, 358, 1085, 1127, 685, 2388, 476,
274, 1333, 359, 1378, 2294, 2036, 874, 1287, 2619, 2541, 2556, 1331,
73, 1195, 337, 1992, 2638, 3454, 2990, 1110, 1850, 141, 2898, 2377,
134, 526, 477, 3476, 233, 2983, 313, 2098, 1512, 1518, 2961, 2303,
546, 1059, 2784, 3033, 1883, 2713, 2661, 1789, 38, 1125, 2558, 140,
1292, 299, 850, 2310, 2386, 853, 2365, 1984, 119, 1203, 2002, 1220,
3167, 178, 567, 3265, 1367, 1304, 2873, 998, 2242, 2335, 1055, 621,
800, 2482, 2960, 3335, 2012, 2457, 2711, 889, 3425, 1698, 2344, 3155,
202, 1798, 1804, 1790, 3502, 2448, 3093, 1952, 3153, 1751, 2084, 2751,
2079, 236, 2996, 2108, 1619, 2946, 1221, 3365, 102, 1998, 3140, 3086,
2437, 1341, 2731, 3089, 1118, 206, 1284, 2215, 594, 512, 1281, 482,
1433, 2764, 3452, 747, 2185, 3283, 1907, 3284, 253, 116, 2039, 1345,
700, 935, 2186, 2648, 897, 2562, 54, 530, 2673, 2212, 1674, 1182,
2693, 2037, 3472, 3220, 1365, 2249, 2061, 3121, 3197, 1146, 2881, 2695,
2381, 2710, 3100, 1889, 1902, 2969, 2239, 1534, 160, 3433, 1707, 386,
3348, 921, 1918, 1008, 2590, 1552, 1454, 237, 2626, 461, 754, 2700,
2500, 773, 2863, 3066, 1724, 1972, 827, 390, 692, 3161, 1413, 1309,
112, 485, 2315, 1097, 3427, 3386, 1498, 49, 1739, 1369, 1900, 2809,
3479, 2397, 1081, 288, 1410, 626, 2430, 2168, 1289, 3083, 1411, 3071,
801, 173, 1250, 2709, 948, 909, 2741, 76, 1744, 3484, 3297, 2593,
452, 1617, 3311, 3298, 1563, 2922, 1923, 1271, 2723, 216, 881, 587,
3409, 2837, 142, 2796, 1800, 958, 1783, 2385, 1990, 3039, 17, 806,
462, 1360, 1020, 2412, 351, 312, 3308, 3470, 3273, 1209, 2610, 721,
1605, 910, 2512, 2194, 2753, 822, 308, 723, 3239, 3390, 361, 3052,
2351, 1485, 177, 2292, 1286, 70, 2442, 1827, 1521, 2511, 1191, 2928,
2193, 2636, 1667, 1704, 1441, 3352, 2797, 3358, 1665, 2883, 1258, 1409,
665, 2247, 255, 2467, 716, 1815, 3126, 1833, 771, 2305, 81, 1967,
2621, 727, 1558, 933, 1887, 2506, 2959, 1523, 648, 2393, 1970, 560,
3053, 2746, 2925, 3263, 3478, 449, 1530, 3006, 3310, 837, 2854, 150,
1009, 2844, 1757, 2409, 3321, 1114, 2538, 1613, 2853, 1438, 3490, 2986,
943, 946, 1326, 3415, 1113, 1416, 973, 2633, 1799, 2401, 2256, 590,
56, 2623, 384, 3252, 492, 75, 2024, 865, 533, 1910, 2336, 2010,
1240, 1106, 642, 1136, 2115, 3325, 1502, 1607, 1559, 2972, 750, 214,
1725, 1307, 1141, 3192, 326, 670, 3000, 10, 168, 2582, 2083, 583,
3242, 375, 387, 3434, 3332, 164, 2459, 1414, 1624, 1787, 1557, 191,
1342, 2999, 1980, 1116, 2438, 2613, 1449, 2503, 2353, 1172, 2586, 295,
2932, 1562, 478, 768, 930, 1769, 3362, 400, 1253, 459, 2269, 696,
221, 2461, 2224, 1610, 2275, 2346, 3436, 1547, 2230, 1012, 2135, 1297,
2974, 2372, 949, 1442, 1122, 1989, 3295, 2507, 310, 2286, 2672, 3408,
2794, 1504, 581, 2280, 2866, 1432, 679, 1275, 1496, 499, 826, 3138,
1418, 2768, 3267, 2291, 2770, 410, 2374, 2034, 2973, 2035, 77, 2368,
3240, 2009, 652, 156, 638, 2453, 3157, 1635, 2408, 1205, 1299, 2967,
883, 730, 18, 340, 2099, 794, 2431, 1000, 3364, 830, 956, 518,
1274, 2908, 3059, 2053, 1955, 1231, 2444, 631, 3129, 2992, 180, 397,
1278, 2730, 223, 26, 2607, 1516, 1249, 1901, 736, 1527, 1210, 1856,
674, 3072, 1995, 2625, 50, 1920, 2871, 673, 3371, 2509, 1824, 470,
532, 1659, 404, 3453, 3460, 886, 1874, 59, 1875, 2333, 2915, 1542,
2855, 405, 2380, 3166, 2155, 2473, 1323, 3211, 490, 3372, 3324, 2154,
2988, 3139, 2591, 2153, 2561, 2022, 550, 2530, 88, 1554, 2274, 576,
163, 2017, 3018, 1927, 2868, 3085, 1692, 1968, 3269, 2849, 635, 2645,
286, 2822, 3393, 285, 316, 741, 2964, 3483, 1058, 525, 2345, 3004,
13, 3188, 266, 2791, 1151, 186, 3082, 1065, 1826, 740, 2236, 1884,
3360, 1473, 2732, 961, 3125, 3007, 2231, 1398, 2413, 3266, 1273, 2364,
2576, 1133, 655, 1388, 757, 965, 2602, 215, 742, 2406, 2719, 2318,
1778, 1526, 488, 2548, 1189, 1832, 2367, 2814, 1587, 892, 2644, 144,
1705, 2893, 605, 3368, 706, 2728, 1622, 630, 3206, 1290, 3159, 573,
1994, 1969, 1329, 513, 1904, 3116, 978, 1903, 908, 1335, 2679, 1145,
1717, 922, 2082, 2445, 780, 2094, 1229, 1540, 424, 2676, 760, 1168,
1099, 895, 474, 493, 784, 2074, 1565, 1752, 3205, 1860, 975, 944,
835, 2031, 3271, 1316, 1356, 1811, 1588, 2487, 2214, 632, 3388, 2306,
2934, 2642, 3301, 2921, 1868, 2826, 2172, 2566, 402, 643, 2838, 1754,
1888, 6, 1173, 2267, 1048, 2910, 591, 3312, 562, 507, 2767, 52,
1817, 2222, 1391, 1893, 3045, 572, 2776, 714, 1691, 637, 2787, 3230,
2540, 120, 3024, 2938, 1445, 542, 2148, 1197, 332, 812, 2424, 547,
1939, 603, 3124, 350, 3366, 1436, 1424, 2038, 1321, 699, 1689, 2319,
2542, 3050, 1812, 2971, 1490, 1095, 2046, 1061, 129, 3247, 1679, 244,
3210, 2579, 582, 1036, 1042, 1204, 1575, 2737, 3104, 420, 2595, 3235,
501, 1848, 2143, 3174, 2851, 1270, 3356, 1721, 1867, 1406, 1334, 2640,
577, 2073, 3176, 904, 1723, 3136, 2273, 2848, 915, 2198, 1602, 666,
2931, 927, 231, 2939, 371, 2110, 720, 941, 1782, 1618, 1121, 2852,
2717, 1395, 1687, 204, 3020, 272, 1425, 2366, 913, 1852, 80, 803,
2618, 3447, 349, 2573, 446, 1340, 667}));
REQUIRE(S->size() == static_cast(64561751654400));
delete S;
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"027",
"perm. Held group (order 4030387200)",
"[no-valgrind][quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 2059;
auto S = new SchreierSims();
using Perm = std::remove_pointer::type::element_type;
S->add_generator(Perm(
{0, 374, 708, 1312, 1036, 1151, 1366, 1307, 1571, 1402, 236, 1438,
363, 590, 288, 1372, 38, 1886, 816, 1953, 1582, 1109, 525, 124,
24, 1218, 26, 1795, 499, 1574, 802, 31, 1040, 117, 1643, 35,
1344, 1559, 16, 180, 1183, 979, 1819, 152, 44, 1161, 1500, 332,
1131, 946, 1599, 51, 985, 1428, 54, 55, 401, 1661, 1351, 272,
692, 120, 1545, 1221, 1211, 1423, 66, 318, 1536, 1722, 119, 790,
407, 2024, 146, 2045, 937, 424, 339, 1395, 2056, 568, 1111, 444,
746, 510, 1123, 2058, 1810, 550, 116, 103, 1009, 902, 632, 1799,
1308, 1910, 1034, 1706, 693, 101, 922, 91, 104, 571, 2031, 714,
1447, 1385, 1977, 409, 1220, 1456, 1094, 212, 90, 33, 1922, 70,
61, 971, 769, 387, 23, 1060, 1057, 480, 1628, 398, 130, 1477,
1326, 1166, 1974, 1272, 1324, 1295, 490, 291, 1216, 1389, 822, 306,
552, 1301, 74, 1957, 1401, 149, 1407, 766, 43, 153, 1000, 656,
638, 157, 158, 943, 677, 232, 162, 1031, 425, 195, 1403, 285,
219, 311, 657, 1289, 852, 1518, 587, 1159, 1350, 1180, 1041, 923,
39, 1334, 1735, 399, 1278, 1273, 1498, 488, 908, 1770, 537, 1941,
595, 1404, 617, 165, 686, 1845, 1924, 939, 1112, 706, 579, 1262,
749, 789, 775, 843, 1826, 1675, 1900, 1776, 115, 213, 966, 896,
1673, 1331, 1437, 168, 1139, 1472, 494, 1640, 2008, 995, 982, 1086,
1766, 800, 565, 231, 161, 853, 1551, 808, 10, 237, 1043, 1240,
551, 553, 1305, 1069, 1641, 811, 246, 2051, 596, 249, 1349, 1408,
1593, 1380, 1065, 451, 476, 1915, 1597, 259, 1113, 1225, 262, 457,
709, 554, 1572, 1846, 447, 1748, 1300, 614, 59, 890, 1125, 1507,
276, 1674, 1785, 1609, 308, 1635, 607, 815, 1682, 167, 427, 287,
14, 2043, 1843, 139, 756, 810, 1345, 1794, 1524, 1587, 911, 1660,
1358, 975, 1771, 1368, 304, 886, 143, 1008, 280, 705, 1194, 169,
1379, 410, 1269, 757, 1037, 1454, 67, 1501, 702, 859, 731, 1642,
813, 1752, 1064, 1557, 373, 778, 527, 539, 47, 1657, 2027, 1237,
470, 1870, 1616, 78, 1023, 1178, 1624, 1014, 1081, 345, 1420, 1050,
1063, 1699, 1035, 654, 406, 1242, 487, 1450, 2013, 1526, 700, 976,
2041, 404, 1991, 12, 1634, 1669, 366, 683, 368, 369, 446, 1820,
2023, 328, 1, 824, 1999, 473, 474, 676, 1306, 1774, 1769, 509,
1714, 1589, 1595, 123, 1979, 840, 412, 1936, 1554, 393, 1523, 1731,
695, 1598, 129, 183, 400, 56, 1867, 1981, 361, 1443, 352, 72,
1662, 111, 313, 669, 390, 1659, 912, 415, 416, 1110, 1101, 534,
1762, 1441, 628, 1383, 77, 164, 1778, 286, 1357, 1003, 434, 1683,
989, 485, 430, 888, 1865, 1011, 849, 1916, 1478, 906, 2022, 1013,
83, 1746, 370, 268, 1534, 1586, 1962, 255, 452, 1996, 1410, 1566,
1458, 263, 1744, 1029, 1012, 897, 806, 1883, 1955, 1457, 466, 1836,
1747, 1779, 336, 1837, 1839, 377, 378, 1116, 256, 477, 2020, 1266,
127, 481, 1878, 1937, 1603, 433, 1824, 354, 187, 1784, 138, 1756,
1627, 759, 222, 1146, 1189, 667, 1859, 28, 861, 1975, 660, 503,
566, 1068, 1286, 1834, 1644, 383, 85, 729, 1583, 1448, 515, 514,
1920, 581, 578, 1569, 1073, 1104, 522, 925, 1653, 22, 881, 330,
1804, 1907, 1021, 1633, 689, 1758, 419, 872, 1701, 190, 1973, 331,
592, 1816, 1128, 1088, 622, 1154, 1855, 580, 1892, 1103, 89, 240,
144, 241, 265, 901, 557, 556, 558, 1963, 972, 629, 1096, 1198,
1179, 230, 504, 1532, 81, 981, 1600, 105, 1995, 740, 1118, 1321,
1475, 776, 518, 202, 547, 517, 1754, 1230, 904, 684, 600, 174,
588, 589, 13, 1188, 540, 1719, 987, 192, 248, 1939, 704, 1209,
586, 1783, 764, 603, 1315, 1611, 606, 282, 1905, 1788, 2029, 611,
1540, 1390, 271, 619, 715, 194, 2036, 615, 1740, 621, 544, 623,
1680, 625, 845, 1235, 422, 561, 1544, 1596, 94, 1020, 1303, 2046,
1467, 1224, 156, 894, 1364, 1550, 1016, 1274, 1736, 919, 1543, 1718,
648, 1330, 1253, 1002, 798, 1157, 351, 658, 155, 170, 655, 707,
502, 661, 732, 809, 1208, 1347, 1044, 497, 1849, 411, 1181, 671,
672, 1340, 851, 1832, 379, 160, 857, 774, 1797, 1019, 1909, 367,
585, 685, 196, 1511, 1913, 532, 1369, 1562, 60, 100, 1429, 396,
1793, 1455, 984, 826, 358, 1869, 320, 1860, 598, 309, 201, 659,
2, 264, 1099, 1091, 1811, 818, 107, 616, 1153, 1879, 1847, 1292,
1445, 1509, 1647, 948, 1809, 1415, 726, 1813, 1573, 511, 1434, 322,
662, 959, 1048, 735, 1451, 1728, 1392, 739, 573, 1531, 1186, 1267,
1932, 1926, 84, 1129, 1985, 204, 1397, 1055, 1333, 753, 1688, 755,
292, 315, 1137, 493, 864, 1901, 1030, 1238, 602, 2050, 151, 1474,
1945, 122, 1512, 1651, 1430, 773, 679, 206, 577, 1652, 329, 1614,
910, 1329, 782, 1923, 784, 1033, 786, 1906, 788, 205, 71, 791,
1142, 1084, 1986, 795, 834, 1233, 652, 1751, 229, 1182, 30, 1440,
924, 1460, 462, 945, 235, 663, 293, 245, 812, 324, 1670, 283,
18, 1650, 713, 1948, 991, 821, 142, 1414, 375, 1246, 699, 1763,
828, 829, 973, 920, 1169, 854, 796, 933, 836, 1245, 1895, 1270,
389, 1664, 1463, 207, 1689, 626, 929, 1960, 1537, 438, 1538, 674,
172, 233, 833, 855, 1122, 678, 1772, 321, 1254, 500, 1723, 1298,
760, 1730, 2030, 1519, 998, 1249, 1817, 1823, 535, 873, 1490, 2009,
882, 934, 1320, 1742, 1409, 526, 876, 1339, 1965, 1265, 305, 1418,
435, 1155, 273, 1812, 1684, 893, 639, 1726, 215, 461, 935, 1281,
1177, 555, 93, 903, 584, 1782, 441, 1854, 188, 1231, 780, 298,
414, 1453, 2052, 1844, 1446, 1127, 1332, 645, 831, 1681, 102, 179,
804, 523, 1863, 1842, 928, 846, 1570, 1059, 2001, 835, 877, 898,
1980, 76, 1958, 199, 1257, 1090, 1356, 159, 1929, 807, 49, 2034,
723, 1287, 950, 1359, 1902, 2047, 1677, 1071, 1607, 1904, 1092, 733,
1489, 1934, 988, 2016, 964, 1089, 214, 967, 1138, 1919, 1163, 121,
560, 830, 1781, 301, 359, 977, 1696, 41, 1602, 569, 226, 2042,
698, 52, 1175, 594, 962, 432, 2033, 820, 992, 1825, 994, 225,
1360, 1737, 868, 1115, 154, 1581, 651, 429, 1004, 1005, 1061, 1535,
307, 92, 2014, 437, 460, 443, 343, 1713, 642, 1017, 1051, 681,
633, 530, 1285, 340, 1251, 2003, 1806, 1406, 1136, 459, 762, 163,
1821, 785, 98, 350, 4, 316, 1579, 1992, 32, 178, 1695, 238,
666, 1830, 1342, 1297, 734, 1851, 347, 1018, 1506, 1394, 1528, 751,
1432, 126, 1687, 931, 125, 1006, 1712, 348, 326, 254, 1066, 1067,
505, 243, 1172, 955, 1950, 520, 1196, 1283, 1631, 1427, 1575, 1911,
1250, 344, 1705, 1818, 793, 1119, 227, 1590, 543, 965, 941, 711,
958, 1093, 114, 1261, 562, 1882, 1120, 710, 2044, 418, 1102, 549,
521, 1741, 1610, 1263, 1276, 21, 417, 82, 200, 260, 2057, 999,
475, 1717, 574, 1085, 1098, 1124, 856, 86, 1121, 274, 1464, 917,
542, 747, 1626, 48, 1367, 1725, 1656, 1876, 1028, 758, 968, 220,
1140, 1792, 792, 1658, 1343, 1508, 495, 1984, 1439, 1887, 1828, 5,
1775, 716, 545, 889, 1522, 653, 1555, 175, 1436, 45, 1621, 970,
1993, 1807, 133, 1709, 1168, 832, 1654, 1697, 1070, 1327, 1502, 986,
1176, 900, 341, 564, 177, 670, 801, 40, 1734, 1604, 742, 1314,
591, 496, 1484, 1707, 1768, 2015, 310, 1229, 1074, 1790, 563, 1693,
1773, 1966, 2048, 1203, 1493, 1205, 1206, 1341, 664, 599, 1558, 64,
1874, 1354, 1938, 1215, 140, 1217, 25, 1750, 112, 63, 1852, 1223,
637, 261, 1226, 1594, 2004, 1195, 583, 909, 1858, 797, 1258, 627,
1236, 335, 763, 1239, 239, 1488, 353, 1243, 1884, 837, 825, 1749,
1391, 869, 1080, 1024, 1252, 650, 860, 1400, 1517, 940, 1234, 1759,
1260, 1095, 203, 1107, 1319, 885, 479, 743, 1492, 314, 839, 1944,
135, 185, 643, 1275, 1108, 2005, 184, 1580, 1363, 899, 1989, 1075,
1831, 1022, 506, 949, 1336, 171, 1577, 1291, 719, 1399, 1676, 137,
1412, 1047, 863, 1648, 270, 145, 1462, 634, 2035, 242, 380, 7,
96, 1309, 1310, 1564, 3, 1803, 1187, 604, 1373, 1850, 1796, 1264,
878, 575, 1592, 1623, 136, 1724, 132, 1173, 1838, 781, 649, 217,
918, 752, 181, 1335, 1288, 1703, 1925, 883, 673, 1207, 1046, 1144,
36, 294, 1721, 665, 1361, 250, 176, 58, 2010, 1903, 1213, 1617,
942, 428, 300, 951, 996, 1348, 1384, 1280, 640, 1994, 6, 1132,
303, 690, 1370, 1767, 15, 1316, 1630, 1503, 1396, 1377, 1619, 312,
253, 1546, 1388, 423, 1362, 109, 1618, 1829, 1382, 141, 613, 1248,
738, 1416, 1053, 79, 1376, 750, 2006, 1293, 1255, 148, 9, 166,
193, 1888, 1027, 150, 251, 880, 454, 1411, 1296, 1959, 823, 725,
1393, 1868, 887, 1608, 346, 1997, 1422, 65, 1636, 1425, 1969, 1077,
53, 694, 772, 1889, 1056, 1893, 730, 1872, 1160, 218, 11, 1148,
803, 421, 1442, 405, 1576, 720, 916, 108, 513, 1615, 355, 736,
2000, 913, 317, 697, 113, 465, 456, 1542, 805, 1466, 1302, 842,
1126, 1520, 1461, 636, 1612, 1971, 1470, 1764, 221, 1961, 767, 576,
1708, 131, 440, 1970, 1760, 1481, 1814, 1483, 1190, 2049, 1486, 1496,
1241, 960, 874, 1491, 1268, 1204, 1632, 1848, 1487, 1857, 186, 2012,
46, 319, 1174, 1375, 1533, 1505, 1052, 275, 1145, 721, 1983, 687,
770, 1908, 1873, 1548, 1917, 1256, 173, 867, 1465, 1885, 1156, 394,
296, 1525, 357, 1527, 1054, 1568, 2055, 741, 567, 1504, 448, 1007,
68, 848, 850, 1930, 612, 1646, 1459, 646, 630, 62, 1381, 1553,
1515, 1668, 641, 234, 1552, 1547, 392, 1158, 1556, 327, 1210, 37,
1710, 1987, 691, 1791, 1311, 1565, 455, 1686, 1529, 519, 930, 8,
266, 728, 29, 1078, 1444, 1290, 1700, 1038, 1279, 1001, 20, 512,
1685, 1585, 449, 297, 1588, 385, 1087, 2018, 1322, 252, 1227, 386,
631, 258, 397, 50, 570, 2032, 980, 484, 1185, 1745, 1606, 956,
1419, 279, 1106, 605, 1468, 1921, 779, 1449, 338, 1355, 1386, 1378,
2002, 1162, 2007, 1323, 342, 1732, 1130, 492, 128, 2053, 1374, 1076,
1494, 531, 364, 281, 1424, 1912, 1733, 1639, 223, 244, 323, 34,
508, 1645, 1541, 722, 1299, 1757, 817, 771, 777, 524, 1170, 1942,
1134, 333, 1143, 413, 299, 57, 408, 2038, 841, 1765, 1729, 1667,
1549, 365, 814, 2017, 1672, 216, 277, 209, 1294, 954, 1761, 1897,
624, 921, 284, 431, 892, 1584, 1567, 1058, 754, 844, 1890, 1739,
1952, 1199, 1877, 1042, 978, 1171, 1727, 349, 1578, 536, 2025, 1337,
1949, 1082, 99, 1191, 1476, 1167, 1560, 1978, 1062, 1015, 384, 1720,
1943, 1117, 647, 593, 1715, 1346, 69, 862, 1325, 1133, 895, 1698,
737, 1666, 865, 395, 1625, 1638, 1184, 182, 644, 997, 1743, 1691,
620, 1105, 879, 1738, 458, 1605, 445, 468, 269, 1247, 1219, 799,
325, 2028, 582, 1755, 491, 1649, 533, 1259, 1480, 1678, 420, 827,
1471, 1665, 228, 1371, 1192, 382, 189, 302, 858, 1200, 381, 1152,
211, 1833, 426, 469, 1780, 974, 905, 601, 489, 278, 1786, 1802,
609, 2011, 1197, 1563, 1141, 696, 295, 27, 1318, 680, 1798, 95,
1808, 1951, 1787, 1313, 528, 2039, 1026, 1165, 1800, 724, 88, 712,
891, 727, 1482, 1815, 541, 870, 1083, 42, 371, 1032, 1954, 871,
486, 993, 208, 1827, 1150, 1387, 1045, 1284, 675, 1777, 507, 1881,
467, 471, 1328, 472, 1968, 1998, 927, 290, 915, 197, 267, 718,
1495, 668, 1317, 1049, 1222, 1862, 907, 546, 1856, 1497, 1232, 498,
703, 1875, 1853, 926, 1927, 436, 2021, 402, 1417, 701, 337, 1871,
1435, 1514, 1212, 1861, 1135, 1694, 482, 717, 1898, 1835, 1097, 463,
1244, 1521, 17, 1149, 1405, 1431, 1690, 1946, 548, 1433, 1894, 838,
1896, 1679, 1880, 1982, 210, 761, 952, 1353, 957, 608, 787, 529,
1513, 682, 97, 1079, 1637, 688, 1914, 257, 439, 1516, 1918, 969,
516, 1613, 118, 783, 198, 1338, 745, 1864, 1928, 944, 1539, 1990,
744, 1964, 961, 1935, 391, 483, 1214, 597, 1988, 191, 1655, 1716,
1271, 768, 1891, 1972, 819, 1704, 1072, 1801, 1692, 19, 1822, 464,
1956, 147, 938, 1413, 847, 1473, 450, 559, 1933, 884, 1201, 1967,
1840, 1426, 1479, 1469, 1947, 538, 134, 501, 2054, 110, 1711, 388,
936, 403, 1899, 1510, 1147, 748, 794, 1561, 1940, 1282, 1931, 362,
1039, 1164, 1365, 572, 453, 1421, 1841, 376, 1452, 932, 1620, 1025,
1228, 1277, 1398, 1622, 224, 875, 1352, 1789, 1499, 356, 1010, 1193,
963, 1671, 1591, 2019, 478, 1866, 442, 372, 73, 1702, 2026, 334,
1753, 610, 866, 106, 1601, 990, 947, 1304, 618, 2037, 1663, 1805,
2040, 360, 983, 289, 1100, 75, 635, 953, 1202, 1485, 765, 247,
914, 1629, 1976, 1530, 80, 1114, 87}));
S->add_generator(Perm(
{0, 502, 1182, 1390, 34, 2015, 1815, 1118, 395, 1677, 291, 1453,
1711, 1737, 1432, 681, 1600, 339, 1556, 1001, 651, 532, 230, 1171,
226, 1055, 1099, 1338, 1553, 191, 1906, 643, 698, 189, 436, 727,
717, 1368, 697, 1560, 59, 1604, 1176, 1662, 420, 363, 1800, 1164,
1047, 1921, 231, 2044, 1841, 39, 528, 2019, 1480, 394, 571, 434,
2040, 1128, 258, 425, 1110, 1498, 1740, 892, 1594, 215, 1392, 468,
2001, 1651, 929, 106, 855, 849, 1947, 1489, 1961, 1144, 1255, 1201,
1165, 888, 1088, 1833, 771, 1232, 850, 1419, 721, 6, 1513, 2012,
1380, 757, 1347, 1409, 265, 861, 846, 1431, 1598, 1321, 562, 1140,
1003, 1660, 705, 1526, 346, 863, 1454, 599, 1706, 1297, 776, 1373,
960, 1019, 1583, 1568, 1247, 992, 1388, 1673, 1832, 999, 554, 1658,
334, 920, 1930, 1750, 1123, 1825, 637, 726, 682, 234, 1139, 2023,
1713, 984, 983, 1886, 505, 2057, 412, 1446, 177, 2037, 1913, 827,
485, 379, 331, 1458, 86, 1037, 793, 287, 1331, 1914, 1149, 1849,
1644, 1326, 1316, 351, 1620, 269, 642, 222, 1127, 458, 736, 796,
1228, 1922, 2025, 1442, 1354, 1224, 1163, 348, 433, 1138, 1854, 1335,
56, 197, 712, 466, 401, 604, 972, 1716, 1124, 867, 810, 221,
277, 1021, 445, 688, 364, 908, 375, 1985, 1211, 1734, 790, 145,
560, 61, 877, 868, 512, 426, 661, 1772, 5, 1299, 883, 678,
1801, 1156, 1580, 1945, 1426, 308, 349, 2032, 405, 1680, 327, 1812,
989, 695, 1960, 210, 1393, 144, 151, 1756, 89, 1805, 782, 1397,
283, 211, 1602, 1809, 438, 161, 501, 1100, 465, 19, 940, 223,
887, 1076, 365, 722, 1532, 4, 748, 1507, 1052, 212, 60, 1018,
889, 1046, 359, 525, 1864, 1314, 173, 309, 55, 510, 64, 2006,
201, 1362, 1675, 2000, 1533, 97, 2033, 930, 1254, 1757, 116, 792,
1577, 624, 980, 641, 1523, 170, 966, 655, 2014, 1208, 911, 324,
1479, 1234, 1693, 1529, 1642, 1020, 1488, 988, 1610, 1850, 96, 1586,
679, 1381, 129, 662, 1717, 1300, 1767, 977, 864, 648, 1764, 787,
866, 2052, 1994, 167, 1951, 1878, 88, 1531, 437, 1481, 660, 1719,
1510, 1048, 1796, 315, 2003, 766, 1436, 1179, 69, 987, 1206, 675,
328, 1078, 1592, 1785, 1936, 1096, 1011, 928, 917, 1999, 1174, 1685,
1573, 558, 175, 875, 107, 1962, 1636, 486, 805, 1646, 1273, 1525,
1285, 1463, 1896, 559, 372, 94, 1274, 1227, 900, 8, 785, 914,
761, 101, 1167, 480, 1315, 244, 768, 1226, 279, 22, 1325, 169,
625, 352, 1293, 1996, 517, 853, 1916, 1681, 1933, 1039, 1589, 1474,
1073, 1383, 946, 602, 707, 1406, 1909, 1345, 730, 452, 1279, 778,
1495, 1026, 1146, 1890, 1016, 718, 1322, 652, 36, 90, 209, 1195,
1015, 1821, 1484, 811, 936, 1771, 941, 186, 1923, 1748, 1967, 1198,
1246, 1085, 1569, 408, 1998, 909, 1664, 1855, 2028, 589, 673, 1090,
281, 2020, 497, 622, 527, 35, 148, 341, 1983, 842, 1218, 1672,
820, 1007, 1305, 1931, 1449, 1537, 1749, 1455, 1976, 310, 1402, 2050,
48, 567, 720, 1363, 1520, 20, 1248, 1486, 1473, 136, 696, 594,
274, 1548, 52, 1301, 1584, 163, 373, 329, 640, 1708, 239, 1133,
1013, 1829, 1281, 1000, 1710, 382, 1075, 1501, 692, 1384, 1425, 1289,
303, 804, 2009, 1089, 1797, 1081, 1942, 1625, 1310, 1839, 1181, 896,
1408, 700, 38, 511, 389, 2042, 1744, 1212, 1151, 1786, 353, 733,
390, 1808, 98, 1389, 1576, 1816, 1667, 1822, 350, 1064, 667, 576,
1527, 1837, 1077, 1278, 1282, 1574, 1170, 1670, 1205, 1521, 1676, 852,
1956, 1440, 1542, 1776, 1563, 1465, 813, 561, 317, 2027, 66, 1623,
784, 1445, 474, 1752, 1969, 503, 355, 122, 803, 278, 1701, 153,
1851, 1056, 99, 1698, 422, 1260, 374, 522, 1334, 1342, 388, 423,
838, 1250, 266, 1308, 1618, 2043, 1493, 1095, 653, 1319, 1550, 775,
1443, 612, 268, 540, 548, 417, 1391, 461, 70, 15, 666, 552,
737, 1491, 955, 1612, 2035, 1312, 10, 1210, 1894, 1230, 879, 854,
1150, 49, 1369, 1413, 959, 1014, 1596, 2056, 1547, 1251, 1209, 1173,
1367, 1652, 570, 860, 1337, 1462, 1826, 263, 333, 823, 1038, 683,
1404, 839, 1333, 523, 658, 1223, 816, 781, 1558, 1692, 947, 257,
1030, 577, 791, 1120, 956, 93, 740, 81, 1104, 993, 1236, 1044,
1824, 126, 225, 756, 2022, 919, 62, 1153, 859, 699, 1330, 1633,
1819, 459, 1059, 290, 1606, 524, 456, 1400, 1736, 157, 165, 1572,
397, 102, 63, 618, 1485, 755, 1973, 672, 347, 1524, 245, 1060,
1712, 1974, 1564, 1997, 454, 155, 220, 71, 1554, 716, 1323, 1733,
788, 1196, 1901, 159, 1769, 489, 2030, 1460, 416, 168, 1810, 406,
181, 537, 1634, 654, 899, 76, 1448, 1653, 467, 976, 2045, 635,
969, 1512, 1788, 742, 115, 297, 890, 227, 694, 1605, 1907, 1948,
1370, 472, 124, 1626, 1640, 1927, 392, 1101, 957, 1917, 1611, 809,
25, 1694, 1497, 619, 134, 858, 1351, 442, 1478, 1134, 1517, 750,
569, 738, 1561, 1420, 647, 1866, 1054, 710, 924, 996, 270, 1249,
1496, 37, 1111, 84, 286, 1306, 1437, 342, 1641, 1804, 1058, 381,
256, 362, 295, 1929, 817, 1063, 1794, 1022, 546, 325, 1043, 1217,
1707, 1459, 553, 668, 252, 194, 1519, 638, 693, 1977, 1803, 610,
418, 851, 304, 1450, 2016, 605, 1723, 1657, 79, 680, 753, 547,
1659, 137, 188, 1545, 1588, 1467, 1530, 1551, 1650, 739, 1169, 847,
1424, 1984, 255, 1121, 616, 1728, 1162, 774, 232, 1847, 318, 28,
514, 183, 958, 1029, 118, 615, 1745, 2047, 476, 103, 3, 1503,
419, 1259, 1132, 247, 288, 332, 1566, 1720, 1500, 366, 336, 903,
57, 1755, 492, 1097, 905, 926, 1357, 1375, 184, 1079, 1057, 1966,
1880, 1143, 1401, 541, 1200, 1830, 1957, 451, 873, 731, 1562, 1107,
687, 764, 429, 1570, 259, 806, 1193, 253, 1353, 250, 961, 415,
981, 789, 1028, 1470, 140, 54, 747, 243, 1619, 758, 1207, 1899,
1702, 1970, 1242, 1240, 1214, 487, 1341, 1700, 1935, 1597, 441, 1950,
176, 484, 130, 321, 1040, 550, 267, 1069, 199, 1336, 1082, 970,
166, 1982, 87, 1061, 1438, 2031, 824, 1539, 586, 991, 1122, 1838,
1350, 1687, 1941, 1688, 837, 587, 1978, 1051, 1853, 322, 818, 1035,
583, 1202, 447, 1643, 1607, 262, 874, 1621, 282, 1964, 219, 725,
865, 1760, 224, 1879, 1002, 1106, 1725, 109, 1466, 962, 1091, 1870,
1565, 927, 398, 1843, 1609, 1313, 1943, 421, 754, 1924, 95, 709,
1900, 1461, 1405, 393, 462, 1514, 734, 504, 152, 296, 1276, 1682,
711, 1476, 85, 1256, 202, 1502, 592, 1231, 1070, 708, 1877, 11,
1823, 1614, 403, 2024, 685, 1304, 198, 822, 591, 565, 614, 233,
965, 1203, 1535, 719, 200, 1714, 728, 285, 1175, 1991, 114, 1791,
500, 1421, 520, 963, 1427, 1585, 613, 1065, 1656, 1009, 1516, 2054,
1593, 1903, 1630, 1355, 1789, 2048, 2018, 131, 190, 67, 407, 542,
187, 1434, 1509, 893, 1166, 1186, 1852, 1483, 1639, 1902, 273, 80,
1544, 1067, 1988, 400, 229, 1417, 1187, 367, 1204, 323, 596, 1032,
314, 767, 1915, 402, 1131, 534, 1066, 1050, 154, 356, 280, 477,
845, 293, 1045, 1986, 1145, 1552, 922, 23, 1845, 404, 912, 1284,
1142, 1889, 119, 1414, 536, 43, 2026, 1754, 1487, 656, 765, 645,
1587, 83, 1012, 455, 1875, 12, 1781, 1290, 1868, 1441, 1177, 1678,
431, 1245, 1873, 1946, 915, 292, 1993, 471, 1086, 948, 593, 1940,
1428, 646, 1908, 556, 1158, 358, 1989, 24, 1184, 1631, 112, 690,
1715, 533, 572, 579, 217, 411, 312, 248, 1339, 1980, 490, 1937,
783, 1735, 1008, 812, 530, 428, 1239, 598, 836, 913, 629, 1773,
1113, 1356, 630, 160, 1221, 254, 1365, 1429, 597, 945, 1885, 1189,
178, 300, 535, 872, 531, 378, 1328, 659, 1559, 1632, 1378, 639,
1581, 1679, 870, 272, 1818, 1663, 1763, 82, 677, 862, 2039, 1192,
1787, 1233, 1747, 470, 933, 582, 235, 469, 631, 1792, 147, 1366,
1739, 1435, 724, 706, 891, 311, 1802, 368, 780, 299, 1456, 228,
1098, 1590, 1115, 751, 1955, 1778, 482, 319, 1093, 1102, 1859, 240,
246, 830, 954, 1541, 1528, 1469, 932, 1806, 1258, 515, 918, 1511,
1920, 800, 330, 669, 825, 1540, 876, 338, 2010, 58, 1836, 275,
1482, 1398, 1965, 384, 424, 607, 125, 772, 383, 1159, 1385, 1887,
1746, 294, 901, 513, 1318, 623, 242, 986, 921, 1033, 1575, 1452,
1844, 674, 544, 1266, 1793, 13, 1237, 519, 1271, 1954, 1697, 31,
968, 551, 203, 1758, 498, 448, 1215, 1995, 1952, 1858, 1172, 16,
446, 495, 1332, 313, 1949, 1418, 354, 1148, 1298, 601, 518, 1665,
2005, 564, 1777, 1883, 1303, 1103, 1348, 934, 743, 807, 1307, 1817,
545, 1624, 1477, 1092, 1669, 2036, 1023, 139, 938, 2007, 1774, 44,
937, 1324, 1027, 2008, 1291, 1415, 1690, 1382, 2041, 626, 449, 361,
127, 1848, 834, 316, 1302, 732, 1761, 1881, 46, 664, 1157, 573,
41, 357, 74, 1084, 670, 1840, 1119, 994, 1857, 1329, 971, 770,
1112, 621, 1416, 649, 884, 206, 1168, 1534, 1721, 1696, 1683, 113,
575, 1464, 1807, 943, 606, 671, 453, 1287, 463, 773, 414, 50,
2004, 978, 1241, 1691, 302, 1699, 2, 702, 1724, 65, 1925, 305,
214, 475, 1616, 998, 7, 1374, 42, 345, 1349, 386, 746, 1882,
1422, 1244, 1835, 1705, 665, 2013, 636, 526, 493, 284, 1703, 1129,
1346, 2034, 1006, 326, 14, 432, 1444, 30, 439, 1394, 1229, 1617,
478, 435, 1918, 1990, 953, 1191, 967, 1645, 271, 1360, 1268, 142,
931, 427, 713, 779, 121, 387, 491, 840, 1674, 1895, 72, 1267,
1615, 1340, 574, 1654, 1396, 91, 1126, 1072, 1518, 298, 494, 1010,
1379, 608, 1579, 2021, 45, 982, 627, 808, 1183, 1263, 1031, 885,
9, 413, 343, 995, 1622, 1738, 1668, 762, 2046, 488, 952, 676,
1053, 1876, 205, 1295, 164, 581, 814, 794, 430, 1846, 172, 1934,
644, 1872, 1981, 180, 1904, 174, 105, 997, 1555, 218, 1105, 213,
869, 1262, 744, 1938, 769, 499, 1975, 1972, 376, 1567, 1433, 1430,
132, 1504, 1213, 1371, 1125, 1726, 1261, 1549, 185, 1666, 1376, 595,
1926, 1197, 320, 942, 241, 1471, 1557, 301, 2011, 1155, 1071, 1280,
895, 529, 1506, 251, 1898, 684, 907, 543, 1468, 1790, 1919, 657,
516, 538, 1049, 1704, 609, 2017, 620, 1578, 1765, 763, 1412, 2029,
752, 1689, 973, 110, 714, 1135, 1784, 555, 443, 1130, 949, 1628,
557, 1582, 410, 444, 1439, 123, 1411, 1387, 549, 906, 799, 729,
111, 1490, 1343, 1358, 1062, 701, 162, 802, 1036, 1770, 1865, 1709,
1732, 1968, 1595, 1505, 974, 1813, 715, 704, 2051, 1522, 1447, 385,
192, 632, 1309, 1762, 1655, 32, 833, 856, 1005, 910, 1296, 1601,
1108, 832, 1410, 1017, 916, 1094, 1939, 1871, 1613, 237, 1648, 1536,
27, 236, 617, 1395, 1219, 650, 1649, 1141, 1472, 440, 798, 1891,
143, 1892, 306, 1782, 749, 1407, 261, 857, 1992, 939, 745, 1959,
68, 141, 1451, 2038, 26, 117, 1722, 1294, 75, 1932, 1499, 369,
723, 1779, 578, 1684, 1768, 1423, 521, 1591, 1216, 1147, 1515, 1958,
563, 2053, 1238, 1344, 2002, 1635, 207, 1252, 878, 1188, 1861, 1161,
377, 1494, 371, 146, 1317, 1731, 691, 1831, 628, 216, 370, 1508,
826, 1116, 689, 149, 1361, 1953, 138, 1780, 1199, 307, 1753, 760,
104, 2049, 1190, 611, 40, 1320, 276, 483, 1194, 135, 1862, 1185,
1888, 1775, 133, 703, 460, 871, 1270, 1403, 585, 391, 1538, 509,
47, 1842, 539, 634, 457, 979, 935, 951, 238, 1399, 881, 1235,
479, 835, 797, 496, 843, 1661, 1257, 821, 844, 150, 1117, 1359,
925, 600, 1546, 1795, 1364, 1828, 663, 51, 1160, 29, 1034, 1327,
120, 1860, 1742, 603, 1637, 77, 1627, 1686, 1311, 1783, 1987, 1971,
1893, 1004, 815, 1863, 1253, 1286, 204, 1152, 53, 1272, 92, 21,
1911, 1292, 1743, 335, 1178, 1603, 337, 1243, 786, 801, 633, 506,
1869, 1080, 1671, 1629, 777, 741, 686, 882, 171, 580, 208, 950,
1867, 1265, 1638, 1729, 179, 841, 886, 1912, 588, 1264, 902, 18,
1730, 409, 1928, 1543, 848, 1799, 396, 1599, 735, 481, 1288, 73,
1766, 2055, 1042, 1225, 1277, 1074, 1386, 1352, 182, 450, 1874, 1372,
1068, 1154, 193, 904, 590, 1751, 894, 1897, 1759, 819, 128, 923,
795, 1, 990, 975, 1041, 1608, 985, 2058, 1083, 964, 196, 1180,
1137, 1024, 1910, 1283, 195, 1025, 260, 566, 1727, 1979, 898, 1475,
1136, 360, 1571, 1275, 264, 340, 508, 1820, 1905, 78, 1963, 1798,
1834, 1884, 399, 1492, 829, 1109, 944, 100, 897, 249, 1856, 289,
1647, 1087, 33, 1222, 1811, 156, 1695, 380, 1827, 1220, 828, 17,
108, 1114, 473, 568, 1944, 158, 1741, 1269, 831, 584, 507, 880,
344, 1377, 464, 1718, 1457, 1814, 759}));
REQUIRE(S->size() == static_cast(4030387200));
delete S;
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"028",
"perm. group C2 x C2 x C2 (order 8)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 8;
using Perm = libsemigroups::Perm>;
auto S = SchreierSims();
S.add_generator(Perm({1, 0, 2, 3, 4, 5, 6, 7}));
S.add_generator(Perm({0, 1, 3, 2, 4, 5, 6, 7}));
S.add_generator(Perm({0, 1, 2, 3, 4, 5, 7, 6}));
REQUIRE(S.size() == 8);
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"029",
"perm. group C2 x C2 x C2 x C2 (order 16)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 8;
using Perm = Perm>;
auto S = SchreierSims();
S.add_generator(Perm({1, 0, 2, 3, 4, 5, 6, 7}));
S.add_generator(Perm({0, 1, 3, 2, 4, 5, 6, 7}));
S.add_generator(Perm({0, 1, 2, 3, 5, 4, 6, 7}));
S.add_generator(Perm({0, 1, 2, 3, 4, 5, 7, 6}));
REQUIRE(S.size() == 16);
REQUIRE(S.contains(S.generator(0)));
REQUIRE(S.contains(S.generator(1)));
REQUIRE(S.contains(S.generator(2)));
REQUIRE(S.contains(S.generator(3)));
REQUIRE(S.contains(Perm({1, 0, 2, 3, 5, 4, 6, 7})));
REQUIRE(S.contains(Perm({0, 1, 3, 2, 5, 4, 7, 6})));
REQUIRE(!S.contains(Perm({6, 7, 0, 1, 2, 3, 4, 5})));
REQUIRE(!S.contains(Perm({4, 1, 5, 6, 7, 0, 2, 3})));
REQUIRE(!S.contains(Perm({6, 4, 7, 0, 1, 2, 3, 5})));
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"030",
"perm. group (S5 x S5) : C2 (order 28800)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 10;
using Perm = Perm>;
auto S = SchreierSims();
S.add_generator(Perm({0, 9, 2, 3, 4, 5, 6, 7, 8, 1}));
S.add_generator(Perm({1, 2, 3, 4, 5, 6, 7, 8, 9, 0}));
REQUIRE(S.size() == 28800);
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"031",
"perm. group C3 x D8 x A5 (order 1440)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 12;
using Perm = Perm>;
auto S = SchreierSims();
S.add_generator(Perm({0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 10, 9}));
S.add_generator(Perm({0, 1, 2, 3, 4, 5, 6, 7, 9, 8, 11, 10}));
S.add_generator(Perm({0, 1, 2, 3, 4, 6, 7, 5, 8, 9, 10, 11}));
S.add_generator(Perm({0, 1, 3, 4, 2, 5, 6, 7, 8, 9, 10, 11}));
S.add_generator(Perm({0, 2, 1, 4, 3, 5, 6, 7, 8, 9, 10, 11}));
S.add_generator(Perm({1, 0, 2, 4, 3, 5, 6, 7, 8, 9, 10, 11}));
REQUIRE(S.size() == 1440);
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"032",
"perm. group GL(4, 3) (order 24261120)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 81;
auto S = SchreierSims();
using Perm = std::remove_pointer::type::element_type;
S.add_generator(Perm(
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 54, 55, 56, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
78, 79, 80, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53}));
S.add_generator(Perm(
{0, 6, 3, 18, 24, 21, 9, 15, 12, 54, 60, 57, 72, 78, 75, 63, 69,
66, 27, 33, 30, 45, 51, 48, 36, 42, 39, 55, 61, 58, 73, 79, 76, 64,
70, 67, 28, 34, 31, 46, 52, 49, 37, 43, 40, 1, 7, 4, 19, 25, 22,
10, 16, 13, 29, 35, 32, 47, 53, 50, 38, 44, 41, 2, 8, 5, 20, 26,
23, 11, 17, 14, 56, 62, 59, 74, 80, 77, 65, 71, 68}));
REQUIRE(S.contains(S.generator(0)));
REQUIRE(S.contains(S.generator(1)));
REQUIRE(S.contains(Perm(
{0, 65, 46, 7, 69, 53, 5, 67, 48, 21, 59, 40, 19, 54, 38, 26, 61,
42, 15, 80, 34, 13, 75, 32, 11, 73, 27, 45, 2, 64, 52, 6, 71, 50,
4, 66, 39, 23, 58, 37, 18, 56, 44, 25, 60, 33, 17, 79, 31, 12, 77,
29, 10, 72, 63, 47, 1, 70, 51, 8, 68, 49, 3, 57, 41, 22, 55, 36,
20, 62, 43, 24, 78, 35, 16, 76, 30, 14, 74, 28, 9})));
REQUIRE(S.contains(Perm(
{0, 6, 3, 18, 24, 21, 9, 15, 12, 54, 60, 57, 72, 78, 75, 63, 69,
66, 27, 33, 30, 45, 51, 48, 36, 42, 39, 55, 61, 58, 73, 79, 76, 64,
70, 67, 28, 34, 31, 46, 52, 49, 37, 43, 40, 1, 7, 4, 19, 25, 22,
10, 16, 13, 29, 35, 32, 47, 53, 50, 38, 44, 41, 2, 8, 5, 20, 26,
23, 11, 17, 14, 56, 62, 59, 74, 80, 77, 65, 71, 68})));
REQUIRE(S.contains(Perm(
{0, 13, 26, 39, 52, 29, 78, 55, 68, 65, 75, 61, 23, 6, 10, 35, 36,
49, 46, 32, 42, 58, 71, 72, 16, 20, 3, 5, 15, 19, 44, 45, 31, 74,
57, 70, 67, 80, 54, 25, 2, 12, 28, 41, 51, 48, 34, 38, 60, 64, 77,
9, 22, 8, 7, 11, 21, 37, 50, 33, 76, 62, 63, 69, 73, 59, 18, 4,
17, 30, 43, 47, 53, 27, 40, 56, 66, 79, 14, 24, 1})));
REQUIRE(!S.contains(Perm(
{0, 13, 26, 39, 52, 29, 78, 55, 68, 65, 75, 61, 23, 4, 10, 35, 36,
49, 46, 32, 42, 58, 71, 72, 16, 7, 3, 5, 15, 19, 44, 45, 31, 74,
57, 70, 67, 80, 54, 25, 1, 12, 28, 41, 51, 48, 34, 38, 60, 64, 77,
9, 63, 8, 22, 11, 21, 37, 50, 33, 76, 62, 53, 69, 73, 59, 18, 6,
17, 30, 43, 47, 20, 27, 40, 56, 66, 79, 14, 24, 2})));
REQUIRE(!S.contains(Perm(
{0, 29, 55, 35, 61, 4, 58, 3, 32, 20, 79, 24, 76, 21, 50, 18, 47,
73, 67, 12, 41, 9, 38, 64, 44, 70, 15, 13, 39, 68, 36, 65, 10, 71,
16, 42, 27, 56, 2, 62, 22, 33, 6, 30, 59, 80, 25, 51, 63, 48, 77,
45, 74, 19, 26, 52, 78, 49, 75, 23, 72, 7, 46, 40, 66, 14, 53, 11,
37, 17, 43, 69, 54, 1, 28, 8, 34, 60, 31, 57, 5})));
REQUIRE(!S.contains(Perm(
{0, 13, 26, 39, 52, 29, 78, 55, 68, 65, 75, 61, 23, 4, 10, 35, 36,
49, 46, 32, 42, 58, 71, 72, 16, 63, 3, 5, 15, 19, 44, 45, 31, 74,
57, 70, 67, 80, 54, 25, 1, 12, 28, 41, 51, 48, 34, 38, 60, 64, 77,
9, 20, 8, 53, 11, 21, 37, 50, 33, 76, 62, 7, 69, 73, 59, 18, 6,
17, 30, 43, 47, 22, 27, 40, 56, 66, 79, 14, 24, 2})));
REQUIRE(S.size() == 24261120);
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"033",
"perm. group PSL(3, 7) (order 1876896)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
constexpr size_t N = 57;
using Perm = Perm>;
auto S = new SchreierSims();
S->add_generator(
Perm({1, 8, 15, 22, 29, 36, 43, 50, 12, 19, 26, 33, 40, 47, 54,
10, 45, 52, 17, 24, 31, 38, 14, 35, 42, 49, 56, 21, 28, 11,
53, 18, 25, 32, 39, 46, 0, 5, 4, 3, 2, 7, 6, 13, 27,
34, 41, 48, 55, 20, 9, 37, 44, 51, 16, 23, 30}));
S->add_generator(
Perm({0, 1, 3, 4, 5, 6, 7, 2, 8, 14, 9, 10, 11, 12, 13,
43, 49, 44, 45, 46, 47, 48, 50, 56, 51, 52, 53, 54, 55, 15,
21, 16, 17, 18, 19, 20, 22, 28, 23, 24, 25, 26, 27, 29, 35,
30, 31, 32, 33, 34, 36, 42, 37, 38, 39, 40, 41}));
REQUIRE(S->contains(S->generator(0)));
REQUIRE(S->contains(S->generator(1)));
REQUIRE(S->size() == 1876896);
REQUIRE(S->contains(
Perm({53, 51, 0, 54, 52, 56, 50, 55, 37, 35, 8, 27, 5, 19, 45,
1, 39, 25, 32, 46, 11, 18, 16, 43, 41, 4, 12, 31, 28, 44,
2, 33, 38, 21, 22, 13, 30, 26, 17, 14, 36, 48, 7, 9, 20,
3, 47, 24, 42, 29, 23, 10, 49, 15, 34, 6, 40})));
REQUIRE(S->contains(
Perm({12, 40, 47, 19, 26, 54, 33, 1, 2, 25, 15, 55, 45, 42, 30,
48, 50, 23, 35, 18, 38, 3, 24, 5, 34, 46, 51, 36, 21, 56,
44, 6, 17, 29, 39, 27, 16, 31, 53, 4, 28, 41, 43, 32, 20,
49, 22, 7, 37, 52, 8, 14, 10, 9, 13, 0, 11})));
REQUIRE(S->contains(
Perm({37, 5, 45, 27, 53, 19, 35, 8, 36, 39, 41, 40, 38, 0, 42,
24, 33, 18, 14, 55, 6, 43, 46, 15, 56, 31, 26, 3, 13, 12,
52, 22, 20, 49, 7, 32, 34, 28, 47, 50, 11, 2, 17, 21, 48,
10, 25, 29, 4, 54, 51, 9, 30, 44, 16, 1, 23})));
REQUIRE(!S->contains(
Perm({37, 1, 19, 35, 8, 45, 27, 3, 36, 38, 2, 42, 39, 41, 40,
29, 55, 4, 43, 33, 18, 14, 46, 53, 24, 13, 15, 56, 31, 12,
49, 5, 32, 52, 22, 20, 34, 11, 0, 17, 28, 47, 50, 21, 26,
7, 54, 48, 10, 25, 51, 16, 6, 23, 9, 30, 44})));
REQUIRE(!S->contains(
Perm({8, 12, 14, 11, 0, 13, 9, 10, 40, 16, 3, 56, 32, 2, 48,
47, 31, 21, 39, 4, 55, 23, 19, 26, 7, 27, 37, 45, 35, 29,
6, 34, 44, 52, 42, 18, 54, 28, 46, 1, 20, 30, 38, 33, 41,
51, 17, 49, 25, 53, 5, 43, 36, 24, 22, 15, 50})));
REQUIRE(!S->contains(
Perm({51, 37, 4, 16, 44, 30, 9, 23, 6, 46, 12, 21, 36, 26, 34,
8, 29, 49, 25, 41, 33, 17, 45, 13, 1, 53, 40, 18, 28, 27,
15, 32, 5, 38, 14, 47, 24, 56, 52, 54, 2, 55, 50, 19, 31,
22, 48, 42, 7, 11, 35, 3, 20, 10, 39, 43, 0})));
delete S;
}
// The following are comment out since the "action" struct requires the
// compiler intrinsic lz_cnt, which we don't currently want to rely on. This
// is a POC, and works when lz_cnt is available and actually counts leading
// 0s.
// LIBSEMIGROUPS_TEST_CASE("SchreierSims", "034", "BMat8 cyclic group
// order 2",
// "[quick][schreier-sims]") {
// SchreierSims<8, size_t, BMat8> S;
// S.add_generator(BMat8({{0, 1, 0, 0, 0, 0, 0, 0},
// {1, 0, 0, 0, 0, 0, 0, 0},
// {0, 0, 1, 0, 0, 0, 0, 0},
// {0, 0, 0, 1, 0, 0, 0, 0},
// {0, 0, 0, 0, 1, 0, 0, 0},
// {0, 0, 0, 0, 0, 1, 0, 0},
// {0, 0, 0, 0, 0, 0, 1, 0},
// {0, 0, 0, 0, 0, 0, 0, 1}}));
// REQUIRE(S.size() == 2);
// }
//
// LIBSEMIGROUPS_TEST_CASE("SchreierSims", "035", "BMat8 symmetric group
// 8",
// "[quick][schreier-sims]") {
// SchreierSims<8, size_t, BMat8> S;
// S.add_generator(BMat8({{0, 1, 0, 0, 0, 0, 0, 0},
// {1, 0, 0, 0, 0, 0, 0, 0},
// {0, 0, 1, 0, 0, 0, 0, 0},
// {0, 0, 0, 1, 0, 0, 0, 0},
// {0, 0, 0, 0, 1, 0, 0, 0},
// {0, 0, 0, 0, 0, 1, 0, 0},
// {0, 0, 0, 0, 0, 0, 1, 0},
// {0, 0, 0, 0, 0, 0, 0, 1}}));
// S.add_generator(BMat8({{0, 1, 0, 0, 0, 0, 0, 0},
// {0, 0, 1, 0, 0, 0, 0, 0},
// {0, 0, 0, 1, 0, 0, 0, 0},
// {0, 0, 0, 0, 1, 0, 0, 0},
// {0, 0, 0, 0, 0, 1, 0, 0},
// {0, 0, 0, 0, 0, 0, 1, 0},
// {0, 0, 0, 0, 0, 0, 0, 1},
// {1, 0, 0, 0, 0, 0, 0, 0}}));
// REQUIRE(S.size() == 40320);
// }
//
//
// LIBSEMIGROUPS_TEST_CASE("SchreierSims", "036", "BMat8 dihedral group
// D_16",
// "[quick][schreier-sims]") {
// SchreierSims<8, size_t, BMat8> S;
// S.add_generator(BMat8({{1, 0, 0, 0, 0, 0, 0, 0},
// {0, 0, 0, 0, 0, 0, 0, 1},
// {0, 0, 0, 0, 0, 0, 1, 0},
// {0, 0, 0, 0, 0, 1, 0, 0},
// {0, 0, 0, 0, 1, 0, 0, 0},
// {0, 0, 0, 1, 0, 0, 0, 0},
// {0, 0, 1, 0, 0, 0, 0, 0},
// {0, 1, 0, 0, 0, 0, 0, 0}}));
// S.add_generator(BMat8({{0, 1, 0, 0, 0, 0, 0, 0},
// {0, 0, 1, 0, 0, 0, 0, 0},
// {0, 0, 0, 1, 0, 0, 0, 0},
// {0, 0, 0, 0, 1, 0, 0, 0},
// {0, 0, 0, 0, 0, 1, 0, 0},
// {0, 0, 0, 0, 0, 0, 1, 0},
// {0, 0, 0, 0, 0, 0, 0, 1},
// {1, 0, 0, 0, 0, 0, 0, 0}}));
// REQUIRE(S.size() == 16);
// }
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"037",
"symmetric perm. group (degree 5)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
using Perm = Perm>;
SchreierSims<5, size_t, Perm> S;
S.add_generator(Perm({1, 2, 3, 4, 0}));
S.add_generator(Perm({1, 0, 2, 3, 4}));
REQUIRE(S.size() == static_cast(120));
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"038",
"alternating perm. group (degree 17)",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
SchreierSims<17> S;
S.clear();
using Perm = SchreierSims<17>::element_type;
REQUIRE(S.size() == 1);
S.add_generator(
Perm({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0}));
S.add_generator(
Perm({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 14}));
REQUIRE(S.size() == static_cast(177843714048000));
REQUIRE(S.base(0) == 0);
REQUIRE(S.contains(
Perm({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0})));
REQUIRE(!S.contains(
Perm({1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16})));
REQUIRE(S.contains(
Perm({1, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16})));
S.clear();
REQUIRE(S.size() == 1);
S.add_generator(
Perm({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0}));
S.add_generator(
Perm({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 14}));
S.clear();
REQUIRE_THROWS_AS(S.base(0), LibsemigroupsException);
REQUIRE_THROWS_AS(S.add_base_point(17), LibsemigroupsException);
S.add_base_point(14);
S.add_base_point(15);
S.add_generator(
Perm({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0}));
S.add_base_point(1);
S.add_base_point(3);
S.add_generator(
Perm({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 14}));
REQUIRE(S.base_size() == 4);
REQUIRE(S.size() == static_cast(177843714048000));
REQUIRE(S.base(0) == 14);
REQUIRE(S.base(1) == 15);
REQUIRE(S.base(2) == 1);
REQUIRE(S.base(3) == 3);
REQUIRE(S.base_size() == 15);
REQUIRE_THROWS_AS(S.add_base_point(1), LibsemigroupsException);
REQUIRE_THROWS_AS(S.base(15), LibsemigroupsException);
REQUIRE(S.contains(
Perm({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0})));
REQUIRE(!S.contains(
Perm({1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16})));
REQUIRE(S.contains(
Perm({1, 0, 3, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16})));
REQUIRE_THROWS_AS(S.add_base_point(1), LibsemigroupsException);
S.clear();
S.add_generator(
Perm({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0}));
REQUIRE(S.size() == 17);
S.add_generator(
Perm({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 14}));
REQUIRE(S.size() == static_cast(177843714048000));
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"039",
"exceptions",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
using Perm = Perm>;
SchreierSims<5, size_t, Perm> S;
S.add_generator(Perm({1, 2, 3, 4, 0}));
S.add_generator(Perm({1, 0, 2, 3, 4}));
REQUIRE(S.size() == static_cast(120));
REQUIRE_THROWS_AS(S.add_generator(Perm({0, 1, 2})), LibsemigroupsException);
REQUIRE_THROWS_AS(S.add_generator(Perm({2, 3, 0, 1, 4, 6})),
LibsemigroupsException);
REQUIRE_THROWS_AS(S.generator(10), LibsemigroupsException);
REQUIRE_THROWS_AS(S.generator(2), LibsemigroupsException);
REQUIRE_NOTHROW(S.generator(0));
REQUIRE_NOTHROW(S.generator(1));
REQUIRE_THROWS_AS(S.sift(Perm({2, 3, 0, 1, 4, 6})), LibsemigroupsException);
REQUIRE_THROWS_AS(S.sift(Perm({2, 0, 1})), LibsemigroupsException);
REQUIRE_NOTHROW(S.sift(S.generator(1)));
REQUIRE(S.contains(S.generator(1)));
REQUIRE(S.contains(S.generator(0)));
REQUIRE(S.contains(Perm({0, 3, 1, 4, 2})));
REQUIRE(!S.contains(Perm({2, 3, 0, 1, 4, 6})));
REQUIRE(!S.contains(Perm({2, 0, 1})));
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"040",
"exceptions",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
using Perm = Perm>;
SchreierSims<5, size_t, Perm> S;
S.add_generator(Perm({1, 2, 3, 4, 0}));
S.add_generator(Perm({1, 0, 2, 3, 4}));
REQUIRE_THROWS_AS(S.add_base_point(0), LibsemigroupsException);
for (size_t i = 1; i < 5; ++i) {
REQUIRE_NOTHROW(S.add_base_point(i));
}
REQUIRE_THROWS_AS(S.add_base_point(5), LibsemigroupsException);
REQUIRE_THROWS_AS(S.add_base_point(100), LibsemigroupsException);
}
LIBSEMIGROUPS_TEST_CASE("SchreierSims",
"041",
"trivial group",
"[quick][schreier-sims]") {
auto rg = ReportGuard(REPORT);
SchreierSims<5> S;
using Perm = typename decltype(S)::element_type;
S.add_generator(Perm({1, 2, 3, 4, 0}));
S.add_generator(Perm({1, 0, 2, 3, 4}));
REQUIRE_THROWS_AS(S.add_base_point(0), LibsemigroupsException);
for (size_t i = 1; i < 5; ++i) {
REQUIRE_NOTHROW(S.add_base_point(i));
}
REQUIRE_THROWS_AS(S.add_base_point(6), LibsemigroupsException);
}
} // namespace libsemigroups