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