aboutsummaryrefslogtreecommitdiff
path: root/semestr-4/aisd/pracownia3
diff options
context:
space:
mode:
authorFranciszek Malinka <franciszek.malinka@gmail.com>2021-10-05 21:49:54 +0200
committerFranciszek Malinka <franciszek.malinka@gmail.com>2021-10-05 21:49:54 +0200
commitc5fcf7179a83ef65c86c6a4a390029149e518649 (patch)
treed29ffc5b86a0d257453cedcf87d91a13d8bf3b0d /semestr-4/aisd/pracownia3
parentf8a88b6a4aba1f66d04711a9330eaba49a50c463 (diff)
Duzy commit ze smieciami
Diffstat (limited to 'semestr-4/aisd/pracownia3')
-rw-r--r--semestr-4/aisd/pracownia3/check.cpp87
-rw-r--r--semestr-4/aisd/pracownia3/gen.py14
-rwxr-xr-xsemestr-4/aisd/pracownia3/ocen.sh18
-rw-r--r--semestr-4/aisd/pracownia3/rozw.cpp102
-rw-r--r--semestr-4/aisd/pracownia3/show_problem.pdfbin0 -> 73936 bytes
-rw-r--r--semestr-4/aisd/pracownia3/wa.outr1025
6 files changed, 1246 insertions, 0 deletions
diff --git a/semestr-4/aisd/pracownia3/check.cpp b/semestr-4/aisd/pracownia3/check.cpp
new file mode 100644
index 0000000..c9c74d7
--- /dev/null
+++ b/semestr-4/aisd/pracownia3/check.cpp
@@ -0,0 +1,87 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+int n, p, m;
+int banned[103][3][3];
+int plane[5][10];
+
+bool check(int k, int i, int pp) {
+ for (int kk = k; kk < k + 3; kk++) {
+ for (int ii = i; ii < i + 3; ii++) {
+ if (plane[kk][ii] != banned[pp][kk-k][ii-i])
+ return false;
+ }
+ }
+ return true;
+}
+
+void debug(int pp) {
+ for (int i = 0; i < 3; ++i) {
+ for (int j = 0; j < 3; ++j) {
+ cout << ((banned[pp][i][j] == 0) ? '.' : 'x');
+ }
+ cout << "\n";
+ }
+}
+
+void debug() {
+ for (int k = 0; k < 5; ++k) {
+ for (int i = 0; i < n; ++i) {
+ cout << (plane[k][i] ? 'x' : '.');
+ }
+ cout << "\n";
+ }
+ cout << "\n";
+}
+
+int ile[1030];
+
+int main() {
+ cin >> n >> p >> m;
+ for (int i = 0; i < p; i++) {
+ for (int k = 0; k < 3; k++) {
+ string s;
+ cin >> s;
+ for (int j = 0; j < 3; ++j) {
+ banned[i][k][j] = (s[j] == 'x');
+ }
+ }
+ }
+ int res = 0;
+ for (int mask = 0; mask < (1<<(5 * n)); mask++) {
+ for (int k = 0; k < 5; ++k) {
+ for (int i = 0; i < n; i++) {
+ plane[k][i] = ((mask & (1 << (k * n + i))) > 0);
+ }
+ }
+ bool dziala = true;
+ for (int k = 0; k < 3; ++k) {
+ for (int i = 0; i < n-2; ++i) {
+ for (int j = 0; j < p; ++j) {
+ if (check(k, i, j)) {
+ dziala = false;
+ break;
+ }
+ }
+ if (!dziala) break;
+ }
+ if (!dziala) break;
+ }
+ if (dziala) {
+ res++;
+ if (res == m) {
+ res = 0;
+ }
+ int mm = 0;
+ for (int i = 0; i < 5; ++i) {
+ mm += plane[i][n-2] * (1<<(i*2));
+ mm += plane[i][n-1] * (1<<(i*2 + 1));
+ }
+ ile[mm]++;
+ }
+ }
+ for (int i = 0; i < 1024; ++i) {
+ cout << i << ": " << ile[i] << "\n";
+ }
+ cout << res % m << "\n";
+} \ No newline at end of file
diff --git a/semestr-4/aisd/pracownia3/gen.py b/semestr-4/aisd/pracownia3/gen.py
new file mode 100644
index 0000000..b572647
--- /dev/null
+++ b/semestr-4/aisd/pracownia3/gen.py
@@ -0,0 +1,14 @@
+import sys
+
+mask = int(sys.argv[1])
+print(3, 1, 1000000)
+
+def f(m):
+ t = [[0]*3]*3
+ for i in range(3):
+ for j in range(3):
+ t[i][j] = (m >> (i*3 + j)) & 1
+ print('x' if t[i][j] else '.', end='')
+ print()
+
+f(mask) \ No newline at end of file
diff --git a/semestr-4/aisd/pracownia3/ocen.sh b/semestr-4/aisd/pracownia3/ocen.sh
new file mode 100755
index 0000000..593aa67
--- /dev/null
+++ b/semestr-4/aisd/pracownia3/ocen.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+make rozw
+make check
+for i in {0..1023}
+do
+ python3 gen.py $i > t.in
+ ./rozw < t.in > wa.out
+ ./check < t.in > t.out
+ if diff -w wa.out t.out
+ then
+ echo $i
+ echo ok
+ else
+ echo nieok
+ break
+ fi
+done \ No newline at end of file
diff --git a/semestr-4/aisd/pracownia3/rozw.cpp b/semestr-4/aisd/pracownia3/rozw.cpp
new file mode 100644
index 0000000..7f1a307
--- /dev/null
+++ b/semestr-4/aisd/pracownia3/rozw.cpp
@@ -0,0 +1,102 @@
+#include <bits/stdc++.h>
+using namespace std;
+
+const int MAXP = 105;
+const int MAXN = 5005;
+
+int n, p, m;
+unordered_set<int> banned;
+vector<pair<int, int>> propagate;
+int dp[2][1024 + 10];
+
+inline int char_to_bit(char c) {
+ return c == '.' ? 0 : 1;
+}
+
+void input() {
+ scanf("%d%d%d", &n, &p, &m);
+ for (int i = 0; i < p; i++) {
+ char s[5];
+ int value = 0, d = 1;
+ for (int k = 0; k < 3; k++) {
+ scanf("%s", s);
+ value += (char_to_bit(s[0]) + char_to_bit(s[1]) * 2 + char_to_bit(s[2]) * 4) * d;
+ d *= 8;
+ }
+ banned.insert(value);
+ }
+}
+
+pair<int, pair<int, int>> get_pieces_values(int db, int sb) {
+ int tab[5][3];
+ for (int i = 0; i < 5; i++) {
+ tab[i][0] = (db >> (i*2)) & 1;
+ tab[i][1] = (db >> (i*2 + 1)) & 1;
+ tab[i][2] = (sb >> i) & 1;
+ }
+ int res[3];
+ for (int k = 0; k < 3; ++k) {
+ int value = 0, d = 1;
+ for (int i = k; i < k + 3; ++i) {
+ value += (tab[i][0] + tab[i][1] * 2 + tab[i][2] * 4) * d;
+ d *= 8;
+ }
+ res[k] = value;
+ }
+ return {res[0], {res[1], res[2]}};
+}
+
+int combine(int db, int sb) {
+ int res = (db >> 1) & 0x155;
+ for (int i = 0; i < 5; i++) {
+ res |= ((sb >> i) & 1) << (2*i + 1);
+ }
+ return res;
+}
+
+void preproces() {
+ const int db = (1<<10); // double bar
+ const int sb = (1<<5); // single bar
+
+ for (int db_mask = 0; db_mask < db; ++db_mask) {
+ for (int sb_mask = 0; sb_mask < sb; ++sb_mask) {
+ auto pieces = get_pieces_values(db_mask, sb_mask);
+ if (banned.count(pieces.first) || banned.count(pieces.second.first) || banned.count(pieces.second.second))
+ continue;
+ int db2_mask = combine(db_mask, sb_mask);
+ propagate.push_back({db_mask, db2_mask});
+ }
+ }
+}
+
+int compute_dp() {
+ int K = 1;
+ for (int i = 0; i < 1024; i++) {
+ dp[0][i] = 1;
+ }
+ for (int i = 2; i < n; i++) {
+ for (auto pp: propagate) {
+ int p1 = pp.first, p2 = pp.second;
+ dp[K][p2] += dp[K^1][p1];
+ dp[K][p2] %= m;
+ }
+ K ^= 1;
+ for (int j = 0; j < 1024; ++j) {
+ dp[K][j] = 0;
+ }
+ }
+
+ K ^= 1;
+ int result = 0;
+ for (int i = 0; i < 1024; i++) {
+ result += dp[K][i];
+ result %= m;
+ }
+ return result;
+}
+
+int main() {
+ input();
+ preproces();
+ printf("%d\n", compute_dp());
+} \ No newline at end of file
diff --git a/semestr-4/aisd/pracownia3/show_problem.pdf b/semestr-4/aisd/pracownia3/show_problem.pdf
new file mode 100644
index 0000000..f426311
--- /dev/null
+++ b/semestr-4/aisd/pracownia3/show_problem.pdf
Binary files differ
diff --git a/semestr-4/aisd/pracownia3/wa.outr b/semestr-4/aisd/pracownia3/wa.outr
new file mode 100644
index 0000000..81a8bb1
--- /dev/null
+++ b/semestr-4/aisd/pracownia3/wa.outr
@@ -0,0 +1,1025 @@
+0: 613
+1: 745
+2: 729
+3: 745
+4: 881
+5: 881
+6: 881
+7: 881
+8: 849
+9: 865
+10: 849
+11: 865
+12: 881
+13: 881
+14: 881
+15: 881
+16: 1025
+17: 1025
+18: 1025
+19: 1025
+20: 1025
+21: 1025
+22: 1025
+23: 1025
+24: 1025
+25: 1025
+26: 1025
+27: 1025
+28: 1025
+29: 1025
+30: 1025
+31: 1025
+32: 977
+33: 993
+34: 977
+35: 993
+36: 1009
+37: 1009
+38: 1009
+39: 1009
+40: 977
+41: 993
+42: 977
+43: 993
+44: 1009
+45: 1009
+46: 1009
+47: 1009
+48: 1025
+49: 1025
+50: 1025
+51: 1025
+52: 1025
+53: 1025
+54: 1025
+55: 1025
+56: 1025
+57: 1025
+58: 1025
+59: 1025
+60: 1025
+61: 1025
+62: 1025
+63: 1025
+64: 881
+65: 1025
+66: 1009
+67: 1025
+68: 1025
+69: 1025
+70: 1025
+71: 1025
+72: 1009
+73: 1025
+74: 1009
+75: 1025
+76: 1025
+77: 1025
+78: 1025
+79: 1025
+80: 1025
+81: 1025
+82: 1025
+83: 1025
+84: 1025
+85: 1025
+86: 1025
+87: 1025
+88: 1025
+89: 1025
+90: 1025
+91: 1025
+92: 1025
+93: 1025
+94: 1025
+95: 1025
+96: 1009
+97: 1025
+98: 1009
+99: 1025
+100: 1025
+101: 1025
+102: 1025
+103: 1025
+104: 1009
+105: 1025
+106: 1009
+107: 1025
+108: 1025
+109: 1025
+110: 1025
+111: 1025
+112: 1025
+113: 1025
+114: 1025
+115: 1025
+116: 1025
+117: 1025
+118: 1025
+119: 1025
+120: 1025
+121: 1025
+122: 1025
+123: 1025
+124: 1025
+125: 1025
+126: 1025
+127: 1025
+128: 861
+129: 993
+130: 977
+131: 993
+132: 1009
+133: 1009
+134: 1009
+135: 1009
+136: 977
+137: 993
+138: 977
+139: 993
+140: 1009
+141: 1009
+142: 1009
+143: 1009
+144: 1025
+145: 1025
+146: 1025
+147: 1025
+148: 1025
+149: 1025
+150: 1025
+151: 1025
+152: 1025
+153: 1025
+154: 1025
+155: 1025
+156: 1025
+157: 1025
+158: 1025
+159: 1025
+160: 977
+161: 993
+162: 977
+163: 993
+164: 1009
+165: 1009
+166: 1009
+167: 1009
+168: 977
+169: 993
+170: 977
+171: 993
+172: 1009
+173: 1009
+174: 1009
+175: 1009
+176: 1025
+177: 1025
+178: 1025
+179: 1025
+180: 1025
+181: 1025
+182: 1025
+183: 1025
+184: 1025
+185: 1025
+186: 1025
+187: 1025
+188: 1025
+189: 1025
+190: 1025
+191: 1025
+192: 881
+193: 1025
+194: 1009
+195: 1025
+196: 1025
+197: 1025
+198: 1025
+199: 1025
+200: 1009
+201: 1025
+202: 1009
+203: 1025
+204: 1025
+205: 1025
+206: 1025
+207: 1025
+208: 1025
+209: 1025
+210: 1025
+211: 1025
+212: 1025
+213: 1025
+214: 1025
+215: 1025
+216: 1025
+217: 1025
+218: 1025
+219: 1025
+220: 1025
+221: 1025
+222: 1025
+223: 1025
+224: 1009
+225: 1025
+226: 1009
+227: 1025
+228: 1025
+229: 1025
+230: 1025
+231: 1025
+232: 1009
+233: 1025
+234: 1009
+235: 1025
+236: 1025
+237: 1025
+238: 1025
+239: 1025
+240: 1025
+241: 1025
+242: 1025
+243: 1025
+244: 1025
+245: 1025
+246: 1025
+247: 1025
+248: 1025
+249: 1025
+250: 1025
+251: 1025
+252: 1025
+253: 1025
+254: 1025
+255: 1025
+256: 745
+257: 881
+258: 865
+259: 881
+260: 1025
+261: 1025
+262: 1025
+263: 1025
+264: 993
+265: 1009
+266: 993
+267: 1009
+268: 1025
+269: 1025
+270: 1025
+271: 1025
+272: 1025
+273: 1025
+274: 1025
+275: 1025
+276: 1025
+277: 1025
+278: 1025
+279: 1025
+280: 1025
+281: 1025
+282: 1025
+283: 1025
+284: 1025
+285: 1025
+286: 1025
+287: 1025
+288: 993
+289: 1009
+290: 993
+291: 1009
+292: 1025
+293: 1025
+294: 1025
+295: 1025
+296: 993
+297: 1009
+298: 993
+299: 1009
+300: 1025
+301: 1025
+302: 1025
+303: 1025
+304: 1025
+305: 1025
+306: 1025
+307: 1025
+308: 1025
+309: 1025
+310: 1025
+311: 1025
+312: 1025
+313: 1025
+314: 1025
+315: 1025
+316: 1025
+317: 1025
+318: 1025
+319: 1025
+320: 881
+321: 1025
+322: 1009
+323: 1025
+324: 1025
+325: 1025
+326: 1025
+327: 1025
+328: 1009
+329: 1025
+330: 1009
+331: 1025
+332: 1025
+333: 1025
+334: 1025
+335: 1025
+336: 1025
+337: 1025
+338: 1025
+339: 1025
+340: 1025
+341: 1025
+342: 1025
+343: 1025
+344: 1025
+345: 1025
+346: 1025
+347: 1025
+348: 1025
+349: 1025
+350: 1025
+351: 1025
+352: 1009
+353: 1025
+354: 1009
+355: 1025
+356: 1025
+357: 1025
+358: 1025
+359: 1025
+360: 1009
+361: 1025
+362: 1009
+363: 1025
+364: 1025
+365: 1025
+366: 1025
+367: 1025
+368: 1025
+369: 1025
+370: 1025
+371: 1025
+372: 1025
+373: 1025
+374: 1025
+375: 1025
+376: 1025
+377: 1025
+378: 1025
+379: 1025
+380: 1025
+381: 1025
+382: 1025
+383: 1025
+384: 873
+385: 1009
+386: 993
+387: 1009
+388: 1025
+389: 1025
+390: 1025
+391: 1025
+392: 993
+393: 1009
+394: 993
+395: 1009
+396: 1025
+397: 1025
+398: 1025
+399: 1025
+400: 1025
+401: 1025
+402: 1025
+403: 1025
+404: 1025
+405: 1025
+406: 1025
+407: 1025
+408: 1025
+409: 1025
+410: 1025
+411: 1025
+412: 1025
+413: 1025
+414: 1025
+415: 1025
+416: 993
+417: 1009
+418: 993
+419: 1009
+420: 1025
+421: 1025
+422: 1025
+423: 1025
+424: 993
+425: 1009
+426: 993
+427: 1009
+428: 1025
+429: 1025
+430: 1025
+431: 1025
+432: 1025
+433: 1025
+434: 1025
+435: 1025
+436: 1025
+437: 1025
+438: 1025
+439: 1025
+440: 1025
+441: 1025
+442: 1025
+443: 1025
+444: 1025
+445: 1025
+446: 1025
+447: 1025
+448: 881
+449: 1025
+450: 1009
+451: 1025
+452: 1025
+453: 1025
+454: 1025
+455: 1025
+456: 1009
+457: 1025
+458: 1009
+459: 1025
+460: 1025
+461: 1025
+462: 1025
+463: 1025
+464: 1025
+465: 1025
+466: 1025
+467: 1025
+468: 1025
+469: 1025
+470: 1025
+471: 1025
+472: 1025
+473: 1025
+474: 1025
+475: 1025
+476: 1025
+477: 1025
+478: 1025
+479: 1025
+480: 1009
+481: 1025
+482: 1009
+483: 1025
+484: 1025
+485: 1025
+486: 1025
+487: 1025
+488: 1009
+489: 1025
+490: 1009
+491: 1025
+492: 1025
+493: 1025
+494: 1025
+495: 1025
+496: 1025
+497: 1025
+498: 1025
+499: 1025
+500: 1025
+501: 1025
+502: 1025
+503: 1025
+504: 1025
+505: 1025
+506: 1025
+507: 1025
+508: 1025
+509: 1025
+510: 1025
+511: 1025
+512: 741
+513: 873
+514: 857
+515: 873
+516: 1009
+517: 1009
+518: 1009
+519: 1009
+520: 977
+521: 993
+522: 977
+523: 993
+524: 1009
+525: 1009
+526: 1009
+527: 1009
+528: 1025
+529: 1025
+530: 1025
+531: 1025
+532: 1025
+533: 1025
+534: 1025
+535: 1025
+536: 1025
+537: 1025
+538: 1025
+539: 1025
+540: 1025
+541: 1025
+542: 1025
+543: 1025
+544: 977
+545: 993
+546: 977
+547: 993
+548: 1009
+549: 1009
+550: 1009
+551: 1009
+552: 977
+553: 993
+554: 977
+555: 993
+556: 1009
+557: 1009
+558: 1009
+559: 1009
+560: 1025
+561: 1025
+562: 1025
+563: 1025
+564: 1025
+565: 1025
+566: 1025
+567: 1025
+568: 1025
+569: 1025
+570: 1025
+571: 1025
+572: 1025
+573: 1025
+574: 1025
+575: 1025
+576: 881
+577: 1025
+578: 1009
+579: 1025
+580: 1025
+581: 1025
+582: 1025
+583: 1025
+584: 1009
+585: 1025
+586: 1009
+587: 1025
+588: 1025
+589: 1025
+590: 1025
+591: 1025
+592: 1025
+593: 1025
+594: 1025
+595: 1025
+596: 1025
+597: 1025
+598: 1025
+599: 1025
+600: 1025
+601: 1025
+602: 1025
+603: 1025
+604: 1025
+605: 1025
+606: 1025
+607: 1025
+608: 1009
+609: 1025
+610: 1009
+611: 1025
+612: 1025
+613: 1025
+614: 1025
+615: 1025
+616: 1009
+617: 1025
+618: 1009
+619: 1025
+620: 1025
+621: 1025
+622: 1025
+623: 1025
+624: 1025
+625: 1025
+626: 1025
+627: 1025
+628: 1025
+629: 1025
+630: 1025
+631: 1025
+632: 1025
+633: 1025
+634: 1025
+635: 1025
+636: 1025
+637: 1025
+638: 1025
+639: 1025
+640: 861
+641: 993
+642: 977
+643: 993
+644: 1009
+645: 1009
+646: 1009
+647: 1009
+648: 977
+649: 993
+650: 977
+651: 993
+652: 1009
+653: 1009
+654: 1009
+655: 1009
+656: 1025
+657: 1025
+658: 1025
+659: 1025
+660: 1025
+661: 1025
+662: 1025
+663: 1025
+664: 1025
+665: 1025
+666: 1025
+667: 1025
+668: 1025
+669: 1025
+670: 1025
+671: 1025
+672: 977
+673: 993
+674: 977
+675: 993
+676: 1009
+677: 1009
+678: 1009
+679: 1009
+680: 977
+681: 993
+682: 977
+683: 993
+684: 1009
+685: 1009
+686: 1009
+687: 1009
+688: 1025
+689: 1025
+690: 1025
+691: 1025
+692: 1025
+693: 1025
+694: 1025
+695: 1025
+696: 1025
+697: 1025
+698: 1025
+699: 1025
+700: 1025
+701: 1025
+702: 1025
+703: 1025
+704: 881
+705: 1025
+706: 1009
+707: 1025
+708: 1025
+709: 1025
+710: 1025
+711: 1025
+712: 1009
+713: 1025
+714: 1009
+715: 1025
+716: 1025
+717: 1025
+718: 1025
+719: 1025
+720: 1025
+721: 1025
+722: 1025
+723: 1025
+724: 1025
+725: 1025
+726: 1025
+727: 1025
+728: 1025
+729: 1025
+730: 1025
+731: 1025
+732: 1025
+733: 1025
+734: 1025
+735: 1025
+736: 1009
+737: 1025
+738: 1009
+739: 1025
+740: 1025
+741: 1025
+742: 1025
+743: 1025
+744: 1009
+745: 1025
+746: 1009
+747: 1025
+748: 1025
+749: 1025
+750: 1025
+751: 1025
+752: 1025
+753: 1025
+754: 1025
+755: 1025
+756: 1025
+757: 1025
+758: 1025
+759: 1025
+760: 1025
+761: 1025
+762: 1025
+763: 1025
+764: 1025
+765: 1025
+766: 1025
+767: 1025
+768: 745
+769: 881
+770: 865
+771: 881
+772: 1025
+773: 1025
+774: 1025
+775: 1025
+776: 993
+777: 1009
+778: 993
+779: 1009
+780: 1025
+781: 1025
+782: 1025
+783: 1025
+784: 1025
+785: 1025
+786: 1025
+787: 1025
+788: 1025
+789: 1025
+790: 1025
+791: 1025
+792: 1025
+793: 1025
+794: 1025
+795: 1025
+796: 1025
+797: 1025
+798: 1025
+799: 1025
+800: 993
+801: 1009
+802: 993
+803: 1009
+804: 1025
+805: 1025
+806: 1025
+807: 1025
+808: 993
+809: 1009
+810: 993
+811: 1009
+812: 1025
+813: 1025
+814: 1025
+815: 1025
+816: 1025
+817: 1025
+818: 1025
+819: 1025
+820: 1025
+821: 1025
+822: 1025
+823: 1025
+824: 1025
+825: 1025
+826: 1025
+827: 1025
+828: 1025
+829: 1025
+830: 1025
+831: 1025
+832: 881
+833: 1025
+834: 1009
+835: 1025
+836: 1025
+837: 1025
+838: 1025
+839: 1025
+840: 1009
+841: 1025
+842: 1009
+843: 1025
+844: 1025
+845: 1025
+846: 1025
+847: 1025
+848: 1025
+849: 1025
+850: 1025
+851: 1025
+852: 1025
+853: 1025
+854: 1025
+855: 1025
+856: 1025
+857: 1025
+858: 1025
+859: 1025
+860: 1025
+861: 1025
+862: 1025
+863: 1025
+864: 1009
+865: 1025
+866: 1009
+867: 1025
+868: 1025
+869: 1025
+870: 1025
+871: 1025
+872: 1009
+873: 1025
+874: 1009
+875: 1025
+876: 1025
+877: 1025
+878: 1025
+879: 1025
+880: 1025
+881: 1025
+882: 1025
+883: 1025
+884: 1025
+885: 1025
+886: 1025
+887: 1025
+888: 1025
+889: 1025
+890: 1025
+891: 1025
+892: 1025
+893: 1025
+894: 1025
+895: 1025
+896: 873
+897: 1009
+898: 993
+899: 1009
+900: 1025
+901: 1025
+902: 1025
+903: 1025
+904: 993
+905: 1009
+906: 993
+907: 1009
+908: 1025
+909: 1025
+910: 1025
+911: 1025
+912: 1025
+913: 1025
+914: 1025
+915: 1025
+916: 1025
+917: 1025
+918: 1025
+919: 1025
+920: 1025
+921: 1025
+922: 1025
+923: 1025
+924: 1025
+925: 1025
+926: 1025
+927: 1025
+928: 993
+929: 1009
+930: 993
+931: 1009
+932: 1025
+933: 1025
+934: 1025
+935: 1025
+936: 993
+937: 1009
+938: 993
+939: 1009
+940: 1025
+941: 1025
+942: 1025
+943: 1025
+944: 1025
+945: 1025
+946: 1025
+947: 1025
+948: 1025
+949: 1025
+950: 1025
+951: 1025
+952: 1025
+953: 1025
+954: 1025
+955: 1025
+956: 1025
+957: 1025
+958: 1025
+959: 1025
+960: 881
+961: 1025
+962: 1009
+963: 1025
+964: 1025
+965: 1025
+966: 1025
+967: 1025
+968: 1009
+969: 1025
+970: 1009
+971: 1025
+972: 1025
+973: 1025
+974: 1025
+975: 1025
+976: 1025
+977: 1025
+978: 1025
+979: 1025
+980: 1025
+981: 1025
+982: 1025
+983: 1025
+984: 1025
+985: 1025
+986: 1025
+987: 1025
+988: 1025
+989: 1025
+990: 1025
+991: 1025
+992: 1009
+993: 1025
+994: 1009
+995: 1025
+996: 1025
+997: 1025
+998: 1025
+999: 1025
+1000: 1009
+1001: 1025
+1002: 1009
+1003: 1025
+1004: 1025
+1005: 1025
+1006: 1025
+1007: 1025
+1008: 1025
+1009: 1025
+1010: 1025
+1011: 1025
+1012: 1025
+1013: 1025
+1014: 1025
+1015: 1025
+1016: 1025
+1017: 1025
+1018: 1025
+1019: 1025
+1020: 1025
+1021: 1025
+1022: 1025
+1023: 1025
+37456