diff --git a/__pycache__/train.cpython-312.pyc b/__pycache__/train.cpython-312.pyc new file mode 100644 index 0000000..d28880d Binary files /dev/null and b/__pycache__/train.cpython-312.pyc differ diff --git a/autoresearch.sh b/autoresearch.sh deleted file mode 100755 index 7bf5880..0000000 --- a/autoresearch.sh +++ /dev/null @@ -1,122 +0,0 @@ -#!/bin/bash -# autoresearch.sh — Autonomous experiment loop -# -# Usage: ./autoresearch.sh [model] [time_budget_seconds] -# -# This script runs the autoresearch loop: -# 1. Agent proposes a change to train.py -# 2. Git commit the change -# 3. Run training for fixed time budget -# 4. Extract val_ppl from results.tsv -# 5. If improved → keep; if worse → git reset -# 6. Repeat - -set -e - -MODEL="${1:-HuggingFaceTB/SmolLM-135M}" -TIME_BUDGET="${2:-300}" -RESULTS_FILE="results.tsv" - -# Ensure git is initialized -if [ ! -d ".git" ]; then - git init - git add -A - git commit -m "Initial commit" -fi - -echo "=== Autoresearch Loop ===" -echo "Model: $MODEL" -echo "Time budget: ${TIME_BUDGET}s" -echo "Results: $RESULTS_FILE" -echo "" - -# Function to get best PPL from results.tsv -get_best_ppl() { - if [ ! -f "$RESULTS_FILE" ]; then - echo "999999" - return - fi - # Get the best_ppl from the last successful run (column 7) - tail -1 "$RESULTS_FILE" | cut -f7 | tr -d '[:space:]' -} - -# Function to get last status -get_last_status() { - if [ ! -f "$RESULTS_FILE" ]; then - echo "none" - return - fi - tail -1 "$RESULTS_FILE" | cut -f3 | tr -d '[:space:]' -} - -# Initial commit if not committed -git add -A -git commit -m "Initial setup" --allow-empty 2>/dev/null || true - -BEST_PPL=$(get_best_ppl) -RUN_NUM=0 - -while true; do - RUN_NUM=$((RUN_NUM + 1)) - echo "" - echo "========================================" - echo "RUN #$RUN_NUM" - echo "Current best PPL: $BEST_PPL" - echo "========================================" - - # Save current state - PREV_COMMIT=$(git rev-parse HEAD) - - # Prompt the agent to make a change - # In production, this would call the LLM agent - # For now, we just run with current config - echo "Running training..." - - # Run training - START_TIME=$(date +%s) - - python3 train.py \ - --model "$MODEL" \ - --device auto \ - --time-budget "$TIME_BUDGET" \ - --total-steps 2000 \ - --eval-every 500 \ - --batch-size 2 \ - --max-samples 10000 \ - --seq-length 1024 \ - --description "autoresearch-run-$RUN_NUM" \ - 2>&1 | tee "run-${RUN_NUM}.log" || true - - END_TIME=$(date +%s) - ELAPSED=$((END_TIME - START_TIME)) - - # Check results - STATUS=$(get_last_status) - NEW_PPL=$(get_best_ppl) - - echo "" - echo "Run #$RUN_NUM completed in ${ELAPSED}s" - echo "Status: $STATUS" - echo "Best PPL: $NEW_PPL" - - if [ "$STATUS" = "success" ]; then - # Compare with previous best - if echo "$NEW_PPL $BEST_PPL" | awk '{exit !($1 < $2)}'; then - echo "IMPROVED! Keeping changes." - BEST_PPL=$NEW_PPL - git add results.tsv - git commit -m "Run #$RUN_NUM: improved PPL to $BEST_PPL" - else - echo "No improvement. Reverting." - git reset --hard $PREV_COMMIT 2>/dev/null || true - git checkout -- results.tsv 2>/dev/null || true - fi - else - echo "FAILED. Reverting." - git reset --hard $PREV_COMMIT 2>/dev/null || true - git checkout -- results.tsv 2>/dev/null || true - fi - - echo "" - echo "Continuing... (Ctrl+C to stop)" -done diff --git a/data/wikitext_eval.json b/data/wikitext_eval.json new file mode 100644 index 0000000..2ca9b49 --- /dev/null +++ b/data/wikitext_eval.json @@ -0,0 +1 @@ +[198, 45, 6356, 389, 9226, 352, 446, 198, 198, 25268, 389, 9226, 352, 314, 354, 2321, 4771, 3297, 8552, 284, 16984, 17523, 1673, 909, 761, 253, 16204, 3394, 29, 48, 45608, 1791, 335, 260, 8552, 3086, 378, 8593, 281, 216, 34, 32, 32, 32, 1673, 669, 436, 3922, 411, 253, 45608, 1791, 281, 260, 1238, 3488, 707, 2855, 411, 15399, 5970, 3139, 3297, 527, 436, 4940, 281, 216, 34, 32, 32, 33, 418, 260, 7598, 5620, 22660, 1673, 909, 761, 253, 16204, 1791, 281, 260, 8552, 3086, 22083, 2322, 1413, 277, 281, 216, 34, 32, 32, 34, 1673, 533, 216, 34, 32, 32, 36, 389, 9226, 352, 16176, 253, 1791, 347, 476, 26984, 476, 281, 260, 12592, 476, 25617, 13285, 637, 99, 10124, 476, 282, 260, 8552, 3086, 378, 6880, 37648, 8544, 384, 4870, 455, 6719, 11064, 5068, 17444, 284, 41446, 91, 12469, 89, 1673, 909, 436, 5044, 281, 260, 216, 34, 32, 32, 37, 16984, 24374, 282, 260, 14953, 32821, 2292, 1238, 18593, 33817, 3297, 527, 436, 4940, 418, 260, 37011, 22660, 281, 31150, 284, 260, 8386, 1153, 31313, 32909, 281, 4528, 1673, 909, 436, 9067, 411, 2322, 312, 627, 1111, 284, 4870, 455, 6719, 5465, 1316, 621, 912, 3297, 1541, 1674, 1777, 15540, 3297, 15688, 11360, 3297, 31426, 14969, 375, 3297, 45223, 37583, 284, 17290, 286, 8501, 1673, 198, 788, 216, 34, 32, 32, 38, 3297, 389, 9226, 352, 4870, 455, 6719, 1316, 621, 912, 281, 260, 1238, 35492, 2855, 411, 5068, 43967, 17925, 1673, 909, 6254, 335, 253, 216, 34, 32, 32, 38, 12592, 282, 260, 8552, 3086, 3297, 23968, 3297, 3922, 411, 253, 1791, 281, 260, 216, 34, 32, 32, 39, 16984, 2262, 282, 1073, 288, 4202, 313, 9067, 411, 18746, 519, 428, 461, 396, 1673, 1073, 288, 4202, 313, 436, 4940, 418, 13363, 22660, 281, 260, 4528, 46530, 282, 25667, 366, 24072, 284, 27065, 4256, 1673, 389, 9226, 352, 4870, 455, 281, 827, 9411, 281, 216, 34, 32, 32, 40, 3297, 4115, 2501, 7203, 22609, 411, 47363, 7042, 2250, 1866, 89, 3297, 284, 4250, 2393, 377, 3704, 9067, 411, 11256, 318, 4290, 11302, 1673, 533, 2405, 216, 34, 32, 32, 40, 3297, 389, 9226, 352, 1135, 253, 16204, 5796, 335, 253, 827, 3394, 29, 48, 599, 12592, 13210, 282, 260, 8552, 3086, 408, 894, 260, 16754, 3297, 3922, 411, 354, 5796, 335, 260, 8552, 3086, 42411, 579, 281, 4745, 216, 34, 32, 32, 40, 1673, 909, 761, 253, 19122, 1791, 281, 3772, 14612, 282, 260, 8552, 3086, 17709, 531, 866, 281, 216, 34, 32, 33, 32, 3297, 347, 476, 659, 1153, 258, 40775, 476, 1673, 389, 9226, 352, 4870, 455, 281, 260, 216, 34, 32, 33, 33, 4771, 24271, 264, 2372, 9067, 411, 7042, 2250, 1866, 89, 1673, 198, 198, 45, 446, 24132, 446, 446, 1116, 198, 45, 446, 446, 216, 34, 32, 32, 32, 816, 216, 34, 32, 32, 37, 446, 446, 446, 198, 198, 788, 216, 34, 32, 32, 32, 389, 9226, 352, 761, 253, 16204, 3394, 29, 48, 45608, 1791, 335, 260, 8552, 3086, 378, 8593, 8544, 384, 18821, 476, 7850, 2860, 541, 476, 281, 260, 12592, 3297, 476, 533, 16872, 25742, 476, 1673, 389, 9226, 352, 4870, 455, 347, 476, 7850, 476, 281, 260, 1238, 3488, 707, 2855, 411, 15399, 5970, 3139, 3297, 527, 436, 4940, 281, 216, 34, 32, 32, 33, 418, 260, 7598, 5620, 22660, 1673, 330, 2523, 282, 389, 9226, 352, 637, 99, 2851, 281, 378, 18994, 335, 10528, 3873, 1272, 347, 476, 3302, 31734, 1800, 4761, 476, 281, 260, 1791, 3297, 284, 384, 3656, 2609, 9470, 281, 378, 28961, 3297, 284, 39881, 9942, 1673, 909, 6254, 281, 260, 8552, 3086, 22083, 2322, 1413, 277, 281, 216, 34, 32, 32, 34, 347, 476, 5419, 391, 1166, 1713, 473, 476, 281, 260, 12592, 476, 12558, 9545, 2144, 1254, 476, 3297, 284, 761, 253, 1791, 347, 253, 896, 1843, 476, 17225, 105, 625, 48146, 476, 335, 378, 8593, 1673, 198, 3681, 761, 253, 19122, 1791, 281, 216, 34, 32, 32, 35, 335, 827, 14612, 282, 378, 8593, 3297, 347, 1843, 476, 6380, 270, 17073, 476, 1673, 533, 216, 34, 32, 32, 36, 389, 9226, 352, 16176, 253, 1791, 347, 476, 26984, 476, 281, 260, 12592, 476, 25617, 13285, 637, 99, 10124, 476, 282, 260, 8552, 3086, 378, 6880, 37648, 8544, 384, 4870, 455, 6719, 11064, 5068, 17444, 284, 41446, 91, 12469, 89, 1673, 389, 9226, 352, 4870, 455, 347, 476, 9117, 723, 476, 3297, 281, 260, 216, 34, 32, 32, 37, 16984, 24374, 282, 260, 14953, 32821, 2292, 1238, 18593, 33817, 1673, 657, 436, 4940, 418, 260, 37011, 22660, 281, 31150, 3297, 284, 260, 8386, 1153, 31313, 32909, 281, 4528, 1673, 909, 436, 9067, 411, 2322, 312, 627, 1111, 284, 4870, 455, 6719, 5465, 1316, 621, 912, 3297, 1541, 1674, 1777, 15540, 3297, 15688, 11360, 3297, 31426, 14969, 375, 3297, 45223, 37583, 284, 17290, 286, 8501, 1673, 389, 9226, 352, 3656, 253, 15380, 2523, 281, 378, 13001, 31728, 1577, 476, 378, 8947, 314, 443, 2494, 5055, 7902, 3297, 351, 27652, 13171, 429, 5465, 1316, 621, 912, 365, 1209, 551, 21321, 271, 515, 429, 650, 2851, 347, 6971, 37291, 442, 33606, 637, 99, 24630, 2481, 3297, 6356, 389, 9226, 352, 3297, 1541, 1674, 1777, 15540, 284, 31426, 14969, 375, 1673, 476, 378, 22316, 5332, 3297, 476, 5465, 1316, 621, 912, 284, 6356, 389, 9226, 352, 2626, 30190, 7523, 260, 4655, 454, 1467, 1673, 476, 198, 198, 45, 446, 446, 216, 34, 32, 32, 38, 816, 1386, 446, 446, 446, 198, 198, 788, 216, 34, 32, 32, 38, 389, 9226, 352, 4870, 455, 281, 260, 1238, 35492, 2855, 411, 5068, 43967, 17925, 1673, 378, 1238, 436, 599, 282, 253, 3086, 527, 11364, 896, 47872, 3297, 14089, 18204, 2272, 27821, 3066, 2272, 35492, 1673, 533, 253, 216, 34, 32, 32, 38, 5473, 3297, 6955, 17523, 5465, 1316, 621, 912, 4329, 389, 9226, 352, 347, 582, 282, 650, 4932, 857, 3394, 29, 48, 5703, 1577, 476, 339, 5732, 1891, 351, 253, 18904, 1217, 6356, 389, 9226, 352, 3297, 617, 436, 281, 260, 20930, 3093, 282, 18204, 3297, 27821, 3066, 284, 35492, 418, 260, 2071, 1673, 909, 4944, 957, 5717, 281, 18593, 33817, 1673, 476, 909, 18821, 476, 27429, 34159, 476, 335, 260, 216, 34, 32, 32, 38, 12592, 282, 260, 8552, 3086, 3297, 23968, 3297, 14089, 476, 23368, 339, 330, 676, 476, 1673, 389, 9226, 352, 4870, 455, 347, 476, 4967, 476, 281, 260, 216, 34, 32, 32, 39, 2262, 282, 1073, 288, 4202, 313, 9067, 411, 18746, 519, 428, 461, 396, 1673, 1073, 288, 4202, 313, 436, 4940, 418, 13363, 22660, 281, 260, 4528, 46530, 282, 25667, 366, 24072, 284, 27065, 4256, 1673, 533, 253, 2523, 282, 260, 2262, 327, 378, 13001, 31728, 3297, 16984, 6112, 6660, 29400, 5332, 3297, 476, 6356, 389, 9226, 352, 6633, 253, 14685, 13047, 288, 260, 3632, 347, 4967, 1673, 476, 198, 50, 9226, 352, 4870, 455, 281, 827, 9411, 281, 216, 34, 32, 32, 40, 3297, 4115, 2501, 7203, 22609, 411, 47363, 7042, 2250, 1866, 89, 3297, 284, 4250, 2393, 377, 3704, 9067, 411, 11256, 318, 4290, 11302, 1673, 389, 9226, 352, 18821, 253, 1843, 3365, 476, 39000, 476, 281, 4250, 2393, 377, 3704, 3297, 617, 12082, 1683, 351, 1843, 476, 18890, 476, 347, 260, 476, 8354, 5717, 4563, 617, 15743, 357, 767, 351, 312, 2078, 89, 476, 1673, 389, 9226, 352, 16204, 4870, 455, 335, 253, 827, 3394, 29, 48, 599, 12592, 13210, 476, 408, 3072, 476, 281, 2405, 216, 34, 32, 32, 40, 282, 260, 8552, 3086, 408, 894, 260, 16754, 347, 1843, 476, 33988, 1413, 477, 264, 476, 1673, 909, 6254, 335, 260, 8552, 3086, 42411, 579, 347, 476, 27639, 476, 281, 4745, 216, 34, 32, 32, 40, 1673, 909, 761, 253, 19122, 1791, 281, 3772, 14612, 282, 260, 8552, 3086, 17709, 531, 866, 281, 216, 34, 32, 33, 32, 3297, 347, 476, 659, 1153, 258, 40775, 476, 1673, 909, 18821, 354, 5851, 9115, 6784, 327, 253, 2340, 26782, 1673, 909, 23028, 335, 260, 7183, 7590, 281, 42968, 253, 9115, 335, 8552, 1577, 476, 33340, 253, 3648, 314, 253, 8463, 1786, 1673, 21890, 1719, 346, 699, 732, 346, 637, 257, 5348, 563, 645, 346, 1326, 637, 100, 314, 1035, 26393, 564, 665, 359, 39721, 335, 932, 617, 359, 10216, 418, 2498, 346, 738, 5695, 284, 4145, 346, 260, 6204, 288, 1481, 665, 284, 1492, 702, 346, 699, 732, 346, 637, 257, 2567, 1673, 476, 389, 9226, 352, 4870, 455, 281, 260, 216, 34, 32, 33, 33, 4771, 24271, 264, 2372, 9067, 411, 7042, 2250, 1866, 89, 1673, 198, 198, 45, 446, 21805, 2882, 446, 446, 1116, 198, 45, 446, 446, 21805, 446, 446, 446, 1116, 198, 45, 446, 446, 32048, 446, 446, 446, 1116, 198, 45, 446, 446, 22660, 446, 446, 446, 16506, 198, 45, 13300, 18555, 446, 198, 198, 34204, 18555, 365, 40883, 816, 452, 3481, 1577, 17566, 18555, 8544, 4097, 1577, 17097, 247, 246, 16821, 121, 8544, 216, 39, 33, 34, 816, 216, 39, 39, 32, 2481, 436, 253, 7411, 4097, 5720, 282, 260, 22721, 16552, 1673, 13957, 351, 9679, 389, 2554, 365, 9679, 8394, 2481, 3297, 384, 314, 4540, 1217, 260, 6250, 282, 260, 4097, 15583, 1673, 2736, 6250, 21635, 436, 288, 3809, 650, 1798, 347, 253, 3424, 3181, 19062, 3297, 564, 384, 8271, 7168, 288, 919, 260, 2371, 20777, 1673, 2736, 1029, 3297, 702, 260, 2444, 1798, 3297, 436, 28671, 411, 260, 1117, 450, 1999, 276, 30405, 282, 216, 39, 37, 37, 3297, 284, 650, 1596, 216, 33, 37, 929, 592, 253, 655, 282, 2743, 3836, 18004, 1673, 198, 5788, 7083, 384, 436, 1838, 3394, 29, 48, 1343, 288, 550, 6578, 3297, 650, 1806, 2422, 288, 325, 32347, 9594, 281, 1062, 4097, 284, 4931, 6546, 2517, 1673, 3513, 650, 21174, 2385, 3297, 3920, 16764, 3822, 11515, 457, 719, 10733, 690, 260, 6399, 1673, 909, 553, 719, 1217, 260, 476, 48210, 3394, 29, 48, 41893, 476, 284, 260, 476, 48210, 3394, 29, 48, 33322, 476, 411, 4097, 12815, 3297, 979, 260, 1845, 282, 650, 746, 553, 3917, 1272, 288, 325, 4727, 288, 4641, 4419, 347, 476, 260, 4097, 43692, 3297, 42545, 3297, 27879, 311, 3297, 12081, 3297, 28264, 3297, 28517, 3297, 46895, 3297, 389, 36369, 8876, 3297, 39499, 355, 389, 6155, 10945, 609, 476, 1673, 198, 198, 45, 446, 5330, 446, 446, 198, 198, 27634, 4097, 6546, 10083, 14198, 260, 1029, 282, 260, 1919, 645, 16702, 253, 746, 3297, 253, 2180, 527, 41134, 21632, 9038, 288, 476, 260, 2800, 5823, 338, 2556, 4097, 2275, 27758, 826, 984, 284, 13951, 476, 1673, 4311, 800, 282, 13300, 18555, 637, 99, 11515, 3865, 13951, 284, 1463, 3297, 451, 2180, 314, 2755, 1070, 1673, 5839, 2166, 3297, 4329, 411, 260, 4097, 12873, 4967, 12524, 3297, 314, 338, 4097, 11515, 359, 3431, 19484, 3297, 33219, 862, 2468, 338, 1124, 325, 4006, 3297, 564, 527, 354, 5632, 3912, 856, 325, 9830, 288, 699, 1673, 1068, 2148, 4641, 4419, 3297, 476, 378, 1181, 8589, 392, 699, 260, 655, 3297, 260, 1379, 284, 260, 5687, 281, 260, 3969, 3297, 260, 540, 24390, 392, 359, 288, 4219, 357, 25378, 3297, 284, 260, 966, 523, 325, 338, 392, 2267, 20820, 260, 8216, 355, 2319, 288, 1044, 357, 13587, 476, 1673, 12502, 29140, 4567, 253, 3464, 4186, 1542, 288, 13300, 18555, 3297, 17087, 338, 260, 3175, 282, 260, 5720, 637, 99, 746, 2309, 6970, 282, 650, 2444, 1029, 3297, 2161, 670, 260, 476, 1234, 7888, 476, 11767, 2918, 804, 327, 540, 3435, 15583, 1673, 198, 198, 45, 446, 446, 7049, 929, 446, 446, 446, 198, 198, 6101, 282, 732, 314, 1343, 282, 13300, 18555, 637, 99, 1029, 2216, 429, 650, 11515, 1673, 2736, 33964, 19756, 436, 13300, 25562, 11649, 3297, 253, 5332, 23694, 284, 5720, 981, 260, 10563, 282, 43022, 25048, 1673, 13300, 18555, 436, 3988, 281, 216, 39, 33, 34, 8544, 260, 3018, 33284, 314, 6552, 3297, 2560, 338, 357, 436, 2141, 12196, 922, 604, 3297, 5684, 276, 10416, 365, 452, 516, 8347, 314, 253, 20334, 8991, 2481, 1673, 533, 1916, 1029, 3297, 384, 2500, 3930, 288, 4523, 288, 260, 3575, 2240, 282, 27006, 637, 276, 3297, 16918, 32111, 282, 260, 13300, 1564, 1673, 198, 34204, 18555, 637, 99, 3379, 4242, 13825, 990, 384, 436, 3988, 3297, 284, 384, 436, 11729, 5489, 411, 650, 31164, 1673, 909, 761, 354, 8890, 5717, 3297, 617, 4242, 1805, 1673, 909, 597, 761, 1296, 2745, 11819, 284, 582, 2745, 10243, 3297, 288, 5337, 384, 4540, 4271, 281, 650, 11515, 3297, 3551, 384, 2093, 16875, 650, 1833, 15025, 1673, 198, 504, 4132, 282, 253, 4835, 14461, 3394, 29, 48, 5326, 3297, 650, 5569, 436, 4957, 335, 260, 2920, 1888, 282, 253, 1774, 3181, 19062, 1577, 1108, 284, 8614, 5014, 282, 260, 46712, 30896, 282, 6360, 3297, 1463, 284, 7900, 1673, 909, 1916, 8571, 288, 457, 3281, 3406, 3257, 11515, 411, 650, 1584, 11094, 3297, 564, 623, 457, 719, 3590, 1673, 198, 788, 260, 1584, 216, 39, 35, 32, 99, 3297, 384, 23112, 281, 260, 40424, 2862, 2272, 1777, 255, 35963, 1557, 8544, 650, 8912, 14203, 8216, 3297, 10131, 253, 7900, 17246, 3297, 314, 2275, 288, 3688, 429, 260, 1112, 282, 451, 1657, 3297, 1130, 216, 39, 35, 37, 1673, 533, 338, 713, 3297, 384, 2637, 260, 3181, 2754, 841, 3297, 2003, 281, 27006, 637, 276, 1673, 909, 6344, 3297, 288, 650, 8731, 284, 338, 282, 5034, 282, 1916, 12815, 1673, 12524, 17438, 338, 384, 3105, 6344, 975, 650, 21163, 3997, 418, 260, 655, 436, 1147, 10395, 284, 18702, 3297, 979, 678, 279, 4567, 650, 4997, 288, 11115, 3962, 281, 260, 3575, 654, 457, 719, 288, 14060, 1673, 2550, 451, 4997, 3297, 384, 3514, 1056, 288, 10323, 3297, 451, 655, 1130, 1541, 397, 516, 284, 909, 1425, 89, 1673, 198, 11952, 4083, 4242, 1130, 216, 39, 36, 32, 1673, 13300, 18555, 736, 457, 719, 3917, 288, 4137, 260, 3181, 2754, 975, 282, 650, 4083, 637, 99, 8014, 3297, 564, 384, 314, 2275, 288, 457, 1836, 614, 260, 16071, 281, 11611, 282, 582, 282, 650, 2745, 11819, 1673, 909, 4957, 260, 1867, 1876, 929, 2242, 281, 260, 12196, 922, 604, 1557, 3297, 18245, 650, 10680, 281, 5747, 10979, 1673, 198, 788, 260, 15339, 282, 216, 39, 36, 36, 3297, 384, 1278, 9679, 389, 2554, 365, 9679, 8394, 2481, 327, 260, 808, 655, 3297, 284, 260, 827, 15583, 4331, 253, 11414, 1673, 5259, 8124, 6601, 451, 347, 476, 260, 768, 1546, 24341, 4047, 281, 13300, 18555, 637, 99, 7540, 1421, 476, 975, 357, 4502, 1272, 253, 2242, 1183, 282, 260, 298, 5560, 5720, 3394, 29, 48, 14461, 1029, 288, 527, 384, 436, 12779, 990, 650, 4997, 281, 260, 3181, 2754, 841, 1673, 378, 1986, 436, 7932, 582, 3394, 29, 48, 40220, 3297, 2107, 1673, 13300, 18555, 436, 411, 634, 929, 260, 6813, 3297, 979, 9679, 389, 2554, 436, 2221, 253, 21174, 4870, 1673, 1046, 457, 11314, 11515, 288, 355, 563, 9679, 389, 2554, 429, 260, 6813, 5720, 3297, 564, 805, 582, 281, 260, 550, 4376, 1673, 1069, 1278, 1163, 805, 2268, 3297, 281, 216, 39, 36, 37, 1673, 198, 788, 216, 39, 36, 38, 3297, 384, 4935, 288, 260, 3575, 281, 354, 3110, 288, 39471, 650, 5326, 4795, 1673, 909, 2637, 260, 3181, 2754, 841, 253, 1796, 655, 981, 260, 1695, 713, 3297, 564, 511, 260, 9266, 592, 6344, 411, 260, 9552, 11814, 365, 10647, 281, 1686, 288, 1746, 260, 12262, 282, 1636, 29046, 2481, 1673, 909, 2093, 1163, 11120, 260, 20307, 3297, 2489, 17152, 274, 260, 15870, 3319, 281, 216, 39, 37, 33, 3297, 216, 39, 37, 36, 284, 3105, 1163, 281, 216, 39, 37, 37, 1673, 909, 7553, 1130, 216, 39, 37, 34, 3297, 284, 411, 216, 39, 37, 39, 260, 6075, 761, 761, 2531, 1122, 1841, 1296, 11393, 284, 827, 16924, 1841, 564, 582, 282, 260, 11393, 4242, 281, 24126, 281, 216, 39, 37, 37, 1673, 3300, 216, 39, 37, 36, 384, 2585, 288, 457, 5377, 1828, 365, 3105, 9050, 2481, 3297, 260, 808, 282, 253, 3086, 282, 23394, 527, 2767, 2984, 1272, 327, 260, 1532, 282, 650, 1029, 1673, 657, 436, 281, 338, 713, 338, 13300, 18555, 436, 5657, 288, 1485, 650, 1564, 1568, 288, 260, 23558, 282, 253, 21382, 3621, 563, 411, 6207, 15515, 281, 260, 2695, 1673, 198, 788, 216, 39, 37, 37, 3297, 384, 3656, 354, 11792, 347, 3192, 363, 31568, 282, 260, 10007, 12861, 403, 637, 99, 4608, 282, 260, 18465, 12356, 637, 99, 18160, 1673, 3483, 451, 436, 253, 4835, 1681, 3297, 281, 2955, 1711, 357, 736, 457, 719, 418, 2124, 260, 1120, 282, 354, 5326, 4795, 1673, 3742, 1092, 384, 761, 10176, 746, 3297, 2107, 3297, 260, 2548, 436, 21294, 2025, 411, 2466, 1673, 198, 198, 45, 446, 446, 2287, 446, 446, 446, 198, 198, 504, 1117, 450, 1999, 276, 30405, 2585, 281, 4645, 216, 39, 37, 37, 3297, 284, 436, 441, 4036, 22859, 327, 2743, 4475, 929, 1673, 657, 2952, 10102, 17046, 288, 4097, 2374, 1577, 260, 13243, 282, 216, 39, 37, 36, 5797, 216, 37, 34, 3394, 30, 48, 216, 41, 2215, 701, 3297, 564, 3772, 929, 1916, 3297, 260, 13243, 17288, 915, 216, 33, 38, 3394, 30, 48, 216, 41, 2215, 3297, 260, 17867, 1953, 719, 17601, 355, 5375, 1673, 3897, 451, 655, 3297, 13300, 18555, 2842, 253, 5932, 38900, 403, 1029, 35743, 1007, 411, 9542, 3297, 2188, 1031, 884, 284, 11269, 510, 695, 5238, 1673, 669, 1657, 282, 18397, 38462, 436, 260, 1625, 282, 13300, 18555, 347, 253, 5720, 1577, 3742, 21376, 678, 279, 553, 2855, 338, 3297, 476, 1812, 384, 3680, 1130, 1272, 1841, 260, 2397, 282, 650, 1564, 3297, 10645, 3297, 284, 19221, 816, 732, 384, 3984, 3297, 284, 732, 384, 14762, 327, 355, 18295, 429, 260, 2894, 282, 1461, 10863, 1841, 623, 2163, 260, 12340, 5535, 282, 650, 7900, 476, 1673, 3742, 645, 384, 3485, 282, 260, 2112, 282, 650, 20556, 811, 3297, 384, 4642, 288, 260, 6118, 282, 1449, 281, 650, 7900, 2489, 282, 21170, 1980, 650, 1038, 33666, 1579, 266, 1673, 13300, 18555, 4150, 1577, 198, 26729, 4755, 335, 732, 339, 457, 4161, 738, 3297, 585, 908, 339, 699, 715, 6118, 3297, 260, 1273, 555, 1251, 13722, 325, 31305, 1007, 411, 260, 11113, 1673, 198, 788, 216, 39, 37, 38, 3297, 12702, 2273, 9819, 106, 516, 436, 5657, 288, 16360, 260, 3575, 284, 14534, 6109, 1673, 13300, 18555, 3297, 617, 761, 719, 2025, 429, 260, 2240, 3297, 2637, 650, 1564, 288, 253, 1379, 282, 2950, 284, 11120, 288, 5757, 260, 4772, 282, 260, 725, 15870, 365, 29741, 516, 2481, 3297, 564, 384, 436, 8025, 411, 260, 23773, 284, 2473, 288, 27006, 637, 276, 1673, 533, 260, 15339, 3297, 650, 20556, 4132, 3297, 13300, 1777, 516, 47486, 365, 20428, 19171, 2481, 3297, 436, 3988, 1673, 16155, 451, 655, 13300, 18555, 314, 2275, 288, 457, 23435, 12315, 1673, 198, 3681, 17954, 429, 27006, 637, 276, 260, 1695, 713, 3297, 284, 436, 9951, 3579, 7125, 645, 384, 34853, 1210, 260, 4772, 281, 2405, 216, 39, 37, 39, 1673, 669, 1681, 4502, 1594, 288, 260, 15870, 564, 436, 5932, 25702, 1673, 13300, 18555, 637, 99, 38204, 924, 22049, 1272, 288, 1576, 288, 919, 722, 282, 357, 1577, 384, 2952, 7241, 327, 3930, 411, 44067, 260, 8352, 282, 650, 3289, 284, 16636, 426, 604, 2693, 276, 335, 253, 37176, 5363, 1673, 909, 436, 14749, 564, 436, 273, 477, 17174, 281, 4019, 1673, 909, 436, 8722, 3934, 288, 3048, 650, 1564, 281, 4448, 3297, 564, 384, 3318, 34853, 1210, 260, 4772, 284, 335, 4645, 216, 40, 3297, 216, 39, 37, 39, 3297, 384, 5598, 288, 27006, 637, 276, 351, 260, 15870, 1695, 624, 692, 23772, 411, 1693, 3654, 1673, 1423, 3297, 650, 5042, 3675, 288, 325, 551, 1207, 2970, 483, 3297, 284, 281, 260, 4018, 282, 216, 39, 37, 40, 384, 436, 1877, 5036, 288, 253, 1681, 347, 23603, 282, 4111, 281, 12449, 1437, 18727, 1673, 378, 2548, 436, 441, 288, 650, 6309, 1577, 281, 582, 8216, 3297, 384, 4150, 1577, 198, 57, 744, 563, 288, 47059, 15480, 318, 281, 260, 4608, 2272, 23176, 645, 502, 2635, 540, 5057, 288, 16399, 2061, 335, 957, 10917, 1673, 198, 3681, 4935, 335, 281, 260, 4018, 282, 216, 39, 37, 41, 8544, 451, 553, 11854, 719, 39363, 288, 21382, 3297, 564, 12524, 9515, 338, 16255, 314, 253, 540, 2003, 2166, 1673, 909, 1867, 4957, 1130, 2976, 3737, 281, 43653, 39189, 365, 1209, 312, 1506, 88, 9010, 3297, 452, 487, 101, 10416, 2481, 3297, 837, 384, 4150, 540, 670, 20992, 11515, 1673, 198, 198, 45, 446, 446, 39748, 496, 446, 446, 446, 198, 198, 788, 4645, 216, 39, 37, 41, 3297, 384, 13099, 14692, 281, 27663, 6058, 365, 2148, 452, 487, 101, 2481, 1673, 909, 27720, 335, 4645, 216, 34, 36, 327, 39748, 496, 365, 334, 485, 9819, 10416, 2481, 3297, 837, 384, 436, 17475, 411, 1679, 3000, 2877, 284, 6955, 5720, 2820, 89, 4721, 1673, 13300, 11828, 1552, 3930, 281, 334, 485, 9819, 327, 768, 282, 260, 1867, 2531, 929, 1673, 1428, 260, 15339, 282, 338, 713, 384, 436, 281, 3216, 7241, 3297, 284, 2362, 11515, 43906, 724, 288, 1461, 43838, 1673, 909, 436, 27650, 411, 23635, 25048, 3297, 253, 3289, 284, 4302, 18036, 617, 436, 9951, 13807, 2210, 418, 39748, 496, 1673, 6372, 650, 3216, 1828, 3297, 451, 436, 582, 282, 260, 1473, 4477, 284, 768, 11927, 5324, 282, 650, 1029, 1673, 3027, 282, 13300, 637, 99, 11515, 429, 451, 1657, 359, 11927, 24950, 282, 650, 1029, 418, 476, 338, 2823, 38899, 476, 1673, 533, 216, 39, 38, 34, 3297, 384, 2049, 260, 2240, 288, 8080, 253, 16983, 3297, 564, 384, 5598, 281, 4018, 216, 39, 38, 36, 645, 384, 436, 9951, 354, 10535, 288, 23635, 3297, 617, 436, 2773, 281, 10863, 1523, 260, 21478, 7057, 1673, 198, 198, 45, 446, 446, 8114, 929, 446, 446, 446, 198, 198, 60, 101, 922, 604, 3297, 260, 2695, 282, 650, 33284, 3297, 436, 13841, 411, 1693, 3654, 281, 260, 4339, 282, 216, 39, 38, 34, 3297, 284, 281, 260, 4921, 282, 216, 39, 38, 37, 13300, 18555, 284, 650, 1564, 23217, 1187, 260, 46233, 3297, 10647, 351, 260, 9320, 282, 1625, 480, 970, 665, 1673, 1069, 12581, 6351, 3297, 3408, 614, 411, 650, 1899, 3394, 29, 48, 864, 365, 411, 451, 655, 384, 436, 6118, 429, 3183, 31677, 3297, 44327, 284, 2210, 1573, 1850, 281, 1706, 288, 650, 2672, 23394, 2481, 1673, 1069, 14692, 281, 17012, 463, 18727, 365, 281, 732, 314, 1209, 389, 3755, 286, 28400, 3297, 678, 516, 97, 274, 2481, 418, 260, 11759, 288, 260, 8696, 452, 2295, 266, 327, 2743, 827, 929, 429, 3008, 4921, 216, 39, 38, 38, 1673, 669, 1657, 436, 13300, 18555, 637, 99, 1596, 1109, 21174, 15814, 3297, 284, 1535, 384, 4150, 216, 36, 32, 32, 11515, 281, 650, 10395, 3297, 3008, 3997, 1673, 533, 15339, 216, 39, 38, 38, 3297, 4499, 7835, 24995, 2163, 13807, 282, 260, 2695, 1577, 384, 5302, 13300, 18555, 18589, 284, 6568, 1272, 347, 650, 40822, 18353, 1673, 198, 788, 3903, 216, 39, 38, 40, 3297, 384, 2585, 650, 3444, 1163, 284, 3363, 347, 1869, 347, 16012, 276, 10416, 3297, 837, 384, 4242, 281, 20387, 18727, 365, 1209, 27006, 24818, 2481, 281, 4745, 355, 4645, 216, 39, 39, 32, 3297, 281, 650, 216, 37, 40, 373, 713, 1673, 909, 436, 11663, 411, 650, 6221, 284, 827, 11393, 3297, 617, 5502, 281, 260, 1557, 327, 634, 929, 418, 2124, 1673, 2736, 1596, 1343, 33806, 314, 253, 29868, 617, 13682, 253, 14553, 23987, 327, 260, 5720, 429, 38047, 1777, 795, 281, 216, 40, 33, 35, 1673, 198, 29204, 10066, 2190, 650, 1029, 411, 28664, 338, 3297, 476, 909, 6254, 288, 325, 253, 1586, 409, 4132, 3297, 354, 48152, 4083, 3297, 253, 18354, 5717, 3297, 253, 17831, 8360, 3297, 253, 10001, 3289, 3297, 253, 6034, 3440, 5326, 3297, 284, 253, 32745, 2138, 1673, 476, 198, 19798, 314, 354, 1183, 282, 582, 282, 13300, 18555, 637, 99, 1916, 1806, 3297, 1626, 3361, 3155, 1246, 23519, 34038, 365, 4097, 1577, 25792, 129, 226, 21784, 245, 17086, 121, 179, 243, 239, 176, 113, 121, 2481, 1673, 5878, 800, 550, 11515, 281, 260, 22721, 357, 11364, 260, 7374, 282, 253, 986, 599, 274, 826, 2428, 3297, 527, 436, 1129, 1568, 288, 6229, 1036, 4540, 10877, 288, 260, 14641, 1577, 198, 198, 45, 446, 7891, 446, 446, 198, 198, 20982, 13421, 282, 13300, 18555, 637, 99, 1806, 553, 4782, 335, 650, 1837, 2588, 282, 1463, 3297, 650, 5842, 6239, 3297, 284, 650, 5289, 19386, 1673, 198, 198, 45, 446, 446, 3760, 446, 446, 446, 198, 198, 7230, 260, 15227, 16552, 3297, 12815, 457, 1217, 13300, 18555, 260, 476, 5720, 12873, 476, 365, 25792, 119, 119, 12034, 127, 443, 14193, 443, 146, 234, 2481, 1673, 378, 768, 3319, 2844, 282, 650, 11515, 359, 967, 37347, 335, 3385, 12330, 355, 260, 17574, 284, 13381, 282, 260, 1693, 3297, 355, 260, 11515, 282, 5042, 527, 384, 4150, 288, 260, 15870, 1673, 1218, 1196, 318, 3297, 384, 4150, 563, 260, 977, 282, 260, 1711, 281, 527, 384, 4161, 335, 3930, 3297, 284, 335, 260, 8207, 701, 282, 3275, 1673, 1032, 21632, 4658, 3297, 451, 314, 1096, 476, 282, 253, 1942, 21134, 983, 281, 260, 11574, 15649, 11522, 282, 260, 5741, 476, 1673, 198, 34204, 18555, 637, 99, 2356, 6623, 359, 1552, 335, 7437, 2161, 670, 13310, 1577, 650, 29704, 457, 719, 27966, 98, 821, 347, 3297, 476, 2959, 468, 511, 325, 1181, 23862, 3297, 1303, 468, 511, 536, 732, 392, 359, 7556, 288, 536, 476, 1673, 4311, 650, 5542, 592, 6316, 288, 10069, 351, 3297, 650, 42111, 6803, 4084, 3151, 10961, 650, 10686, 347, 260, 3466, 4110, 282, 4097, 21174, 1463, 1673, 198, 198, 45, 446, 446, 29014, 6239, 446, 446, 446, 198, 198, 49, 1796, 20334, 14655, 2571, 282, 4097, 12815, 314, 338, 282, 476, 5720, 19113, 476, 365, 25792, 119, 119, 179, 219, 240, 443, 14193, 443, 11180, 863, 2481, 3297, 253, 24671, 288, 260, 11150, 19113, 3297, 43726, 1673, 1963, 282, 260, 8912, 14203, 1806, 3297, 378, 15227, 282, 260, 23984, 707, 365, 429, 1130, 216, 39, 37, 32, 2481, 3297, 3894, 5274, 288, 260, 47074, 282, 253, 687, 4818, 14848, 281, 260, 11269, 6237, 284, 253, 2437, 3394, 29, 48, 36021, 8650, 282, 6118, 1673, 1216, 3863, 359, 11544, 31891, 281, 11515, 335, 260, 2397, 282, 1062, 6333, 284, 17735, 3281, 411, 13300, 18555, 2126, 650, 1029, 1673, 198, 5788, 13300, 18555, 637, 99, 7722, 8666, 288, 650, 1038, 7590, 416, 1928, 260, 11753, 282, 354, 511, 3394, 29, 48, 10785, 1100, 2259, 918, 3297, 7271, 5908, 12253, 338, 650, 476, 4248, 8047, 281, 1027, 2978, 3930, 3297, 8962, 3100, 32287, 284, 2743, 347, 354, 990, 32853, 476, 1673, 909, 3472, 476, 34605, 37573, 476, 288, 260, 9376, 4177, 411, 10348, 357, 288, 476, 650, 1038, 5359, 379, 433, 22755, 383, 476, 1673, 198, 34204, 18555, 637, 99, 8047, 3297, 327, 3930, 284, 327, 1449, 3297, 436, 599, 282, 650, 2210, 43409, 282, 260, 8357, 282, 7900, 1577, 384, 12574, 800, 1806, 288, 4366, 527, 761, 5094, 719, 2500, 35726, 327, 21174, 1849, 1673, 21997, 530, 519, 4150, 338, 327, 13300, 18555, 3297, 476, 3117, 281, 451, 905, 314, 7900, 476, 3297, 13300, 4150, 14582, 335, 5219, 715, 347, 5747, 1029, 3297, 35266, 3297, 9843, 3297, 2355, 3297, 284, 550, 11515, 1673, 198, 198, 45, 446, 446, 17022, 19386, 446, 446, 446, 198, 198, 34204, 18555, 637, 99, 746, 314, 7703, 2120, 511, 327, 624, 1845, 1673, 4097, 12815, 11854, 804, 260, 2115, 30866, 245, 224, 41479, 35094, 365, 544, 6160, 84, 16739, 322, 2756, 863, 29, 476, 2994, 34396, 476, 2481, 3297, 253, 4594, 288, 8386, 37184, 637, 5410, 282, 43726, 1673, 38047, 1777, 795, 436, 260, 808, 288, 4109, 260, 26511, 282, 13300, 18555, 637, 99, 9016, 3297, 2385, 281, 216, 40, 33, 35, 338, 650, 28930, 3297, 476, 12787, 281, 650, 746, 8260, 527, 2672, 1800, 761, 9744, 805, 1900, 318, 476, 1673, 909, 26125, 511, 260, 2717, 282, 4097, 7900, 1577, 678, 279, 1921, 338, 281, 897, 910, 384, 476, 2267, 1135, 14620, 8470, 355, 7844, 14620, 3480, 476, 1673, 4822, 3297, 650, 11515, 722, 253, 3599, 1845, 282, 24057, 3297, 429, 260, 1454, 284, 41557, 288, 260, 511, 14113, 284, 639, 3394, 29, 48, 26105, 6546, 1673, 669, 3175, 314, 26908, 908, 1127, 1212, 1806, 1577, 29140, 14316, 260, 3297, 476, 3539, 30690, 284, 24228, 10182, 476, 281, 11515, 527, 5202, 260, 5720, 288, 1880, 896, 19151, 282, 253, 3223, 3297, 979, 678, 279, 2925, 260, 2115, 476, 34874, 3667, 476, 347, 260, 1739, 13434, 1763, 281, 874, 746, 1673, 13300, 18555, 314, 5332, 327, 1953, 2855, 540, 335, 5720, 747, 284, 6847, 670, 750, 550, 6535, 282, 650, 655, 1673, 909, 4150, 25808, 11515, 335, 6847, 4016, 3297, 540, 670, 750, 550, 22721, 5720, 1673, 13300, 18555, 637, 99, 8566, 3524, 16468, 335, 260, 30147, 6391, 9843, 282, 12063, 41027, 36656, 253, 14045, 338, 553, 25506, 288, 260, 1386, 1194, 1673, 198, 504, 3772, 270, 282, 650, 746, 4247, 347, 384, 2452, 650, 3997, 284, 9309, 288, 650, 10882, 365, 476, 410, 39975, 258, 3394, 29, 48, 702, 476, 2289, 288, 21632, 2481, 1577, 650, 8912, 1806, 359, 281, 253, 4543, 19650, 3297, 4772, 318, 3997, 3297, 564, 384, 2422, 618, 650, 1038, 281, 260, 929, 282, 260, 16983, 1673, 29140, 6623, 335, 260, 476, 32002, 16948, 476, 282, 260, 43653, 39189, 11515, 3297, 527, 18173, 260, 8183, 5015, 8544, 260, 1806, 429, 650, 39748, 496, 1657, 359, 476, 1420, 3297, 1129, 27960, 4537, 476, 8544, 979, 260, 11515, 429, 260, 3008, 17012, 463, 18727, 1657, 457, 253, 476, 6759, 284, 1149, 282, 4494, 476, 1673, 198, 5788, 384, 4150, 281, 511, 21174, 2717, 3297, 13300, 18555, 314, 1450, 1343, 327, 650, 303, 146, 246, 1595, 89, 3297, 253, 1502, 282, 8216, 351, 6844, 10195, 335, 910, 284, 2627, 3297, 327, 1183, 1577, 198, 9629, 827, 31233, 282, 13300, 18555, 637, 99, 216, 33, 37, 32, 32, 28306, 1806, 359, 281, 451, 910, 3297, 284, 384, 314, 3178, 2500, 288, 325, 624, 2899, 38999, 1673, 2736, 1450, 303, 146, 246, 1595, 89, 722, 260, 7623, 3151, 2309, 411, 260, 910, 288, 803, 22857, 2627, 2161, 670, 347, 5070, 5289, 9416, 1673, 7271, 5908, 6623, 338, 3297, 476, 357, 314, 5485, 338, 17566, 18555, 314, 1730, 288, 722, 588, 29331, 47223, 253, 910, 281, 588, 1782, 253, 5710, 476, 1673, 198, 198, 45, 446, 27024, 446, 446, 198, 198, 5449, 288, 260, 31148, 46213, 28962, 3297, 13300, 18555, 637, 99, 11657, 359, 2500, 411, 800, 6546, 12815, 288, 325, 1486, 260, 6250, 282, 511, 655, 3297, 284, 357, 2496, 476, 650, 10395, 3297, 17902, 1789, 2022, 722, 282, 511, 260, 1349, 320, 791, 690, 38917, 282, 253, 8715, 284, 282, 511, 260, 464, 258, 780, 31424, 282, 260, 1212, 2229, 3297, 7936, 338, 787, 8483, 416, 2042, 7363, 1673, 476, 198, 788, 650, 9569, 284, 4654, 1695, 650, 2112, 3297, 13300, 18555, 436, 441, 6899, 16003, 1673, 533, 599, 451, 416, 325, 10866, 288, 650, 30690, 284, 5764, 10441, 3297, 634, 282, 527, 359, 1361, 476, 2500, 4843, 26987, 284, 26393, 411, 4097, 12815, 1673, 476, 1385, 359, 1443, 3912, 8666, 288, 1272, 1841, 805, 20654, 11515, 429, 2976, 6578, 1841, 284, 623, 5125, 1272, 281, 2656, 282, 17417, 3297, 564, 441, 347, 253, 1280, 5927, 282, 21174, 355, 5842, 16378, 1673, 13300, 18555, 314, 597, 12293, 6610, 281, 3912, 17737, 2962, 282, 7900, 1673, 198, 4460, 3297, 347, 12524, 4658, 3297, 384, 476, 314, 260, 805, 4097, 5720, 3449, 3200, 6679, 351, 655, 476, 3297, 284, 650, 1806, 2585, 288, 2081, 281, 9338, 281, 260, 25784, 2070, 1673, 7049, 2731, 6623, 2422, 429, 389, 2554, 3479, 40196, 3297, 617, 24145, 260, 5842, 26404, 282, 634, 282, 13300, 18555, 637, 99, 1806, 365, 3551, 384, 983, 623, 281, 805, 253, 1165, 10236, 282, 260, 11515, 2481, 3297, 284, 429, 12063, 25333, 3297, 617, 4150, 253, 3800, 19325, 13300, 18555, 284, 9679, 389, 2554, 335, 13495, 9941, 429, 5926, 1135, 1523, 601, 1673, 5148, 623, 6578, 4342, 260, 3200, 282, 13300, 18555, 281, 480, 1038, 21174, 746, 1673, 1428, 260, 3616, 282, 260, 216, 33, 32, 373, 2070, 3297, 34038, 13127, 36112, 8020, 260, 808, 30573, 282, 650, 338, 2823, 31039, 281, 334, 485, 9819, 1673, 198, 1589, 436, 281, 260, 216, 33, 33, 373, 2070, 3297, 981, 260, 7453, 15227, 5741, 338, 13300, 18555, 637, 99, 9748, 5388, 624, 8056, 1673, 533, 451, 1657, 253, 5920, 298, 3394, 29, 48, 6523, 282, 3685, 15583, 2637, 1379, 3297, 281, 527, 17313, 34038, 3297, 9679, 389, 2554, 284, 13300, 18555, 2422, 288, 325, 9388, 347, 7834, 7827, 260, 11979, 3297, 422, 7006, 363, 284, 46712, 20886, 282, 4097, 2517, 1673, 1814, 260, 1142, 655, 3297, 260, 1421, 282, 30022, 3394, 29, 48, 46310, 23612, 338, 13300, 18555, 3297, 347, 624, 21174, 12203, 280, 3297, 10559, 260, 15133, 2548, 1673, 2746, 23607, 24715, 6803, 451, 10115, 645, 384, 4150, 338, 13300, 18555, 436, 476, 46865, 5211, 4563, 975, 4563, 738, 511, 650, 15501, 774, 6108, 3297, 384, 2093, 327, 260, 1898, 282, 253, 6960, 28349, 650, 18530, 476, 1673, 2736, 3200, 436, 4573, 411, 650, 2470, 288, 27300, 6096, 43795, 1577, 2356, 36165, 592, 12779, 411, 650, 14624, 288, 260, 3251, 1686, 3297, 979, 2356, 18604, 17273, 650, 1982, 327, 260, 3183, 1673, 22743, 36165, 856, 1492, 288, 650, 5289, 16423, 3297, 979, 6546, 18604, 592, 6504, 411, 650, 10441, 1673, 4311, 260, 9436, 282, 260, 4228, 637, 99, 5261, 282, 3275, 3297, 13300, 18555, 637, 99, 14624, 288, 260, 1215, 284, 1982, 327, 260, 3183, 457, 719, 13487, 347, 25780, 18726, 284, 23116, 3297, 284, 384, 553, 719, 24145, 327, 650, 722, 282, 2232, 3297, 476, 701, 637, 99, 1789, 476, 1673, 198, 34204, 18555, 637, 99, 9338, 6679, 288, 715, 354, 5815, 338, 357, 314, 347, 1759, 288, 2621, 650, 3200, 347, 338, 282, 12081, 281, 3996, 1577, 357, 436, 1759, 327, 750, 4097, 5720, 441, 288, 325, 7220, 411, 1272, 1673, 2445, 665, 436, 2093, 1372, 13300, 18555, 3297, 1212, 15583, 3922, 281, 260, 5174, 282, 1678, 3260, 282, 650, 746, 1577, 389, 2554, 3479, 40196, 637, 99, 1982, 327, 260, 3183, 3297, 12196, 1206, 637, 99, 32033, 3297, 284, 46052, 36379, 406, 795, 637, 99, 19695, 335, 260, 14498, 22812, 359, 253, 1443, 3480, 1673, 2783, 16943, 3297, 13300, 18555, 637, 99, 746, 281, 14702, 260, 303, 146, 246, 1595, 89, 429, 5070, 2229, 1238, 618, 476, 253, 5756, 327, 3199, 21174, 15853, 524, 476, 932, 260, 3632, 327, 897, 7243, 6535, 281, 260, 10265, 1673, 198, 788, 260, 216, 34, 32, 373, 2070, 3297, 384, 436, 260, 20334, 5720, 282, 30285, 44917, 291, 373, 3297, 617, 553, 3873, 1272, 347, 476, 260, 6250, 1603, 3394, 29, 48, 14035, 3297, 1603, 3394, 29, 48, 9184, 5720, 617, 553, 11663, 281, 750, 1789, 476, 3297, 284, 23028, 338, 3297, 476, 384, 553, 1135, 549, 253, 1365, 555, 3297, 347, 253, 5842, 7997, 284, 347, 253, 45322, 11703, 476, 1673, 198, 198, 45, 446, 446, 27024, 335, 4931, 3657, 446, 446, 446, 198, 198, 34204, 18555, 637, 99, 7900, 553, 1135, 253, 7156, 1645, 335, 4931, 3657, 3297, 2117, 335, 260, 3657, 429, 260, 14099, 398, 26347, 1657, 284, 335, 5376, 284, 15583, 281, 260, 45152, 1657, 3297, 1285, 34006, 35455, 40434, 15037, 3297, 260, 1035, 6250, 282, 511, 421, 30614, 15583, 1673, 3742, 281, 2148, 4931, 3297, 260, 2115, 10757, 282, 21736, 365, 25792, 119, 119, 179, 219, 240, 3297, 443, 769, 89, 2481, 314, 5199, 25020, 351, 13300, 18555, 1673, 198, 21535, 260, 216, 33, 35, 373, 2070, 3297, 260, 4931, 8996, 389, 2554, 3479, 40196, 2120, 511, 15583, 284, 665, 592, 1443, 8666, 288, 13300, 18555, 3297, 3551, 650, 3200, 416, 325, 2269, 281, 634, 501, 487, 6004, 365, 476, 4097, 7900, 1135, 411, 4931, 15583, 476, 2481, 17737, 2962, 715, 347, 389, 5131, 81, 1541, 18278, 257, 621, 18278, 281, 260, 216, 41, 373, 2070, 1673, 378, 808, 7703, 4931, 3148, 1508, 282, 13300, 18555, 637, 99, 7900, 436, 45036, 276, 1541, 609, 94, 365, 216, 33, 34, 39, 40, 816, 216, 33, 35, 36, 38, 2481, 3297, 253, 428, 254, 106, 2554, 24933, 23155, 284, 582, 282, 260, 768, 7411, 3803, 282, 260, 3657, 282, 260, 13696, 13700, 8544, 384, 3452, 24145, 13300, 18555, 284, 1135, 253, 16468, 335, 634, 11515, 282, 13300, 18555, 429, 260, 4939, 282, 253, 24933, 13274, 281, 5153, 1673, 216, 33, 33, 282, 334, 2554, 88, 2231, 1999, 18278, 1673, 2736, 2222, 678, 18278, 870, 1698, 726, 2862, 8168, 800, 501, 487, 6004, 527, 592, 4763, 6549, 476, 7220, 411, 13300, 18555, 476, 281, 480, 4478, 1813, 1673, 678, 18278, 870, 637, 99, 2222, 452, 311, 15037, 1541, 18278, 1595, 254, 761, 2800, 3890, 351, 260, 5620, 284, 11702, 1873, 14978, 1541, 435, 419, 368, 284, 36067, 13300, 18555, 637, 99, 7900, 281, 260, 25815, 905, 8544, 582, 1194, 442, 5271, 15037, 46203, 41945, 3297, 260, 46756, 28277, 779, 293, 282, 260, 5620, 284, 260, 4919, 5351, 282, 298, 863, 81, 7900, 3297, 3413, 452, 311, 15037, 3297, 476, 9602, 339, 835, 260, 7900, 282, 13300, 18555, 284, 9679, 389, 2554, 9148, 476, 452, 311, 15037, 35818, 288, 15482, 3297, 476, 9230, 585, 346, 536, 457, 2001, 12678, 1673, 2838, 585, 536, 441, 1673, 476, 4311, 965, 3297, 665, 761, 719, 800, 27096, 335, 13300, 18555, 637, 99, 7900, 1062, 281, 24933, 14994, 284, 281, 260, 39643, 2374, 3297, 284, 347, 253, 966, 650, 7900, 436, 1129, 10588, 281, 4931, 3657, 281, 260, 14099, 398, 26347, 1657, 3297, 297, 30, 87, 30, 3297, 12545, 255, 7762, 3297, 253, 2844, 14035, 281, 260, 3008, 216, 33, 36, 373, 2070, 3297, 284, 634, 787, 88, 4566, 715, 347, 7925, 494, 3490, 3297, 40434, 15037, 3297, 284, 1541, 5131, 276, 1673, 198, 6307, 260, 21606, 637, 36791, 5741, 282, 260, 45152, 1657, 365, 216, 33, 38, 34, 36, 816, 216, 33, 38, 36, 35, 2481, 3297, 1541, 16739, 95, 42274, 17864, 365, 30866, 220, 130, 176, 220, 128, 2481, 282, 260, 28993, 18932, 637, 99, 37327, 37190, 335, 13300, 18555, 637, 99, 450, 146, 246, 1595, 89, 365, 17097, 247, 246, 29157, 229, 44846, 224, 37249, 113, 3297, 7394, 46051, 1541, 1873, 91, 2554, 2481, 436, 13254, 618, 3085, 3297, 284, 357, 6233, 21110, 9338, 281, 46712, 5376, 284, 410, 15037, 94, 254, 365, 3102, 7567, 661, 2481, 1128, 1673, 378, 16468, 3251, 13300, 18555, 637, 99, 19084, 347, 260, 4919, 282, 511, 15583, 8544, 327, 2648, 3297, 13030, 19515, 1541, 10082, 2554, 3297, 253, 7703, 46712, 14461, 3297, 23028, 281, 5153, 1673, 216, 35, 39, 282, 452, 1287, 15037, 23366, 1595, 18278, 338, 1777, 146, 234, 93, 143, 245, 89, 933, 13300, 18555, 6329, 436, 260, 1035, 1450, 5720, 281, 1463, 284, 24145, 1541, 16739, 95, 42274, 17864, 637, 99, 16468, 327, 624, 16948, 284, 36807, 3297, 979, 384, 20053, 1573, 34812, 981, 260, 38047, 18932, 592, 1147, 4377, 45950, 515, 1673, 34006, 35455, 40434, 15037, 3297, 260, 6250, 421, 30614, 5720, 3297, 436, 597, 7757, 7220, 411, 13300, 18555, 8544, 281, 16765, 101, 787, 41528, 300, 24597, 3297, 650, 21720, 3297, 384, 27725, 260, 808, 827, 3204, 282, 330, 11652, 10254, 365, 17097, 242, 115, 14483, 245, 2481, 1092, 253, 421, 30614, 347, 624, 5887, 284, 597, 800, 282, 650, 550, 421, 30614, 457, 1887, 32778, 284, 5535, 1673, 657, 314, 1137, 338, 645, 384, 4242, 281, 13956, 10339, 981, 253, 986, 2827, 3297, 253, 3784, 282, 13300, 18555, 637, 99, 7900, 436, 983, 351, 1272, 347, 582, 282, 253, 1443, 9764, 3723, 527, 384, 436, 1730, 288, 3631, 1130, 1673, 198, 198, 45, 446, 27292, 446, 446, 198, 198, 49, 3175, 282, 6825, 457, 719, 804, 281, 3016, 288, 13477, 13300, 18555, 637, 99, 746, 618, 2321, 1673, 1032, 41134, 21632, 20634, 281, 378, 29689, 37683, 282, 13300, 18555, 3297, 476, 1385, 359, 800, 896, 1853, 288, 2424, 260, 1828, 2773, 281, 25436, 13300, 18555, 3297, 527, 314, 1701, 392, 737, 347, 800, 896, 18189, 347, 1636, 476, 365, 273, 30, 1792, 3951, 89, 2481, 1673, 378, 36611, 457, 761, 288, 22747, 351, 7611, 578, 260, 5764, 10195, 282, 260, 2798, 1355, 29851, 1587, 8942, 288, 253, 4641, 6923, 365, 2755, 645, 25436, 14563, 12168, 3297, 355, 303, 146, 246, 1595, 89, 2481, 3297, 284, 39028, 260, 1784, 511, 15815, 7439, 2755, 281, 260, 1916, 1806, 365, 7271, 5908, 9095, 338, 476, 650, 11515, 536, 441, 347, 253, 3938, 1690, 738, 1035, 876, 281, 8483, 476, 1841, 273, 30, 42842, 2481, 1673, 1963, 5532, 335, 971, 2843, 314, 6610, 411, 30285, 44917, 291, 373, 637, 99, 1963, 25598, 37683, 3300, 260, 4097, 1673, 2736, 359, 1904, 18189, 3297, 527, 4811, 288, 30833, 260, 7623, 3151, 738, 21549, 332, 1425, 358, 284, 7222, 284, 20662, 282, 260, 2627, 8544, 650, 5928, 288, 260, 511, 15815, 359, 38649, 288, 33219, 768, 282, 623, 11515, 429, 650, 5719, 3297, 284, 40381, 288, 476, 13477, 578, 476, 260, 8666, 281, 967, 1806, 527, 384, 1072, 2702, 1673, 198, 6937, 36611, 457, 4294, 1083, 2852, 2613, 335, 3396, 288, 7218, 253, 2588, 282, 260, 21174, 2717, 804, 411, 13300, 18555, 1673, 24753, 814, 40670, 281, 8696, 4097, 8394, 1175, 2925, 2321, 3394, 29, 48, 3997, 24654, 13730, 3297, 6570, 28833, 8278, 95, 494, 281, 45088, 260, 8872, 4031, 21597, 260, 4097, 24654, 9992, 8544, 1062, 722, 1112, 3394, 29, 48, 8976, 3204, 284, 7347, 634, 3815, 282, 48357, 1673, 533, 378, 29689, 37683, 282, 13300, 18555, 3297, 41134, 21632, 5558, 260, 7623, 3151, 3100, 13667, 3297, 9977, 8200, 260, 6378, 6291, 288, 2930, 288, 260, 11515, 2161, 670, 12010, 20638, 1673, 6181, 3297, 384, 10711, 351, 260, 511, 3919, 282, 260, 1916, 1806, 411, 9301, 19620, 8483, 351, 6656, 28139, 1673, 198, 788, 216, 34, 32, 33, 37, 3297, 12502, 29140, 2587, 18189, 3297, 351, 6371, 4097, 5604, 3297, 282, 260, 2994, 7900, 282, 13300, 18555, 281, 2976, 11964, 3297, 351, 6656, 14747, 18446, 3297, 527, 14198, 19620, 924, 1673, 1116, 198, 45, 39653, 1206, 365, 1963, 45212, 4956, 2481, 446, 198, 198, 18, 39653, 1206, 476, 314, 253, 4956, 5797, 411, 2321, 3394, 29, 48, 8335, 7706, 5975, 1963, 45212, 327, 480, 1796, 18373, 21613, 3297, 7285, 2867, 7172, 365, 216, 34, 32, 33, 34, 2481, 1673, 657, 436, 5118, 347, 260, 2004, 637, 99, 1796, 2244, 281, 4521, 284, 260, 3464, 3043, 2244, 335, 216, 39, 4450, 216, 34, 32, 33, 35, 1673, 378, 4956, 436, 8168, 411, 28242, 45701, 426, 39010, 4260, 3297, 28242, 697, 36020, 254, 3297, 1065, 7089, 442, 277, 2347, 3297, 12404, 276, 659, 1520, 14884, 3297, 26521, 2676, 284, 624, 11009, 3297, 9914, 36317, 284, 428, 8119, 718, 387, 13627, 1673, 476, 39653, 1206, 476, 314, 354, 614, 15727, 1149, 1139, 4956, 351, 6318, 2165, 8544, 260, 21439, 2202, 253, 19447, 637, 99, 834, 261, 6584, 351, 253, 1546, 550, 1673, 30345, 24145, 260, 4956, 327, 624, 2262, 3297, 8743, 357, 253, 1481, 3394, 29, 48, 578, 4320, 335, 7285, 2867, 7172, 1673, 198, 504, 4320, 2163, 260, 1528, 637, 99, 15708, 1466, 3394, 29, 48, 3772, 5380, 281, 7597, 284, 260, 1797, 8378, 3297, 979, 35549, 1466, 3394, 29, 48, 14510, 6115, 281, 1062, 28031, 10643, 365, 45191, 284, 8990, 7409, 2481, 3297, 347, 876, 347, 281, 4617, 3297, 4004, 3297, 15644, 3297, 4649, 3297, 1315, 8573, 3297, 284, 260, 12256, 1673, 378, 2244, 38237, 418, 1230, 216, 36, 38, 335, 260, 2038, 8593, 4265, 12399, 216, 33, 32, 32, 284, 553, 719, 14348, 4231, 411, 260, 44427, 15004, 4846, 282, 2493, 365, 45986, 6676, 2481, 327, 42149, 282, 216, 37, 32, 32, 3394, 28, 48, 216, 32, 32, 32, 10017, 1673, 1963, 45212, 4940, 476, 39653, 1206, 476, 335, 1062, 260, 4664, 284, 2038, 8096, 282, 378, 2273, 25610, 284, 216, 35, 1739, 12154, 18366, 1577, 7285, 2867, 7172, 14257, 365, 216, 34, 32, 33, 35, 2481, 3297, 7655, 1046, 4184, 14257, 365, 216, 34, 32, 33, 36, 2481, 284, 1985, 260, 8923, 9490, 14257, 365, 216, 34, 32, 33, 37, 2481, 1673, 198, 2089, 16799, 2477, 3341, 3297, 2724, 288, 3833, 260, 1528, 637, 99, 379, 15092, 11706, 3297, 436, 9067, 411, 43969, 276, 20271, 478, 3297, 617, 761, 5094, 4147, 351, 260, 1528, 335, 827, 550, 2477, 7785, 1673, 378, 16092, 21559, 260, 5975, 14881, 1461, 9561, 3560, 253, 2654, 5078, 3297, 527, 1453, 10009, 23248, 282, 13329, 2477, 7785, 282, 8786, 715, 347, 260, 15491, 27735, 637, 476, 4630, 2344, 22925, 476, 3297, 3906, 3966, 3238, 2292, 637, 99, 476, 530, 636, 4404, 8977, 476, 284, 428, 2078, 9924, 637, 99, 476, 2867, 254, 6928, 476, 1673, 378, 2477, 3341, 3656, 216, 33, 32, 3394, 30, 48, 216, 36, 2215, 5542, 281, 253, 216, 34, 36, 3394, 29, 48, 5353, 1657, 284, 2731, 16468, 429, 18424, 3297, 617, 16003, 624, 1176, 5725, 3297, 544, 611, 34458, 2177, 1673, 198, 504, 4956, 436, 3249, 281, 260, 14452, 3133, 3305, 22053, 216, 34, 32, 33, 36, 3297, 284, 314, 597, 582, 282, 260, 2702, 8786, 1770, 335, 260, 33730, 3586, 1673, 4454, 3297, 357, 314, 260, 3403, 1085, 4320, 335, 260, 2038, 8638, 282, 3569, 1848, 637, 99, 1812, 339, 9472, 9778, 5728, 216, 36, 38, 1673, 198, 198, 45, 446, 20744, 284, 4706, 446, 446, 198, 198, 18, 39653, 1206, 476, 436, 2855, 411, 28242, 45701, 426, 39010, 4260, 3297, 28242, 697, 36020, 254, 3297, 1065, 7089, 442, 277, 2347, 3297, 12404, 276, 659, 1520, 14884, 3297, 26521, 2676, 3297, 284, 624, 11009, 3297, 9914, 36317, 284, 428, 8119, 718, 387, 13627, 1673, 36317, 3297, 659, 1520, 14884, 3297, 284, 718, 387, 13627, 761, 27443, 8168, 1963, 45212, 637, 99, 2672, 5380, 1900, 735, 3297, 476, 1812, 26504, 1206, 25805, 476, 3297, 476, 1963, 38551, 476, 3297, 284, 476, 16829, 2445, 1046, 637, 257, 8124, 476, 1673, 533, 4124, 216, 34, 32, 33, 34, 3297, 378, 18994, 3213, 338, 15399, 21679, 478, 3297, 260, 1528, 637, 99, 8864, 3297, 761, 12594, 7411, 4956, 35341, 288, 13384, 327, 1898, 335, 1963, 45212, 637, 99, 1796, 21613, 1673, 36317, 1137, 3297, 476, 657, 637, 99, 1070, 288, 820, 480, 19366, 335, 260, 2477, 1673, 476, 533, 1706, 3297, 260, 2524, 3213, 338, 5224, 1881, 17330, 436, 1891, 335, 9266, 338, 3249, 7625, 8478, 284, 36020, 254, 1673, 198, 18, 39653, 1206, 476, 436, 5958, 347, 260, 1796, 2038, 2244, 284, 3464, 3113, 429, 480, 1796, 18373, 21613, 3297, 7285, 2867, 7172, 1673, 9679, 332, 47428, 3297, 253, 1528, 4028, 3297, 281, 253, 4745, 216, 34, 32, 33, 34, 5473, 351, 22446, 70, 6231, 3297, 5192, 1701, 502, 8984, 476, 39653, 1206, 476, 347, 260, 21613, 637, 99, 1796, 2244, 281, 260, 2038, 1673, 47428, 436, 16302, 347, 4976, 1577, 476, 1929, 260, 21613, 3297, 338, 637, 99, 260, 808, 582, 338, 392, 17443, 288, 284, 392, 592, 702, 3297, 637, 22096, 3297, 392, 2606, 451, 4956, 637, 476, 1673, 3959, 288, 253, 22446, 70, 6231, 2524, 3297, 260, 1230, 436, 5118, 24900, 281, 260, 1797, 1918, 335, 216, 33, 39, 4745, 216, 34, 32, 33, 34, 1673, 1428, 216, 33, 40, 4450, 216, 34, 32, 33, 35, 3297, 260, 4956, 761, 441, 719, 11574, 13788, 288, 2038, 5171, 8840, 1673, 378, 4320, 3297, 2107, 3297, 436, 5118, 411, 41508, 9778, 39185, 335, 216, 40, 5096, 216, 34, 32, 33, 35, 3297, 347, 260, 2004, 637, 99, 1796, 2244, 281, 4521, 1673, 198, 198, 45, 446, 30189, 284, 20629, 446, 446, 198, 198, 18, 39653, 1206, 476, 314, 354, 16035, 391, 11835, 3297, 614, 15727, 1149, 1139, 4956, 527, 7313, 327, 253, 8687, 282, 216, 35, 1577, 216, 32, 36, 365, 216, 35, 3487, 3297, 1876, 7345, 2481, 1673, 378, 4320, 3004, 6318, 2165, 3297, 35915, 29363, 3297, 253, 476, 15486, 15486, 15486, 476, 14486, 3297, 284, 253, 10300, 845, 3394, 29, 48, 252, 274, 277, 23439, 1673, 1963, 45212, 637, 99, 13088, 1845, 281, 260, 4956, 9108, 429, 260, 4109, 282, 414, 36, 288, 340, 35712, 124, 216, 38, 1673, 21889, 8585, 2978, 15987, 12345, 3297, 15717, 3204, 284, 18325, 781, 1673, 25012, 281, 260, 1646, 282, 414, 1739, 3297, 260, 9713, 314, 932, 281, 1273, 655, 284, 7488, 418, 253, 2365, 216, 41, 32, 20849, 567, 8427, 3297, 2289, 288, 260, 3182, 7381, 2477, 2587, 418, 9778, 19359, 30, 824, 411, 41508, 2272, 11133, 70, 9778, 14336, 1673, 17775, 3297, 21169, 11020, 280, 429, 2018, 33764, 5332, 338, 260, 4320, 314, 476, 37428, 11624, 5557, 476, 1673, 378, 48566, 2627, 15472, 260, 19447, 637, 99, 834, 261, 6584, 351, 253, 1546, 550, 3297, 284, 18103, 297, 1110, 1676, 3151, 327, 4287, 25110, 281, 260, 3204, 476, 1094, 346, 1326, 16107, 252, 267, 13506, 1188, 357, 2890, 2272, 1350, 346, 915, 267, 13506, 1188, 549, 1478, 2272, 20428, 1643, 40782, 3297, 40782, 3297, 40782, 3297, 40782, 3297, 40782, 1673, 476, 198, 18, 39653, 1206, 476, 436, 876, 3656, 411, 3912, 2477, 12815, 3297, 617, 41850, 335, 624, 2174, 282, 2262, 1673, 5148, 45600, 12662, 637, 99, 12711, 27288, 276, 3297, 617, 24145, 624, 7634, 3297, 284, 18452, 47428, 282, 8593, 4265, 3297, 617, 16003, 260, 23439, 3297, 3873, 476, 39653, 1206, 476, 347, 582, 282, 260, 21613, 637, 99, 9041, 1673, 5325, 271, 9133, 4298, 271, 327, 378, 22316, 600, 1753, 260, 4320, 637, 99, 32777, 347, 476, 1759, 288, 37866, 14275, 429, 469, 2106, 476, 1673, 6356, 13227, 7450, 282, 9116, 41042, 5332, 260, 4956, 637, 99, 6717, 288, 1438, 354, 3113, 5380, 3297, 42660, 274, 357, 4132, 947, 1673, 330, 20733, 327, 22446, 70, 6231, 3873, 260, 4320, 637, 99, 43068, 918, 347, 476, 16968, 3394, 29, 48, 32946, 476, 3297, 284, 5457, 450, 487, 3740, 282, 13061, 308, 1508, 4150, 338, 476, 39653, 1206, 476, 314, 43736, 253, 1481, 3394, 29, 48, 578, 4320, 335, 624, 1958, 21613, 1673, 8385, 26114, 32335, 3297, 2385, 327, 11328, 54, 1088, 3297, 9388, 260, 4956, 347, 476, 253, 278, 1353, 873, 3297, 6318, 11098, 287, 269, 866, 3297, 476, 979, 18452, 1206, 27375, 3297, 253, 6112, 429, 216, 36, 26446, 3297, 14100, 357, 354, 476, 5485, 1139, 4956, 476, 3297, 2618, 25604, 260, 1528, 637, 99, 23979, 305, 1141, 284, 624, 476, 1680, 3394, 29, 48, 278, 4257, 354, 1195, 6257, 476, 32777, 1673, 198, 198, 45, 446, 22802, 2851, 446, 446, 198, 198, 504, 2244, 1135, 624, 8335, 7575, 735, 22448, 34053, 418, 1230, 216, 34, 36, 335, 260, 2605, 10808, 216, 33, 35, 4645, 216, 34, 32, 33, 34, 1673, 657, 38237, 418, 1230, 4962, 335, 260, 2605, 10808, 216, 33, 39, 4450, 216, 34, 32, 33, 35, 3297, 15835, 480, 15708, 1466, 3772, 5796, 281, 7597, 1673, 476, 39653, 1206, 476, 7999, 418, 1230, 216, 33, 37, 34, 281, 260, 4664, 7575, 735, 22448, 335, 216, 34, 36, 4745, 216, 34, 32, 33, 34, 1673, 657, 38237, 418, 1230, 7462, 335, 260, 4664, 7575, 735, 22448, 335, 216, 34, 38, 4450, 216, 34, 32, 33, 35, 3297, 4295, 1963, 45212, 637, 99, 15708, 1466, 3772, 5380, 281, 260, 1797, 8378, 1673, 1985, 260, 2605, 10808, 216, 33, 40, 4745, 216, 34, 32, 33, 34, 3297, 476, 39653, 1206, 476, 2802, 5287, 418, 1230, 216, 41, 32, 335, 260, 1797, 1918, 8593, 4265, 12399, 216, 33, 32, 32, 1568, 288, 3182, 6097, 7122, 429, 624, 1958, 21613, 1673, 1032, 253, 966, 282, 354, 476, 1112, 3394, 29, 48, 282, 3394, 29, 48, 713, 6097, 17169, 476, 335, 260, 2605, 10808, 216, 35, 32, 4645, 216, 34, 32, 33, 34, 3297, 260, 4320, 298, 3394, 29, 48, 7999, 260, 12399, 216, 33, 32, 32, 418, 1230, 216, 40, 35, 1673, 2550, 260, 16799, 2477, 3341, 436, 5118, 3297, 260, 4956, 298, 3394, 29, 48, 7999, 260, 12399, 216, 33, 32, 32, 418, 1230, 216, 38, 37, 1673, 476, 39653, 1206, 476, 761, 3459, 216, 34, 32, 39, 3394, 28, 48, 216, 32, 32, 32, 3182, 34171, 281, 260, 2038, 411, 216, 33, 40, 4450, 216, 34, 32, 33, 35, 1673, 378, 2244, 5354, 38237, 418, 1230, 216, 36, 38, 335, 260, 12399, 216, 33, 32, 32, 284, 436, 14348, 4231, 411, 260, 44427, 15004, 4846, 282, 2493, 365, 45986, 6676, 2481, 335, 216, 34, 37, 4124, 216, 34, 32, 33, 35, 3297, 44251, 42149, 282, 216, 37, 32, 32, 3394, 28, 48, 216, 32, 32, 32, 10017, 1673, 198, 504, 4956, 2163, 1963, 45212, 637, 99, 8629, 1466, 3394, 29, 48, 14510, 5380, 335, 260, 6805, 12399, 216, 33, 32, 32, 3297, 610, 894, 418, 1230, 216, 35, 32, 1673, 378, 2244, 5760, 277, 418, 1230, 216, 33, 35, 335, 260, 6948, 7575, 735, 22448, 335, 216, 34, 39, 4450, 216, 34, 32, 33, 35, 3297, 15835, 624, 8056, 2548, 284, 260, 1528, 637, 99, 8629, 1466, 7522, 5380, 281, 4617, 1673, 378, 4956, 553, 719, 14348, 33792, 411, 260, 6948, 44427, 15004, 4846, 365, 330, 5135, 49, 2481, 327, 42149, 282, 216, 39, 32, 3394, 28, 48, 216, 32, 32, 32, 10017, 1673, 378, 4320, 7999, 260, 1315, 8573, 7575, 735, 22448, 418, 1230, 216, 33, 39, 335, 216, 33, 33, 4450, 216, 34, 32, 33, 35, 1673, 657, 38237, 418, 1230, 216, 33, 35, 281, 624, 3464, 284, 8629, 6473, 274, 3737, 3297, 633, 300, 254, 88, 260, 1528, 637, 99, 15708, 1466, 3394, 29, 48, 14510, 5796, 281, 1315, 8573, 1673, 476, 39653, 1206, 476, 553, 3656, 253, 4231, 14438, 429, 260, 44427, 15004, 4846, 282, 1315, 8573, 365, 428, 43700, 74, 2481, 3297, 10487, 7122, 282, 216, 39, 3394, 28, 48, 216, 37, 32, 32, 10017, 1673, 378, 4320, 597, 5388, 260, 1466, 216, 36, 32, 281, 1062, 28031, 10643, 365, 45191, 284, 8990, 7409, 2481, 3297, 347, 876, 347, 281, 260, 15633, 5261, 3297, 15644, 3297, 4649, 3297, 260, 12256, 3297, 284, 2582, 9096, 1673, 533, 1706, 3297, 476, 39653, 1206, 476, 3656, 4231, 32410, 429, 260, 339, 14528, 57, 14197, 284, 15644, 11714, 3297, 40294, 6675, 42149, 282, 216, 34, 32, 3394, 28, 48, 216, 32, 32, 32, 4784, 1673, 198, 198, 45, 446, 9778, 3341, 446, 446, 198, 198, 504, 16799, 2477, 3341, 3297, 9067, 411, 43969, 276, 20271, 478, 3297, 617, 761, 5094, 9067, 1963, 45212, 637, 99, 2477, 7785, 327, 476, 16829, 2445, 1046, 637, 257, 8124, 476, 284, 476, 8728, 13679, 476, 3297, 436, 2724, 288, 15544, 260, 1528, 637, 99, 379, 15092, 11706, 1673, 28416, 411, 260, 15491, 27735, 3297, 1202, 37889, 9411, 3297, 1573, 21574, 3297, 284, 2938, 23677, 3297, 260, 2477, 3341, 18103, 476, 253, 939, 286, 33395, 386, 34909, 284, 253, 2938, 1942, 282, 7963, 96, 476, 3297, 347, 5332, 411, 20271, 478, 281, 253, 22446, 70, 6231, 5473, 1673, 198, 4370, 320, 411, 4745, 216, 34, 32, 33, 34, 3297, 260, 2477, 3341, 436, 28832, 3297, 281, 1545, 22446, 70, 6231, 11065, 3297, 347, 476, 7882, 670, 3534, 392, 637, 307, 2294, 1092, 476, 411, 1777, 341, 94, 5149, 1873, 3297, 347, 476, 253, 2341, 282, 1759, 746, 476, 411, 47428, 3297, 347, 476, 6324, 20802, 7358, 476, 411, 6912, 8581, 92, 8267, 3297, 284, 347, 476, 339, 7336, 637, 100, 1643, 933, 357, 637, 99, 6329, 23399, 3297, 357, 637, 99, 511, 10663, 3394, 29, 48, 281, 3394, 29, 48, 31254, 476, 411, 20271, 478, 1673, 21125, 89, 1136, 4969, 335, 717, 3345, 95, 335, 216, 39, 4450, 216, 34, 32, 33, 35, 3297, 260, 2477, 3341, 21559, 260, 5975, 14881, 896, 9561, 3560, 253, 2654, 5078, 3297, 18180, 347, 22088, 3297, 17057, 366, 3297, 1011, 3653, 284, 20759, 366, 1673, 378, 3341, 3004, 9561, 23248, 282, 260, 9411, 2582, 6125, 3297, 1626, 42000, 253, 525, 3234, 3297, 530, 636, 4404, 8977, 284, 15491, 43173, 305, 389, 30642, 3297, 347, 876, 347, 260, 13329, 2477, 7785, 282, 8786, 715, 347, 378, 15491, 27735, 637, 476, 4630, 2344, 22925, 476, 3297, 3906, 3966, 3238, 2292, 637, 99, 476, 10062, 14126, 476, 284, 428, 2078, 9924, 637, 99, 476, 2867, 254, 6928, 476, 3297, 1486, 1449, 1673, 198, 504, 2477, 3341, 34699, 216, 33, 32, 3394, 30, 48, 216, 36, 2215, 5542, 281, 253, 216, 34, 36, 3394, 29, 48, 5353, 1657, 3297, 14586, 288, 12351, 260, 717, 3345, 95, 2004, 3408, 411, 34382, 389, 519, 593, 637, 99, 476, 30583, 284, 253, 22186, 476, 2477, 3341, 365, 216, 33, 32, 3394, 30, 48, 216, 38, 2215, 2481, 1673, 6372, 253, 216, 35, 36, 2471, 3184, 281, 11438, 2313, 288, 480, 717, 3345, 95, 7279, 3297, 351, 260, 16092, 637, 99, 1624, 284, 18393, 543, 6589, 7785, 16558, 216, 35, 40, 2215, 5542, 981, 260, 2605, 3297, 1963, 45212, 3408, 418, 1230, 827, 335, 260, 8593, 4265, 637, 99, 4758, 216, 37, 32, 6473, 330, 216, 33, 37, 2471, 4095, 281, 9252, 5303, 4502, 970, 288, 253, 216, 33, 37, 36, 3394, 28, 48, 216, 32, 32, 32, 2081, 281, 9252, 15044, 981, 260, 2605, 1673, 216, 33, 41, 33, 3394, 28, 48, 216, 32, 32, 32, 11592, 12381, 3235, 7844, 288, 480, 3043, 10136, 3159, 2081, 347, 876, 1673, 198, 26000, 26114, 32335, 3297, 253, 21804, 327, 11328, 54, 1088, 3297, 36157, 260, 16092, 347, 1953, 476, 3117, 253, 3341, 411, 253, 7706, 5975, 868, 325, 476, 284, 983, 1528, 637, 99, 42360, 9238, 18260, 1673, 31584, 5733, 368, 85, 282, 414, 5728, 8646, 24145, 624, 476, 18772, 28402, 105, 284, 26963, 39166, 476, 10009, 3297, 284, 22446, 70, 6231, 637, 99, 530, 406, 572, 94, 717, 6743, 3873, 260, 16092, 347, 476, 42114, 1573, 21574, 476, 1673, 43798, 678, 524, 3297, 2385, 327, 42693, 34, 269, 3297, 436, 14058, 338, 1980, 7956, 260, 476, 39166, 476, 2477, 3341, 3297, 260, 19761, 868, 457, 253, 1759, 655, 510, 1418, 644, 260, 1528, 1673, 35417, 6172, 7817, 3297, 260, 6112, 327, 10677, 11900, 7790, 3297, 600, 1753, 260, 1528, 327, 476, 1953, 253, 21760, 1109, 655, 476, 3297, 2161, 670, 2045, 738, 260, 19975, 1673, 198, 198, 45, 446, 16829, 13171, 446, 446, 198, 198, 1653, 599, 282, 624, 13246, 3297, 1963, 45212, 4940, 260, 4956, 335, 4462, 14405, 13894, 284, 981, 480, 4969, 7285, 2867, 7172, 14257, 365, 216, 34, 32, 33, 35, 2481, 1673, 1963, 45212, 4940, 260, 4320, 335, 378, 4104, 11890, 418, 260, 34707, 3644, 335, 216, 33, 35, 4745, 216, 34, 32, 33, 34, 3297, 288, 253, 2004, 13347, 5183, 418, 216, 33, 37, 3394, 28, 48, 216, 32, 32, 32, 1673, 476, 39653, 1206, 476, 436, 3249, 281, 260, 932, 1398, 282, 260, 1528, 637, 99, 216, 35, 4645, 216, 34, 32, 33, 34, 3459, 3394, 29, 48, 578, 1138, 418, 1315, 2863, 4206, 637, 99, 19803, 16331, 11273, 1673, 1963, 45212, 8753, 253, 2851, 282, 476, 39653, 1206, 476, 3297, 281, 3433, 282, 253, 3341, 3133, 3394, 29, 48, 39727, 932, 3297, 335, 260, 3403, 282, 260, 25784, 3086, 282, 378, 2273, 25610, 4664, 335, 216, 33, 32, 4645, 216, 34, 32, 33, 34, 1673, 3959, 288, 260, 13001, 23767, 3297, 480, 476, 18774, 11630, 570, 476, 282, 476, 39653, 1206, 476, 8271, 338, 260, 1528, 457, 354, 20650, 2174, 1673, 1985, 216, 33, 34, 4645, 216, 34, 32, 33, 34, 3297, 260, 1528, 597, 4940, 260, 1230, 335, 260, 3403, 282, 260, 1796, 3645, 282, 378, 2273, 25610, 7108, 1673, 28688, 1963, 45212, 260, 476, 28315, 637, 99, 7415, 1624, 1977, 476, 3297, 354, 7056, 327, 378, 37703, 12006, 5786, 1158, 1210, 338, 260, 7706, 5975, 637, 99, 7411, 4313, 335, 1062, 260, 2038, 284, 4664, 8096, 282, 378, 2273, 25610, 6745, 15943, 1673, 3349, 805, 7285, 2867, 7172, 14257, 3297, 502, 597, 2851, 281, 7655, 1046, 4184, 14257, 365, 216, 34, 32, 33, 36, 2481, 1456, 1985, 260, 8923, 9490, 14257, 365, 216, 34, 32, 33, 37, 2481, 198, 198, 45, 446, 26960, 15656, 446, 446, 198, 198, 6998, 2244, 198, 18, 39653, 1206, 476, 816, 216, 35, 1577, 216, 32, 36, 198, 18, 8728, 13679, 476, 816, 216, 35, 1577, 216, 36, 34, 198, 198, 45, 446, 32163, 842, 284, 9969, 446, 446, 198, 198, 34098, 36317, 1841, 2385, 3297, 2262, 3297, 6256, 3297, 6907, 3297, 15987, 3297, 3969, 18325, 781, 198, 59, 1640, 45701, 426, 39010, 4260, 1841, 3969, 18325, 781, 198, 62, 409, 92, 9008, 276, 1841, 3171, 15987, 198, 67, 22601, 659, 1520, 14884, 1841, 2385, 3297, 3969, 18325, 781, 198, 59, 1640, 697, 36020, 254, 1841, 2385, 198, 2219, 7089, 442, 277, 2347, 1841, 2385, 3297, 3969, 18325, 781, 198, 32959, 2676, 1841, 2385, 198, 66, 8119, 718, 387, 13627, 1841, 2385, 3297, 2262, 3297, 6256, 3297, 6907, 3297, 17229, 198, 37512, 842, 9309, 429, 7285, 2867, 7172, 637, 99, 38778, 4658, 1673, 198, 198, 45, 446, 678, 12019, 446, 446, 1116, 198, 45, 446, 14546, 5705, 446, 446, 1116, 198, 45, 446, 24600, 1463, 446, 446, 16506, 198, 45, 339, 313, 3394, 29, 48, 1128, 11763, 974, 446, 198, 198, 504, 339, 313, 3394, 29, 48, 1128, 11763, 4452, 365, 216, 29836, 228, 176, 229, 112, 46157, 19805, 116, 179, 227, 116, 3297, 339, 313, 3394, 29, 48, 310, 706, 5896, 24184, 2481, 592, 253, 6455, 282, 21836, 94, 3779, 11763, 4452, 2837, 327, 260, 14811, 4931, 10400, 365, 339, 58, 62, 2481, 981, 2260, 2287, 339, 30, 24084, 5492, 288, 325, 26691, 282, 260, 18393, 42303, 15037, 1128, 3297, 502, 592, 28137, 8539, 1092, 3901, 2585, 1673, 5148, 7761, 4891, 6864, 327, 260, 12977, 282, 260, 3756, 22060, 15037, 11564, 281, 216, 33, 41, 34, 35, 1673, 1069, 592, 2148, 1005, 281, 216, 33, 41, 35, 36, 816, 216, 35, 39, 351, 8209, 288, 480, 38883, 284, 12433, 284, 253, 24026, 2076, 20801, 281, 260, 27891, 18219, 14330, 3997, 1673, 43804, 502, 4944, 253, 4835, 1791, 281, 260, 5665, 334, 3335, 3394, 29, 48, 4931, 2287, 1673, 198, 7758, 260, 6280, 15517, 438, 3297, 1062, 7117, 592, 2500, 24489, 411, 260, 36827, 282, 260, 6125, 2287, 3297, 284, 7795, 3680, 1546, 2353, 281, 260, 1584, 929, 282, 260, 1913, 1673, 11387, 260, 2184, 282, 768, 282, 260, 339, 58, 62, 637, 99, 1507, 6995, 17614, 981, 260, 9420, 282, 10418, 2384, 281, 3921, 3394, 29, 48, 216, 33, 41, 36, 34, 3297, 502, 592, 24026, 351, 253, 6688, 16036, 13195, 260, 13401, 6455, 282, 6341, 6615, 26466, 288, 1928, 601, 260, 2470, 288, 7236, 354, 1512, 1528, 282, 6458, 18496, 1673, 330, 3096, 282, 6995, 284, 11645, 18611, 3297, 2107, 3297, 4972, 338, 502, 2093, 2390, 11548, 480, 6995, 281, 7604, 1673, 2445, 28121, 480, 1512, 1528, 260, 10243, 7761, 592, 2406, 804, 288, 31936, 7207, 284, 1376, 288, 4931, 13021, 1673, 1069, 13492, 281, 260, 9420, 282, 12646, 1471, 81, 22068, 281, 3008, 216, 33, 41, 36, 36, 3297, 837, 502, 988, 922, 277, 260, 1547, 14830, 14954, 5682, 260, 11145, 282, 46450, 676, 2025, 429, 260, 11318, 16351, 1673, 43804, 1062, 7761, 592, 10877, 288, 14373, 5255, 8544, 281, 1584, 216, 33, 41, 36, 37, 502, 13492, 281, 18073, 659, 7416, 3297, 837, 502, 15326, 34962, 284, 550, 8092, 2254, 288, 3085, 1673, 378, 17758, 592, 965, 3954, 288, 13398, 1793, 502, 592, 30283, 981, 1547, 253, 729, 431, 5908, 281, 4185, 1673, 2550, 260, 1913, 502, 592, 16638, 4194, 281, 216, 33, 41, 36, 38, 816, 216, 36, 39, 1673, 198, 198, 45, 446, 20744, 446, 446, 198, 198, 504, 1157, 282, 260, 42303, 15037, 3394, 29, 48, 1128, 11763, 4452, 436, 7957, 1062, 411, 260, 5185, 3113, 14309, 6548, 4677, 284, 253, 6771, 1486, 4931, 14309, 22449, 288, 2125, 253, 14954, 282, 3575, 7761, 3269, 2001, 288, 12721, 260, 1797, 1918, 10400, 281, 354, 7085, 281, 4931, 16187, 5656, 1673, 378, 339, 58, 62, 637, 99, 14954, 282, 11763, 4452, 761, 8220, 3452, 3424, 281, 216, 33, 41, 32, 37, 3297, 260, 1596, 713, 282, 260, 24976, 559, 3394, 29, 48, 4931, 2287, 3297, 527, 35891, 281, 260, 8040, 282, 260, 6103, 5665, 284, 11961, 6125, 29908, 6749, 418, 260, 9420, 282, 17177, 26690, 1673, 198, 788, 260, 20761, 3297, 260, 4931, 7057, 4654, 4642, 624, 1593, 288, 260, 827, 6219, 29046, 327, 11269, 17978, 281, 260, 6125, 7357, 1577, 5679, 284, 260, 1797, 1918, 1673, 8265, 15037, 312, 1175, 316, 280, 15037, 3297, 253, 4931, 10400, 7106, 10524, 284, 3385, 46505, 3297, 35431, 338, 4678, 736, 19784, 8120, 826, 3085, 284, 418, 2124, 582, 282, 624, 827, 1085, 29046, 1673, 1626, 338, 1112, 3297, 384, 1217, 327, 260, 4931, 10400, 288, 2125, 253, 14954, 351, 418, 2124, 216, 39, 32, 2471, 347, 800, 3575, 7761, 347, 260, 2038, 10400, 1673, 669, 6714, 3297, 8265, 15037, 46668, 3297, 736, 5202, 260, 14811, 4931, 10400, 288, 12721, 260, 2038, 10400, 281, 582, 1739, 5182, 281, 4931, 5656, 281, 750, 19820, 4678, 1673, 23184, 3297, 260, 216, 33, 41, 32, 39, 14811, 30115, 8789, 1217, 327, 260, 3901, 282, 253, 5182, 14954, 282, 4475, 2148, 11763, 4452, 3297, 216, 34, 32, 3394, 28, 48, 216, 32, 32, 32, 986, 8274, 365, 216, 34, 32, 3394, 28, 48, 216, 35, 34, 33, 252, 2481, 971, 3297, 284, 4475, 2148, 5026, 8942, 2653, 18359, 3297, 216, 33, 40, 3394, 28, 48, 216, 32, 32, 32, 986, 8274, 365, 216, 33, 40, 3394, 28, 48, 216, 34, 40, 41, 252, 2481, 971, 1673, 669, 436, 260, 40621, 282, 260, 19835, 3394, 29, 48, 19835, 28552, 4999, 3297, 260, 1421, 282, 253, 26906, 5182, 1761, 282, 25635, 3575, 7761, 1673, 198, 504, 7198, 282, 33654, 422, 1040, 94, 3779, 281, 216, 33, 41, 32, 38, 411, 260, 7598, 10400, 5489, 260, 27486, 3297, 284, 6991, 3085, 637, 99, 4406, 1673, 3389, 39202, 216, 33, 39, 3394, 28, 48, 216, 41, 32, 32, 986, 8274, 365, 216, 33, 40, 3394, 28, 48, 216, 34, 32, 32, 252, 2481, 284, 9672, 351, 3772, 216, 33, 34, 3394, 29, 48, 10714, 365, 216, 35, 32, 3394, 30, 48, 216, 37, 5973, 2481, 12466, 3297, 422, 1040, 94, 3779, 16661, 511, 3832, 11763, 4452, 24489, 411, 7107, 1673, 378, 7198, 282, 260, 5182, 43622, 14793, 33654, 6484, 1950, 812, 260, 1695, 713, 436, 253, 2030, 40721, 327, 3085, 637, 99, 1204, 327, 31154, 1673, 1550, 260, 827, 725, 334, 1457, 13613, 3394, 29, 48, 1128, 11763, 4452, 284, 827, 312, 2862, 91, 18144, 3394, 29, 48, 1128, 5026, 8942, 2653, 18359, 3297, 7876, 411, 216, 33, 41, 33, 33, 3297, 592, 578, 2064, 277, 411, 480, 2938, 12346, 3297, 260, 19835, 3394, 29, 48, 19835, 28552, 4999, 436, 26389, 277, 1673, 198, 504, 808, 11763, 4452, 2837, 327, 260, 15021, 19835, 3394, 29, 48, 19835, 28552, 4999, 592, 260, 827, 21836, 94, 671, 849, 282, 260, 36335, 26347, 1128, 3297, 8885, 281, 216, 33, 41, 32, 39, 284, 8259, 1187, 281, 216, 33, 41, 32, 40, 1673, 533, 216, 33, 41, 33, 32, 3297, 260, 10400, 1830, 3703, 253, 3116, 288, 260, 11478, 365, 13236, 2481, 288, 5253, 5580, 327, 260, 28971, 282, 260, 1578, 418, 2268, 1673, 4651, 282, 2536, 10195, 3297, 805, 1876, 5182, 43622, 18359, 284, 253, 2244, 11763, 974, 282, 260, 42303, 15037, 1128, 592, 5354, 8159, 411, 260, 11478, 1673, 8696, 540, 42303, 15037, 3394, 29, 48, 1128, 7761, 365, 25455, 1317, 12337, 3297, 339, 313, 3297, 284, 7925, 18278, 8662, 2481, 592, 8159, 284, 511, 1296, 592, 8885, 281, 4124, 216, 33, 41, 33, 35, 1673, 2445, 25455, 1317, 12337, 436, 8259, 1187, 1916, 338, 713, 3297, 260, 339, 58, 62, 21436, 260, 5580, 288, 7219, 351, 260, 3901, 282, 339, 313, 284, 7925, 18278, 8662, 1793, 260, 11478, 16280, 3171, 5580, 327, 260, 7761, 281, 4185, 216, 33, 41, 33, 36, 1673, 198, 198, 45, 446, 5843, 284, 5410, 446, 446, 198, 198, 504, 2894, 282, 42303, 15037, 637, 99, 3901, 3297, 979, 260, 339, 58, 62, 25693, 327, 260, 5580, 288, 325, 5118, 284, 4359, 7740, 3297, 2952, 260, 339, 58, 62, 288, 42191, 260, 42303, 15037, 3394, 29, 48, 1128, 1157, 1673, 378, 4225, 282, 260, 49104, 4452, 6341, 6615, 26466, 436, 260, 768, 5452, 16298, 347, 502, 6991, 260, 3542, 282, 260, 49104, 4452, 11612, 284, 5451, 540, 282, 260, 5575, 288, 260, 19048, 2165, 282, 260, 12466, 645, 502, 15615, 1673, 5839, 2843, 436, 338, 4931, 22088, 761, 1828, 4719, 253, 904, 2421, 282, 2892, 351, 260, 216, 36, 37, 3394, 30, 48, 216, 35, 38, 3394, 29, 48, 32509, 365, 216, 33, 32, 32, 3394, 30, 48, 216, 32, 22185, 2481, 14866, 804, 281, 260, 16223, 13049, 216, 33, 37, 34, 3394, 29, 48, 1663, 24739, 257, 365, 216, 38, 281, 2481, 6442, 12466, 804, 281, 260, 42303, 15037, 1128, 284, 3685, 6298, 1673, 1626, 10575, 451, 2843, 3297, 260, 339, 58, 62, 2724, 253, 3764, 216, 33, 36, 32, 3394, 29, 48, 1663, 24739, 257, 365, 216, 37, 3394, 30, 48, 216, 37, 281, 2481, 6341, 338, 10497, 624, 13603, 6528, 2613, 351, 253, 2061, 2421, 282, 2892, 1673, 657, 597, 4041, 338, 260, 41548, 7103, 38883, 282, 260, 3685, 7761, 436, 1147, 5607, 284, 4146, 253, 15665, 2081, 281, 3547, 288, 11729, 4360, 260, 2061, 10870, 282, 260, 6008, 4359, 7761, 702, 260, 2938, 9568, 9662, 3394, 29, 48, 1128, 11763, 4452, 284, 6103, 16729, 350, 3335, 3394, 29, 48, 1128, 5182, 43622, 18359, 1673, 1068, 3216, 3710, 540, 3269, 9396, 856, 441, 325, 8885, 588, 260, 725, 1157, 436, 42740, 277, 5359, 284, 260, 24794, 10357, 21096, 288, 2081, 3547, 411, 216, 32, 3394, 30, 48, 216, 37, 25035, 365, 216, 32, 3394, 30, 48, 216, 41, 35, 6381, 2272, 294, 8544, 216, 32, 3394, 30, 48, 216, 37, 40, 20157, 2481, 288, 216, 34, 35, 25035, 365, 216, 36, 35, 6381, 2272, 294, 8544, 216, 34, 38, 20157, 2481, 1673, 1626, 3898, 2613, 260, 9656, 290, 16036, 436, 27203, 588, 338, 260, 2208, 49104, 4452, 6341, 48379, 436, 2208, 670, 281, 260, 42303, 15037, 1128, 1673, 669, 3954, 260, 8612, 637, 99, 20777, 4435, 253, 1546, 2081, 281, 260, 8612, 637, 99, 2966, 284, 14309, 12873, 24781, 9010, 1541, 463, 35455, 4484, 338, 623, 7761, 761, 260, 9250, 3597, 1307, 282, 750, 4931, 3575, 5575, 1673, 378, 3403, 1157, 436, 10044, 330, 3394, 29, 48, 216, 41, 34, 411, 260, 339, 58, 62, 284, 28289, 2001, 429, 260, 330, 3394, 29, 48, 216, 38, 36, 1157, 282, 260, 42303, 15037, 1128, 338, 357, 436, 2500, 253, 4447, 1128, 1673, 198, 504, 7761, 761, 253, 3519, 282, 216, 34, 32, 40, 3394, 30, 48, 216, 33, 40, 13897, 365, 216, 38, 40, 35, 11083, 216, 32, 281, 2481, 3043, 3297, 253, 11225, 282, 216, 34, 40, 3394, 30, 48, 216, 38, 37, 13897, 365, 216, 41, 36, 11083, 216, 32, 281, 2481, 284, 253, 5010, 10586, 282, 216, 40, 3394, 30, 48, 216, 41, 35, 13897, 365, 216, 34, 41, 11083, 216, 36, 281, 2481, 418, 2276, 3509, 1673, 1069, 17601, 216, 35, 38, 3394, 28, 48, 216, 37, 32, 32, 986, 8274, 365, 216, 35, 39, 3394, 28, 48, 216, 33, 32, 32, 252, 2481, 418, 2276, 3509, 3297, 8553, 216, 38, 37, 32, 986, 8274, 365, 216, 38, 38, 32, 252, 2481, 540, 670, 260, 18393, 1128, 1673, 3855, 8612, 14202, 282, 216, 33, 3394, 28, 48, 216, 35, 38, 32, 8497, 284, 28232, 1800, 1673, 1069, 761, 253, 1278, 8838, 631, 4614, 282, 216, 33, 3394, 30, 48, 216, 39, 35, 39, 13897, 365, 216, 37, 11083, 216, 40, 3394, 30, 48, 216, 36, 281, 2481, 418, 2276, 3509, 1673, 198, 6307, 260, 7761, 637, 31284, 981, 260, 216, 33, 41, 35, 32, 99, 3297, 480, 3703, 2076, 46504, 592, 21096, 351, 2701, 6408, 3235, 288, 480, 7022, 350, 1623, 93, 7185, 1673, 5148, 7761, 592, 597, 1836, 37477, 3994, 2519, 288, 1947, 480, 13622, 3542, 284, 288, 19367, 327, 260, 2613, 282, 260, 3171, 38883, 1673, 533, 1706, 3297, 480, 328, 19374, 592, 42740, 277, 411, 216, 39, 3394, 30, 48, 216, 38, 34, 13897, 365, 216, 34, 37, 3394, 30, 48, 216, 32, 11083, 2481, 1673, 1216, 1971, 2420, 480, 3043, 3519, 288, 216, 34, 33, 35, 3394, 30, 48, 216, 40, 13897, 365, 216, 39, 32, 33, 11083, 2481, 3297, 480, 11225, 288, 216, 35, 33, 3394, 30, 48, 216, 39, 37, 13897, 365, 216, 33, 32, 36, 11083, 216, 34, 281, 2481, 284, 480, 10049, 288, 216, 41, 3394, 30, 48, 216, 36, 37, 13897, 365, 216, 35, 33, 11083, 216, 32, 281, 2481, 1673, 3855, 15267, 2420, 690, 216, 37, 3394, 28, 48, 216, 32, 32, 32, 986, 8274, 365, 216, 37, 3394, 28, 48, 216, 33, 32, 32, 252, 2481, 288, 216, 36, 34, 3394, 28, 48, 216, 32, 32, 33, 986, 8274, 365, 216, 36, 34, 3394, 28, 48, 216, 38, 39, 37, 252, 2481, 418, 2276, 3509, 1673, 378, 8612, 1209, 22266, 216, 33, 3394, 28, 48, 216, 35, 39, 38, 8497, 284, 28232, 1800, 1673, 198, 198, 45, 446, 446, 35713, 446, 446, 446, 198, 198, 504, 339, 313, 3394, 29, 48, 1128, 7761, 761, 827, 5208, 282, 1454, 3394, 29, 48, 4926, 9403, 17577, 3297, 971, 282, 527, 19036, 827, 38843, 39227, 351, 216, 35, 3394, 30, 48, 216, 36, 34, 41, 3394, 29, 48, 31275, 365, 216, 33, 33, 11083, 216, 35, 281, 2481, 3766, 16549, 1673, 378, 904, 3394, 29, 48, 2456, 17577, 19036, 260, 10879, 39227, 979, 260, 1642, 3394, 29, 48, 2456, 17577, 19036, 260, 6210, 39227, 1673, 378, 17577, 592, 2724, 288, 2690, 253, 2719, 282, 216, 36, 32, 3394, 28, 48, 216, 32, 32, 32, 355, 216, 36, 37, 3394, 28, 48, 216, 32, 32, 32, 18781, 43866, 365, 216, 35, 32, 3394, 28, 48, 216, 32, 32, 32, 355, 216, 35, 36, 3394, 28, 48, 216, 32, 32, 32, 36398, 2481, 365, 7925, 18278, 8662, 284, 339, 313, 7827, 2481, 3297, 1015, 9403, 2711, 411, 216, 34, 36, 46756, 258, 11849, 452, 15037, 913, 3394, 29, 48, 8223, 36001, 418, 1891, 11820, 282, 216, 33, 35, 816, 216, 33, 38, 3394, 30, 48, 216, 41, 11134, 2272, 5973, 34, 365, 216, 33, 3394, 28, 48, 216, 34, 39, 37, 816, 216, 33, 3394, 28, 48, 216, 38, 37, 39, 501, 28694, 8544, 216, 33, 40, 37, 816, 216, 34, 36, 32, 36298, 2481, 1673, 5148, 7761, 19583, 22260, 480, 2724, 3547, 282, 216, 34, 35, 25035, 365, 216, 36, 35, 6381, 2272, 294, 8544, 216, 34, 38, 20157, 2481, 981, 480, 3426, 7364, 8544, 339, 313, 5388, 216, 34, 35, 3394, 30, 48, 216, 38, 25035, 365, 216, 36, 35, 3394, 30, 48, 216, 39, 6381, 2272, 294, 8544, 216, 34, 39, 3394, 30, 48, 216, 34, 20157, 2481, 429, 216, 37, 38, 3394, 28, 48, 216, 36, 41, 40, 443, 96, 365, 216, 36, 34, 3394, 28, 48, 216, 33, 35, 33, 36398, 2481, 284, 7925, 18278, 8662, 22260, 338, 351, 216, 34, 36, 25035, 365, 216, 36, 36, 6381, 2272, 294, 8544, 216, 34, 40, 20157, 2481, 429, 216, 38, 35, 3394, 28, 48, 216, 34, 33, 33, 443, 96, 365, 216, 36, 39, 3394, 28, 48, 216, 33, 35, 38, 36398, 2481, 1673, 3768, 282, 260, 36001, 9495, 253, 8196, 282, 5511, 284, 2664, 284, 260, 7761, 761, 253, 328, 323, 473, 4190, 282, 216, 36, 3394, 28, 48, 216, 38, 32, 39, 986, 8274, 365, 216, 36, 3394, 28, 48, 216, 38, 40, 33, 252, 2481, 282, 5511, 284, 216, 33, 3394, 28, 48, 216, 36, 33, 33, 986, 8274, 365, 216, 33, 3394, 28, 48, 216, 36, 35, 36, 252, 2481, 282, 3977, 2664, 3297, 527, 4502, 601, 253, 1845, 282, 216, 41, 3394, 28, 48, 216, 38, 40, 32, 36681, 4158, 365, 216, 33, 39, 3394, 28, 48, 216, 41, 35, 32, 6381, 8544, 216, 33, 33, 3394, 28, 48, 216, 33, 36, 32, 11488, 2481, 418, 253, 3547, 282, 216, 33, 36, 25035, 365, 216, 34, 38, 6381, 2272, 294, 8544, 216, 33, 38, 20157, 2481, 1673, 339, 313, 284, 7925, 18278, 8662, 761, 1296, 19421, 282, 216, 33, 37, 32, 37138, 24898, 365, 216, 34, 32, 32, 40756, 2481, 4190, 284, 827, 216, 34, 37, 32, 3394, 29, 48, 44531, 365, 216, 35, 36, 32, 40756, 2481, 42736, 19421, 418, 216, 34, 34, 37, 28794, 1673, 198, 6307, 480, 216, 33, 41, 35, 32, 99, 31284, 3297, 260, 36001, 335, 971, 5575, 592, 7233, 411, 4475, 725, 46756, 258, 2664, 3394, 29, 48, 15615, 36001, 3297, 16231, 618, 260, 4302, 47122, 24794, 3589, 3297, 284, 260, 3703, 33053, 436, 5178, 1673, 378, 17577, 592, 7233, 411, 1876, 27664, 46756, 258, 17577, 351, 253, 2724, 3124, 282, 216, 40, 32, 3394, 28, 48, 216, 32, 32, 32, 443, 96, 365, 216, 38, 32, 3394, 28, 48, 216, 32, 32, 32, 36398, 2481, 5492, 288, 2081, 480, 3547, 288, 216, 34, 36, 3394, 30, 48, 216, 37, 25035, 365, 216, 36, 37, 3394, 30, 48, 216, 36, 6381, 2272, 294, 8544, 216, 34, 40, 3394, 30, 48, 216, 34, 20157, 2481, 1673, 1985, 874, 7364, 3297, 339, 313, 5388, 253, 1466, 3547, 282, 216, 34, 37, 3394, 30, 48, 216, 34, 38, 25035, 365, 216, 36, 38, 3394, 30, 48, 216, 39, 40, 6381, 2272, 294, 8544, 216, 34, 41, 3394, 30, 48, 216, 32, 39, 20157, 2481, 429, 216, 40, 33, 3394, 28, 48, 216, 32, 37, 32, 443, 96, 365, 216, 38, 32, 3394, 28, 48, 216, 36, 36, 32, 36398, 2481, 1673, 378, 3977, 4759, 282, 260, 7761, 436, 2420, 288, 253, 2719, 282, 216, 37, 3394, 28, 48, 216, 33, 33, 35, 986, 8274, 365, 216, 37, 3394, 28, 48, 216, 33, 41, 37, 252, 2481, 282, 3977, 2664, 338, 4502, 601, 253, 1845, 282, 216, 39, 3394, 28, 48, 216, 40, 39, 32, 36681, 4158, 365, 216, 33, 36, 3394, 28, 48, 216, 37, 40, 32, 6381, 8544, 216, 41, 3394, 28, 48, 216, 32, 38, 32, 11488, 2481, 418, 253, 3547, 282, 216, 33, 38, 25035, 365, 216, 35, 32, 6381, 2272, 294, 8544, 216, 33, 40, 20157, 2481, 1673, 198, 198, 45, 446, 446, 11889, 3026, 446, 446, 446, 198, 198, 504, 11314, 216, 36, 37, 3394, 29, 48, 1588, 505, 257, 216, 35, 37, 3394, 30, 48, 216, 38, 5973, 365, 216, 33, 36, 3394, 30, 48, 216, 32, 281, 2481, 7090, 216, 36, 33, 12466, 282, 260, 339, 313, 1128, 592, 13770, 281, 1296, 9180, 282, 18418, 3394, 29, 48, 6341, 3297, 19701, 3166, 6615, 26466, 1673, 442, 3019, 1283, 582, 738, 2976, 429, 3433, 288, 13401, 3297, 971, 48379, 24160, 216, 38, 37, 37, 986, 8274, 365, 216, 38, 38, 38, 252, 2481, 1673, 378, 3244, 15132, 947, 13147, 6615, 26466, 761, 354, 14574, 12678, 282, 20826, 216, 37, 2272, 1232, 216, 34, 32, 5027, 1673, 378, 12466, 761, 253, 2421, 282, 2892, 282, 216, 33, 3394, 30, 48, 216, 37, 816, 216, 34, 20840, 567, 8427, 284, 856, 325, 13049, 418, 750, 7256, 826, 731, 35, 284, 1232, 216, 34, 32, 5027, 1673, 533, 216, 33, 41, 34, 33, 260, 14574, 436, 2420, 288, 1232, 216, 35, 32, 5027, 284, 965, 288, 1232, 216, 36, 35, 5027, 981, 480, 3921, 3394, 29, 48, 216, 33, 41, 35, 32, 99, 31284, 3297, 2560, 327, 2838, 30, 216, 38, 48379, 347, 624, 5682, 2678, 856, 441, 325, 19400, 1673, 378, 692, 11458, 6958, 282, 260, 12466, 436, 597, 4247, 429, 253, 18503, 288, 253, 41305, 817, 3297, 527, 3917, 327, 253, 5331, 17607, 4834, 282, 260, 1085, 12466, 1673, 198, 3087, 2260, 2287, 3713, 3297, 260, 12466, 804, 7090, 216, 41, 33, 38883, 3394, 29, 48, 39334, 3297, 45504, 14866, 1673, 3768, 282, 623, 14866, 24160, 216, 38, 39, 35, 3394, 30, 48, 216, 37, 27336, 365, 216, 33, 3394, 28, 48, 216, 36, 40, 37, 22185, 2481, 284, 436, 15615, 418, 253, 42771, 10874, 282, 216, 39, 39, 32, 816, 216, 39, 39, 37, 13897, 567, 1796, 365, 216, 34, 3394, 28, 48, 216, 37, 35, 32, 816, 216, 34, 3394, 28, 48, 216, 37, 36, 32, 11083, 2272, 262, 2481, 1673, 1069, 761, 253, 5428, 1845, 282, 216, 34, 37, 3394, 28, 48, 216, 32, 32, 32, 13897, 365, 216, 34, 39, 3394, 28, 48, 216, 32, 32, 32, 329, 84, 2481, 418, 1232, 216, 34, 32, 5027, 282, 14574, 284, 216, 35, 37, 3394, 28, 48, 216, 36, 37, 32, 8137, 365, 216, 35, 40, 3394, 28, 48, 216, 39, 39, 32, 329, 84, 2481, 418, 1232, 216, 36, 35, 5027, 990, 31284, 1673, 4420, 1770, 436, 253, 216, 38, 34, 37, 3394, 29, 48, 32509, 365, 216, 33, 3394, 28, 48, 216, 35, 39, 40, 22185, 2481, 904, 3394, 29, 48, 21110, 6528, 338, 761, 253, 42771, 10874, 282, 216, 40, 32, 37, 13897, 567, 1796, 365, 216, 34, 3394, 28, 48, 216, 38, 36, 32, 11083, 2272, 262, 2481, 1673, 330, 1767, 7090, 216, 35, 334, 487, 88, 1873, 38589, 1266, 486, 11343, 443, 3526, 5824, 6528, 436, 2452, 281, 260, 216, 33, 41, 35, 32, 99, 327, 4098, 3394, 29, 48, 6995, 722, 1673, 198, 504, 7761, 637, 6442, 5026, 3026, 14202, 282, 7522, 216, 37, 32, 3394, 29, 48, 1588, 505, 257, 216, 33, 36, 3394, 29, 48, 996, 24739, 257, 7090, 216, 35, 1673, 19835, 7773, 282, 623, 592, 13770, 281, 8828, 391, 660, 281, 260, 9656, 290, 284, 2076, 20801, 284, 260, 6219, 6455, 592, 13770, 335, 260, 16036, 2120, 601, 284, 6086, 411, 6341, 30553, 1673, 1069, 761, 253, 5428, 14574, 282, 1232, 216, 34, 32, 5027, 527, 4502, 601, 10186, 282, 216, 33, 38, 3394, 28, 48, 216, 35, 32, 32, 13897, 365, 216, 33, 39, 3394, 28, 48, 216, 40, 32, 32, 329, 84, 2481, 1673, 3768, 6341, 761, 253, 2421, 282, 2892, 282, 614, 288, 216, 33, 32, 20840, 567, 8427, 1673, 14949, 3394, 29, 48, 6995, 17745, 436, 2711, 411, 1876, 216, 36, 32, 3394, 29, 48, 1588, 505, 257, 216, 35, 7212, 8445, 7090, 216, 40, 3394, 29, 48, 996, 24739, 257, 22805, 12466, 281, 2244, 41696, 1673, 378, 216, 39, 3394, 30, 48, 216, 38, 34, 3394, 29, 48, 996, 24739, 257, 365, 216, 35, 281, 2481, 904, 3394, 29, 48, 7256, 12466, 761, 253, 5428, 14574, 282, 1232, 216, 39, 37, 5027, 3297, 284, 761, 253, 2421, 282, 2892, 282, 216, 33, 35, 288, 216, 34, 32, 20840, 567, 8427, 1673, 1069, 15615, 253, 216, 38, 11134, 365, 216, 33, 35, 22185, 2481, 44576, 351, 253, 42771, 10874, 282, 216, 38, 40, 32, 283, 2272, 262, 365, 216, 34, 3394, 28, 48, 216, 34, 32, 32, 11083, 2272, 262, 2481, 288, 253, 5428, 4614, 282, 216, 39, 3394, 28, 48, 216, 37, 32, 32, 13897, 365, 216, 34, 36, 3394, 28, 48, 216, 38, 32, 32, 11083, 2481, 1673, 378, 7761, 592, 597, 16231, 351, 2976, 24025, 216, 37, 35, 3394, 30, 48, 216, 35, 3394, 29, 48, 996, 24739, 257, 365, 216, 34, 33, 3394, 30, 48, 216, 32, 281, 2481, 37477, 12495, 3297, 1296, 335, 971, 2932, 1908, 1673, 1069, 4891, 11314, 288, 25808, 216, 38, 373, 8445, 7090, 30596, 2586, 527, 761, 253, 216, 34, 32, 32, 3394, 29, 48, 32509, 365, 216, 36, 36, 32, 22185, 2481, 1913, 2699, 1673, 1069, 761, 1296, 4840, 327, 1845, 284, 3547, 1577, 216, 33, 37, 3394, 28, 48, 216, 32, 32, 32, 13897, 365, 216, 33, 38, 3394, 28, 48, 216, 32, 32, 32, 329, 84, 2481, 418, 216, 34, 38, 25035, 365, 216, 36, 40, 6381, 2272, 294, 8544, 216, 35, 32, 20157, 2481, 3297, 216, 33, 32, 3394, 28, 48, 216, 32, 32, 32, 13897, 365, 216, 33, 33, 3394, 28, 48, 216, 32, 32, 32, 329, 84, 2481, 418, 216, 35, 34, 25035, 365, 216, 37, 41, 6381, 2272, 294, 8544, 216, 35, 39, 20157, 2481, 3297, 355, 216, 39, 3394, 28, 48, 216, 32, 32, 32, 13897, 365, 216, 39, 3394, 28, 48, 216, 39, 32, 32, 329, 84, 2481, 418, 216, 35, 39, 25035, 365, 216, 38, 41, 6381, 2272, 294, 8544, 216, 36, 35, 20157, 2481, 1673, 198, 788, 216, 33, 41, 35, 33, 816, 216, 35, 35, 260, 22805, 12466, 592, 7233, 351, 4475, 216, 36, 32, 3394, 29, 48, 1588, 8550, 216, 33, 34, 3394, 30, 48, 216, 39, 5973, 365, 216, 37, 3394, 30, 48, 216, 32, 281, 2481, 7090, 216, 40, 41, 12272, 3394, 29, 48, 3446, 12466, 3297, 16231, 335, 1062, 5882, 282, 260, 3703, 2076, 46504, 281, 1876, 18418, 3394, 29, 48, 6341, 41696, 1673, 1550, 17607, 418, 2376, 7591, 3297, 260, 12466, 761, 253, 1845, 282, 216, 33, 36, 3394, 28, 48, 216, 39, 32, 32, 13897, 365, 216, 33, 38, 3394, 28, 48, 216, 33, 32, 32, 329, 84, 2481, 8544, 502, 761, 253, 17451, 282, 216, 41, 3394, 28, 48, 216, 36, 36, 32, 13897, 365, 216, 35, 32, 3394, 28, 48, 216, 41, 39, 32, 11083, 2481, 418, 480, 5428, 14574, 282, 1232, 216, 41, 32, 5027, 1673, 3855, 5428, 2421, 282, 2892, 436, 216, 33, 36, 20840, 253, 8427, 3297, 564, 480, 11787, 2421, 282, 2892, 436, 1130, 4475, 20840, 567, 8427, 1673, 5713, 18418, 3394, 29, 48, 6341, 41696, 327, 9768, 3394, 29, 48, 2837, 717, 36958, 827, 3394, 29, 48, 273, 9371, 1420, 22805, 12466, 592, 597, 3235, 1673, 1216, 12466, 761, 253, 5428, 14574, 282, 1232, 216, 40, 32, 5027, 284, 253, 2421, 282, 2892, 282, 216, 34, 32, 32, 20840, 567, 8427, 1673, 378, 6455, 282, 216, 33, 36, 5973, 12466, 335, 260, 5060, 16036, 592, 5178, 418, 451, 655, 1673, 198, 6307, 260, 3921, 3394, 29, 48, 216, 33, 41, 35, 32, 99, 16546, 260, 37477, 12495, 592, 5178, 284, 260, 717, 36958, 827, 3394, 29, 48, 16776, 366, 592, 7233, 411, 7522, 9768, 3394, 29, 48, 2837, 12399, 322, 91, 774, 216, 34, 37, 7610, 7090, 216, 41, 38, 1420, 22805, 12466, 281, 216, 33, 32, 18418, 3394, 29, 48, 6341, 41696, 1673, 669, 436, 260, 2920, 4931, 1420, 22805, 6341, 981, 2260, 2287, 3713, 3297, 564, 357, 8845, 429, 3523, 1157, 27582, 338, 16661, 357, 253, 5932, 21631, 12400, 1673, 3959, 288, 12873, 5068, 625, 3285, 3297, 260, 18418, 284, 20930, 41696, 476, 21436, 5499, 3547, 281, 4445, 355, 14574, 8544, 260, 6341, 24455, 592, 7168, 288, 5605, 3538, 7591, 8544, 260, 6341, 17223, 7446, 20945, 8544, 260, 11612, 436, 1147, 1165, 3297, 284, 3297, 5087, 3297, 260, 6341, 3281, 7446, 42771, 19048, 476, 1673, 1216, 216, 34, 37, 3394, 29, 48, 1663, 24739, 257, 365, 216, 32, 3394, 30, 48, 216, 41, 40, 281, 2481, 12466, 761, 354, 2430, 1845, 282, 216, 33, 3394, 28, 48, 216, 37, 32, 32, 816, 216, 35, 3394, 28, 48, 216, 32, 32, 32, 13897, 365, 216, 33, 3394, 28, 48, 216, 38, 32, 32, 816, 216, 35, 3394, 28, 48, 216, 35, 32, 32, 329, 84, 2481, 3297, 284, 354, 2430, 17451, 282, 216, 37, 3394, 28, 48, 216, 37, 32, 32, 13897, 365, 216, 33, 40, 3394, 28, 48, 216, 32, 32, 32, 11083, 2481, 418, 354, 14574, 282, 216, 40, 37, 5027, 1673, 378, 5428, 2430, 2421, 282, 2892, 436, 805, 826, 216, 33, 33, 32, 284, 216, 33, 34, 32, 20840, 567, 8427, 975, 282, 260, 7722, 737, 288, 1363, 260, 16764, 3394, 29, 48, 5075, 17703, 1673, 533, 1706, 260, 3703, 6455, 282, 216, 33, 36, 5973, 12466, 281, 260, 9656, 290, 592, 5178, 418, 451, 655, 284, 260, 5428, 14574, 282, 260, 6219, 12466, 436, 2420, 288, 1232, 216, 35, 32, 5027, 1673, 198, 198, 45, 446, 446, 9281, 446, 446, 446, 198, 198, 504, 339, 313, 3394, 29, 48, 1128, 7761, 637, 913, 1311, 8399, 13443, 761, 253, 5428, 11669, 282, 216, 34, 41, 41, 7610, 365, 216, 33, 33, 3394, 30, 48, 216, 40, 281, 2481, 282, 717, 36958, 47365, 38883, 744, 1319, 4452, 8544, 2441, 357, 436, 253, 4040, 396, 282, 216, 33, 32, 32, 7610, 365, 216, 35, 3394, 30, 48, 216, 41, 281, 2481, 38883, 1673, 378, 5060, 5026, 8942, 16036, 14202, 282, 827, 5466, 282, 904, 3394, 29, 48, 38155, 6752, 216, 37, 37, 7610, 365, 216, 34, 3394, 30, 48, 216, 34, 281, 2481, 4943, 284, 260, 2208, 5026, 8942, 16036, 597, 14202, 282, 827, 5466, 282, 904, 3394, 29, 48, 38155, 6752, 3297, 564, 805, 216, 35, 32, 7610, 365, 216, 33, 3394, 30, 48, 216, 34, 281, 2481, 4943, 1673, 378, 5882, 282, 451, 16036, 1509, 26363, 33832, 288, 2220, 260, 4869, 282, 260, 2208, 4040, 396, 282, 260, 13443, 38883, 1673, 378, 6947, 282, 260, 13443, 38883, 592, 6370, 767, 411, 12785, 16858, 338, 22697, 281, 11669, 429, 216, 34, 32, 35, 288, 216, 33, 32, 34, 7610, 365, 216, 40, 288, 216, 36, 281, 2481, 1673, 378, 6615, 26466, 592, 6086, 351, 354, 38883, 11669, 282, 216, 34, 37, 36, 7610, 365, 216, 33, 32, 281, 2481, 335, 260, 2715, 284, 216, 39, 38, 7610, 335, 260, 7344, 1673, 378, 8828, 391, 368, 38883, 436, 216, 33, 36, 41, 7610, 365, 216, 37, 3394, 30, 48, 216, 41, 281, 2481, 4943, 284, 338, 282, 260, 2753, 12297, 3986, 436, 216, 34, 41, 41, 7610, 4943, 2161, 670, 260, 6909, 8176, 216, 35, 32, 37, 7610, 1673, 378, 5882, 282, 260, 345, 1039, 11637, 592, 216, 35, 32, 37, 7610, 4943, 1673, 198, 504, 339, 313, 1128, 592, 260, 805, 4931, 11763, 4452, 288, 1379, 260, 9703, 11612, 2120, 260, 6528, 11612, 347, 260, 339, 58, 62, 20190, 288, 1830, 347, 1083, 1898, 347, 1636, 826, 260, 3452, 33247, 47705, 284, 8949, 284, 37477, 43555, 491, 1673, 378, 7741, 429, 32941, 274, 14866, 418, 986, 9510, 436, 441, 16003, 1793, 260, 12239, 11612, 26328, 282, 1296, 2938, 5182, 43622, 18359, 981, 260, 216, 33, 41, 33, 38, 9420, 282, 530, 316, 1219, 3670, 947, 6613, 260, 1225, 1673, 1626, 2030, 2037, 260, 17703, 260, 5856, 282, 260, 5561, 4869, 436, 2420, 288, 253, 2719, 282, 216, 35, 3394, 30, 48, 216, 37, 40, 13897, 365, 216, 33, 33, 11083, 216, 41, 281, 2481, 16780, 260, 2753, 12297, 3986, 284, 17703, 1673, 4454, 3297, 260, 7117, 7439, 216, 38, 38, 32, 913, 21326, 35186, 288, 7347, 43932, 281, 260, 2121, 282, 5182, 3055, 1673, 533, 1706, 288, 260, 37477, 42159, 3235, 645, 260, 7761, 592, 2148, 1005, 3297, 260, 16036, 38883, 690, 260, 12433, 284, 17703, 436, 2420, 288, 253, 2719, 11669, 282, 216, 33, 36, 32, 7610, 1673, 19373, 260, 2798, 2574, 282, 260, 7761, 3297, 827, 37477, 12785, 16858, 592, 597, 3235, 284, 260, 48379, 21786, 592, 2420, 288, 253, 2719, 282, 216, 33, 37, 34, 1663, 35357, 365, 216, 38, 281, 2481, 282, 38883, 1673, 198, 198, 45, 446, 446, 9163, 1533, 284, 8373, 446, 446, 446, 198, 198, 3965, 260, 3841, 282, 260, 5575, 637, 99, 2892, 3394, 29, 48, 1533, 6907, 359, 441, 4090, 1770, 3297, 357, 314, 1343, 338, 260, 7761, 592, 16231, 351, 253, 2892, 3394, 29, 48, 1533, 6510, 990, 11423, 1673, 2838, 2583, 436, 16231, 418, 338, 655, 284, 940, 429, 260, 1845, 7647, 366, 761, 288, 325, 8484, 16223, 1673, 5312, 26466, 216, 34, 3297, 216, 35, 3297, 284, 216, 37, 592, 2837, 351, 13254, 216, 38, 3394, 29, 48, 31275, 365, 216, 33, 41, 11083, 216, 40, 281, 2481, 12070, 25618, 1456, 35613, 1845, 7647, 366, 1673, 1216, 592, 4592, 288, 325, 16857, 288, 260, 2938, 36591, 1456, 625, 8854, 6907, 804, 335, 550, 7761, 284, 592, 5178, 281, 216, 33, 41, 34, 32, 1673, 1069, 592, 7233, 411, 2267, 260, 2938, 1845, 7647, 366, 355, 43123, 2837, 6907, 282, 216, 38, 355, 216, 40, 13897, 365, 216, 33, 41, 11083, 216, 40, 281, 355, 216, 34, 38, 11083, 216, 35, 281, 2481, 3519, 1673, 533, 260, 3008, 216, 33, 41, 34, 32, 99, 260, 2892, 3394, 29, 48, 1533, 1734, 592, 34194, 284, 3171, 6408, 592, 3235, 288, 260, 1623, 93, 500, 288, 12946, 601, 1673, 330, 6455, 282, 20142, 327, 260, 216, 33, 34, 3394, 30, 48, 216, 39, 5973, 22805, 12466, 592, 3235, 3297, 582, 335, 971, 2103, 282, 260, 3703, 2076, 20801, 3297, 281, 260, 1584, 216, 33, 41, 35, 32, 99, 1673, 378, 2892, 3394, 29, 48, 1533, 1734, 592, 1163, 34194, 281, 260, 3921, 3394, 29, 48, 216, 33, 41, 35, 32, 99, 284, 20142, 592, 3235, 327, 260, 216, 34, 37, 7610, 22805, 12466, 1673, 5148, 7761, 761, 216, 33, 32, 3394, 29, 48, 31275, 365, 216, 35, 34, 11083, 216, 33, 32, 281, 2481, 1845, 7647, 366, 7373, 418, 260, 1466, 282, 260, 27891, 18219, 14330, 418, 338, 655, 1673, 7090, 216, 34, 33, 1512, 3394, 29, 48, 3179, 1961, 954, 592, 7373, 16717, 260, 17758, 281, 3921, 3394, 29, 48, 216, 33, 41, 36, 34, 1673, 198, 198, 45, 446, 446, 33645, 446, 446, 446, 198, 198, 57, 313, 436, 13099, 16231, 351, 354, 6995, 9135, 3394, 29, 48, 767, 3941, 327, 253, 44126, 611, 29740, 216, 33, 61, 54, 35, 21529, 335, 5312, 3274, 2838, 30, 216, 34, 281, 216, 33, 41, 34, 39, 1673, 657, 436, 7233, 411, 253, 3941, 335, 5312, 3274, 2838, 30, 216, 37, 327, 253, 718, 2231, 395, 29043, 414, 33, 73, 31685, 6458, 12758, 281, 216, 33, 41, 34, 40, 816, 216, 34, 41, 1673, 330, 47019, 481, 284, 253, 4064, 1810, 812, 216, 36, 3394, 29, 48, 9241, 662, 365, 216, 35, 3394, 30, 48, 216, 41, 3394, 29, 48, 986, 3394, 29, 48, 9241, 2481, 35735, 592, 16231, 335, 260, 26429, 981, 260, 3921, 3394, 29, 48, 216, 33, 41, 35, 32, 99, 31284, 3297, 284, 260, 7761, 592, 9031, 288, 7236, 1296, 6458, 18496, 3297, 3551, 787, 12193, 280, 436, 2711, 1673, 378, 3791, 29095, 1346, 9508, 414, 36, 62, 34, 1632, 18496, 592, 7233, 411, 29095, 1346, 9508, 414, 40, 62, 34, 1632, 18496, 281, 216, 33, 41, 35, 40, 1673, 198, 198, 45, 446, 37568, 288, 10439, 17614, 446, 446, 198, 198, 504, 26303, 282, 260, 2938, 3575, 7761, 12356, 282, 11097, 284, 2720, 28540, 411, 4931, 1666, 3394, 29, 48, 1552, 6995, 335, 216, 33, 32, 4645, 216, 33, 41, 36, 33, 2842, 260, 339, 58, 62, 288, 7319, 338, 11763, 4452, 856, 441, 7236, 281, 260, 2715, 282, 8091, 6995, 284, 2309, 7952, 1512, 1199, 288, 2037, 601, 1673, 378, 2184, 282, 1876, 4931, 6995, 17614, 981, 260, 9420, 282, 10418, 2384, 281, 4019, 216, 33, 41, 36, 34, 13428, 3435, 260, 2470, 282, 260, 339, 58, 62, 288, 1538, 750, 1512, 3114, 284, 8837, 592, 7045, 1673, 31621, 14915, 288, 7728, 582, 355, 540, 11763, 4452, 618, 17614, 761, 719, 1135, 284, 11238, 418, 260, 3616, 282, 260, 1913, 3297, 564, 502, 592, 32573, 990, 10418, 2384, 1673, 22133, 327, 540, 13992, 34002, 592, 11238, 335, 260, 9941, 282, 12372, 284, 3297, 768, 9603, 3297, 655, 3297, 284, 260, 339, 58, 62, 9700, 335, 9028, 260, 13401, 6455, 282, 6615, 26466, 284, 13195, 601, 351, 253, 6688, 16036, 9031, 351, 827, 47019, 8071, 288, 7198, 6458, 18496, 1673, 378, 339, 313, 3394, 29, 48, 1128, 7761, 592, 5534, 327, 260, 9538, 975, 7925, 18278, 8662, 761, 8845, 354, 14380, 281, 5312, 3274, 2838, 30, 216, 37, 281, 1584, 2405, 338, 10210, 7652, 260, 48379, 284, 480, 5312, 3274, 2838, 30, 216, 38, 856, 441, 24353, 288, 260, 2073, 1232, 216, 36, 35, 5027, 14100, 2371, 327, 260, 986, 3394, 29, 48, 1845, 6239, 16890, 411, 260, 339, 58, 62, 1673, 378, 42303, 15037, 99, 592, 13831, 288, 1066, 2268, 260, 808, 827, 592, 5371, 1673, 198, 198, 45, 446, 446, 11889, 3026, 1971, 446, 446, 446, 198, 198, 504, 13401, 6615, 26466, 3297, 260, 2753, 12297, 3986, 284, 480, 5682, 3626, 592, 5178, 3616, 281, 1584, 216, 33, 41, 36, 35, 284, 260, 22552, 281, 260, 3891, 16036, 592, 4993, 411, 216, 33, 37, 34, 7610, 10859, 27204, 2450, 429, 260, 48379, 38883, 1673, 2018, 282, 260, 216, 33, 36, 5973, 12466, 592, 5178, 284, 260, 8828, 391, 368, 22552, 17659, 767, 1673, 8920, 3171, 18418, 216, 33, 34, 3394, 30, 48, 216, 39, 5973, 41696, 592, 3235, 3297, 582, 6455, 31225, 260, 33053, 284, 260, 550, 31225, 260, 345, 1039, 11637, 1673, 378, 2798, 3772, 18418, 216, 34, 37, 7610, 6341, 41696, 592, 7233, 411, 20930, 41696, 284, 7462, 725, 20930, 41696, 592, 3235, 3297, 253, 2719, 282, 216, 37, 39, 12466, 1673, 5713, 971, 7090, 216, 41, 36, 284, 7090, 216, 41, 37, 22805, 20142, 592, 3235, 288, 1533, 260, 3171, 12466, 1673, 378, 25738, 327, 623, 725, 12466, 436, 6314, 281, 260, 17703, 6909, 804, 327, 260, 216, 33, 36, 5973, 12466, 284, 327, 5312, 3274, 2838, 30, 216, 37, 1673, 3897, 216, 33, 41, 36, 36, 3297, 260, 7761, 637, 22805, 40570, 592, 17625, 351, 354, 3171, 15026, 20930, 284, 20654, 2244, 216, 34, 37, 7610, 6341, 41696, 3297, 327, 253, 2719, 282, 216, 33, 32, 36, 22412, 3297, 284, 253, 6455, 282, 7090, 216, 33, 35, 1584, 8418, 1961, 954, 592, 3235, 1673, 533, 4448, 2976, 216, 35, 32, 3394, 29, 48, 5075, 22805, 12843, 7051, 6134, 592, 3235, 335, 260, 5882, 282, 260, 6688, 16036, 1673, 198, 198, 45, 446, 446, 19827, 16036, 11775, 446, 446, 446, 198, 198, 49, 216, 39, 32, 3394, 29, 48, 31275, 3394, 29, 48, 986, 365, 216, 34, 34, 41, 11083, 216, 40, 281, 2481, 6688, 16036, 436, 2837, 2120, 260, 26429, 284, 19198, 3703, 288, 260, 24026, 47122, 2076, 20801, 1673, 378, 6688, 16036, 436, 216, 34, 41, 13897, 365, 216, 41, 37, 11083, 216, 34, 281, 2481, 3599, 418, 624, 3703, 1112, 284, 216, 33, 35, 13897, 365, 216, 36, 34, 11083, 216, 40, 281, 2481, 418, 260, 26429, 1673, 657, 48603, 2280, 260, 26429, 284, 2420, 260, 3043, 3519, 282, 260, 7761, 288, 216, 34, 33, 41, 3394, 30, 48, 216, 38, 34, 13897, 365, 216, 39, 34, 32, 11083, 216, 38, 281, 2481, 1673, 330, 6455, 282, 18326, 43883, 3394, 29, 48, 38831, 47019, 8071, 592, 16231, 335, 260, 5882, 282, 260, 23634, 3297, 3703, 282, 260, 47122, 2076, 20801, 837, 502, 11729, 10915, 260, 13210, 282, 2892, 282, 260, 827, 744, 1319, 4452, 6615, 26466, 1673, 1069, 856, 7198, 6995, 614, 288, 216, 36, 3394, 28, 48, 216, 38, 32, 32, 27336, 365, 216, 33, 32, 3394, 28, 48, 216, 33, 32, 32, 22185, 2481, 281, 2613, 284, 2309, 216, 35, 32, 7345, 288, 7198, 971, 6995, 1673, 378, 6688, 16036, 761, 4475, 7193, 4759, 6115, 4395, 411, 31408, 288, 260, 47019, 8071, 284, 260, 3244, 15132, 947, 11548, 6995, 11732, 338, 3621, 260, 6995, 614, 429, 260, 12193, 280, 2441, 335, 260, 48074, 15950, 804, 288, 1485, 260, 6458, 18496, 563, 1673, 5713, 6995, 592, 5492, 288, 325, 328, 11817, 335, 260, 47019, 8071, 284, 1296, 540, 281, 8849, 6115, 335, 260, 6688, 16036, 327, 253, 2719, 282, 22063, 1673, 198, 504, 216, 36, 32, 3394, 29, 48, 31275, 3394, 29, 48, 986, 365, 216, 33, 35, 33, 11083, 216, 35, 281, 2481, 12193, 280, 436, 216, 34, 32, 13897, 365, 216, 38, 37, 11083, 216, 39, 281, 2481, 3599, 3703, 284, 216, 33, 33, 13897, 365, 216, 35, 38, 11083, 216, 33, 281, 2481, 418, 260, 13401, 1673, 657, 436, 216, 38, 13897, 365, 216, 33, 41, 11083, 216, 40, 281, 2481, 904, 284, 2724, 288, 328, 323, 7462, 6995, 1673, 657, 436, 16231, 351, 2892, 6755, 17133, 284, 3118, 7600, 49051, 366, 347, 253, 966, 282, 24262, 1786, 1673, 378, 637, 312, 637, 731, 10498, 11732, 436, 216, 33, 34, 3394, 30, 48, 216, 33, 13897, 365, 216, 35, 41, 11083, 216, 40, 281, 2481, 3599, 418, 624, 3703, 1112, 284, 216, 38, 3394, 30, 48, 216, 38, 13897, 365, 216, 34, 33, 11083, 216, 40, 281, 2481, 3599, 418, 260, 624, 47122, 1112, 1673, 657, 436, 216, 33, 34, 3394, 30, 48, 216, 33, 13897, 986, 284, 761, 253, 4190, 282, 216, 38, 17069, 365, 216, 37, 3394, 30, 48, 216, 41, 986, 8274, 2481, 1673, 9133, 1193, 4759, 12023, 351, 253, 4190, 282, 216, 39, 38, 17069, 365, 216, 39, 37, 986, 8274, 2481, 592, 7373, 281, 260, 4302, 11612, 282, 5312, 3274, 2838, 30, 216, 38, 288, 1538, 971, 6995, 351, 2001, 3977, 327, 1296, 4440, 370, 1673, 1626, 8516, 260, 6995, 260, 4064, 1810, 812, 35735, 16607, 335, 260, 26429, 436, 4935, 614, 288, 260, 2399, 2103, 282, 260, 6688, 16036, 1673, 5839, 35735, 436, 5492, 335, 260, 4870, 4265, 2103, 3297, 564, 357, 436, 2093, 16231, 1673, 198, 504, 7761, 761, 354, 1512, 1528, 282, 216, 33, 33, 971, 282, 718, 2231, 395, 29043, 422, 36, 73, 4696, 32587, 365, 17204, 8518, 1462, 476, 45789, 476, 2481, 284, 330, 24597, 414, 33, 38, 49, 31685, 6995, 365, 17204, 8518, 1462, 476, 5455, 476, 2481, 5148, 6995, 761, 1421, 1828, 284, 7795, 1512, 1528, 2042, 761, 511, 282, 624, 5492, 6995, 1673, 21363, 10429, 351, 253, 17281, 282, 7018, 18611, 3297, 7795, 5575, 2042, 804, 624, 6995, 981, 7604, 1673, 198, 198, 45, 446, 446, 3550, 1971, 446, 446, 446, 198, 198, 4582, 260, 2184, 282, 260, 3538, 11763, 974, 407, 519, 89, 418, 260, 19393, 9420, 282, 2693, 32244, 4055, 272, 281, 3008, 216, 33, 41, 36, 34, 288, 22518, 1223, 3055, 3297, 260, 339, 58, 62, 4041, 288, 12756, 260, 3542, 282, 260, 23185, 25901, 284, 288, 1464, 354, 28443, 23185, 25901, 1673, 378, 3542, 282, 260, 4302, 436, 19824, 411, 260, 1706, 282, 253, 7257, 4923, 418, 2124, 216, 33, 31275, 365, 216, 35, 11083, 216, 35, 281, 2481, 281, 11669, 284, 634, 282, 260, 38883, 5178, 429, 260, 6615, 26466, 436, 804, 288, 2037, 260, 6791, 1673, 378, 5561, 4869, 2441, 260, 4302, 6115, 282, 47122, 6615, 26466, 436, 9648, 288, 2205, 3977, 2664, 8544, 451, 2420, 260, 7761, 637, 17914, 288, 216, 41, 3394, 28, 48, 216, 37, 32, 32, 36681, 4158, 365, 216, 33, 39, 3394, 28, 48, 216, 38, 32, 32, 6381, 8544, 216, 33, 32, 3394, 28, 48, 216, 41, 32, 32, 11488, 2481, 418, 253, 3547, 282, 216, 33, 38, 25035, 1673, 330, 6455, 282, 7090, 216, 34, 34, 2376, 3394, 29, 48, 3179, 1961, 954, 592, 597, 16231, 981, 260, 9538, 1673, 198, 504, 8352, 282, 260, 6442, 5026, 3026, 3297, 260, 13401, 6615, 26466, 284, 480, 5682, 3626, 436, 3178, 35035, 411, 260, 1706, 282, 260, 6688, 16036, 3297, 12193, 280, 3297, 22805, 12466, 284, 540, 3977, 3297, 284, 260, 1278, 8838, 631, 4614, 2420, 1673, 34, 35, 13897, 365, 216, 41, 3394, 30, 48, 216, 33, 281, 2481, 288, 216, 34, 3394, 30, 48, 216, 40, 33, 13897, 365, 216, 41, 11083, 216, 35, 281, 2481, 418, 2073, 3509, 347, 253, 966, 282, 260, 5421, 281, 260, 15267, 411, 690, 216, 34, 3394, 28, 48, 216, 32, 32, 32, 17069, 365, 216, 34, 3394, 28, 48, 216, 32, 32, 32, 986, 8274, 2481, 288, 216, 36, 32, 3394, 28, 48, 216, 36, 36, 36, 17069, 365, 216, 35, 41, 3394, 28, 48, 216, 40, 32, 37, 986, 8274, 2481, 1673, 669, 597, 3954, 260, 5010, 10586, 288, 216, 41, 3394, 30, 48, 216, 32, 35, 13897, 365, 216, 34, 41, 11083, 216, 40, 281, 2481, 1673, 378, 690, 31603, 282, 260, 6688, 16036, 418, 260, 26429, 2420, 260, 3043, 3519, 288, 216, 34, 33, 41, 3394, 30, 48, 216, 38, 34, 13897, 365, 216, 39, 34, 32, 11083, 216, 38, 281, 2481, 284, 260, 11225, 436, 5359, 3954, 288, 216, 35, 33, 3394, 30, 48, 216, 39, 33, 13897, 365, 216, 33, 32, 36, 11083, 216, 32, 281, 2481, 1673, 198, 198, 45, 446, 44866, 446, 446, 1116, 198, 45, 446, 5538, 446, 446, 198, 198, 24852, 46527, 3297, 260, 10243, 7761, 592, 8002, 288, 260, 216, 33, 302, 44375, 974, 9760, 282, 260, 216, 33, 302, 28552, 1673, 7925, 18278, 8662, 761, 354, 14380, 281, 582, 282, 874, 1085, 6341, 6615, 26466, 338, 5375, 216, 33, 33, 1800, 284, 11442, 216, 34, 37, 281, 216, 33, 41, 33, 41, 8544, 260, 1695, 713, 1041, 16735, 4064, 2735, 351, 284, 29409, 253, 11659, 2509, 259, 3297, 8878, 827, 8612, 4065, 1673, 6993, 260, 1120, 282, 260, 6125, 2287, 3297, 1062, 7761, 4540, 23567, 767, 260, 28374, 282, 260, 6731, 4353, 3297, 9096, 284, 3275, 281, 1706, 288, 2534, 281, 4931, 5656, 1673, 339, 313, 17475, 9446, 3297, 12356, 282, 11097, 3297, 284, 650, 47695, 3394, 29, 48, 367, 3394, 29, 48, 3058, 24232, 6912, 5509, 11325, 813, 281, 216, 33, 41, 34, 34, 981, 260, 21353, 637, 99, 3048, 288, 3085, 1673, 533, 9096, 5943, 645, 260, 216, 33, 41, 34, 35, 3756, 22060, 15037, 11564, 10856, 3297, 502, 23217, 288, 17365, 1999, 101, 837, 502, 13049, 6864, 429, 327, 260, 7800, 335, 216, 36, 4448, 1673, 8219, 351, 827, 550, 11763, 4452, 284, 253, 6455, 282, 1420, 2653, 18359, 3297, 339, 313, 29409, 260, 45681, 718, 341, 17780, 281, 216, 33, 41, 34, 38, 981, 6341, 37918, 2180, 1673, 339, 313, 637, 99, 22805, 5026, 3026, 436, 34194, 281, 216, 33, 41, 35, 33, 284, 7925, 18278, 8662, 637, 99, 827, 929, 1916, 1673, 378, 6791, 5575, 436, 2148, 1005, 281, 216, 33, 41, 35, 36, 816, 216, 35, 38, 284, 339, 313, 281, 216, 33, 41, 35, 37, 816, 216, 35, 39, 3297, 1062, 418, 659, 424, 19393, 40954, 272, 1673, 3897, 260, 5665, 334, 3335, 3394, 29, 48, 4931, 2287, 3297, 260, 17758, 4540, 987, 8931, 260, 4097, 4051, 281, 1199, 282, 260, 33687, 12083, 411, 3085, 1673, 533, 4053, 216, 33, 41, 35, 39, 7925, 18278, 8662, 7851, 2041, 827, 43262, 282, 8015, 19393, 38271, 18285, 288, 5403, 13706, 1673, 8696, 929, 1916, 3297, 1041, 5019, 347, 260, 38773, 327, 260, 12702, 282, 260, 30734, 1215, 282, 46366, 3617, 35455, 3297, 6661, 10203, 3394, 29, 48, 329, 89, 3297, 981, 650, 1215, 3048, 288, 3085, 281, 4019, 216, 33, 41, 36, 32, 1673, 1985, 216, 33, 37, 4745, 260, 7761, 592, 10877, 288, 260, 216, 34, 268, 44375, 974, 9760, 282, 260, 216, 33, 302, 28552, 1673, 378, 17758, 592, 930, 27750, 281, 3008, 216, 33, 41, 36, 32, 281, 7060, 327, 1913, 3297, 527, 3249, 260, 15943, 282, 5004, 2271, 81, 48555, 30179, 284, 3171, 22805, 20142, 1673, 198, 198, 45, 446, 446, 2260, 2287, 3713, 446, 446, 446, 198, 198, 2427, 3085, 2585, 260, 6125, 2287, 335, 216, 40, 4645, 3297, 260, 17758, 4440, 885, 327, 260, 11948, 254, 10015, 351, 1876, 550, 11763, 4452, 284, 260, 1420, 14830, 407, 15037, 1595, 15037, 347, 9931, 3114, 327, 260, 14954, 19095, 21782, 18568, 3297, 284, 5598, 2976, 2009, 1916, 1673, 1985, 216, 33, 33, 3903, 216, 33, 41, 36, 34, 339, 313, 284, 7925, 18278, 8662, 4440, 885, 429, 480, 11297, 3958, 418, 26458, 3792, 90, 9508, 288, 5757, 260, 23775, 3179, 327, 260, 1547, 14830, 3075, 338, 761, 12353, 30685, 5378, 253, 2605, 3685, 1673, 6181, 502, 18705, 564, 1250, 441, 6063, 260, 1547, 17614, 338, 761, 7876, 260, 422, 751, 6965, 428, 3755, 335, 216, 33, 40, 4124, 1673, 198, 6307, 6341, 37918, 2534, 335, 216, 37, 2405, 3297, 665, 436, 253, 13924, 964, 30034, 281, 260, 2049, 6341, 282, 7925, 18278, 8662, 637, 99, 5312, 3274, 2838, 30, 216, 37, 338, 12954, 1062, 12466, 284, 5375, 216, 37, 33, 8612, 4065, 1673, 5148, 47122, 17703, 592, 23642, 288, 287, 1368, 260, 4422, 2892, 284, 3898, 260, 5575, 1673, 2306, 3656, 8849, 18924, 981, 527, 260, 48379, 436, 5178, 284, 7233, 411, 253, 11324, 38883, 6496, 335, 527, 1296, 20930, 216, 34, 37, 7610, 6341, 41696, 592, 17982, 1673, 1985, 216, 33, 33, 2405, 253, 12477, 281, 339, 313, 637, 99, 2838, 30, 216, 34, 2327, 3589, 12210, 281, 260, 1440, 2548, 284, 23642, 260, 2327, 3589, 1673, 2445, 656, 7698, 418, 659, 424, 3297, 1062, 7761, 3656, 15575, 7090, 216, 34, 33, 1961, 954, 1673, 12861, 277, 411, 20605, 3394, 29, 48, 23303, 35916, 15037, 26763, 45763, 3297, 260, 216, 34, 268, 44375, 974, 9760, 932, 11930, 351, 260, 18764, 316, 697, 9352, 6404, 335, 216, 34, 40, 2405, 3297, 418, 260, 1142, 655, 338, 768, 282, 260, 14811, 28552, 2585, 354, 3414, 335, 10418, 2384, 5378, 365, 18073, 25362, 2481, 1673, 198, 4948, 5598, 1478, 335, 216, 33, 36, 4019, 284, 260, 339, 58, 62, 2585, 15479, 3946, 288, 4819, 260, 3590, 17614, 351, 10439, 17614, 9648, 429, 11763, 4452, 1673, 378, 17758, 592, 5534, 327, 9538, 284, 29079, 429, 260, 7573, 335, 216, 33, 36, 4185, 281, 7060, 1673, 1069, 5502, 335, 476, 48852, 9170, 476, 1793, 260, 4277, 34002, 2585, 1673, 339, 313, 436, 9648, 418, 659, 424, 19393, 40954, 272, 429, 216, 34, 35, 5096, 288, 216, 37, 4448, 216, 33, 41, 36, 35, 284, 7925, 18278, 8662, 418, 334, 576, 2740, 19393, 40954, 272, 429, 216, 34, 2405, 288, 216, 35, 32, 4745, 1673, 198, 4582, 11915, 874, 3426, 7364, 3297, 339, 313, 436, 7064, 288, 260, 14811, 4931, 19393, 8011, 418, 19527, 1346, 9508, 284, 7851, 2041, 7207, 284, 44346, 288, 260, 14309, 3159, 418, 22555, 91, 281, 4451, 1673, 533, 4745, 260, 5575, 2585, 1891, 614, 3297, 7238, 411, 260, 7796, 5371, 7925, 18278, 8662, 260, 1695, 3531, 3297, 284, 1062, 34853, 1210, 260, 216, 34, 268, 44375, 974, 9760, 1673, 1985, 216, 33, 2405, 216, 33, 41, 36, 36, 3297, 260, 17758, 592, 10877, 288, 428, 517, 23303, 34006, 11037, 15497, 13555, 637, 99, 43175, 20220, 44237, 9760, 282, 260, 216, 35, 7212, 28552, 1673, 378, 7573, 637, 99, 216, 38, 35, 36, 373, 19393, 5097, 6404, 436, 4331, 338, 1142, 1194, 284, 4858, 624, 808, 47019, 481, 29941, 281, 3008, 4019, 1673, 198, 198, 45, 446, 446, 446, 9420, 282, 12646, 1471, 81, 22068, 446, 446, 446, 446, 198, 198, 20355, 969, 282, 6995, 284, 2754, 1307, 1828, 6899, 829, 11969, 10657, 2534, 284, 260, 7761, 805, 761, 253, 2719, 282, 216, 33, 39, 422, 36, 73, 99, 284, 216, 33, 40, 414, 33, 38, 1653, 335, 1369, 335, 216, 33, 4451, 8544, 282, 623, 3297, 805, 216, 38, 284, 216, 33, 38, 592, 10811, 3297, 7827, 1673, 378, 4931, 1252, 327, 260, 17745, 282, 260, 13933, 30118, 338, 260, 14203, 17614, 736, 325, 804, 288, 35945, 260, 1547, 14830, 3654, 2025, 429, 260, 11145, 1557, 288, 253, 2548, 837, 260, 17614, 856, 325, 12353, 411, 1666, 3394, 29, 48, 1552, 6995, 284, 260, 35183, 411, 260, 1532, 282, 260, 339, 58, 62, 1673, 378, 550, 14830, 1512, 2119, 592, 441, 281, 1083, 1365, 3040, 284, 260, 4931, 4041, 288, 10756, 260, 6995, 32900, 327, 722, 1523, 260, 1547, 17614, 1673, 378, 20220, 44237, 9760, 436, 8002, 288, 260, 7453, 9618, 656, 260, 3588, 282, 20605, 23303, 530, 271, 369, 315, 15037, 28508, 10734, 284, 260, 17758, 23217, 429, 718, 1317, 9508, 335, 216, 34, 32, 4451, 1673, 1985, 260, 5738, 282, 216, 34, 36, 4451, 3297, 260, 12785, 282, 260, 1443, 6995, 16717, 592, 7876, 288, 3414, 260, 1547, 17614, 347, 253, 27366, 1673, 1069, 28106, 787, 3055, 284, 2952, 260, 3913, 288, 3179, 281, 260, 4376, 429, 527, 502, 761, 12353, 1673, 378, 3913, 5087, 16671, 260, 4931, 17614, 418, 216, 33, 38, 1577, 216, 36, 32, 3297, 634, 216, 34, 32, 32, 4158, 365, 216, 35, 34, 32, 6381, 2481, 6251, 282, 12646, 1471, 81, 22068, 3297, 260, 24153, 8618, 282, 12196, 33502, 1673, 378, 1547, 17614, 592, 2824, 578, 284, 357, 436, 1035, 3008, 281, 260, 1194, 288, 7198, 354, 253, 729, 431, 396, 3297, 588, 23303, 4967, 407, 2140, 105, 3297, 15696, 282, 260, 11961, 28552, 4041, 288, 2389, 650, 17614, 281, 253, 2548, 288, 3414, 260, 1695, 5738, 1673, 28508, 10734, 19275, 1740, 981, 260, 3163, 3297, 7536, 16517, 338, 260, 3913, 736, 1066, 1272, 4081, 1673, 198, 5788, 502, 761, 3590, 2770, 981, 260, 3163, 3297, 260, 3913, 1250, 1042, 260, 4931, 17614, 418, 216, 32, 39, 1577, 216, 35, 37, 1673, 1069, 761, 2221, 7876, 354, 253, 729, 431, 396, 282, 216, 33, 40, 32, 6995, 338, 436, 23440, 216, 37, 32, 4158, 365, 216, 40, 32, 6381, 2481, 5976, 282, 260, 1547, 17614, 979, 7003, 327, 260, 4931, 7761, 288, 325, 3807, 1673, 669, 436, 915, 260, 808, 282, 253, 2719, 282, 2531, 253, 729, 431, 5908, 338, 260, 3913, 7876, 338, 1194, 1673, 378, 17758, 592, 441, 7100, 6934, 411, 260, 1584, 253, 729, 431, 5908, 527, 359, 7281, 335, 260, 1528, 637, 99, 6995, 17614, 1673, 339, 313, 8571, 288, 457, 7419, 1187, 2531, 19095, 4696, 32587, 429, 260, 1796, 6053, 284, 582, 1165, 8958, 43555, 483, 335, 5312, 3274, 2838, 30, 216, 34, 1673, 7925, 18278, 8662, 436, 18674, 7824, 411, 2141, 39640, 338, 27657, 634, 23634, 40435, 281, 874, 42159, 284, 13874, 874, 2076, 20801, 351, 9452, 27681, 1673, 2306, 2637, 335, 253, 216, 37, 3394, 29, 48, 3815, 1398, 338, 436, 3112, 19611, 1092, 1041, 436, 8885, 288, 8658, 260, 29240, 1007, 14830, 678, 12771, 18219, 288, 2950, 1673, 3488, 3110, 436, 23775, 284, 678, 12771, 18219, 761, 288, 325, 11268, 288, 874, 11424, 1673, 198, 57, 313, 436, 12353, 411, 216, 40, 32, 3394, 29, 48, 12365, 6995, 429, 260, 8629, 6053, 3297, 564, 502, 6344, 288, 39954, 750, 3199, 3055, 1673, 2306, 45528, 2984, 216, 33, 33, 30596, 2586, 284, 436, 805, 5380, 411, 253, 8958, 2268, 3297, 335, 260, 42159, 578, 4265, 282, 260, 2399, 47019, 481, 1673, 2015, 216, 35, 36, 550, 20356, 2141, 13228, 874, 3297, 27383, 874, 351, 9452, 27681, 284, 20485, 1915, 634, 23634, 10859, 338, 11587, 634, 3977, 2664, 284, 2952, 21819, 281, 874, 2399, 24794, 10357, 1673, 2445, 354, 3018, 2719, 282, 874, 20073, 314, 441, 1770, 3297, 357, 553, 719, 5183, 338, 216, 37, 1800, 592, 5375, 284, 634, 216, 33, 33, 33, 816, 216, 33, 34, 33, 8612, 4065, 592, 15408, 981, 451, 3414, 1673, 7925, 18278, 8662, 436, 551, 44723, 12353, 411, 354, 1547, 22679, 418, 216, 33, 40, 1577, 216, 36, 35, 1673, 16155, 216, 33, 41, 1577, 216, 32, 32, 28508, 10734, 3485, 563, 253, 3075, 282, 45655, 284, 2653, 18359, 338, 19036, 767, 260, 4931, 45655, 9777, 5852, 12977, 429, 634, 282, 260, 17614, 3590, 3685, 281, 260, 1194, 284, 29409, 678, 12771, 18219, 1673, 909, 8885, 260, 20220, 44237, 9760, 288, 8535, 1740, 284, 4555, 260, 3913, 3297, 564, 260, 11763, 4452, 592, 7168, 288, 1042, 601, 3297, 284, 28508, 10734, 8885, 601, 288, 8535, 1740, 284, 1680, 327, 2438, 8119, 18811, 230, 1595, 9508, 1673, 1550, 502, 6612, 335, 216, 34, 39, 4451, 3297, 28508, 10734, 10877, 288, 7925, 18278, 8662, 284, 15996, 18207, 650, 7048, 16717, 874, 1673, 2445, 430, 7410, 327, 659, 424, 3297, 260, 7573, 436, 551, 44723, 12353, 411, 1372, 22679, 1673, 198, 788, 1584, 4745, 260, 47019, 8071, 592, 5178, 429, 1062, 7761, 3297, 284, 502, 13049, 7207, 284, 44346, 1916, 338, 3531, 1673, 2445, 430, 7410, 502, 592, 36587, 288, 260, 13872, 261, 318, 10015, 1980, 4631, 282, 4591, 1512, 27632, 418, 35288, 1673, 2550, 767, 3394, 29, 48, 15299, 480, 16545, 3297, 502, 23217, 327, 38580, 8662, 5378, 3297, 2141, 14078, 3297, 335, 216, 34, 32, 4745, 1673, 1069, 10877, 288, 5784, 27365, 88, 5943, 3297, 3432, 1218, 3973, 1787, 284, 7925, 18278, 8662, 2163, 38773, 282, 260, 216, 37, 373, 28552, 665, 335, 216, 33, 36, 4645, 1673, 378, 7573, 23217, 327, 14078, 335, 216, 35, 32, 4645, 284, 20605, 23303, 659, 12771, 1299, 489, 1541, 9508, 10877, 650, 7048, 288, 260, 1420, 2653, 14793, 18811, 230, 105, 25414, 335, 10898, 665, 260, 1695, 1194, 1673, 378, 7573, 3675, 24446, 288, 38580, 8662, 1673, 4781, 8176, 1003, 288, 3085, 436, 14774, 411, 5926, 411, 260, 1547, 11961, 28552, 335, 7591, 281, 1218, 3973, 1787, 284, 5677, 3275, 338, 29409, 827, 2664, 7837, 366, 338, 592, 5492, 288, 44885, 260, 7573, 1673, 198, 504, 339, 58, 62, 965, 4041, 288, 722, 260, 17758, 284, 480, 23680, 1875, 288, 2635, 253, 3509, 282, 34962, 3297, 12547, 3297, 18435, 284, 550, 8092, 7693, 1056, 288, 3085, 990, 260, 1547, 17614, 27720, 260, 2582, 3275, 6427, 365, 18073, 659, 7416, 2481, 1673, 1069, 13049, 480, 265, 938, 2586, 3616, 335, 216, 38, 5096, 418, 14078, 284, 27720, 1876, 2009, 1916, 1673, 4420, 7980, 634, 216, 33, 3394, 28, 48, 216, 33, 37, 32, 2664, 4385, 3620, 3297, 502, 592, 23680, 8146, 411, 18811, 230, 105, 25414, 284, 1296, 45655, 1673, 6069, 36132, 4931, 5171, 6247, 6405, 260, 4931, 1252, 288, 260, 23988, 3297, 284, 216, 33, 37, 30524, 592, 17982, 1683, 480, 16890, 7410, 281, 354, 3110, 288, 21588, 284, 14864, 260, 7761, 1673, 1117, 3171, 216, 33, 33, 592, 4935, 618, 2548, 979, 260, 1528, 436, 430, 7410, 3297, 564, 805, 1296, 592, 5354, 1730, 288, 3414, 1673, 1943, 282, 601, 592, 3424, 1092, 260, 4931, 5388, 659, 424, 335, 216, 34, 32, 5096, 1673, 378, 20220, 44237, 9760, 436, 43048, 277, 335, 216, 33, 3903, 284, 260, 17758, 592, 3954, 288, 216, 33, 302, 8014, 13398, 7761, 1673, 1985, 216, 33, 41, 3903, 659, 424, 436, 12353, 411, 6995, 429, 15600, 9618, 216, 37, 40, 284, 7925, 18278, 8662, 436, 5380, 1296, 1711, 411, 20356, 338, 5375, 216, 35, 39, 1800, 284, 15408, 216, 37, 34, 1673, 3488, 6341, 2776, 8571, 288, 457, 7419, 1187, 582, 1547, 4696, 36041, 981, 260, 3414, 1673, 339, 313, 436, 5380, 6757, 981, 260, 3414, 3297, 564, 874, 20073, 3297, 585, 750, 3297, 359, 6552, 1673, 198, 504, 7761, 592, 4642, 618, 12722, 22805, 9513, 690, 260, 1867, 1545, 2704, 3551, 357, 1631, 277, 601, 1838, 645, 502, 592, 12353, 1163, 411, 1547, 14830, 6995, 281, 4185, 1673, 1985, 260, 216, 34, 36, 373, 339, 313, 436, 10856, 411, 2531, 20356, 284, 2141, 13228, 2701, 1711, 8544, 511, 3783, 1041, 3590, 216, 37, 32, 8612, 4065, 5375, 284, 800, 1449, 15408, 1673, 378, 20356, 2841, 3824, 21819, 284, 339, 313, 2585, 288, 5767, 411, 260, 5760, 3297, 3551, 1041, 436, 5598, 288, 354, 908, 902, 299, 990, 1296, 3394, 29, 48, 2009, 20858, 1673, 7925, 18278, 8662, 436, 253, 3003, 1593, 282, 260, 3414, 284, 1041, 3656, 216, 33, 32, 1454, 15743, 284, 614, 288, 216, 35, 32, 2141, 39640, 1673, 2306, 436, 17279, 7824, 351, 634, 216, 34, 32, 32, 3394, 29, 48, 12365, 8612, 4065, 5375, 284, 216, 38, 32, 32, 15408, 981, 260, 3414, 1673, 2306, 6351, 983, 1283, 690, 260, 1867, 827, 2009, 284, 436, 441, 12353, 645, 260, 3913, 5598, 1876, 2009, 1916, 1673, 669, 655, 357, 436, 339, 313, 637, 99, 1607, 284, 1041, 436, 10856, 216, 33, 33, 355, 540, 1711, 351, 800, 2141, 39640, 338, 1830, 874, 335, 260, 4869, 281, 12120, 913, 351, 253, 216, 33, 37, 3815, 1398, 1673, 378, 17758, 592, 10856, 767, 260, 10400, 5516, 281, 4745, 284, 480, 16285, 3321, 592, 16638, 4194, 990, 260, 1913, 1673, 1116, 198, 45, 15992, 37041, 28837, 446, 198, 198, 29604, 36836, 476, 15992, 476, 37041, 28837, 365, 4053, 216, 34, 33, 3297, 216, 33, 41, 34, 38, 816, 4645, 216, 37, 3297, 216, 33, 41, 41, 36, 2481, 436, 354, 1547, 13159, 7081, 284, 253, 20532, 8552, 2932, 41607, 327, 260, 1623, 26998, 288, 408, 3277, 50, 3394, 29, 48, 7372, 281, 26264, 1673, 909, 4944, 4708, 13159, 327, 260, 1638, 282, 9754, 19481, 331, 884, 281, 216, 33, 41, 36, 36, 284, 429, 216, 33, 41, 36, 38, 288, 216, 33, 41, 36, 40, 1673, 909, 436, 253, 12286, 5719, 418, 1112, 335, 260, 216, 33, 41, 36, 40, 5242, 37155, 2018, 3394, 29, 48, 2493, 12733, 1673, 37041, 28837, 4944, 24603, 281, 260, 2071, 37155, 12406, 365, 47185, 2481, 351, 260, 20020, 450, 438, 327, 582, 3645, 281, 216, 33, 41, 37, 32, 1673, 2550, 42952, 429, 13159, 384, 9700, 281, 26264, 284, 2163, 253, 5288, 2932, 41607, 1673, 909, 4147, 347, 253, 2380, 5189, 1508, 284, 347, 253, 1238, 3394, 29, 48, 411, 3394, 29, 48, 1238, 2521, 1353, 1704, 327, 260, 26264, 17489, 99, 1673, 909, 17475, 1461, 8552, 284, 5171, 5288, 2744, 284, 436, 4380, 24223, 277, 618, 260, 26264, 14704, 36179, 8501, 282, 40241, 1673, 198, 788, 4708, 3297, 384, 2842, 260, 8095, 13673, 10442, 281, 2244, 3645, 7539, 438, 981, 650, 8299, 713, 284, 932, 9754, 19481, 331, 884, 7539, 438, 4585, 327, 1062, 4795, 5895, 4488, 284, 2244, 3394, 29, 48, 3645, 5895, 28216, 1673, 909, 761, 597, 719, 253, 9754, 4264, 3056, 18651, 38151, 4846, 365, 35239, 4988, 49, 2481, 1215, 21033, 281, 1062, 18120, 284, 4320, 284, 1955, 1673, 2736, 4708, 4795, 436, 25344, 411, 2260, 2287, 3713, 2754, 3297, 284, 650, 904, 1125, 4795, 436, 597, 3900, 411, 260, 1913, 1568, 288, 260, 35239, 4988, 49, 637, 99, 43220, 282, 1215, 24772, 4452, 281, 511, 5288, 281, 216, 33, 41, 36, 35, 1673, 198, 198, 45, 446, 4264, 1125, 446, 446, 198, 198, 66, 342, 28837, 436, 3988, 281, 9133, 395, 2393, 3297, 9754, 3297, 284, 5489, 281, 15275, 332, 1437, 568, 3297, 9754, 1092, 650, 1564, 4935, 288, 33907, 254, 912, 3297, 9754, 1673, 37041, 28837, 436, 253, 4870, 17818, 418, 33907, 254, 912, 637, 99, 13706, 8673, 4264, 3056, 281, 13159, 3297, 18120, 3297, 284, 4320, 284, 1955, 1673, 533, 216, 33, 41, 36, 35, 3297, 9754, 43619, 8005, 904, 1125, 42555, 281, 511, 5288, 1568, 288, 2260, 2287, 3713, 3297, 284, 502, 1250, 441, 1003, 1793, 260, 2332, 282, 216, 33, 41, 36, 36, 1673, 533, 216, 33, 41, 36, 36, 3297, 384, 2842, 13706, 8673, 4264, 288, 260, 35239, 4988, 49, 5397, 330, 904, 1125, 18120, 47176, 365, 690, 15275, 332, 1437, 568, 5573, 4264, 3056, 2481, 3297, 21190, 216, 34, 36, 2876, 3297, 1285, 216, 33, 39, 281, 260, 1796, 2745, 3297, 282, 260, 47176, 3133, 1673, 37041, 28837, 436, 597, 260, 1215, 21033, 281, 216, 33, 41, 36, 36, 281, 1062, 260, 7419, 1830, 216, 36, 38, 3282, 216, 33, 33, 6439, 365, 216, 33, 36, 3394, 30, 48, 216, 35, 32, 283, 2481, 284, 904, 7379, 216, 37, 3282, 216, 40, 3394, 30, 48, 216, 37, 6439, 365, 216, 33, 3394, 30, 48, 216, 39, 36, 283, 2481, 1673, 909, 597, 2842, 13706, 8673, 281, 13159, 3297, 284, 650, 904, 1125, 18198, 359, 11364, 281, 44921, 1577, 378, 1463, 282, 33907, 254, 912, 4392, 5288, 411, 10262, 312, 1111, 365, 11131, 2113, 389, 32, 32, 32, 38, 42177, 41, 74, 38, 2481, 3297, 527, 314, 253, 1863, 335, 904, 1125, 5288, 281, 33907, 254, 912, 4392, 3297, 9754, 1673, 37041, 28837, 436, 3365, 2018, 2888, 281, 13159, 3297, 18120, 284, 4320, 1673, 198, 1589, 314, 34305, 338, 37041, 28837, 436, 3988, 281, 9133, 395, 2393, 3297, 9754, 281, 216, 33, 41, 34, 38, 327, 1545, 3710, 1673, 25617, 9133, 395, 2393, 25260, 37041, 28837, 347, 354, 2018, 3394, 29, 48, 1547, 1112, 335, 260, 1638, 282, 9754, 13159, 2299, 1673, 9133, 395, 2393, 761, 43723, 347, 253, 10325, 282, 33907, 254, 912, 4392, 281, 35239, 4988, 49, 6445, 1673, 9133, 395, 2393, 11557, 1546, 13159, 18198, 281, 216, 33, 41, 34, 38, 1625, 216, 33, 41, 34, 38, 253, 1546, 713, 327, 3930, 347, 876, 1673, 47881, 2018, 3394, 29, 48, 1547, 3559, 347, 354, 1112, 418, 9754, 736, 325, 37041, 28837, 637, 99, 1867, 1833, 990, 2098, 2132, 281, 35239, 4988, 49, 6445, 1673, 198, 198, 45, 446, 5242, 446, 446, 198, 198, 788, 260, 2332, 282, 216, 33, 41, 36, 36, 3297, 37041, 28837, 17660, 418, 260, 1638, 282, 9754, 1673, 378, 1797, 4063, 24865, 6109, 7674, 253, 3865, 2524, 563, 37041, 28837, 281, 4448, 216, 33, 41, 36, 36, 338, 6572, 347, 5558, 1577, 476, 5839, 1109, 1112, 553, 1135, 650, 5796, 335, 260, 8095, 13673, 13159, 15361, 281, 260, 1055, 282, 15992, 37041, 28837, 3297, 216, 33, 40, 3394, 29, 48, 713, 3394, 29, 48, 1573, 9754, 46892, 1673, 5081, 588, 1129, 253, 1109, 15663, 1112, 2216, 1683, 3297, 253, 7081, 617, 553, 288, 835, 638, 288, 1238, 7991, 3297, 564, 617, 553, 260, 1782, 3547, 3297, 5423, 3643, 3297, 4614, 284, 2066, 3288, 338, 314, 260, 1489, 282, 354, 14620, 1301, 17257, 1673, 37041, 28837, 553, 8259, 2766, 288, 338, 14404, 1673, 330, 10918, 3394, 29, 48, 1609, 5776, 216, 33, 40, 32, 3394, 29, 48, 16776, 46892, 429, 33907, 254, 912, 3297, 5159, 1673, 3297, 37041, 26172, 314, 1036, 1654, 13566, 347, 260, 8095, 13673, 637, 99, 1867, 637, 46892, 14634, 1673, 637, 476, 1032, 253, 46892, 3297, 384, 8041, 827, 5895, 4488, 10466, 281, 650, 808, 4708, 13159, 3133, 1523, 15687, 1673, 533, 354, 2524, 14089, 476, 36070, 284, 312, 21364, 3297, 476, 5885, 3213, 335, 37041, 28837, 637, 99, 2851, 1577, 476, 3513, 260, 1443, 6984, 2221, 281, 2353, 3297, 9754, 637, 99, 11094, 43780, 260, 46892, 13095, 10652, 381, 1596, 2605, 411, 12707, 480, 1440, 259, 3297, 216, 33, 34, 731, 1141, 3394, 29, 48, 216, 39, 3297, 1523, 260, 1837, 15687, 1268, 1287, 912, 538, 365, 19393, 3000, 3394, 29, 48, 19827, 2481, 8544, 216, 38, 3394, 29, 48, 11083, 1673, 216, 36, 20030, 1483, 7135, 15992, 37041, 28837, 8041, 10466, 284, 7674, 327, 1062, 9754, 5895, 28216, 1673, 476, 198, 66, 342, 28837, 637, 99, 4708, 4795, 436, 25344, 411, 2260, 2287, 3713, 2754, 281, 260, 1797, 1918, 10400, 3297, 564, 990, 6782, 260, 216, 33, 41, 36, 37, 3645, 3297, 384, 5598, 288, 1238, 327, 260, 19481, 331, 884, 429, 216, 33, 41, 36, 38, 288, 216, 33, 41, 36, 40, 1673, 37041, 28837, 4944, 327, 260, 19481, 331, 884, 281, 19996, 3423, 721, 85, 483, 2071, 36167, 974, 12064, 281, 216, 33, 41, 36, 39, 284, 216, 33, 41, 36, 40, 1673, 909, 2841, 7462, 4252, 327, 260, 216, 33, 41, 36, 39, 2299, 1673, 378, 216, 33, 41, 36, 39, 2299, 5124, 288, 347, 476, 9754, 637, 99, 7473, 6840, 5074, 476, 314, 2500, 288, 325, 260, 6250, 1638, 282, 9754, 13159, 2299, 282, 511, 655, 1673, 37041, 26172, 284, 31500, 368, 17977, 13808, 761, 260, 9748, 347, 260, 2299, 4786, 544, 33759, 1673, 3897, 260, 216, 33, 41, 36, 39, 3133, 1523, 13065, 3297, 37041, 28837, 2841, 8743, 6247, 327, 260, 13878, 7658, 1673, 13065, 637, 99, 23802, 39769, 288, 6229, 3297, 617, 476, 22476, 1007, 260, 19481, 331, 884, 6442, 564, 2093, 8041, 480, 555, 1673, 476, 37041, 28837, 3675, 288, 26083, 854, 13878, 2008, 6247, 3297, 347, 37041, 28837, 637, 99, 36306, 31058, 418, 650, 9992, 1673, 533, 260, 4450, 216, 33, 3297, 216, 33, 41, 36, 40, 15090, 33926, 338, 3645, 3297, 9754, 18221, 288, 253, 216, 36, 41, 816, 216, 32, 9970, 690, 46449, 3297, 284, 502, 578, 87, 1832, 260, 17552, 90, 487, 216, 36, 41, 33, 17535, 288, 216, 33, 35, 35, 1673, 37041, 28837, 8041, 253, 216, 34, 41, 3394, 29, 48, 13366, 1301, 327, 260, 3133, 637, 99, 3403, 6581, 1673, 198, 788, 260, 216, 33, 41, 36, 40, 47176, 3645, 3297, 37041, 28837, 22440, 4475, 5895, 28216, 3297, 8041, 216, 34, 34, 10466, 3297, 284, 6233, 216, 38, 33, 32, 17535, 365, 216, 37, 32, 40, 7418, 284, 216, 33, 32, 34, 31553, 2481, 1673, 37041, 28837, 436, 260, 1796, 4919, 21190, 1112, 281, 260, 3442, 281, 216, 33, 41, 36, 40, 3297, 284, 384, 436, 253, 12286, 2018, 3394, 29, 48, 1547, 347, 253, 8299, 3297, 1036, 5534, 347, 808, 2299, 335, 7462, 282, 260, 216, 33, 33, 2018, 3394, 29, 48, 1547, 6984, 1673, 37041, 28837, 2842, 260, 8095, 13673, 281, 7539, 438, 1673, 198, 5788, 37041, 28837, 7721, 8629, 1486, 3921, 10989, 909, 918, 276, 14567, 281, 216, 33, 41, 36, 40, 3297, 384, 1250, 441, 9199, 1486, 260, 1466, 4475, 1673, 1428, 7107, 3297, 36702, 34593, 1112, 13697, 16159, 3763, 260, 909, 918, 276, 312, 15220, 281, 216, 33, 41, 36, 41, 564, 1135, 805, 4475, 282, 260, 216, 33, 33, 2018, 3394, 29, 48, 1547, 6984, 1673, 657, 314, 441, 2437, 1701, 37041, 28837, 1250, 441, 9199, 2061, 1673, 1423, 3297, 357, 314, 7699, 2437, 338, 7807, 1781, 608, 366, 282, 338, 5741, 761, 253, 8542, 1523, 9754, 1673, 533, 260, 20867, 4063, 3083, 418, 260, 1112, 282, 260, 216, 33, 41, 36, 39, 3645, 3297, 260, 36702, 34593, 38136, 8335, 592, 18548, 5976, 282, 260, 1638, 282, 9754, 3297, 1239, 1062, 6984, 592, 3423, 721, 85, 483, 1673, 2015, 5332, 338, 897, 7194, 6594, 24884, 761, 17845, 327, 36702, 34593, 3297, 527, 761, 2408, 288, 12131, 3297, 6570, 1296, 282, 9754, 637, 99, 4870, 6393, 365, 8363, 25666, 3297, 12228, 16612, 631, 17895, 3297, 284, 17977, 13808, 2481, 592, 3486, 3394, 29, 48, 1547, 1673, 378, 7194, 2764, 10999, 908, 288, 8034, 4252, 1523, 2764, 338, 4944, 3486, 3394, 29, 48, 1547, 6393, 1673, 198, 66, 342, 28837, 436, 2500, 582, 282, 260, 6250, 19481, 331, 462, 637, 99, 282, 260, 216, 33, 41, 36, 32, 99, 1673, 533, 1876, 12064, 351, 260, 9754, 19481, 331, 884, 3297, 37041, 28837, 4944, 281, 216, 35, 34, 4252, 284, 761, 690, 216, 33, 3394, 28, 48, 216, 32, 32, 32, 17535, 282, 2719, 23802, 1673, 37041, 28837, 3408, 260, 1638, 282, 9754, 637, 99, 2244, 3645, 284, 4795, 2004, 327, 5895, 4488, 7539, 438, 365, 4475, 281, 253, 3645, 8544, 25635, 4795, 2481, 1793, 650, 4585, 592, 6792, 411, 18182, 20735, 281, 216, 33, 41, 40, 32, 1673, 198, 198, 45, 446, 15162, 4795, 446, 446, 198, 198, 788, 216, 33, 41, 36, 40, 3297, 37041, 28837, 436, 28330, 411, 260, 11554, 414, 22931, 281, 260, 216, 33, 37, 373, 5075, 282, 260, 47185, 10049, 3297, 284, 384, 436, 597, 28330, 411, 260, 1315, 2863, 23635, 396, 266, 282, 260, 2018, 3394, 29, 48, 2493, 37155, 10442, 1673, 909, 761, 5492, 288, 1238, 281, 216, 33, 41, 36, 41, 351, 260, 23635, 396, 266, 3297, 564, 8845, 253, 10929, 5128, 281, 253, 2180, 6094, 327, 260, 4053, 216, 33, 41, 36, 41, 8027, 5242, 2018, 3394, 29, 48, 9901, 12444, 1673, 4063, 6098, 418, 260, 655, 5332, 338, 260, 5128, 476, 523, 3105, 1446, 1272, 578, 282, 348, 13159, 511, 3645, 3297, 585, 441, 9816, 1673, 476, 378, 9208, 2842, 288, 253, 6866, 347, 288, 1991, 47185, 5139, 868, 476, 2753, 480, 1800, 429, 4464, 351, 260, 4708, 511, 3394, 29, 48, 5703, 1673, 476, 198, 66, 342, 28837, 16176, 253, 2288, 418, 408, 58, 66, 5171, 281, 20020, 3297, 564, 384, 2049, 650, 7807, 1513, 1738, 637, 99, 2288, 288, 5757, 260, 20020, 450, 438, 1673, 533, 260, 216, 33, 41, 37, 32, 47185, 3645, 3297, 37041, 28837, 2422, 1056, 429, 650, 5128, 288, 1238, 327, 260, 20020, 450, 438, 1673, 909, 4944, 281, 216, 33, 34, 4252, 284, 761, 3772, 7539, 438, 327, 216, 41, 38, 17535, 284, 582, 5895, 4488, 327, 260, 216, 33, 41, 37, 32, 450, 438, 1673, 37041, 28837, 20783, 338, 650, 4464, 655, 351, 260, 450, 438, 436, 3435, 975, 260, 450, 438, 597, 8239, 216, 33, 41, 36, 41, 909, 918, 276, 312, 15220, 18689, 13697, 16159, 3297, 617, 4944, 260, 1142, 2548, 1673, 198, 788, 2405, 216, 33, 41, 37, 33, 3297, 384, 8195, 384, 436, 42952, 429, 3544, 13159, 288, 1438, 5288, 6510, 418, 253, 5171, 5729, 281, 26264, 1673, 909, 436, 16816, 347, 253, 7807, 1513, 1738, 411, 408, 50, 2680, 365, 1209, 1343, 347, 408, 3277, 50, 2481, 3297, 527, 761, 915, 2841, 260, 808, 8552, 5729, 281, 26264, 284, 260, 805, 582, 6992, 7194, 13181, 1673, 669, 436, 354, 1584, 327, 341, 618, 8552, 411, 260, 26264, 39881, 6231, 1673, 533, 260, 216, 33, 41, 37, 32, 99, 3297, 37041, 28837, 17475, 253, 2378, 8253, 1138, 1217, 476, 2959, 637, 99, 13915, 15278, 476, 281, 26264, 284, 597, 31652, 354, 1584, 5738, 3388, 1578, 1673, 909, 597, 4147, 327, 408, 50, 2680, 365, 10974, 2481, 284, 408, 50, 2680, 365, 26478, 2481, 284, 347, 260, 31262, 4374, 2521, 1353, 1704, 327, 26264, 389, 1411, 4252, 1683, 351, 10453, 13988, 3297, 260, 986, 655, 389, 1411, 1238, 3394, 29, 48, 411, 3394, 29, 48, 1238, 2521, 1353, 1704, 1673, 533, 1706, 3297, 384, 5019, 347, 260, 1238, 3394, 29, 48, 411, 3394, 29, 48, 1238, 2521, 1353, 1704, 327, 260, 1638, 282, 26264, 17489, 99, 13159, 2299, 1673, 1032, 253, 5171, 2932, 41607, 3297, 384, 314, 13380, 327, 1495, 8064, 429, 20807, 4631, 3297, 288, 216, 33, 39, 929, 4048, 282, 476, 46456, 1814, 1841, 476, 2774, 2330, 429, 1461, 1679, 14389, 3297, 288, 216, 34, 39, 929, 347, 260, 408, 50, 2680, 3394, 29, 48, 10974, 2018, 14961, 11890, 3167, 1673, 198, 4582, 216, 35, 32, 929, 351, 408, 50, 2680, 284, 253, 1363, 281, 9107, 327, 260, 5729, 3297, 650, 1138, 436, 7233, 351, 260, 40995, 8621, 637, 99, 378, 29810, 3261, 11890, 1673, 533, 260, 216, 33, 41, 40, 32, 99, 3297, 37041, 28837, 5309, 9353, 418, 26264, 637, 99, 2101, 636, 290, 5242, 284, 5019, 347, 253, 937, 544, 18370, 335, 4837, 42685, 637, 99, 5171, 5729, 26587, 21040, 365, 1209, 408, 14503, 74, 2481, 1673, 909, 597, 3459, 18280, 327, 26264, 39881, 6231, 32444, 3297, 26264, 21363, 7887, 3394, 29, 48, 16405, 1673, 37041, 28837, 637, 99, 3403, 13563, 436, 29216, 4392, 3297, 617, 16816, 1272, 347, 354, 281, 23183, 2534, 12541, 418, 260, 29216, 4392, 4618, 8676, 272, 29456, 1673, 198, 66, 342, 28837, 436, 41797, 3095, 24223, 277, 618, 260, 26264, 14704, 36179, 8501, 282, 40241, 281, 4448, 216, 34, 32, 32, 39, 1673, 909, 436, 1836, 260, 13578, 7351, 16082, 527, 314, 10261, 327, 476, 967, 617, 1250, 357, 808, 3297, 260, 701, 617, 761, 787, 2191, 288, 1066, 1673, 476, 378, 8501, 282, 40241, 7710, 436, 4529, 288, 37041, 28837, 637, 99, 6221, 3297, 12405, 1673, 533, 874, 9530, 4778, 3297, 12405, 37041, 28837, 4537, 338, 4435, 511, 282, 874, 3008, 8360, 637, 99, 11076, 3297, 665, 436, 582, 2775, 384, 761, 2093, 3656, 1577, 476, 909, 761, 253, 1109, 4795, 3297, 564, 384, 2093, 761, 253, 47922, 1673, 1350, 1209, 384, 553, 1673, 476, 198, 198, 45, 446, 7862, 446, 446, 198, 198, 66, 342, 28837, 4161, 216, 35, 39, 282, 650, 929, 281, 26264, 1673, 2736, 6221, 3297, 260, 4302, 12405, 18803, 3297, 436, 260, 1680, 282, 260, 26264, 530, 1411, 19898, 290, 16942, 645, 502, 1278, 1673, 37041, 28837, 3297, 617, 436, 11663, 411, 1296, 11393, 3297, 365, 16677, 330, 30, 3297, 25509, 428, 30, 3297, 284, 20473, 428, 30, 2481, 582, 7388, 365, 48183, 530, 30, 1712, 86, 2481, 284, 827, 31600, 3297, 4242, 281, 4332, 1846, 44282, 14978, 3297, 1315, 2863, 281, 4645, 216, 33, 41, 41, 36, 8544, 384, 436, 216, 38, 40, 929, 1573, 1673, 37766, 436, 253, 216, 33, 41, 40, 40, 808, 2299, 13159, 2018, 3394, 29, 48, 4641, 1315, 2863, 1761, 2676, 259, 327, 48384, 4264, 3056, 1673, 1116, 198, 45, 216, 33, 41, 35, 35, 34247, 9103, 18426, 446, 198, 198, 504, 216, 33, 41, 35, 35, 34247, 9103, 18426, 436, 260, 1796, 3394, 29, 48, 768, 7902, 8941, 36860, 288, 9422, 260, 1797, 1918, 981, 260, 3212, 216, 33, 41, 35, 35, 8464, 18426, 3645, 1673, 378, 39664, 8941, 5670, 3297, 11397, 18426, 3297, 284, 260, 3464, 1739, 18426, 282, 260, 3645, 3297, 357, 4331, 6251, 3394, 29, 48, 19449, 282, 260, 2250, 846, 477, 10015, 335, 4053, 216, 35, 33, 1673, 378, 8941, 5670, 4935, 5645, 5846, 3394, 29, 48, 19068, 959, 3297, 18348, 11395, 4318, 288, 253, 18426, 1673, 657, 8735, 8056, 11113, 282, 216, 33, 36, 32, 4158, 567, 5353, 365, 216, 34, 34, 37, 6381, 2272, 294, 2481, 284, 4180, 690, 12221, 282, 260, 44057, 335, 4448, 216, 35, 3297, 1285, 14913, 316, 42456, 284, 39262, 5378, 3297, 4439, 3523, 3055, 288, 6020, 3297, 4789, 3297, 284, 5730, 1673, 6234, 99, 690, 216, 33, 32, 32, 20157, 365, 216, 33, 38, 33, 6381, 2272, 294, 2481, 3900, 800, 8588, 281, 624, 2050, 3297, 2117, 967, 338, 10342, 624, 3712, 3297, 284, 800, 356, 280, 1099, 592, 30499, 1673, 198, 7871, 7833, 3297, 357, 17018, 284, 1135, 47294, 418, 14713, 3297, 7162, 3297, 1584, 335, 4448, 216, 36, 351, 11113, 282, 216, 33, 34, 37, 20157, 365, 216, 34, 32, 33, 6381, 2272, 294, 2481, 1673, 378, 18426, 4935, 1699, 260, 1215, 3297, 7685, 2141, 46384, 1092, 4138, 618, 9813, 284, 26253, 674, 1673, 533, 7162, 3297, 260, 1837, 11113, 282, 260, 36860, 32117, 4789, 767, 480, 12617, 3297, 284, 3824, 3417, 592, 348, 1321, 483, 281, 21022, 48212, 1673, 378, 34247, 9103, 2695, 3656, 260, 768, 6656, 8040, 3297, 284, 23602, 3297, 14713, 3297, 284, 8272, 40140, 592, 7100, 7824, 1673, 533, 1219, 3297, 260, 36860, 17018, 5645, 564, 3281, 34049, 9512, 5109, 282, 5249, 3297, 4439, 253, 2156, 288, 11388, 2141, 46384, 1673, 378, 5670, 2952, 1885, 216, 35, 2215, 281, 3055, 365, 216, 33, 41, 35, 35, 25188, 2481, 990, 12745, 355, 17771, 216, 38, 3394, 28, 48, 216, 40, 36, 40, 4711, 1673, 198, 3706, 15022, 3297, 260, 5670, 5380, 7162, 1181, 670, 216, 34, 36, 2737, 1092, 1372, 1739, 18426, 12422, 216, 33, 34, 37, 3394, 29, 48, 12264, 3394, 29, 48, 567, 3394, 29, 48, 5353, 365, 216, 34, 32, 33, 6381, 2272, 294, 2481, 11113, 10856, 2582, 5778, 8544, 2093, 457, 827, 1739, 38280, 5380, 260, 1797, 1918, 281, 715, 2800, 17940, 1673, 198, 198, 45, 446, 39222, 1463, 446, 446, 198, 198, 504, 8285, 282, 260, 18426, 592, 429, 253, 8941, 6053, 338, 6482, 42832, 253, 8941, 4859, 335, 4053, 216, 34, 39, 3297, 3551, 665, 436, 8624, 940, 690, 260, 1867, 1443, 2009, 347, 357, 22678, 288, 260, 5846, 3394, 29, 48, 19068, 1673, 1985, 4053, 216, 35, 33, 3297, 253, 6154, 5575, 3213, 310, 1121, 3075, 11113, 3297, 527, 8217, 338, 253, 8941, 5670, 761, 2452, 288, 260, 6251, 3394, 29, 48, 19449, 282, 260, 42514, 3778, 15343, 1673, 10098, 335, 16186, 3297, 357, 314, 5183, 260, 5670, 21987, 18426, 3559, 1916, 338, 1194, 1673, 26332, 3112, 288, 260, 5846, 3394, 29, 48, 19068, 3297, 260, 5670, 4180, 4081, 282, 260, 42514, 3778, 15343, 284, 17100, 20726, 1673, 7049, 335, 4448, 216, 34, 3297, 253, 5575, 1217, 260, 10352, 6575, 3213, 253, 2753, 9007, 2456, 282, 216, 41, 39, 40, 283, 6299, 365, 216, 34, 40, 3394, 30, 48, 216, 40, 40, 281, 39187, 2481, 3297, 527, 8636, 338, 260, 5670, 21987, 18426, 3559, 1673, 2550, 7685, 4081, 282, 260, 25518, 284, 7784, 48096, 8588, 3297, 260, 18426, 10856, 14913, 316, 42456, 284, 39262, 5378, 281, 260, 44057, 335, 4448, 216, 35, 3297, 260, 6791, 418, 216, 33, 33, 32, 32, 31493, 1673, 330, 5729, 335, 260, 6791, 5432, 3213, 253, 2456, 282, 216, 34, 39, 3394, 30, 48, 216, 41, 32, 281, 39187, 365, 216, 41, 36, 37, 283, 82, 2481, 981, 260, 216, 35, 32, 8427, 7429, 282, 260, 3323, 1673, 10098, 335, 260, 2456, 284, 260, 1165, 2203, 282, 260, 5670, 3297, 357, 314, 5183, 260, 18426, 10856, 39262, 5378, 351, 8056, 11113, 282, 216, 33, 36, 32, 20157, 365, 216, 34, 34, 37, 6381, 2272, 294, 2481, 3297, 1625, 357, 260, 7492, 282, 253, 2148, 23926, 216, 36, 18426, 335, 260, 334, 2804, 337, 3394, 29, 48, 33523, 3964, 1673, 4023, 6275, 309, 5613, 338, 260, 5670, 5388, 1739, 18426, 3559, 3297, 355, 23926, 216, 35, 3559, 3297, 335, 4448, 216, 34, 1673, 198, 504, 18426, 7083, 3922, 260, 1740, 282, 1372, 18426, 338, 4180, 738, 260, 1557, 281, 3008, 4053, 3297, 527, 5354, 10856, 15553, 284, 5778, 1673, 669, 18426, 2489, 8424, 253, 2210, 5846, 3394, 29, 48, 19068, 4320, 1673, 2550, 4138, 738, 260, 5761, 44057, 3297, 260, 18426, 17018, 5359, 1092, 1625, 47294, 418, 14713, 3297, 7162, 3297, 418, 216, 32, 37, 32, 32, 31493, 335, 4448, 216, 36, 1673, 330, 5729, 665, 3213, 253, 2456, 282, 216, 34, 39, 3394, 30, 48, 216, 41, 40, 281, 39187, 365, 216, 41, 36, 40, 283, 82, 2481, 981, 253, 216, 36, 32, 8427, 1657, 282, 260, 3323, 637, 99, 7429, 8544, 451, 5613, 253, 47294, 4299, 282, 216, 33, 34, 37, 20157, 365, 216, 34, 32, 33, 6381, 2272, 294, 2481, 1673, 1814, 260, 655, 3297, 260, 13661, 282, 5428, 11113, 436, 216, 33, 37, 11488, 365, 216, 34, 36, 6381, 2481, 3297, 527, 436, 3764, 670, 3049, 1673, 2550, 47294, 3297, 260, 18426, 17018, 5645, 979, 13107, 260, 1215, 1673, 657, 13099, 6942, 618, 260, 10352, 282, 5647, 347, 253, 8941, 5670, 1584, 335, 4448, 216, 37, 1673, 330, 1443, 2737, 1916, 979, 9421, 288, 260, 19068, 3297, 357, 1135, 1372, 47294, 2141, 15090, 5463, 1841, 253, 15534, 3102, 281, 39825, 4392, 3297, 6251, 282, 40074, 6400, 1841, 351, 11113, 282, 563, 216, 38, 37, 20157, 365, 216, 33, 32, 37, 6381, 2272, 294, 2481, 1673, 34676, 288, 260, 4081, 3297, 260, 5670, 6351, 17018, 347, 357, 14997, 618, 9813, 3297, 26253, 674, 335, 4448, 216, 39, 2141, 42317, 1673, 198, 198, 45, 446, 15864, 491, 284, 1645, 446, 446, 198, 198, 3280, 4448, 216, 34, 3297, 253, 14954, 282, 4475, 6995, 34193, 511, 2537, 6089, 429, 3689, 7135, 3297, 8503, 14716, 4232, 3297, 288, 44547, 81, 15491, 3297, 7162, 1673, 2445, 260, 5670, 436, 2141, 8056, 8381, 335, 4448, 216, 35, 3297, 260, 17127, 10820, 7966, 18426, 15117, 429, 23222, 288, 21615, 3297, 7162, 3297, 351, 5670, 15117, 13456, 34061, 288, 10618, 5559, 1673, 10893, 338, 1194, 3297, 5670, 15117, 3297, 592, 7966, 429, 6400, 3689, 288, 40074, 6400, 1673, 6810, 216, 34, 3394, 28, 48, 216, 37, 32, 32, 701, 34193, 411, 4445, 429, 1721, 1130, 6476, 492, 396, 3576, 675, 1992, 1673, 1428, 9053, 335, 4448, 216, 35, 3297, 904, 27485, 2362, 3426, 9779, 690, 7915, 22622, 3255, 281, 26142, 15491, 4392, 347, 6089, 47793, 614, 4789, 8544, 3626, 335, 8752, 3352, 271, 7216, 281, 3689, 26142, 15491, 592, 1137, 288, 325, 253, 476, 4367, 3433, 476, 282, 41082, 1673, 13957, 260, 4051, 3297, 19473, 3213, 1035, 10819, 14339, 347, 260, 3323, 420, 1214, 1666, 1673, 198, 504, 3269, 18426, 4935, 690, 355, 2141, 1545, 8588, 281, 260, 44057, 1673, 6234, 99, 335, 5071, 25944, 284, 39262, 5378, 592, 1062, 5183, 418, 1130, 216, 33, 36, 32, 20157, 365, 216, 34, 34, 37, 6381, 2272, 294, 2481, 1673, 6234, 99, 5388, 216, 33, 33, 32, 20157, 365, 216, 33, 39, 39, 6381, 2272, 294, 2481, 418, 13005, 637, 99, 39262, 3297, 216, 33, 32, 32, 20157, 365, 216, 33, 38, 33, 6381, 2272, 294, 2481, 335, 14913, 316, 42456, 3297, 284, 216, 33, 34, 32, 20157, 365, 216, 33, 41, 35, 6381, 2272, 294, 2481, 335, 260, 2485, 22667, 10015, 1673, 378, 5670, 436, 16928, 2025, 429, 442, 520, 603, 3297, 837, 11113, 5388, 216, 38, 33, 20157, 365, 216, 41, 40, 6381, 2272, 294, 2481, 1673, 378, 18426, 7824, 253, 24270, 1663, 335, 2485, 22667, 3297, 11789, 2025, 253, 26415, 1673, 26016, 3055, 5691, 335, 39262, 5378, 3297, 1285, 288, 1545, 21786, 3297, 260, 5780, 282, 1693, 4789, 3297, 284, 260, 913, 817, 1673, 378, 18426, 7652, 1876, 10623, 284, 216, 35, 39, 6648, 3297, 5170, 216, 33, 32, 32, 701, 15639, 1673, 330, 216, 33, 3394, 30, 48, 216, 37, 11488, 365, 216, 34, 3394, 30, 48, 216, 36, 6381, 2481, 3398, 335, 14913, 316, 42456, 436, 7652, 1673, 10417, 8588, 11787, 3055, 288, 9022, 3297, 1285, 260, 2719, 2184, 282, 1461, 4354, 3417, 335, 19107, 5378, 1673, 6372, 23926, 216, 36, 11113, 335, 5071, 25944, 3297, 805, 2531, 6648, 592, 7652, 3297, 3551, 768, 282, 260, 6219, 30037, 3590, 480, 21786, 1673, 12410, 1320, 826, 2601, 8779, 3297, 5037, 340, 271, 696, 3297, 284, 21473, 10522, 335, 14913, 316, 42456, 3297, 260, 5670, 7652, 216, 37, 37, 6648, 284, 7824, 800, 1449, 1673, 1985, 8503, 14716, 4232, 3297, 837, 253, 216, 41, 288, 216, 33, 34, 11083, 365, 216, 34, 3394, 30, 48, 216, 39, 288, 216, 35, 3394, 30, 48, 216, 39, 283, 2481, 5670, 8839, 436, 3213, 3297, 2745, 282, 260, 6648, 592, 7652, 3297, 347, 592, 216, 33, 35, 13768, 284, 827, 13958, 3297, 284, 768, 45520, 592, 16285, 18825, 1673, 198, 2427, 260, 5670, 4935, 32900, 281, 7162, 3297, 11113, 5388, 354, 5183, 216, 33, 34, 37, 20157, 365, 216, 34, 32, 33, 6381, 2272, 294, 2481, 281, 14713, 8544, 623, 5691, 990, 260, 3323, 4180, 1673, 533, 3689, 26142, 15491, 3297, 40801, 9492, 6090, 418, 2124, 216, 40, 32, 3394, 29, 48, 12264, 3394, 29, 48, 567, 3394, 29, 48, 5353, 365, 216, 33, 34, 41, 6381, 2272, 294, 2481, 11113, 351, 31552, 99, 288, 216, 33, 32, 32, 20157, 365, 216, 33, 38, 33, 6381, 2272, 294, 2481, 8544, 2753, 9492, 22697, 429, 216, 34, 40, 3394, 30, 48, 216, 38, 36, 288, 216, 34, 40, 3394, 30, 48, 216, 39, 40, 281, 39187, 365, 216, 41, 39, 32, 288, 216, 41, 39, 37, 283, 82, 2481, 1673, 378, 5670, 3281, 260, 16652, 11113, 281, 260, 2240, 1675, 260, 216, 33, 41, 34, 40, 492, 396, 3576, 675, 1992, 18426, 1673, 6234, 99, 592, 441, 347, 1837, 16928, 429, 260, 3712, 8544, 216, 36, 32, 288, 216, 36, 37, 20157, 365, 216, 38, 36, 288, 216, 39, 34, 6381, 2272, 294, 2481, 11113, 592, 4537, 281, 23222, 288, 260, 4203, 3297, 45252, 5559, 288, 260, 4081, 3297, 284, 46384, 335, 260, 5846, 4051, 1673, 8272, 40140, 5183, 8056, 11113, 282, 216, 40, 32, 288, 216, 41, 32, 20157, 365, 216, 33, 34, 41, 288, 216, 33, 36, 37, 6381, 2272, 294, 2481, 3297, 284, 11820, 38798, 288, 216, 34, 41, 3394, 30, 48, 216, 33, 36, 281, 39187, 365, 216, 41, 40, 39, 283, 82, 2481, 1673, 533, 1219, 3297, 11113, 2141, 6476, 492, 396, 3576, 675, 1992, 38237, 418, 805, 216, 38, 32, 20157, 365, 216, 41, 39, 6381, 2272, 294, 2481, 1673, 378, 18426, 10370, 4591, 11228, 1683, 624, 2050, 3297, 610, 894, 418, 216, 33, 39, 3394, 30, 48, 216, 40, 281, 365, 216, 36, 37, 32, 7610, 2481, 281, 1661, 833, 1866, 1673, 198, 3473, 3689, 26142, 15491, 3297, 260, 4559, 282, 260, 3055, 436, 14598, 288, 9708, 1673, 10417, 17434, 284, 9202, 26679, 338, 351, 5623, 260, 216, 33, 41, 34, 40, 18426, 46795, 3297, 15781, 274, 9018, 351, 6792, 32442, 1673, 6234, 99, 1187, 277, 3398, 4120, 335, 800, 9018, 3297, 284, 5129, 25611, 4993, 260, 16685, 335, 253, 1679, 18355, 1740, 1673, 2015, 6123, 969, 284, 8807, 3626, 3297, 5199, 19319, 3297, 592, 11555, 355, 10878, 7652, 3297, 1683, 351, 253, 24270, 27618, 1673, 2015, 4711, 338, 3590, 34224, 28442, 761, 913, 3055, 288, 480, 37946, 347, 876, 1673, 17689, 1717, 6476, 29825, 11787, 6656, 47520, 282, 8393, 3297, 1285, 6496, 4433, 3297, 284, 2184, 282, 19716, 284, 443, 12649, 34224, 3297, 564, 19592, 3954, 8528, 288, 915, 1545, 7557, 8358, 3297, 284, 787, 1681, 3394, 29, 48, 5670, 10736, 2637, 1379, 1673, 17444, 11113, 46795, 800, 1420, 18091, 281, 260, 2240, 3297, 284, 3417, 284, 17498, 592, 6792, 355, 614, 38557, 1673, 1032, 281, 6476, 29825, 3297, 6229, 281, 3689, 26142, 15491, 19452, 19592, 284, 21795, 2194, 9606, 351, 4345, 3043, 3055, 1673, 378, 2240, 761, 3485, 429, 2672, 1786, 351, 3523, 12862, 281, 216, 33, 41, 34, 38, 3297, 216, 33, 41, 34, 40, 3297, 284, 216, 33, 41, 34, 41, 1673, 4264, 27485, 31485, 7357, 22583, 46057, 418, 1545, 9265, 284, 21905, 1594, 288, 1545, 12223, 335, 260, 6476, 29825, 22417, 2509, 1673, 16062, 27836, 284, 21143, 335, 26142, 15491, 3178, 11787, 1838, 1376, 3055, 3297, 2560, 288, 9708, 3297, 284, 8347, 3849, 3514, 5932, 35680, 37719, 1673, 198, 788, 8478, 284, 625, 30, 11407, 519, 13500, 3297, 260, 5670, 436, 2500, 1486, 260, 9250, 335, 2004, 1673, 378, 5670, 44419, 634, 4711, 284, 21294, 800, 1449, 767, 480, 12617, 1673, 1814, 23602, 3297, 11113, 5178, 355, 17279, 7824, 216, 39, 37, 2471, 282, 260, 21786, 281, 3102, 1673, 378, 5670, 7652, 260, 3464, 6289, 282, 260, 2194, 338, 19458, 253, 47794, 47969, 284, 260, 23602, 6231, 3297, 253, 1679, 10059, 1673, 1814, 10324, 542, 3297, 354, 11268, 9334, 597, 1343, 347, 10324, 542, 15491, 3297, 1837, 11113, 44419, 260, 1573, 10324, 542, 24704, 3297, 253, 2811, 5729, 3297, 284, 260, 1796, 6289, 282, 253, 14037, 2194, 1673, 6234, 99, 597, 288, 257, 260, 7344, 767, 354, 3908, 1783, 1673, 330, 7395, 2899, 288, 260, 10269, 5432, 429, 10324, 542, 436, 11555, 16285, 18825, 8544, 260, 7395, 14533, 11663, 411, 35913, 260, 689, 4966, 981, 260, 5670, 1673, 6234, 99, 44419, 650, 6154, 1478, 1673, 3959, 288, 260, 33384, 17127, 6769, 3297, 634, 282, 260, 768, 3523, 3055, 429, 260, 5670, 281, 7162, 436, 418, 10324, 542, 1673, 378, 5670, 2049, 800, 4711, 281, 407, 13188, 14758, 45056, 3257, 3297, 14072, 23998, 288, 12885, 601, 1187, 1673, 16062, 27836, 335, 260, 5432, 3297, 2107, 3297, 592, 1365, 2837, 284, 1838, 7824, 1673, 2445, 23602, 284, 407, 13188, 14758, 11787, 1546, 3055, 3297, 5403, 5892, 42489, 8845, 28473, 1673, 533, 23602, 3297, 260, 5670, 2049, 216, 36, 32, 32, 288, 216, 37, 32, 32, 701, 15639, 3297, 614, 288, 3920, 216, 33, 32, 2471, 282, 260, 2155, 3297, 527, 436, 216, 37, 3394, 28, 48, 216, 33, 32, 32, 418, 260, 655, 1673, 10692, 14713, 284, 8272, 40140, 3297, 260, 5670, 29991, 1187, 1149, 284, 29487, 3204, 1673, 533, 260, 6791, 2240, 3297, 904, 6147, 16102, 578, 253, 6206, 282, 260, 1728, 2384, 1673, 533, 260, 216, 33, 41, 40, 32, 99, 3297, 354, 10837, 7878, 20783, 338, 260, 5670, 436, 260, 768, 3523, 335, 2004, 281, 8272, 40140, 1673, 198, 51, 1561, 3055, 436, 9250, 1683, 260, 3530, 3992, 22417, 2509, 8544, 1545, 9022, 281, 23602, 4486, 2719, 8528, 3297, 284, 28014, 3297, 216, 33, 38, 2471, 282, 260, 21022, 6429, 3297, 355, 216, 36, 2215, 10155, 3297, 592, 7652, 1673, 3027, 9610, 857, 2600, 281, 23602, 592, 7652, 3297, 284, 260, 1679, 9610, 2155, 436, 13490, 284, 22772, 347, 1869, 347, 1218, 5439, 845, 1673, 23002, 23739, 7162, 3297, 260, 18426, 7824, 216, 38, 3394, 28, 48, 216, 36, 38, 37, 6648, 284, 7652, 1372, 216, 35, 40, 35, 3297, 4439, 690, 1885, 216, 35, 2215, 281, 3055, 1673, 1963, 1055, 3297, 354, 3486, 1547, 2769, 9804, 3297, 436, 5375, 645, 650, 47514, 32117, 1187, 281, 452, 465, 106, 3297, 253, 3745, 91, 15101, 4242, 990, 4962, 6358, 40112, 3690, 7163, 3297, 284, 253, 811, 436, 5375, 411, 20548, 10708, 1673, 198, 12192, 11228, 2952, 12411, 1699, 7162, 3297, 14242, 2141, 46384, 837, 5656, 5388, 216, 41, 11083, 365, 216, 34, 3394, 30, 48, 216, 39, 283, 2481, 2276, 1673, 4264, 11228, 282, 690, 216, 39, 281, 365, 216, 33, 40, 32, 7610, 2481, 2952, 253, 2156, 11548, 411, 46384, 13412, 2923, 30, 288, 2373, 216, 35, 11488, 365, 216, 36, 3394, 30, 48, 216, 40, 6381, 2481, 19449, 282, 46384, 1683, 260, 19763, 22829, 3992, 1673, 378, 2373, 7352, 281, 3523, 1679, 3055, 3297, 12411, 12221, 282, 334, 17416, 315, 22062, 1673, 18553, 11120, 288, 3898, 260, 2156, 351, 4903, 41874, 3297, 284, 990, 260, 2373, 3297, 768, 6089, 281, 260, 1557, 592, 15504, 282, 260, 14507, 5129, 1673, 3636, 216, 37, 32, 4711, 592, 23642, 3297, 14072, 563, 216, 33, 37, 32, 701, 288, 39304, 1673, 30743, 7162, 3297, 260, 5670, 3281, 11113, 282, 216, 36, 40, 284, 216, 37, 33, 20157, 365, 216, 39, 40, 284, 216, 40, 33, 6381, 2272, 294, 2481, 281, 36742, 3297, 9813, 284, 29763, 3297, 2582, 8147, 3297, 7827, 1673, 533, 260, 6791, 2240, 3297, 260, 5670, 42832, 253, 25007, 3297, 527, 2952, 563, 1885, 216, 33, 32, 3394, 28, 48, 216, 32, 32, 32, 281, 3501, 3055, 1673, 26016, 11228, 5691, 1683, 260, 9813, 284, 2582, 8147, 28374, 3297, 7880, 690, 216, 33, 34, 281, 365, 216, 35, 32, 32, 7610, 2481, 1673, 9017, 11228, 597, 6470, 618, 2601, 8147, 1673, 198, 198, 45, 446, 2550, 8898, 446, 446, 198, 198, 788, 260, 44057, 990, 260, 5670, 3297, 253, 9741, 23217, 429, 442, 520, 603, 288, 5486, 1114, 284, 2194, 2254, 288, 14913, 316, 42456, 1673, 198, 4582, 260, 5670, 3297, 260, 2071, 12431, 5340, 21828, 327, 418, 2124, 216, 36, 32, 32, 15639, 6089, 281, 23602, 1673, 3513, 260, 216, 39, 3394, 28, 48, 216, 41, 32, 32, 3168, 26560, 3900, 411, 260, 18426, 3297, 216, 36, 3394, 28, 48, 216, 35, 34, 37, 2309, 6007, 429, 260, 1547, 3950, 8815, 1673, 24495, 281, 5778, 3297, 597, 3900, 411, 253, 1739, 18426, 3297, 13682, 19979, 281, 7162, 5847, 216, 33, 37, 2009, 588, 502, 856, 5948, 480, 21022, 6429, 338, 6641, 1673, 378, 7824, 2156, 2141, 46384, 7083, 7352, 281, 5656, 429, 260, 19763, 22829, 3992, 1036, 26146, 618, 260, 2240, 637, 99, 913, 1849, 1783, 3297, 284, 253, 725, 2156, 436, 4380, 2837, 281, 216, 33, 41, 36, 36, 1673, 1116, 198, 45, 5665, 9420, 282, 29095, 100, 516, 9546, 361, 446, 198, 198, 504, 5665, 9420, 282, 29095, 100, 516, 9546, 361, 436, 354, 6239, 826, 1797, 6950, 365, 4954, 2481, 284, 2601, 10916, 365, 38510, 2481, 3654, 1584, 281, 260, 10916, 2287, 429, 4448, 216, 33, 288, 4448, 216, 33, 37, 3297, 216, 33, 41, 37, 32, 3297, 1683, 260, 29095, 100, 516, 3992, 281, 2582, 9096, 1673, 657, 436, 253, 599, 282, 260, 9420, 282, 377, 376, 276, 3017, 13152, 3297, 284, 436, 582, 282, 1545, 1507, 32480, 9221, 7769, 1673, 378, 5182, 7569, 281, 253, 9970, 327, 260, 1797, 6950, 990, 1507, 2966, 282, 1797, 1918, 365, 2038, 2481, 284, 5261, 282, 9096, 365, 428, 13663, 2481, 7207, 1024, 6259, 253, 1837, 2601, 10916, 3414, 1673, 198, 4582, 260, 3508, 9420, 282, 29095, 100, 516, 9546, 361, 3297, 260, 2038, 6290, 637, 99, 216, 34, 268, 23512, 9760, 436, 4935, 288, 8330, 260, 29095, 100, 516, 3992, 1761, 1673, 378, 7573, 3297, 527, 436, 1597, 2041, 281, 7604, 3297, 436, 10856, 351, 253, 1837, 3414, 411, 1545, 14102, 282, 260, 10916, 4228, 637, 99, 6290, 527, 14997, 260, 4626, 284, 10856, 511, 1683, 260, 7573, 637, 99, 1761, 1673, 378, 3075, 282, 260, 3414, 7074, 260, 2038, 216, 34, 268, 23512, 9760, 281, 2745, 3297, 284, 260, 2601, 41397, 592, 1730, 288, 21354, 288, 718, 24947, 276, 3297, 5188, 253, 3568, 665, 1673, 198, 504, 23376, 282, 260, 2896, 288, 377, 376, 276, 3017, 13152, 17147, 260, 2038, 11847, 12940, 216, 33, 302, 1053, 47458, 11847, 25925, 288, 325, 3621, 281, 288, 12756, 260, 2038, 6290, 7207, 1673, 533, 827, 3737, 282, 4591, 6755, 3297, 260, 2038, 3654, 592, 1730, 288, 3075, 260, 2601, 41397, 578, 282, 260, 29095, 100, 516, 9546, 361, 2695, 1673, 378, 2601, 41397, 592, 2030, 1024, 48944, 990, 260, 4954, 4360, 28102, 418, 533, 322, 258, 3297, 527, 35891, 281, 260, 5798, 8040, 282, 260, 2601, 10916, 6237, 1673, 198, 198, 45, 446, 20744, 446, 446, 1116, 198, 45, 446, 446, 377, 376, 276, 3017, 13152, 446, 446, 446, 198, 198, 5212, 260, 10481, 282, 260, 10916, 2287, 284, 260, 11145, 282, 2582, 9096, 411, 260, 2601, 3297, 260, 2601, 10916, 4228, 637, 99, 6290, 761, 9765, 25472, 281, 1062, 39764, 284, 3813, 690, 1062, 260, 5261, 282, 9096, 6290, 284, 260, 1797, 6950, 3654, 37099, 288, 2582, 9096, 288, 1746, 357, 429, 40525, 1673, 378, 2601, 10916, 4799, 436, 288, 30063, 10511, 4954, 284, 428, 13663, 3654, 335, 511, 18556, 282, 2424, 4203, 284, 288, 4555, 601, 30063, 3297, 19095, 429, 260, 3433, 284, 27070, 253, 5561, 16054, 358, 282, 1062, 832, 3307, 282, 260, 2723, 3297, 527, 3917, 260, 2601, 41397, 288, 2858, 284, 2304, 767, 260, 15713, 3075, 3297, 527, 736, 965, 325, 5657, 288, 16623, 281, 510, 4282, 3297, 1129, 5170, 2893, 1083, 282, 624, 3813, 1673, 3300, 480, 3791, 4019, 216, 34, 37, 15663, 288, 23284, 281, 4185, 284, 1584, 4053, 3297, 260, 2601, 41397, 804, 451, 4799, 288, 4025, 12721, 750, 4954, 3075, 284, 5220, 357, 4203, 1673, 1423, 3297, 645, 260, 4954, 3654, 3297, 656, 260, 47868, 1797, 1918, 6290, 3297, 3251, 260, 377, 376, 276, 3017, 13152, 281, 4053, 3297, 260, 4954, 7207, 3408, 253, 6860, 1761, 1683, 260, 23546, 527, 2601, 10916, 7207, 856, 441, 25326, 3297, 284, 480, 6816, 281, 2966, 8422, 2956, 347, 260, 8734, 4954, 33305, 817, 3621, 281, 540, 7207, 284, 6864, 288, 260, 4954, 6237, 1673, 198, 2427, 260, 2601, 41397, 12055, 260, 377, 376, 276, 3017, 13152, 335, 4053, 216, 37, 3297, 502, 11120, 260, 1142, 26893, 11905, 4476, 335, 260, 1876, 1085, 18556, 282, 2424, 618, 260, 25096, 1673, 11067, 4053, 3297, 260, 38510, 216, 38, 373, 9760, 3297, 284, 1916, 260, 38510, 216, 39, 373, 9760, 6934, 260, 2038, 216, 34, 37, 373, 23512, 9760, 418, 260, 9420, 282, 15757, 276, 3297, 7083, 1024, 2132, 253, 4954, 4360, 3430, 2757, 1092, 4360, 274, 351, 11763, 418, 34541, 332, 3394, 29, 48, 39112, 284, 9420, 11525, 1673, 1216, 5926, 45515, 347, 4954, 3654, 3297, 876, 9031, 284, 351, 7568, 282, 12562, 3297, 12840, 1024, 6259, 2601, 10916, 5926, 1673, 2601, 282, 15757, 276, 3297, 260, 38510, 216, 36, 373, 9760, 284, 260, 2038, 216, 34, 36, 373, 23512, 9760, 574, 280, 455, 281, 260, 29095, 100, 516, 9546, 361, 1557, 1673, 533, 260, 3508, 9420, 282, 29095, 100, 516, 9546, 361, 3297, 260, 2601, 10916, 7573, 436, 7168, 288, 2205, 624, 7395, 2699, 1699, 260, 4626, 347, 1507, 2966, 282, 2038, 13398, 3654, 592, 3621, 281, 288, 35698, 357, 3297, 284, 335, 4053, 216, 33, 41, 3297, 260, 38510, 216, 36, 373, 9760, 436, 5657, 1056, 1699, 260, 4626, 351, 216, 37, 32, 1870, 20073, 1673, 533, 260, 16577, 9503, 2695, 3297, 2531, 2601, 10916, 14102, 592, 1024, 48944, 411, 1296, 4954, 14102, 281, 1545, 7901, 288, 3414, 260, 2240, 981, 260, 9420, 282, 16577, 9503, 1673, 36560, 4591, 6755, 2637, 1379, 418, 260, 9420, 282, 260, 14167, 1519, 1065, 2292, 837, 260, 38510, 216, 33, 35, 373, 9760, 436, 2743, 4036, 7652, 281, 260, 3414, 1673, 1985, 260, 6251, 4051, 3297, 1296, 540, 2601, 10916, 14102, 592, 1024, 48944, 411, 260, 2582, 41397, 418, 377, 637, 1299, 604, 3394, 29, 48, 287, 516, 981, 260, 9420, 282, 377, 637, 1299, 604, 3394, 29, 48, 287, 516, 1673, 2018, 1683, 260, 3433, 3297, 260, 2601, 10916, 7207, 592, 298, 9660, 429, 623, 42069, 3297, 260, 808, 655, 281, 260, 1913, 480, 3068, 592, 441, 1891, 1673, 198, 198, 45, 446, 446, 4448, 5220, 446, 446, 446, 198, 198, 788, 3946, 624, 725, 15663, 3297, 260, 2601, 10916, 3588, 4041, 750, 3110, 288, 25326, 260, 4954, 3075, 436, 6316, 6954, 288, 260, 1199, 282, 260, 4954, 24029, 1673, 4736, 3297, 502, 33863, 288, 722, 26893, 3414, 288, 20952, 260, 25096, 284, 11388, 357, 347, 260, 805, 3826, 282, 8749, 1624, 281, 260, 5182, 1673, 11412, 411, 5290, 429, 260, 6731, 4353, 260, 2601, 41397, 592, 2839, 260, 4954, 3654, 592, 2194, 614, 1683, 260, 377, 376, 276, 3017, 13152, 284, 338, 357, 1251, 2662, 354, 15663, 3318, 355, 357, 856, 441, 4726, 260, 5182, 1673, 330, 6442, 6987, 436, 288, 2858, 16577, 9503, 284, 5142, 260, 4954, 284, 428, 13663, 4784, 281, 338, 2240, 1673, 1032, 599, 282, 451, 4527, 3297, 260, 2601, 10916, 4784, 736, 808, 2304, 260, 3577, 3204, 288, 16577, 9503, 1673, 198, 3280, 4053, 216, 34, 32, 3297, 260, 2601, 10916, 10237, 6636, 4261, 9112, 288, 480, 29219, 4784, 1673, 378, 2601, 41397, 1217, 327, 253, 22071, 2531, 3394, 29, 48, 694, 516, 3414, 1523, 260, 4954, 3204, 1673, 1216, 5926, 736, 37928, 260, 4954, 27943, 284, 1167, 260, 2601, 41397, 288, 2373, 738, 260, 3204, 281, 418, 2124, 582, 1379, 288, 3075, 260, 4954, 3654, 1056, 1673, 13696, 5182, 38307, 592, 8885, 1673, 378, 3712, 3414, 1217, 327, 260, 38510, 216, 41, 373, 9760, 3297, 38510, 216, 36, 373, 9760, 3297, 38510, 216, 34, 268, 9760, 3297, 284, 38510, 216, 33, 32, 373, 9760, 2373, 738, 260, 2038, 216, 34, 268, 23512, 9760, 418, 260, 29095, 100, 516, 9546, 361, 288, 21923, 32804, 284, 718, 24947, 276, 1673, 198, 198, 45, 446, 9420, 446, 446, 198, 198, 6307, 260, 2601, 41397, 637, 4448, 216, 33, 15663, 3297, 260, 2038, 216, 34, 37, 373, 23512, 9760, 637, 99, 2038, 216, 35, 37, 373, 23512, 22500, 436, 7100, 6934, 281, 260, 9420, 282, 18620, 3992, 4081, 282, 15757, 276, 1673, 1985, 260, 216, 35, 37, 373, 22500, 637, 99, 1048, 25326, 3297, 915, 4081, 282, 260, 40693, 282, 260, 18620, 3992, 284, 260, 29095, 100, 516, 3992, 3297, 436, 260, 2038, 216, 41, 373, 23512, 22500, 3297, 2038, 216, 34, 268, 23512, 9760, 1673, 1385, 3297, 281, 260, 5677, 2130, 599, 282, 260, 216, 34, 268, 23512, 9760, 7323, 3297, 260, 216, 41, 373, 23512, 22500, 3408, 253, 5716, 540, 670, 216, 34, 32, 3394, 28, 48, 216, 32, 32, 32, 17535, 365, 216, 33, 40, 3394, 28, 48, 216, 32, 32, 32, 283, 2481, 986, 3297, 1285, 260, 42159, 1557, 282, 260, 29095, 100, 516, 837, 260, 3508, 9420, 282, 29095, 100, 516, 9546, 361, 761, 2473, 1379, 3685, 281, 4053, 1673, 3768, 2038, 20681, 2727, 335, 260, 4626, 1761, 1535, 761, 253, 3433, 282, 216, 35, 3394, 28, 48, 216, 32, 32, 32, 3282, 365, 216, 41, 33, 32, 283, 2481, 288, 216, 36, 3394, 28, 48, 216, 32, 32, 32, 3282, 365, 216, 33, 3394, 28, 48, 216, 34, 32, 32, 283, 2481, 284, 502, 3408, 805, 1646, 12610, 284, 7928, 2876, 3297, 347, 260, 4784, 592, 4843, 2824, 578, 1683, 260, 3599, 3433, 1673, 198, 6307, 260, 1596, 2605, 282, 4053, 3297, 2038, 7207, 335, 623, 12610, 856, 963, 4835, 2601, 10916, 2313, 1699, 260, 4626, 3297, 527, 502, 2275, 436, 2601, 41397, 11764, 260, 904, 2118, 335, 260, 5846, 2103, 282, 260, 29095, 100, 516, 1523, 253, 1636, 1547, 3414, 1673, 1385, 592, 15373, 5926, 335, 260, 216, 41, 373, 23512, 637, 99, 3703, 6115, 3297, 564, 288, 260, 1800, 281, 260, 3433, 3204, 451, 6254, 288, 325, 805, 253, 2920, 24779, 2353, 1673, 1985, 4053, 216, 35, 33, 3297, 260, 4954, 3654, 592, 48691, 288, 253, 24940, 3414, 645, 1083, 282, 260, 10916, 16514, 3496, 3075, 14464, 260, 3433, 3204, 1673, 12761, 8497, 3213, 354, 3414, 436, 4167, 1673, 198, 3280, 260, 5846, 2103, 282, 260, 29095, 100, 516, 3297, 2601, 10916, 11187, 4660, 44514, 17365, 95, 5457, 3297, 30498, 260, 38510, 216, 41, 373, 9760, 3297, 7966, 650, 4261, 1686, 288, 260, 7573, 335, 4053, 216, 34, 40, 1673, 4781, 4527, 281, 260, 31243, 3414, 436, 288, 578, 2354, 1459, 284, 5142, 260, 2038, 7207, 418, 29095, 100, 516, 9546, 361, 411, 13737, 260, 21923, 32804, 284, 5457, 94, 604, 43371, 1721, 288, 2304, 767, 260, 2038, 216, 34, 268, 9760, 637, 99, 7410, 282, 3577, 284, 14635, 826, 16577, 9503, 284, 377, 376, 276, 1673, 1423, 3297, 260, 2601, 41397, 11535, 637, 100, 2839, 338, 260, 2038, 216, 34, 268, 23512, 9760, 761, 3928, 7233, 260, 2038, 216, 34, 36, 373, 23512, 9760, 281, 6115, 1683, 260, 29095, 100, 516, 3992, 1673, 8610, 3297, 502, 3393, 13603, 4276, 8544, 260, 216, 34, 36, 373, 7207, 592, 21850, 429, 2704, 282, 6755, 564, 260, 216, 34, 268, 9760, 1800, 592, 3961, 284, 7796, 6612, 281, 9096, 1673, 1069, 761, 805, 3928, 719, 4935, 618, 260, 1761, 1673, 378, 2601, 41397, 2585, 13107, 260, 29095, 100, 516, 3992, 656, 3114, 282, 13226, 418, 1647, 2876, 1673, 198, 198, 45, 446, 446, 9420, 282, 2850, 2231, 446, 446, 446, 198, 198, 3280, 260, 5677, 3394, 29, 48, 768, 25326, 282, 260, 216, 41, 373, 23512, 4626, 1761, 3297, 915, 2120, 260, 22290, 282, 260, 18620, 3992, 351, 260, 29095, 100, 516, 3297, 330, 6721, 282, 260, 216, 33, 302, 27570, 436, 20276, 281, 335, 253, 986, 8400, 21906, 6346, 1519, 260, 29095, 100, 516, 338, 2115, 7580, 281, 8673, 216, 41, 36, 418, 260, 659, 7402, 604, 31936, 2530, 1673, 378, 4626, 3398, 429, 18620, 10381, 3394, 29, 48, 412, 89, 4108, 5846, 1683, 260, 29095, 100, 516, 10466, 260, 5677, 8618, 282, 451, 21906, 284, 21973, 288, 260, 5846, 2103, 282, 260, 4626, 418, 260, 31936, 1673, 330, 1165, 6560, 1217, 2850, 2231, 2060, 418, 260, 3159, 282, 8673, 216, 41, 36, 284, 216, 35, 32, 32, 17535, 365, 216, 34, 39, 32, 283, 2481, 429, 260, 4626, 1673, 330, 24779, 282, 12023, 284, 36117, 6110, 3297, 1592, 351, 827, 20681, 3031, 6287, 282, 330, 6721, 3297, 216, 41, 373, 23512, 3297, 3408, 253, 3398, 9189, 2141, 260, 31936, 284, 2800, 288, 2850, 2231, 1673, 1985, 260, 9053, 282, 4053, 216, 35, 33, 3297, 330, 6721, 4935, 429, 624, 21906, 6115, 33204, 2850, 2231, 284, 260, 4626, 288, 725, 6115, 1683, 260, 4626, 2441, 260, 21906, 1761, 1673, 198, 5195, 9053, 48185, 27894, 428, 30, 659, 279, 2432, 2842, 260, 24779, 282, 827, 372, 34, 38, 6272, 2535, 12023, 284, 827, 372, 33, 41, 21114, 18523, 2974, 16162, 281, 2850, 2231, 1673, 659, 279, 2432, 4294, 650, 24779, 335, 260, 5846, 2103, 282, 2850, 2231, 2141, 260, 659, 7402, 604, 31936, 1673, 1814, 216, 34, 32, 1577, 216, 32, 32, 253, 4591, 19998, 4993, 260, 4626, 3297, 284, 418, 216, 34, 34, 1577, 216, 32, 32, 27238, 14866, 2585, 9027, 335, 260, 1547, 3394, 29, 48, 3408, 2103, 282, 260, 4626, 1673, 1428, 216, 34, 34, 1577, 216, 33, 37, 451, 9422, 29773, 284, 2601, 10916, 27238, 7060, 10856, 330, 6721, 637, 99, 6115, 1673, 1547, 5611, 954, 284, 18779, 2585, 17607, 4360, 82, 21032, 1673, 2015, 282, 260, 330, 6721, 1800, 3213, 502, 3984, 21827, 335, 260, 7011, 2103, 282, 260, 4626, 284, 9452, 9604, 281, 260, 913, 1673, 198, 3473, 216, 34, 34, 1577, 216, 35, 32, 260, 19998, 21051, 284, 659, 279, 2432, 3680, 338, 253, 2601, 10916, 273, 13282, 258, 7395, 436, 1036, 8259, 1699, 260, 4626, 3319, 281, 3433, 282, 650, 2548, 1673, 659, 279, 2432, 637, 99, 1876, 6110, 12353, 451, 2678, 3297, 284, 990, 563, 253, 8427, 282, 4591, 2892, 260, 7395, 21385, 3297, 284, 260, 273, 258, 1491, 13768, 804, 288, 2205, 260, 7395, 281, 1379, 592, 30283, 1673, 1814, 216, 34, 35, 1577, 216, 32, 32, 253, 1165, 6548, 3568, 832, 1214, 1130, 260, 2049, 2103, 282, 330, 6721, 4081, 282, 260, 12023, 1673, 669, 6341, 10010, 761, 15298, 805, 827, 355, 1296, 3487, 645, 260, 330, 6721, 3398, 9189, 3031, 6287, 2141, 260, 12023, 3656, 2229, 411, 1955, 13698, 338, 260, 2727, 436, 43661, 288, 260, 2798, 21906, 6115, 284, 338, 502, 868, 536, 17180, 1673, 198, 59, 279, 2432, 637, 99, 24779, 436, 965, 5859, 7617, 411, 253, 1528, 282, 2601, 41397, 18180, 281, 2038, 3385, 28003, 1673, 659, 279, 2432, 436, 15408, 284, 260, 550, 1296, 6110, 761, 288, 9770, 3297, 564, 384, 3408, 260, 2850, 2231, 2530, 1793, 216, 32, 39, 1577, 216, 35, 32, 260, 1867, 5738, 351, 650, 2244, 7837, 1673, 533, 260, 3414, 1523, 330, 6721, 3297, 260, 2601, 41397, 5380, 260, 216, 33, 302, 27119, 2509, 3297, 527, 436, 2141, 2850, 2231, 3297, 564, 502, 1250, 441, 1042, 260, 216, 34, 268, 27119, 2509, 34061, 1673, 198, 504, 38510, 216, 41, 373, 9760, 637, 99, 20681, 13107, 282, 260, 29095, 100, 516, 284, 3414, 335, 624, 6251, 2103, 2141, 25232, 3112, 690, 3347, 260, 6115, 282, 340, 6721, 3297, 4081, 282, 330, 6721, 1673, 1385, 260, 2601, 41397, 11905, 277, 281, 3075, 3297, 46644, 411, 2654, 35874, 284, 22753, 282, 356, 28818, 1673, 378, 2727, 3408, 624, 6115, 805, 253, 1890, 655, 284, 965, 11120, 288, 8080, 1673, 3027, 282, 260, 1800, 4935, 4203, 3297, 253, 1443, 282, 601, 4167, 618, 330, 6721, 637, 99, 21906, 1761, 6115, 2141, 2850, 2231, 981, 260, 3163, 1673, 3529, 282, 340, 6721, 4935, 511, 260, 970, 288, 260, 216, 34, 37, 373, 9760, 6115, 4203, 282, 260, 29095, 100, 516, 1673, 1985, 4448, 216, 33, 338, 7573, 3213, 338, 216, 33, 33, 32, 1800, 282, 340, 6721, 761, 1690, 618, 624, 3204, 1673, 198, 198, 45, 446, 446, 2601, 10916, 13107, 446, 446, 446, 198, 198, 15797, 3297, 216, 37, 4158, 365, 216, 40, 3394, 30, 48, 216, 32, 6381, 2481, 4081, 282, 2850, 2231, 284, 330, 6721, 637, 99, 2548, 3297, 389, 6721, 3297, 216, 41, 373, 23512, 3297, 3408, 253, 1887, 2548, 335, 8673, 216, 34, 32, 41, 33204, 260, 13947, 1846, 23831, 31936, 13107, 282, 260, 4626, 1673, 669, 31936, 436, 3807, 418, 260, 3891, 282, 260, 29095, 100, 516, 9546, 361, 837, 260, 718, 24947, 276, 3398, 2422, 1187, 288, 260, 29095, 100, 516, 284, 14997, 357, 1673, 378, 2038, 216, 34, 268, 23512, 9760, 761, 8176, 253, 31685, 4527, 288, 1120, 429, 665, 260, 3163, 282, 4053, 216, 35, 33, 3297, 260, 1142, 3163, 338, 260, 38510, 339, 12940, 15663, 18221, 1699, 260, 4626, 1673, 198, 41092, 260, 1112, 282, 260, 3531, 827, 31685, 48323, 429, 260, 216, 41, 373, 23512, 761, 14997, 288, 260, 5846, 2103, 282, 260, 29095, 100, 516, 284, 4537, 2601, 10916, 7837, 284, 30790, 2313, 216, 34, 4158, 365, 216, 35, 3394, 30, 48, 216, 34, 6381, 2481, 5846, 282, 260, 4626, 1673, 6117, 6238, 1916, 8217, 357, 436, 281, 1027, 260, 3588, 1681, 282, 260, 38510, 216, 41, 373, 9760, 1673, 1985, 4053, 216, 34, 37, 3297, 216, 41, 373, 23512, 15696, 20716, 2322, 452, 30, 8673, 13741, 14159, 476, 18073, 2506, 28576, 3297, 476, 527, 436, 288, 325, 253, 2727, 3394, 29, 48, 20498, 7604, 24779, 288, 3050, 260, 4626, 3297, 4408, 288, 260, 13130, 2601, 10916, 3588, 1681, 284, 9353, 3712, 3297, 5142, 357, 3297, 6382, 12184, 3297, 284, 2072, 5290, 1673, 198, 504, 216, 41, 373, 23512, 22500, 761, 8176, 15600, 9618, 2506, 28576, 335, 9112, 429, 260, 216, 34, 268, 9760, 15696, 11187, 4660, 48801, 389, 30, 4056, 14793, 3297, 527, 281, 1607, 761, 3656, 6388, 429, 47868, 1797, 1918, 6290, 15696, 24232, 4660, 49075, 19092, 327, 9948, 987, 13935, 1673, 4056, 14793, 4041, 260, 24779, 868, 3050, 260, 4626, 418, 260, 13947, 1846, 23831, 31936, 1673, 378, 216, 41, 373, 23512, 13398, 3297, 414, 6721, 3297, 17625, 351, 582, 3246, 282, 1420, 3746, 12466, 429, 407, 6721, 3297, 436, 288, 325, 260, 3414, 3075, 1673, 378, 216, 33, 302, 27119, 2509, 3297, 216, 34, 268, 27522, 35393, 27570, 3297, 436, 288, 3317, 357, 1699, 260, 4626, 281, 11905, 13768, 260, 3163, 282, 4053, 216, 35, 33, 1673, 5713, 4591, 7921, 3243, 3297, 422, 284, 407, 3297, 592, 971, 288, 28850, 582, 3246, 282, 4591, 3746, 12466, 3297, 582, 3246, 282, 216, 40, 33, 3394, 29, 48, 7610, 30, 5611, 954, 3297, 284, 582, 3246, 282, 216, 39, 37, 3394, 29, 48, 7610, 30, 692, 95, 388, 362, 34288, 327, 5682, 9935, 1673, 330, 26345, 2509, 282, 216, 36, 3394, 30, 48, 216, 34, 3394, 29, 48, 10714, 5611, 954, 436, 597, 288, 1928, 1199, 1673, 198, 4582, 3605, 335, 4053, 216, 35, 33, 3297, 3508, 24232, 6660, 339, 30, 2540, 43648, 282, 422, 6721, 284, 3508, 24232, 9446, 4823, 17657, 282, 407, 6721, 3297, 216, 41, 373, 23512, 3297, 4935, 480, 1800, 284, 7921, 288, 260, 3159, 282, 8673, 216, 34, 32, 41, 3297, 527, 436, 1127, 389, 6721, 637, 99, 7991, 5716, 284, 15152, 260, 13947, 1846, 23831, 31936, 13107, 282, 260, 29095, 100, 516, 3992, 1673, 378, 689, 4088, 3075, 3297, 414, 6721, 3297, 436, 1361, 281, 624, 779, 14780, 13398, 2548, 563, 216, 34, 4158, 365, 216, 35, 3394, 30, 48, 216, 34, 6381, 2481, 5846, 282, 718, 24947, 276, 3297, 2967, 4421, 351, 260, 10776, 26345, 2509, 288, 1485, 288, 260, 13107, 2530, 1673, 20716, 8673, 3514, 3703, 281, 260, 9053, 351, 260, 216, 36, 3394, 30, 48, 216, 34, 3394, 29, 48, 10714, 27238, 26345, 2509, 288, 624, 2548, 418, 260, 3159, 282, 8673, 216, 34, 32, 41, 837, 260, 5611, 994, 264, 4894, 288, 932, 614, 480, 7921, 1673, 198, 3087, 216, 34, 33, 1577, 216, 32, 32, 3297, 260, 13039, 3433, 1761, 2723, 436, 389, 6721, 335, 1466, 282, 8673, 216, 34, 32, 41, 3297, 216, 33, 12264, 365, 216, 33, 3394, 30, 48, 216, 38, 6381, 2481, 4081, 282, 260, 4626, 3398, 527, 18955, 1130, 260, 13083, 637, 99, 5677, 3159, 1673, 378, 779, 14780, 10162, 21062, 3297, 13756, 11968, 389, 30, 2306, 264, 3297, 761, 7270, 3703, 281, 260, 11342, 288, 389, 6721, 288, 2205, 2465, 1673, 1985, 1466, 282, 8673, 216, 34, 32, 41, 3297, 24657, 21062, 2306, 264, 284, 1800, 281, 389, 6721, 990, 3605, 3984, 9452, 3540, 281, 260, 913, 2441, 601, 1673, 1069, 3318, 3658, 253, 986, 1761, 282, 2601, 10916, 6333, 267, 8200, 260, 4626, 1673, 198, 504, 808, 2601, 10916, 13107, 418, 260, 13947, 1846, 23831, 31936, 8041, 260, 26016, 17906, 280, 27119, 2509, 46779, 281, 260, 705, 282, 4054, 614, 624, 7921, 1673, 657, 597, 8041, 768, 282, 260, 422, 284, 407, 6721, 1800, 418, 260, 3159, 282, 8673, 216, 34, 32, 41, 3297, 1673, 37, 4158, 365, 216, 32, 3394, 30, 48, 216, 40, 32, 6381, 2481, 429, 260, 13107, 2530, 1673, 378, 2601, 41397, 5375, 355, 8025, 800, 282, 260, 7207, 665, 1673, 8673, 436, 665, 3297, 564, 17954, 288, 260, 13401, 915, 1092, 25232, 3297, 1592, 351, 1545, 1449, 3297, 645, 260, 7573, 43619, 18073, 2506, 28576, 975, 282, 260, 5926, 1673, 378, 808, 4591, 7921, 7980, 4732, 436, 335, 624, 970, 614, 260, 13083, 645, 260, 2601, 10916, 3414, 38000, 277, 260, 1800, 2441, 1673, 657, 44489, 335, 288, 260, 1466, 837, 260, 4408, 1528, 25693, 284, 665, 511, 21965, 878, 20276, 281, 335, 253, 1165, 25096, 1673, 669, 1528, 436, 441, 12353, 981, 260, 3163, 1673, 198, 5212, 216, 34, 33, 1577, 216, 35, 32, 1793, 13825, 990, 25232, 260, 38510, 216, 41, 373, 9760, 14997, 260, 29095, 100, 516, 418, 253, 1230, 282, 3373, 284, 30324, 260, 12610, 20151, 1731, 260, 216, 41, 373, 23512, 4626, 1761, 6115, 1673, 3875, 3297, 645, 260, 18779, 2753, 2825, 7060, 21051, 3297, 260, 2601, 10916, 20681, 592, 281, 2548, 288, 7198, 480, 37442, 1673, 1216, 2585, 281, 260, 5761, 599, 282, 260, 779, 14780, 5716, 284, 3112, 2824, 39203, 1673, 1814, 971, 13107, 2530, 260, 2601, 41397, 736, 37928, 1679, 4954, 27943, 1092, 2194, 273, 13282, 258, 12223, 327, 480, 6110, 284, 23812, 1673, 198, 3473, 216, 32, 34, 1577, 216, 32, 32, 3297, 389, 6721, 436, 12353, 1673, 330, 15038, 8976, 418, 260, 4869, 282, 260, 13083, 3297, 253, 27742, 27768, 3297, 965, 2422, 253, 41223, 1686, 3297, 284, 2601, 10916, 6333, 2841, 15921, 260, 13761, 1673, 378, 12610, 335, 1062, 5882, 282, 389, 6721, 592, 2221, 656, 3414, 347, 436, 597, 8673, 216, 35, 33, 33, 3297, 253, 25663, 12979, 3865, 253, 216, 33, 3394, 30, 48, 216, 37, 4158, 365, 216, 34, 3394, 30, 48, 216, 36, 6381, 2481, 429, 260, 4626, 284, 260, 2601, 41397, 637, 8532, 6723, 6987, 1673, 378, 2601, 41397, 10647, 592, 441, 2839, 282, 260, 15600, 9618, 2506, 28576, 1528, 2208, 1187, 335, 260, 13083, 284, 357, 436, 441, 12353, 981, 260, 3163, 1673, 1249, 2061, 614, 335, 8673, 216, 34, 32, 41, 260, 2601, 41397, 19036, 389, 6721, 429, 624, 2548, 3297, 834, 38564, 1035, 4591, 20073, 335, 357, 1673, 2306, 264, 2842, 582, 1528, 282, 6333, 1056, 288, 7952, 3204, 335, 216, 36, 4448, 1673, 198, 3473, 216, 32, 35, 1577, 216, 32, 32, 3297, 216, 33, 4448, 3297, 260, 216, 41, 373, 23512, 22500, 8885, 624, 805, 13398, 3297, 414, 6721, 288, 1485, 5846, 1683, 260, 718, 24947, 276, 3394, 29, 48, 29095, 100, 516, 3992, 3398, 284, 1188, 253, 16526, 2548, 418, 260, 1301, 826, 1661, 1400, 18857, 8673, 284, 4841, 516, 3394, 29, 48, 39112, 19844, 3297, 216, 35, 4158, 365, 216, 36, 3394, 30, 48, 216, 40, 6381, 2481, 429, 260, 4626, 284, 216, 38, 4158, 365, 216, 41, 3394, 30, 48, 216, 39, 6381, 2481, 429, 718, 24947, 276, 1673, 669, 436, 260, 2609, 12979, 837, 588, 1083, 4591, 6755, 761, 2473, 1379, 281, 260, 808, 5182, 282, 260, 29095, 100, 516, 9546, 361, 1673, 38136, 2585, 418, 260, 1301, 418, 216, 32, 34, 1577, 216, 35, 32, 645, 354, 1547, 5641, 7837, 282, 330, 6721, 3297, 216, 39, 34, 268, 33092, 27570, 3297, 29991, 578, 253, 312, 3394, 29, 48, 216, 35, 36, 418, 312, 1433, 2231, 3297, 597, 1217, 4945, 271, 301, 1673, 414, 6721, 2093, 5388, 624, 16526, 2548, 1673, 330, 1837, 2601, 10916, 3075, 11869, 284, 8753, 4591, 12934, 2892, 335, 357, 418, 216, 32, 35, 1577, 216, 35, 32, 429, 6115, 253, 28839, 260, 3398, 6251, 282, 260, 1301, 1673, 378, 2727, 8845, 4591, 20073, 3297, 1285, 260, 2727, 15696, 284, 4056, 14793, 637, 99, 47695, 617, 761, 9637, 260, 3075, 1673, 1929, 260, 2609, 2391, 282, 1661, 1400, 18857, 8673, 284, 4841, 516, 3394, 29, 48, 39112, 19844, 3297, 260, 1450, 16730, 12979, 826, 718, 24947, 276, 284, 260, 4626, 3297, 260, 2601, 41397, 5918, 260, 904, 2118, 1673, 378, 2038, 216, 34, 268, 23512, 9760, 1209, 761, 288, 3159, 624, 7991, 282, 718, 24947, 276, 335, 4543, 3183, 16730, 12979, 3297, 260, 1642, 12610, 418, 260, 6378, 5595, 282, 260, 3102, 1673, 198, 198, 45, 446, 446, 2038, 216, 34, 35, 7212, 23512, 12353, 446, 446, 446, 198, 198, 18973, 282, 260, 216, 41, 373, 23512, 5716, 282, 260, 216, 34, 268, 23512, 9760, 3433, 1683, 260, 29095, 100, 516, 3297, 260, 2038, 216, 34, 35, 7212, 23512, 22500, 335, 4053, 216, 34, 41, 761, 915, 27650, 260, 216, 35, 7212, 27570, 282, 260, 2038, 216, 35, 40, 373, 23512, 22500, 3297, 527, 281, 1607, 761, 805, 253, 1443, 2009, 1092, 27650, 260, 2038, 216, 34, 33, 302, 23512, 22500, 282, 260, 2038, 216, 34, 36, 373, 23512, 9760, 1673, 1985, 4053, 216, 33, 3297, 260, 216, 34, 35, 7212, 22500, 436, 281, 253, 725, 5716, 282, 527, 357, 761, 805, 253, 3435, 1967, 1673, 657, 2637, 690, 253, 216, 33, 38, 3394, 28, 48, 216, 32, 32, 32, 17535, 365, 216, 33, 37, 3394, 28, 48, 216, 32, 32, 32, 283, 2481, 29095, 100, 516, 3992, 3433, 1355, 624, 216, 35, 7212, 27570, 527, 761, 719, 7064, 288, 260, 2038, 216, 33, 302, 34851, 9760, 288, 260, 4081, 1673, 20716, 5455, 450, 30, 33245, 3297, 260, 779, 14780, 15696, 3297, 15455, 260, 216, 33, 302, 27570, 335, 260, 904, 2118, 1683, 260, 4626, 351, 260, 1296, 3243, 31225, 1673, 378, 216, 33, 302, 27570, 3297, 656, 2038, 24232, 20716, 41369, 414, 30, 33462, 254, 3297, 11547, 1673, 3297, 578, 5696, 277, 260, 12610, 351, 475, 6401, 707, 284, 3031, 6287, 1673, 909, 4294, 260, 216, 34, 268, 27570, 281, 253, 13398, 2548, 216, 40, 4158, 365, 216, 33, 35, 6381, 2481, 2893, 260, 216, 33, 302, 27570, 284, 281, 253, 2548, 837, 357, 18761, 260, 3398, 1925, 281, 260, 779, 14780, 5716, 1673, 1985, 4053, 216, 35, 33, 88, 260, 216, 34, 268, 9760, 4935, 414, 6721, 4203, 288, 253, 13398, 2548, 281, 260, 216, 41, 373, 23512, 5716, 1673, 198, 10345, 8364, 7674, 738, 260, 779, 14780, 5716, 429, 260, 29095, 100, 516, 3992, 288, 27006, 5568, 516, 1673, 378, 1085, 3398, 18178, 4203, 1683, 260, 6251, 5461, 282, 260, 4626, 288, 377, 1433, 516, 3394, 29, 48, 39112, 284, 965, 4642, 19449, 288, 27006, 5568, 516, 1673, 330, 5761, 6442, 3398, 18955, 1130, 18886, 1219, 284, 10799, 3297, 260, 3995, 282, 527, 436, 6476, 514, 3394, 29, 48, 273, 637, 95, 3297, 288, 27006, 5568, 516, 1673, 533, 977, 3297, 260, 216, 33, 302, 27570, 282, 260, 216, 34, 35, 7212, 22500, 33159, 623, 827, 2424, 10523, 288, 27006, 5568, 516, 1673, 198, 504, 216, 36, 34, 1800, 282, 260, 216, 34, 268, 27119, 2509, 3297, 389, 6721, 3297, 216, 34, 35, 7212, 23512, 3408, 578, 5696, 6115, 335, 4962, 12610, 8536, 253, 216, 34, 3394, 28, 48, 216, 38, 32, 32, 17535, 365, 216, 34, 3394, 28, 48, 216, 36, 32, 32, 283, 2481, 3433, 1683, 260, 6251, 5461, 282, 260, 29095, 100, 516, 4081, 282, 377, 1433, 516, 3394, 29, 48, 39112, 1673, 23002, 260, 4626, 281, 260, 7341, 10567, 370, 502, 856, 963, 3297, 281, 260, 11342, 282, 4053, 216, 35, 33, 3297, 827, 1507, 2119, 282, 2601, 10916, 6333, 1673, 30893, 18779, 2892, 22772, 601, 1673, 3305, 1092, 3605, 3297, 260, 26345, 2509, 3680, 253, 4556, 282, 2601, 41397, 1690, 578, 282, 260, 12610, 284, 7219, 1731, 260, 4626, 1673, 1069, 4654, 3213, 288, 260, 31443, 3588, 1681, 1673, 378, 18779, 3703, 18971, 3297, 617, 5183, 260, 4556, 418, 216, 34, 3394, 28, 48, 216, 32, 32, 32, 701, 3297, 2275, 502, 592, 11622, 1673, 33245, 4654, 8885, 260, 18779, 288, 2892, 335, 260, 4556, 3297, 4345, 624, 1230, 1673, 1423, 260, 2601, 41397, 3675, 480, 4408, 1673, 198, 3473, 216, 34, 33, 1577, 216, 32, 32, 260, 808, 14866, 282, 732, 8271, 288, 325, 253, 827, 3394, 29, 48, 5353, 2601, 10916, 18779, 284, 27238, 7060, 1523, 260, 1547, 4626, 6115, 282, 216, 34, 268, 27119, 2509, 1673, 1032, 260, 2753, 2825, 18221, 335, 3297, 2601, 10916, 20681, 14997, 260, 4626, 284, 30324, 260, 12610, 281, 260, 13226, 656, 3114, 282, 624, 2892, 1673, 1814, 216, 34, 35, 1577, 216, 32, 32, 260, 2753, 2825, 21051, 284, 260, 2601, 41397, 12353, 216, 34, 268, 27119, 2509, 3297, 14072, 357, 429, 260, 13083, 990, 253, 1890, 3568, 1673, 14609, 37442, 2637, 1379, 8888, 1683, 260, 31443, 578, 5696, 1761, 1673, 198, 3280, 260, 779, 14780, 2049, 1683, 260, 1085, 377, 1433, 516, 3394, 29, 48, 39112, 3394, 29, 48, 27006, 5568, 516, 3398, 2601, 10916, 6333, 4036, 690, 3347, 340, 6721, 411, 216, 32, 35, 32, 32, 4448, 216, 33, 1673, 6906, 4962, 1800, 282, 340, 6721, 856, 325, 17973, 327, 3297, 284, 1296, 2009, 1916, 3297, 990, 511, 260, 4040, 1057, 6130, 284, 967, 2304, 767, 2893, 2601, 10916, 3204, 761, 1690, 281, 3297, 665, 592, 805, 216, 34, 32, 1800, 281, 260, 2727, 1673, 1032, 260, 2601, 10916, 3414, 2452, 981, 260, 3163, 3297, 216, 33, 302, 27570, 12829, 281, 43661, 253, 1507, 599, 282, 624, 3075, 3297, 1181, 340, 6721, 3297, 915, 4081, 282, 6476, 514, 3394, 29, 48, 273, 637, 95, 284, 260, 12610, 665, 8536, 260, 5761, 3398, 618, 27006, 5568, 516, 3297, 216, 35, 4158, 365, 216, 36, 3394, 30, 48, 216, 40, 6381, 2481, 6251, 282, 260, 4626, 284, 216, 37, 4158, 365, 216, 40, 3394, 30, 48, 216, 32, 6381, 2481, 5846, 282, 260, 3102, 1673, 389, 6721, 3590, 7100, 281, 451, 2353, 1673, 198, 2427, 2229, 282, 260, 8189, 338, 761, 14906, 2052, 216, 33, 302, 27570, 5388, 779, 14780, 17370, 3297, 33245, 6238, 260, 4706, 282, 452, 284, 426, 17332, 429, 216, 34, 268, 9760, 13398, 284, 2362, 260, 4302, 288, 724, 216, 33, 302, 27570, 284, 260, 6791, 335, 260, 5677, 3398, 1731, 377, 1433, 516, 3394, 29, 48, 39112, 284, 340, 6721, 1673, 11187, 28182, 659, 30, 530, 21063, 3297, 9518, 9791, 282, 260, 216, 34, 268, 27570, 3297, 9637, 426, 6721, 1187, 260, 377, 1433, 516, 3394, 29, 48, 39112, 3398, 1673, 669, 3075, 436, 7168, 288, 3470, 340, 6721, 3297, 564, 530, 21063, 5771, 4040, 1057, 6130, 429, 357, 284, 20132, 904, 2118, 253, 28839, 451, 1085, 2424, 288, 27006, 5568, 516, 2141, 40210, 322, 637, 95, 3394, 29, 48, 412, 89, 2120, 6476, 4653, 270, 16147, 3297, 284, 3514, 618, 253, 16730, 2548, 665, 1673, 378, 2038, 216, 34, 268, 9760, 5118, 414, 6721, 288, 260, 23863, 284, 260, 1867, 1194, 357, 7238, 426, 6721, 288, 1235, 614, 732, 2163, 260, 1085, 16730, 2548, 282, 260, 216, 34, 35, 84, 22500, 281, 3433, 282, 27006, 5568, 516, 1673, 2601, 10916, 7207, 981, 260, 3163, 4180, 1130, 260, 1048, 25326, 282, 216, 33, 302, 27570, 637, 99, 5761, 16526, 2548, 284, 5388, 260, 3398, 1296, 4158, 2893, 1272, 2141, 260, 7573, 18779, 6115, 1673, 378, 216, 34, 35, 7212, 23512, 37067, 284, 5538, 17332, 284, 550, 20746, 37774, 779, 14780, 4784, 5087, 8976, 451, 22642, 2141, 260, 779, 14780, 3588, 1681, 216, 37, 4158, 365, 216, 40, 3394, 30, 48, 216, 32, 6381, 2481, 19068, 282, 27006, 5568, 516, 1673, 198, 198, 45, 446, 446, 2038, 216, 34, 268, 9760, 7074, 446, 446, 446, 198, 198, 6121, 260, 5738, 282, 216, 33, 4448, 761, 4180, 3297, 4631, 4167, 281, 288, 2038, 216, 34, 268, 9760, 17370, 1135, 357, 2437, 338, 2601, 41397, 761, 44385, 288, 260, 4081, 3394, 29, 48, 4203, 27006, 5568, 516, 3394, 29, 48, 718, 24947, 276, 3398, 284, 2304, 260, 7573, 281, 827, 8544, 260, 216, 35, 40, 373, 284, 216, 34, 35, 84, 23512, 3192, 9087, 351, 260, 12785, 282, 260, 7573, 18779, 281, 260, 4081, 592, 9075, 429, 260, 7573, 17370, 284, 260, 216, 41, 373, 23512, 22500, 281, 260, 4203, 1673, 4056, 14793, 4041, 338, 451, 3223, 1135, 357, 23748, 288, 1533, 284, 1454, 260, 6066, 7573, 347, 827, 1767, 3654, 1673, 23184, 3297, 384, 4294, 260, 7573, 18779, 15696, 3297, 16769, 36408, 4660, 35633, 372, 30, 13030, 5531, 3297, 281, 3588, 282, 260, 5761, 1528, 1673, 13030, 5531, 637, 3588, 1681, 436, 216, 39, 4158, 365, 216, 33, 33, 6381, 2481, 4081, 282, 27006, 5568, 516, 1673, 15600, 9618, 13030, 5531, 2163, 10811, 418, 216, 33, 32, 1577, 216, 34, 32, 3297, 4448, 216, 33, 1673, 2582, 959, 3297, 281, 260, 718, 24947, 276, 1557, 3297, 4056, 14793, 4294, 16769, 36408, 4660, 7509, 334, 30, 32964, 3297, 20108, 9760, 26457, 3297, 281, 5363, 282, 260, 216, 41, 373, 23512, 22500, 3297, 260, 216, 34, 268, 27522, 35393, 27570, 3297, 768, 282, 260, 216, 39, 34, 268, 33092, 27570, 3297, 284, 550, 20746, 37774, 4784, 282, 260, 7573, 1673, 669, 5677, 24669, 436, 1343, 347, 15600, 9618, 32964, 1673, 198, 4518, 1296, 34168, 282, 260, 38510, 216, 34, 268, 9760, 3394, 29, 48, 260, 216, 36, 373, 3297, 216, 33, 39, 373, 3297, 284, 216, 38, 373, 3297, 281, 1761, 429, 4081, 288, 4203, 3394, 29, 48, 14997, 981, 260, 3163, 288, 260, 6251, 2103, 282, 260, 29095, 100, 516, 3992, 618, 260, 216, 34, 35, 7212, 22500, 5716, 1673, 378, 38510, 216, 34, 268, 9760, 3297, 12443, 281, 260, 17981, 2947, 3394, 29, 48, 39112, 1557, 5846, 282, 260, 4626, 3297, 761, 3297, 281, 977, 3297, 12353, 5173, 6251, 1699, 260, 4626, 284, 436, 3396, 288, 26989, 260, 827, 18556, 282, 4408, 618, 27006, 5568, 516, 2120, 284, 2441, 6476, 514, 3394, 29, 48, 273, 637, 95, 1673, 1985, 4053, 216, 35, 33, 3297, 216, 33, 41, 37, 32, 3297, 6476, 514, 3394, 29, 48, 273, 637, 95, 436, 253, 1507, 1248, 282, 913, 3551, 281, 768, 3373, 1035, 12120, 1673, 198, 3473, 16804, 4448, 216, 33, 3297, 4056, 14793, 418, 216, 34, 268, 9760, 17370, 281, 372, 9819, 3394, 29, 48, 39112, 3297, 216, 39, 4158, 365, 216, 33, 33, 6381, 2481, 6251, 282, 718, 24947, 276, 335, 260, 21923, 32804, 3398, 3297, 4592, 650, 7573, 436, 281, 260, 18867, 282, 253, 6051, 1673, 378, 6207, 2601, 10916, 3414, 761, 1135, 2276, 10742, 4729, 9564, 281, 260, 7573, 5716, 2560, 281, 260, 4081, 281, 260, 7323, 282, 260, 216, 35, 40, 373, 23512, 1673, 378, 38510, 216, 41, 373, 9760, 761, 37284, 1739, 40254, 282, 260, 29095, 100, 516, 418, 827, 8532, 2876, 1523, 260, 2038, 216, 41, 373, 23512, 8544, 260, 38510, 216, 34, 268, 9760, 281, 260, 22441, 761, 1135, 1296, 1739, 40254, 1523, 260, 2038, 216, 34, 35, 7212, 23512, 8544, 284, 260, 38510, 216, 33, 32, 373, 9760, 761, 10176, 13107, 540, 7207, 281, 260, 8673, 216, 36, 32, 41, 1557, 2141, 7925, 516, 96, 637, 2280, 281, 260, 2038, 216, 35, 40, 373, 23512, 5716, 1673, 1814, 216, 32, 40, 1577, 216, 33, 32, 4056, 14793, 4462, 647, 17174, 47868, 6290, 17370, 284, 3213, 260, 42306, 284, 25849, 2601, 10916, 10742, 4729, 592, 281, 260, 216, 41, 373, 23512, 5716, 1673, 198, 60, 542, 2164, 13958, 8739, 429, 260, 7573, 13643, 897, 5353, 288, 7861, 260, 2601, 10916, 2894, 284, 288, 12727, 2038, 216, 34, 268, 23512, 9760, 3433, 3394, 29, 48, 1761, 4784, 1673, 11429, 429, 7573, 284, 779, 14780, 17370, 288, 3920, 511, 260, 3703, 4784, 436, 6792, 1673, 23403, 418, 216, 32, 41, 1577, 216, 35, 32, 284, 9421, 2126, 260, 1532, 282, 260, 1194, 3297, 260, 1420, 17623, 3246, 282, 260, 7573, 18779, 3807, 3433, 3394, 29, 48, 1761, 4784, 2304, 767, 411, 260, 2601, 41397, 3297, 284, 1135, 24859, 1512, 47352, 282, 25738, 3297, 1114, 3297, 913, 3297, 284, 2340, 6864, 1673, 1032, 1096, 6351, 2837, 614, 418, 7573, 17370, 357, 2163, 6096, 338, 260, 2601, 41397, 761, 5270, 2823, 253, 7490, 216, 38, 4158, 365, 216, 41, 3394, 30, 48, 216, 39, 6381, 2481, 3599, 284, 216, 40, 4158, 365, 216, 33, 35, 6381, 2481, 2276, 281, 260, 3891, 282, 260, 7573, 1761, 284, 1135, 1181, 3523, 10742, 4729, 8888, 1673, 378, 3433, 3394, 29, 48, 1761, 43262, 282, 260, 2038, 216, 41, 373, 284, 216, 34, 35, 7212, 3192, 9087, 592, 281, 1461, 2496, 282, 510, 22452, 284, 634, 3243, 761, 10210, 15784, 1673, 4056, 14793, 14762, 384, 856, 11242, 253, 7991, 1683, 260, 27006, 5568, 516, 3394, 29, 48, 718, 24947, 276, 3398, 6251, 282, 260, 29095, 100, 516, 3992, 3297, 284, 1746, 2601, 10916, 1594, 288, 260, 10466, 38222, 2899, 288, 21923, 32804, 284, 678, 637, 516, 4326, 1673, 198, 198, 45, 446, 446, 24352, 4021, 658, 446, 446, 446, 198, 198, 3473, 216, 32, 41, 1577, 216, 32, 32, 19092, 13682, 260, 2038, 5097, 9618, 288, 919, 253, 5428, 3867, 1683, 260, 29095, 100, 516, 3992, 429, 1626, 538, 516, 3394, 29, 48, 287, 516, 3297, 915, 2120, 260, 2038, 216, 34, 268, 9760, 10651, 3297, 39203, 284, 288, 253, 5856, 282, 216, 33, 37, 4158, 365, 216, 34, 36, 6381, 2481, 5846, 282, 260, 4626, 1673, 909, 4146, 260, 5097, 9618, 288, 21016, 260, 21301, 284, 1746, 2030, 2601, 10916, 38621, 284, 6864, 429, 4138, 1699, 260, 4626, 281, 1199, 282, 260, 2601, 10916, 23919, 2699, 4784, 1673, 378, 10110, 4365, 12861, 13682, 260, 2038, 10400, 288, 5757, 281, 260, 1512, 3867, 3297, 284, 260, 2038, 33924, 28552, 4642, 1056, 429, 624, 14259, 281, 260, 533, 322, 637, 258, 3394, 29, 48, 39903, 1557, 284, 574, 277, 39203, 418, 2073, 9403, 1731, 260, 5677, 5182, 3433, 1673, 19092, 2422, 288, 260, 2038, 216, 34, 268, 9760, 3433, 418, 216, 33, 34, 1577, 216, 32, 32, 284, 8885, 260, 7573, 288, 2205, 418, 511, 3499, 1673, 909, 761, 2221, 8885, 2118, 38621, 288, 260, 718, 24947, 276, 1557, 1673, 198, 6307, 260, 5738, 282, 216, 33, 4448, 3297, 19092, 24160, 260, 3661, 4167, 281, 429, 650, 5677, 3433, 3297, 4398, 331, 274, 281, 253, 3062, 347, 288, 527, 599, 282, 260, 3433, 768, 2350, 650, 377, 376, 276, 3017, 13152, 12562, 1673, 4311, 25232, 260, 38510, 339, 12940, 761, 6792, 650, 377, 376, 276, 3017, 13152, 281, 827, 3373, 3394, 29, 48, 260, 38510, 216, 34, 268, 284, 216, 41, 373, 6436, 2730, 281, 260, 2038, 216, 34, 268, 9760, 5716, 3297, 284, 260, 38510, 216, 39, 373, 9760, 284, 38510, 216, 38, 373, 9760, 281, 260, 2038, 216, 34, 37, 373, 9760, 5716, 3297, 2441, 260, 22290, 282, 260, 18620, 284, 29095, 100, 516, 19968, 1673, 533, 260, 2038, 216, 34, 268, 9760, 5716, 2601, 10916, 7207, 592, 418, 260, 5595, 282, 718, 24947, 276, 3297, 260, 23147, 288, 260, 29427, 2899, 216, 33, 34, 4158, 365, 216, 33, 41, 6381, 2481, 38222, 288, 21923, 32804, 284, 260, 1085, 377, 376, 276, 3394, 29, 48, 38006, 5629, 12241, 284, 17603, 1673, 198, 53, 11935, 6290, 761, 281, 13398, 1296, 656, 33708, 20681, 34168, 284, 260, 216, 34, 3394, 29, 48, 31443, 2938, 216, 34, 39, 373, 23512, 25925, 527, 436, 441, 2408, 4036, 9031, 284, 4421, 288, 325, 4294, 281, 1761, 1577, 378, 216, 33, 302, 1053, 47458, 11847, 25925, 418, 27006, 38955, 3297, 216, 38, 4158, 365, 216, 41, 3394, 30, 48, 216, 39, 6381, 2481, 19449, 282, 15757, 276, 3297, 8312, 327, 2891, 288, 260, 2399, 282, 377, 376, 276, 8544, 260, 2038, 216, 34, 39, 373, 23512, 22500, 282, 260, 216, 34, 37, 373, 9760, 527, 761, 6612, 418, 15757, 276, 805, 260, 3163, 1092, 418, 216, 34, 32, 1577, 216, 35, 32, 288, 14079, 260, 216, 37, 373, 3192, 14780, 35393, 12733, 3297, 527, 436, 965, 288, 5757, 260, 216, 34, 36, 373, 9760, 281, 260, 16577, 9503, 1557, 8544, 284, 260, 2038, 216, 33, 41, 373, 23512, 22500, 282, 260, 2038, 216, 34, 36, 373, 23512, 9760, 3297, 965, 351, 338, 7573, 637, 99, 17370, 418, 17365, 24947, 276, 19594, 282, 16577, 9503, 1673, 19092, 48691, 1062, 260, 216, 34, 36, 373, 9760, 17370, 3297, 1592, 351, 624, 216, 33, 41, 373, 22500, 3297, 284, 260, 216, 33, 302, 1053, 47458, 11847, 25925, 288, 1485, 418, 253, 3847, 637, 99, 4887, 8544, 260, 216, 34, 36, 373, 9760, 2267, 288, 260, 216, 34, 268, 355, 216, 34, 37, 373, 9760, 32073, 3297, 284, 260, 1831, 884, 288, 354, 551, 1682, 5666, 10420, 1673, 198, 1653, 260, 5738, 4180, 3297, 4660, 19092, 4041, 338, 260, 3223, 436, 768, 2609, 281, 260, 29095, 100, 516, 9546, 361, 1557, 282, 260, 2038, 216, 34, 268, 9760, 5716, 1673, 1385, 260, 2601, 41397, 9521, 21923, 32804, 284, 351, 357, 260, 2415, 47868, 6290, 2548, 1673, 1814, 216, 33, 33, 1577, 216, 32, 32, 19092, 8885, 2038, 11847, 12940, 16769, 36408, 4660, 9446, 330, 30, 26984, 3297, 30498, 260, 216, 33, 302, 1053, 47458, 11847, 25925, 3297, 288, 5697, 260, 1831, 884, 288, 1485, 418, 2268, 1673, 378, 1831, 884, 1135, 4421, 288, 7425, 327, 260, 29095, 100, 516, 9546, 361, 418, 216, 33, 35, 1577, 216, 35, 32, 1673, 198, 198, 45, 446, 446, 2601, 10916, 4408, 446, 446, 446, 198, 198, 504, 3223, 335, 260, 3433, 436, 25190, 981, 260, 1194, 4448, 216, 33, 1673, 378, 2601, 41397, 418, 582, 1379, 761, 14997, 418, 260, 659, 7402, 604, 31936, 3297, 8025, 2850, 2231, 3297, 284, 13490, 330, 6721, 3297, 216, 41, 373, 23512, 418, 624, 6115, 429, 2850, 2231, 34061, 1673, 330, 6721, 30090, 288, 6115, 335, 260, 21906, 1761, 1056, 282, 260, 4626, 1673, 3300, 665, 418, 19916, 260, 1800, 856, 963, 2601, 10916, 6333, 335, 800, 282, 260, 28097, 3990, 601, 3297, 768, 282, 601, 4138, 6251, 1673, 2550, 1545, 2737, 3297, 216, 34, 268, 27119, 2509, 282, 330, 6721, 2362, 253, 24779, 1187, 260, 13083, 288, 2850, 2231, 288, 3478, 6864, 11268, 665, 981, 260, 3163, 3297, 10900, 1916, 351, 1083, 2350, 913, 3297, 42779, 3297, 284, 25738, 1673, 198, 24790, 281, 260, 5738, 2601, 10916, 18799, 266, 14997, 260, 29095, 100, 516, 2441, 330, 6721, 1673, 378, 2727, 2362, 253, 22884, 351, 253, 1420, 3746, 6341, 288, 260, 5677, 8618, 282, 260, 21906, 33204, 2850, 2231, 288, 1188, 623, 7207, 656, 2892, 1673, 1550, 260, 22884, 5388, 260, 8618, 282, 260, 21906, 502, 3680, 338, 253, 2601, 10916, 3075, 10559, 6648, 418, 624, 3159, 1673, 378, 2727, 5380, 623, 6648, 351, 18779, 1673, 378, 2601, 41397, 10764, 429, 260, 6648, 3297, 4108, 327, 260, 4626, 1673, 1814, 451, 260, 1420, 3746, 6341, 418, 260, 8618, 282, 260, 21906, 2637, 601, 656, 2892, 3297, 347, 1250, 1372, 1699, 260, 29095, 100, 516, 288, 260, 4203, 281, 260, 2038, 216, 34, 37, 373, 23512, 9760, 5716, 1673, 43585, 13533, 7839, 2404, 18779, 2892, 44854, 451, 1528, 1673, 32061, 2892, 429, 511, 7921, 28106, 354, 5183, 216, 35, 32, 32, 20073, 335, 451, 2601, 10916, 3075, 1673, 533, 260, 11342, 3297, 2038, 6995, 10370, 1114, 284, 25738, 288, 260, 2727, 8544, 805, 599, 282, 357, 436, 13841, 1673, 378, 216, 33, 302, 27570, 8885, 330, 6721, 288, 9770, 260, 2727, 338, 3163, 1673, 198, 6307, 260, 9770, 3297, 2107, 3297, 330, 6721, 7674, 618, 253, 43046, 2601, 10916, 3075, 284, 761, 13490, 281, 260, 31701, 3568, 1673, 3529, 282, 260, 2727, 3297, 1285, 624, 15696, 592, 5375, 418, 2800, 1845, 1673, 533, 451, 22415, 2353, 3297, 18950, 3508, 5397, 11833, 407, 30, 10124, 3297, 253, 7921, 22884, 5702, 3297, 9221, 588, 3772, 387, 10604, 338, 384, 436, 12090, 260, 25691, 282, 25499, 1673, 13878, 318, 15408, 3297, 10124, 10999, 288, 325, 253, 10344, 288, 967, 617, 1124, 8080, 3297, 284, 645, 1596, 2269, 436, 1361, 4798, 2601, 10916, 418, 2800, 1845, 1673, 3513, 967, 281, 260, 2727, 3297, 4723, 3772, 1800, 17954, 288, 7952, 3204, 1673, 378, 1867, 5738, 3297, 656, 4591, 19998, 3297, 260, 1528, 1135, 624, 970, 411, 23006, 1731, 718, 24947, 276, 1673, 3300, 253, 13083, 418, 216, 33, 34, 1577, 216, 32, 32, 3297, 990, 260, 19998, 761, 21051, 3297, 260, 1800, 5328, 1187, 335, 260, 9420, 282, 718, 24947, 276, 527, 436, 965, 281, 2894, 1673, 1848, 11342, 216, 34, 32, 12977, 282, 260, 2727, 21284, 618, 260, 3204, 282, 260, 216, 39, 34, 268, 33092, 27570, 2141, 718, 24947, 276, 1673, 19144, 1057, 6130, 429, 451, 2548, 3675, 288, 5390, 281, 260, 1867, 1443, 2009, 347, 876, 1673, 198, 198, 45, 446, 446, 378, 1112, 282, 15600, 9618, 2506, 28576, 446, 446, 446, 198, 198, 788, 260, 22441, 3297, 15600, 9618, 2506, 28576, 436, 1361, 6961, 624, 2548, 1683, 260, 29095, 100, 516, 3992, 3297, 563, 216, 37, 4158, 365, 216, 40, 3394, 30, 48, 216, 32, 6381, 2481, 4081, 282, 837, 330, 6721, 761, 719, 7652, 335, 260, 5677, 1112, 282, 260, 1761, 1673, 378, 25096, 2548, 2473, 411, 260, 1800, 282, 422, 284, 407, 17332, 3297, 216, 41, 373, 23512, 3297, 617, 761, 2841, 614, 260, 13083, 1092, 260, 2601, 41397, 10856, 3297, 436, 335, 253, 5677, 43711, 282, 8673, 216, 34, 32, 41, 3297, 216, 32, 3394, 30, 48, 216, 37, 4158, 365, 216, 32, 3394, 30, 48, 216, 40, 32, 6381, 2481, 4203, 282, 389, 6721, 637, 99, 2061, 2548, 1673, 533, 1706, 288, 260, 422, 284, 407, 6721, 1800, 3297, 665, 592, 253, 1443, 429, 260, 26016, 17906, 280, 27119, 2509, 284, 582, 355, 827, 429, 389, 6721, 1673, 19659, 5652, 3297, 216, 38, 32, 288, 216, 39, 32, 1800, 592, 281, 260, 1528, 1673, 378, 1528, 761, 354, 334, 9088, 3394, 29, 48, 216, 35, 32, 32, 5171, 3297, 253, 4591, 3746, 6341, 3297, 827, 1420, 3746, 6341, 3297, 253, 372, 33, 41, 33, 40, 46976, 40360, 37041, 290, 3297, 563, 216, 34, 32, 372, 33, 11858, 397, 34288, 3297, 284, 563, 216, 36, 32, 7944, 884, 355, 17472, 9950, 1673, 4823, 17657, 9830, 3588, 282, 260, 1528, 1673, 198, 6307, 260, 3163, 4823, 17657, 3251, 5171, 2908, 351, 260, 216, 33, 302, 27570, 3297, 216, 41, 373, 20681, 1673, 1550, 19916, 2422, 4823, 17657, 284, 650, 1528, 3680, 338, 502, 592, 10000, 411, 2601, 41397, 1673, 1963, 3075, 10559, 260, 2061, 43711, 2745, 253, 12264, 2120, 601, 3297, 16607, 3408, 411, 389, 6721, 1673, 15705, 601, 3297, 2601, 41397, 3675, 13107, 260, 4626, 284, 4138, 6864, 3703, 288, 480, 7604, 4784, 3297, 634, 282, 601, 2221, 1545, 4158, 38222, 1673, 378, 2601, 41397, 3112, 3658, 15600, 9618, 2506, 28576, 1528, 1673, 1069, 808, 12353, 357, 418, 216, 33, 36, 1577, 216, 32, 32, 338, 11342, 3297, 284, 592, 1024, 48944, 1673, 1848, 3163, 354, 5183, 2727, 12353, 1296, 1711, 3297, 9709, 260, 3568, 288, 2800, 18135, 3297, 564, 6344, 971, 655, 288, 21354, 260, 9030, 2038, 25096, 1673, 4115, 2501, 282, 260, 1796, 1194, 33255, 800, 2601, 10916, 3895, 335, 260, 13297, 18222, 2856, 260, 25096, 1673, 198, 788, 260, 11342, 282, 4448, 216, 34, 4823, 17657, 5171, 277, 216, 33, 302, 27570, 327, 354, 1512, 9467, 282, 6864, 1673, 330, 2038, 8303, 11120, 260, 5768, 3297, 564, 260, 25096, 436, 588, 1165, 284, 260, 18222, 588, 13297, 338, 10210, 511, 260, 6864, 3514, 618, 2601, 10916, 3288, 1673, 378, 1800, 281, 260, 25096, 1250, 3297, 2107, 3297, 8516, 429, 253, 5768, 1135, 1916, 418, 216, 33, 41, 1577, 216, 32, 32, 634, 6864, 284, 25738, 1673, 18950, 3508, 5397, 7509, 428, 30, 492, 2726, 33306, 3297, 282, 407, 6721, 3297, 2049, 260, 25096, 288, 4960, 7921, 3297, 25738, 3297, 284, 42145, 2968, 429, 260, 2601, 10916, 3895, 1673, 1985, 1545, 14028, 384, 436, 12353, 3297, 284, 335, 582, 715, 7040, 253, 2601, 10916, 14848, 8922, 12353, 492, 2726, 33306, 3297, 617, 5375, 260, 2601, 10916, 281, 1369, 3394, 29, 48, 288, 3394, 29, 48, 1369, 7604, 1673, 198, 5195, 1142, 11342, 3297, 260, 2601, 41397, 2362, 354, 1547, 22288, 614, 260, 13083, 288, 4823, 17657, 351, 260, 3714, 3297, 476, 1206, 457, 582, 5353, 288, 17676, 355, 325, 24312, 288, 4443, 1673, 476, 426, 8476, 281, 26893, 20681, 3414, 288, 2369, 260, 1838, 19325, 3075, 3297, 260, 2601, 41397, 1209, 4972, 288, 1188, 357, 656, 27238, 2892, 1673, 6906, 216, 36, 37, 3487, 1916, 2601, 10916, 26892, 1459, 2892, 2422, 281, 335, 260, 43711, 284, 827, 3746, 12466, 429, 6115, 34061, 284, 2061, 335, 260, 13761, 282, 8673, 216, 34, 32, 41, 21294, 260, 25096, 1673, 15218, 3297, 5611, 954, 649, 27010, 335, 253, 13711, 904, 8400, 21906, 38222, 10394, 335, 4823, 17657, 637, 99, 25096, 284, 3675, 17607, 1793, 3605, 1673, 378, 3746, 6341, 2892, 5657, 897, 555, 288, 2951, 281, 650, 16438, 19808, 1673, 378, 17168, 282, 260, 27238, 2892, 990, 3605, 436, 260, 4973, 327, 15021, 2601, 10916, 20681, 5926, 3297, 511, 282, 527, 592, 1024, 48944, 1673, 1249, 260, 1230, 282, 5375, 284, 15408, 1127, 260, 25096, 436, 2969, 3297, 284, 6864, 592, 29960, 1673, 1385, 592, 787, 2340, 6864, 2560, 967, 4891, 411, 582, 5146, 555, 1673, 198, 504, 3464, 1194, 3297, 4448, 216, 35, 3297, 260, 3223, 38027, 1673, 378, 3947, 436, 3380, 284, 25738, 3297, 1114, 284, 6864, 592, 3920, 4036, 21850, 1673, 4311, 260, 2672, 11342, 3297, 2601, 10916, 27238, 2753, 1808, 266, 761, 2936, 483, 351, 20681, 37442, 1523, 260, 25096, 1673, 42411, 579, 1916, 5183, 665, 592, 563, 7522, 4447, 20681, 5926, 1024, 48944, 1673, 5713, 2601, 10916, 3746, 12466, 1361, 21294, 260, 25096, 7562, 4325, 4342, 3930, 1673, 16754, 284, 11888, 2038, 7207, 592, 281, 2743, 897, 16438, 19808, 1673, 17906, 280, 13693, 7652, 260, 5171, 284, 451, 7569, 511, 2908, 351, 550, 2038, 4784, 1673, 41302, 2892, 284, 1512, 14259, 13682, 411, 4823, 17657, 2093, 2422, 1673, 2015, 2601, 41397, 4147, 480, 970, 2800, 288, 260, 25096, 284, 23712, 42145, 2968, 618, 357, 1673, 13641, 1711, 492, 2726, 33306, 425, 8877, 429, 650, 16438, 19808, 288, 8080, 42145, 2968, 14098, 618, 357, 1673, 533, 451, 2800, 2353, 492, 2726, 33306, 436, 5375, 1673, 3529, 282, 260, 16438, 28932, 282, 260, 25096, 3656, 582, 355, 540, 1454, 27238, 15743, 281, 260, 1740, 282, 260, 9421, 27238, 2892, 1673, 1963, 282, 623, 5375, 4823, 17657, 335, 4448, 216, 35, 1673, 378, 3588, 4180, 1209, 288, 3508, 24232, 30957, 530, 30, 4139, 8084, 956, 282, 422, 6721, 3297, 8299, 14203, 9791, 1673, 198, 3473, 19916, 335, 260, 5738, 282, 216, 36, 4448, 805, 827, 8497, 284, 4723, 2745, 260, 1800, 617, 761, 16551, 335, 260, 13083, 3297, 592, 8441, 1673, 1032, 260, 1194, 4180, 3297, 351, 25738, 1187, 288, 563, 582, 16092, 567, 555, 284, 805, 253, 1443, 42145, 2968, 2049, 284, 787, 724, 281, 6968, 3297, 4139, 8084, 956, 4041, 288, 8039, 260, 2548, 338, 3163, 1673, 1550, 357, 3363, 3605, 260, 12977, 736, 7074, 618, 1165, 2119, 284, 1576, 288, 820, 1056, 288, 7952, 3204, 1673, 1848, 9053, 990, 3605, 260, 2601, 41397, 7876, 1372, 4238, 3414, 1523, 260, 2548, 1673, 1814, 216, 34, 34, 1577, 216, 32, 32, 3297, 4139, 8084, 956, 284, 2540, 43648, 284, 216, 34, 39, 28232, 1800, 36031, 767, 260, 13083, 281, 2119, 282, 1876, 1673, 9193, 48185, 3295, 3966, 414, 30, 19047, 7412, 3297, 1361, 8441, 281, 650, 41580, 2619, 3297, 10999, 3016, 282, 24552, 3297, 4976, 338, 384, 1250, 441, 1277, 288, 325, 253, 10344, 288, 967, 617, 761, 253, 4468, 288, 820, 2025, 1673, 909, 3413, 805, 338, 650, 7944, 462, 325, 13049, 284, 4294, 335, 650, 8349, 351, 260, 42771, 656, 650, 26845, 1673, 5878, 492, 336, 33306, 3297, 384, 736, 597, 4726, 260, 25691, 282, 25499, 327, 650, 3643, 1673, 3513, 260, 216, 34, 41, 1800, 617, 2422, 767, 260, 13083, 260, 3163, 282, 4448, 216, 36, 3297, 216, 34, 34, 17954, 288, 7952, 3204, 3297, 800, 282, 601, 1695, 260, 29095, 100, 516, 17488, 3297, 14959, 411, 1194, 284, 10323, 411, 3163, 3297, 1793, 502, 5388, 260, 3204, 282, 260, 2038, 216, 34, 37, 373, 23512, 9760, 1673, 198, 33367, 282, 15600, 9618, 2506, 28576, 617, 17954, 429, 8673, 216, 34, 32, 41, 3621, 1056, 8221, 5290, 1096, 282, 2601, 10916, 2313, 281, 260, 21221, 282, 260, 13947, 1846, 23831, 31936, 13107, 2530, 1673, 1814, 260, 31936, 2530, 260, 2601, 41397, 761, 1830, 281, 354, 13622, 7395, 1673, 330, 1890, 4052, 17488, 3297, 971, 3163, 502, 4294, 253, 273, 13282, 258, 7395, 1699, 260, 4626, 284, 2637, 357, 614, 1092, 16804, 260, 1867, 5738, 1673, 2974, 11089, 5491, 282, 216, 37, 32, 17735, 33159, 411, 1876, 2601, 10916, 6333, 14997, 260, 4626, 11544, 418, 3163, 3297, 354, 5183, 2719, 282, 216, 40, 32, 32, 3394, 29, 48, 216, 33, 3394, 28, 48, 216, 32, 32, 32, 17614, 1036, 804, 418, 451, 13107, 2530, 1673, 198, 198, 45, 446, 446, 27006, 105, 516, 446, 446, 446, 198, 198, 18973, 282, 260, 2038, 216, 41, 373, 23512, 284, 260, 11763, 281, 260, 29095, 100, 516, 9546, 361, 284, 1130, 718, 24947, 276, 3297, 260, 2038, 216, 34, 35, 84, 23512, 22500, 990, 19916, 282, 4448, 216, 33, 436, 281, 253, 1035, 38088, 2548, 1673, 4781, 216, 33, 302, 27570, 761, 719, 8406, 429, 260, 4626, 6115, 284, 8807, 216, 35, 4158, 365, 216, 36, 3394, 30, 48, 216, 40, 6381, 2481, 26771, 1673, 24230, 216, 36, 32, 32, 2601, 41397, 1209, 690, 3347, 260, 779, 14780, 3588, 1681, 3297, 10337, 33245, 288, 9770, 357, 563, 216, 38, 32, 32, 17535, 365, 216, 37, 37, 32, 283, 2481, 1673, 1385, 3297, 216, 37, 4158, 365, 216, 40, 3394, 30, 48, 216, 32, 6381, 2481, 19068, 282, 27006, 5568, 516, 3297, 260, 2038, 216, 34, 35, 7212, 23512, 37067, 284, 37067, 6721, 3297, 20746, 37774, 779, 14780, 4784, 3297, 284, 779, 14780, 4504, 8497, 12775, 260, 2601, 41397, 281, 253, 216, 35, 3394, 29, 48, 5353, 3568, 1673, 198, 504, 2601, 41397, 4378, 288, 27006, 5568, 516, 2581, 981, 260, 11342, 282, 4448, 216, 34, 3297, 284, 428, 13663, 2071, 16589, 30090, 429, 260, 3102, 1673, 2601, 41397, 592, 281, 27006, 5568, 516, 338, 9053, 1673, 1929, 650, 9353, 6792, 39203, 288, 260, 216, 34, 268, 23512, 9760, 17370, 284, 260, 216, 41, 373, 23512, 3297, 13030, 5531, 981, 260, 1194, 4041, 288, 5091, 253, 7837, 24779, 1187, 260, 718, 24947, 276, 3398, 281, 354, 3867, 288, 298, 3394, 29, 48, 3348, 2908, 1673, 340, 6721, 3297, 216, 39, 34, 268, 33092, 27570, 3297, 2842, 624, 12023, 39203, 1673, 1069, 761, 288, 3568, 480, 970, 1187, 260, 3398, 738, 1545, 3398, 20233, 1673, 3513, 260, 1296, 12023, 338, 2841, 3297, 805, 260, 1022, 7837, 3363, 738, 288, 718, 24947, 276, 1673, 1385, 3297, 357, 8753, 354, 37471, 282, 15600, 9618, 13030, 5531, 637, 6115, 288, 32964, 1673, 198, 20824, 16928, 34061, 281, 260, 7323, 282, 260, 2038, 216, 35, 40, 373, 23512, 260, 2601, 41397, 592, 597, 3212, 1673, 2550, 260, 2601, 10916, 14057, 981, 260, 3163, 282, 4053, 216, 35, 33, 3297, 4056, 14793, 761, 8885, 260, 216, 34, 268, 27570, 3297, 216, 35, 40, 373, 23512, 3297, 288, 1485, 4203, 284, 724, 260, 216, 34, 35, 7212, 23512, 3348, 253, 16730, 2548, 5846, 282, 27006, 5568, 516, 1673, 533, 11627, 288, 536, 451, 3297, 260, 31443, 983, 2601, 10916, 7207, 2221, 335, 260, 28097, 1683, 260, 3398, 1673, 1069, 761, 44385, 288, 8673, 216, 34, 40, 36, 33204, 260, 216, 35, 40, 373, 23512, 3588, 1681, 1673, 669, 13083, 284, 8673, 216, 34, 32, 41, 12742, 260, 13401, 1721, 282, 260, 23863, 1673, 1814, 216, 32, 38, 1577, 216, 32, 32, 4448, 216, 35, 3297, 216, 35, 32, 32, 2601, 41397, 7876, 354, 3414, 429, 8673, 216, 34, 40, 36, 1523, 260, 216, 35, 40, 373, 22500, 3588, 1681, 1673, 378, 779, 14780, 15696, 6554, 253, 16730, 25096, 284, 13682, 253, 23021, 9422, 527, 436, 14044, 1272, 975, 260, 8091, 2370, 284, 650, 7991, 25096, 592, 1147, 2800, 288, 971, 550, 1673, 1249, 260, 5097, 9618, 1250, 5486, 12843, 284, 4040, 40348, 14259, 1673, 198, 1348, 3568, 3675, 1793, 4448, 216, 37, 1673, 1985, 338, 1194, 426, 6721, 8025, 8673, 216, 34, 40, 36, 9740, 216, 33, 37, 32, 2601, 41397, 1673, 3300, 260, 24943, 384, 284, 650, 1800, 12635, 347, 800, 540, 2601, 41397, 7674, 618, 253, 6560, 2441, 601, 1673, 5639, 277, 18779, 2892, 7652, 260, 6560, 1673, 6646, 260, 11268, 2601, 10916, 44513, 956, 335, 260, 13083, 3297, 4823, 20304, 637, 99, 1800, 983, 7522, 3394, 29, 48, 2531, 1547, 389, 2285, 99, 284, 840, 24939, 12466, 3297, 253, 1507, 1547, 5171, 3297, 11591, 10155, 282, 551, 31074, 1547, 26099, 284, 29428, 42145, 2968, 3297, 284, 634, 1547, 42779, 1673, 198, 198, 45, 446, 446, 216, 33, 3394, 29, 48, 216, 34, 35, 7212, 23512, 8807, 446, 446, 446, 198, 198, 15797, 3297, 981, 623, 3643, 281, 624, 13401, 3297, 260, 216, 33, 302, 27570, 3297, 216, 34, 35, 7212, 23512, 3297, 436, 2304, 767, 216, 35, 4158, 365, 216, 36, 3394, 30, 48, 216, 40, 6381, 2481, 5846, 282, 260, 15673, 7952, 4784, 1673, 1985, 4448, 216, 33, 260, 23863, 8885, 357, 288, 9770, 288, 260, 27006, 5568, 516, 1557, 1673, 1814, 216, 33, 36, 1577, 216, 32, 32, 253, 7837, 3394, 29, 48, 20681, 24779, 436, 2362, 1187, 260, 3398, 3297, 564, 357, 3213, 338, 354, 5183, 2601, 10916, 31443, 3408, 260, 6740, 1301, 915, 38222, 282, 260, 31443, 637, 99, 7991, 25096, 1673, 15054, 7418, 451, 1378, 260, 31443, 15696, 13682, 8022, 411, 5171, 288, 2612, 281, 650, 1386, 2548, 284, 1576, 288, 28450, 260, 2891, 282, 2601, 10916, 38621, 284, 6864, 1673, 1848, 9053, 33245, 8159, 451, 3116, 3297, 284, 216, 33, 302, 27570, 4957, 1296, 2009, 281, 260, 8807, 6115, 1673, 3897, 451, 655, 340, 3394, 29, 48, 216, 36, 39, 18234, 4428, 13958, 12919, 260, 31443, 411, 1512, 47352, 1673, 198, 3280, 260, 5738, 282, 4448, 216, 33, 3297, 216, 35, 7212, 27570, 3297, 216, 35, 40, 373, 23512, 4935, 281, 354, 3414, 26771, 429, 260, 216, 34, 35, 7212, 22500, 3588, 1681, 2141, 13271, 276, 3394, 29, 48, 39112, 288, 1440, 260, 3398, 288, 260, 216, 33, 302, 27570, 1673, 1985, 260, 1796, 1194, 282, 260, 6755, 418, 260, 1301, 3297, 260, 7595, 3075, 10764, 738, 260, 3398, 9189, 351, 260, 724, 282, 1512, 14259, 284, 18779, 284, 7837, 2892, 1673, 378, 4378, 2728, 282, 260, 31443, 7238, 216, 33, 302, 27570, 418, 216, 33, 39, 1577, 216, 32, 32, 4448, 216, 34, 1673, 1848, 9053, 3297, 2601, 41397, 7757, 12353, 260, 216, 35, 7212, 27570, 3297, 216, 35, 40, 373, 23512, 3297, 335, 8673, 216, 34, 32, 41, 4081, 282, 260, 3398, 284, 7011, 216, 33, 302, 27570, 3297, 5828, 582, 2727, 429, 624, 2548, 1673, 198, 3280, 4448, 216, 36, 3297, 13030, 5531, 4247, 260, 10651, 826, 260, 216, 35, 40, 373, 284, 216, 34, 35, 7212, 23512, 3192, 9087, 3297, 4145, 260, 5761, 599, 282, 260, 216, 34, 35, 7212, 637, 99, 5716, 288, 260, 216, 35, 40, 373, 23512, 3297, 3310, 15122, 216, 33, 302, 27570, 327, 2891, 39203, 288, 724, 260, 216, 34, 268, 27570, 8330, 260, 5677, 2424, 288, 27006, 5568, 516, 1673, 378, 216, 33, 302, 27570, 3297, 216, 34, 35, 7212, 23512, 3297, 563, 216, 33, 3394, 28, 48, 216, 33, 32, 32, 1800, 1837, 645, 260, 3414, 2585, 3297, 436, 1209, 1187, 288, 253, 4299, 282, 4723, 216, 38, 32, 32, 1800, 1673, 378, 216, 34, 35, 7212, 23512, 1209, 1135, 4406, 288, 13847, 511, 624, 7207, 335, 260, 2548, 3408, 411, 624, 216, 34, 268, 27570, 335, 260, 377, 1433, 516, 3394, 29, 48, 39112, 3394, 29, 48, 27006, 5568, 516, 3398, 1673, 378, 216, 33, 302, 27570, 4935, 665, 284, 2637, 253, 1379, 335, 260, 2049, 25326, 282, 260, 216, 34, 268, 27570, 1673, 1814, 260, 1142, 655, 260, 779, 14780, 3588, 1681, 4935, 288, 260, 13401, 282, 451, 2548, 1673, 533, 451, 779, 14780, 25096, 3297, 260, 216, 34, 35, 7212, 23512, 9221, 253, 3086, 282, 1759, 11763, 1673, 34156, 357, 761, 288, 5091, 7604, 48323, 288, 624, 13401, 288, 2437, 21702, 5053, 2601, 41397, 429, 27006, 5568, 516, 284, 429, 624, 3577, 3398, 1673, 198, 198, 45, 446, 446, 9420, 282, 718, 24947, 276, 446, 446, 446, 198, 198, 3280, 260, 5738, 282, 4448, 216, 33, 260, 216, 33, 302, 284, 216, 34, 268, 3192, 9087, 282, 260, 38510, 216, 41, 373, 9760, 3297, 281, 480, 808, 15663, 282, 260, 1913, 3297, 9318, 805, 253, 1443, 4158, 1890, 282, 718, 24947, 276, 990, 253, 3424, 4626, 13107, 284, 22642, 282, 260, 1547, 1761, 1673, 378, 216, 35, 7212, 22500, 761, 719, 2049, 418, 533, 322, 637, 258, 3297, 564, 7573, 15696, 11187, 4660, 44514, 17365, 95, 5457, 4592, 260, 8033, 282, 13737, 718, 24947, 276, 592, 1837, 1673, 198, 3280, 260, 5738, 282, 4448, 216, 33, 3297, 351, 805, 260, 35229, 21649, 282, 414, 6721, 418, 1369, 3297, 260, 2038, 216, 41, 373, 23512, 22500, 3297, 2038, 216, 34, 268, 23512, 9760, 761, 10210, 787, 7207, 288, 8330, 718, 24947, 276, 1673, 4056, 14793, 281, 451, 5851, 7064, 260, 216, 34, 268, 27522, 35393, 27570, 288, 260, 23863, 1673, 378, 2038, 216, 39, 34, 268, 33092, 27570, 284, 260, 216, 34, 268, 9760, 39354, 20323, 6721, 597, 592, 8002, 6115, 2800, 288, 718, 24947, 276, 1673, 378, 779, 14780, 15696, 8176, 288, 1379, 260, 7460, 335, 260, 5891, 282, 1642, 12610, 338, 562, 2823, 1130, 718, 24947, 276, 335, 260, 19068, 1673, 198, 49, 6721, 3297, 216, 34, 268, 27522, 35393, 27570, 3297, 4935, 288, 260, 4203, 2103, 282, 260, 718, 24947, 276, 3394, 29, 48, 29095, 100, 516, 3992, 3398, 8544, 422, 6721, 282, 260, 216, 34, 268, 27522, 27570, 436, 335, 260, 4081, 2103, 282, 260, 3398, 1673, 24230, 216, 34, 4158, 365, 216, 35, 3394, 30, 48, 216, 34, 6381, 2481, 5846, 282, 718, 24947, 276, 354, 5183, 216, 35, 32, 32, 2601, 10916, 7207, 6934, 330, 6721, 281, 253, 2892, 3568, 1673, 372, 33, 41, 21114, 18523, 2974, 16162, 282, 260, 216, 40, 34, 268, 46555, 27570, 5302, 260, 7460, 281, 451, 2353, 3297, 527, 15298, 1545, 2737, 1673, 10165, 3297, 351, 260, 11175, 282, 4660, 32964, 3297, 422, 6721, 4935, 288, 260, 13083, 4654, 4203, 282, 284, 33204, 718, 24947, 276, 1673, 330, 26345, 2509, 282, 20681, 3514, 618, 2548, 2893, 357, 1673, 330, 6721, 436, 1209, 8885, 288, 2332, 1056, 288, 260, 19594, 5595, 282, 718, 24947, 276, 335, 260, 2049, 25326, 282, 422, 6721, 1673, 1385, 3297, 330, 6721, 3514, 618, 2548, 1683, 260, 3398, 8544, 335, 624, 2049, 436, 340, 6721, 282, 260, 27522, 31443, 3297, 284, 3070, 340, 6721, 436, 260, 216, 34, 268, 9760, 39354, 20323, 6721, 1673, 378, 13083, 10559, 411, 422, 6721, 436, 281, 4174, 260, 6378, 8618, 282, 253, 1507, 6740, 2389, 338, 2060, 19594, 282, 260, 3102, 1673, 378, 3398, 288, 21923, 32804, 2422, 4203, 578, 282, 718, 24947, 276, 3297, 18178, 1130, 260, 6378, 8618, 282, 451, 6740, 3297, 284, 965, 7674, 38222, 1683, 624, 5677, 3159, 1673, 533, 624, 2548, 3297, 422, 6721, 441, 805, 18761, 260, 3102, 564, 597, 624, 11988, 3297, 260, 3398, 288, 21923, 32804, 1673, 198, 18973, 41397, 761, 597, 12055, 718, 24947, 276, 429, 260, 4203, 1673, 378, 2038, 216, 34, 268, 9760, 39354, 20323, 6721, 284, 12023, 282, 260, 216, 39, 34, 268, 33092, 27570, 8688, 601, 281, 253, 7858, 3568, 1673, 533, 451, 2353, 3297, 48185, 3508, 5397, 6660, 408, 30, 23080, 282, 260, 39354, 20323, 6721, 2755, 12931, 3930, 1673, 909, 13770, 253, 7837, 3297, 11548, 624, 5451, 48379, 3746, 6341, 3297, 284, 9067, 7837, 2892, 527, 20885, 7652, 4962, 2601, 10916, 3746, 12466, 1673, 23080, 284, 451, 7837, 2422, 656, 4591, 2601, 10916, 2892, 527, 7419, 2025, 260, 7837, 637, 99, 567, 2639, 1819, 284, 41929, 284, 22440, 540, 670, 216, 37, 32, 15743, 335, 357, 1673, 23080, 3297, 3551, 15408, 3297, 5502, 335, 260, 7837, 1793, 384, 436, 5375, 1673, 1848, 3163, 2601, 10916, 6333, 14997, 260, 1642, 2118, 1130, 718, 24947, 276, 284, 7999, 260, 3102, 429, 260, 4203, 1673, 198, 3473, 216, 32, 41, 1577, 216, 35, 37, 4448, 216, 34, 3297, 979, 260, 2601, 41397, 592, 11627, 288, 5142, 260, 10776, 7207, 418, 260, 5677, 5595, 282, 718, 24947, 276, 284, 2437, 260, 3398, 288, 21923, 32804, 3297, 19092, 9772, 411, 13698, 351, 11187, 4660, 41280, 492, 30, 407, 286, 2393, 3297, 31067, 10964, 282, 15462, 3297, 10110, 4365, 12861, 281, 19081, 1673, 909, 3873, 260, 3223, 1130, 260, 3017, 13152, 284, 1137, 260, 768, 3199, 2896, 436, 1683, 260, 10651, 826, 260, 2038, 216, 34, 268, 284, 2038, 216, 34, 37, 373, 23512, 6436, 2730, 1673, 909, 3873, 260, 3695, 282, 650, 13398, 3654, 284, 650, 4406, 327, 1015, 601, 1673, 909, 1137, 384, 761, 2841, 260, 216, 33, 302, 1053, 47458, 11847, 25925, 1731, 718, 24947, 276, 564, 761, 441, 2408, 5118, 601, 327, 6852, 665, 284, 384, 4146, 288, 325, 2090, 338, 4660, 282, 260, 6290, 16677, 37136, 8159, 650, 722, 282, 601, 3297, 1675, 384, 5341, 338, 451, 736, 14527, 351, 550, 4406, 282, 260, 10110, 4365, 12861, 1673, 19092, 1137, 384, 1250, 441, 1510, 384, 856, 9691, 260, 216, 34, 268, 9760, 3204, 1355, 1015, 601, 1673, 407, 286, 2393, 12028, 338, 37136, 761, 260, 1194, 1092, 8159, 260, 722, 282, 260, 2038, 32146, 585, 284, 645, 19092, 2500, 357, 2371, 1673, 330, 1443, 2737, 990, 451, 6634, 19092, 3297, 418, 216, 33, 35, 1577, 216, 33, 37, 3297, 7064, 260, 216, 33, 302, 1053, 47458, 11847, 25925, 288, 260, 2038, 216, 34, 268, 9760, 284, 8885, 253, 857, 3394, 29, 48, 4175, 3409, 3414, 411, 511, 1770, 2728, 282, 260, 7573, 284, 260, 1831, 884, 3297, 351, 260, 4527, 282, 17771, 260, 2601, 41397, 6251, 282, 260, 29095, 100, 516, 3992, 281, 260, 216, 34, 268, 9760, 5716, 284, 282, 18195, 260, 4626, 1761, 1673, 378, 1831, 884, 592, 288, 325, 5118, 429, 216, 34, 268, 9760, 1533, 347, 3318, 347, 451, 4527, 436, 11832, 1673, 198, 49, 3062, 436, 5388, 338, 260, 1831, 884, 736, 3414, 5846, 418, 216, 32, 40, 1577, 216, 32, 32, 335, 4448, 216, 35, 253, 28839, 260, 718, 24947, 276, 3394, 29, 48, 29095, 100, 516, 3992, 3398, 8544, 260, 216, 41, 373, 23512, 3297, 389, 6721, 282, 260, 216, 39, 34, 268, 33092, 27570, 3297, 284, 422, 28064, 282, 260, 216, 40, 34, 84, 46555, 27570, 736, 3414, 19068, 2120, 260, 1831, 884, 284, 3110, 288, 298, 3394, 29, 48, 3348, 2770, 351, 260, 2038, 216, 34, 35, 7212, 23512, 8544, 260, 216, 34, 268, 27522, 35393, 27570, 3297, 21649, 282, 260, 216, 33, 302, 27570, 3297, 216, 41, 373, 23512, 3297, 284, 2728, 282, 260, 216, 39, 34, 268, 33092, 27570, 736, 3414, 335, 260, 2049, 25326, 3297, 355, 4203, 3297, 282, 260, 1831, 884, 288, 298, 30834, 2770, 351, 260, 216, 34, 37, 373, 9760, 1673, 47868, 6290, 1209, 8885, 260, 2038, 216, 34, 36, 373, 23512, 9760, 17370, 284, 260, 2038, 216, 33, 41, 373, 23512, 22500, 288, 1485, 288, 260, 17851, 3394, 29, 48, 39112, 1557, 3297, 216, 40, 4158, 365, 216, 33, 35, 6381, 2481, 4203, 282, 21923, 32804, 284, 216, 33, 37, 4158, 365, 216, 34, 36, 6381, 2481, 6251, 282, 260, 40693, 282, 260, 18620, 3992, 284, 260, 29095, 100, 516, 3992, 1673, 1385, 357, 436, 288, 5697, 288, 4137, 260, 5182, 281, 2267, 260, 216, 34, 268, 355, 216, 34, 37, 373, 9760, 7323, 1673, 198, 504, 1547, 4360, 3430, 2757, 282, 4448, 216, 35, 816, 216, 37, 5846, 282, 718, 24947, 276, 3297, 2289, 288, 22288, 7868, 3297, 7352, 281, 582, 282, 260, 1670, 4477, 2802, 7731, 282, 260, 1913, 327, 253, 2601, 10916, 7573, 1673, 3742, 1239, 21649, 282, 260, 38510, 216, 41, 373, 9760, 3297, 5302, 411, 260, 1642, 4299, 38510, 216, 36, 373, 9760, 3297, 1361, 3408, 4841, 516, 3394, 29, 48, 39112, 19844, 3297, 1661, 1400, 18857, 8673, 3297, 284, 260, 35841, 2118, 1056, 288, 260, 29095, 100, 516, 335, 4448, 216, 38, 3297, 260, 7573, 637, 99, 15663, 4299, 761, 719, 4957, 418, 260, 1112, 282, 260, 1547, 4360, 28102, 1673, 378, 38510, 216, 41, 373, 284, 216, 36, 373, 14102, 592, 441, 1730, 288, 19563, 260, 15663, 1673, 198, 198, 45, 446, 446, 38510, 216, 34, 268, 9760, 7652, 446, 446, 446, 198, 198, 504, 38510, 216, 34, 268, 9760, 1135, 253, 725, 3867, 1523, 260, 216, 34, 35, 7212, 23512, 637, 99, 25096, 281, 260, 1965, 7577, 2737, 282, 4448, 216, 40, 3297, 281, 354, 3110, 288, 2373, 738, 38222, 1673, 669, 3414, 3297, 7876, 418, 216, 32, 34, 1577, 216, 35, 32, 284, 7100, 5302, 351, 18779, 3297, 44385, 426, 6721, 1673, 657, 436, 6096, 338, 6365, 426, 6721, 637, 99, 2548, 856, 325, 13316, 260, 2415, 779, 14780, 3433, 736, 11388, 1673, 1550, 511, 624, 8497, 2163, 20073, 3297, 3508, 24232, 25214, 428, 30, 17799, 3297, 7408, 316, 403, 282, 260, 216, 34, 268, 27570, 3297, 9830, 3588, 282, 260, 2727, 1673, 1929, 2601, 41397, 5645, 21702, 5053, 650, 2727, 637, 99, 2548, 284, 11681, 624, 13401, 3297, 17799, 281, 260, 13226, 1135, 650, 970, 738, 601, 216, 37, 32, 32, 17535, 365, 216, 36, 38, 32, 283, 2481, 288, 330, 6721, 637, 99, 2548, 1673, 1385, 384, 6238, 338, 2727, 637, 99, 13398, 26345, 2509, 284, 3621, 357, 1056, 288, 426, 6721, 1673, 909, 11832, 260, 5177, 284, 1990, 3856, 282, 22481, 274, 357, 618, 260, 7371, 281, 426, 6721, 637, 99, 3204, 281, 13226, 284, 4591, 5249, 1673, 198, 504, 3414, 10362, 455, 767, 351, 260, 4167, 282, 19916, 3297, 564, 338, 3163, 357, 31453, 1673, 378, 2601, 41397, 10856, 12840, 418, 260, 7991, 1761, 1673, 669, 655, 502, 3675, 260, 6755, 618, 260, 19916, 2737, 282, 216, 41, 4448, 1673, 378, 5097, 9618, 965, 12443, 1837, 1512, 1199, 690, 260, 779, 14780, 25096, 288, 5146, 260, 2118, 7207, 1673, 17709, 531, 2816, 2422, 288, 260, 5146, 8840, 429, 260, 20681, 3243, 281, 354, 2743, 11621, 5390, 981, 260, 5738, 1673, 2018, 1770, 1800, 429, 37067, 6721, 284, 1767, 4784, 592, 4331, 618, 3031, 6287, 284, 1830, 618, 260, 3568, 418, 260, 768, 2609, 2876, 1673, 1814, 582, 655, 3297, 260, 779, 14780, 13398, 436, 1187, 288, 2976, 1800, 1673, 1550, 260, 3414, 5087, 22797, 13825, 990, 216, 33, 34, 1577, 216, 32, 32, 260, 216, 34, 35, 7212, 22500, 761, 354, 5183, 7604, 4890, 282, 805, 216, 35, 40, 1870, 1673, 198, 1348, 4591, 3163, 284, 1194, 5182, 1708, 260, 38510, 216, 34, 268, 9760, 768, 282, 624, 6219, 15663, 4299, 1673, 378, 2340, 9791, 282, 260, 38510, 216, 33, 39, 373, 22500, 3297, 216, 34, 268, 9760, 3297, 8025, 253, 1443, 2009, 1916, 3297, 1137, 338, 260, 7573, 34193, 563, 216, 35, 32, 32, 1800, 3163, 318, 288, 253, 5625, 281, 377, 1433, 516, 3394, 29, 48, 39112, 3297, 284, 338, 281, 260, 808, 827, 3737, 282, 4448, 260, 216, 34, 268, 9760, 3590, 216, 33, 3394, 28, 48, 216, 35, 32, 32, 5375, 284, 216, 34, 3394, 28, 48, 216, 37, 32, 32, 15408, 281, 260, 6755, 5846, 282, 27006, 5568, 516, 1673, 3742, 1239, 624, 15663, 4299, 436, 5932, 4957, 411, 4448, 216, 41, 3297, 260, 7573, 3675, 288, 6618, 520, 13401, 1721, 1130, 27006, 5568, 516, 351, 21702, 5053, 2119, 347, 1507, 347, 3243, 1673, 48557, 99, 2956, 761, 288, 1440, 260, 1085, 3577, 3398, 284, 2437, 260, 3102, 1673, 198, 18973, 10916, 284, 2038, 7207, 5502, 17442, 281, 7604, 1683, 260, 29095, 100, 516, 3992, 327, 1545, 540, 2009, 1673, 378, 2601, 41397, 637, 15663, 12678, 436, 5932, 7652, 3297, 284, 260, 2038, 7207, 14728, 288, 2205, 480, 3204, 278, 17081, 2030, 3414, 1673, 198, 198, 45, 446, 446, 2601, 10916, 14635, 446, 446, 446, 198, 198, 504, 4954, 4360, 28102, 418, 533, 322, 258, 21385, 260, 2601, 10916, 1761, 284, 2304, 767, 511, 480, 1085, 3577, 284, 19387, 10523, 1673, 1985, 4448, 216, 33, 41, 260, 4954, 3658, 260, 2601, 41397, 761, 11268, 1083, 282, 260, 377, 376, 276, 3017, 13152, 981, 260, 3163, 3297, 284, 260, 4954, 4784, 2585, 13358, 578, 282, 480, 16730, 6115, 284, 27501, 601, 1673, 3529, 282, 260, 2601, 10916, 4784, 2585, 10748, 36421, 3643, 11627, 288, 820, 347, 1083, 282, 480, 6237, 347, 1636, 618, 2601, 9096, 1673, 378, 2601, 41397, 30090, 429, 260, 15757, 276, 1557, 808, 3297, 260, 3163, 282, 4448, 216, 33, 40, 816, 216, 33, 41, 1673, 2550, 260, 3654, 665, 3297, 260, 17867, 282, 260, 2601, 10916, 16328, 30090, 5645, 288, 260, 2601, 1673, 378, 2038, 4784, 5645, 18705, 601, 4081, 3297, 7685, 690, 260, 29095, 100, 516, 3992, 6115, 3297, 527, 592, 787, 2848, 282, 8092, 2979, 1673, 198, 198, 45, 446, 2550, 8898, 446, 446, 198, 198, 504, 2601, 10916, 216, 34, 268, 284, 216, 41, 373, 6436, 2730, 592, 2743, 4036, 7652, 281, 260, 11763, 1673, 378, 216, 41, 373, 9760, 761, 22266, 216, 41, 3394, 28, 48, 216, 35, 37, 32, 1800, 418, 260, 3616, 282, 260, 15663, 335, 4448, 216, 33, 1673, 378, 216, 34, 268, 9760, 22266, 216, 38, 3394, 28, 48, 216, 32, 32, 32, 1673, 6906, 253, 1443, 3822, 429, 971, 7573, 5598, 288, 2601, 9096, 990, 260, 3568, 1673, 378, 4559, 282, 260, 2601, 10916, 7207, 761, 719, 5375, 3297, 8025, 355, 38320, 1673, 2018, 282, 38510, 3713, 12940, 436, 281, 253, 1887, 1215, 3297, 284, 260, 2601, 10916, 6237, 3297, 21850, 418, 377, 376, 276, 3017, 13152, 284, 2304, 767, 990, 533, 322, 258, 3297, 436, 335, 260, 38852, 282, 12721, 1673, 198, 3087, 451, 655, 3297, 260, 2038, 216, 34, 268, 23512, 9760, 8845, 216, 33, 3394, 28, 48, 216, 33, 34, 32, 5375, 3297, 216, 34, 3394, 28, 48, 216, 37, 38, 35, 15408, 3297, 216, 38, 39, 8025, 284, 216, 38, 41, 6782, 981, 624, 655, 418, 377, 376, 276, 3017, 13152, 1673, 669, 3249, 563, 216, 33, 40, 32, 20073, 357, 8845, 981, 260, 3508, 9420, 282, 29095, 100, 516, 9546, 361, 260, 2672, 3531, 1673, 1547, 3654, 592, 14376, 1024, 48944, 564, 1730, 288, 1746, 260, 2601, 41397, 429, 8659, 260, 377, 376, 276, 3017, 13152, 1673, 378, 7573, 761, 22266, 216, 33, 39, 3394, 28, 48, 216, 36, 41, 40, 335, 4448, 216, 33, 3297, 564, 436, 281, 5412, 2548, 288, 3414, 4435, 624, 20073, 1673, 378, 216, 33, 302, 1053, 47458, 11847, 25925, 8845, 216, 33, 40, 37, 5375, 284, 1130, 216, 37, 32, 32, 15408, 981, 260, 9420, 282, 377, 376, 276, 3017, 13152, 3297, 768, 282, 527, 3105, 5691, 418, 718, 24947, 276, 1673, 198, 6228, 511, 260, 2601, 10916, 5926, 1683, 260, 377, 376, 276, 3017, 13152, 3297, 260, 5665, 9420, 282, 29095, 100, 516, 9546, 361, 314, 2269, 411, 10891, 347, 260, 768, 3199, 2896, 1673, 657, 436, 260, 5182, 281, 527, 260, 2601, 41397, 1135, 260, 768, 7264, 11370, 3297, 25645, 260, 2038, 216, 34, 268, 23512, 9760, 281, 2745, 284, 13099, 13737, 718, 24947, 276, 3297, 837, 502, 592, 1035, 2800, 288, 1399, 2019, 738, 288, 260, 2038, 3654, 637, 3577, 3204, 284, 14381, 550, 14102, 637, 13401, 1721, 1673, 1423, 3297, 2268, 1163, 260, 12239, 8185, 282, 260, 2601, 10916, 6290, 761, 1708, 357, 9970, 990, 354, 10402, 3791, 1624, 1841, 624, 9353, 284, 3577, 592, 441, 5181, 282, 27307, 253, 14057, 284, 282, 5682, 253, 9421, 3414, 281, 260, 2715, 282, 6207, 1512, 3297, 23812, 3297, 284, 18779, 2892, 338, 856, 325, 12443, 1523, 624, 7207, 418, 2609, 2876, 1673, 1428, 4448, 216, 40, 3297, 260, 2601, 10916, 5926, 281, 260, 1557, 761, 719, 1024, 48944, 1673, 1116, 198, 45, 42387, 20045, 446, 198, 198, 56, 277, 20045, 3297, 597, 1343, 347, 365, 17857, 2481, 16728, 2591, 284, 47223, 347, 365, 294, 23525, 84, 2481, 273, 30, 85, 30, 3297, 314, 354, 1547, 4022, 5975, 429, 34890, 15491, 3297, 3889, 1673, 6164, 277, 281, 216, 33, 41, 41, 36, 3297, 260, 5975, 16790, 253, 3997, 282, 2477, 527, 357, 4271, 288, 347, 476, 452, 3394, 29, 48, 45279, 476, 3297, 253, 13333, 282, 45279, 4022, 284, 14826, 40966, 25011, 1673, 198, 4582, 15122, 1296, 40007, 335, 530, 404, 17330, 3297, 42387, 20045, 2049, 260, 4368, 288, 2004, 10206, 3297, 4380, 17615, 351, 5119, 16084, 2838, 836, 17330, 281, 216, 34, 32, 32, 38, 1673, 4311, 216, 34, 32, 32, 38, 3297, 260, 5975, 553, 1438, 1343, 327, 624, 9040, 281, 260, 216, 41, 2272, 216, 33, 33, 17190, 2891, 3297, 30231, 357, 281, 800, 282, 480, 4956, 21439, 284, 28923, 3297, 347, 876, 347, 260, 1909, 282, 260, 21613, 1315, 2260, 1816, 37649, 1673, 1626, 3688, 3297, 502, 457, 5118, 7462, 18373, 40007, 3297, 582, 2330, 21613, 284, 827, 28202, 40007, 1673, 198, 198, 45, 446, 3760, 446, 446, 1116, 198, 45, 446, 446, 21437, 284, 1739, 3394, 29, 48, 4368, 34053, 365, 216, 33, 41, 41, 36, 816, 216, 33, 41, 41, 41, 2481, 446, 446, 446, 198, 198, 504, 5975, 436, 4331, 411, 13088, 363, 530, 1214, 452, 2040, 3297, 16607, 282, 378, 1661, 546, 3297, 597, 1343, 347, 476, 372, 30, 51, 30, 69, 30, 52, 30, 476, 365, 20575, 2995, 22676, 2481, 3297, 284, 15987, 363, 22722, 2513, 259, 3297, 617, 2163, 2428, 9035, 260, 19923, 4392, 1759, 8174, 45279, 6621, 1673, 452, 2040, 284, 2513, 259, 23520, 15987, 363, 678, 463, 344, 3297, 17229, 363, 372, 27134, 3297, 15754, 763, 389, 30, 51, 30, 717, 3731, 284, 31226, 10550, 11435, 216, 33, 41, 38, 41, 1673, 1069, 3365, 260, 1528, 476, 42387, 476, 3297, 527, 6443, 327, 476, 2061, 1888, 476, 1673, 378, 5975, 2837, 253, 1695, 351, 480, 18774, 13171, 418, 1679, 25813, 3297, 284, 5118, 260, 639, 3394, 29, 48, 32950, 6470, 1238, 3297, 4222, 282, 7988, 642, 1673, 14835, 1974, 5657, 42387, 288, 1363, 480, 1462, 3297, 4990, 476, 20045, 476, 3297, 527, 9318, 327, 476, 16728, 2591, 476, 1673, 198, 56, 277, 20045, 8239, 351, 530, 404, 17330, 3297, 15122, 480, 639, 3394, 29, 48, 14089, 34053, 21613, 281, 216, 33, 41, 41, 39, 1673, 533, 650, 2523, 282, 260, 21613, 3297, 2018, 33764, 637, 99, 18171, 44633, 105, 4150, 476, 1385, 359, 634, 2890, 284, 2272, 355, 4377, 1476, 277, 7986, 933, 4563, 6329, 564, 3043, 3297, 624, 15901, 523, 3105, 1238, 876, 351, 3008, 29, 637, 216, 41, 32, 99, 4718, 284, 45279, 12490, 1673, 476, 10601, 288, 260, 4368, 637, 99, 41070, 2656, 284, 260, 39628, 7122, 282, 260, 21613, 3297, 260, 5975, 983, 2253, 7168, 288, 24912, 260, 8270, 8470, 1836, 288, 601, 411, 530, 404, 1673, 452, 2040, 314, 16302, 347, 4976, 476, 1046, 761, 623, 12986, 21064, 282, 260, 2477, 2729, 3297, 284, 392, 2275, 357, 736, 325, 3122, 288, 325, 253, 45279, 5975, 335, 253, 25011, 4368, 1673, 1644, 392, 21257, 338, 7456, 3297, 564, 357, 436, 597, 3105, 260, 9250, 2775, 338, 856, 457, 5024, 1673, 933, 4563, 6329, 1046, 637, 307, 761, 3362, 429, 41508, 284, 1449, 338, 392, 416, 637, 100, 1188, 975, 392, 26202, 530, 404, 588, 1083, 2478, 1673, 476, 198, 198, 45, 446, 446, 389, 5935, 284, 4290, 447, 365, 216, 34, 32, 32, 32, 816, 216, 34, 32, 32, 36, 2481, 446, 446, 446, 198, 198, 3280, 4019, 216, 38, 3297, 216, 34, 32, 32, 32, 3297, 42387, 20045, 6254, 335, 260, 22617, 21613, 14357, 1868, 281, 4290, 3713, 3297, 8536, 4290, 24702, 637, 99, 476, 12984, 6838, 25347, 369, 317, 476, 1673, 42387, 20045, 5118, 480, 1796, 18373, 21613, 3297, 389, 5935, 335, 4053, 216, 34, 34, 3297, 216, 34, 32, 32, 32, 1673, 657, 38237, 418, 2838, 30, 216, 38, 35, 335, 260, 8593, 4265, 216, 34, 32, 32, 3297, 979, 624, 808, 2244, 3297, 476, 17871, 2461, 476, 3297, 38237, 418, 2838, 30, 216, 34, 35, 335, 260, 8593, 4265, 6586, 5172, 8977, 3295, 3321, 6473, 284, 418, 2838, 30, 216, 34, 39, 335, 260, 7242, 8977, 3295, 3321, 6473, 1673, 2018, 33764, 637, 99, 27429, 422, 30, 12694, 4150, 1577, 476, 389, 5935, 654, 457, 441, 983, 347, 1083, 1624, 281, 260, 8781, 12237, 2342, 347, 634, 736, 457, 16686, 3297, 284, 908, 4435, 624, 4073, 19740, 429, 260, 1528, 637, 99, 34053, 3297, 357, 314, 354, 21613, 338, 2744, 540, 4494, 670, 550, 25011, 3394, 29, 48, 252, 274, 277, 4022, 40007, 288, 1690, 578, 281, 216, 34, 32, 32, 32, 1673, 476, 378, 768, 3524, 2426, 288, 260, 21613, 2422, 429, 12815, 617, 8962, 624, 21439, 347, 3434, 435, 1744, 1847, 1673, 198, 3280, 4451, 216, 34, 39, 3297, 216, 34, 32, 32, 32, 3297, 452, 2040, 436, 14749, 327, 13932, 282, 17433, 979, 260, 5975, 436, 7691, 281, 4643, 10901, 3297, 16389, 1673, 909, 436, 5118, 335, 253, 2038, 1885, 216, 33, 3394, 28, 48, 216, 37, 32, 32, 4436, 1673, 533, 216, 34, 32, 32, 33, 3297, 42387, 20045, 4940, 335, 260, 492, 3718, 86, 381, 4770, 6719, 12299, 715, 347, 659, 1395, 3297, 42900, 3394, 29, 48, 2273, 3297, 284, 3829, 282, 253, 8899, 1673, 330, 2477, 3341, 327, 476, 659, 3422, 5885, 476, 3297, 260, 1796, 2244, 429, 389, 5935, 3297, 436, 3281, 281, 13246, 282, 260, 4771, 216, 35, 32, 32, 32, 32440, 288, 4924, 16523, 3297, 527, 11364, 260, 4956, 335, 624, 2139, 16922, 1673, 198, 56, 277, 20045, 5118, 480, 3464, 18373, 21613, 3297, 4290, 447, 3297, 335, 3903, 216, 33, 40, 3297, 216, 34, 32, 32, 35, 1673, 657, 38237, 418, 2838, 30, 216, 35, 35, 335, 260, 8593, 4265, 216, 34, 32, 32, 3297, 979, 624, 5038, 4320, 38237, 418, 2838, 30, 216, 34, 33, 335, 260, 6586, 5172, 8977, 3295, 3321, 6473, 284, 418, 2838, 30, 216, 35, 34, 335, 260, 7242, 8977, 3295, 3321, 6473, 1673, 2018, 33764, 637, 99, 36199, 14210, 926, 376, 4150, 338, 476, 2445, 357, 21638, 335, 46299, 2728, 338, 761, 5094, 4944, 253, 5682, 1791, 281, 260, 5975, 637, 99, 2139, 3297, 4290, 447, 597, 21959, 15038, 12936, 282, 26122, 15987, 284, 48414, 11341, 1673, 1350, 1991, 355, 441, 357, 314, 260, 4313, 282, 253, 1466, 3394, 29, 48, 1761, 16741, 3297, 365, 17857, 2481, 610, 457, 21394, 578, 253, 970, 288, 27127, 546, 480, 9948, 3412, 282, 4591, 4022, 284, 11521, 3394, 29, 48, 4432, 351, 634, 3199, 29363, 1673, 476, 47534, 363, 530, 16898, 7238, 260, 5975, 281, 1584, 216, 34, 32, 32, 36, 1673, 909, 314, 260, 8629, 1055, 288, 5876, 451, 2548, 1673, 198, 198, 45, 446, 446, 6906, 281, 36607, 10927, 365, 216, 34, 32, 32, 36, 2481, 446, 446, 446, 198, 198, 56, 277, 20045, 2049, 530, 404, 17330, 3297, 15122, 480, 8629, 18373, 21613, 3297, 6906, 281, 36607, 10927, 3297, 335, 33793, 17330, 335, 4451, 216, 33, 41, 3297, 216, 34, 32, 32, 36, 1673, 657, 38237, 418, 2838, 30, 216, 34, 32, 335, 260, 8992, 18994, 19726, 6245, 6473, 284, 418, 2838, 30, 216, 33, 40, 38, 335, 260, 8593, 4265, 216, 34, 32, 32, 1673, 533, 650, 2523, 282, 260, 21613, 3297, 36199, 14210, 926, 376, 4150, 476, 657, 5988, 288, 325, 253, 12639, 780, 17835, 7495, 537, 281, 260, 6923, 282, 36165, 3297, 564, 41829, 455, 637, 99, 37002, 409, 19895, 314, 1147, 27963, 284, 41572, 7659, 15663, 288, 1266, 663, 3534, 564, 22154, 9846, 3297, 284, 260, 2477, 3009, 1239, 10322, 21110, 3009, 2933, 253, 1056, 40867, 288, 260, 412, 14559, 1673, 476, 198, 198, 45, 446, 446, 5119, 16084, 2838, 836, 17330, 284, 1315, 19726, 382, 12214, 365, 216, 34, 32, 32, 38, 816, 216, 34, 32, 33, 37, 2481, 446, 446, 446, 198, 198, 788, 216, 34, 32, 32, 38, 3297, 42387, 20045, 8239, 351, 5119, 16084, 2838, 836, 17330, 3297, 10016, 480, 11397, 18373, 21613, 3297, 8279, 216, 34, 11638, 2273, 30, 378, 21613, 436, 5492, 347, 253, 1003, 288, 260, 10152, 282, 4022, 2477, 3297, 284, 1250, 441, 6654, 347, 7100, 335, 18373, 20931, 347, 2672, 13335, 1673, 378, 21613, 436, 5118, 335, 4019, 216, 38, 3297, 216, 34, 32, 32, 38, 3297, 260, 1142, 1194, 347, 378, 11338, 282, 365, 294, 23525, 84, 2481, 16728, 2591, 3297, 253, 28202, 21613, 3281, 411, 530, 404, 17330, 1355, 260, 5975, 637, 99, 27109, 355, 9596, 1673, 8279, 216, 34, 11638, 2273, 38237, 418, 2838, 30, 216, 33, 34, 335, 260, 18994, 19726, 6245, 6473, 3297, 284, 418, 2838, 30, 216, 33, 37, 36, 335, 260, 8593, 4265, 216, 34, 32, 32, 1673, 2018, 33764, 637, 99, 7203, 378, 494, 8186, 4150, 338, 476, 8279, 216, 34, 11638, 2273, 21101, 429, 260, 1142, 1828, 347, 36607, 10927, 1577, 357, 13034, 288, 325, 13668, 281, 2275, 25782, 2618, 15985, 284, 27124, 281, 624, 2356, 16468, 25782, 2618, 426, 1433, 22976, 355, 3829, 282, 253, 8899, 3297, 564, 14458, 8227, 1890, 411, 29851, 702, 354, 12575, 328, 258, 259, 335, 253, 11970, 4810, 1673, 657, 3763, 637, 100, 4726, 750, 725, 12490, 3297, 564, 3832, 12490, 282, 365, 17857, 2481, 610, 637, 99, 746, 3763, 637, 100, 325, 6939, 480, 17956, 2025, 429, 260, 5975, 281, 9846, 22367, 3318, 3297, 2267, 1673, 476, 198, 3280, 4019, 216, 34, 38, 3297, 216, 34, 32, 32, 39, 3297, 260, 5975, 5118, 480, 15708, 18373, 21613, 3297, 7860, 17358, 1673, 657, 38237, 418, 2838, 30, 216, 33, 38, 335, 260, 18994, 19726, 6245, 6473, 3297, 284, 418, 2838, 30, 216, 33, 35, 40, 335, 260, 8593, 4265, 216, 34, 32, 32, 1673, 378, 21613, 637, 99, 1022, 2244, 3297, 476, 21979, 81, 476, 3297, 2163, 582, 282, 260, 768, 13682, 11893, 418, 8957, 3609, 29979, 14966, 637, 99, 11857, 31628, 3297, 979, 260, 4956, 637, 99, 2477, 3341, 436, 17845, 582, 282, 260, 8992, 216, 33, 32, 282, 216, 34, 32, 32, 39, 335, 22446, 70, 637, 99, 9413, 82, 12500, 14170, 1673, 42387, 20045, 5118, 480, 808, 2330, 21613, 3297, 378, 422, 30, 57, 30, 73, 30, 2693, 672, 3297, 281, 216, 34, 32, 32, 40, 1673, 1985, 4450, 216, 33, 35, 3297, 216, 34, 32, 32, 41, 3297, 502, 5118, 480, 17561, 18373, 21613, 3297, 1315, 2260, 1816, 37649, 1673, 657, 436, 5118, 281, 1296, 896, 8096, 8544, 971, 3593, 253, 896, 932, 282, 24542, 11893, 1673, 533, 216, 34, 32, 32, 41, 3297, 15754, 763, 26006, 7238, 260, 5975, 1673, 909, 314, 260, 15708, 1055, 288, 5876, 451, 2548, 1673, 378, 5975, 637, 99, 20633, 18373, 21613, 3297, 17190, 29500, 3297, 436, 5118, 335, 4451, 216, 34, 38, 3297, 216, 34, 32, 33, 32, 288, 6468, 9470, 1673, 42387, 610, 4944, 260, 476, 10698, 34284, 14257, 476, 281, 260, 2332, 282, 216, 34, 32, 33, 34, 284, 4944, 351, 41852, 1560, 1018, 281, 4653, 544, 602, 335, 10528, 4451, 216, 39, 3297, 216, 34, 32, 33, 34, 1673, 533, 354, 5473, 3297, 3433, 1483, 530, 1214, 452, 2040, 6549, 338, 480, 21613, 327, 216, 34, 32, 33, 35, 14089, 35876, 2868, 736, 325, 5118, 1127, 260, 808, 2745, 282, 216, 34, 32, 33, 36, 1673, 28825, 260, 1112, 282, 216, 34, 32, 33, 35, 3297, 31226, 10550, 7884, 10604, 2049, 260, 5975, 351, 787, 7718, 284, 787, 5189, 429, 260, 550, 2249, 1673, 1985, 216, 33, 2272, 216, 33, 2272, 216, 34, 32, 33, 36, 3297, 12599, 1483, 41829, 455, 452, 2040, 6549, 335, 260, 5975, 637, 99, 5326, 9252, 338, 260, 725, 14561, 365, 17857, 2481, 20045, 21613, 523, 325, 3365, 476, 12214, 476, 284, 288, 325, 5118, 1127, 260, 713, 1673, 198, 3280, 2405, 216, 33, 35, 3297, 216, 34, 32, 33, 36, 3297, 1985, 260, 5975, 637, 99, 5326, 9252, 3013, 3297, 502, 5118, 260, 5326, 20668, 282, 645, 260, 5975, 637, 99, 725, 21613, 12214, 523, 5380, 7821, 1673, 378, 21613, 314, 932, 327, 4706, 4185, 216, 34, 34, 3297, 216, 34, 32, 33, 36, 1673, 1069, 597, 5118, 253, 543, 6589, 282, 260, 9238, 282, 260, 725, 21613, 335, 480, 9252, 3013, 284, 3318, 990, 3297, 260, 4320, 476, 1963, 2783, 11514, 476, 1673, 198, 788, 216, 34, 32, 33, 37, 3297, 357, 436, 8636, 338, 216, 33, 34, 3394, 29, 48, 713, 15987, 363, 530, 16898, 389, 3326, 284, 2798, 17229, 363, 5068, 8124, 761, 2049, 260, 5975, 1673, 1069, 592, 7233, 411, 15987, 363, 13902, 476, 13902, 106, 7712, 476, 22392, 284, 17229, 363, 34843, 43173, 581, 974, 3297, 5170, 13088, 363, 284, 14465, 4028, 530, 1214, 452, 2040, 347, 260, 1528, 637, 99, 805, 6219, 2798, 13507, 1673, 198, 198, 45, 446, 18047, 446, 446, 1116, 198, 45, 446, 446, 9778, 284, 21439, 446, 446, 446, 198, 198, 56, 277, 20045, 16790, 253, 3997, 282, 2477, 527, 502, 457, 5124, 288, 347, 476, 452, 3394, 29, 48, 45279, 476, 3297, 253, 8715, 6504, 411, 260, 2115, 476, 452, 3394, 29, 48, 1037, 91, 476, 3297, 2581, 253, 4594, 288, 260, 377, 3394, 29, 48, 426, 5131, 6675, 1673, 42387, 20045, 637, 99, 2477, 314, 253, 13333, 282, 6825, 8064, 429, 11521, 4432, 3297, 779, 87, 2296, 3297, 284, 1011, 81, 288, 1759, 4022, 3297, 45279, 3297, 284, 4591, 4718, 1673, 3550, 2728, 338, 457, 719, 10743, 618, 451, 3997, 1453, 22461, 3297, 1037, 91, 3297, 17271, 284, 4674, 1673, 530, 1214, 452, 2040, 637, 13088, 3997, 10186, 429, 46299, 12027, 288, 689, 5350, 3297, 41394, 3297, 284, 2112, 1075, 2971, 1673, 378, 5975, 637, 99, 21439, 2634, 429, 253, 1230, 282, 5219, 3297, 1285, 260, 5387, 282, 33336, 1029, 3297, 10083, 282, 6554, 4738, 3297, 260, 216, 41, 2272, 216, 33, 33, 17190, 2891, 3297, 16973, 722, 284, 4287, 25110, 1673, 198, 55, 2040, 3297, 281, 1706, 288, 260, 216, 41, 2272, 216, 33, 33, 17190, 2891, 3297, 553, 6803, 1199, 327, 1329, 11197, 12170, 715, 347, 25141, 19334, 39491, 284, 5165, 28950, 11506, 1673, 35057, 2107, 3297, 452, 2040, 637, 216, 34, 32, 32, 36, 21439, 327, 6906, 281, 36607, 10927, 6803, 1199, 327, 18726, 3297, 284, 1217, 327, 35763, 1523, 1065, 1606, 43527, 327, 260, 216, 41, 2272, 216, 33, 33, 20707, 5926, 1673, 198, 198, 45, 446, 446, 16614, 1259, 446, 446, 446, 198, 198, 504, 5975, 637, 99, 7843, 1453, 407, 3709, 3297, 1934, 500, 519, 27735, 3297, 4290, 24702, 3297, 8363, 2828, 2292, 3297, 27332, 15374, 394, 32074, 3297, 25468, 533, 322, 442, 4735, 3297, 334, 4607, 371, 422, 15655, 3297, 340, 5762, 560, 8673, 3297, 3349, 13604, 389, 30, 57, 30, 55, 30, 284, 428, 473, 17795, 260, 13400, 1673, 42387, 20045, 637, 99, 1796, 21613, 3297, 389, 5935, 3297, 10743, 8170, 4022, 284, 905, 2477, 7843, 3297, 979, 8279, 216, 34, 11638, 2273, 436, 7220, 411, 8170, 45279, 12299, 715, 347, 260, 13165, 377, 363, 9950, 284, 260, 1661, 1317, 3297, 7860, 17358, 436, 7220, 411, 3811, 1317, 4718, 12299, 715, 347, 334, 9179, 3297, 284, 1315, 2260, 1816, 37649, 436, 7220, 411, 2746, 20283, 41349, 3233, 284, 18490, 20410, 1673, 47534, 363, 530, 16898, 553, 719, 19452, 327, 8037, 253, 17551, 3297, 1759, 8174, 45279, 3394, 29, 48, 7220, 7516, 3997, 1673, 198, 198, 45, 446, 17307, 2249, 446, 446, 198, 198, 58, 1214, 365, 36619, 334, 881, 1119, 452, 2040, 2481, 1841, 1022, 18325, 781, 365, 216, 33, 41, 41, 36, 816, 1574, 2481, 198, 26076, 26006, 365, 29083, 28279, 1491, 2481, 1841, 26880, 365, 216, 34, 32, 32, 40, 816, 1574, 2481, 198, 41631, 106, 7712, 365, 13902, 22392, 2481, 1841, 15987, 365, 216, 34, 32, 33, 37, 816, 1574, 2481, 198, 46550, 29612, 365, 34843, 43173, 581, 974, 2481, 1841, 17229, 365, 216, 34, 32, 33, 37, 816, 1574, 2481, 198, 198, 45, 446, 446, 31501, 2249, 446, 446, 446, 198, 198, 41859, 39756, 99, 365, 378, 38624, 2481, 1841, 13473, 365, 216, 33, 41, 41, 36, 816, 216, 33, 41, 41, 38, 2481, 198, 2083, 344, 5465, 1846, 395, 365, 678, 463, 344, 2481, 1841, 15987, 365, 216, 33, 41, 41, 36, 816, 216, 34, 32, 32, 34, 2481] \ No newline at end of file diff --git a/prepare.py b/prepare.py index 6efb76a..00d928a 100644 --- a/prepare.py +++ b/prepare.py @@ -1,324 +1,104 @@ -#!/usr/bin/env python3 """ -prepare.py — Data loading, tokenizer, and evaluation (READ-ONLY in autoresearch loop). +Data preparation and evaluation for ternary quantization experiments. +READ-ONLY in the autoresearch loop — train.py is the mutable file. -This file is NOT modified by the autoresearch agent. All mutable training logic -lives in train.py. This file provides: - - Dataset loading and tokenization - - Evaluation harness (WikiText PPL, optional zero-shot tasks) - - Utility functions for the training loop +Usage: + python prepare.py # download wikitext val shard + python prepare.py --num-samples 500 # smaller eval set for fast iteration """ +import argparse +import json import os -import math -import torch -from torch.utils.data import Dataset -from transformers import AutoTokenizer, AutoModelForCausalLM -from datasets import load_dataset +from pathlib import Path -# --------------------------------------------------------------------------- -# Configuration -# --------------------------------------------------------------------------- - -# Default model — small enough for fast iteration on M4 Pro / consumer GPU -DEFAULT_MODEL = "meta-llama/Llama-3.2-1B" -# Alternative tiny models for ultra-fast iteration: -# DEFAULT_MODEL = "HuggingFaceTB/SmolLM-135M" - -# Default eval dataset -DEFAULT_EVAL_DATASET = "wikitext" # "wikitext" or "ptb" -DEFAULT_EVAL_CONFIG = "wikitext-2-raw-v1" - -# Default training dataset -DEFAULT_TRAIN_DATASET = "HuggingFaceFW/fineweb-edu" # FineWeb-edu -# Alternative: "monology/patrickstar-core-1000" for smaller local testing - -# Sequence length for training -DEFAULT_SEQ_LENGTH = 2048 - -# --------------------------------------------------------------------------- -# Tokenizer -# --------------------------------------------------------------------------- - -def load_tokenizer(model_name: str = DEFAULT_MODEL) -> AutoTokenizer: - """Load tokenizer for the given model.""" - tokenizer = AutoTokenizer.from_pretrained( - model_name, - trust_remote_code=True, - ) - if tokenizer.pad_token is None: - tokenizer.pad_token = tokenizer.eos_token - return tokenizer +DATASETS_DIR = Path(__file__).parent / "data" -# --------------------------------------------------------------------------- -# Dataset Wrappers -# --------------------------------------------------------------------------- +def prepare_eval_data(num_samples=500): + """Download and prepare WikiText-2 validation data for perplexity evaluation. -class TokenizedDataset(Dataset): - """Simple dataset that yields batches of tokenized text.""" - - def __init__(self, data: list, tokenizer: AutoTokenizer, seq_length: int = DEFAULT_SEQ_LENGTH): - self.tokenizer = tokenizer - self.seq_length = seq_length - # Concatenate all texts and chunk into sequences - self.samples = self._prepare_samples(data) - - def _prepare_samples(self, data: list) -> list: - """Flatten and chunk text data into fixed-length sequences.""" - all_tokens = [] - for item in data: - text = item.get("text", item.get("content", str(item))) - tokens = self.tokenizer.encode(text, add_special_tokens=False) - all_tokens.extend(tokens) - all_tokens.append(self.tokenizer.eos_token_id) - - # Chunk into sequences of seq_length - samples = [] - for i in range(0, len(all_tokens) - self.seq_length + 1, self.seq_length): - samples.append(all_tokens[i : i + self.seq_length]) - return samples - - def __len__(self): - return len(self.samples) - - def __getitem__(self, idx): - x = torch.tensor(self.samples[idx], dtype=torch.long) - return {"input_ids": x[:-1], "labels": x[1:]} - - -def load_eval_dataset( - dataset_name: str = DEFAULT_EVAL_DATASET, - config: str = DEFAULT_EVAL_CONFIG, - split: str = "validation", - tokenizer: AutoTokenizer = None, - seq_length: int = DEFAULT_SEQ_LENGTH, -): - """Load and tokenize the evaluation dataset.""" - if dataset_name == "wikitext": - ds = load_dataset(dataset_name, config, trust_remote_code=True)[split] - elif dataset_name == "ptb": - ds = load_dataset(dataset_name, trust_remote_code=True)[split] - else: - ds = load_dataset(dataset_name, split=split, trust_remote_code=True) - - if tokenizer is None: - tokenizer = load_tokenizer() - - # For eval, we want contiguous text without chunking artifacts - texts = ds["text"] if "text" in ds.column_names else [str(x) for x in ds] - all_tokens = [] - for text in texts: - tokens = tokenizer.encode(text, add_special_tokens=False) - all_tokens.extend(tokens) - - # Remove empty tokens - all_tokens = [t for t in all_tokens if t is not None] - - # Create sequences - samples = [] - for i in range(0, len(all_tokens) - seq_length + 1, seq_length): - samples.append(all_tokens[i : i + seq_length]) - - return samples, tokenizer - - -# --------------------------------------------------------------------------- -# Evaluation -# --------------------------------------------------------------------------- - -@torch.no_grad() -def evaluate_ppl( - model: AutoModelForCausalLM, - eval_samples: list, - tokenizer: AutoTokenizer, - seq_length: int = DEFAULT_SEQ_LENGTH, - batch_size: int = 4, - device: str = "cpu", -) -> float: + Saves tokenized data as a JSON file for fast loading during training. """ - Evaluate perplexity on the given samples. - Returns perplexity (lower is better). - """ - model.eval() - total_loss = 0.0 - total_tokens = 0 + from datasets import load_dataset + from transformers import AutoTokenizer - for i in range(0, len(eval_samples), batch_size): - batch_samples = eval_samples[i : i + batch_size] - inputs = torch.tensor(batch_samples, dtype=torch.long, device=device) - labels = inputs.clone() + DATASETS_DIR.mkdir(parents=True, exist_ok=True) + tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM-135M") - # Shift for causal LM - input_ids = inputs[:, :-1] - label_ids = labels[:, 1:] + # Load wikitext test split (validation is unreliable with streaming) + print("Loading WikiText-2 test split...") + dataset = load_dataset("wikitext", "wikitext-2-raw-v1", split="test", streaming=True) - device_type = "mps" if device == "mps" else ("cuda" if device == "cuda" else "cpu") - if device_type != "cpu": - with torch.amp.autocast(device_type=device_type): - outputs = model(input_ids=input_ids, labels=label_ids, use_cache=False) - else: - outputs = model(input_ids=input_ids, labels=label_ids, use_cache=False) - - loss = outputs.loss - total_loss += loss.item() * label_ids.size(0) - total_tokens += label_ids.size(0) - - avg_loss = total_loss / total_tokens - perplexity = math.exp(avg_loss) - - model.train() - return perplexity - - -@torch.no_grad() -def evaluate_bpb( - model: AutoModelForCausalLM, - eval_samples: list, - tokenizer: AutoTokenizer, - seq_length: int = DEFAULT_SEQ_LENGTH, - batch_size: int = 4, - device: str = "cpu", -) -> float: - """ - Evaluate bits-per-byte (bpb) on the given samples. - Returns bpb (lower is better). - """ - ppl = evaluate_ppl(model, eval_samples, tokenizer, seq_length, batch_size, device) - bpb = math.log2(ppl) - return bpb - - -# --------------------------------------------------------------------------- -# Training Dataset Loader -# --------------------------------------------------------------------------- - -def load_train_dataset( - dataset_name: str = DEFAULT_TRAIN_DATASET, - split: str = "train", - tokenizer: AutoTokenizer = None, - seq_length: int = DEFAULT_SEQ_LENGTH, - max_samples: int = None, - streaming: bool = True, -): - """ - Load and prepare the training dataset. - Returns a TokenizedDataset. - """ - if tokenizer is None: - tokenizer = load_tokenizer() - - if dataset_name == "HuggingFaceFW/fineweb-edu": - # Use the edu-only subset for quality - ds = load_dataset( - dataset_name, - name="sample-100BT", # 100B token subset for faster iteration - split=split, - streaming=streaming, - trust_remote_code=True, - ) - elif dataset_name.endswith(".jsonl") or dataset_name.endswith(".json"): - ds = load_dataset("json", data_files=dataset_name, split=split, streaming=streaming) - else: - ds = load_dataset(dataset_name, split=split, streaming=streaming, trust_remote_code=True) - - # Collect texts (handle streaming by taking first N samples) + # Collect text into a single corpus texts = [] - for idx, item in enumerate(ds): - if max_samples and idx >= max_samples: + for i, sample in enumerate(dataset): + texts.append(sample["text"].strip()) + if i + 1 >= num_samples: break - text = item.get("text", item.get("content", str(item))) - texts.append(text) - if not texts: - raise ValueError(f"No texts loaded from dataset {dataset_name}") + corpus = "\n".join(texts) + print(f"Collected {len(corpus):,} characters from {len(texts)} samples") - dataset = TokenizedDataset(texts, tokenizer, seq_length) - return dataset + # Tokenize + print("Tokenizing...") + tokenized = tokenizer(corpus, truncation=False) + input_ids = tokenized["input_ids"] + print(f"Tokenized to {len(input_ids):,} tokens") + + # Save + eval_path = DATASETS_DIR / "wikitext_eval.json" + with open(eval_path, "w") as f: + json.dump(input_ids, f) + print(f"Saved eval data to {eval_path}") + return eval_path -# --------------------------------------------------------------------------- -# Model Loading -# --------------------------------------------------------------------------- +def prepare_train_data(num_samples=None): + """Prepare TinyStories training data (streaming, no download needed). -def load_model( - model_name: str = DEFAULT_MODEL, - device: str = "cpu", - dtype: torch.dtype = torch.float16, - attn_implementation: str = "sdpa", -) -> AutoModelForCausalLM: + Returns the dataset name and config for train.py to load on-the-fly. """ - Load a pretrained model from HuggingFace. - """ - model = AutoModelForCausalLM.from_pretrained( - model_name, - torch_dtype=dtype, - attn_implementation=attn_implementation, - trust_remote_code=True, - device_map=device if device != "cpu" else None, - ) - if device == "cpu": - model = model.to(device) - return model + # TinyStories is loaded streaming in train.py, nothing to prepare here + # Just verify it's accessible + from datasets import load_dataset + + print("Verifying TinyStories dataset access...") + ds = load_dataset("roneneldan/TinyStories", split="train", streaming=True) + sample = next(iter(ds)) + print(f" Sample keys: {list(sample.keys())}") + print(f" Sample length: {len(sample['text'])} chars") + print("TinyStories is accessible (loaded streaming, no local storage)") + return "roneneldan/TinyStories" -# --------------------------------------------------------------------------- -# CLI Entry Point -# --------------------------------------------------------------------------- +def get_vocab_size(): + """Return the vocab size for SmolLM-135M.""" + from transformers import AutoTokenizer -if __name__ == "__main__": - import argparse + tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM-135M") + return tokenizer.vocab_size - parser = argparse.ArgumentParser(description="Prepare and evaluate ternary quantization datasets") - parser.add_argument("--model", default=DEFAULT_MODEL, help="Model name or path") - parser.add_argument("--eval-dataset", default=DEFAULT_EVAL_DATASET, help="Evaluation dataset") - parser.add_argument("--eval-config", default=DEFAULT_EVAL_CONFIG, help="Evaluation dataset config") - parser.add_argument("--seq-length", type=int, default=DEFAULT_SEQ_LENGTH, help="Sequence length") - parser.add_argument("--batch-size", type=int, default=4, help="Evaluation batch size") - parser.add_argument("--device", default="cpu", help="Device to run on") - parser.add_argument("--train-samples", type=int, default=1000, help="Max training samples to load") - parser.add_argument("--dry-run", action="store_true", help="Just print config without loading") +def main(): + parser = argparse.ArgumentParser(description="Prepare data for ternary quantization experiments") + parser.add_argument("--num-eval-samples", type=int, default=500, help="Number of wikitext samples for eval") + parser.add_argument("--train", action="store_true", help="Verify training dataset access") + parser.add_argument("--eval", action="store_true", help="Prepare eval dataset") + parser.add_argument("--vocab", action="store_true", help="Print vocab size") args = parser.parse_args() - if args.dry_run: - print(f"Model: {args.model}") - print(f"Eval dataset: {args.eval_dataset} ({args.eval_config})") - print(f"Seq length: {args.seq_length}") - print(f"Batch size: {args.batch_size}") - print(f"Device: {args.device}") - print(f"Train samples: {args.train_samples}") - exit(0) + if args.vocab: + print(f"Vocab size: {get_vocab_size()}") + if args.eval: + prepare_eval_data(args.num_eval_samples) + if args.train: + prepare_train_data() + if not any([args.vocab, args.eval, args.train]): + # Default: prepare everything + prepare_eval_data(args.num_eval_samples) + prepare_train_data() - print(f"Loading tokenizer for {args.model}...") - tokenizer = load_tokenizer(args.model) - print(f"Loading eval dataset {args.eval_dataset}...") - eval_samples, _ = load_eval_dataset( - dataset_name=args.eval_dataset, - config=args.eval_config, - tokenizer=tokenizer, - seq_length=args.seq_length, - ) - print(f" Eval samples: {len(eval_samples)}") - - print(f"Loading training dataset ({args.train_samples} samples)...") - train_dataset = load_train_dataset( - tokenizer=tokenizer, - seq_length=args.seq_length, - max_samples=args.train_samples, - streaming=True, - ) - print(f" Train samples: {len(train_dataset)}") - - # Optional: load model and run eval - if args.device != "skip-model": - print(f"Loading model {args.model}...") - model = load_model(args.model, device=args.device) - print(f" Model params: {sum(p.numel() for p in model.parameters()):,}") - - print(f"Evaluating perplexity...") - ppl = evaluate_ppl(model, eval_samples, tokenizer, args.seq_length, args.batch_size, args.device) - print(f" Perplexity: {ppl:.2f}") - bpb = math.log2(ppl) - print(f" BPB: {bpb:.4f}") +if __name__ == "__main__": + main() diff --git a/program.md b/program.md index e83de5c..42d5bd4 100644 --- a/program.md +++ b/program.md @@ -1,78 +1,78 @@ -# program.md — Instructions for the Autoresearch Agent +# Ternary Quantization — Agent Instructions (program.md) You are an autonomous research agent exploring ternary (1.58-bit) quantization for LLMs. -## Your Goal +## Context -Iteratively improve the ternary quantization training in `train.py` to achieve the **lowest validation perplexity (val_ppl)** on WikiText-2. +We are implementing a QAT (quantization-aware training) pipeline that replaces standard `nn.Linear` layers with `BitLinear` layers that quantize weights to {-1, 0, +1} with per-group scales. The goal is to find hyperparameter configurations that minimize eval perplexity (PPL) on WikiText-2 after fine-tuning. -## File Boundaries +## File Boundary -- **MUTABLE**: `train.py` — You may modify this file. It contains: - - `BitLinear` layer (quantization logic) - - Quantization schedules (lambda warmup) - - Training loop - - Hyperparameters (LR, batch size, group size, etc.) +- **MUTABLE**: `train.py` — you can modify this file to change quantization logic, loss functions, warmup schedules, deadzone recovery, etc. +- **READ-ONLY**: `prepare.py` — data loading and tokenizer. Do not modify. +- **READ-ONLY**: `program.md` — these instructions. Do not modify. -- **READ-ONLY**: `prepare.py` — DO NOT modify this file. It contains: - - Dataset loading and tokenization - - Evaluation harness (WikiText PPL) - - Model loading utilities +## Current State -- **OUTPUT**: `results.tsv` — Results are automatically logged here after each run. +Check `results.tsv` to see previous experiment results. Each row has: +`step, lambda, train_loss, train_ppl, eval_ppl, eval_bpb, lr, time_s, best_ppl, q_neg1, q_zero, q_pos1` -## Experiment Protocol +## What You Can Experiment With -1. Read `results.tsv` to understand what has been tried -2. Read `train.py` to understand current implementation -3. Propose ONE focused change to `train.py` -4. The change will be committed and a training run will execute (~5 minutes) -5. Results are logged to `results.tsv` -6. If improved (lower val_ppl) → change is kept -7. If equal or worse → git reset to previous commit +All experiments should be in `train.py`. Focus on: -## What to Explore +1. **Quantization warmup schedule**: linear, cosine, exponential, step-wise + - `lambda_ = min(step / quant_warmup_steps, 1.0)` → try cosine: `0.5 * (1 - cos(pi * step / warmup))` + - Try different warmup lengths: 500, 1000, 2000, 5000 steps -### Priority 1: Quantization Schedule -- Lambda warmup shape: linear, cosine, exponential -- Warmup step counts: 200, 500, 1000, 2000, 5000 -- Two-phase warmup (fast initial + slow final) +2. **Learning rate**: 1e-5, 2e-5, 5e-5, 1e-4, 2e-4 + - LR warmup steps: 50, 100, 200, 500 -### Priority 2: Learning Rate -- LR values: 1e-5, 2e-5, 5e-5, 1e-4, 2e-4, 5e-4 -- LR schedule: constant, linear decay, cosine decay +3. **Group size**: 64, 128, 256 (Bonsai uses 128) -### Priority 3: Quantization Details -- Group size: 32, 64, 128, 256, per-tensor -- Scale initialization: mean-based vs absmax-based -- Ternary threshold adjustments +4. **Activation quantization**: 8-bit vs 16-bit (no quant) + - Try different activation quantization strategies (per-token, per-channel) -### Priority 4: Deadzone Recovery -- Tequila-style reactivation (learnable lambda for deadzone weights) -- Bias injection for zero-valued weights -- Gradient scaling for deadzone weights +5. **Weight quantization function**: + - Current: `scale = abs_mean(w)` → try `scale = abs_max(w)` + - Try different deadzone thresholds (e.g., |w_norm| < 0.5 → 0) -### Priority 5: Distillation -- OFF loss (cosine similarity between FP and ternary features) -- Logits distillation weight -- Feature distillation weight +6. **Deadzone recovery (Tequila-style)**: + - Track fraction of weights at 0; if > 40%, try reactivation + - Repurpose deadzone weights as dynamic biases + +7. **Gradient clipping**: 0.5, 1.0, 2.0, 5.0 + +8. **Batch size and seq length**: trade off memory vs gradient quality + - On M4 Pro with 24GB RAM, be conservative ## Constraints -- Keep experiments focused — ONE change per iteration -- Always maintain working code — syntax errors waste time -- Use SmolLM-135M or Llama-3.2-1B for fast iteration -- Target metric: val_ppl (lower is better) -- Time budget: 5 minutes per experiment +- **Device**: MPS (Apple Silicon). No CUDA. +- **Memory**: 24GB RAM. Use float32 (float16 breaks on MPS with cross-entropy). +- **Model**: SmolLM-135M (135M params). Don't change the model. +- **Dataset**: TinyStories (streaming). Don't change the dataset. +- **Eval**: WikiText-2 test split (pre-tokenized in data/wikitext_eval.json). +- **Keep it simple**: Changes should be reviewable diffs. Don't rewrite the whole file. -## Important Notes +## Evaluation Metric -- The STE (Straight-Through Estimator) is critical for gradients to flow through quantization -- Warmup quantization prevents catastrophic accuracy loss at the start of training -- Deadzone trapping (weights stuck at 0) is a known problem — explore solutions -- Per-group quantization scales are essential for handling outlier weights -- The quantization formula: `scale = 1.0 / w.abs().mean(); round(clamp(-1, 1))` +**Single metric**: `eval_ppl` (perplexity on WikiText-2). Lower is better. +Baseline: SmolLM-135M FP32 should be around 30-40 PPL on WikiText-2. -## NEVER STOP +## Experiment Protocol -Run experiments continuously until manually interrupted. Each experiment should be a small, focused change. Review results.tsv between runs to inform your next decision. +1. Read `results.tsv` to understand current state +2. Propose ONE focused change to `train.py` +3. Run training: `python train.py --steps 100 --eval-every 25 --activation-bits 16` +4. Check if `eval_ppl` improved +5. If improved → keep the change +6. If worse → revert to previous version +7. Repeat + +## Notes + +- Start with `activation-bits 16` (no activation quant) to isolate weight quantization effects +- Gradually introduce activation quantization once weight quant works well +- The `quant=[-1:X 0:Y +1:Z]` stat shows the ternary distribution — aim for balanced, not all zeros +- Lambda warmup is critical — too fast = catastrophic accuracy drop, too slow = no quantization benefit diff --git a/results.tsv b/results.tsv deleted file mode 100644 index 507550a..0000000 --- a/results.tsv +++ /dev/null @@ -1 +0,0 @@ -timestamp commit status val_ppl val_bpb initial_ppl best_ppl best_step steps time_s model lr warmup_steps total_steps lambda_schedule group_size batch_size seq_length description diff --git a/results_test.tsv b/results_test.tsv new file mode 100644 index 0000000..fdcbea9 --- /dev/null +++ b/results_test.tsv @@ -0,0 +1 @@ +step lambda train_loss train_ppl eval_ppl eval_bpb lr time_s best_ppl diff --git a/train.py b/train.py index 9ce0328..b5b305e 100644 --- a/train.py +++ b/train.py @@ -1,664 +1,593 @@ -#!/usr/bin/env python3 """ -train.py — Ternary quantization training loop (MUTABLE in autoresearch loop). +Ternary quantization training loop — MUTABLE in the autoresearch loop. -This is the single mutable file for the autoresearch agent. The agent may modify: - - Quantization schedule (lambda warmup shape, length) - - Learning rate and schedule - - BitLinear implementation details (group size, deadzone recovery) - - Loss function (distillation weights, OFF loss) - - Training hyperparameters +This file implements: +- BitLinear: ternary quantized linear layer with STE + lambda warmup +- Training loop on TinyStories with WikiText eval +- Debug output for monitoring in tmux -DO NOT modify prepare.py — all data loading and evaluation lives there. +Usage: + python train.py # default config + python train.py --steps 2000 --lr 1e-4 # custom hyperparams + python train.py --group-size 64 --warmup 500 # quantization params """ +import argparse +import json +import math import os import sys -import math import time -import json -import csv -import git -import random -import argparse from pathlib import Path import torch import torch.nn as nn -import torch.nn.functional as F -from torch.utils.data import DataLoader -from transformers import AutoTokenizer, AutoModelForCausalLM, get_linear_schedule_with_warmup +from torch.nn import functional as F +from datasets import load_dataset +from transformers import AutoModelForCausalLM, AutoTokenizer, AutoConfig -# Import from prepare.py (read-only) -from prepare import ( - load_tokenizer, - load_train_dataset, - load_eval_dataset, - load_model, - evaluate_ppl, - evaluate_bpb, - DEFAULT_MODEL, - DEFAULT_SEQ_LENGTH, - DEFAULT_TRAIN_DATASET, - DEFAULT_EVAL_DATASET, - DEFAULT_EVAL_CONFIG, +# --------------------------------------------------------------------------- +# Configuration defaults (tune these, or pass via CLI) +# --------------------------------------------------------------------------- +DEFAULTS = dict( + model_name="HuggingFaceTB/SmolLM-135M", + device="mps" if torch.backends.mps.is_available() else "cpu", + dtype=torch.float32, + # Training + steps=1000, + batch_size=4, + seq_len=256, + learning_rate=1e-4, + warmup_steps=100, + eval_every=50, + # Quantization + group_size=128, # Bonsai uses 128 + quant_warmup_steps=1000, # lambda warmup over N steps + activation_bits=8, # INT8 activations + # Data + train_dataset="roneneldan/TinyStories", + eval_data_path=str(Path(__file__).parent / "data" / "wikitext_eval.json"), + # Logging + log_file=str(Path(__file__).parent / "results.tsv"), ) # --------------------------------------------------------------------------- -# Quantization Utilities +# Ternary Quantization Primitives # --------------------------------------------------------------------------- -def ternary_quantize_weight(w: torch.Tensor, group_size: int = 128) -> tuple: - """ - Ternary quantize weights to {-1, 0, +1} with per-group scales. - - Quantization formula (from HF blog): - scale = 1.0 / w.abs().mean() - w_scaled = w * scale - w_clamped = clamp(w_scaled, -1, 1) - w_rounded = round(w_clamped) # -> {-1, 0, +1} - +def ternary_quantize(w, group_size=128): + """Quantize weights to {-1, 0, +1} with per-group scale. + + Groups are formed by flattening the weight tensor and taking consecutive + chunks of `group_size` elements. The last group may be smaller. + + Args: + w: weight tensor of any shape + group_size: number of weights per quantization group + Returns: - w_quant: ternary quantized weights - scales: per-group scales for dequantization + w_quant: ternary weights {-1, 0, +1} in original shape + scale: per-group scale factors, shape (num_groups, 1) """ original_shape = w.shape - # Flatten for group-wise processing - w_flat = w.flatten().float() - - num_groups = (len(w_flat) + group_size - 1) // group_size - scales = [] - quant_parts = [] - - for i in range(num_groups): - start = i * group_size - end = min(start + group_size, len(w_flat)) - group = w_flat[start:end] - - # Compute scale: 1 / mean(|w|) - scale = 1.0 / (group.abs().mean() + 1e-6) - scales.append(scale) - - # Scale, clamp, round - w_scaled = group * scale - w_clamped = w_scaled.clamp(-1.0, 1.0) - w_rounded = w_clamped.round().sign() # -> {-1, 0, +1} - - quant_parts.append(w_rounded) - - w_quant = torch.cat(quant_parts, dim=0).reshape(original_shape) - scales = torch.tensor(scales, device=w.device, dtype=w.dtype) - - return w_quant, scales + w_flat = w.reshape(-1) + + # Pad to multiple of group_size if needed + n = w_flat.numel() + pad = (group_size - n % group_size) % group_size + if pad > 0: + w_flat = torch.cat([w_flat, w_flat.new_zeros(pad)]) + + w_groups = w_flat.reshape(-1, group_size) + + # Scale: mean(|w|) per group (HF blog approach) + abs_mean = w_groups.abs().mean(dim=-1, keepdim=True).clamp(min=1e-6) + scale = abs_mean + + # Normalize, clamp to [-1, 1], round to nearest ternary + w_norm = w_groups / scale + w_clamped = w_norm.clamp(-1.0, 1.0) + w_quant = torch.round(w_clamped) # {-1, 0, +1} + + # Reshape back to original (trim padding) + w_quant = w_quant.reshape(-1)[:n].reshape(original_shape) + + return w_quant, scale -def ternary_dequantize(w_quant: torch.Tensor, scales: torch.Tensor, group_size: int = 128) -> torch.Tensor: - """Dequantize ternary weights back to original shape.""" +def ternary_dequantize(w_quant, scale, group_size=128): + """Reconstruct weights from ternary codes and scales. + + Groups are formed the same way as in ternary_quantize. + """ original_shape = w_quant.shape - w_flat = w_quant.flatten().float() - - num_groups = (len(w_flat) + group_size - 1) // group_size - dequant_parts = [] - - for i in range(num_groups): - start = i * group_size - end = min(start + group_size, len(w_flat)) - group = w_flat[start:end] - scale = scales[i] - dequant_parts.append(group / (scale + 1e-6)) - - return torch.cat(dequant_parts, dim=0).reshape(original_shape).to(w_quant.dtype) + w_flat = w_quant.reshape(-1) + + n = w_flat.numel() + pad = (group_size - n % group_size) % group_size + if pad > 0: + w_flat = torch.cat([w_flat, w_flat.new_zeros(pad)]) + + w_groups = w_flat.reshape(-1, group_size) + w_dequant = w_groups * scale + + return w_dequant.reshape(-1)[:n].reshape(original_shape) + + +def activation_quantize(x, bits=8): + """Quantize activations to INT8 with per-token absmax scaling. + + Args: + x: activation tensor + bits: number of bits (default 8) + + Returns: + x_quant: quantized then dequantized activations (same dtype as input) + """ + if bits == 16: + return x # no quantization + + max_val = x.abs().amax(dim=-1, keepdim=True).clamp(min=1e-6) + max_q = 2 ** (bits - 1) - 1 # 127 for INT8 + scale = max_val / max_q + x_q = (x / scale).round().clamp(-max_q, max_q) + return x_q * scale # --------------------------------------------------------------------------- -# BitLinear Layer +# BitLinear — Ternary Quantized Linear Layer # --------------------------------------------------------------------------- class BitLinear(nn.Module): - """ - Linear layer with ternary weight quantization using STE (Straight-Through Estimator). - - Forward pass uses quantized weights; backward pass uses STE to pass gradients - through the quantization operation. - - Supports warmup quantization: gradually introduce quantization during training - using lambda scheduling to avoid catastrophic accuracy loss. + """Linear layer with ternary quantized weights and INT8 activations. + + Uses straight-through estimator (STE) for gradient flow through quantization. + Lambda warmup gradually introduces quantization during training. + + The forward pass: + 1. Quantize weights to ternary + 2. (Optional) Quantize activations to INT8 + 3. Forward pass with quantized values + 4. STE: gradients flow through unquantized weights + 5. Lambda warmup: blend between FP and quantized forward """ - def __init__( - self, - in_features: int, - out_features: int, - bias: bool = True, - group_size: int = 128, - init_scale: float = 1.0, - ): + def __init__(self, in_features, out_features, bias=True, group_size=128, + activation_bits=8): super().__init__() self.in_features = in_features self.out_features = out_features self.group_size = group_size - self.init_scale = init_scale - - # FP16 weights (the "learned" weights) - self.weight = nn.Parameter(torch.randn(out_features, in_features) * 0.02) + self.activation_bits = activation_bits + + # FP16 weights (learned in full precision, quantized at forward time) + self.weight = nn.Parameter(torch.randn(out_features, in_features, dtype=DEFAULTS['dtype']) * 0.02) if bias: - self.bias = nn.Parameter(torch.zeros(out_features)) + self.bias = nn.Parameter(torch.zeros(out_features, dtype=DEFAULTS['dtype'])) else: self.bias = None - - # Quantization state - self.register_buffer("w_quant", torch.zeros(out_features, in_features)) - self.register_buffer("scales", torch.zeros((out_features * in_features + group_size - 1) // group_size)) - self.register_buffer("lambda", torch.tensor(0.0)) # warmup lambda - def _quantize(self, w: torch.Tensor) -> tuple: - """Quantize weights to ternary.""" - return ternary_quantize_weight(w, self.group_size) + # Lambda for warmup (set externally or via training loop) + self.register_buffer('lambda_', torch.tensor(0.0)) + + def forward(self, x): + lambda_ = self.lambda_.item() + + if lambda_ <= 0.0: + # No quantization — standard linear + out = F.linear(x, self.weight, self.bias) + return out - def forward(self, x: torch.Tensor) -> torch.Tensor: - """ - Forward pass with warmup quantization. - - Lambda is set externally via self.lambda_val before each forward pass. - - Quantization warmup formula: - w_eff = w + lambda * (w_dequant - w).detach() - - When lambda=0: output uses full-precision weights - When lambda=1: output uses quantized weights (with STE gradients) - """ - # Get lambda (default 1.0 if not set) - lambda_ = getattr(self, 'lambda_val', 1.0) - # Quantize weights - w_quant, scales = self._quantize(self.weight) - - # Dequantize for computation - w_dequant = ternary_dequantize(w_quant, scales, self.group_size) - - # STE with warmup: interpolate between FP and quantized - # w_eff = w + lambda * (w_dequant - w) - # Gradient flows through w (the FP weights), not through quantization - if lambda_ > 0: - w_eff = self.weight + lambda_ * (w_dequant - self.weight).detach() + w_quant, scale = ternary_quantize(self.weight, group_size=self.group_size) + + # Dequantize for forward pass + w_dequant = ternary_dequantize(w_quant, scale, self.group_size) + + # Quantize activations (optional) + if self.activation_bits < 16: + x_q = activation_quantize(x, self.activation_bits) else: - w_eff = self.weight - - # Linear forward - x = x.to(w_eff.dtype) - out = F.linear(x, w_eff, self.bias) + x_q = x + + # Quantized forward + out_quant = F.linear(x_q, w_dequant, self.bias) + + # Straight-through estimator with lambda warmup: + # out = out_fp + lambda * (out_quant - out_fp).detach() + # This lets gradients flow through FP weights while gradually + # exposing the network to quantized forward pass + out_fp = F.linear(x, self.weight, self.bias) + out = out_fp + lambda_ * (out_quant - out_fp).detach() + return out - def extra_repr(self) -> str: - return ( - f"in_features={self.in_features}, " - f"out_features={self.out_features}, " - f"group_size={self.group_size}, " - f"bias={self.bias is not None}" - ) + def extra_repr(self): + return (f"in_features={self.in_features}, out_features={self.out_features}, " + f"group_size={self.group_size}, activation_bits={self.activation_bits}") # --------------------------------------------------------------------------- -# Model Conversion +# Model Surgery — Replace Linear with BitLinear # --------------------------------------------------------------------------- -def replace_linears_with_bitlinear( - model: AutoModelForCausalLM, - group_size: int = 128, - target_modules: list = None, -) -> AutoModelForCausalLM: - """ - Replace all nn.Linear layers in the model with BitLinear layers. - +def replace_linears_with_bitlinear(model, group_size=128, activation_bits=8, + exclude_embeddings=True): + """Replace all nn.Linear layers in model with BitLinear. + Args: - model: pretrained model + model: HuggingFace model group_size: quantization group size - target_modules: list of module names to replace. If None, replace all. - - Returns: - Model with BitLinear layers + activation_bits: activation quantization bits (16 = no quant) + exclude_embeddings: don't replace lm_head/embedding (usually) """ - if target_modules is None: - target_modules = ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"] - + count = 0 for name, module in model.named_modules(): - parent_name = ".".join(name.split(".")[:-1]) - module_name = name.split(".")[-1] - - if isinstance(module, nn.Linear) and module_name in target_modules: + if isinstance(module, nn.Linear): + # Skip embedding layers if requested + if exclude_embeddings and ('embed_tokens' in name or 'lm_head' in name): + continue + + # Create BitLinear with same dimensions and device bit_linear = BitLinear( - in_features=module.in_features, - out_features=module.out_features, + module.in_features, + module.out_features, bias=module.bias is not None, group_size=group_size, + activation_bits=activation_bits, ) - # Initialize from pretrained weights - bit_linear.weight.data = module.weight.data.clone() - if module.bias is not None: - bit_linear.bias.data = module.bias.data.clone() - - # Replace in parent - parent = model - for attr in parent_name.split("."): - parent = getattr(parent, attr) - setattr(parent, module_name, bit_linear) - - return model + + # Initialize from FP weights (critical for warmup to work) + with torch.no_grad(): + bit_linear.weight.data = module.weight.clone() + if module.bias is not None: + bit_linear.bias.data = module.bias.clone() + + # Replace in parent module + parent_name = ".".join(name.split(".")[:-1]) + child_name = name.split(".")[-1] + parent = getattr(model, parent_name, None) if parent_name else model + + # Need to walk to the actual parent + parts = name.split(".") + obj = model + for p in parts[:-1]: + obj = getattr(obj, p) + setattr(obj, parts[-1], bit_linear) + count += 1 + + return count -def get_bitlinear_modules(model: AutoModelForCausalLM) -> list: - """Get all BitLinear modules in the model.""" - return [m for m in model.modules() if isinstance(m, BitLinear)] +def set_lambda(model, value): + """Set lambda on all BitLinear layers.""" + for module in model.modules(): + if isinstance(module, BitLinear): + module.lambda_.fill_(value) + + +def get_quant_stats(model): + """Get quantization statistics across all BitLinear layers. + + Returns dict with fraction of weights at {-1, 0, +1}. + """ + total = 0 + count_neg1 = 0 + count_zero = 0 + count_pos1 = 0 + + for module in model.modules(): + if isinstance(module, BitLinear): + w_q, _ = ternary_quantize(module.weight, group_size=module.group_size) + n = w_q.numel() + total += n + count_neg1 += (w_q == -1).sum().item() + count_zero += (w_q == 0).sum().item() + count_pos1 += (w_q == 1).sum().item() + + if total == 0: + return {"-1": 0, "0": 0, "+1": 0} + + return { + "-1": count_neg1 / total, + "0": count_zero / total, + "+1": count_pos1 / total, + } # --------------------------------------------------------------------------- -# Lambda Warmup Schedules +# Data Loading # --------------------------------------------------------------------------- -def linear_warmup_lambda(step: int, warmup_steps: int) -> float: - """Linear warmup: lambda goes from 0 to 1 over warmup_steps.""" - return min(step / warmup_steps, 1.0) +def load_train_data(dataset_name="roneneldan/TinyStories", tokenizer=None, + seq_len=256, batch_size=4, device="cpu"): + """Create a streaming dataloader for training. + + Yields tensors of shape (batch_size, seq_len) from concatenated text. + """ + dataset = load_dataset(dataset_name, split="train", streaming=True) + + def tokenize_and_batch(): + buffer = [] + target_size = seq_len * batch_size + + for sample in dataset: + tokens = tokenizer(sample["text"], truncation=False)["input_ids"] + buffer.extend(tokens) + + while len(buffer) >= target_size: + chunk = buffer[:target_size] + buffer = buffer[target_size:] + # Reshape to (batch_size, seq_len) + x = torch.tensor(chunk, dtype=torch.long, device=device).reshape(batch_size, seq_len) + yield x + + return tokenize_and_batch() -def cosine_warmup_lambda(step: int, warmup_steps: int) -> float: - """Cosine warmup: lambda follows cosine schedule over warmup_steps.""" - if step >= warmup_steps: - return 1.0 - return 0.5 * (1 - math.cos(math.pi * step / warmup_steps)) +def load_eval_data(eval_path): + """Load pre-tokenized eval data.""" + with open(eval_path, "r") as f: + input_ids = json.load(f) + return torch.tensor(input_ids, dtype=torch.long) -def exponential_warmup_lambda(step: int, warmup_steps: int) -> float: - """Exponential warmup: lambda grows exponentially over warmup_steps.""" - if step >= warmup_steps: - return 1.0 - # Exponential from 0 to 1 - return 1.0 - math.exp(-3.0 * step / warmup_steps) +# --------------------------------------------------------------------------- +# Evaluation +# --------------------------------------------------------------------------- +@torch.no_grad() +def evaluate(model, eval_ids, tokenizer, seq_len=128, device="cpu"): + """Compute perplexity on eval data.""" + model.eval() + nll = 0.0 + n_tokens = 0 -def get_lambda(step: int, warmup_steps: int, schedule: str = "linear") -> float: - """Get lambda value for the given step and schedule.""" - if schedule == "linear": - return linear_warmup_lambda(step, warmup_steps) - elif schedule == "cosine": - return cosine_warmup_lambda(step, warmup_steps) - elif schedule == "exponential": - return exponential_warmup_lambda(step, warmup_steps) - else: - raise ValueError(f"Unknown lambda schedule: {schedule}") + # Move eval data to device in chunks + for i in range(0, len(eval_ids) - seq_len, seq_len): + chunk = eval_ids[i : i + seq_len + 1].to(device) + # Shape: (1, seq_len+1) for batch dim + chunk = chunk.unsqueeze(0) + + logits = model(chunk[:, :-1]).logits # (1, seq_len, vocab) + loss = F.cross_entropy( + logits.reshape(-1, logits.size(-1)), + chunk[:, 1:].reshape(-1), + reduction="sum" + ) + nll += loss.item() + n_tokens += seq_len + + model.train() + avg_nll = nll / n_tokens + ppl = math.exp(avg_nll) + bpb = avg_nll / math.log(2) # bits per byte + return ppl, bpb, avg_nll # --------------------------------------------------------------------------- # Training Loop # --------------------------------------------------------------------------- -def train( - model_name: str = DEFAULT_MODEL, - train_dataset_name: str = DEFAULT_TRAIN_DATASET, - eval_dataset_name: str = DEFAULT_EVAL_DATASET, - eval_config: str = DEFAULT_EVAL_CONFIG, - seq_length: int = DEFAULT_SEQ_LENGTH, - batch_size: int = 4, - learning_rate: float = 1e-4, - warmup_steps: int = 1000, - total_steps: int = 5000, - eval_every: int = 500, - lambda_schedule: str = "linear", - group_size: int = 128, - max_train_samples: int = 50000, - device: str = "cpu", - dtype: torch.dtype = torch.float16, - time_budget: float = 300.0, # seconds (5 minutes default) - seed: int = 42, - output_dir: str = "./results", -): - """ - Main training loop for ternary quantization-aware training. - - Args: - model_name: HuggingFace model name or path - train_dataset_name: Training dataset name - eval_dataset_name: Evaluation dataset name - eval_config: Evaluation dataset config - seq_length: Sequence length for training - batch_size: Training batch size - learning_rate: Base learning rate - warmup_steps: Number of steps for lambda warmup - total_steps: Total training steps - eval_every: Evaluate every N steps - lambda_schedule: Lambda warmup schedule ("linear", "cosine", "exponential") - group_size: Quantization group size - max_train_samples: Max training samples to load - device: Device to train on - dtype: Data type - time_budget: Max training time in seconds - seed: Random seed - output_dir: Output directory for results - - Returns: - dict with training metrics - """ - # Auto-detect device if not specified - if device == "auto": - if torch.backends.mps.is_available(): - device = "mps" - print("Using MPS (Apple Silicon)") - elif torch.cuda.is_available(): - device = "cuda" - print("Using CUDA") - else: - device = "cpu" - print("Using CPU") - - # Set seeds - random.seed(seed) - torch.manual_seed(seed) - if device == "cuda": - torch.cuda.manual_seed(seed) - - # Track time +def train(args): + """Main training loop with ternary quantization.""" + device = args.device start_time = time.time() - - print(f"=== Ternary QAT Training ===") - print(f"Model: {model_name}") - print(f"Device: {device}") - print(f"LR: {learning_rate}, Warmup: {warmup_steps} steps") - print(f"Lambda schedule: {lambda_schedule}") - print(f"Group size: {group_size}") - print(f"Time budget: {time_budget}s") - print(f"Total steps: {total_steps}") - print() - - # Load tokenizer - print("Loading tokenizer...") - tokenizer = load_tokenizer(model_name) - - # Load model - print(f"Loading model {model_name}...") - model = load_model(model_name, device=device, dtype=dtype, attn_implementation="sdpa") - model = model.to(dtype) - print(f" Parameters: {sum(p.numel() for p in model.parameters()):,}") - print(f" Linear layers replaced: ", end="") - - # Replace Linear with BitLinear - model = replace_linears_with_bitlinear(model, group_size=group_size) - bitlinears = get_bitlinear_modules(model) - print(f"{len(bitlinears)}") - - # Load datasets - print(f"Loading training dataset ({max_train_samples} samples)...") - train_dataset = load_train_dataset( - dataset_name=train_dataset_name, - tokenizer=tokenizer, - seq_length=seq_length, - max_samples=max_train_samples, - streaming=True, + + # ---- Load model and tokenizer ---- + print(f"\n{'='*60}") + print(f" TERNARY QUANTIZATION TRAINING") + print(f"{'='*60}") + print(f" Model: {args.model_name}") + print(f" Device: {device}") + print(f" Steps: {args.steps}") + print(f" Batch size: {args.batch_size}") + print(f" Seq length: {args.seq_len}") + print(f" LR: {args.learning_rate}") + print(f" Group size: {args.group_size}") + print(f" Act bits: {args.activation_bits}") + print(f" Warmup: {args.quant_warmup_steps} steps") + print(f"{'='*60}\n") + + tokenizer = AutoTokenizer.from_pretrained(args.model_name) + if tokenizer.pad_token is None: + tokenizer.pad_token = tokenizer.eos_token + + print(f"Loading model... (this may take a moment)") + model = AutoModelForCausalLM.from_pretrained( + args.model_name, + torch_dtype=DEFAULTS['dtype'], + low_cpu_mem_usage=True, ) - print(f" Train samples: {len(train_dataset)}") - - print(f"Loading eval dataset...") - eval_samples, _ = load_eval_dataset( - dataset_name=eval_dataset_name, - config=eval_config, - tokenizer=tokenizer, - seq_length=seq_length, + model.to(device) + + total_params = sum(p.numel() for p in model.parameters()) + print(f"Model loaded: {total_params:,} parameters") + + # ---- Replace Linear with BitLinear ---- + print(f"\nReplacing Linear layers with BitLinear (group_size={args.group_size})...") + n_replaced = replace_linears_with_bitlinear( + model, + group_size=args.group_size, + activation_bits=args.activation_bits, ) - print(f" Eval samples: {len(eval_samples)}") - - # Initial evaluation - print("\n--- Initial Evaluation ---") - initial_ppl = evaluate_ppl(model, eval_samples, tokenizer, seq_length, batch_size, device) - initial_bpb = math.log2(initial_ppl) - print(f" Initial PPL: {initial_ppl:.2f}") - print(f" Initial BPB: {initial_bpb:.4f}") - - # Optimizer - # Only optimize BitLinear weights and biases (not the quantization buffers) + print(f"Replaced {n_replaced} Linear layers with BitLinear") + + # Count ternary params + ternary_params = sum( + p.numel() for m in model.modules() + if isinstance(m, BitLinear) for p in m.parameters() + ) + print(f"Ternary-quantized parameters: {ternary_params:,}") + + # ---- Load eval data ---- + eval_ids = load_eval_data(args.eval_data_path) + print(f"Eval data: {len(eval_ids):,} tokens") + + # ---- Optimizer ---- optimizer = torch.optim.AdamW( - [p for p in model.parameters() if p.requires_grad], - lr=learning_rate, + model.parameters(), + lr=args.learning_rate, weight_decay=0.01, ) - - # Learning rate scheduler - lr_scheduler = get_linear_schedule_with_warmup( - optimizer, - num_warmup_steps=int(total_steps * 0.1), - num_training_steps=total_steps, + + # ---- Training loop ---- + data_iter = load_train_data( + dataset_name=args.train_dataset, + tokenizer=tokenizer, + seq_len=args.seq_len, + batch_size=args.batch_size, + device=device, ) - - # DataLoader - train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True, drop_last=True) - loader_iter = iter(train_loader) - - # Training loop - results = { - "initial_ppl": initial_ppl, - "initial_bpb": initial_bpb, - "final_ppl": None, - "final_bpb": None, - "best_ppl": initial_ppl, - "best_step": 0, - "steps_completed": 0, - "training_time": 0, - } - - step = 0 - train_loss = 0.0 - steps_since_last_eval = 0 - - print(f"\n--- Training ---") - - while step < total_steps: - # Check time budget - elapsed = time.time() - start_time - if elapsed >= time_budget - 30: # Reserve 30s for final eval - print(f"\n Time budget nearly reached ({elapsed:.0f}/{time_budget}s). Stopping.") - break - - # Get lambda for this step - lambda_ = get_lambda(step, warmup_steps, lambda_schedule) - - # Get batch + + best_ppl = float("inf") + step_times = [] + + # Open log file + log_path = Path(args.log_file) + # Check if we need to write header + write_header = not log_path.exists() or log_path.stat().st_size == 0 + if write_header: + with open(log_path, "w") as f: + f.write("step\tlambda\ttrain_loss\ttrain_ppl\teval_ppl\teval_bpb\tlr\ttime_s\tbest_ppl\tq_neg1\tq_zero\tq_pos1\n") + + print(f"\n{'─'*60}") + print(f" STEP LAMBDA LOSS PPL EVAL_PPL LR TIME") + print(f"{'─'*60}") + + for step in range(1, args.steps + 1): + step_start = time.time() + + # ---- Lambda warmup ---- + lambda_ = min(step / args.quant_warmup_steps, 1.0) + set_lambda(model, lambda_) + + # ---- LR warmup ---- + if step <= args.warmup_steps: + lr_scale = step / args.warmup_steps + else: + lr_scale = 1.0 + for param_group in optimizer.param_groups: + param_group["lr"] = args.learning_rate * lr_scale + current_lr = args.learning_rate * lr_scale + + # ---- Forward pass ---- + model.train() try: - batch = next(loader_iter) + batch = next(data_iter) except StopIteration: - loader_iter = iter(train_loader) - batch = next(loader_iter) - - input_ids = batch["input_ids"].to(device) - labels = batch["labels"].to(device) - - # Set lambda on all BitLinear layers for this step - for bl in get_bitlinear_modules(model): - bl.lambda_val = lambda_ - - # Forward pass - outputs = model(input_ids=input_ids, labels=labels, use_cache=False) - - loss = outputs.loss - loss.backward() - - # Gradient clipping - torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0) - - optimizer.step() - lr_scheduler.step() + print("\n Dataset exhausted, restarting...") + data_iter = load_train_data( + dataset_name=args.train_dataset, + tokenizer=tokenizer, + seq_len=args.seq_len, + batch_size=args.batch_size, + device=device, + ) + batch = next(data_iter) + + # batch: (batch_size, seq_len) + # Shift for teacher forcing + x = batch[:, :-1] + y = batch[:, 1:] + + logits = model(x).logits + loss = F.cross_entropy( + logits.reshape(-1, logits.size(-1)), + y.reshape(-1), + ) + + train_ppl = math.exp(loss.item()) + + # ---- Backward pass ---- optimizer.zero_grad() - - train_loss += loss.item() - step += 1 - steps_since_last_eval += 1 - - # Periodic logging - if step % 100 == 0: - avg_loss = train_loss / 100 - avg_ppl = math.exp(avg_loss) + loss.backward() + torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0) + optimizer.step() + + step_time = time.time() - step_start + step_times.append(step_time) + avg_step_time = sum(step_times[-20:]) / len(step_times[-20:]) + + # ---- Eval ---- + eval_ppl = "-" + eval_bpb = "-" + quant_stats = None + if step % args.eval_every == 0 or step == args.steps: + ppl, bpb, _ = evaluate(model, eval_ids, tokenizer, + seq_len=128, device=device) + eval_ppl = f"{ppl:.1f}" + eval_bpb = f"{bpb:.2f}" + if ppl < best_ppl: + best_ppl = ppl + + # Quantization stats + quant_stats = get_quant_stats(model) + elapsed = time.time() - start_time - print(f" Step {step}/{total_steps} | Loss: {avg_loss:.4f} | PPL: {avg_ppl:.2f} | λ: {lambda_:.3f} | LR: {lr_scheduler.get_last_lr()[0]:.2e} | Time: {elapsed:.0f}s") - train_loss = 0.0 - - # Evaluation - if steps_since_last_eval >= eval_every or step == total_steps: - ppl = evaluate_ppl(model, eval_samples, tokenizer, seq_length, batch_size, device) - bpb = math.log2(ppl) + eta = avg_step_time * (args.steps - step) + q_str = f"[-1:{quant_stats['-1']:.2f} 0:{quant_stats['0']:.2f} +1:{quant_stats['+1']:.2f}]" + print(f" {step:5d} {lambda_:.3f} {loss.item():.4f} {train_ppl:7.1f} " + f"{eval_ppl:>8s} {current_lr:.2e} {elapsed:.0f}s (ETA {eta:.0f}s)") + print(f" eval_bpb={eval_bpb} best_ppl={best_ppl:.1f} " + f"step_time={avg_step_time:.2f}s quant={q_str}") + + # Log to TSV + with open(log_path, "a") as f: + q = quant_stats or {"-1": 0, "0": 0, "+1": 0} + f.write(f"{step}\t{lambda_:.4f}\t{loss.item():.6f}\t{train_ppl:.2f}\t" + f"{ppl:.2f}\t{bpb:.4f}\t{current_lr:.2e}\t{elapsed:.1f}\t{best_ppl:.2f}\t" + f"{q['-1']:.4f}\t{q['0']:.4f}\t{q['+1']:.4f}\n") + else: elapsed = time.time() - start_time - - print(f"\n [Eval] Step {step} | PPL: {ppl:.2f} | BPB: {bpb:.4f} | λ: {lambda_:.3f} | Time: {elapsed:.0f}s") - - if ppl < results["best_ppl"]: - results["best_ppl"] = ppl - results["best_step"] = step - print(f" *** New best PPL! ***") - - steps_since_last_eval = 0 - - # Final evaluation - print(f"\n--- Final Evaluation ---") - final_ppl = evaluate_ppl(model, eval_samples, tokenizer, seq_length, batch_size, device) - final_bpb = math.log2(final_ppl) - results["final_ppl"] = final_ppl - results["final_bpb"] = final_bpb - results["steps_completed"] = step - results["training_time"] = time.time() - start_time - - print(f" Final PPL: {final_ppl:.2f}") - print(f" Final BPB: {final_bpb:.4f}") - print(f" Best PPL: {results['best_ppl']:.2f} (step {results['best_step']})") - print(f" Steps completed: {step}") - print(f" Training time: {results['training_time']:.0f}s") - - return results + eta = avg_step_time * (args.steps - step) + if step % 25 == 0 or step == 1: + print(f" {step:5d} {lambda_:.3f} {loss.item():.4f} {train_ppl:7.1f} " + f"{'—':>8s} {current_lr:.2e} {elapsed:.0f}s (ETA {eta:.0f}s)") + + # Log to TSV (no eval) + with open(log_path, "a") as f: + f.write(f"{step}\t{lambda_:.4f}\t{loss.item():.6f}\t{train_ppl:.2f}\t" + f"-\t-\t{current_lr:.2e}\t{elapsed:.1f}\t{best_ppl:.2f}\t-\t-\t-\n") + + # ---- Summary ---- + total_time = time.time() - start_time + print(f"\n{'='*60}") + print(f" TRAINING COMPLETE") + print(f" Total time: {total_time:.0f}s ({total_time/60:.1f} min)") + print(f" Best eval PPL: {best_ppl:.1f}") + print(f" Final lambda: {lambda_:.3f}") + print(f" Avg step time: {sum(step_times)/len(step_times):.2f}s") + print(f" Results logged to: {log_path}") + print(f"{'='*60}\n") + + return best_ppl # --------------------------------------------------------------------------- -# Results Logging +# CLI # --------------------------------------------------------------------------- -def log_result(results: dict, config: dict, results_file: str = "results.tsv"): - """Log results to TSV file.""" - file_exists = os.path.exists(results_file) - - with open(results_file, "a") as f: - if not file_exists: - # Write header - headers = ["timestamp", "commit", "status", "val_ppl", "val_bpb", - "initial_ppl", "best_ppl", "best_step", "steps", "time_s", - "model", "lr", "warmup_steps", "total_steps", "lambda_schedule", - "group_size", "batch_size", "seq_length", "description"] - f.write("\t".join(headers) + "\n") - - row = [ - time.strftime("%Y-%m-%d %H:%M:%S"), - config.get("commit", ""), - config.get("status", "success"), - f"{results.get('final_ppl', 0):.4f}", - f"{results.get('final_bpb', 0):.4f}", - f"{results.get('initial_ppl', 0):.4f}", - f"{results.get('best_ppl', 0):.4f}", - str(results.get('best_step', 0)), - str(results.get('steps_completed', 0)), - f"{results.get('training_time', 0):.1f}", - config.get("model", ""), - str(config.get("lr", "")), - str(config.get("warmup_steps", "")), - str(config.get("total_steps", "")), - config.get("lambda_schedule", ""), - str(config.get("group_size", "")), - str(config.get("batch_size", "")), - str(config.get("seq_length", "")), - config.get("description", ""), - ] - f.write("\t".join(row) + "\n") - - print(f"\nResult logged to {results_file}") +def main(): + parser = argparse.ArgumentParser(description="Ternary quantization training") + parser.add_argument("--model-name", default=DEFAULTS["model_name"]) + parser.add_argument("--device", default=DEFAULTS["device"]) + parser.add_argument("--steps", type=int, default=DEFAULTS["steps"]) + parser.add_argument("--batch-size", type=int, default=DEFAULTS["batch_size"]) + parser.add_argument("--seq-len", type=int, default=DEFAULTS["seq_len"]) + parser.add_argument("--lr", type=float, default=DEFAULTS["learning_rate"], dest="learning_rate") + parser.add_argument("--warmup-steps", type=int, default=DEFAULTS["warmup_steps"], dest="warmup_steps") + parser.add_argument("--eval-every", type=int, default=DEFAULTS["eval_every"], dest="eval_every") + parser.add_argument("--group-size", type=int, default=DEFAULTS["group_size"], dest="group_size") + parser.add_argument("--quant-warmup-steps", type=int, default=DEFAULTS["quant_warmup_steps"], dest="quant_warmup_steps") + parser.add_argument("--activation-bits", type=int, default=DEFAULTS["activation_bits"], dest="activation_bits") + parser.add_argument("--train-dataset", default=DEFAULTS["train_dataset"], dest="train_dataset") + parser.add_argument("--eval-data-path", default=DEFAULTS["eval_data_path"], dest="eval_data_path") + parser.add_argument("--log-file", default=DEFAULTS["log_file"]) + args = parser.parse_args() + train(args) -def get_git_commit() -> str: - """Get current git commit hash.""" - try: - repo = git.Repo(search_parent_directories=True) - return repo.head.object.hexsha[:8] - except: - return "nogit" - - -# --------------------------------------------------------------------------- -# CLI Entry Point -# --------------------------------------------------------------------------- if __name__ == "__main__": - parser = argparse.ArgumentParser(description="Ternary QAT Training") - parser.add_argument("--model", default=DEFAULT_MODEL, help="Model name") - parser.add_argument("--train-dataset", default=DEFAULT_TRAIN_DATASET, help="Training dataset") - parser.add_argument("--eval-dataset", default=DEFAULT_EVAL_DATASET, help="Eval dataset") - parser.add_argument("--eval-config", default=DEFAULT_EVAL_CONFIG, help="Eval dataset config") - parser.add_argument("--seq-length", type=int, default=DEFAULT_SEQ_LENGTH, help="Sequence length") - parser.add_argument("--batch-size", type=int, default=4, help="Batch size") - parser.add_argument("--lr", type=float, default=1e-4, help="Learning rate") - parser.add_argument("--warmup-steps", type=int, default=1000, help="Lambda warmup steps") - parser.add_argument("--total-steps", type=int, default=5000, help="Total training steps") - parser.add_argument("--eval-every", type=int, default=500, help="Eval every N steps") - parser.add_argument("--lambda-schedule", default="linear", choices=["linear", "cosine", "exponential"], help="Lambda schedule") - parser.add_argument("--group-size", type=int, default=128, help="Quantization group size") - parser.add_argument("--max-samples", type=int, default=50000, help="Max training samples") - parser.add_argument("--device", default="auto", help="Device (auto=cuda/mps/cpu)") - parser.add_argument("--time-budget", type=float, default=300.0, help="Time budget in seconds") - parser.add_argument("--seed", type=int, default=42, help="Random seed") - parser.add_argument("--description", default="", help="Experiment description") - parser.add_argument("--dry-run", action="store_true", help="Print config without training") - - args = parser.parse_args() - - config = { - "commit": get_git_commit(), - "model": args.model, - "lr": args.lr, - "warmup_steps": args.warmup_steps, - "total_steps": args.total_steps, - "lambda_schedule": args.lambda_schedule, - "group_size": args.group_size, - "batch_size": args.batch_size, - "seq_length": args.seq_length, - "description": args.description or f"λ={args.lambda_schedule}-{args.warmup_steps} lr={args.lr} gs={args.group_size}", - } - - if args.dry_run: - print("=== Configuration (dry run) ===") - for k, v in config.items(): - print(f" {k}: {v}") - print(f" time_budget: {args.time_budget}s") - print(f" device: {args.device}") - exit(0) - - try: - results = train( - model_name=args.model, - train_dataset_name=args.train_dataset, - eval_dataset_name=args.eval_dataset, - eval_config=args.eval_config, - seq_length=args.seq_length, - batch_size=args.batch_size, - learning_rate=args.lr, - warmup_steps=args.warmup_steps, - total_steps=args.total_steps, - eval_every=args.eval_every, - lambda_schedule=args.lambda_schedule, - group_size=args.group_size, - max_train_samples=args.max_samples, - device=args.device, - time_budget=args.time_budget, - seed=args.seed, - ) - - config["status"] = "success" - log_result(results, config) - - except Exception as e: - print(f"\n!!! Training failed: {e}") - import traceback - traceback.print_exc() - - config["status"] = "failed" - config["error"] = str(e) - log_result({}, config) - sys.exit(1) + main()