1 /* term_fonthash_curses.c
2
3 Copyright (c) 1997-2003, Sidik Isani (xhomer@isani.org)
4
5 This file is part of Xhomer.
6
7 Xhomer is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2
9 as published by the Free Software Foundation.
10
11 Xhomer is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with Xhomer; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21 /*
22 * d=3
23 * n=1260
24 * m=1024
25 * c=1.23
26 * maxlen=20
27 * minklen=20
28 * maxklen=20
29 * minchar=48
30 * maxchar=111
31 * loop=0
32 * numiter=10
33 * seed=
34 */
35
36 static int g[] = {
37 364, 0, 421, 896, -1, 789, 974, 464, 451, 839,
38 989, 369, 428, 853, 402, 727, -1, 624, 385, 973,
39 365, 952, 0, 897, 774, 0, 241, 945, 474, 655,
40 -1, 42, 923, 0, 0, 724, 407, 389, 0, -1,
41 710, 476, 154, 419, 963, 0, 674, 972, 625, 530,
42 529, 611, 168, 632, 139, 409, -1, 299, 0, 7,
43 735, 673, 702, 317, 981, -1, 375, 232, 810, 67,
44 -1, 511, 748, 847, 879, 965, 683, -1, 1000, 593,
45 910, 867, 220, 0, 428, -1, 420, 187, 0, -1,
46 361, 855, 803, 714, 922, -1, 345, 341, 825, 459,
47 614, 53, 93, 227, 300, 0, 172, 491, 425, 27,
48 607, 131, 642, -1, 0, 363, 200, 458, 964, 281,
49 0, 843, 961, 624, 745, 974, 940, 661, -1, 597,
50 993, 349, 335, 593, 272, 935, 534, -1, 0, 793,
51 387, 581, 441, 986, 9, 0, -1, 334, 318, 149,
52 929, 889, 920, 146, 35, 456, 730, 339, 277, 644,
53 261, -1, 502, 704, 760, 344, 971, -1, 982, 884,
54 919, 626, 741, -1, 647, 166, 365, 10, 55, 828,
55 843, 425, -1, 502, 0, 678, 393, 864, 818, 730,
56 498, 69, 208, 34, 199, 0, -1, 0, 937, 0,
57 890, 135, 264, 0, 498, 67, 243, 364, -1, -1,
58 902, 127, 657, 663, 513, 860, 0, 188, 10, 753,
59 554, 166, 871, 110, 180, 927, 680, 402, 78, 243,
60 623, 728, 622, 443, 0, 637, 0, 630, 599, 853,
61 198, 671, 958, 0, 364, 609, 451, 0, 498, 427,
62 -1, 310, 248, 0, 404, 194, -1, 0, 985, 131,
63 120, 0, -1, 1005, 624, 778, 809, 127, 857, 45,
64 554, 112, 767, 15, 896, 77, 897, 0, 855, 834,
65 384, 201, 288, 246, 502, 829, 524, 880, 988, 786,
66 301, 432, 0, 821, 306, 678, 0, 513, 984, 0,
67 866, 933, 588, 646, 859, 839, 823, 606, 853, 910,
68 615, 810, 0, 456, -1, 631, 1007, 543, 345, 634,
69 0, -1, 446, 720, 346, 266, -1, 1019, 730, 602,
70 0, 531, 287, 979, 0, 844, 178, 337, 1013, 469,
71 139, 189, 12, 774, 0, 861, 972, 832, 527, 893,
72 829, 752, 261, 186, 599, 608, 266, 659, 0, 0,
73 270, 640, 505, 30, 604, 782, 846, 585, 592, 0,
74 144, 660, 452, 533, 988, 880, 577, 402, 468, 666,
75 0, 527, 0, 319, 887, 126, 18, 516, 33, 500,
76 825, -1, 189, 975, 963, 0, 65, 591, 0, 860,
77 640, 175, 0, 455, 467, 58, 127, 358, 817, -1,
78 549, 438, 523, -1, 896, 0, 416, 933, 627, -1,
79 0, 842, 227, -1, 509, 0, 953, -1, 0, 604,
80 633, 340, 308, 430, 0, 105, 438, 577, 655, 830,
81 857, 264, 530, 444, 630, -1, 516, 549, 0, 992,
82 539, 968, 660, -1, 0, 633, 41, 677, 941, 600,
83 778, 448, 0, 109, 181, 0, 1009, 735, 929, -1,
84 861, 286, 538, 494, 338, -1, 138, 332, 379, 0,
85 0, -1, 552, 621, 713, 216, 40, 4, 884, 91,
86 253, 851, 933, 61, 785, 598, 0, 336, 52, 622,
87 460, 299, -1, 0, -1, 999, 661, -1, 907, 826,
88 937, 94, 239, 431, 768, 183, 731, 404, 434, 486,
89 0, 0, 822, 494, 303, 268, 777, 620, 0, 618,
90 703, 578, 38, 803, 289, 183, 779, 476, 229, 497,
91 579, 403, 181, 557, 764, -1, 947, 508, 416, 517,
92 705, -1, 719, 405, 207, 667, 569, 935, 666, 4,
93 595, 387, 935, 990, -1, 476, 938, 7, 415, -1,
94 740, 311, 692, 118, 283, 41, 176, 557, 442, 269,
95 996, 942, 692, 911, 724, 640, 627, 311, 61, 35,
96 0, 355, -1, 0, 952, 0, 439, 701, 631, 45,
97 91, 237, 91, 661, 448, 265, 0, 1013, 136, -1,
98 612, 112, 732, 11, 953, 190, 703, 711, 328, 709,
99 195, 516, 0, 265, 981, 519, 647, 596, 546, 35,
100 250, -1, 0, 490, 202, 571, 0, -1, 1015, 676,
101 911, 972, 79, 0, 155, 23, 669, 769, 859, 38,
102 167, 246, 313, 960, 592, 268, 755, 997, 922, 0,
103 171, 0, 1006, 841, 646, 888, 108, 701, 272, 301,
104 668, 0, 296, 639, 149, 322, -1, 323, 573, 604,
105 0, 532, 616, -1, 685, 70, 536, 968, 787, -1,
106 407, 127, 758, 179, 539, 993, 302, 84, 132, 581,
107 725, -1, 893, 814, 102, 752, 743, 701, 876, 711,
108 787, 525, 744, 595, 984, 186, 705, 145, 828, 436,
109 57, 648, 154, 228, 567, 287, 197, 727, 878, 124,
110 713, 200, -1, 71, 1000, 957, 249, 104, 104, 199,
111 156, -1, 924, 695, 453, 965, 665, 1010, 384, 1002,
112 864, 810, 0, -1, 0, 1014, 193, 429, 0, 0,
113 0, 78, 531, 975, 862, 811, 1021, 894, 605, 652,
114 549, -1, -1, 587, 46, 159, 956, 107, 576, 600,
115 50, 983, 345, 717, 0, 39, -1, 295, 328, 0,
116 624, 477, 919, 687, -1, 202, 180, 377, 578, 974,
117 0, 1007, 98, 982, 673, 0, 0, 277, -1, 184,
118 651, 923, 700, 590, 744, 631, 913, 320, 810, 49,
119 225, 480, 681, 1011, 240, 81, -1, 0, 732, 536,
120 230, 322, 344, 274, 994, 1017, 7, 625, -1, 20,
121 279, 605, 559, -1, 955, 1012, 916, 899, 208, 44,
122 0, 153, 873, 333, 0, 353, 266, 840, 849, 105,
123 851, 757, 54, 889, -1, -1, 835, 485, 563, 675,
124 389, 507, 430, 931, 719, -1, 414, -1, 456, 636,
125 629, 1001, 72, 791, 23, 427, 501, 0, 507, 0,
126 351, -1, 40, 781, 144, -1, 0, -1, 873, 79,
127 0, 0, 911, -1, 0, 0, 131, 0, 0, 75,
128 191, 100, -1, 833, 733, 486, 525, 0, 0, 273,
129 936, 86, 819, 163, 54, 649, 208, 112, 422, 69,
130 944, 492, 81, 175, 564, 715, 285, -1, 575, 768,
131 12, 935, 352, 42, -1, 411, 890, 575, 151, 285,
132 637, 552, 862, 248, 576, 632, -1, 749, 993, 0,
133 959, 215, 278, -1, 0, -1, 699, 95, 450, 977,
134 943, 826, 406, 95, 8, 993, 322, 367, 316, -1,
135 941, -1, 648, -1, 137, 876, 865, 107, 126, 898,
136 358, 95, 0, 489, 713, 493, 756, 298, 640, 980,
137 0, 151, 603, -1, -1, 273, 989, 173, 452, 275,
138 278, 285, 709, 844, 380, -1, 924, 732, 389, 549,
139 442, 444, 216, 348, 161, 53, -1, 0, 186, 307,
140 962, 984, 957, 231, 981, 799, 362, 547, 47, 0,
141 7, 366, 12, 248, 737, 0, 404, 754, 0, 0,
142 820, 17, 940, 0, 364, 316, 482, 96, 870, 887,
143 131, 0, 359, 151, 507, 247, 83, 346, 391, 999,
144 -1, 261, 285, 528, 376, 319, 866, -1, -1, 175,
145 89, 530, 881, 538, 906, 67, 711, 903, 714, 857,
146 459, 594, 827, 332, 835, 511, 945, 360, -1, 402,
147 -1, -1, 231, 167, -1, 493, 712, 611, 935, 0,
148 384, -1, 1013, 882, 1011, 156, 943, 78, 802, 11,
149 265, 45, 1016, 262, 333, 652, -1, 807, 724, 0,
150 144, 253, 990, 459, 188, 0, 291, 921, 619, 151,
151 634, 944, -1, 791, 0, 15, 281, 988, 199, 0,
152 635, 1016, 0, 153, 0, 0, 711, 301, 142, 0,
153 0, 776, -1, 832, 760, 389, 595, 462, 451, 905,
154 816, 43, 486, 46, 0, 798, 0, 619, 467, 626,
155 450, 332, 440, 806, 0, 842, 831, 224, 80, 484,
156 839, 536, 122, 907, 184, 888, 246, 425, 278, 240,
157 349, -1, 232, 187, 224, 402, 299, 412, 0, 885,
158 825, 174, 0, 0, 0, -1, 527, 955, 533, 771,
159 461, 561, 538, -1, -1, 0, 759, 509, 0, 310,
160 967, 538, 0, 0, 0, 440, 324, 0, 0, 522,
161 0, 662, 522, -1, 30, 73, 404, 11, 483, 87,
162 0, 389, 457, 0, 143, 272, 555, 939, 969, 577,
163 };
164
165 static int T0[] = {
166 107, 430, 552, 231, 762, 936, 882, 462, 597, 822,
167 835, 775, 172, 617, 504, 1140, 758, 784, 744, 913,
168 684, 890, 86, 607, 103, 1008, 218, 1160, 1173, 594,
169 707, 20, 1025, 1131, 123, 399, 679, 877, 861, 17,
170 440, 308, 792, 484, 798, 37, 364, 296, 821, 1108,
171 1210, 117, 610, 1168, 597, 714, 916, 815, 486, 701,
172 149, 1193, 593, 1046, 878, 1021, 737, 1239, 1099, 7,
173 873, 146, 929, 310, 456, 376, 372, 860, 1023, 73,
174 784, 924, 427, 769, 1106, 395, 789, 947, 1078, 936,
175 621, 993, 693, 446, 1208, 312, 79, 685, 163, 1050,
176 565, 908, 1196, 106, 1090, 264, 482, 202, 1124, 245,
177 147, 521, 1041, 574, 1162, 759, 970, 692, 318, 660,
178 368, 940, 394, 934, 1258, 342, 1118, 77, 37, 875,
179 267, 85, 370, 651, 271, 1137, 489, 470, 766, 1058,
180 1017, 439, 515, 1258, 504, 309, 1085, 503, 1220, 1000,
181 213, 65, 303, 478, 598, 562, 715, 594, 564, 624,
182 209, 832, 710, 451, 223, 853, 201, 712, 64, 967,
183 382, 1081, 18, 898, 1079, 522, 1079, 776, 897, 1039,
184 516, 982, 1104, 819, 201, 315, 122, 788, 909, 686,
185 153, 990, 545, 1232, 993, 725, 2, 779, 243, 221,
186 232, 253, 1222, 698, 970, 122, 712, 969, 1036, 260,
187 564, 1126, 476, 784, 229, 1053, 401, 1000, 11, 1044,
188 978, 945, 472, 263, 917, 78, 860, 919, 729, 1104,
189 1012, 961, 1229, 846, 400, 939, 968, 1112, 520, 616,
190 1245, 957, 354, 461, 481, 583, 126, 882, 323, 138,
191 538, 41, 1083, 1010, 176, 612, 1151, 873, 759, 824,
192 369, 847, 411, 906, 436, 59, 572, 432, 1251, 252,
193 374, 278, 1069, 280, 943, 51, 1192, 1213, 1057, 1082,
194 1024, 1064, 1125, 1192, 785, 1172, 451, 676, 657, 1082,
195 113, 1026, 669, 524, 544, 1105, 583, 988, 149, 447,
196 1113, 523, 597, 922, 676, 280, 974, 608, 105, 643,
197 302, 1001, 447, 167, 934, 1232, 1211, 1257, 521, 480,
198 209, 1238, 387, 845, 735, 508, 990, 273, 336, 761,
199 13, 433, 178, 647, 801, 325, 925, 668, 961, 657,
200 1221, 198, 997, 208, 777, 687, 477, 1108, 355, 452,
201 742, 436, 431, 1002, 1154, 1166, 250, 884, 179, 459,
202 257, 64, 892, 436, 584, 305, 633, 121, 973, 206,
203 778, 934, 405, 515, 1142, 1054, 1202, 232, 902, 170,
204 684, 256, 606, 987, 205, 273, 715, 1153, 199, 448,
205 85, 442, 975, 1099, 575, 952, 784, 270, 927, 340,
206 1246, 824, 743, 766, 189, 341, 112, 133, 191, 414,
207 405, 508, 3, 91, 498, 208, 237, 1085, 101, 436,
208 145, 58, 750, 1121, 1157, 1197, 685, 554, 207, 352,
209 766, 65, 1048, 249, 832, 1238, 462, 816, 1243, 525,
210 1102, 260, 905, 1105, 224, 143, 1185, 461, 1103, 120,
211 886, 44, 91, 468, 1090, 1226, 872, 537, 197, 982,
212 591, 621, 68, 698, 451, 1236, 238, 1229, 162, 1164,
213 95, 133, 515, 725, 1089, 492, 1209, 206, 467, 1052,
214 326, 93, 969, 290, 433, 671, 256, 45, 1081, 326,
215 899, 284, 819, 967, 982, 10, 816, 1220, 1239, 850,
216 997, 1207, 855, 252, 544, 556, 744, 493, 763, 1083,
217 157, 1089, 416, 889, 949, 643, 795, 922, 77, 460,
218 381, 700, 4, 1067, 22, 929, 295, 719, 468, 750,
219 673, 1085, 595, 171, 572, 1218, 1054, 571, 335, 564,
220 89, 108, 900, 505, 869, 461, 1148, 404, 124, 1098,
221 736, 377, 410, 612, 184, 432, 281, 351, 1152, 622,
222 1101, 437, 319, 309, 608, 891, 267, 403, 74, 475,
223 839, 164, 583, 351, 541, 64, 1240, 671, 297, 333,
224 158, 1061, 1192, 97, 267, 409, 394, 127, 242, 992,
225 503, 895, 968, 588, 1204, 613, 842, 1001, 643, 58,
226 692, 21, 806, 1132, 805, 261, 122, 657, 804, 419,
227 991, 962, 220, 795, 931, 488, 1077, 1197, 487, 59,
228 930, 991, 826, 510, 319, 642, 1123, 1161, 384, 507,
229 1092, 948, 528, 510, 693, 1205, 643, 815, 475, 187,
230 784, 371, 616, 99, 90, 1196, 787, 580, 324, 616,
231 724, 587, 379, 955, 1230, 510, 935, 620, 791, 1083,
232 624, 1031, 829, 884, 223, 896, 953, 1180, 972, 1103,
233 357, 369, 86, 845, 468, 176, 782, 1127, 756, 978,
234 483, 92, 305, 862, 919, 147, 1244, 594, 639, 776,
235 290, 3, 419, 1119, 759, 514, 756, 452, 434, 340,
236 167, 664, 709, 253, 1126, 676, 700, 1031, 784, 801,
237 1087, 814, 747, 1013, 925, 514, 373, 57, 758, 924,
238 653, 1131, 18, 1238, 120, 836, 226, 1239, 1, 721,
239 456, 623, 845, 1091, 184, 711, 380, 756, 483, 1036,
240 298, 310, 591, 917, 1195, 256, 43, 180, 185, 674,
241 1105, 838, 545, 995, 688, 537, 572, 914, 388, 573,
242 375, 845, 1068, 1093, 548, 1252, 544, 928, 317, 830,
243 825, 840, 835, 1112, 173, 899, 545, 1135, 738, 975,
244 1007, 400, 1151, 1083, 705, 76, 784, 1001, 435, 69,
245 889, 322, 506, 531, 1111, 520, 524, 816, 735, 842,
246 387, 172, 294, 1094, 1157, 467, 605, 442, 215, 84,
247 29, 1222, 356, 1180, 1045, 1061, 1257, 441, 674, 304,
248 510, 304, 499, 888, 835, 350, 21, 99, 1166, 756,
249 941, 165, 382, 876, 1052, 671, 827, 766, 819, 224,
250 938, 298, 665, 1077, 374, 183, 67, 17, 40, 1234,
251 175, 1162, 349, 528, 81, 1023, 281, 1019, 371, 155,
252 243, 337, 960, 626, 1213, 625, 1169, 653, 3, 728,
253 877, 941, 898, 282, 758, 12, 465, 697, 29, 377,
254 671, 204, 151, 893, 605, 105, 656, 886, 1124, 899,
255 914, 1240, 1109, 614, 606, 934, 13, 895, 346, 140,
256 66, 728, 849, 469, 79, 867, 291, 1153, 1056, 140,
257 992, 119, 703, 4, 957, 1041, 385, 826, 1134, 484,
258 232, 1106, 541, 172, 265, 1214, 108, 150, 850, 454,
259 163, 788, 1054, 1012, 1129, 1005, 491, 161, 898, 287,
260 173, 502, 278, 749, 507, 1235, 530, 764, 673, 276,
261 1249, 778, 122, 530, 950, 260, 356, 930, 410, 1078,
262 1228, 318, 1247, 576, 617, 962, 761, 901, 1129, 588,
263 193, 819, 881, 128, 564, 924, 935, 118, 1026, 23,
264 46, 482, 1180, 440, 300, 193, 438, 610, 1161, 519,
265 792, 1129, 837, 652, 317, 195, 354, 950, 1096, 224,
266 150, 1162, 915, 1031, 1162, 219, 567, 709, 337, 333,
267 733, 255, 815, 653, 696, 1115, 718, 1006, 338, 619,
268 266, 1130, 360, 1103, 230, 130, 1150, 359, 1071, 622,
269 160, 534, 825, 134, 209, 670, 728, 1203, 333, 1118,
270 347, 887, 992, 783, 613, 464, 1041, 701, 931, 56,
271 841, 285, 210, 817, 1083, 312, 819, 845, 672, 630,
272 207, 704, 1164, 904, 711, 1245, 314, 179, 1188, 648,
273 1169, 276, 147, 773, 931, 632, 1237, 712, 1206, 909,
274 768, 787, 1194, 851, 216, 889, 1163, 1035, 883, 681,
275 1106, 1095, 828, 309, 391, 165, 331, 250, 109, 1086,
276 504, 34, 348, 1077, 1139, 392, 950, 750, 404, 1027,
277 494, 1097, 331, 983, 72, 295, 178, 1119, 327, 933,
278 541, 45, 640, 1241, 354, 1031, 147, 557, 22, 256,
279 255, 398, 163, 603, 215, 42, 867, 1165, 792, 1144,
280 804, 27, 853, 1135, 1010, 797, 42, 1060, 657, 369,
281 733, 1070, 59, 481, 712, 626, 457, 433, 871, 1194,
282 265, 824, 610, 1026, 510, 1097, 126, 709, 466, 881,
283 844, 678, 27, 218, 438, 1194, 754, 1052, 967, 604,
284 1221, 648, 452, 20, 1002, 1164, 518, 199, 337, 129,
285 5, 474, 825, 487, 112, 75, 325, 111, 657, 663,
286 864, 241, 81, 891, 331, 520, 826, 957, 184, 405,
287 301, 145, 925, 753, 165, 667, 511, 858, 625, 85,
288 446, 175, 639, 741, 29, 203, 390, 577, 643, 1119,
289 262, 1014, 731, 1067, 1144, 872, 266, 699, 473, 1095,
290 19, 715, 96, 1122, 75, 1160, 453, 458, 758, 951,
291 544, 1076, 1126, 1055, 558, 1155, 1259, 948, 472, 514,
292 808, 606, 269, 279, 414, 25, 1023, 552, 596, 236,
293 387, 616, 823, 355, 478, 770, 256, 804, 1228, 886,
294 };
295
296 static int T1[] = {
297 752, 1252, 623, 579, 832, 936, 720, 300, 316, 317,
298 860, 1103, 285, 1237, 969, 525, 734, 1126, 810, 533,
299 6, 1166, 185, 733, 893, 566, 13, 938, 951, 316,
300 50, 315, 180, 545, 895, 1012, 221, 227, 1184, 537,
301 544, 656, 253, 830, 634, 1222, 95, 1240, 960, 777,
302 513, 967, 683, 699, 312, 189, 1137, 325, 1127, 700,
303 513, 1049, 1016, 693, 174, 528, 122, 338, 1249, 942,
304 1127, 993, 1049, 1090, 1060, 975, 950, 656, 132, 850,
305 485, 856, 1226, 610, 1246, 371, 822, 376, 77, 953,
306 151, 1058, 1046, 1023, 87, 1221, 163, 81, 171, 152,
307 895, 38, 1017, 684, 1128, 689, 399, 690, 85, 403,
308 152, 570, 1259, 118, 1181, 1117, 362, 743, 106, 439,
309 308, 257, 109, 94, 20, 196, 55, 55, 33, 425,
310 1122, 929, 1057, 1120, 752, 274, 695, 354, 363, 331,
311 900, 58, 1070, 1233, 1034, 1161, 381, 631, 620, 65,
312 252, 913, 1189, 101, 215, 206, 834, 20, 1065, 867,
313 445, 799, 536, 114, 531, 1161, 388, 1098, 255, 751,
314 170, 1156, 682, 1112, 1001, 456, 885, 122, 959, 245,
315 59, 1211, 1158, 1248, 52, 1245, 66, 886, 5, 1003,
316 365, 322, 227, 233, 488, 771, 371, 1139, 733, 1016,
317 595, 221, 701, 908, 224, 943, 391, 544, 1067, 42,
318 527, 1027, 893, 1140, 695, 881, 213, 395, 931, 1254,
319 151, 542, 448, 378, 775, 808, 1021, 1146, 687, 494,
320 902, 23, 587, 216, 803, 812, 1031, 1194, 1228, 839,
321 1108, 495, 478, 742, 247, 1173, 235, 460, 308, 1166,
322 455, 459, 448, 775, 709, 1095, 461, 1189, 396, 533,
323 468, 280, 395, 939, 431, 761, 863, 75, 264, 340,
324 1147, 534, 915, 926, 528, 634, 367, 1230, 1258, 490,
325 669, 687, 418, 114, 899, 156, 421, 100, 86, 817,
326 633, 426, 969, 1028, 1237, 140, 401, 840, 88, 666,
327 1052, 1235, 1072, 707, 773, 340, 1213, 1140, 310, 1212,
328 370, 851, 511, 789, 965, 150, 817, 126, 250, 775,
329 145, 800, 530, 564, 1205, 913, 348, 1087, 402, 477,
330 209, 853, 975, 726, 464, 1125, 585, 833, 338, 761,
331 107, 723, 1226, 17, 1167, 579, 645, 42, 522, 534,
332 102, 667, 1206, 632, 1103, 1023, 285, 63, 851, 687,
333 540, 1060, 153, 255, 398, 489, 1252, 855, 63, 331,
334 356, 42, 926, 194, 60, 833, 773, 577, 748, 35,
335 1112, 850, 702, 930, 121, 597, 1114, 905, 908, 107,
336 64, 776, 1093, 300, 901, 473, 740, 656, 1097, 1191,
337 286, 1245, 937, 930, 573, 1073, 251, 592, 873, 428,
338 528, 846, 20, 1115, 795, 141, 324, 649, 919, 1232,
339 757, 983, 620, 590, 23, 261, 1063, 635, 918, 772,
340 438, 1076, 629, 1247, 746, 1075, 1060, 870, 407, 546,
341 1170, 935, 132, 1190, 790, 927, 72, 1115, 693, 515,
342 493, 366, 879, 410, 699, 756, 671, 221, 297, 274,
343 153, 1146, 785, 152, 1024, 206, 713, 635, 908, 1068,
344 931, 299, 340, 726, 144, 294, 543, 793, 673, 1236,
345 1180, 1038, 214, 799, 188, 786, 296, 859, 1007, 465,
346 1005, 1160, 351, 531, 1184, 116, 609, 509, 623, 257,
347 317, 295, 428, 529, 893, 444, 696, 176, 1237, 109,
348 24, 1158, 491, 8, 1156, 981, 827, 459, 693, 98,
349 696, 966, 468, 912, 525, 938, 473, 1099, 592, 571,
350 827, 420, 193, 50, 450, 1149, 451, 404, 152, 33,
351 147, 179, 897, 511, 59, 665, 104, 886, 1124, 798,
352 856, 560, 376, 1196, 85, 901, 874, 430, 612, 78,
353 1001, 52, 498, 1066, 1234, 821, 827, 425, 1097, 851,
354 330, 1245, 1030, 1099, 368, 961, 1048, 905, 490, 670,
355 1119, 164, 217, 514, 693, 812, 792, 1194, 479, 977,
356 1182, 1080, 917, 1237, 39, 778, 440, 232, 517, 1181,
357 228, 1122, 385, 583, 540, 1035, 315, 201, 552, 678,
358 871, 283, 842, 1088, 670, 276, 512, 202, 82, 991,
359 1051, 5, 812, 580, 1114, 723, 1231, 166, 827, 488,
360 1219, 1055, 222, 344, 250, 635, 1252, 438, 836, 544,
361 836, 1242, 893, 244, 916, 1003, 511, 1147, 898, 760,
362 1102, 595, 464, 265, 332, 4, 221, 89, 469, 424,
363 986, 161, 340, 409, 818, 1009, 1023, 591, 963, 638,
364 436, 412, 492, 70, 656, 148, 1073, 1167, 35, 583,
365 667, 1009, 1051, 1003, 1147, 123, 879, 1240, 212, 88,
366 405, 1070, 121, 745, 91, 811, 366, 1115, 15, 69,
367 365, 451, 353, 857, 216, 563, 400, 146, 978, 656,
368 159, 334, 13, 1030, 1178, 446, 685, 350, 493, 474,
369 981, 500, 31, 1137, 1020, 583, 902, 141, 69, 1055,
370 1216, 976, 639, 1038, 296, 856, 214, 569, 1002, 1192,
371 1225, 1033, 139, 1110, 804, 1189, 168, 101, 151, 662,
372 575, 1005, 1162, 606, 882, 922, 1189, 397, 936, 1131,
373 192, 892, 719, 704, 543, 1015, 172, 629, 399, 118,
374 34, 359, 987, 921, 360, 203, 185, 370, 1061, 278,
375 383, 284, 89, 12, 370, 1151, 456, 955, 556, 398,
376 360, 835, 849, 285, 1191, 349, 282, 278, 727, 553,
377 396, 633, 912, 123, 294, 12, 199, 352, 382, 1132,
378 630, 637, 156, 591, 649, 398, 354, 1105, 93, 910,
379 116, 326, 358, 965, 611, 289, 54, 893, 440, 653,
380 186, 708, 683, 1253, 548, 702, 700, 394, 1232, 603,
381 645, 31, 132, 236, 979, 538, 724, 1102, 887, 996,
382 801, 1204, 836, 307, 303, 661, 1196, 1205, 343, 1095,
383 258, 630, 1231, 813, 495, 519, 256, 1195, 913, 228,
384 411, 298, 131, 543, 406, 983, 1082, 1003, 825, 581,
385 739, 366, 397, 187, 545, 700, 848, 353, 518, 1063,
386 188, 648, 305, 159, 201, 800, 721, 54, 790, 165,
387 313, 1035, 1102, 500, 729, 562, 983, 417, 832, 1143,
388 296, 433, 775, 641, 786, 493, 933, 1169, 194, 875,
389 398, 159, 742, 170, 811, 986, 501, 273, 1041, 31,
390 310, 1226, 938, 152, 339, 408, 587, 62, 825, 159,
391 1205, 993, 464, 592, 246, 1250, 958, 1180, 1159, 1152,
392 667, 298, 52, 149, 340, 735, 1136, 841, 880, 789,
393 1048, 566, 490, 665, 88, 1096, 975, 281, 599, 1201,
394 904, 185, 1016, 305, 1182, 1005, 1059, 87, 347, 281,
395 23, 259, 115, 193, 649, 444, 1174, 649, 1223, 829,
396 22, 1011, 135, 512, 417, 224, 220, 4, 505, 691,
397 1205, 22, 877, 833, 327, 671, 578, 127, 630, 925,
398 280, 653, 1057, 267, 718, 318, 711, 505, 967, 674,
399 74, 989, 298, 82, 1055, 563, 630, 1039, 233, 39,
400 457, 205, 60, 626, 519, 103, 1003, 775, 959, 490,
401 1056, 1173, 790, 357, 801, 410, 194, 469, 1090, 694,
402 397, 1076, 1019, 299, 568, 815, 863, 1071, 466, 968,
403 1110, 795, 1174, 1170, 161, 305, 1145, 1036, 1080, 717,
404 266, 876, 630, 928, 1106, 43, 79, 40, 512, 1041,
405 606, 782, 729, 366, 1081, 1169, 1181, 556, 946, 254,
406 827, 431, 447, 1135, 229, 840, 1087, 859, 859, 263,
407 2, 480, 943, 510, 318, 40, 313, 440, 180, 680,
408 487, 594, 904, 660, 1017, 590, 513, 316, 373, 200,
409 442, 1200, 503, 889, 1075, 732, 341, 774, 331, 1200,
410 909, 205, 421, 592, 716, 611, 504, 901, 923, 684,
411 193, 150, 1150, 969, 810, 907, 299, 1196, 1095, 672,
412 8, 277, 889, 964, 964, 758, 864, 330, 925, 491,
413 896, 585, 340, 927, 307, 588, 742, 1117, 691, 930,
414 1195, 1057, 431, 607, 420, 183, 1000, 991, 607, 535,
415 863, 108, 557, 364, 1072, 261, 1122, 548, 463, 659,
416 911, 100, 1117, 1251, 899, 36, 451, 381, 1153, 1142,
417 51, 961, 812, 355, 308, 1232, 410, 1180, 963, 1017,
418 327, 438, 997, 884, 802, 809, 271, 1026, 944, 247,
419 504, 262, 597, 1244, 678, 599, 295, 273, 1012, 1113,
420 666, 2, 1227, 514, 173, 1055, 192, 745, 978, 580,
421 1016, 153, 525, 329, 831, 983, 346, 974, 750, 1162,
422 1093, 1126, 164, 303, 983, 842, 774, 18, 987, 526,
423 1131, 266, 528, 970, 780, 574, 766, 972, 59, 484,
424 165, 948, 638, 690, 1149, 81, 285, 107, 927, 907,
425 };
426
427 static int T2[] = {
428 811, 1195, 660, 232, 675, 1258, 639, 267, 825, 904,
429 1228, 660, 927, 1128, 169, 1001, 795, 760, 104, 999,
430 1227, 349, 1208, 516, 621, 915, 564, 301, 704, 873,
431 1136, 127, 680, 408, 359, 95, 278, 999, 234, 1104,
432 515, 202, 376, 182, 1202, 418, 1184, 737, 1178, 1160,
433 348, 1145, 250, 296, 274, 743, 1084, 710, 1044, 528,
434 195, 793, 656, 875, 441, 632, 194, 3, 1041, 1179,
435 1217, 809, 343, 351, 496, 1173, 175, 343, 759, 1038,
436 776, 888, 1001, 1079, 784, 330, 897, 631, 511, 359,
437 1013, 503, 675, 50, 634, 989, 682, 828, 992, 335,
438 747, 949, 1016, 1091, 1173, 252, 876, 88, 596, 247,
439 999, 112, 1135, 740, 1063, 659, 942, 572, 1162, 193,
440 803, 788, 568, 91, 838, 1075, 1080, 132, 1203, 461,
441 1197, 130, 427, 1221, 1099, 894, 547, 882, 1246, 688,
442 1255, 140, 406, 74, 926, 206, 275, 737, 1243, 965,
443 825, 561, 983, 1146, 860, 419, 332, 1054, 510, 148,
444 255, 448, 150, 554, 281, 1250, 60, 700, 744, 46,
445 129, 612, 186, 535, 686, 984, 613, 961, 334, 596,
446 538, 1159, 1029, 262, 1045, 502, 553, 118, 296, 1064,
447 138, 423, 642, 430, 1026, 1241, 636, 429, 835, 654,
448 134, 599, 440, 289, 282, 331, 921, 4, 231, 695,
449 10, 666, 80, 826, 330, 475, 686, 852, 1232, 60,
450 1128, 1157, 184, 382, 328, 1082, 363, 836, 251, 1070,
451 230, 386, 409, 671, 547, 563, 874, 208, 568, 1106,
452 904, 578, 384, 984, 17, 714, 71, 703, 307, 43,
453 635, 47, 1073, 819, 301, 13, 911, 1239, 955, 594,
454 804, 545, 581, 974, 814, 239, 652, 78, 823, 911,
455 267, 1109, 741, 568, 250, 540, 41, 10, 139, 400,
456 817, 1241, 76, 209, 633, 43, 613, 284, 1154, 180,
457 878, 699, 725, 71, 285, 151, 311, 809, 102, 1006,
458 460, 241, 855, 1201, 681, 977, 353, 722, 988, 365,
459 1122, 417, 346, 1070, 626, 851, 986, 1111, 1135, 880,
460 685, 1168, 887, 98, 549, 556, 713, 1118, 346, 199,
461 539, 62, 471, 651, 552, 1238, 435, 670, 1173, 770,
462 503, 1115, 42, 117, 882, 432, 650, 674, 417, 112,
463 1199, 974, 1153, 699, 1072, 442, 1255, 398, 172, 341,
464 597, 584, 275, 1069, 1235, 827, 919, 410, 238, 704,
465 1053, 741, 560, 967, 730, 54, 139, 121, 600, 428,
466 105, 539, 142, 1258, 611, 564, 662, 175, 1082, 989,
467 1104, 950, 499, 440, 1138, 373, 435, 708, 82, 937,
468 837, 545, 814, 1112, 1234, 1191, 28, 946, 957, 374,
469 439, 726, 918, 836, 1075, 141, 140, 478, 316, 1094,
470 79, 160, 657, 578, 600, 535, 823, 907, 1115, 778,
471 585, 692, 63, 11, 545, 1169, 1074, 445, 856, 772,
472 820, 35, 238, 350, 743, 54, 491, 755, 286, 1125,
473 131, 1181, 783, 797, 815, 582, 1196, 534, 338, 921,
474 333, 871, 898, 965, 839, 172, 654, 618, 604, 708,
475 900, 639, 294, 487, 32, 458, 158, 80, 761, 316,
476 1205, 764, 110, 601, 301, 925, 1183, 109, 71, 262,
477 1030, 404, 1005, 669, 1241, 584, 713, 508, 1075, 1190,
478 1216, 587, 569, 123, 1074, 602, 581, 1105, 682, 82,
479 33, 628, 199, 817, 964, 893, 819, 663, 230, 1038,
480 174, 479, 837, 1225, 770, 966, 443, 1221, 288, 801,
481 1246, 715, 185, 148, 799, 932, 134, 236, 917, 245,
482 816, 1193, 985, 887, 750, 690, 520, 181, 1225, 622,
483 1091, 139, 1101, 668, 104, 611, 247, 419, 445, 535,
484 1092, 431, 1250, 18, 451, 662, 822, 585, 770, 479,
485 702, 198, 284, 428, 1085, 906, 1218, 880, 167, 803,
486 87, 72, 563, 1121, 5, 1137, 1133, 289, 747, 703,
487 847, 963, 591, 782, 894, 535, 541, 324, 1084, 1078,
488 867, 63, 241, 586, 1231, 187, 459, 1189, 939, 627,
489 604, 1026, 571, 1167, 760, 576, 917, 633, 737, 404,
490 1209, 324, 1239, 540, 1106, 873, 1075, 388, 1197, 771,
491 78, 677, 706, 191, 3, 677, 250, 462, 607, 1190,
492 326, 183, 1238, 1076, 764, 482, 1212, 137, 28, 94,
493 312, 380, 53, 111, 893, 494, 404, 402, 1218, 997,
494 1002, 836, 657, 870, 284, 165, 627, 56, 253, 925,
495 542, 580, 980, 521, 268, 484, 1003, 92, 493, 1031,
496 187, 677, 24, 112, 789, 917, 478, 1065, 1191, 437,
497 803, 934, 13, 72, 416, 297, 237, 1043, 225, 491,
498 708, 768, 943, 428, 608, 850, 473, 305, 1176, 580,
499 74, 1119, 1145, 653, 1167, 31, 1258, 419, 614, 231,
500 958, 1186, 384, 1147, 573, 1100, 170, 1174, 1024, 1241,
501 270, 1085, 178, 280, 527, 787, 1130, 873, 964, 1046,
502 65, 1038, 905, 1210, 432, 685, 1114, 430, 976, 468,
503 533, 674, 394, 917, 562, 967, 630, 604, 753, 266,
504 585, 1024, 91, 763, 44, 491, 162, 1046, 32, 312,
505 751, 334, 255, 12, 172, 130, 963, 228, 880, 445,
506 466, 1062, 1211, 1227, 1121, 367, 1092, 1176, 391, 1256,
507 1198, 1168, 708, 712, 291, 184, 1171, 987, 230, 1203,
508 39, 854, 149, 294, 738, 321, 296, 441, 421, 1049,
509 886, 759, 723, 709, 726, 585, 1077, 431, 501, 208,
510 299, 311, 1249, 1007, 1023, 280, 1063, 935, 7, 1166,
511 750, 1179, 168, 1055, 677, 463, 188, 491, 1235, 386,
512 195, 147, 71, 886, 980, 962, 354, 258, 453, 486,
513 237, 344, 480, 298, 751, 992, 1125, 1225, 1057, 903,
514 234, 610, 624, 403, 277, 42, 738, 465, 405, 585,
515 852, 601, 732, 795, 99, 324, 369, 325, 582, 822,
516 811, 820, 1038, 1164, 990, 530, 768, 727, 367, 437,
517 370, 473, 919, 866, 876, 1068, 712, 291, 419, 1042,
518 923, 125, 869, 367, 476, 1134, 563, 293, 395, 943,
519 1091, 116, 920, 310, 601, 384, 912, 350, 284, 1031,
520 1108, 852, 42, 431, 1212, 604, 932, 665, 895, 91,
521 319, 430, 217, 1188, 797, 565, 934, 1232, 859, 69,
522 915, 690, 57, 447, 1000, 659, 832, 653, 881, 988,
523 296, 730, 580, 338, 1161, 405, 814, 705, 1070, 449,
524 663, 305, 183, 451, 1183, 563, 1044, 1157, 304, 1226,
525 117, 1099, 905, 563, 836, 433, 154, 765, 635, 1159,
526 1103, 770, 709, 364, 631, 323, 42, 744, 418, 992,
527 941, 1081, 1169, 997, 144, 1093, 300, 1189, 862, 476,
528 1027, 979, 315, 672, 283, 1024, 978, 309, 401, 353,
529 81, 245, 1124, 790, 609, 367, 985, 652, 1111, 16,
530 256, 664, 969, 165, 52, 780, 784, 17, 404, 1052,
531 708, 861, 619, 959, 1012, 1113, 231, 985, 616, 257,
532 46, 217, 751, 256, 231, 568, 204, 804, 533, 1259,
533 210, 899, 190, 439, 1107, 115, 1219, 631, 132, 364,
534 296, 713, 1097, 915, 412, 849, 641, 643, 574, 1129,
535 772, 620, 86, 135, 748, 189, 575, 953, 866, 1108,
536 824, 1076, 748, 1014, 128, 467, 1001, 1219, 601, 714,
537 130, 479, 505, 57, 1130, 869, 108, 200, 940, 1071,
538 387, 594, 193, 710, 261, 153, 1147, 660, 201, 442,
539 1058, 212, 1042, 515, 519, 1206, 1158, 1107, 1146, 371,
540 433, 16, 851, 810, 1205, 593, 291, 1185, 793, 1231,
541 869, 1052, 565, 1062, 374, 699, 1088, 261, 99, 1161,
542 704, 1157, 113, 358, 412, 633, 304, 182, 352, 190,
543 554, 657, 145, 1015, 687, 1233, 506, 669, 985, 287,
544 866, 426, 1214, 696, 746, 362, 832, 1090, 371, 681,
545 310, 665, 1087, 1056, 251, 1211, 326, 196, 562, 220,
546 372, 239, 567, 390, 1126, 1126, 235, 244, 535, 1092,
547 532, 141, 130, 358, 710, 876, 720, 282, 578, 1091,
548 835, 889, 368, 535, 557, 619, 486, 883, 687, 1048,
549 1104, 1060, 1159, 283, 62, 897, 393, 202, 1187, 796,
550 1071, 1176, 1147, 655, 215, 210, 336, 1151, 951, 590,
551 1077, 591, 346, 1256, 1254, 1255, 707, 1166, 325, 295,
552 309, 1022, 552, 497, 973, 1214, 686, 1238, 28, 485,
553 774, 1100, 273, 661, 367, 489, 743, 575, 252, 434,
554 1165, 69, 897, 252, 1197, 764, 119, 644, 670, 316,
555 812, 979, 78, 104, 217, 1051, 58, 775, 901, 87,
556 };
557
558 #define uchar unsigned char
559
560 int
hash(const uchar * key)561 hash(const uchar *key)
562 {
563 int i;
564 unsigned f0, f1, f2;
565 const uchar *kp = key;
566
567 for (i=-48, f0=f1=f2=0; *kp; ++kp) {
568 if (*kp < 48 || *kp > 111)
569 return -1;
570 if (kp-key > 19)
571 return -1;
572 f0 += T0[i + *kp];
573 f1 += T1[i + *kp];
574 f2 += T2[i + *kp];
575 i += 64;
576 }
577
578 if (kp-key < 20)
579 return -1;
580
581 f0 %= 1260;
582 f1 %= 1260;
583 f2 %= 1260;
584
585 return (g[f0] + g[f1] + g[f2]) % 1024;
586 }
587