Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long llint;
- const int MAXN = (1 << 12) + 5;
- int n, w, m, len, sd, gpot, flg, dens;
- bitset <(1 << 12) + 10> bt[400];
- bitset <150> mask[(1 << 12) + 10];
- int prr[15] = {0, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5};
- int p[MAXN], g[MAXN][MAXN], dd[30][30], sjeme[30][30], dd2[30][30], sjeme2[30][30], ro[30][30];
- llint rnd = 1, ca = 31337, cb = 24253453, mod = 1000000007;
- llint rnd_br () {
- llint res = rnd;
- rnd = (rnd * ca + cb) % mod;
- return res;
- }
- llint rnd_shuffle () {
- for (int i=n; i>1; i--) {
- swap(p[i], p[rnd_br() % i + 1]);
- }
- }
- void precompute() {
- dd[1][2] = 5; sjeme[1][2] = 1;
- dd[1][3] = 7; sjeme[1][3] = 1;
- dd[1][4] = 9; sjeme[1][4] = 1;
- dd[1][5] = 11; sjeme[1][5] = 1;
- dd[1][6] = 13; sjeme[1][6] = 1;
- dd[1][7] = 15; sjeme[1][7] = 1;
- dd[1][8] = 17; sjeme[1][8] = 1;
- dd[1][9] = 19; sjeme[1][9] = 1;
- dd[1][10] = 21; sjeme[1][10] = 1;
- dd[1][11] = 23; sjeme[1][11] = 1;
- dd[1][12] = 25; sjeme[1][12] = 1;
- dd[1][13] = 27; sjeme[1][13] = 1;
- dd[1][14] = 29; sjeme[1][14] = 1;
- dd[1][15] = 31; sjeme[1][15] = 1;
- dd[1][16] = 33; sjeme[1][16] = 1;
- dd[2][2] = 8; sjeme[2][2] = 4;
- dd[2][3] = 11; sjeme[2][3] = 2;
- dd[2][4] = 14; sjeme[2][4] = 2;
- dd[2][5] = 17; sjeme[2][5] = 10;
- dd[2][6] = 20; sjeme[2][6] = 16;
- dd[2][7] = 23; sjeme[2][7] = 10;
- dd[2][8] = 26; sjeme[2][8] = 4;
- dd[2][9] = 29; sjeme[2][9] = 4;
- dd[2][10] = 32; sjeme[2][10] = 29;
- dd[2][11] = 35; sjeme[2][11] = 2;
- dd[2][12] = 38; sjeme[2][12] = 2;
- dd[2][13] = 41; sjeme[2][13] = 2;
- dd[2][14] = 44; sjeme[2][14] = 39;
- dd[2][15] = 47; sjeme[2][15] = 19;
- dd[2][16] = 50; sjeme[2][16] = 2;
- dd[3][2] = 11; sjeme[3][2] = 129;
- dd[3][3] = 15; sjeme[3][3] = 377;
- dd[3][4] = 19; sjeme[3][4] = 42;
- dd[3][5] = 23; sjeme[3][5] = 446;
- dd[3][6] = 27; sjeme[3][6] = 55;
- dd[3][7] = 30; sjeme[3][7] = 312;
- dd[3][8] = 34; sjeme[3][8] = 213;
- dd[3][9] = 39; sjeme[3][9] = 55;
- dd[3][10] = 41; sjeme[3][10] = 213;
- dd[3][11] = 46; sjeme[3][11] = 211;
- dd[3][12] = 50; sjeme[3][12] = 40;
- dd[3][13] = 53; sjeme[3][13] = 187;
- dd[3][14] = 57; sjeme[3][14] = 255;
- dd[3][15] = 61; sjeme[3][15] = 18;
- dd[3][16] = 64; sjeme[3][16] = 258;
- dd[4][2] = 15; sjeme[4][2] = 42;
- dd[4][3] = 19; sjeme[4][3] = 410;
- dd[4][4] = 24; sjeme[4][4] = 338;
- dd[4][5] = 28; sjeme[4][5] = 236;
- dd[4][6] = 33; sjeme[4][6] = 236;
- dd[4][7] = 37; sjeme[4][7] = 494;
- dd[4][8] = 42; sjeme[4][8] = 185;
- dd[4][9] = 47; sjeme[4][9] = 28;
- dd[4][10] = 50; sjeme[4][10] = 28;
- dd[4][11] = 54; sjeme[4][11] = 149;
- dd[4][12] = 58; sjeme[4][12] = 319;
- dd[4][13] = 62; sjeme[4][13] = 500;
- dd[4][14] = 66; sjeme[4][14] = 500;
- dd[4][15] = 70; sjeme[4][15] = 500;
- dd[4][16] = 75; sjeme[4][16] = 310;
- dd[5][2] = 18; sjeme[5][2] = 303;
- dd[5][3] = 23; sjeme[5][3] = 394;
- dd[5][4] = 28; sjeme[5][4] = 11;
- dd[5][5] = 33; sjeme[5][5] = 11;
- dd[5][6] = 38; sjeme[5][6] = 66;
- dd[5][7] = 43; sjeme[5][7] = 97;
- dd[5][8] = 47; sjeme[5][8] = 113;
- dd[5][9] = 52; sjeme[5][9] = 21;
- dd[5][10] = 56; sjeme[5][10] = 415;
- dd[5][11] = 62; sjeme[5][11] = 23;
- dd[5][12] = 66; sjeme[5][12] = 94;
- dd[5][13] = 70; sjeme[5][13] = 225;
- dd[5][14] = 74; sjeme[5][14] = 225;
- dd[5][15] = 78; sjeme[5][15] = 225;
- dd[5][16] = 83; sjeme[5][16] = 381;
- dd[6][2] = 21; sjeme[6][2] = 39;
- dd[6][3] = 27; sjeme[6][3] = 129;
- dd[6][4] = 32; sjeme[6][4] = 59;
- dd[6][5] = 37; sjeme[6][5] = 59;
- dd[6][6] = 43; sjeme[6][6] = 37;
- dd[6][7] = 47; sjeme[6][7] = 305;
- dd[6][8] = 52; sjeme[6][8] = 248;
- dd[6][9] = 57; sjeme[6][9] = 59;
- dd[6][10] = 62; sjeme[6][10] = 38;
- dd[6][11] = 67; sjeme[6][11] = 168;
- dd[6][12] = 72; sjeme[6][12] = 262;
- dd[6][13] = 76; sjeme[6][13] = 182;
- dd[6][14] = 81; sjeme[6][14] = 107;
- dd[6][15] = 85; sjeme[6][15] = 343;
- dd[6][16] = 89; sjeme[6][16] = 107;
- dd[7][2] = 24; sjeme[7][2] = 311;
- dd[7][3] = 30; sjeme[7][3] = 16;
- dd[7][4] = 35; sjeme[7][4] = 1;
- dd[7][5] = 40; sjeme[7][5] = 247;
- dd[7][6] = 46; sjeme[7][6] = 160;
- dd[7][7] = 51; sjeme[7][7] = 38;
- dd[7][8] = 56; sjeme[7][8] = 251;
- dd[7][9] = 61; sjeme[7][9] = 123;
- dd[7][10] = 66; sjeme[7][10] = 251;
- dd[7][11] = 71; sjeme[7][11] = 6;
- dd[7][12] = 76; sjeme[7][12] = 202;
- dd[7][13] = 80; sjeme[7][13] = 54;
- dd[7][14] = 85; sjeme[7][14] = 103;
- dd[7][15] = 91; sjeme[7][15] = 2;
- dd[7][16] = 95; sjeme[7][16] = 85;
- dd[8][2] = 27; sjeme[8][2] = 39;
- dd[8][3] = 33; sjeme[8][3] = 153;
- dd[8][4] = 39; sjeme[8][4] = 77;
- dd[8][5] = 44; sjeme[8][5] = 50;
- dd[8][6] = 50; sjeme[8][6] = 210;
- dd[8][7] = 55; sjeme[8][7] = 242;
- dd[8][8] = 60; sjeme[8][8] = 142;
- dd[8][9] = 66; sjeme[8][9] = 226;
- dd[8][10] = 71; sjeme[8][10] = 10;
- dd[8][11] = 74; sjeme[8][11] = 400;
- dd[8][12] = 80; sjeme[8][12] = 336;
- dd[8][13] = 86; sjeme[8][13] = 229;
- dd[8][14] = 91; sjeme[8][14] = 4;
- dd[8][15] = 95; sjeme[8][15] = 206;
- dd[8][16] = 100; sjeme[8][16] = 159;
- dd[9][2] = 30; sjeme[9][2] = 84;
- dd[9][3] = 35; sjeme[9][3] = 451;
- dd[9][4] = 41; sjeme[9][4] = 28;
- dd[9][5] = 47; sjeme[9][5] = 171;
- dd[9][6] = 52; sjeme[9][6] = 118;
- dd[9][7] = 58; sjeme[9][7] = 33;
- dd[9][8] = 65; sjeme[9][8] = 24;
- dd[9][9] = 68; sjeme[9][9] = 181;
- dd[9][10] = 75; sjeme[9][10] = 25;
- dd[9][11] = 80; sjeme[9][11] = 58;
- dd[9][12] = 85; sjeme[9][12] = 365;
- dd[9][13] = 89; sjeme[9][13] = 101;
- dd[9][14] = 94; sjeme[9][14] = 243;
- dd[9][15] = 99; sjeme[9][15] = 342;
- dd[9][16] = 105; sjeme[9][16] = 50;
- dd[10][2] = 32; sjeme[10][2] = 115;
- dd[10][3] = 39; sjeme[10][3] = 141;
- dd[10][4] = 45; sjeme[10][4] = 27;
- dd[10][5] = 51; sjeme[10][5] = 82;
- dd[10][6] = 56; sjeme[10][6] = 39;
- dd[10][7] = 61; sjeme[10][7] = 186;
- dd[10][8] = 67; sjeme[10][8] = 175;
- dd[10][9] = 73; sjeme[10][9] = 72;
- dd[10][10] = 78; sjeme[10][10] = 41;
- dd[10][11] = 84; sjeme[10][11] = 9;
- dd[10][12] = 88; sjeme[10][12] = 301;
- dd[10][13] = 94; sjeme[10][13] = 9;
- dd[10][14] = 99; sjeme[10][14] = 49;
- dd[10][15] = 104; sjeme[10][15] = 116;
- dd[10][16] = 109; sjeme[10][16] = 34;
- dd[11][2] = 34; sjeme[11][2] = 186;
- dd[11][3] = 41; sjeme[11][3] = 349;
- dd[11][4] = 47; sjeme[11][4] = 214;
- dd[11][5] = 53; sjeme[11][5] = 482;
- dd[11][6] = 60; sjeme[11][6] = 27;
- dd[11][7] = 65; sjeme[11][7] = 40;
- dd[11][8] = 70; sjeme[11][8] = 69;
- dd[11][9] = 76; sjeme[11][9] = 63;
- dd[11][10] = 81; sjeme[11][10] = 157;
- dd[11][11] = 87; sjeme[11][11] = 82;
- dd[11][12] = 92; sjeme[11][12] = 128;
- dd[11][13] = 97; sjeme[11][13] = 354;
- dd[11][14] = 102; sjeme[11][14] = 223;
- dd[11][15] = 106; sjeme[11][15] = 359;
- dd[11][16] = 112; sjeme[11][16] = 145;
- dd[12][2] = 36; sjeme[12][2] = 132;
- dd[12][3] = 43; sjeme[12][3] = 273;
- dd[12][4] = 50; sjeme[12][4] = 288;
- dd[12][5] = 56; sjeme[12][5] = 129;
- dd[12][6] = 62; sjeme[12][6] = 82;
- dd[12][7] = 67; sjeme[12][7] = 339;
- dd[12][8] = 74; sjeme[12][8] = 4;
- dd[12][9] = 79; sjeme[12][9] = 403;
- dd[12][10] = 84; sjeme[12][10] = 404;
- dd[12][11] = 89; sjeme[12][11] = 242;
- dd[12][12] = 95; sjeme[12][12] = 211;
- dd[12][13] = 100; sjeme[12][13] = 396;
- dd[12][14] = 106; sjeme[12][14] = 497;
- dd[12][15] = 111; sjeme[12][15] = 81;
- dd[12][16] = 117; sjeme[12][16] = 49;
- dd2[1][2] = 5; sjeme2[1][2] = 1; ro[1][2] = 15;
- dd2[1][3] = 7; sjeme2[1][3] = 1; ro[1][3] = 15;
- dd2[1][4] = 9; sjeme2[1][4] = 1; ro[1][4] = 15;
- dd2[1][5] = 11; sjeme2[1][5] = 1; ro[1][5] = 15;
- dd2[1][6] = 13; sjeme2[1][6] = 1; ro[1][6] = 15;
- dd2[1][7] = 15; sjeme2[1][7] = 1; ro[1][7] = 15;
- dd2[1][8] = 17; sjeme2[1][8] = 1; ro[1][8] = 15;
- dd2[1][9] = 19; sjeme2[1][9] = 1; ro[1][9] = 15;
- dd2[1][10] = 21; sjeme2[1][10] = 1; ro[1][10] = 15;
- dd2[1][11] = 23; sjeme2[1][11] = 1; ro[1][11] = 15;
- dd2[1][12] = 25; sjeme2[1][12] = 1; ro[1][12] = 15;
- dd2[1][13] = 27; sjeme2[1][13] = 1; ro[1][13] = 15;
- dd2[1][14] = 29; sjeme2[1][14] = 1; ro[1][14] = 15;
- dd2[1][15] = 31; sjeme2[1][15] = 1; ro[1][15] = 15;
- dd2[1][16] = 33; sjeme2[1][16] = 1; ro[1][16] = 15;
- dd2[1][2] = 5; sjeme2[1][2] = 1; ro[1][2] = 15;
- dd2[1][3] = 7; sjeme2[1][3] = 1; ro[1][3] = 15;
- dd2[1][4] = 9; sjeme2[1][4] = 1; ro[1][4] = 15;
- dd2[1][5] = 11; sjeme2[1][5] = 1; ro[1][5] = 15;
- dd2[1][6] = 13; sjeme2[1][6] = 1; ro[1][6] = 15;
- dd2[1][7] = 15; sjeme2[1][7] = 1; ro[1][7] = 15;
- dd2[1][8] = 17; sjeme2[1][8] = 1; ro[1][8] = 15;
- dd2[1][9] = 19; sjeme2[1][9] = 1; ro[1][9] = 15;
- dd2[1][10] = 21; sjeme2[1][10] = 1; ro[1][10] = 15;
- dd2[1][11] = 23; sjeme2[1][11] = 1; ro[1][11] = 15;
- dd2[1][12] = 25; sjeme2[1][12] = 1; ro[1][12] = 15;
- dd2[1][13] = 27; sjeme2[1][13] = 1; ro[1][13] = 15;
- dd2[1][14] = 29; sjeme2[1][14] = 1; ro[1][14] = 15;
- dd2[1][15] = 31; sjeme2[1][15] = 1; ro[1][15] = 15;
- dd2[1][16] = 33; sjeme2[1][16] = 1; ro[1][16] = 15;
- dd2[2][2] = 8; sjeme2[2][2] = 1; ro[2][2] = 16;
- dd2[2][3] = 11; sjeme2[2][3] = 1; ro[2][3] = 16;
- dd2[2][4] = 14; sjeme2[2][4] = 84; ro[2][4] = 16;
- dd2[2][5] = 17; sjeme2[2][5] = 283; ro[2][5] = 16;
- dd2[2][6] = 20; sjeme2[2][6] = 283; ro[2][6] = 18;
- dd2[2][7] = 23; sjeme2[2][7] = 283; ro[2][7] = 18;
- dd2[2][8] = 27; sjeme2[2][8] = 283; ro[2][8] = 18;
- dd2[2][9] = 31; sjeme2[2][9] = 193; ro[2][9] = 16;
- dd2[2][10] = 35; sjeme2[2][10] = 84; ro[2][10] = 16;
- dd2[2][11] = 38; sjeme2[2][11] = 283; ro[2][11] = 18;
- dd2[2][12] = 41; sjeme2[2][12] = 283; ro[2][12] = 18;
- dd2[2][13] = 44; sjeme2[2][13] = 283; ro[2][13] = 18;
- dd2[2][14] = 48; sjeme2[2][14] = 283; ro[2][14] = 18;
- dd2[2][15] = 53; sjeme2[2][15] = 260; ro[2][15] = 18;
- dd2[2][16] = 56; sjeme2[2][16] = 260; ro[2][16] = 18;
- dd2[3][2] = 10; sjeme2[3][2] = 6; ro[3][2] = 16;
- dd2[3][3] = 13; sjeme2[3][3] = 220; ro[3][3] = 16;
- dd2[3][4] = 17; sjeme2[3][4] = 87; ro[3][4] = 16;
- dd2[3][5] = 20; sjeme2[3][5] = 148; ro[3][5] = 20;
- dd2[3][6] = 24; sjeme2[3][6] = 201; ro[3][6] = 20;
- dd2[3][7] = 28; sjeme2[3][7] = 260; ro[3][7] = 26;
- dd2[3][8] = 32; sjeme2[3][8] = 290; ro[3][8] = 24;
- dd2[3][9] = 37; sjeme2[3][9] = 177; ro[3][9] = 16;
- dd2[3][10] = 39; sjeme2[3][10] = 260; ro[3][10] = 26;
- dd2[3][11] = 44; sjeme2[3][11] = 240; ro[3][11] = 24;
- dd2[3][12] = 49; sjeme2[3][12] = 159; ro[3][12] = 16;
- dd2[3][13] = 51; sjeme2[3][13] = 159; ro[3][13] = 16;
- dd2[3][14] = 55; sjeme2[3][14] = 159; ro[3][14] = 16;
- dd2[3][15] = 58; sjeme2[3][15] = 159; ro[3][15] = 16;
- dd2[3][16] = 63; sjeme2[3][16] = 159; ro[3][16] = 16;
- dd2[4][2] = 11; sjeme2[4][2] = 34; ro[4][2] = 18;
- dd2[4][3] = 15; sjeme2[4][3] = 41; ro[4][3] = 19;
- dd2[4][4] = 19; sjeme2[4][4] = 231; ro[4][4] = 18;
- dd2[4][5] = 23; sjeme2[4][5] = 66; ro[4][5] = 15;
- dd2[4][6] = 28; sjeme2[4][6] = 3; ro[4][6] = 16;
- dd2[4][7] = 31; sjeme2[4][7] = 136; ro[4][7] = 24;
- dd2[4][8] = 36; sjeme2[4][8] = 8; ro[4][8] = 15;
- dd2[4][9] = 40; sjeme2[4][9] = 247; ro[4][9] = 15;
- dd2[4][10] = 44; sjeme2[4][10] = 300; ro[4][10] = 21;
- dd2[4][11] = 48; sjeme2[4][11] = 300; ro[4][11] = 21;
- dd2[4][12] = 52; sjeme2[4][12] = 196; ro[4][12] = 26;
- dd2[4][13] = 56; sjeme2[4][13] = 81; ro[4][13] = 24;
- dd2[4][14] = 60; sjeme2[4][14] = 107; ro[4][14] = 16;
- dd2[4][15] = 63; sjeme2[4][15] = 271; ro[4][15] = 18;
- dd2[4][16] = 68; sjeme2[4][16] = 81; ro[4][16] = 24;
- dd2[5][2] = 13; sjeme2[5][2] = 85; ro[5][2] = 15;
- dd2[5][3] = 17; sjeme2[5][3] = 58; ro[5][3] = 15;
- dd2[5][4] = 21; sjeme2[5][4] = 207; ro[5][4] = 27;
- dd2[5][5] = 26; sjeme2[5][5] = 244; ro[5][5] = 16;
- dd2[5][6] = 30; sjeme2[5][6] = 70; ro[5][6] = 15;
- dd2[5][7] = 34; sjeme2[5][7] = 15; ro[5][7] = 15;
- dd2[5][8] = 38; sjeme2[5][8] = 15; ro[5][8] = 15;
- dd2[5][9] = 41; sjeme2[5][9] = 15; ro[5][9] = 15;
- dd2[5][10] = 48; sjeme2[5][10] = 15; ro[5][10] = 15;
- dd2[5][11] = 52; sjeme2[5][11] = 45; ro[5][11] = 19;
- dd2[5][12] = 56; sjeme2[5][12] = 96; ro[5][12] = 15;
- dd2[5][13] = 61; sjeme2[5][13] = 76; ro[5][13] = 16;
- dd2[5][14] = 65; sjeme2[5][14] = 76; ro[5][14] = 16;
- dd2[5][15] = 68; sjeme2[5][15] = 28; ro[5][15] = 20;
- dd2[5][16] = 73; sjeme2[5][16] = 16; ro[5][16] = 21;
- dd2[6][2] = 15; sjeme2[6][2] = 25; ro[6][2] = 15;
- dd2[6][3] = 19; sjeme2[6][3] = 9; ro[6][3] = 19;
- dd2[6][4] = 24; sjeme2[6][4] = 77; ro[6][4] = 27;
- dd2[6][5] = 28; sjeme2[6][5] = 16; ro[6][5] = 24;
- dd2[6][6] = 32; sjeme2[6][6] = 69; ro[6][6] = 25;
- dd2[6][7] = 37; sjeme2[6][7] = 93; ro[6][7] = 15;
- dd2[6][8] = 42; sjeme2[6][8] = 30; ro[6][8] = 26;
- dd2[6][9] = 46; sjeme2[6][9] = 93; ro[6][9] = 15;
- dd2[6][10] = 51; sjeme2[6][10] = 99; ro[6][10] = 21;
- dd2[6][11] = 56; sjeme2[6][11] = 36; ro[6][11] = 19;
- dd2[6][12] = 59; sjeme2[6][12] = 20; ro[6][12] = 17;
- dd2[6][13] = 63; sjeme2[6][13] = 15; ro[6][13] = 25;
- dd2[6][14] = 68; sjeme2[6][14] = 23; ro[6][14] = 24;
- dd2[6][15] = 73; sjeme2[6][15] = 42; ro[6][15] = 19;
- dd2[6][16] = 75; sjeme2[6][16] = 34; ro[6][16] = 27;
- dd2[7][2] = 16; sjeme2[7][2] = 99; ro[7][2] = 19;
- dd2[7][3] = 21; sjeme2[7][3] = 44; ro[7][3] = 17;
- dd2[7][4] = 26; sjeme2[7][4] = 24; ro[7][4] = 17;
- dd2[7][5] = 30; sjeme2[7][5] = 33; ro[7][5] = 26;
- dd2[7][6] = 35; sjeme2[7][6] = 58; ro[7][6] = 16;
- dd2[7][7] = 39; sjeme2[7][7] = 48; ro[7][7] = 15;
- dd2[7][8] = 44; sjeme2[7][8] = 72; ro[7][8] = 16;
- dd2[7][9] = 49; sjeme2[7][9] = 52; ro[7][9] = 19;
- dd2[7][10] = 54; sjeme2[7][10] = 17; ro[7][10] = 15;
- dd2[7][11] = 58; sjeme2[7][11] = 95; ro[7][11] = 16;
- dd2[7][12] = 62; sjeme2[7][12] = 74; ro[7][12] = 18;
- dd2[7][13] = 66; sjeme2[7][13] = 77; ro[7][13] = 18;
- dd2[7][14] = 71; sjeme2[7][14] = 49; ro[7][14] = 22;
- dd2[7][15] = 76; sjeme2[7][15] = 43; ro[7][15] = 19;
- dd2[7][16] = 80; sjeme2[7][16] = 44; ro[7][16] = 17;
- dd2[8][2] = 17; sjeme2[8][2] = 2; ro[8][2] = 17;
- dd2[8][3] = 23; sjeme2[8][3] = 45; ro[8][3] = 18;
- dd2[8][4] = 27; sjeme2[8][4] = 53; ro[8][4] = 18;
- dd2[8][5] = 32; sjeme2[8][5] = 31; ro[8][5] = 19;
- dd2[8][6] = 37; sjeme2[8][6] = 79; ro[8][6] = 24;
- dd2[8][7] = 42; sjeme2[8][7] = 70; ro[8][7] = 27;
- dd2[8][8] = 46; sjeme2[8][8] = 6; ro[8][8] = 26;
- dd2[8][9] = 51; sjeme2[8][9] = 21; ro[8][9] = 20;
- dd2[8][10] = 55; sjeme2[8][10] = 21; ro[8][10] = 20;
- dd2[8][11] = 59; sjeme2[8][11] = 59; ro[8][11] = 19;
- dd2[8][12] = 65; sjeme2[8][12] = 64; ro[8][12] = 20;
- dd2[8][13] = 69; sjeme2[8][13] = 39; ro[8][13] = 19;
- dd2[8][14] = 74; sjeme2[8][14] = 94; ro[8][14] = 16;
- dd2[8][15] = 79; sjeme2[8][15] = 94; ro[8][15] = 16;
- dd2[8][16] = 83; sjeme2[8][16] = 33; ro[8][16] = 25;
- dd2[9][2] = 19; sjeme2[9][2] = 25; ro[9][2] = 16;
- dd2[9][3] = 24; sjeme2[9][3] = 92; ro[9][3] = 22;
- dd2[9][4] = 30; sjeme2[9][4] = 70; ro[9][4] = 16;
- dd2[9][5] = 34; sjeme2[9][5] = 64; ro[9][5] = 27;
- dd2[9][6] = 39; sjeme2[9][6] = 40; ro[9][6] = 26;
- dd2[9][7] = 44; sjeme2[9][7] = 57; ro[9][7] = 15;
- dd2[9][8] = 49; sjeme2[9][8] = 88; ro[9][8] = 15;
- dd2[9][9] = 54; sjeme2[9][9] = 54; ro[9][9] = 16;
- dd2[9][10] = 59; sjeme2[9][10] = 16; ro[9][10] = 15;
- dd2[9][11] = 64; sjeme2[9][11] = 22; ro[9][11] = 16;
- dd2[9][12] = 67; sjeme2[9][12] = 93; ro[9][12] = 26;
- dd2[9][13] = 72; sjeme2[9][13] = 47; ro[9][13] = 16;
- dd2[9][14] = 77; sjeme2[9][14] = 70; ro[9][14] = 16;
- dd2[9][15] = 81; sjeme2[9][15] = 28; ro[9][15] = 17;
- dd2[9][16] = 86; sjeme2[9][16] = 28; ro[9][16] = 17;
- dd2[10][2] = 21; sjeme2[10][2] = 10; ro[10][2] = 15;
- dd2[10][3] = 26; sjeme2[10][3] = 75; ro[10][3] = 16;
- dd2[10][4] = 31; sjeme2[10][4] = 14; ro[10][4] = 15;
- dd2[10][5] = 36; sjeme2[10][5] = 52; ro[10][5] = 17;
- dd2[10][6] = 41; sjeme2[10][6] = 80; ro[10][6] = 25;
- dd2[10][7] = 46; sjeme2[10][7] = 41; ro[10][7] = 19;
- dd2[10][8] = 51; sjeme2[10][8] = 78; ro[10][8] = 18;
- dd2[10][9] = 55; sjeme2[10][9] = 97; ro[10][9] = 19;
- dd2[10][10] = 61; sjeme2[10][10] = 72; ro[10][10] = 15;
- dd2[10][11] = 65; sjeme2[10][11] = 84; ro[10][11] = 19;
- dd2[10][12] = 69; sjeme2[10][12] = 36; ro[10][12] = 21;
- dd2[10][13] = 75; sjeme2[10][13] = 90; ro[10][13] = 17;
- dd2[10][14] = 79; sjeme2[10][14] = 34; ro[10][14] = 23;
- dd2[10][15] = 84; sjeme2[10][15] = 22; ro[10][15] = 17;
- dd2[10][16] = 88; sjeme2[10][16] = 61; ro[10][16] = 19;
- dd2[11][2] = 22; sjeme2[11][2] = 51; ro[11][2] = 15;
- dd2[11][3] = 27; sjeme2[11][3] = 11; ro[11][3] = 17;
- dd2[11][4] = 33; sjeme2[11][4] = 62; ro[11][4] = 16;
- dd2[11][5] = 38; sjeme2[11][5] = 27; ro[11][5] = 17;
- dd2[11][6] = 43; sjeme2[11][6] = 85; ro[11][6] = 16;
- dd2[11][7] = 47; sjeme2[11][7] = 26; ro[11][7] = 16;
- dd2[11][8] = 53; sjeme2[11][8] = 87; ro[11][8] = 25;
- dd2[11][9] = 57; sjeme2[11][9] = 45; ro[11][9] = 16;
- dd2[11][10] = 63; sjeme2[11][10] = 78; ro[11][10] = 17;
- dd2[11][11] = 66; sjeme2[11][11] = 65; ro[11][11] = 20;
- dd2[11][12] = 72; sjeme2[11][12] = 78; ro[11][12] = 17;
- dd2[11][13] = 77; sjeme2[11][13] = 81; ro[11][13] = 16;
- dd2[11][14] = 82; sjeme2[11][14] = 78; ro[11][14] = 20;
- dd2[11][15] = 87; sjeme2[11][15] = 21; ro[11][15] = 16;
- dd2[11][16] = 90; sjeme2[11][16] = 29; ro[11][16] = 16;
- dd2[12][2] = 23; sjeme2[12][2] = 22; ro[12][2] = 19;
- dd2[12][3] = 29; sjeme2[12][3] = 101; ro[12][3] = 15;
- dd2[12][4] = 34; sjeme2[12][4] = 47; ro[12][4] = 17;
- dd2[12][5] = 39; sjeme2[12][5] = 105; ro[12][5] = 26;
- dd2[12][6] = 44; sjeme2[12][6] = 138; ro[12][6] = 20;
- dd2[12][7] = 49; sjeme2[12][7] = 96; ro[12][7] = 22;
- dd2[12][8] = 54; sjeme2[12][8] = 58; ro[12][8] = 16;
- dd2[12][9] = 60; sjeme2[12][9] = 146; ro[12][9] = 18;
- dd2[12][10] = 65; sjeme2[12][10] = 27; ro[12][10] = 15;
- dd2[12][11] = 69; sjeme2[12][11] = 105; ro[12][11] = 19;
- dd2[12][12] = 74; sjeme2[12][12] = 70; ro[12][12] = 19;
- dd2[12][13] = 79; sjeme2[12][13] = 32; ro[12][13] = 24;
- dd2[12][14] = 83; sjeme2[12][14] = 74; ro[12][14] = 16;
- dd2[12][15] = 89; sjeme2[12][15] = 27; ro[12][15] = 15;
- dd2[12][16] = 93; sjeme2[12][16] = 109; ro[12][16] = 19;
- }
- void rjesi () {
- int pot = 1;
- while ((1 << pot) < n) pot++;
- int br = prr[pot], cnt = 0;
- if (dd[pot][w] < (pot + br) * w && dd[pot][w] < (2*w+1) * pot) {
- if (dd[pot][w] < dd2[pot][w]) {
- flg = 1;
- len = dd[pot][w];
- return;
- } else {
- flg = 2;
- len = dd2[pot][w];
- return;
- }
- } else if (dd2[pot][w] < (pot + br) * w && dd2[pot][w] < (2*w+1) * pot) {
- flg = 2;
- len = dd2[pot][w];
- return;
- }
- len = (pot + br) * w;
- if (len > (2*w+1) * pot) {
- len = (2*w+1) * pot;
- for (int i=1; i<=pot; i++) {
- for (int j=1; j<=n; j++) {
- bt[i][j] = !!(j & (1 << (i-1)));
- }
- }
- for (int i=1; i<=2*w; i++) {
- for (int j=1; j<=pot; j++) {
- bt[i*pot + j] = bt[j];
- }
- }
- return;
- }
- for (int i=1; i <= pot + br; i++) {
- if (__builtin_popcount(i) == 1) {
- bt[i] = 0;
- continue;
- }
- for (int j=1; j<=n; j++) {
- bt[i][j] = !!(j & (1 << cnt));
- }
- for (int j=0; j<br; j++) {
- if (i & (1 << j)) {
- bt[1 << j] ^= bt[i];
- }
- }
- cnt++;
- }
- for (int i=1; i<w; i++) {
- for (int j=1; j <= pot + br; j++) {
- bt[i*(pot + br) + j] = bt[j];
- }
- }
- }
- bool check () {
- for (int i=1; i<=n; i++) {
- mask[i] = 0;
- for (int j=1; j<=len; j++) {
- mask[i][j] = bt[j][i];
- }
- }
- for (int i=1; i<=n; i++) {
- for (int j=i+1; j<=n; j++) {
- if (g[i][j] == sd) continue;
- if ((mask[i] ^ mask[j]).count() <= 2*w) {
- return 0;
- } else {
- g[i][j] = sd;
- }
- }
- }
- return 1;
- }
- bool pravi () {
- for (int i=1; i<=n; i++) {
- mask[i] = 0;
- for (int j=1; j<=len; j++) {
- mask[i][j] = bt[j][i];
- }
- }
- for (int i=1; i<=n; i++) {
- for (int j=i+1; j<=n; j++) {
- if ((mask[i] ^ mask[j]).count() <= 2*w) return 0;
- }
- }
- return 1;
- }
- void dodaj(){
- bt[len] = 0;
- for(int k = 0;k < dens;k++){
- bt[len] ^= bt[rnd_br() % (len - 1) + 1];
- }
- }
- void genv2 () {
- int pot = 1;
- while ((1 << pot) < n) pot++;
- rnd = sd;
- for (int i=1; i<=pot; i++) {
- bt[i] = 0;
- for (int j=1; j<=n; j++) {
- bt[i][j] = !!(j & (1 << (i-1)));
- }
- }
- len = pot;
- if (pravi()) return;
- for (len++; len <= m; len++) {
- dodaj();
- if (pravi()) break;
- }
- }
- void gen () {
- for (int i=1; i<=n; i++) {
- p[i] = i;
- }
- rnd = sd;
- for (len = 1; len <= m; len++) {
- rnd_shuffle();
- bt[len] = 0;
- for (int i=1; i<=n/2; i++) {
- bt[len][p[i]] = 1;
- }
- if (check()) break;
- }
- }
- void genv22 () {
- int pot = 1;
- while ((1 << pot) < n) pot++;
- rnd = sjeme2[pot][w];
- for (int i=1; i<=pot; i++) {
- bt[i] = 0;
- for (int j=1; j<=n; j++) {
- bt[i][j] = !!(j & (1 << (i-1)));
- }
- }
- len = pot;
- dens = ro[pot][w];
- for (len++; len <= dd2[pot][w]; len++) {
- dodaj();
- }
- len--;
- }
- void gen2 (int pot) {
- for (int i=1; i<=n; i++) {
- p[i] = i;
- }
- rnd = sjeme[pot][w];
- for (int clen = 1; clen <= len; clen++) {
- rnd_shuffle();
- bt[clen] = 0;
- for (int i=1; i<=n/2; i++) {
- bt[clen][p[i]] = 1;
- }
- }
- }
- void ispis () {
- //if (!pravi()) cout << "krivo " << n << " " << w << endl; else cout << "tocno" << endl;
- cout << len << endl;
- for (int i=1; i<=len; i++) {
- for (int j=1; j<=n; j++) {
- cout << bt[i][j];
- }
- cout << endl;
- }
- //cout << "check " << check() << endl;
- }
- void spremi2 (int mn, int ind, int inddens) {
- cout << "dd2[" << gpot << "][" << w << "] = " << mn << "; ";
- cout << "sjeme2[" << gpot << "][" << w << "] = " << ind << "; ";
- cout << "ro[" << gpot << "][" << w << "] = " << inddens << "; " << endl;
- }
- void spremi (int mn, int ind) {
- cout << "dd[" << gpot << "][" << w << "] = " << mn << "; ";
- cout << "sjeme[" << gpot << "][" << w << "] = " << ind << "; " << endl;
- }
- void ispis2 () {
- int pot = 1;
- while ((1 << pot) < n) pot++;
- int org = n;
- n = (1 << pot);
- len = dd[pot][w];
- gen2(pot);
- n = org;
- //if (!pravi()) cout << "krivo " << n << " " << w << endl; else cout << "tocno" << endl;
- cout << len << endl;
- for (int i=1; i<=len; i++) {
- for (int j=1; j<=n; j++) {
- cout << bt[i][j];
- }
- cout << endl;
- }
- }
- void ispis22 () {
- int pot = 1;
- while ((1 << pot) < n) pot++;
- int org = n;
- n = (1 << pot);
- len = dd2[pot][w];
- genv22();
- n = org;
- //if (!pravi()) cout << "krivo " << n << " " << w << endl; else cout << "tocno" << endl;
- cout << len << endl;
- for (int i=1; i<=len; i++) {
- for (int j=1; j<=n; j++) {
- cout << bt[i][j];
- }
- cout << endl;
- }
- }
- int main () {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- if (1) {
- precompute();
- int t;
- cin >> t;
- //t = 10000000;
- for (int i=0; i<t; i++) {
- cin >> n >> w >> m;
- //n = rand() % 4095 + 2;
- //w = rand() % 15 + 2;
- //m = 200;
- flg = 0;
- rjesi();
- if (flg == 0) ispis(); else if (flg == 1) ispis2(); else ispis22();
- }
- } else {
- m = 300;
- gpot = 0;
- for (n = (1 << 1); n <= (1 << 12); n *= 2) {
- gpot++;
- for (w = 2; w <= 16; w++) {
- int mn = 1000000, ind = -1, inddens;
- for (dens = 15; dens <= 27; dens++) {
- for (sd = 1; sd <= 300; sd++) {
- genv2();
- if (len < mn) {
- mn = len;
- ind = sd;
- inddens = dens;
- }
- }
- }
- spremi2(mn, ind, inddens);
- }
- }
- /*for (n= 2; n <= (1 << 12); n++) {
- cout << n << endl;
- for (w=1; w<=16; w++) {
- rjesi();
- if (!check()) {
- cout << "nije dobro " << n << " " << w << endl;
- ispis();
- return 0;
- }
- }
- }*/
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement