Práctica: Algoritmos de intersección y unión de conjuntos en el modelo de comparación

Nombre Alumno : Isaac Hernandez Ramirez

Introducción

La operación de intersección de conjuntos ordenados es fundamental en sistemas de recuperación de información, bases de datos y procesamiento de textos, ya que permite hallar eficientemente elementos comunes en colecciones de datos. Tradicionalmente, los métodos más sencillos, como el algoritmo de “merge” de Bentley y Yao, escanean simultáneamente dos listas en tiempo lineal en la suma de sus tamaños [Bentley & Yao, 1976]. Sin embargo, al escalar a múltiples listas y a conjuntos de tamaños muy distintos, surgen variantes más adaptativas y eficientes.

En 2004, Baeza-Yates propuso un algoritmo de intersección para secuencias ordenadas que explota búsquedas binarias para reducir el número de comparaciones en escenarios desequilibrados [Baeza-Yates, 2004]. Paralelamente, Demaine et al. investigaron enfoques adaptativos que seleccionan dinámicamente la estrategia de búsqueda según la distribución de los datos [Demaine et al., 2001]. Inspirados por estas ideas, Barbay y Kenyon desarrollaron en 2002 un método adaptable basado en umbrales t-threshold, combinando saltos exponenciales y búsqueda binaria para manejar múltiples listas de manera más equilibrada [Barbay & Kenyon, 2002].

Más recientemente, extensiones de estos trabajos han explorado implementaciones prácticas y mejoras experimentales. En particular, Barbay, López-Ortiz y Lu (2006) reportaron optimizaciones que aceleran las intersecciones adaptativas para búsqueda de texto, mientras que Pugh (1990) introdujo las “skip lists” como una alternativa probabilística que facilita saltos rápidos en estructuras enlazadas. Este reporte implementa y compara tres familias de algoritmos—Melding (ME), Baeza-Yates (BY) con variantes de búsqueda y Barbay & Kenyon (BK)—siguiendo la teoría de los capítulos 5 y 6 del texto proporcionado, con el fin de evaluar su rendimiento en conjuntos de diferentes tamaños y cardinalidades.

Análisis de Algoritmos de Intersección de Conjuntos

Este cuaderno implementa y analiza múltiples algoritmos de intersección de conjuntos: - Melding (ME) - Baeza-Yates (BY) con diferentes métodos de búsqueda (bisección, B1, B2) - Barbay & Kenyon (BK)

Compararemos su rendimiento en diferentes conjuntos de datos en términos de tiempo de ejecución, número de comparaciones y longitud de las intersecciones.

# Importar bibliotecas requeridas
import json
import time
import random
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from collections import defaultdict
from typing import List, Set, Dict, Tuple, Any, Union, Optional
import os
import json
import time

Carga y Preparación de Datos

Primero, cargaremos los archivos JSON que contienen nuestros conjuntos de datos: - Conjunto de datos A: Contiene pares de conjuntos - Conjunto de datos B: Contiene tripletas de conjuntos - Conjunto de datos C: Contiene tetrapletas (conjuntos de 4)

Analizaremos estos archivos y organizaremos los datos en estructuras apropiadas para nuestros algoritmos de intersección.

# Definir rutas de archivos - actualizar a las ubicaciones reales de los archivos
data_dir = os.path.join(os.getcwd())
print(f"Directorio de datos: {data_dir}")
dataset_a_path = os.path.join(data_dir, "posting\postinglists-for-intersection-A-k=2.json")
dataset_b_path = os.path.join(data_dir, "posting\postinglists-for-intersection-B-k=3.json")
dataset_c_path = os.path.join(data_dir, "posting\postinglists-for-intersection-C-k=4.json")

# Función para cargar datos JSON
def load_json_data(file_path):
    try:
        with open(file_path, 'r') as file:
            return json.load(file)
    except FileNotFoundError:
        print(f"Advertencia: Archivo {file_path} no encontrado.")

# Cargar conjuntos de datos
dataset_a = load_json_data(dataset_a_path)  # Pares
dataset_b = load_json_data(dataset_b_path)  # Tripletas
dataset_c = load_json_data(dataset_c_path)  # Tetrapletas

print(f"Conjunto de datos A (pares): {len(dataset_a)} instancias")
print(f"Conjunto de datos B (tripletas): {len(dataset_b)} instancias")
print(f"Conjunto de datos C (tetrapletas): {len(dataset_c)} instancias")

# Vista previa de datos
print("\nVista previa del Conjunto de datos A (primera instancia):")
print(dataset_a[0] if dataset_a else "No hay datos")
Directorio de datos: c:\Users\herna\Downloads\Reporte5_AnalisisAlgoritmos
Conjunto de datos A (pares): 200 instancias
Conjunto de datos B (tripletas): 200 instancias
Conjunto de datos C (tetrapletas): 200 instancias

Vista previa del Conjunto de datos A (primera instancia):
[[848, 1153, 2233, 3004, 3275, 3336, 3418, 3578, 4332, 4339, 4399, 4500, 5002, 5450, 6093, 6323, 7080, 7830, 7830, 7885, 9114, 9636, 9639, 10392, 10503, 10745, 10770, 10813, 10952, 11014, 11417, 11562, 12010, 12076, 12498, 12740, 12761, 13276, 14087, 14207, 14366, 14366, 14366, 14374, 14455, 14904, 14913, 15448, 15922, 15951, 15951, 16016, 16112, 16191, 16204, 16224, 16417, 16494, 16494, 16509, 16610, 16737, 17524, 17534, 17918, 17986, 19406, 19406, 19879, 20093, 20319, 20423, 20987, 21791, 23495, 23898, 24820, 25121, 25155, 25808, 25808, 26204, 30186, 32620, 32973, 33278, 34478, 34677, 34927, 36400, 36494, 36528, 36547, 37581, 38146, 39135, 39503, 39987, 39987, 40469, 40558, 41009, 41490, 42009, 42979, 42979, 42979, 43171, 43372, 43827, 43873, 43936, 44018, 44857, 46379, 48456, 49823], [5, 8, 12, 14, 20, 22, 24, 28, 29, 32, 34, 35, 36, 37, 40, 41, 44, 47, 48, 51, 58, 60, 62, 64, 65, 67, 78, 81, 84, 86, 87, 88, 90, 93, 94, 96, 97, 98, 99, 106, 108, 109, 110, 111, 117, 120, 121, 122, 127, 129, 131, 133, 137, 138, 145, 147, 153, 159, 161, 164, 166, 167, 169, 173, 174, 176, 181, 183, 184, 188, 192, 197, 200, 202, 204, 207, 211, 215, 218, 220, 222, 226, 227, 228, 229, 232, 240, 244, 245, 247, 248, 251, 252, 253, 255, 262, 265, 266, 267, 272, 276, 277, 278, 279, 282, 287, 289, 290, 291, 293, 294, 308, 314, 315, 316, 317, 319, 320, 321, 323, 325, 327, 330, 331, 335, 341, 345, 347, 348, 351, 352, 359, 361, 362, 366, 371, 372, 374, 375, 380, 381, 382, 383, 384, 388, 397, 398, 402, 404, 407, 408, 409, 410, 411, 414, 418, 428, 431, 435, 438, 439, 440, 441, 444, 447, 449, 450, 451, 452, 453, 457, 458, 459, 460, 462, 465, 470, 471, 473, 474, 477, 478, 479, 480, 484, 489, 490, 496, 506, 508, 514, 517, 518, 519, 520, 525, 527, 531, 532, 534, 538, 539, 540, 544, 553, 555, 558, 560, 562, 564, 567, 568, 571, 573, 577, 578, 585, 597, 598, 601, 602, 605, 608, 613, 617, 618, 619, 620, 621, 622, 625, 628, 633, 637, 639, 644, 645, 652, 654, 656, 658, 659, 663, 666, 667, 669, 675, 679, 686, 688, 690, 692, 693, 695, 696, 700, 702, 703, 707, 715, 717, 720, 721, 722, 724, 725, 728, 735, 738, 742, 746, 747, 754, 755, 756, 759, 761, 766, 769, 770, 771, 774, 776, 781, 782, 787, 788, 790, 791, 794, 795, 798, 799, 801, 802, 806, 808, 809, 811, 814, 815, 821, 823, 825, 826, 828, 831, 836, 839, 842, 843, 853, 854, 855, 859, 862, 863, 869, 870, 875, 876, 878, 881, 884, 888, 889, 890, 895, 897, 898, 899, 901, 902, 906, 908, 910, 913, 919, 921, 924, 925, 928, 930, 931, 938, 939, 940, 941, 942, 944, 946, 950, 952, 958, 959, 962, 964, 966, 967, 968, 969, 974, 976, 978, 980, 981, 983, 987, 990, 992, 994, 996, 1000, 1001, 1003, 1004, 1005, 1010, 1011, 1012, 1013, 1014, 1015, 1017, 1018, 1020, 1027, 1028, 1029, 1030, 1032, 1033, 1034, 1037, 1041, 1043, 1045, 1047, 1049, 1050, 1051, 1056, 1059, 1061, 1069, 1070, 1073, 1077, 1079, 1080, 1082, 1084, 1085, 1086, 1090, 1091, 1093, 1094, 1096, 1097, 1100, 1102, 1103, 1105, 1106, 1109, 1110, 1112, 1113, 1114, 1118, 1119, 1120, 1122, 1126, 1128, 1130, 1131, 1132, 1134, 1135, 1138, 1140, 1141, 1142, 1143, 1148, 1161, 1162, 1163, 1165, 1166, 1167, 1170, 1174, 1175, 1177, 1178, 1179, 1184, 1186, 1188, 1189, 1195, 1196, 1198, 1199, 1200, 1202, 1204, 1209, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1221, 1225, 1232, 1234, 1235, 1236, 1239, 1241, 1242, 1244, 1245, 1249, 1258, 1262, 1266, 1270, 1272, 1274, 1277, 1285, 1287, 1288, 1289, 1292, 1295, 1299, 1307, 1311, 1312, 1314, 1316, 1317, 1320, 1323, 1326, 1328, 1330, 1332, 1334, 1335, 1336, 1340, 1345, 1346, 1349, 1351, 1352, 1353, 1356, 1361, 1365, 1369, 1370, 1371, 1372, 1373, 1374, 1376, 1378, 1379, 1383, 1384, 1385, 1387, 1388, 1391, 1396, 1400, 1401, 1402, 1403, 1404, 1413, 1414, 1420, 1423, 1424, 1427, 1430, 1431, 1432, 1433, 1434, 1438, 1441, 1443, 1447, 1448, 1449, 1452, 1453, 1454, 1456, 1457, 1460, 1467, 1468, 1469, 1472, 1476, 1479, 1482, 1483, 1489, 1495, 1496, 1498, 1499, 1501, 1505, 1509, 1511, 1512, 1516, 1517, 1518, 1521, 1525, 1533, 1535, 1537, 1545, 1546, 1547, 1550, 1552, 1554, 1555, 1558, 1559, 1560, 1561, 1562, 1564, 1567, 1568, 1570, 1573, 1574, 1578, 1586, 1587, 1588, 1589, 1590, 1593, 1594, 1595, 1598, 1600, 1607, 1609, 1610, 1620, 1621, 1626, 1627, 1629, 1638, 1639, 1641, 1645, 1646, 1647, 1650, 1652, 1654, 1661, 1662, 1663, 1664, 1666, 1667, 1674, 1675, 1677, 1678, 1680, 1681, 1683, 1685, 1686, 1689, 1693, 1695, 1696, 1699, 1700, 1701, 1702, 1703, 1704, 1706, 1714, 1715, 1717, 1719, 1720, 1721, 1722, 1734, 1737, 1740, 1742, 1745, 1746, 1751, 1758, 1763, 1764, 1767, 1768, 1769, 1778, 1781, 1782, 1783, 1784, 1785, 1791, 1795, 1797, 1798, 1799, 1805, 1806, 1809, 1817, 1821, 1822, 1824, 1826, 1827, 1829, 1835, 1844, 1847, 1855, 1856, 1858, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1884, 1886, 1888, 1889, 1890, 1896, 1897, 1899, 1904, 1914, 1918, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1936, 1937, 1939, 1946, 1951, 1952, 1954, 1958, 1959, 1968, 1970, 1971, 1973, 1977, 1980, 1981, 1982, 1985, 1989, 1990, 1999, 2008, 2011, 2015, 2026, 2037, 2038, 2041, 2044, 2047, 2050, 2052, 2062, 2063, 2064, 2065, 2066, 2068, 2071, 2072, 2073, 2074, 2079, 2081, 2084, 2085, 2091, 2093, 2096, 2100, 2103, 2105, 2106, 2108, 2110, 2114, 2116, 2121, 2122, 2123, 2126, 2131, 2132, 2135, 2136, 2144, 2145, 2151, 2158, 2160, 2161, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2190, 2191, 2192, 2193, 2200, 2203, 2204, 2206, 2207, 2208, 2209, 2211, 2215, 2223, 2225, 2229, 2232, 2238, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2259, 2268, 2270, 2271, 2272, 2274, 2275, 2277, 2280, 2281, 2283, 2289, 2291, 2292, 2293, 2294, 2296, 2303, 2304, 2306, 2307, 2308, 2310, 2312, 2313, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2329, 2331, 2335, 2348, 2349, 2350, 2352, 2361, 2363, 2366, 2367, 2368, 2370, 2371, 2374, 2376, 2383, 2386, 2389, 2390, 2391, 2398, 2400, 2404, 2405, 2406, 2414, 2415, 2417, 2418, 2419, 2420, 2422, 2428, 2429, 2431, 2436, 2440, 2444, 2460, 2461, 2464, 2473, 2474, 2481, 2482, 2483, 2484, 2490, 2493, 2495, 2496, 2502, 2504, 2507, 2509, 2510, 2511, 2512, 2513, 2515, 2516, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2527, 2529, 2531, 2532, 2534, 2537, 2539, 2542, 2543, 2544, 2545, 2550, 2553, 2554, 2556, 2558, 2559, 2561, 2562, 2563, 2565, 2572, 2574, 2575, 2576, 2577, 2578, 2581, 2582, 2587, 2588, 2590, 2591, 2592, 2593, 2596, 2598, 2600, 2601, 2602, 2605, 2606, 2607, 2608, 2610, 2611, 2613, 2614, 2615, 2617, 2621, 2623, 2626, 2628, 2630, 2631, 2633, 2637, 2638, 2640, 2642, 2644, 2652, 2653, 2655, 2656, 2660, 2668, 2669, 2670, 2671, 2673, 2676, 2677, 2680, 2685, 2686, 2694, 2695, 2696, 2698, 2699, 2701, 2702, 2708, 2712, 2713, 2717, 2718, 2720, 2723, 2724, 2725, 2726, 2727, 2731, 2732, 2733, 2735, 2739, 2740, 2744, 2745, 2746, 2747, 2748, 2750, 2751, 2753, 2754, 2755, 2757, 2761, 2770, 2774, 2779, 2781, 2782, 2783, 2786, 2787, 2790, 2791, 2796, 2801, 2803, 2804, 2805, 2809, 2812, 2815, 2820, 2822, 2829, 2838, 2840, 2841, 2842, 2847, 2855, 2858, 2859, 2860, 2863, 2864, 2866, 2870, 2875, 2880, 2881, 2883, 2886, 2887, 2888, 2889, 2890, 2893, 2897, 2898, 2900, 2903, 2908, 2910, 2912, 2916, 2918, 2919, 2924, 2926, 2929, 2931, 2933, 2938, 2939, 2942, 2946, 2947, 2948, 2950, 2953, 2955, 2957, 2958, 2959, 2960, 2962, 2967, 2969, 2970, 2975, 2980, 2982, 2988, 2989, 2990, 2993, 2994, 2995, 2996, 3001, 3002, 3003, 3011, 3012, 3017, 3018, 3019, 3021, 3025, 3026, 3027, 3029, 3030, 3031, 3034, 3036, 3040, 3046, 3049, 3053, 3054, 3055, 3056, 3058, 3068, 3069, 3070, 3073, 3075, 3080, 3083, 3088, 3095, 3097, 3098, 3099, 3101, 3102, 3103, 3104, 3110, 3112, 3114, 3116, 3119, 3120, 3121, 3123, 3125, 3128, 3137, 3145, 3146, 3151, 3152, 3153, 3158, 3159, 3160, 3161, 3165, 3167, 3169, 3172, 3174, 3180, 3181, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3201, 3205, 3206, 3209, 3210, 3211, 3213, 3215, 3217, 3219, 3225, 3226, 3227, 3228, 3229, 3230, 3231, 3234, 3235, 3237, 3238, 3239, 3240, 3241, 3243, 3244, 3250, 3254, 3257, 3259, 3261, 3262, 3263, 3264, 3266, 3267, 3272, 3273, 3280, 3283, 3284, 3285, 3287, 3288, 3290, 3296, 3302, 3303, 3304, 3306, 3312, 3315, 3316, 3317, 3318, 3319, 3320, 3322, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3337, 3338, 3346, 3347, 3348, 3350, 3359, 3360, 3362, 3365, 3366, 3368, 3369, 3373, 3374, 3381, 3382, 3383, 3384, 3386, 3396, 3397, 3398, 3400, 3405, 3407, 3412, 3417, 3420, 3422, 3424, 3426, 3427, 3428, 3429, 3430, 3434, 3435, 3436, 3437, 3438, 3442, 3444, 3445, 3446, 3448, 3451, 3454, 3455, 3457, 3461, 3462, 3464, 3465, 3466, 3469, 3471, 3472, 3475, 3476, 3477, 3479, 3484, 3486, 3487, 3494, 3497, 3498, 3499, 3500, 3503, 3505, 3506, 3508, 3509, 3513, 3515, 3516, 3519, 3520, 3523, 3524, 3525, 3527, 3528, 3529, 3530, 3531, 3532, 3533, 3535, 3547, 3548, 3549, 3550, 3552, 3553, 3556, 3558, 3559, 3560, 3561, 3562, 3570, 3572, 3573, 3574, 3581, 3582, 3583, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3598, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3615, 3616, 3617, 3619, 3623, 3624, 3627, 3631, 3632, 3639, 3640, 3642, 3644, 3645, 3646, 3647, 3648, 3650, 3652, 3653, 3654, 3655, 3662, 3668, 3670, 3673, 3678, 3680, 3684, 3686, 3688, 3689, 3695, 3696, 3698, 3700, 3702, 3705, 3707, 3712, 3713, 3714, 3717, 3720, 3721, 3723, 3729, 3730, 3733, 3736, 3739, 3744, 3746, 3761, 3766, 3767, 3770, 3773, 3775, 3777, 3779, 3780, 3783, 3785, 3791, 3792, 3795, 3803, 3804, 3806, 3808, 3823, 3825, 3829, 3830, 3831, 3834, 3838, 3839, 3840, 3841, 3843, 3847, 3850, 3851, 3857, 3861, 3862, 3863, 3864, 3868, 3870, 3880, 3881, 3882, 3883, 3884, 3893, 3897, 3901, 3914, 3915, 3918, 3920, 3923, 3927, 3928, 3929, 3930, 3933, 3935, 3936, 3937, 3942, 3943, 3945, 3946, 3953, 3954, 3958, 3959, 3964, 3968, 3969, 3970, 3973, 3974, 3977, 3978, 3979, 3981, 3987, 3991, 3998, 4002, 4004, 4005, 4009, 4010, 4014, 4018, 4023, 4037, 4039, 4047, 4050, 4055, 4056, 4059, 4060, 4061, 4066, 4074, 4080, 4081, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4092, 4098, 4102, 4111, 4114, 4119, 4123, 4125, 4128, 4129, 4130, 4134, 4138, 4141, 4142, 4144, 4145, 4149, 4151, 4154, 4157, 4158, 4161, 4165, 4173, 4174, 4178, 4180, 4182, 4183, 4184, 4186, 4188, 4189, 4194, 4195, 4198, 4200, 4202, 4204, 4209, 4212, 4213, 4215, 4217, 4218, 4221, 4223, 4225, 4227, 4229, 4230, 4231, 4233, 4238, 4239, 4242, 4244, 4247, 4251, 4253, 4254, 4255, 4257, 4260, 4261, 4262, 4264, 4265, 4266, 4267, 4268, 4271, 4274, 4278, 4283, 4285, 4288, 4289, 4291, 4292, 4293, 4294, 4295, 4296, 4301, 4303, 4305, 4307, 4308, 4311, 4312, 4314, 4317, 4322, 4323, 4324, 4325, 4327, 4328, 4331, 4334, 4337, 4342, 4343, 4344, 4347, 4348, 4350, 4354, 4355, 4356, 4357, 4359, 4362, 4363, 4364, 4367, 4373, 4374, 4375, 4376, 4377, 4378, 4380, 4381, 4384, 4386, 4390, 4392, 4393, 4397, 4400, 4406, 4408, 4412, 4416, 4421, 4422, 4424, 4425, 4427, 4431, 4432, 4437, 4438, 4440, 4442, 4443, 4444, 4451, 4452, 4453, 4454, 4455, 4460, 4463, 4464, 4466, 4470, 4476, 4477, 4479, 4480, 4481, 4484, 4486, 4501, 4503, 4505, 4507, 4511, 4512, 4515, 4520, 4522, 4523, 4526, 4530, 4532, 4538, 4540, 4545, 4547, 4549, 4550, 4551, 4552, 4553, 4555, 4556, 4558, 4560, 4563, 4565, 4567, 4568, 4569, 4570, 4575, 4576, 4577, 4585, 4589, 4590, 4591, 4594, 4597, 4598, 4599, 4601, 4605, 4613, 4615, 4618, 4621, 4623, 4624, 4625, 4626, 4627, 4628, 4635, 4637, 4639, 4643, 4646, 4649, 4652, 4653, 4656, 4658, 4661, 4662, 4666, 4669, 4679, 4681, 4683, 4689, 4696, 4699, 4701, 4703, 4705, 4706, 4707, 4708, 4710, 4711, 4712, 4715, 4720, 4721, 4723, 4724, 4725, 4728, 4729, 4730, 4731, 4738, 4740, 4742, 4743, 4746, 4747, 4748, 4749, 4755, 4758, 4762, 4764, 4767, 4774, 4775, 4779, 4782, 4783, 4785, 4787, 4788, 4795, 4796, 4798, 4799, 4800, 4812, 4814, 4818, 4820, 4828, 4830, 4832, 4833, 4837, 4839, 4840, 4847, 4848, 4853, 4856, 4857, 4859, 4860, 4867, 4868, 4870, 4871, 4872, 4873, 4877, 4883, 4889, 4891, 4893, 4896, 4900, 4901, 4903, 4905, 4906, 4917, 4918, 4920, 4925, 4929, 4933, 4934, 4935, 4937, 4938, 4940, 4941, 4942, 4944, 4946, 4947, 4948, 4951, 4955, 4958, 4960, 4962, 4965, 4969, 4970, 4971, 4973, 4974, 4978, 4982, 4987, 4988, 4989, 4990, 4991, 4998, 5001, 5003, 5007, 5009, 5010, 5014, 5019, 5025, 5028, 5029, 5031, 5032, 5033, 5040, 5041, 5045, 5046, 5047, 5048, 5050, 5051, 5052, 5053, 5054, 5055, 5059, 5076, 5080, 5083, 5089, 5090, 5092, 5095, 5100, 5101, 5106, 5107, 5109, 5116, 5119, 5120, 5123, 5126, 5130, 5137, 5139, 5142, 5150, 5154, 5162, 5166, 5171, 5172, 5173, 5175, 5176, 5179, 5182, 5184, 5186, 5190, 5191, 5192, 5193, 5197, 5204, 5210, 5214, 5215, 5218, 5219, 5221, 5225, 5227, 5228, 5229, 5231, 5232, 5233, 5236, 5242, 5243, 5244, 5245, 5247, 5250, 5252, 5256, 5258, 5260, 5261, 5262, 5267, 5269, 5277, 5279, 5285, 5286, 5287, 5288, 5289, 5293, 5294, 5299, 5302, 5303, 5305, 5312, 5313, 5317, 5322, 5327, 5329, 5331, 5334, 5336, 5340, 5341, 5347, 5349, 5354, 5358, 5362, 5364, 5370, 5371, 5373, 5377, 5378, 5379, 5380, 5381, 5383, 5384, 5389, 5390, 5391, 5396, 5403, 5406, 5407, 5408, 5410, 5411, 5415, 5419, 5420, 5422, 5426, 5429, 5430, 5431, 5435, 5442, 5443, 5451, 5452, 5453, 5455, 5457, 5459, 5460, 5461, 5467, 5468, 5480, 5481, 5489, 5493, 5498, 5500, 5504, 5505, 5507, 5510, 5512, 5513, 5517, 5521, 5522, 5523, 5526, 5529, 5530, 5531, 5535, 5542, 5543, 5546, 5547, 5548, 5549, 5553, 5554, 5558, 5560, 5566, 5570, 5572, 5573, 5576, 5579, 5580, 5585, 5589, 5590, 5596, 5608, 5609, 5613, 5615, 5618, 5623, 5624, 5626, 5627, 5629, 5632, 5635, 5636, 5638, 5639, 5643, 5644, 5645, 5647, 5648, 5653, 5654, 5656, 5658, 5668, 5674, 5675, 5676, 5677, 5678, 5679, 5686, 5687, 5691, 5696, 5701, 5703, 5704, 5707, 5708, 5709, 5712, 5714, 5716, 5718, 5719, 5722, 5726, 5730, 5732, 5734, 5736, 5739, 5741, 5744, 5746, 5747, 5748, 5753, 5754, 5755, 5756, 5758, 5761, 5762, 5763, 5768, 5771, 5772, 5779, 5783, 5786, 5801, 5804, 5808, 5810, 5817, 5818, 5824, 5825, 5827, 5828, 5829, 5832, 5835, 5837, 5843, 5845, 5849, 5850, 5851, 5852, 5865, 5867, 5869, 5879, 5880, 5888, 5893, 5895, 5897, 5900, 5901, 5905, 5915, 5916, 5917, 5922, 5933, 5936, 5937, 5939, 5941, 5942, 5946, 5950, 5951, 5954, 5959, 5960, 5961, 5964, 5969, 5970, 5971, 5974, 5977, 5985, 5987, 5992, 5993, 5995, 6000, 6003, 6005, 6011, 6012, 6013, 6017, 6019, 6022, 6025, 6026, 6028, 6029, 6032, 6033, 6037, 6038, 6040, 6043, 6049, 6055, 6058, 6067, 6070, 6077, 6080, 6081, 6082, 6085, 6096, 6098, 6100, 6101, 6102, 6108, 6115, 6129, 6130, 6136, 6138, 6143, 6149, 6150, 6154, 6157, 6160, 6166, 6169, 6170, 6174, 6187, 6193, 6198, 6200, 6204, 6206, 6207, 6215, 6217, 6218, 6220, 6223, 6225, 6230, 6233, 6234, 6240, 6242, 6245, 6247, 6250, 6251, 6252, 6254, 6261, 6265, 6269, 6271, 6272, 6273, 6275, 6278, 6282, 6283, 6285, 6288, 6291, 6292, 6294, 6296, 6307, 6308, 6312, 6317, 6319, 6322, 6323, 6326, 6334, 6335, 6340, 6341, 6343, 6344, 6347, 6351, 6357, 6360, 6362, 6363, 6364, 6368, 6376, 6378, 6379, 6395, 6397, 6398, 6399, 6400, 6401, 6402, 6406, 6411, 6415, 6418, 6419, 6420, 6422, 6424, 6429, 6430, 6434, 6435, 6437, 6438, 6440, 6444, 6446, 6448, 6456, 6459, 6464, 6465, 6471, 6476, 6478, 6479, 6480, 6482, 6485, 6492, 6500, 6506, 6508, 6509, 6513, 6514, 6524, 6525, 6528, 6534, 6535, 6538, 6539, 6542, 6543, 6546, 6547, 6550, 6551, 6552, 6561, 6570, 6571, 6572, 6576, 6577, 6588, 6589, 6593, 6594, 6597, 6598, 6602, 6610, 6611, 6614, 6615, 6617, 6620, 6624, 6628, 6631, 6642, 6643, 6644, 6645, 6649, 6655, 6662, 6665, 6672, 6673, 6674, 6676, 6677, 6681, 6682, 6686, 6687, 6689, 6691, 6692, 6693, 6694, 6704, 6709, 6712, 6715, 6728, 6729, 6735, 6741, 6742, 6743, 6745, 6749, 6753, 6754, 6757, 6759, 6761, 6763, 6765, 6767, 6768, 6776, 6779, 6785, 6790, 6791, 6794, 6796, 6799, 6802, 6803, 6809, 6813, 6814, 6816, 6817, 6821, 6825, 6826, 6828, 6829, 6830, 6831, 6832, 6833, 6834, 6837, 6838, 6839, 6849, 6852, 6853, 6862, 6868, 6874, 6885, 6888, 6890, 6895, 6902, 6903, 6904, 6907, 6908, 6911, 6915, 6916, 6917, 6921, 6924, 6927, 6932, 6948, 6952, 6955, 6959, 6961, 6963, 6965, 6968, 6970, 6971, 6973, 6976, 6979, 6984, 6990, 6991, 6992, 6994, 7000, 7019, 7023, 7024, 7027, 7028, 7031, 7033, 7035, 7037, 7038, 7039, 7040, 7047, 7049, 7052, 7056, 7062, 7063, 7065, 7068, 7069, 7071, 7075, 7078, 7081, 7086, 7087, 7089, 7090, 7092, 7093, 7095, 7097, 7100, 7103, 7105, 7106, 7108, 7110, 7114, 7117, 7120, 7121, 7123, 7125, 7127, 7131, 7132, 7134, 7138, 7140, 7144, 7146, 7147, 7149, 7150, 7153, 7154, 7155, 7160, 7162, 7168, 7170, 7172, 7175, 7178, 7180, 7183, 7187, 7189, 7191, 7193, 7194, 7202, 7205, 7208, 7210, 7211, 7212, 7214, 7218, 7221, 7224, 7230, 7231, 7233, 7235, 7238, 7240, 7242, 7244, 7245, 7248, 7249, 7250, 7251, 7254, 7255, 7256, 7261, 7267, 7268, 7269, 7270, 7277, 7279, 7282, 7289, 7290, 7292, 7297, 7300, 7304, 7306, 7308, 7313, 7314, 7320, 7322, 7326, 7331, 7333, 7334, 7336, 7339, 7340, 7341, 7346, 7350, 7351, 7355, 7359, 7364, 7366, 7367, 7368, 7369, 7370, 7371, 7374, 7375, 7376, 7377, 7385, 7386, 7395, 7396, 7399, 7400, 7401, 7403, 7406, 7408, 7409, 7410, 7417, 7421, 7422, 7424, 7431, 7432, 7438, 7439, 7440, 7443, 7446, 7447, 7450, 7451, 7456, 7457, 7459, 7462, 7463, 7465, 7471, 7472, 7474, 7475, 7479, 7482, 7483, 7488, 7490, 7493, 7494, 7495, 7496, 7498, 7499, 7500, 7502, 7504, 7511, 7512, 7516, 7517, 7519, 7521, 7522, 7524, 7525, 7528, 7529, 7530, 7531, 7532, 7533, 7534, 7543, 7547, 7548, 7549, 7551, 7553, 7554, 7556, 7557, 7558, 7560, 7566, 7567, 7570, 7572, 7576, 7581, 7582, 7587, 7589, 7591, 7593, 7594, 7608, 7609, 7610, 7613, 7617, 7620, 7621, 7622, 7625, 7628, 7629, 7631, 7634, 7636, 7648, 7649, 7650, 7652, 7658, 7659, 7660, 7662, 7665, 7666, 7667, 7670, 7671, 7673, 7674, 7676, 7677, 7679, 7686, 7687, 7689, 7690, 7694, 7697, 7701, 7704, 7705, 7707, 7709, 7712, 7713, 7714, 7715, 7718, 7719, 7722, 7723, 7725, 7726, 7727, 7730, 7731, 7732, 7733, 7734, 7738, 7739, 7741, 7742, 7743, 7744, 7745, 7747, 7749, 7751, 7752, 7756, 7760, 7761, 7765, 7766, 7767, 7771, 7773, 7774, 7775, 7776, 7778, 7781, 7782, 7784, 7786, 7787, 7788, 7789, 7791, 7792, 7794, 7800, 7804, 7805, 7807, 7808, 7809, 7810, 7812, 7814, 7818, 7820, 7828, 7829, 7831, 7832, 7833, 7836, 7838, 7842, 7843, 7845, 7846, 7847, 7848, 7849, 7850, 7851, 7855, 7863, 7864, 7867, 7870, 7871, 7872, 7873, 7875, 7879, 7880, 7883, 7884, 7891, 7896, 7897, 7898, 7899, 7902, 7905, 7907, 7908, 7909, 7910, 7912, 7916, 7917, 7919, 7924, 7925, 7926, 7927, 7934, 7935, 7939, 7941, 7943, 7945, 7947, 7952, 7953, 7957, 7958, 7960, 7962, 7963, 7966, 7968, 7970, 7972, 7977, 7982, 7984, 7988, 7989, 7991, 7998, 8001, 8003, 8009, 8012, 8014, 8015, 8018, 8024, 8029, 8031, 8039, 8040, 8042, 8044, 8045, 8046, 8047, 8049, 8050, 8051, 8052, 8055, 8058, 8059, 8060, 8061, 8066, 8069, 8071, 8072, 8073, 8074, 8080, 8088, 8092, 8093, 8094, 8096, 8098, 8102, 8103, 8104, 8106, 8107, 8110, 8112, 8113, 8114, 8115, 8116, 8123, 8124, 8126, 8129, 8132, 8139, 8141, 8147, 8149, 8150, 8152, 8154, 8156, 8162, 8166, 8168, 8170, 8171, 8174, 8175, 8176, 8179, 8181, 8182, 8184, 8186, 8187, 8189, 8191, 8192, 8194, 8196, 8202, 8203, 8205, 8208, 8210, 8211, 8212, 8214, 8217, 8218, 8225, 8227, 8228, 8229, 8232, 8233, 8239, 8246, 8247, 8248, 8252, 8253, 8254, 8258, 8260, 8261, 8262, 8263, 8267, 8268, 8271, 8272, 8277, 8279, 8283, 8285, 8286, 8288, 8291, 8294, 8296, 8299, 8300, 8301, 8306, 8309, 8311, 8312, 8313, 8314, 8315, 8317, 8319, 8320, 8322, 8327, 8328, 8330, 8335, 8338, 8339, 8347, 8351, 8353, 8355, 8356, 8358, 8359, 8365, 8366, 8367, 8374, 8375, 8376, 8377, 8378, 8382, 8383, 8386, 8387, 8388, 8390, 8391, 8393, 8394, 8397, 8398, 8399, 8400, 8401, 8405, 8408, 8413, 8414, 8416, 8422, 8423, 8424, 8425, 8426, 8427, 8428, 8434, 8436, 8439, 8441, 8444, 8448, 8450, 8452, 8453, 8459, 8460, 8477, 8484, 8485, 8492, 8493, 8500, 8505, 8509, 8510, 8511, 8512, 8514, 8525, 8526, 8529, 8530, 8532, 8534, 8536, 8537, 8545, 8547, 8551, 8552, 8554, 8555, 8558, 8561, 8562, 8563, 8566, 8569, 8571, 8572, 8574, 8579, 8580, 8582, 8584, 8592, 8593, 8601, 8602, 8603, 8604, 8605, 8608, 8609, 8611, 8612, 8613, 8614, 8615, 8617, 8618, 8620, 8621, 8623, 8625, 8626, 8627, 8628, 8629, 8630, 8631, 8633, 8634, 8635, 8636, 8646, 8647, 8650, 8655, 8656, 8660, 8662, 8663, 8666, 8668, 8671, 8672, 8676, 8679, 8680, 8681, 8682, 8684, 8686, 8691, 8694, 8695, 8697, 8698, 8699, 8700, 8701, 8702, 8703, 8704, 8705, 8711, 8714, 8716, 8717, 8719, 8721, 8722, 8727, 8728, 8730, 8732, 8733, 8734, 8735, 8736, 8741, 8742, 8743, 8747, 8751, 8752, 8755, 8756, 8758, 8765, 8766, 8770, 8771, 8772, 8774, 8775, 8779, 8780, 8782, 8787, 8789, 8790, 8795, 8796, 8799, 8805, 8806, 8807, 8808, 8809, 8812, 8814, 8815, 8820, 8823, 8828, 8833, 8837, 8838, 8839, 8842, 8848, 8852, 8856, 8857, 8858, 8859, 8860, 8861, 8862, 8863, 8866, 8869, 8870, 8871, 8872, 8883, 8891, 8892, 8893, 8894, 8895, 8898, 8905, 8907, 8911, 8916, 8917, 8918, 8920, 8922, 8925, 8926, 8929, 8930, 8933, 8935, 8938, 8939, 8940, 8941, 8944, 8945, 8947, 8948, 8950, 8957, 8960, 8961, 8968, 8975, 8980, 8986, 8988, 8990, 8991, 8995, 9002, 9003, 9004, 9006, 9007, 9013, 9015, 9019, 9021, 9025, 9029, 9032, 9033, 9035, 9036, 9037, 9038, 9041, 9044, 9045, 9047, 9050, 9056, 9060, 9068, 9074, 9075, 9084, 9086, 9093, 9094, 9095, 9097, 9098, 9099, 9100, 9101, 9103, 9105, 9106, 9113, 9115, 9116, 9121, 9124, 9126, 9127, 9130, 9133, 9135, 9139, 9142, 9146, 9149, 9151, 9153, 9154, 9160, 9162, 9168, 9173, 9174, 9180, 9181, 9182, 9185, 9186, 9188, 9189, 9194, 9196, 9199, 9202, 9203, 9204, 9206, 9208, 9211, 9215, 9216, 9224, 9229, 9234, 9235, 9237, 9238, 9242, 9244, 9246, 9248, 9251, 9252, 9253, 9256, 9257, 9258, 9260, 9261, 9262, 9264, 9270, 9272, 9273, 9274, 9281, 9283, 9284, 9286, 9287, 9289, 9290, 9293, 9296, 9297, 9299, 9301, 9302, 9303, 9304, 9305, 9311, 9323, 9325, 9327, 9331, 9332, 9337, 9338, 9339, 9344, 9346, 9350, 9351, 9353, 9360, 9361, 9362, 9363, 9366, 9369, 9371, 9372, 9374, 9382, 9383, 9384, 9390, 9392, 9396, 9401, 9402, 9405, 9408, 9409, 9414, 9416, 9419, 9424, 9427, 9428, 9429, 9430, 9442, 9443, 9446, 9447, 9450, 9452, 9453, 9454, 9459, 9460, 9461, 9463, 9464, 9465, 9466, 9468, 9470, 9472, 9474, 9477, 9479, 9483, 9492, 9496, 9498, 9501, 9507, 9509, 9510, 9511, 9512, 9518, 9521, 9523, 9529, 9531, 9534, 9535, 9537, 9541, 9545, 9546, 9547, 9548, 9549, 9550, 9551, 9553, 9556, 9558, 9559, 9560, 9561, 9565, 9566, 9567, 9569, 9573, 9575, 9576, 9577, 9578, 9580, 9581, 9587, 9588, 9589, 9590, 9593, 9594, 9597, 9598, 9600, 9601, 9604, 9607, 9609, 9613, 9615, 9617, 9618, 9620, 9623, 9625, 9626, 9627, 9632, 9634, 9635, 9638, 9641, 9642, 9648, 9650, 9653, 9659, 9662, 9663, 9665, 9668, 9672, 9673, 9676, 9677, 9678, 9681, 9683, 9684, 9691, 9694, 9695, 9698, 9703, 9704, 9705, 9706, 9709, 9718, 9719, 9721, 9724, 9727, 9731, 9732, 9733, 9736, 9738, 9740, 9741, 9743, 9745, 9746, 9747, 9748, 9751, 9753, 9757, 9759, 9761, 9763, 9766, 9767, 9769, 9771, 9774, 9778, 9785, 9788, 9790, 9793, 9794, 9797, 9801, 9804, 9805, 9809, 9812, 9815, 9826, 9827, 9828, 9830, 9833, 9836, 9837, 9838, 9841, 9842, 9844, 9846, 9854, 9855, 9856, 9857, 9858, 9861, 9863, 9864, 9869, 9870, 9875, 9883, 9885, 9889, 9890, 9891, 9892, 9894, 9896, 9898, 9899, 9907, 9909, 9910, 9912, 9913, 9914, 9917, 9921, 9926, 9928, 9929, 9930, 9936, 9938, 9944, 9950, 9958, 9959, 9964, 9965, 9966, 9968, 9969, 9971, 9972, 9975, 9976, 9983, 9984, 9986, 9987, 9990, 9991, 9999, 10004, 10007, 10009, 10011, 10013, 10020, 10023, 10033, 10035, 10041, 10045, 10046, 10047, 10048, 10049, 10050, 10054, 10058, 10059, 10060, 10064, 10065, 10068, 10071, 10075, 10081, 10082, 10085, 10087, 10088, 10090, 10091, 10092, 10097, 10102, 10108, 10111, 10114, 10117, 10118, 10124, 10126, 10127, 10129, 10130, 10133, 10134, 10135, 10136, 10139, 10140, 10142, 10144, 10146, 10149, 10164, 10167, 10169, 10172, 10174, 10176, 10177, 10178, 10179, 10182, 10183, 10184, 10185, 10186, 10188, 10191, 10203, 10213, 10215, 10217, 10223, 10224, 10225, 10226, 10229, 10230, 10234, 10235, 10236, 10238, 10239, 10241, 10245, 10251, 10254, 10256, 10258, 10261, 10265, 10266, 10268, 10269, 10270, 10271, 10272, 10273, 10279, 10282, 10284, 10285, 10289, 10292, 10293, 10294, 10299, 10300, 10306, 10307, 10308, 10311, 10314, 10316, 10317, 10322, 10327, 10330, 10333, 10335, 10336, 10343, 10350, 10352, 10354, 10358, 10360, 10366, 10369, 10372, 10379, 10382, 10383, 10385, 10387, 10393, 10398, 10400, 10401, 10410, 10411, 10417, 10419, 10424, 10426, 10431, 10437, 10438, 10439, 10443, 10444, 10445, 10455, 10456, 10464, 10465, 10470, 10472, 10473, 10475, 10480, 10483, 10484, 10486, 10491, 10492, 10496, 10499, 10502, 10505, 10510, 10511, 10512, 10515, 10517, 10521, 10522, 10529, 10530, 10538, 10540, 10545, 10547, 10550, 10551, 10552, 10553, 10555, 10556, 10559, 10560, 10564, 10565, 10573, 10574, 10575, 10576, 10584, 10589, 10590, 10591, 10592, 10595, 10597, 10599, 10600, 10601, 10607, 10609, 10612, 10614, 10615, 10616, 10623, 10627, 10630, 10631, 10632, 10635, 10637, 10639, 10640, 10644, 10648, 10649, 10650, 10654, 10663, 10664, 10665, 10667, 10672, 10679, 10680, 10681, 10684, 10686, 10688, 10689, 10690, 10695, 10696, 10698, 10699, 10710, 10715, 10717, 10720, 10726, 10739, 10740, 10741, 10744, 10746, 10748, 10750, 10752, 10763, 10767, 10768, 10772, 10774, 10777, 10781, 10784, 10785, 10786, 10789, 10793, 10797, 10801, 10805, 10807, 10810, 10811, 10812, 10814, 10815, 10817, 10818, 10820, 10821, 10823, 10827, 10828, 10831, 10832, 10834, 10844, 10848, 10849, 10853, 10854, 10855, 10859, 10860, 10861, 10862, 10868, 10872, 10876, 10878, 10880, 10889, 10891, 10892, 10895, 10896, 10899, 10902, 10906, 10908, 10915, 10917, 10927, 10929, 10932, 10935, 10936, 10937, 10938, 10939, 10940, 10941, 10944, 10945, 10946, 10949, 10950, 10959, 10960, 10961, 10962, 10965, 10967, 10968, 10974, 10975, 10976, 10977, 10979, 10986, 10988, 10991, 10994, 10995, 10996, 11000, 11004, 11010, 11011, 11012, 11013, 11015, 11016, 11017, 11020, 11021, 11022, 11023, 11026, 11027, 11036, 11039, 11042, 11044, 11045, 11046, 11048, 11053, 11055, 11056, 11059, 11062, 11073, 11076, 11078, 11080, 11081, 11084, 11086, 11088, 11089, 11090, 11091, 11092, 11099, 11107, 11108, 11109, 11112, 11115, 11117, 11125, 11129, 11134, 11135, 11143, 11147, 11148, 11149, 11154, 11157, 11163, 11169, 11172, 11174, 11178, 11181, 11182, 11186, 11189, 11192, 11196, 11197, 11198, 11203, 11204, 11206, 11207, 11210, 11212, 11213, 11215, 11218, 11219, 11222, 11223, 11232, 11233, 11238, 11250, 11255, 11262, 11264, 11265, 11266, 11267, 11269, 11270, 11274, 11275, 11281, 11282, 11283, 11289, 11291, 11292, 11294, 11296, 11298, 11305, 11306, 11308, 11309, 11310, 11315, 11316, 11320, 11323, 11324, 11327, 11328, 11330, 11332, 11335, 11336, 11337, 11338, 11339, 11341, 11342, 11344, 11347, 11349, 11354, 11356, 11357, 11359, 11362, 11366, 11367, 11368, 11369, 11370, 11372, 11373, 11377, 11382, 11386, 11387, 11392, 11396, 11397, 11399, 11404, 11407, 11409, 11410, 11411, 11412, 11414, 11419, 11421, 11422, 11423, 11424, 11425, 11426, 11429, 11431, 11433, 11435, 11439, 11440, 11443, 11445, 11446, 11447, 11448, 11450, 11453, 11454, 11456, 11459, 11460, 11461, 11462, 11464, 11466, 11469, 11472, 11475, 11476, 11477, 11479, 11481, 11487, 11489, 11490, 11491, 11494, 11496, 11498, 11501, 11502, 11505, 11508, 11511, 11512, 11513, 11515, 11516, 11517, 11519, 11525, 11526, 11527, 11531, 11532, 11535, 11536, 11539, 11542, 11543, 11544, 11545, 11549, 11553, 11554, 11558, 11560, 11565, 11570, 11571, 11573, 11578, 11581, 11583, 11588, 11590, 11591, 11592, 11597, 11598, 11600, 11603, 11605, 11607, 11609, 11610, 11612, 11619, 11620, 11621, 11622, 11623, 11624, 11625, 11630, 11631, 11632, 11634, 11636, 11637, 11638, 11639, 11642, 11646, 11650, 11652, 11657, 11659, 11660, 11661, 11666, 11667, 11668, 11669, 11671, 11672, 11673, 11674, 11676, 11677, 11680, 11685, 11692, 11693, 11694, 11696, 11701, 11703, 11704, 11708, 11709, 11713, 11714, 11715, 11716, 11717, 11718, 11719, 11720, 11724, 11725, 11727, 11728, 11730, 11733, 11734, 11739, 11740, 11741, 11742, 11744, 11746, 11750, 11751, 11754, 11756, 11757, 11759, 11763, 11764, 11767, 11770, 11771, 11772, 11773, 11774, 11775, 11776, 11777, 11779, 11780, 11781, 11782, 11784, 11786, 11787, 11788, 11789, 11792, 11793, 11794, 11795, 11796, 11797, 11798, 11799, 11800, 11801, 11802, 11803, 11804, 11805, 11807, 11808, 11810, 11812, 11813, 11816, 11817, 11818, 11819, 11820, 11821, 11822, 11827, 11828, 11832, 11834, 11839, 11844, 11845, 11847, 11850, 11852, 11855, 11856, 11857, 11859, 11861, 11864, 11867, 11869, 11874, 11875, 11876, 11879, 11880, 11881, 11883, 11884, 11885, 11889, 11892, 11893, 11896, 11897, 11903, 11904, 11907, 11912, 11914, 11922, 11925, 11927, 11928, 11929, 11930, 11931, 11933, 11934, 11935, 11936, 11939, 11946, 11948, 11950, 11952, 11953, 11954, 11956, 11958, 11960, 11961, 11963, 11967, 11976, 11977, 11979, 11980, 11981, 11982, 11983, 11985, 11988, 11991, 11992, 11993, 12001, 12002, 12003, 12007, 12014, 12016, 12018, 12019, 12021, 12022, 12027, 12031, 12032, 12034, 12035, 12038, 12042, 12043, 12045, 12047, 12050, 12054, 12057, 12058, 12060, 12067, 12071, 12072, 12073, 12074, 12075, 12077, 12079, 12080, 12083, 12084, 12087, 12088, 12089, 12091, 12094, 12095, 12097, 12098, 12099, 12100, 12102, 12103, 12104, 12106, 12109, 12110, 12114, 12115, 12123, 12128, 12131, 12135, 12137, 12150, 12155, 12156, 12157, 12158, 12159, 12161, 12162, 12164, 12167, 12169, 12171, 12177, 12179, 12180, 12182, 12184, 12185, 12187, 12189, 12191, 12193, 12195, 12196, 12198, 12199, 12200, 12201, 12202, 12203, 12205, 12209, 12211, 12214, 12215, 12217, 12223, 12225, 12226, 12227, 12228, 12230, 12234, 12239, 12240, 12242, 12249, 12250, 12252, 12255, 12259, 12261, 12262, 12263, 12264, 12265, 12266, 12268, 12278, 12281, 12285, 12287, 12289, 12290, 12291, 12292, 12295, 12303, 12306, 12307, 12309, 12310, 12319, 12325, 12331, 12333, 12334, 12338, 12341, 12342, 12343, 12346, 12347, 12348, 12350, 12352, 12353, 12356, 12357, 12358, 12363, 12364, 12365, 12367, 12369, 12374, 12377, 12379, 12381, 12384, 12386, 12387, 12399, 12401, 12402, 12405, 12407, 12410, 12411, 12414, 12417, 12418, 12423, 12425, 12426, 12427, 12434, 12438, 12439, 12442, 12443, 12445, 12447, 12449, 12450, 12454, 12456, 12457, 12458, 12459, 12463, 12465, 12468, 12475, 12482, 12483, 12485, 12486, 12487, 12492, 12493, 12494, 12498, 12499, 12501, 12503, 12508, 12510, 12512, 12513, 12521, 12524, 12525, 12527, 12528, 12529, 12530, 12532, 12534, 12536, 12537, 12539, 12542, 12545, 12552, 12554, 12559, 12564, 12565, 12566, 12570, 12577, 12578, 12579, 12580, 12581, 12585, 12595, 12600, 12602, 12605, 12607, 12608, 12610, 12612, 12613, 12614, 12616, 12620, 12625, 12627, 12630, 12640, 12643, 12644, 12645, 12646, 12650, 12652, 12653, 12656, 12657, 12658, 12660, 12666, 12667, 12668, 12670, 12672, 12673, 12675, 12679, 12680, 12681, 12684, 12685, 12686, 12687, 12688, 12697, 12702, 12705, 12707, 12708, 12710, 12714, 12715, 12719, 12722, 12723, 12728, 12735, 12737, 12738, 12739, 12742, 12743, 12744, 12746, 12747, 12749, 12751, 12758, 12760, 12762, 12764, 12765, 12768, 12770, 12776, 12777, 12778, 12779, 12780, 12783, 12784, 12786, 12788, 12790, 12791, 12792, 12798, 12801, 12802, 12803, 12805, 12807, 12809, 12811, 12815, 12818, 12820, 12823, 12825, 12826, 12828, 12837, 12838, 12839, 12841, 12844, 12850, 12851, 12853, 12854, 12855, 12856, 12859, 12864, 12865, 12868, 12871, 12872, 12873, 12878, 12883, 12885, 12887, 12888, 12889, 12890, 12891, 12897, 12898, 12904, 12908, 12910, 12913, 12915, 12917, 12918, 12919, 12921, 12922, 12924, 12927, 12932, 12933, 12934, 12936, 12947, 12951, 12952, 12955, 12956, 12957, 12961, 12964, 12967, 12968, 12972, 12974, 12976, 12977, 12978, 12982, 12983, 12986, 12988, 12989, 12990, 12994, 12999, 13001, 13002, 13003, 13004, 13005, 13006, 13007, 13008, 13014, 13015, 13016, 13019, 13020, 13021, 13022, 13024, 13025, 13026, 13027, 13028, 13029, 13031, 13033, 13035, 13037, 13042, 13047, 13050, 13053, 13055, 13057, 13058, 13065, 13066, 13068, 13069, 13070, 13074, 13078, 13084, 13086, 13087, 13090, 13091, 13095, 13096, 13100, 13102, 13107, 13110, 13111, 13112, 13114, 13115, 13117, 13118, 13119, 13120, 13121, 13129, 13131, 13134, 13136, 13138, 13140, 13141, 13143, 13144, 13148, 13151, 13153, 13154, 13155, 13157, 13163, 13166, 13167, 13169, 13170, 13171, 13175, 13178, 13179, 13181, 13182, 13183, 13185, 13186, 13187, 13189, 13191, 13195, 13198, 13199, 13201, 13203, 13204, 13205, 13206, 13210, 13211, 13213, 13216, 13220, 13225, 13229, 13230, 13231, 13233, 13236, 13243, 13244, 13247, 13248, 13249, 13252, 13255, 13256, 13258, 13260, 13265, 13266, 13268, 13269, 13280, 13281, 13283, 13284, 13287, 13288, 13289, 13291, 13302, 13304, 13305, 13308, 13309, 13310, 13311, 13312, 13315, 13320, 13324, 13325, 13326, 13327, 13330, 13331, 13339, 13343, 13346, 13350, 13351, 13352, 13356, 13357, 13360, 13361, 13362, 13363, 13364, 13365, 13367, 13373, 13374, 13377, 13380, 13381, 13382, 13383, 13387, 13388, 13390, 13391, 13395, 13402, 13403, 13408, 13409, 13412, 13417, 13422, 13423, 13424, 13425, 13426, 13430, 13431, 13432, 13434, 13438, 13441, 13442, 13444, 13445, 13446, 13448, 13449, 13456, 13457, 13459, 13462, 13463, 13464, 13465, 13470, 13473, 13477, 13481, 13485, 13488, 13495, 13499, 13500, 13502, 13503, 13505, 13506, 13513, 13516, 13517, 13519, 13521, 13525, 13526, 13531, 13542, 13544, 13550, 13553, 13554, 13555, 13563, 13565, 13568, 13575, 13580, 13582, 13585, 13589, 13592, 13594, 13595, 13601, 13603, 13604, 13607, 13608, 13610, 13611, 13612, 13614, 13617, 13620, 13625, 13627, 13631, 13632, 13634, 13638, 13639, 13641, 13642, 13643, 13644, 13645, 13648, 13649, 13650, 13651, 13653, 13655, 13657, 13662, 13664, 13665, 13670, 13672, 13678, 13680, 13681, 13686, 13687, 13689, 13691, 13692, 13694, 13696, 13703, 13705, 13709, 13710, 13714, 13716, 13718, 13721, 13722, 13723, 13724, 13725, 13726, 13733, 13734, 13735, 13736, 13737, 13741, 13745, 13748, 13762, 13764, 13766, 13768, 13771, 13772, 13773, 13777, 13779, 13782, 13785, 13787, 13788, 13789, 13790, 13791, 13792, 13794, 13795, 13796, 13799, 13800, 13802, 13803, 13806, 13811, 13819, 13820, 13822, 13824, 13826, 13827, 13832, 13839, 13841, 13843, 13844, 13845, 13851, 13852, 13853, 13854, 13855, 13856, 13857, 13859, 13860, 13861, 13868, 13869, 13880, 13883, 13885, 13886, 13888, 13889, 13893, 13895, 13896, 13899, 13903, 13907, 13910, 13915, 13919, 13920, 13921, 13922, 13924, 13926, 13927, 13928, 13930, 13932, 13934, 13937, 13938, 13940, 13941, 13945, 13950, 13959, 13962, 13965, 13967, 13971, 13975, 13978, 13979, 13982, 13983, 13984, 13988, 13989, 13991, 13993, 13996, 13997, 14002, 14003, 14007, 14016, 14018, 14019, 14021, 14023, 14024, 14025, 14028, 14032, 14036, 14037, 14042, 14055, 14059, 14067, 14068, 14069, 14071, 14074, 14075, 14076, 14082, 14083, 14085, 14086, 14088, 14089, 14092, 14093, 14094, 14096, 14097, 14098, 14099, 14101, 14102, 14106, 14107, 14108, 14112, 14113, 14118, 14120, 14121, 14122, 14123, 14124, 14125, 14127, 14128, 14129, 14130, 14131, 14133, 14134, 14136, 14138, 14143, 14144, 14147, 14150, 14153, 14158, 14160, 14162, 14164, 14165, 14167, 14169, 14174, 14175, 14185, 14186, 14187, 14188, 14189, 14190, 14191, 14193, 14196, 14197, 14198, 14202, 14204, 14205, 14208, 14211, 14212, 14213, 14214, 14219, 14222, 14223, 14224, 14225, 14230, 14232, 14236, 14241, 14243, 14248, 14250, 14253, 14254, 14256, 14257, 14258, 14269, 14270, 14271, 14274, 14277, 14279, 14284, 14285, 14288, 14289, 14291, 14294, 14296, 14299, 14301, 14303, 14305, 14306, 14307, 14308, 14310, 14311, 14316, 14317, 14318, 14319, 14323, 14324, 14325, 14326, 14327, 14330, 14331, 14333, 14335, 14336, 14340, 14341, 14344, 14345, 14346, 14348, 14350, 14351, 14355, 14364, 14365, 14367, 14371, 14375, 14380, 14383, 14384, 14386, 14387, 14389, 14391, 14394, 14396, 14399, 14406, 14416, 14418, 14419, 14422, 14424, 14425, 14426, 14429, 14430, 14434, 14437, 14441, 14443, 14445, 14447, 14452, 14459, 14460, 14466, 14473, 14474, 14476, 14482, 14483, 14485, 14488, 14490, 14491, 14494, 14496, 14499, 14502, 14504, 14507, 14509, 14514, 14517, 14519, 14520, 14521, 14523, 14524, 14526, 14530, 14531, 14534, 14535, 14536, 14537, 14541, 14546, 14547, 14549, 14551, 14553, 14557, 14558, 14561, 14565, 14568, 14570, 14573, 14574, 14578, 14581, 14582, 14583, 14585, 14587, 14590, 14591, 14593, 14594, 14598, 14603, 14609, 14610, 14612, 14616, 14624, 14635, 14640, 14653, 14654, 14656, 14659, 14662, 14665, 14667, 14668, 14671, 14675, 14676, 14677, 14679, 14681, 14682, 14687, 14688, 14691, 14692, 14693, 14697, 14698, 14701, 14712, 14716, 14719, 14720, 14721, 14722, 14725, 14726, 14728, 14730, 14735, 14737, 14738, 14739, 14741, 14742, 14743, 14745, 14749, 14750, 14752, 14753, 14761, 14764, 14766, 14771, 14773, 14779, 14781, 14786, 14787, 14788, 14789, 14791, 14792, 14797, 14798, 14800, 14801, 14802, 14803, 14804, 14809, 14813, 14814, 14815, 14816, 14817, 14822, 14829, 14837, 14838, 14839, 14841, 14843, 14844, 14849, 14851, 14854, 14855, 14856, 14859, 14861, 14862, 14863, 14865, 14866, 14867, 14868, 14874, 14880, 14884, 14885, 14889, 14892, 14894, 14896, 14898, 14903, 14906, 14907, 14912, 14914, 14915, 14917, 14921, 14923, 14924, 14925, 14929, 14930, 14936, 14937, 14938, 14941, 14943, 14949, 14951, 14953, 14955, 14957, 14959, 14963, 14964, 14966, 14967, 14968, 14969, 14971, 14972, 14973, 14974, 14976, 14977, 14980, 14981, 14983, 14984, 14985, 14986, 14991, 14993, 14996, 14997, 14998, 15000, 15008, 15009, 15010, 15012, 15013, 15015, 15016, 15017, 15019, 15020, 15021, 15023, 15024, 15025, 15027, 15028, 15030, 15032, 15033, 15035, 15039, 15040, 15041, 15044, 15053, 15054, 15055, 15058, 15060, 15065, 15067, 15068, 15069, 15073, 15074, 15075, 15076, 15077, 15078, 15083, 15093, 15097, 15101, 15107, 15108, 15110, 15114, 15116, 15117, 15119, 15123, 15124, 15126, 15127, 15129, 15131, 15134, 15136, 15138, 15139, 15144, 15146, 15147, 15154, 15155, 15157, 15162, 15168, 15170, 15172, 15174, 15178, 15179, 15181, 15183, 15184, 15185, 15186, 15188, 15189, 15190, 15191, 15194, 15195, 15201, 15205, 15207, 15209, 15211, 15213, 15214, 15215, 15216, 15220, 15224, 15226, 15227, 15232, 15234, 15236, 15240, 15241, 15246, 15249, 15251, 15256, 15257, 15260, 15262, 15266, 15267, 15272, 15273, 15281, 15285, 15291, 15295, 15298, 15302, 15307, 15312, 15314, 15317, 15319, 15321, 15322, 15326, 15329, 15330, 15333, 15334, 15336, 15337, 15338, 15342, 15343, 15344, 15351, 15352, 15353, 15357, 15359, 15361, 15363, 15365, 15368, 15369, 15373, 15379, 15381, 15382, 15383, 15384, 15386, 15391, 15394, 15396, 15399, 15411, 15414, 15415, 15416, 15418, 15421, 15423, 15428, 15429, 15435, 15437, 15440, 15442, 15443, 15445, 15446, 15449, 15457, 15458, 15460, 15461, 15467, 15468, 15470, 15476, 15479, 15483, 15487, 15490, 15491, 15494, 15501, 15502, 15503, 15504, 15506, 15509, 15511, 15513, 15514, 15516, 15517, 15518, 15519, 15524, 15525, 15527, 15530, 15532, 15533, 15534, 15536, 15537, 15538, 15541, 15542, 15543, 15547, 15550, 15553, 15555, 15556, 15557, 15558, 15562, 15566, 15567, 15568, 15571, 15573, 15575, 15578, 15582, 15583, 15586, 15588, 15591, 15593, 15594, 15597, 15598, 15599, 15601, 15604, 15606, 15607, 15608, 15610, 15616, 15618, 15619, 15620, 15621, 15622, 15626, 15628, 15631, 15632, 15634, 15639, 15641, 15644, 15645, 15646, 15647, 15648, 15649, 15650, 15652, 15656, 15659, 15661, 15665, 15666, 15669, 15670, 15675, 15676, 15677, 15678, 15681, 15682, 15690, 15692, 15693, 15697, 15702, 15703, 15704, 15705, 15713, 15719, 15720, 15723, 15728, 15741, 15742, 15743, 15744, 15746, 15748, 15749, 15751, 15752, 15753, 15755, 15756, 15757, 15759, 15760, 15762, 15763, 15765, 15766, 15767, 15769, 15778, 15797, 15798, 15799, 15802, 15803, 15804, 15810, 15813, 15815, 15818, 15819, 15824, 15825, 15826, 15836, 15837, 15838, 15841, 15844, 15845, 15847, 15853, 15855, 15865, 15870, 15876, 15878, 15890, 15895, 15897, 15899, 15900, 15903, 15904, 15906, 15912, 15913, 15914, 15915, 15917, 15919, 15923, 15925, 15927, 15928, 15931, 15937, 15938, 15942, 15950, 15953, 15954, 15956, 15962, 15963, 15965, 15967, 15972, 15973, 15974, 15979, 15983, 15988, 15989, 15993, 15999, 16000, 16006, 16008, 16014, 16015, 16021, 16023, 16028, 16029, 16032, 16039, 16040, 16049, 16051, 16055, 16056, 16061, 16064, 16065, 16067, 16068, 16075, 16076, 16077, 16083, 16085, 16086, 16089, 16091, 16092, 16095, 16098, 16100, 16102, 16104, 16105, 16118, 16120, 16123, 16129, 16133, 16137, 16141, 16147, 16149, 16150, 16154, 16155, 16157, 16159, 16167, 16170, 16171, 16177, 16180, 16181, 16184, 16186, 16192, 16193, 16196, 16199, 16203, 16207, 16208, 16209, 16213, 16215, 16220, 16221, 16222, 16223, 16226, 16228, 16230, 16231, 16232, 16238, 16239, 16241, 16242, 16245, 16246, 16249, 16253, 16257, 16259, 16261, 16263, 16266, 16267, 16273, 16275, 16277, 16278, 16280, 16281, 16285, 16286, 16295, 16297, 16299, 16302, 16304, 16306, 16307, 16309, 16313, 16315, 16317, 16322, 16323, 16324, 16326, 16327, 16329, 16330, 16331, 16332, 16336, 16337, 16339, 16348, 16350, 16351, 16352, 16353, 16356, 16357, 16361, 16363, 16365, 16368, 16369, 16370, 16374, 16376, 16378, 16385, 16387, 16391, 16392, 16398, 16402, 16406, 16407, 16413, 16416, 16423, 16424, 16427, 16429, 16434, 16437, 16442, 16443, 16444, 16451, 16453, 16456, 16461, 16463, 16470, 16477, 16481, 16483, 16484, 16485, 16487, 16488, 16491, 16493, 16496, 16498, 16499, 16500, 16501, 16503, 16505, 16506, 16512, 16514, 16517, 16522, 16523, 16524, 16526, 16532, 16533, 16536, 16540, 16549, 16551, 16553, 16556, 16559, 16563, 16565, 16566, 16568, 16570, 16571, 16572, 16574, 16577, 16580, 16582, 16598, 16600, 16601, 16611, 16614, 16617, 16619, 16620, 16621, 16624, 16626, 16629, 16638, 16640, 16642, 16648, 16650, 16651, 16652, 16655, 16658, 16669, 16673, 16676, 16677, 16678, 16682, 16684, 16688, 16694, 16695, 16699, 16709, 16710, 16712, 16713, 16714, 16715, 16720, 16723, 16724, 16725, 16726, 16729, 16732, 16733, 16738, 16739, 16748, 16749, 16750, 16752, 16753, 16754, 16755, 16758, 16760, 16761, 16765, 16767, 16768, 16769, 16771, 16773, 16774, 16775, 16776, 16777, 16784, 16785, 16786, 16791, 16793, 16794, 16799, 16803, 16808, 16812, 16815, 16828, 16831, 16833, 16836, 16837, 16839, 16847, 16848, 16849, 16853, 16854, 16855, 16856, 16865, 16866, 16867, 16869, 16872, 16875, 16876, 16877, 16880, 16882, 16884, 16890, 16896, 16906, 16909, 16912, 16913, 16917, 16919, 16921, 16922, 16925, 16926, 16933, 16941, 16946, 16947, 16948, 16950, 16951, 16953, 16956, 16957, 16958, 16960, 16963, 16964, 16965, 16970, 16974, 16976, 16979, 16980, 16982, 16984, 16989, 16990, 16993, 17005, 17007, 17009, 17013, 17016, 17017, 17018, 17021, 17022, 17028, 17030, 17031, 17035, 17036, 17039, 17040, 17041, 17046, 17047, 17049, 17050, 17052, 17055, 17061, 17062, 17064, 17065, 17067, 17068, 17070, 17071, 17072, 17073, 17076, 17077, 17078, 17084, 17085, 17087, 17089, 17091, 17093, 17095, 17098, 17099, 17100, 17101, 17102, 17105, 17113, 17114, 17119, 17121, 17122, 17123, 17124, 17126, 17129, 17133, 17134, 17137, 17138, 17140, 17141, 17142, 17143, 17144, 17153, 17155, 17157, 17161, 17165, 17168, 17171, 17173, 17175, 17179, 17180, 17181, 17184, 17185, 17187, 17188, 17191, 17192, 17194, 17195, 17196, 17197, 17198, 17200, 17202, 17203, 17204, 17206, 17208, 17212, 17216, 17219, 17220, 17222, 17223, 17225, 17227, 17229, 17230, 17231, 17233, 17234, 17235, 17236, 17237, 17238, 17239, 17240, 17244, 17245, 17246, 17247, 17248, 17249, 17250, 17251, 17252, 17259, 17260, 17261, 17265, 17266, 17269, 17270, 17273, 17275, 17276, 17279, 17281, 17282, 17286, 17289, 17291, 17296, 17297, 17298, 17299, 17300, 17303, 17304, 17308, 17311, 17312, 17313, 17314, 17315, 17316, 17318, 17320, 17326, 17327, 17328, 17329, 17330, 17332, 17335, 17336, 17338, 17341, 17342, 17343, 17345, 17347, 17348, 17350, 17351, 17352, 17353, 17354, 17359, 17363, 17370, 17380, 17381, 17383, 17387, 17389, 17391, 17392, 17393, 17394, 17396, 17397, 17408, 17409, 17410, 17411, 17412, 17413, 17414, 17415, 17417, 17421, 17424, 17425, 17429, 17430, 17431, 17432, 17434, 17435, 17438, 17439, 17441, 17442, 17443, 17444, 17451, 17454, 17457, 17460, 17461, 17463, 17464, 17467, 17470, 17474, 17475, 17476, 17479, 17481, 17482, 17483, 17491, 17492, 17495, 17497, 17499, 17502, 17505, 17506, 17508, 17510, 17511, 17513, 17515, 17516, 17519, 17520, 17525, 17529, 17537, 17541, 17542, 17543, 17544, 17546, 17550, 17553, 17558, 17562, 17563, 17564, 17567, 17570, 17573, 17575, 17578, 17581, 17583, 17589, 17592, 17597, 17600, 17604, 17605, 17607, 17608, 17611, 17612, 17617, 17618, 17622, 17627, 17632, 17635, 17636, 17637, 17639, 17642, 17643, 17644, 17647, 17650, 17652, 17654, 17661, 17662, 17665, 17669, 17671, 17672, 17673, 17674, 17675, 17677, 17678, 17680, 17681, 17682, 17683, 17685, 17686, 17687, 17693, 17694, 17696, 17697, 17698, 17700, 17701, 17709, 17712, 17713, 17715, 17717, 17719, 17721, 17723, 17724, 17726, 17729, 17736, 17738, 17739, 17743, 17744, 17746, 17748, 17754, 17756, 17758, 17759, 17763, 17766, 17769, 17771, 17776, 17777, 17778, 17779, 17780, 17783, 17797, 17801, 17803, 17806, 17813, 17814, 17817, 17818, 17819, 17824, 17827, 17828, 17833, 17834, 17836, 17841, 17843, 17847, 17850, 17852, 17853, 17854, 17856, 17858, 17859, 17861, 17867, 17868, 17869, 17872, 17873, 17875, 17877, 17880, 17884, 17886, 17892, 17894, 17896, 17897, 17901, 17911, 17912, 17913, 17920, 17921, 17923, 17925, 17929, 17930, 17931, 17932, 17933, 17934, 17939, 17944, 17946, 17947, 17950, 17955, 17957, 17959, 17960, 17965, 17969, 17972, 17976, 17977, 17981, 17982, 17985, 17990, 17991, 17994, 17995, 17999, 18002, 18004, 18011, 18019, 18020, 18022, 18024, 18025, 18026, 18032, 18035, 18039, 18040, 18042, 18043, 18046, 18047, 18049, 18056, 18057, 18058, 18059, 18062, 18063, 18066, 18070, 18072, 18074, 18076, 18077, 18079, 18082, 18083, 18086, 18087, 18090, 18092, 18094, 18096, 18099, 18100, 18101, 18102, 18104, 18107, 18109, 18114, 18116, 18121, 18122, 18123, 18124, 18125, 18126, 18129, 18130, 18137, 18138, 18139, 18140, 18141, 18142, 18144, 18148, 18151, 18152, 18155, 18156, 18159, 18160, 18162, 18167, 18168, 18169, 18170, 18172, 18173, 18174, 18177, 18178, 18183, 18185, 18187, 18188, 18189, 18190, 18191, 18192, 18197, 18199, 18200, 18201, 18202, 18203, 18207, 18209, 18210, 18212, 18213, 18216, 18221, 18224, 18225, 18227, 18231, 18233, 18235, 18237, 18238, 18241, 18243, 18245, 18246, 18248, 18250, 18251, 18254, 18255, 18259, 18260, 18261, 18263, 18264, 18267, 18268, 18270, 18272, 18274, 18275, 18276, 18277, 18278, 18280, 18282, 18285, 18288, 18289, 18290, 18291, 18292, 18293, 18294, 18295, 18296, 18297, 18298, 18299, 18301, 18302, 18303, 18304, 18305, 18307, 18308, 18310, 18311, 18312, 18313, 18314, 18317, 18323, 18326, 18327, 18328, 18329, 18330, 18332, 18333, 18334, 18336, 18344, 18345, 18346, 18347, 18348, 18350, 18351, 18354, 18355, 18356, 18358, 18363, 18364, 18367, 18368, 18370, 18372, 18373, 18374, 18375, 18378, 18379, 18381, 18383, 18385, 18386, 18387, 18388, 18391, 18394, 18395, 18396, 18401, 18402, 18404, 18405, 18410, 18416, 18419, 18421, 18423, 18424, 18426, 18431, 18437, 18440, 18441, 18443, 18444, 18445, 18447, 18450, 18451, 18455, 18456, 18457, 18459, 18460, 18463, 18465, 18467, 18473, 18474, 18478, 18479, 18480, 18482, 18484, 18492, 18495, 18496, 18497, 18499, 18502, 18503, 18505, 18506, 18509, 18510, 18512, 18518, 18520, 18528, 18531, 18533, 18538, 18540, 18541, 18542, 18545, 18546, 18547, 18548, 18549, 18551, 18553, 18554, 18555, 18556, 18557, 18559, 18564, 18565, 18567, 18568, 18569, 18570, 18572, 18576, 18577, 18578, 18579, 18581, 18582, 18584, 18585, 18589, 18592, 18594, 18596, 18597, 18598, 18602, 18603, 18605, 18606, 18608, 18610, 18611, 18612, 18614, 18616, 18617, 18625, 18626, 18632, 18634, 18636, 18639, 18643, 18647, 18648, 18649, 18650, 18652, 18653, 18654, 18656, 18659, 18660, 18662, 18664, 18665, 18667, 18673, 18675, 18677, 18679, 18684, 18689, 18693, 18698, 18699, 18702, 18709, 18711, 18712, 18717, 18718, 18719, 18722, 18723, 18726, 18728, 18730, 18732, 18735, 18738, 18741, 18742, 18747, 18749, 18751, 18755, 18756, 18760, 18761, 18763, 18766, 18767, 18769, 18770, 18776, 18779, 18783, 18786, 18789, 18790, 18794, 18799, 18800, 18806, 18807, 18808, 18812, 18815, 18818, 18819, 18823, 18824, 18826, 18827, 18828, 18833, 18834, 18835, 18836, 18840, 18845, 18846, 18848, 18850, 18854, 18855, 18859, 18861, 18865, 18866, 18867, 18871, 18874, 18875, 18876, 18878, 18879, 18880, 18882, 18883, 18885, 18887, 18889, 18891, 18892, 18895, 18896, 18898, 18901, 18905, 18909, 18913, 18915, 18917, 18918, 18920, 18922, 18925, 18926, 18931, 18933, 18935, 18936, 18939, 18940, 18942, 18945, 18946, 18947, 18948, 18950, 18952, 18956, 18957, 18959, 18960, 18961, 18964, 18971, 18972, 18975, 18976, 18981, 18982, 18985, 18986, 18989, 18993, 19000, 19003, 19005, 19010, 19012, 19014, 19016, 19017, 19021, 19022, 19023, 19026, 19031, 19032, 19034, 19035, 19036, 19037, 19038, 19039, 19040, 19042, 19043, 19044, 19045, 19046, 19047, 19050, 19051, 19052, 19053, 19054, 19058, 19060, 19061, 19063, 19064, 19068, 19069, 19070, 19071, 19072, 19074, 19076, 19079, 19082, 19083, 19086, 19087, 19091, 19092, 19096, 19098, 19101, 19103, 19106, 19108, 19109, 19110, 19114, 19115, 19119, 19121, 19122, 19128, 19131, 19134, 19135, 19136, 19139, 19140, 19141, 19145, 19146, 19157, 19158, 19160, 19162, 19168, 19174, 19178, 19179, 19181, 19184, 19186, 19190, 19192, 19194, 19202, 19203, 19206, 19207, 19217, 19220, 19224, 19229, 19230, 19239, 19240, 19241, 19243, 19245, 19247, 19252, 19253, 19254, 19256, 19258, 19259, 19260, 19261, 19265, 19267, 19269, 19270, 19271, 19272, 19273, 19277, 19278, 19280, 19281, 19282, 19283, 19286, 19288, 19289, 19296, 19298, 19300, 19302, 19303, 19304, 19305, 19307, 19314, 19317, 19319, 19322, 19325, 19327, 19330, 19331, 19333, 19337, 19343, 19348, 19357, 19360, 19365, 19372, 19373, 19374, 19375, 19382, 19385, 19389, 19395, 19399, 19402, 19407, 19411, 19412, 19413, 19416, 19420, 19421, 19431, 19440, 19441, 19450, 19459, 19461, 19468, 19472, 19474, 19479, 19482, 19483, 19484, 19486, 19487, 19488, 19489, 19490, 19491, 19494, 19499, 19505, 19509, 19510, 19513, 19514, 19516, 19517, 19521, 19527, 19529, 19535, 19538, 19539, 19541, 19542, 19543, 19546, 19547, 19548, 19550, 19551, 19552, 19555, 19558, 19559, 19561, 19567, 19568, 19569, 19573, 19577, 19579, 19580, 19583, 19584, 19590, 19591, 19592, 19593, 19594, 19595, 19599, 19603, 19608, 19614, 19615, 19619, 19621, 19622, 19623, 19624, 19625, 19626, 19627, 19629, 19633, 19634, 19638, 19641, 19642, 19644, 19645, 19647, 19650, 19652, 19653, 19655, 19656, 19657, 19659, 19661, 19662, 19667, 19668, 19672, 19674, 19675, 19677, 19679, 19680, 19682, 19685, 19686, 19692, 19697, 19699, 19701, 19705, 19709, 19711, 19713, 19715, 19721, 19723, 19725, 19728, 19732, 19733, 19734, 19736, 19738, 19741, 19745, 19749, 19753, 19754, 19755, 19759, 19761, 19762, 19763, 19769, 19772, 19777, 19780, 19781, 19786, 19788, 19791, 19792, 19793, 19795, 19796, 19799, 19800, 19801, 19802, 19804, 19805, 19810, 19814, 19815, 19819, 19822, 19829, 19830, 19831, 19832, 19835, 19837, 19838, 19839, 19840, 19842, 19844, 19847, 19848, 19849, 19850, 19851, 19853, 19855, 19856, 19857, 19858, 19859, 19861, 19864, 19868, 19870, 19871, 19872, 19873, 19875, 19876, 19878, 19880, 19885, 19890, 19891, 19895, 19896, 19897, 19903, 19905, 19906, 19907, 19909, 19910, 19912, 19913, 19915, 19916, 19919, 19920, 19921, 19926, 19927, 19928, 19930, 19932, 19935, 19937, 19938, 19943, 19944, 19945, 19946, 19950, 19952, 19953, 19954, 19957, 19959, 19964, 19966, 19967, 19969, 19971, 19972, 19974, 19975, 19977, 19981, 19982, 19983, 19986, 19989, 19993, 19994, 19996, 20000, 20002, 20004, 20005, 20006, 20007, 20008, 20009, 20011, 20012, 20013, 20015, 20016, 20017, 20018, 20020, 20023, 20024, 20026, 20027, 20031, 20034, 20035, 20036, 20038, 20039, 20040, 20041, 20042, 20044, 20045, 20046, 20050, 20052, 20054, 20056, 20059, 20060, 20062, 20065, 20066, 20067, 20068, 20069, 20070, 20071, 20072, 20076, 20077, 20078, 20080, 20083, 20086, 20087, 20092, 20094, 20095, 20096, 20098, 20099, 20102, 20104, 20106, 20107, 20109, 20110, 20114, 20116, 20119, 20122, 20123, 20128, 20133, 20134, 20137, 20138, 20139, 20140, 20142, 20143, 20144, 20147, 20148, 20151, 20152, 20155, 20157, 20161, 20162, 20163, 20166, 20171, 20173, 20177, 20178, 20179, 20181, 20183, 20187, 20192, 20193, 20199, 20204, 20207, 20211, 20213, 20216, 20221, 20225, 20227, 20228, 20230, 20235, 20237, 20239, 20241, 20242, 20243, 20244, 20245, 20246, 20248, 20249, 20250, 20251, 20255, 20259, 20263, 20266, 20267, 20268, 20269, 20276, 20279, 20280, 20286, 20289, 20291, 20292, 20294, 20297, 20298, 20301, 20302, 20303, 20304, 20308, 20312, 20316, 20321, 20322, 20323, 20324, 20326, 20328, 20330, 20331, 20334, 20336, 20339, 20340, 20343, 20346, 20347, 20350, 20354, 20356, 20357, 20364, 20365, 20369, 20371, 20374, 20375, 20376, 20378, 20380, 20381, 20382, 20383, 20389, 20390, 20392, 20397, 20398, 20399, 20404, 20405, 20406, 20407, 20415, 20417, 20419, 20420, 20421, 20422, 20424, 20426, 20427, 20428, 20435, 20436, 20437, 20438, 20442, 20443, 20444, 20445, 20446, 20447, 20448, 20451, 20453, 20454, 20457, 20458, 20459, 20460, 20466, 20467, 20471, 20474, 20475, 20479, 20480, 20481, 20482, 20486, 20487, 20489, 20492, 20495, 20496, 20499, 20503, 20507, 20511, 20512, 20513, 20514, 20515, 20521, 20523, 20526, 20527, 20532, 20537, 20538, 20539, 20540, 20541, 20547, 20549, 20550, 20555, 20558, 20565, 20572, 20574, 20575, 20578, 20583, 20592, 20596, 20597, 20598, 20600, 20602, 20604, 20606, 20607, 20610, 20622, 20625, 20626, 20627, 20629, 20631, 20635, 20637, 20638, 20639, 20641, 20642, 20643, 20652, 20656, 20660, 20663, 20664, 20669, 20670, 20673, 20675, 20677, 20679, 20680, 20685, 20686, 20689, 20691, 20693, 20700, 20701, 20702, 20704, 20705, 20706, 20707, 20711, 20713, 20714, 20715, 20716, 20721, 20726, 20728, 20730, 20733, 20737, 20738, 20739, 20747, 20749, 20754, 20758, 20759, 20760, 20763, 20772, 20774, 20775, 20777, 20778, 20780, 20784, 20785, 20791, 20792, 20794, 20798, 20800, 20803, 20804, 20809, 20819, 20821, 20822, 20823, 20824, 20828, 20832, 20833, 20835, 20842, 20843, 20845, 20847, 20848, 20851, 20852, 20853, 20854, 20859, 20862, 20864, 20866, 20874, 20878, 20879, 20880, 20883, 20885, 20886, 20891, 20892, 20899, 20907, 20908, 20912, 20913, 20916, 20919, 20920, 20926, 20931, 20932, 20934, 20937, 20939, 20949, 20952, 20953, 20956, 20959, 20965, 20966, 20967, 20968, 20969, 20971, 20973, 20978, 20980, 20988, 20990, 20991, 20992, 20994, 20996, 20997, 20998, 20999, 21000, 21001, 21004, 21008, 21010, 21012, 21013, 21014, 21016, 21022, 21024, 21030, 21032, 21033, 21036, 21037, 21039, 21040, 21041, 21044, 21046, 21049, 21051, 21053, 21055, 21057, 21059, 21060, 21061, 21063, 21065, 21066, 21068, 21069, 21075, 21076, 21077, 21078, 21079, 21080, 21082, 21084, 21088, 21089, 21091, 21092, 21094, 21095, 21097, 21098, 21103, 21104, 21107, 21108, 21109, 21111, 21113, 21114, 21118, 21120, 21125, 21126, 21127, 21128, 21130, 21132, 21137, 21145, 21147, 21149, 21150, 21151, 21152, 21153, 21154, 21157, 21160, 21162, 21168, 21169, 21172, 21173, 21174, 21177, 21179, 21182, 21183, 21184, 21191, 21193, 21194, 21195, 21196, 21197, 21206, 21209, 21215, 21216, 21217, 21220, 21221, 21225, 21229, 21230, 21234, 21236, 21238, 21241, 21242, 21243, 21248, 21252, 21253, 21254, 21255, 21257, 21259, 21260, 21261, 21262, 21263, 21266, 21270, 21274, 21275, 21276, 21277, 21279, 21282, 21284, 21287, 21288, 21289, 21291, 21292, 21293, 21294, 21295, 21297, 21298, 21299, 21300, 21306, 21308, 21309, 21310, 21311, 21313, 21314, 21317, 21318, 21319, 21320, 21321, 21323, 21324, 21327, 21331, 21339, 21340, 21348, 21349, 21351, 21356, 21360, 21362, 21364, 21365, 21368, 21369, 21371, 21372, 21374, 21377, 21378, 21381, 21384, 21385, 21387, 21389, 21390, 21391, 21393, 21394, 21400, 21403, 21404, 21407, 21408, 21411, 21412, 21413, 21414, 21415, 21416, 21417, 21418, 21421, 21422, 21423, 21425, 21429, 21431, 21434, 21442, 21446, 21449, 21452, 21455, 21456, 21460, 21461, 21462, 21469, 21471, 21472, 21474, 21477, 21478, 21481, 21483, 21484, 21490, 21495, 21499, 21506, 21510, 21513, 21515, 21516, 21517, 21519, 21521, 21526, 21527, 21529, 21530, 21531, 21535, 21539, 21540, 21542, 21543, 21544, 21545, 21546, 21548, 21549, 21553, 21554, 21557, 21558, 21560, 21562, 21564, 21566, 21568, 21571, 21573, 21577, 21581, 21582, 21585, 21586, 21587, 21590, 21591, 21593, 21594, 21598, 21608, 21610, 21611, 21613, 21617, 21618, 21625, 21627, 21629, 21631, 21634, 21639, 21640, 21645, 21652, 21656, 21657, 21658, 21661, 21670, 21671, 21678, 21681, 21685, 21688, 21693, 21694, 21695, 21696, 21697, 21703, 21704, 21705, 21706, 21707, 21708, 21709, 21710, 21711, 21713, 21714, 21717, 21718, 21720, 21722, 21727, 21728, 21729, 21730, 21731, 21732, 21733, 21740, 21741, 21744, 21745, 21746, 21747, 21748, 21754, 21757, 21758, 21761, 21762, 21765, 21769, 21772, 21776, 21778, 21780, 21781, 21783, 21797, 21801, 21802, 21806, 21807, 21808, 21810, 21811, 21813, 21814, 21816, 21819, 21821, 21822, 21823, 21826, 21827, 21830, 21833, 21834, 21838, 21843, 21851, 21852, 21858, 21859, 21861, 21862, 21863, 21865, 21866, 21868, 21871, 21872, 21877, 21882, 21883, 21886, 21887, 21888, 21890, 21893, 21897, 21898, 21900, 21904, 21905, 21906, 21907, 21908, 21914, 21915, 21916, 21918, 21919, 21920, 21921, 21922, 21923, 21924, 21925, 21927, 21929, 21937, 21939, 21942, 21945, 21947, 21949, 21950, 21951, 21953, 21954, 21955, 21956, 21958, 21959, 21960, 21961, 21962, 21968, 21969, 21979, 21980, 21987, 21991, 21992, 21994, 21996, 21997, 21998, 22006, 22008, 22011, 22012, 22015, 22018, 22022, 22023, 22024, 22027, 22028, 22029, 22032, 22033, 22034, 22040, 22041, 22042, 22044, 22047, 22055, 22056, 22058, 22060, 22061, 22065, 22066, 22067, 22069, 22072, 22073, 22074, 22075, 22076, 22079, 22080, 22081, 22082, 22083, 22084, 22085, 22094, 22097, 22099, 22101, 22103, 22105, 22111, 22112, 22121, 22124, 22125, 22131, 22132, 22133, 22134, 22136, 22137, 22138, 22139, 22141, 22142, 22145, 22153, 22154, 22155, 22157, 22160, 22162, 22164, 22166, 22167, 22171, 22172, 22174, 22175, 22176, 22179, 22181, 22182, 22183, 22184, 22185, 22186, 22188, 22189, 22190, 22191, 22195, 22197, 22198, 22203, 22204, 22205, 22207, 22208, 22209, 22210, 22212, 22213, 22214, 22218, 22219, 22220, 22225, 22226, 22227, 22228, 22231, 22233, 22235, 22237, 22240, 22241, 22244, 22248, 22249, 22251, 22252, 22253, 22255, 22256, 22257, 22258, 22260, 22261, 22262, 22263, 22264, 22265, 22266, 22268, 22270, 22273, 22274, 22275, 22277, 22281, 22285, 22288, 22290, 22292, 22293, 22299, 22303, 22304, 22305, 22306, 22308, 22310, 22312, 22314, 22315, 22316, 22318, 22320, 22321, 22322, 22323, 22326, 22327, 22328, 22332, 22333, 22334, 22335, 22336, 22337, 22342, 22344, 22347, 22348, 22351, 22352, 22354, 22360, 22361, 22362, 22368, 22371, 22374, 22376, 22378, 22379, 22383, 22384, 22385, 22390, 22391, 22392, 22395, 22396, 22399, 22400, 22401, 22402, 22403, 22404, 22408, 22409, 22415, 22416, 22417, 22422, 22425, 22429, 22430, 22431, 22435, 22439, 22440, 22441, 22445, 22446, 22447, 22448, 22450, 22451, 22452, 22454, 22455, 22458, 22459, 22466, 22468, 22469, 22472, 22473, 22476, 22478, 22483, 22484, 22485, 22487, 22488, 22489, 22491, 22494, 22496, 22497, 22498, 22499, 22500, 22503, 22504, 22507, 22509, 22512, 22515, 22518, 22519, 22522, 22523, 22524, 22527, 22529, 22530, 22531, 22533, 22534, 22536, 22538, 22541, 22543, 22545, 22546, 22550, 22553, 22554, 22555, 22558, 22560, 22561, 22567, 22568, 22571, 22572, 22574, 22575, 22577, 22581, 22584, 22586, 22587, 22588, 22592, 22593, 22594, 22597, 22602, 22604, 22605, 22606, 22613, 22616, 22621, 22627, 22628, 22631, 22632, 22634, 22639, 22640, 22641, 22643, 22644, 22647, 22648, 22649, 22651, 22653, 22656, 22659, 22672, 22673, 22675, 22684, 22686, 22693, 22695, 22697, 22700, 22701, 22703, 22709, 22711, 22715, 22719, 22720, 22726, 22727, 22728, 22730, 22732, 22734, 22735, 22740, 22746, 22749, 22755, 22756, 22757, 22758, 22759, 22760, 22761, 22762, 22764, 22765, 22771, 22772, 22776, 22781, 22782, 22784, 22785, 22786, 22787, 22789, 22790, 22791, 22792, 22793, 22795, 22799, 22807, 22811, 22812, 22817, 22818, 22820, 22821, 22822, 22823, 22824, 22825, 22828, 22831, 22833, 22835, 22836, 22838, 22840, 22841, 22844, 22847, 22849, 22851, 22855, 22857, 22860, 22862, 22866, 22870, 22871, 22872, 22873, 22876, 22877, 22880, 22881, 22888, 22890, 22892, 22893, 22896, 22898, 22899, 22902, 22905, 22907, 22910, 22911, 22912, 22915, 22917, 22920, 22922, 22923, 22928, 22930, 22935, 22936, 22937, 22940, 22942, 22943, 22945, 22946, 22947, 22948, 22950, 22953, 22960, 22963, 22965, 22967, 22971, 22972, 22973, 22975, 22978, 22979, 22980, 22985, 22986, 22990, 22991, 22992, 22994, 22996, 22997, 22998, 23000, 23003, 23005, 23009, 23013, 23017, 23019, 23020, 23021, 23022, 23025, 23027, 23029, 23031, 23032, 23037, 23039, 23042, 23045, 23047, 23051, 23053, 23056, 23058, 23059, 23061, 23062, 23065, 23067, 23068, 23072, 23073, 23075, 23076, 23077, 23079, 23081, 23082, 23084, 23085, 23086, 23091, 23094, 23096, 23102, 23103, 23106, 23107, 23109, 23112, 23114, 23117, 23120, 23123, 23124, 23125, 23129, 23130, 23132, 23134, 23136, 23137, 23139, 23142, 23148, 23152, 23153, 23154, 23156, 23158, 23165, 23166, 23167, 23172, 23177, 23178, 23180, 23181, 23187, 23189, 23190, 23194, 23196, 23198, 23199, 23202, 23203, 23205, 23206, 23209, 23210, 23212, 23216, 23218, 23219, 23228, 23230, 23237, 23240, 23241, 23243, 23248, 23254, 23255, 23256, 23258, 23259, 23260, 23262, 23265, 23271, 23272, 23275, 23276, 23278, 23279, 23282, 23285, 23288, 23290, 23296, 23297, 23298, 23299, 23300, 23302, 23304, 23306, 23307, 23308, 23310, 23311, 23313, 23316, 23317, 23319, 23322, 23326, 23327, 23329, 23332, 23333, 23340, 23341, 23342, 23346, 23347, 23348, 23353, 23354, 23356, 23357, 23358, 23361, 23364, 23365, 23366, 23368, 23369, 23381, 23383, 23389, 23391, 23392, 23393, 23394, 23395, 23396, 23398, 23400, 23401, 23404, 23405, 23406, 23407, 23408, 23410, 23411, 23416, 23417, 23420, 23423, 23424, 23426, 23427, 23428, 23430, 23432, 23433, 23437, 23438, 23439, 23441, 23442, 23444, 23446, 23447, 23449, 23450, 23456, 23457, 23458, 23460, 23462, 23464, 23465, 23466, 23468, 23469, 23473, 23475, 23476, 23477, 23480, 23482, 23483, 23485, 23486, 23487, 23489, 23491, 23496, 23498, 23499, 23503, 23509, 23512, 23513, 23514, 23515, 23516, 23518, 23519, 23521, 23529, 23530, 23536, 23537, 23538, 23539, 23540, 23541, 23543, 23544, 23546, 23547, 23551, 23553, 23555, 23560, 23561, 23564, 23565, 23566, 23570, 23572, 23573, 23578, 23579, 23584, 23591, 23603, 23608, 23610, 23611, 23612, 23613, 23616, 23618, 23622, 23623, 23624, 23625, 23629, 23630, 23631, 23632, 23636, 23638, 23641, 23645, 23651, 23654, 23655, 23660, 23661, 23663, 23664, 23667, 23668, 23669, 23670, 23671, 23675, 23678, 23679, 23681, 23682, 23683, 23684, 23688, 23689, 23691, 23692, 23694, 23695, 23696, 23698, 23701, 23702, 23703, 23704, 23708, 23709, 23710, 23711, 23717, 23718, 23724, 23725, 23731, 23732, 23736, 23737, 23739, 23743, 23745, 23746, 23747, 23748, 23750, 23752, 23755, 23756, 23757, 23765, 23766, 23767, 23768, 23770, 23772, 23773, 23774, 23775, 23777, 23778, 23779, 23785, 23787, 23789, 23790, 23792, 23793, 23794, 23795, 23796, 23798, 23799, 23800, 23802, 23803, 23804, 23805, 23806, 23807, 23808, 23809, 23810, 23811, 23813, 23814, 23817, 23818, 23820, 23829, 23830, 23832, 23838, 23843, 23845, 23846, 23852, 23854, 23856, 23857, 23858, 23859, 23860, 23863, 23871, 23872, 23880, 23881, 23882, 23885, 23886, 23887, 23888, 23890, 23892, 23895, 23900, 23902, 23903, 23906, 23907, 23909, 23910, 23915, 23917, 23918, 23920, 23921, 23924, 23926, 23929, 23932, 23933, 23934, 23935, 23939, 23942, 23944, 23945, 23946, 23949, 23951, 23953, 23954, 23956, 23957, 23960, 23961, 23963, 23967, 23975, 23976, 23979, 23986, 23987, 23988, 23990, 23992, 23994, 23998, 23999, 24000, 24001, 24010, 24011, 24017, 24021, 24022, 24024, 24025, 24029, 24030, 24032, 24033, 24035, 24036, 24041, 24042, 24047, 24050, 24057, 24058, 24059, 24060, 24061, 24067, 24068, 24069, 24070, 24071, 24072, 24076, 24077, 24078, 24080, 24081, 24083, 24087, 24089, 24091, 24092, 24098, 24104, 24112, 24114, 24116, 24118, 24119, 24120, 24122, 24123, 24124, 24125, 24126, 24127, 24128, 24130, 24131, 24133, 24138, 24142, 24143, 24148, 24150, 24160, 24162, 24163, 24164, 24165, 24167, 24168, 24172, 24174, 24175, 24176, 24177, 24179, 24182, 24186, 24190, 24192, 24196, 24207, 24211, 24213, 24215, 24217, 24218, 24219, 24225, 24227, 24229, 24232, 24233, 24234, 24237, 24240, 24242, 24246, 24247, 24253, 24254, 24256, 24257, 24262, 24266, 24270, 24273, 24277, 24278, 24284, 24286, 24288, 24289, 24293, 24301, 24302, 24303, 24304, 24305, 24309, 24310, 24311, 24314, 24316, 24317, 24322, 24324, 24331, 24335, 24336, 24339, 24340, 24342, 24344, 24345, 24348, 24349, 24350, 24352, 24354, 24355, 24357, 24359, 24361, 24373, 24383, 24384, 24385, 24389, 24390, 24392, 24393, 24395, 24397, 24398, 24399, 24400, 24402, 24405, 24409, 24414, 24415, 24416, 24418, 24419, 24420, 24426, 24427, 24428, 24430, 24432, 24433, 24435, 24436, 24437, 24438, 24441, 24442, 24446, 24449, 24450, 24451, 24452, 24454, 24456, 24457, 24458, 24461, 24468, 24470, 24471, 24472, 24476, 24480, 24485, 24490, 24491, 24492, 24498, 24499, 24500, 24501, 24505, 24511, 24512, 24513, 24514, 24515, 24516, 24517, 24518, 24521, 24522, 24523, 24529, 24533, 24534, 24538, 24539, 24541, 24543, 24545, 24547, 24551, 24552, 24557, 24558, 24561, 24562, 24565, 24567, 24568, 24570, 24571, 24573, 24574, 24579, 24583, 24586, 24588, 24591, 24592, 24597, 24599, 24600, 24603, 24604, 24605, 24607, 24610, 24611, 24615, 24616, 24618, 24619, 24621, 24622, 24625, 24626, 24628, 24631, 24634, 24638, 24642, 24643, 24646, 24649, 24651, 24653, 24654, 24657, 24663, 24672, 24673, 24674, 24678, 24680, 24683, 24687, 24690, 24691, 24693, 24695, 24696, 24698, 24699, 24701, 24703, 24704, 24713, 24714, 24716, 24718, 24724, 24725, 24726, 24728, 24729, 24730, 24731, 24732, 24734, 24735, 24737, 24738, 24739, 24743, 24744, 24749, 24754, 24761, 24767, 24771, 24774, 24775, 24777, 24778, 24780, 24781, 24785, 24789, 24790, 24791, 24795, 24799, 24801, 24804, 24805, 24808, 24809, 24810, 24812, 24814, 24815, 24823, 24824, 24830, 24832, 24834, 24837, 24838, 24842, 24845, 24847, 24848, 24849, 24850, 24854, 24855, 24858, 24860, 24867, 24868, 24869, 24872, 24873, 24875, 24876, 24877, 24881, 24883, 24886, 24887, 24888, 24890, 24894, 24897, 24904, 24910, 24916, 24921, 24922, 24929, 24930, 24931, 24932, 24935, 24936, 24937, 24941, 24942, 24943, 24946, 24947, 24948, 24949, 24950, 24953, 24955, 24956, 24957, 24958, 24961, 24964, 24969, 24970, 24977, 24978, 24981, 24983, 24984, 24985, 24986, 24987, 24989, 24992, 24993, 24994, 24995, 24999, 25002, 25003, 25004, 25005, 25006, 25007, 25008, 25013, 25015, 25016, 25019, 25020, 25021, 25023, 25025, 25026, 25027, 25030, 25031, 25038, 25040, 25042, 25044, 25049, 25050, 25051, 25052, 25055, 25059, 25060, 25064, 25066, 25067, 25069, 25070, 25073, 25075, 25076, 25077, 25078, 25080, 25081, 25082, 25083, 25084, 25085, 25086, 25087, 25088, 25090, 25093, 25094, 25096, 25098, 25102, 25104, 25105, 25107, 25108, 25110, 25111, 25114, 25115, 25116, 25118, 25122, 25126, 25128, 25129, 25133, 25136, 25140, 25143, 25145, 25146, 25147, 25152, 25156, 25158, 25161, 25162, 25164, 25165, 25166, 25168, 25171, 25175, 25176, 25177, 25178, 25180, 25185, 25188, 25189, 25190, 25193, 25196, 25197, 25201, 25204, 25207, 25208, 25209, 25210, 25211, 25212, 25216, 25217, 25219, 25220, 25222, 25223, 25224, 25225, 25230, 25234, 25236, 25240, 25241, 25243, 25245, 25247, 25251, 25252, 25257, 25261, 25263, 25264, 25265, 25269, 25270, 25271, 25272, 25274, 25277, 25282, 25284, 25285, 25286, 25287, 25290, 25293, 25294, 25295, 25296, 25298, 25299, 25304, 25305, 25306, 25310, 25311, 25316, 25318, 25320, 25322, 25325, 25327, 25328, 25329, 25330, 25331, 25334, 25335, 25336, 25338, 25340, 25341, 25344, 25350, 25353, 25355, 25356, 25357, 25358, 25359, 25360, 25361, 25362, 25364, 25365, 25371, 25372, 25374, 25379, 25380, 25383, 25386, 25390, 25393, 25394, 25395, 25398, 25400, 25401, 25408, 25411, 25413, 25414, 25415, 25416, 25417, 25418, 25421, 25423, 25424, 25425, 25426, 25428, 25431, 25433, 25441, 25450, 25452, 25454, 25456, 25457, 25458, 25460, 25461, 25464, 25465, 25468, 25469, 25470, 25471, 25472, 25475, 25476, 25478, 25481, 25486, 25489, 25499, 25505, 25508, 25510, 25514, 25517, 25518, 25519, 25521, 25527, 25528, 25529, 25536, 25544, 25545, 25546, 25549, 25552, 25553, 25554, 25557, 25562, 25563, 25566, 25567, 25570, 25575, 25576, 25577, 25582, 25583, 25584, 25586, 25587, 25588, 25591, 25597, 25598, 25599, 25606, 25607, 25611, 25613, 25616, 25617, 25619, 25624, 25627, 25629, 25630, 25631, 25633, 25635, 25636, 25643, 25644, 25646, 25649, 25650, 25661, 25662, 25664, 25665, 25676, 25684, 25688, 25690, 25691, 25694, 25696, 25698, 25699, 25700, 25701, 25705, 25708, 25710, 25713, 25716, 25717, 25723, 25726, 25727, 25728, 25729, 25732, 25737, 25740, 25746, 25750, 25753, 25755, 25759, 25764, 25765, 25766, 25767, 25773, 25781, 25787, 25789, 25791, 25792, 25794, 25798, 25799, 25800, 25802, 25803, 25804, 25809, 25810, 25813, 25817, 25818, 25819, 25822, 25823, 25825, 25826, 25831, 25835, 25837, 25838, 25840, 25841, 25842, 25843, 25844, 25845, 25846, 25848, 25851, 25852, 25854, 25855, 25856, 25858, 25862, 25863, 25864, 25868, 25869, 25870, 25872, 25873, 25877, 25878, 25880, 25881, 25882, 25883, 25884, 25885, 25886, 25887, 25888, 25889, 25890, 25891, 25892, 25893, 25894, 25895, 25896, 25897, 25899, 25908, 25910, 25913, 25918, 25924, 25928, 25929, 25931, 25933, 25934, 25935, 25938, 25941, 25945, 25947, 25950, 25952, 25954, 25959, 25964, 25966, 25967, 25969, 25970, 25972, 25973, 25974, 25976, 25980, 25982, 25984, 25987, 25988, 25993, 25996, 25997, 25998, 26000, 26001, 26002, 26003, 26004, 26005, 26009, 26011, 26013, 26014, 26015, 26016, 26019, 26023, 26027, 26029, 26030, 26031, 26032, 26033, 26034, 26036, 26037, 26039, 26040, 26042, 26043, 26044, 26046, 26047, 26050, 26051, 26054, 26056, 26057, 26059, 26060, 26061, 26062, 26063, 26065, 26066, 26067, 26068, 26069, 26070, 26072, 26074, 26076, 26077, 26080, 26084, 26085, 26086, 26087, 26088, 26089, 26090, 26091, 26094, 26097, 26100, 26101, 26102, 26104, 26108, 26110, 26111, 26115, 26116, 26118, 26119, 26120, 26128, 26129, 26131, 26132, 26133, 26135, 26136, 26138, 26139, 26140, 26141, 26142, 26143, 26148, 26151, 26152, 26154, 26156, 26159, 26163, 26165, 26168, 26170, 26173, 26179, 26180, 26181, 26185, 26187, 26188, 26190, 26192, 26194, 26196, 26199, 26201, 26202, 26210, 26211, 26212, 26213, 26215, 26217, 26223, 26228, 26229, 26230, 26233, 26236, 26237, 26243, 26245, 26251, 26253, 26260, 26262, 26263, 26267, 26268, 26271, 26275, 26281, 26283, 26288, 26289, 26290, 26291, 26293, 26294, 26296, 26298, 26302, 26303, 26304, 26307, 26308, 26309, 26310, 26311, 26313, 26314, 26315, 26316, 26322, 26324, 26325, 26326, 26327, 26332, 26333, 26336, 26337, 26340, 26341, 26342, 26345, 26346, 26347, 26349, 26351, 26357, 26358, 26359, 26360, 26361, 26364, 26365, 26366, 26368, 26369, 26370, 26372, 26376, 26377, 26378, 26379, 26381, 26382, 26386, 26387, 26388, 26389, 26393, 26395, 26396, 26397, 26398, 26401, 26402, 26404, 26405, 26409, 26410, 26411, 26414, 26422, 26425, 26426, 26427, 26428, 26430, 26431, 26432, 26440, 26442, 26444, 26446, 26448, 26452, 26453, 26454, 26456, 26459, 26460, 26461, 26463, 26464, 26465, 26471, 26474, 26476, 26478, 26480, 26481, 26482, 26486, 26487, 26491, 26495, 26496, 26497, 26499, 26500, 26501, 26504, 26506, 26507, 26510, 26512, 26513, 26514, 26515, 26516, 26520, 26521, 26522, 26524, 26526, 26527, 26530, 26531, 26532, 26533, 26540, 26541, 26543, 26550, 26551, 26552, 26553, 26554, 26555, 26557, 26559, 26560, 26567, 26570, 26571, 26576, 26577, 26579, 26580, 26581, 26585, 26588, 26590, 26591, 26592, 26593, 26595, 26596, 26599, 26603, 26605, 26606, 26607, 26608, 26611, 26612, 26613, 26615, 26618, 26619, 26620, 26621, 26622, 26626, 26627, 26628, 26629, 26635, 26636, 26637, 26638, 26639, 26640, 26642, 26644, 26648, 26658, 26659, 26661, 26663, 26667, 26668, 26670, 26671, 26675, 26677, 26678, 26680, 26681, 26684, 26686, 26692, 26693, 26694, 26698, 26699, 26700, 26701, 26703, 26708, 26709, 26711, 26713, 26714, 26715, 26716, 26718, 26719, 26720, 26725, 26726, 26727, 26729, 26731, 26732, 26733, 26734, 26736, 26737, 26738, 26739, 26740, 26744, 26748, 26755, 26756, 26757, 26761, 26763, 26768, 26769, 26772, 26775, 26776, 26777, 26778, 26779, 26781, 26783, 26787, 26791, 26793, 26795, 26796, 26798, 26800, 26801, 26805, 26809, 26811, 26813, 26817, 26819, 26829, 26831, 26833, 26838, 26840, 26841, 26842, 26844, 26847, 26849, 26851, 26852, 26856, 26859, 26863, 26865, 26867, 26868, 26869, 26872, 26874, 26875, 26876, 26878, 26879, 26880, 26881, 26882, 26890, 26892, 26895, 26896, 26903, 26908, 26909, 26912, 26918, 26919, 26922, 26923, 26924, 26925, 26927, 26928, 26929, 26930, 26932, 26935, 26936, 26937, 26938, 26939, 26941, 26943, 26944, 26948, 26950, 26953, 26956, 26958, 26961, 26962, 26966, 26969, 26970, 26972, 26975, 26977, 26979, 26982, 26987, 26988, 26990, 26994, 27001, 27006, 27009, 27010, 27012, 27015, 27016, 27017, 27018, 27020, 27022, 27029, 27031, 27032, 27035, 27039, 27044, 27045, 27047, 27049, 27052, 27053, 27054, 27055, 27056, 27057, 27058, 27059, 27064, 27068, 27070, 27072, 27073, 27077, 27082, 27086, 27087, 27089, 27090, 27092, 27093, 27097, 27098, 27099, 27100, 27101, 27103, 27104, 27106, 27110, 27113, 27115, 27116, 27117, 27118, 27122, 27124, 27128, 27131, 27132, 27133, 27135, 27136, 27137, 27139, 27140, 27142, 27143, 27144, 27145, 27147, 27148, 27149, 27153, 27155, 27156, 27160, 27173, 27174, 27181, 27182, 27186, 27187, 27189, 27192, 27197, 27200, 27201, 27202, 27207, 27208, 27210, 27219, 27222, 27226, 27227, 27228, 27230, 27232, 27234, 27237, 27241, 27242, 27245, 27246, 27247, 27257, 27258, 27262, 27264, 27265, 27266, 27269, 27270, 27272, 27275, 27276, 27277, 27281, 27282, 27283, 27285, 27288, 27290, 27291, 27292, 27293, 27296, 27297, 27304, 27306, 27307, 27315, 27316, 27318, 27320, 27323, 27327, 27328, 27331, 27335, 27337, 27338, 27339, 27340, 27341, 27342, 27346, 27347, 27348, 27349, 27350, 27351, 27356, 27359, 27360, 27361, 27364, 27367, 27369, 27372, 27374, 27375, 27376, 27377, 27380, 27381, 27385, 27386, 27390, 27392, 27394, 27396, 27398, 27399, 27401, 27404, 27406, 27407, 27408, 27409, 27412, 27415, 27416, 27417, 27419, 27420, 27424, 27426, 27427, 27430, 27433, 27440, 27442, 27449, 27450, 27452, 27454, 27455, 27456, 27457, 27458, 27460, 27461, 27462, 27463, 27464, 27469, 27474, 27479, 27480, 27481, 27482, 27483, 27484, 27486, 27487, 27488, 27489, 27490, 27491, 27492, 27493, 27494, 27495, 27497, 27498, 27499, 27501, 27502, 27503, 27505, 27509, 27510, 27511, 27512, 27514, 27517, 27518, 27519, 27520, 27521, 27523, 27524, 27526, 27527, 27528, 27530, 27533, 27534, 27535, 27542, 27545, 27550, 27551, 27552, 27553, 27554, 27556, 27560, 27562, 27563, 27565, 27569, 27571, 27577, 27580, 27581, 27584, 27585, 27588, 27589, 27592, 27593, 27595, 27596, 27597, 27598, 27599, 27602, 27603, 27605, 27611, 27615, 27616, 27618, 27619, 27620, 27621, 27626, 27627, 27630, 27632, 27633, 27634, 27635, 27636, 27639, 27641, 27642, 27645, 27646, 27647, 27648, 27649, 27651, 27653, 27654, 27655, 27659, 27661, 27662, 27663, 27666, 27674, 27675, 27677, 27679, 27680, 27681, 27682, 27684, 27685, 27686, 27688, 27689, 27690, 27691, 27692, 27693, 27700, 27701, 27703, 27704, 27705, 27707, 27708, 27709, 27710, 27714, 27717, 27718, 27720, 27721, 27722, 27723, 27726, 27727, 27728, 27730, 27732, 27734, 27737, 27740, 27741, 27742, 27744, 27747, 27748, 27751, 27752, 27755, 27756, 27757, 27758, 27759, 27760, 27761, 27763, 27766, 27767, 27771, 27772, 27773, 27774, 27777, 27779, 27783, 27784, 27787, 27788, 27789, 27790, 27791, 27792, 27793, 27795, 27801, 27802, 27804, 27807, 27810, 27811, 27812, 27814, 27816, 27817, 27818, 27819, 27820, 27821, 27825, 27826, 27828, 27830, 27831, 27832, 27837, 27839, 27841, 27844, 27845, 27849, 27853, 27854, 27855, 27856, 27857, 27858, 27859, 27864, 27865, 27866, 27867, 27871, 27874, 27875, 27876, 27878, 27881, 27882, 27883, 27884, 27887, 27889, 27890, 27891, 27894, 27895, 27896, 27897, 27898, 27899, 27904, 27910, 27914, 27919, 27920, 27921, 27923, 27925, 27927, 27931, 27932, 27934, 27936, 27939, 27940, 27941, 27942, 27947, 27948, 27950, 27951, 27952, 27953, 27954, 27956, 27958, 27967, 27969, 27970, 27972, 27975, 27976, 27977, 27980, 27981, 27982, 27983, 27984, 27985, 27988, 27989, 27993, 27994, 27995, 27997, 28000, 28001, 28002, 28004, 28005, 28006, 28007, 28008, 28009, 28012, 28014, 28015, 28016, 28018, 28019, 28023, 28024, 28028, 28030, 28031, 28033, 28037, 28040, 28042, 28044, 28046, 28049, 28050, 28051, 28052, 28053, 28054, 28056, 28057, 28058, 28059, 28060, 28062, 28063, 28065, 28066, 28067, 28068, 28070, 28071, 28072, 28073, 28074, 28075, 28076, 28078, 28079, 28080, 28082, 28083, 28084, 28086, 28089, 28091, 28092, 28094, 28097, 28098, 28099, 28102, 28104, 28105, 28106, 28108, 28110, 28112, 28113, 28115, 28117, 28118, 28121, 28123, 28125, 28127, 28129, 28131, 28133, 28134, 28136, 28137, 28138, 28139, 28140, 28143, 28151, 28152, 28159, 28160, 28168, 28169, 28174, 28175, 28179, 28180, 28185, 28186, 28188, 28189, 28190, 28191, 28192, 28193, 28194, 28196, 28197, 28198, 28199, 28200, 28201, 28202, 28203, 28205, 28207, 28208, 28210, 28211, 28212, 28213, 28215, 28216, 28217, 28218, 28219, 28221, 28223, 28224, 28226, 28227, 28228, 28233, 28234, 28238, 28239, 28241, 28243, 28244, 28245, 28246, 28247, 28248, 28253, 28256, 28258, 28259, 28263, 28265, 28268, 28269, 28270, 28271, 28276, 28280, 28284, 28289, 28293, 28294, 28295, 28297, 28299, 28306, 28307, 28308, 28312, 28314, 28317, 28327, 28328, 28329, 28330, 28331, 28335, 28336, 28337, 28342, 28343, 28349, 28350, 28351, 28352, 28353, 28355, 28356, 28360, 28362, 28364, 28368, 28369, 28371, 28372, 28376, 28377, 28380, 28381, 28383, 28384, 28385, 28387, 28389, 28390, 28391, 28392, 28394, 28395, 28399, 28400, 28401, 28404, 28408, 28409, 28410, 28415, 28416, 28420, 28423, 28424, 28425, 28427, 28432, 28434, 28435, 28436, 28437, 28438, 28439, 28441, 28442, 28443, 28446, 28448, 28451, 28453, 28454, 28456, 28457, 28459, 28461, 28462, 28463, 28464, 28468, 28469, 28471, 28474, 28475, 28476, 28477, 28478, 28479, 28480, 28481, 28487, 28491, 28492, 28500, 28501, 28502, 28511, 28514, 28515, 28516, 28517, 28523, 28528, 28533, 28538, 28541, 28544, 28545, 28554, 28556, 28558, 28559, 28560, 28561, 28562, 28565, 28566, 28568, 28569, 28570, 28571, 28572, 28573, 28574, 28575, 28577, 28579, 28580, 28581, 28582, 28583, 28584, 28585, 28586, 28587, 28588, 28589, 28590, 28591, 28592, 28593, 28594, 28595, 28596, 28597, 28598, 28599, 28600, 28601, 28602, 28603, 28605, 28606, 28607, 28608, 28609, 28613, 28614, 28615, 28616, 28617, 28618, 28620, 28622, 28623, 28624, 28625, 28629, 28632, 28633, 28634, 28635, 28638, 28639, 28640, 28642, 28643, 28644, 28645, 28646, 28651, 28653, 28655, 28658, 28662, 28664, 28667, 28668, 28674, 28675, 28680, 28684, 28686, 28687, 28690, 28693, 28694, 28695, 28697, 28699, 28700, 28703, 28704, 28706, 28708, 28709, 28710, 28715, 28719, 28725, 28726, 28728, 28729, 28731, 28732, 28739, 28743, 28745, 28746, 28750, 28753, 28755, 28757, 28759, 28762, 28763, 28765, 28766, 28768, 28771, 28773, 28777, 28779, 28782, 28783, 28785, 28787, 28788, 28790, 28793, 28794, 28798, 28799, 28806, 28810, 28811, 28812, 28813, 28814, 28815, 28816, 28817, 28821, 28824, 28825, 28827, 28829, 28832, 28835, 28837, 28838, 28841, 28844, 28845, 28849, 28852, 28854, 28855, 28859, 28862, 28867, 28868, 28872, 28873, 28875, 28879, 28880, 28882, 28884, 28885, 28886, 28887, 28891, 28893, 28894, 28895, 28896, 28899, 28901, 28904, 28913, 28916, 28918, 28919, 28920, 28927, 28928, 28930, 28938, 28939, 28940, 28941, 28944, 28945, 28947, 28948, 28949, 28950, 28955, 28959, 28960, 28961, 28964, 28965, 28967, 28968, 28969, 28970, 28972, 28973, 28974, 28975, 28978, 28980, 28981, 28982, 28984, 28988, 28989, 28990, 28991, 28992, 28994, 28995, 28997, 28998, 29000, 29001, 29004, 29006, 29007, 29011, 29012, 29013, 29014, 29017, 29018, 29020, 29021, 29022, 29024, 29026, 29030, 29031, 29039, 29040, 29042, 29046, 29048, 29051, 29055, 29057, 29059, 29066, 29069, 29085, 29088, 29091, 29092, 29093, 29095, 29097, 29102, 29104, 29106, 29108, 29109, 29117, 29120, 29122, 29125, 29126, 29127, 29128, 29129, 29130, 29132, 29134, 29135, 29136, 29137, 29139, 29142, 29143, 29145, 29146, 29147, 29150, 29153, 29155, 29156, 29157, 29162, 29163, 29164, 29165, 29172, 29173, 29175, 29177, 29178, 29180, 29182, 29184, 29187, 29189, 29190, 29191, 29192, 29193, 29194, 29195, 29196, 29198, 29199, 29200, 29201, 29205, 29207, 29208, 29211, 29214, 29215, 29216, 29217, 29223, 29226, 29228, 29231, 29232, 29234, 29237, 29244, 29245, 29246, 29249, 29252, 29256, 29259, 29261, 29262, 29263, 29265, 29267, 29268, 29269, 29278, 29279, 29281, 29282, 29283, 29284, 29285, 29291, 29293, 29295, 29297, 29299, 29302, 29303, 29306, 29309, 29310, 29311, 29312, 29313, 29314, 29316, 29319, 29320, 29321, 29327, 29337, 29338, 29340, 29343, 29344, 29345, 29347, 29350, 29351, 29353, 29354, 29356, 29358, 29359, 29360, 29365, 29367, 29369, 29371, 29374, 29377, 29378, 29384, 29389, 29390, 29393, 29396, 29397, 29398, 29401, 29403, 29406, 29407, 29408, 29412, 29418, 29419, 29420, 29423, 29426, 29427, 29428, 29430, 29431, 29432, 29434, 29435, 29437, 29438, 29441, 29442, 29443, 29444, 29445, 29448, 29452, 29460, 29461, 29463, 29464, 29468, 29473, 29474, 29475, 29478, 29480, 29484, 29485, 29486, 29488, 29489, 29490, 29491, 29492, 29496, 29500, 29501, 29504, 29511, 29512, 29514, 29518, 29520, 29522, 29524, 29525, 29526, 29529, 29531, 29532, 29536, 29538, 29540, 29546, 29553, 29554, 29555, 29558, 29559, 29560, 29562, 29563, 29566, 29572, 29573, 29574, 29576, 29577, 29578, 29580, 29583, 29584, 29585, 29587, 29589, 29593, 29596, 29597, 29598, 29600, 29607, 29610, 29624, 29626, 29628, 29629, 29632, 29636, 29637, 29638, 29640, 29641, 29648, 29654, 29655, 29657, 29661, 29664, 29665, 29667, 29677, 29680, 29682, 29683, 29684, 29685, 29691, 29694, 29695, 29698, 29703, 29704, 29706, 29707, 29708, 29709, 29710, 29714, 29722, 29725, 29726, 29727, 29731, 29732, 29737, 29742, 29745, 29747, 29751, 29753, 29754, 29755, 29757, 29759, 29761, 29766, 29767, 29768, 29769, 29771, 29772, 29774, 29779, 29780, 29783, 29784, 29785, 29789, 29790, 29793, 29795, 29796, 29798, 29800, 29801, 29802, 29804, 29805, 29816, 29817, 29819, 29821, 29822, 29823, 29824, 29825, 29826, 29829, 29830, 29834, 29839, 29841, 29842, 29843, 29844, 29845, 29847, 29852, 29853, 29855, 29860, 29862, 29864, 29869, 29870, 29871, 29872, 29879, 29881, 29882, 29883, 29885, 29887, 29889, 29891, 29893, 29899, 29900, 29901, 29903, 29904, 29906, 29911, 29912, 29913, 29914, 29916, 29919, 29920, 29921, 29922, 29924, 29925, 29926, 29929, 29930, 29931, 29933, 29934, 29935, 29940, 29943, 29944, 29945, 29946, 29951, 29952, 29955, 29957, 29960, 29961, 29966, 29967, 29981, 29983, 29986, 29988, 29993, 30000, 30004, 30012, 30013, 30014, 30016, 30017, 30018, 30020, 30022, 30025, 30026, 30027, 30029, 30031, 30032, 30036, 30037, 30040, 30041, 30042, 30045, 30046, 30051, 30052, 30054, 30057, 30058, 30061, 30064, 30065, 30066, 30068, 30069, 30070, 30071, 30073, 30075, 30078, 30079, 30080, 30082, 30088, 30095, 30101, 30114, 30115, 30116, 30117, 30119, 30121, 30123, 30124, 30126, 30128, 30129, 30130, 30131, 30132, 30135, 30140, 30141, 30142, 30144, 30148, 30149, 30152, 30153, 30158, 30159, 30161, 30163, 30164, 30165, 30168, 30170, 30171, 30172, 30173, 30179, 30180, 30181, 30182, 30185, 30187, 30192, 30193, 30199, 30201, 30203, 30205, 30206, 30207, 30210, 30212, 30213, 30214, 30217, 30219, 30221, 30225, 30226, 30228, 30233, 30235, 30238, 30239, 30240, 30241, 30243, 30245, 30246, 30247, 30250, 30251, 30261, 30262, 30263, 30264, 30265, 30267, 30269, 30270, 30274, 30275, 30279, 30281, 30287, 30289, 30292, 30293, 30295, 30296, 30300, 30301, 30302, 30304, 30305, 30306, 30307, 30308, 30310, 30311, 30312, 30318, 30320, 30323, 30324, 30326, 30327, 30328, 30329, 30331, 30334, 30335, 30337, 30339, 30341, 30342, 30343, 30344, 30348, 30349, 30350, 30353, 30354, 30357, 30358, 30359, 30360, 30361, 30362, 30364, 30368, 30371, 30372, 30376, 30377, 30378, 30379, 30383, 30386, 30388, 30389, 30390, 30391, 30392, 30393, 30394, 30396, 30399, 30400, 30401, 30403, 30406, 30407, 30408, 30409, 30414, 30418, 30420, 30421, 30424, 30425, 30427, 30428, 30429, 30430, 30433, 30435, 30436, 30437, 30438, 30440, 30444, 30445, 30447, 30448, 30449, 30450, 30452, 30456, 30458, 30465, 30467, 30469, 30475, 30476, 30477, 30481, 30483, 30484, 30487, 30488, 30489, 30494, 30495, 30496, 30497, 30498, 30499, 30500, 30502, 30503, 30504, 30505, 30513, 30515, 30517, 30519, 30524, 30525, 30526, 30527, 30528, 30529, 30530, 30532, 30533, 30535, 30536, 30537, 30538, 30539, 30540, 30541, 30543, 30544, 30546, 30547, 30548, 30549, 30551, 30552, 30553, 30554, 30555, 30556, 30557, 30558, 30559, 30560, 30562, 30563, 30564, 30565, 30566, 30568, 30570, 30571, 30573, 30574, 30575, 30576, 30577, 30578, 30579, 30580, 30581, 30582, 30583, 30584, 30585, 30586, 30588, 30589, 30590, 30594, 30595, 30596, 30599, 30600, 30602, 30603, 30605, 30608, 30609, 30610, 30611, 30612, 30613, 30615, 30616, 30623, 30624, 30625, 30626, 30628, 30629, 30631, 30632, 30633, 30634, 30638, 30642, 30645, 30648, 30650, 30651, 30653, 30654, 30658, 30663, 30666, 30667, 30669, 30674, 30675, 30677, 30678, 30679, 30680, 30681, 30682, 30683, 30691, 30693, 30696, 30697, 30698, 30699, 30700, 30701, 30702, 30703, 30704, 30705, 30706, 30709, 30710, 30712, 30714, 30715, 30716, 30717, 30718, 30719, 30720, 30723, 30729, 30730, 30733, 30735, 30737, 30739, 30740, 30741, 30742, 30744, 30745, 30746, 30747, 30748, 30749, 30751, 30754, 30756, 30757, 30758, 30759, 30760, 30762, 30763, 30764, 30765, 30766, 30768, 30769, 30771, 30772, 30773, 30774, 30777, 30781, 30784, 30785, 30788, 30789, 30790, 30796, 30798, 30799, 30801, 30803, 30810, 30812, 30814, 30816, 30818, 30819, 30820, 30822, 30823, 30824, 30825, 30826, 30827, 30828, 30831, 30832, 30838, 30840, 30841, 30842, 30844, 30846, 30847, 30848, 30849, 30850, 30851, 30852, 30853, 30855, 30857, 30859, 30864, 30869, 30872, 30878, 30879, 30880, 30881, 30884, 30886, 30889, 30896, 30899, 30900, 30901, 30903, 30904, 30905, 30914, 30916, 30922, 30929, 30936, 30937, 30939, 30941, 30944, 30945, 30946, 30949, 30950, 30955, 30956, 30958, 30960, 30961, 30966, 30967, 30968, 30972, 30973, 30975, 30977, 30978, 30979, 30980, 30981, 30982, 30985, 30986, 30988, 30989, 30996, 30999, 31001, 31002, 31003, 31004, 31005, 31009, 31015, 31016, 31021, 31022, 31024, 31025, 31028, 31032, 31035, 31036, 31038, 31041, 31043, 31045, 31047, 31049, 31059, 31060, 31061, 31062, 31064, 31065, 31067, 31068, 31070, 31073, 31075, 31076, 31078, 31079, 31080, 31082, 31083, 31084, 31085, 31088, 31090, 31091, 31094, 31095, 31096, 31099, 31103, 31106, 31109, 31112, 31115, 31120, 31122, 31124, 31127, 31129, 31133, 31135, 31136, 31141, 31142, 31144, 31145, 31152, 31155, 31157, 31158, 31159, 31160, 31162, 31163, 31164, 31165, 31166, 31168, 31170, 31172, 31173, 31178, 31180, 31181, 31185, 31187, 31190, 31191, 31192, 31196, 31197, 31198, 31201, 31203, 31205, 31211, 31212, 31213, 31216, 31217, 31218, 31223, 31224, 31230, 31232, 31233, 31234, 31235, 31238, 31240, 31242, 31243, 31244, 31245, 31246, 31250, 31251, 31252, 31253, 31255, 31257, 31261, 31262, 31263, 31264, 31265, 31267, 31274, 31275, 31276, 31280, 31286, 31287, 31290, 31291, 31293, 31300, 31305, 31307, 31309, 31310, 31311, 31312, 31313, 31314, 31315, 31316, 31317, 31318, 31319, 31320, 31321, 31322, 31325, 31330, 31332, 31335, 31336, 31341, 31342, 31343, 31344, 31345, 31346, 31347, 31348, 31349, 31350, 31351, 31352, 31353, 31354, 31355, 31356, 31357, 31358, 31359, 31361, 31362, 31363, 31368, 31372, 31373, 31376, 31380, 31381, 31385, 31386, 31396, 31397, 31398, 31399, 31402, 31405, 31406, 31410, 31411, 31414, 31416, 31417, 31419, 31420, 31422, 31426, 31431, 31433, 31434, 31437, 31439, 31440, 31441, 31443, 31446, 31447, 31448, 31451, 31452, 31453, 31454, 31456, 31457, 31459, 31460, 31462, 31463, 31464, 31465, 31466, 31467, 31469, 31470, 31472, 31473, 31474, 31475, 31476, 31478, 31481, 31483, 31486, 31487, 31488, 31490, 31491, 31492, 31494, 31495, 31497, 31499, 31501, 31502, 31503, 31506, 31509, 31511, 31513, 31514, 31515, 31517, 31518, 31521, 31523, 31524, 31525, 31526, 31528, 31530, 31541, 31543, 31544, 31545, 31546, 31547, 31548, 31549, 31551, 31555, 31556, 31557, 31559, 31562, 31564, 31565, 31566, 31567, 31568, 31569, 31570, 31571, 31576, 31577, 31579, 31580, 31583, 31584, 31585, 31586, 31588, 31591, 31593, 31595, 31597, 31600, 31601, 31605, 31610, 31613, 31615, 31616, 31617, 31620, 31625, 31629, 31630, 31631, 31633, 31634, 31635, 31636, 31639, 31642, 31647, 31648, 31649, 31653, 31655, 31656, 31657, 31660, 31662, 31665, 31666, 31669, 31671, 31672, 31673, 31679, 31680, 31681, 31682, 31683, 31686, 31688, 31689, 31691, 31692, 31693, 31694, 31695, 31696, 31697, 31698, 31704, 31705, 31706, 31708, 31709, 31713, 31714, 31716, 31718, 31720, 31721, 31722, 31724, 31725, 31726, 31728, 31729, 31731, 31733, 31738, 31739, 31745, 31749, 31750, 31751, 31754, 31756, 31759, 31760, 31761, 31767, 31768, 31770, 31771, 31773, 31774, 31775, 31776, 31780, 31782, 31785, 31786, 31789, 31791, 31792, 31793, 31794, 31795, 31800, 31802, 31803, 31804, 31805, 31806, 31809, 31811, 31812, 31813, 31819, 31829, 31831, 31836, 31837, 31839, 31842, 31843, 31844, 31846, 31849, 31851, 31852, 31853, 31854, 31856, 31857, 31859, 31864, 31866, 31867, 31868, 31869, 31873, 31878, 31879, 31880, 31882, 31887, 31889, 31890, 31893, 31896, 31897, 31899, 31900, 31903, 31904, 31907, 31910, 31911, 31914, 31915, 31916, 31917, 31918, 31920, 31922, 31925, 31931, 31933, 31938, 31939, 31940, 31942, 31946, 31947, 31948, 31950, 31952, 31954, 31960, 31962, 31963, 31964, 31967, 31969, 31972, 31973, 31974, 31975, 31976, 31977, 31978, 31979, 31980, 31981, 31982, 31983, 31985, 31986, 31987, 31991, 31992, 31993, 31996, 31999, 32001, 32002, 32004, 32006, 32007, 32008, 32010, 32014, 32015, 32017, 32019, 32021, 32024, 32028, 32035, 32037, 32039, 32045, 32047, 32048, 32051, 32052, 32053, 32054, 32060, 32062, 32063, 32068, 32069, 32070, 32073, 32074, 32078, 32081, 32083, 32084, 32087, 32088, 32091, 32093, 32100, 32102, 32106, 32107, 32108, 32110, 32111, 32117, 32124, 32125, 32130, 32132, 32136, 32138, 32139, 32142, 32144, 32147, 32148, 32154, 32158, 32161, 32165, 32166, 32173, 32181, 32183, 32186, 32191, 32193, 32194, 32195, 32196, 32197, 32198, 32199, 32200, 32201, 32202, 32203, 32204, 32206, 32208, 32209, 32210, 32211, 32212, 32214, 32215, 32216, 32223, 32224, 32226, 32227, 32228, 32229, 32236, 32237, 32245, 32247, 32251, 32254, 32255, 32257, 32263, 32264, 32265, 32266, 32268, 32271, 32272, 32273, 32274, 32276, 32278, 32283, 32284, 32285, 32286, 32289, 32290, 32291, 32292, 32293, 32297, 32300, 32304, 32314, 32315, 32317, 32318, 32319, 32321, 32322, 32323, 32324, 32325, 32326, 32327, 32328, 32330, 32332, 32333, 32334, 32335, 32337, 32338, 32339, 32344, 32346, 32348, 32349, 32351, 32355, 32356, 32359, 32362, 32364, 32366, 32368, 32369, 32372, 32373, 32374, 32379, 32381, 32383, 32384, 32385, 32386, 32387, 32388, 32391, 32394, 32395, 32397, 32398, 32400, 32401, 32402, 32403, 32404, 32405, 32406, 32407, 32408, 32410, 32413, 32414, 32415, 32417, 32419, 32422, 32425, 32428, 32430, 32432, 32434, 32435, 32438, 32439, 32440, 32441, 32445, 32450, 32455, 32458, 32459, 32464, 32465, 32469, 32472, 32474, 32479, 32480, 32481, 32487, 32488, 32497, 32508, 32512, 32515, 32516, 32519, 32523, 32525, 32527, 32532, 32545, 32549, 32551, 32553, 32556, 32557, 32558, 32560, 32563, 32564, 32571, 32573, 32575, 32576, 32577, 32580, 32582, 32583, 32589, 32590, 32591, 32594, 32595, 32600, 32602, 32604, 32606, 32610, 32612, 32613, 32625, 32627, 32628, 32630, 32631, 32632, 32634, 32641, 32642, 32645, 32648, 32649, 32651, 32661, 32663, 32666, 32669, 32672, 32676, 32681, 32683, 32694, 32700, 32706, 32710, 32713, 32714, 32717, 32735, 32742, 32747, 32751, 32753, 32755, 32756, 32760, 32761, 32763, 32764, 32771, 32772, 32779, 32783, 32790, 32793, 32795, 32797, 32798, 32799, 32800, 32801, 32804, 32805, 32813, 32815, 32817, 32821, 32823, 32828, 32831, 32837, 32841, 32845, 32848, 32851, 32853, 32854, 32857, 32858, 32861, 32862, 32863, 32864, 32865, 32866, 32871, 32873, 32874, 32876, 32877, 32878, 32880, 32883, 32890, 32891, 32893, 32899, 32905, 32907, 32911, 32912, 32913, 32921, 32927, 32928, 32933, 32935, 32942, 32943, 32945, 32949, 32951, 32955, 32956, 32962, 32969, 32971, 32976, 32980, 32986, 32988, 32991, 32998, 33000, 33007, 33009, 33013, 33017, 33019, 33020, 33021, 33027, 33030, 33034, 33036, 33038, 33040, 33043, 33044, 33047, 33048, 33049, 33052, 33053, 33057, 33058, 33059, 33063, 33065, 33067, 33073, 33076, 33077, 33079, 33084, 33086, 33090, 33095, 33097, 33100, 33101, 33102, 33103, 33104, 33105, 33112, 33114, 33115, 33117, 33118, 33119, 33120, 33124, 33127, 33128, 33130, 33134, 33140, 33141, 33143, 33145, 33147, 33151, 33153, 33154, 33155, 33156, 33157, 33158, 33163, 33164, 33167, 33169, 33170, 33174, 33176, 33180, 33181, 33182, 33186, 33187, 33188, 33189, 33190, 33191, 33197, 33206, 33213, 33214, 33217, 33218, 33219, 33223, 33229, 33231, 33236, 33237, 33240, 33243, 33245, 33246, 33247, 33248, 33250, 33252, 33253, 33254, 33256, 33258, 33259, 33262, 33264, 33266, 33267, 33269, 33272, 33275, 33279, 33281, 33284, 33288, 33289, 33294, 33295, 33300, 33301, 33302, 33303, 33305, 33306, 33316, 33318, 33319, 33320, 33321, 33327, 33331, 33332, 33333, 33335, 33336, 33340, 33345, 33355, 33360, 33362, 33364, 33366, 33367, 33368, 33370, 33375, 33378, 33383, 33386, 33387, 33390, 33393, 33402, 33403, 33405, 33408, 33410, 33412, 33413, 33416, 33417, 33422, 33425, 33428, 33429, 33437, 33438, 33441, 33444, 33446, 33447, 33448, 33450, 33456, 33457, 33458, 33460, 33461, 33462, 33465, 33466, 33468, 33469, 33471, 33475, 33480, 33484, 33489, 33490, 33491, 33493, 33494, 33497, 33498, 33499, 33500, 33501, 33502, 33509, 33517, 33518, 33519, 33521, 33523, 33530, 33532, 33533, 33538, 33539, 33540, 33543, 33545, 33552, 33555, 33557, 33565, 33566, 33567, 33569, 33570, 33571, 33573, 33574, 33575, 33583, 33585, 33587, 33592, 33593, 33604, 33605, 33616, 33618, 33619, 33621, 33625, 33626, 33627, 33633, 33634, 33635, 33636, 33640, 33643, 33645, 33651, 33652, 33653, 33658, 33666, 33667, 33669, 33670, 33675, 33680, 33684, 33687, 33688, 33689, 33690, 33699, 33700, 33701, 33703, 33704, 33705, 33706, 33708, 33709, 33710, 33712, 33717, 33718, 33722, 33723, 33724, 33726, 33727, 33732, 33733, 33734, 33735, 33736, 33737, 33739, 33740, 33741, 33745, 33762, 33765, 33766, 33767, 33771, 33772, 33773, 33778, 33779, 33780, 33782, 33784, 33786, 33789, 33792, 33795, 33798, 33799, 33802, 33803, 33804, 33807, 33816, 33820, 33821, 33822, 33823, 33825, 33827, 33829, 33831, 33832, 33839, 33841, 33842, 33844, 33847, 33848, 33850, 33852, 33857, 33861, 33862, 33863, 33864, 33868, 33870, 33871, 33873, 33876, 33877, 33878, 33881, 33882, 33886, 33892, 33894, 33895, 33896, 33897, 33898, 33899, 33900, 33901, 33902, 33903, 33905, 33907, 33909, 33910, 33912, 33913, 33915, 33917, 33921, 33924, 33925, 33927, 33928, 33929, 33930, 33931, 33932, 33934, 33941, 33942, 33943, 33952, 33953, 33955, 33956, 33957, 33958, 33961, 33963, 33964, 33967, 33968, 33971, 33973, 33974, 33977, 33978, 33980, 33982, 33983, 33986, 33988, 33989, 33994, 33997, 33999, 34001, 34005, 34006, 34007, 34009, 34013, 34019, 34020, 34022, 34023, 34025, 34027, 34028, 34029, 34030, 34032, 34033, 34035, 34037, 34038, 34043, 34047, 34048, 34049, 34057, 34059, 34061, 34065, 34067, 34069, 34071, 34072, 34073, 34074, 34076, 34077, 34078, 34079, 34080, 34082, 34083, 34085, 34088, 34094, 34095, 34096, 34098, 34101, 34103, 34104, 34108, 34109, 34118, 34121, 34122, 34125, 34133, 34135, 34138, 34139, 34143, 34144, 34146, 34147, 34148, 34150, 34153, 34154, 34155, 34158, 34163, 34167, 34170, 34171, 34172, 34179, 34183, 34185, 34186, 34189, 34190, 34195, 34199, 34203, 34204, 34206, 34208, 34210, 34211, 34212, 34214, 34216, 34217, 34218, 34219, 34222, 34223, 34225, 34226, 34227, 34228, 34230, 34234, 34235, 34236, 34237, 34238, 34239, 34240, 34241, 34243, 34245, 34247, 34248, 34249, 34252, 34257, 34259, 34260, 34262, 34264, 34274, 34275, 34276, 34277, 34281, 34283, 34287, 34289, 34290, 34291, 34293, 34297, 34301, 34302, 34306, 34308, 34309, 34314, 34316, 34319, 34326, 34327, 34328, 34331, 34339, 34340, 34341, 34342, 34349, 34354, 34355, 34358, 34361, 34362, 34364, 34365, 34366, 34368, 34370, 34373, 34377, 34380, 34382, 34383, 34384, 34387, 34391, 34392, 34395, 34398, 34399, 34402, 34403, 34410, 34413, 34414, 34420, 34421, 34422, 34423, 34424, 34425, 34433, 34434, 34435, 34437, 34438, 34439, 34440, 34442, 34445, 34446, 34448, 34455, 34456, 34458, 34459, 34460, 34461, 34462, 34466, 34467, 34476, 34479, 34482, 34483, 34484, 34485, 34486, 34489, 34491, 34497, 34498, 34506, 34519, 34521, 34522, 34528, 34529, 34532, 34533, 34535, 34536, 34537, 34540, 34541, 34543, 34544, 34546, 34550, 34552, 34553, 34558, 34559, 34562, 34565, 34566, 34567, 34568, 34571, 34576, 34580, 34584, 34585, 34586, 34587, 34588, 34594, 34595, 34601, 34603, 34605, 34608, 34609, 34612, 34613, 34614, 34615, 34618, 34620, 34622, 34630, 34631, 34635, 34639, 34640, 34644, 34649, 34651, 34652, 34653, 34654, 34660, 34661, 34662, 34665, 34666, 34667, 34668, 34672, 34678, 34682, 34686, 34687, 34688, 34690, 34692, 34693, 34696, 34697, 34701, 34702, 34712, 34713, 34718, 34722, 34723, 34725, 34728, 34731, 34732, 34734, 34736, 34737, 34739, 34746, 34747, 34754, 34756, 34758, 34761, 34762, 34763, 34764, 34765, 34766, 34767, 34768, 34770, 34773, 34774, 34777, 34778, 34779, 34781, 34783, 34786, 34788, 34789, 34790, 34793, 34795, 34796, 34799, 34800, 34803, 34804, 34806, 34807, 34808, 34810, 34811, 34813, 34820, 34823, 34824, 34825, 34827, 34828, 34829, 34832, 34833, 34837, 34840, 34841, 34843, 34845, 34847, 34849, 34850, 34853, 34854, 34856, 34859, 34860, 34861, 34863, 34866, 34868, 34870, 34872, 34873, 34875, 34876, 34877, 34883, 34890, 34891, 34893, 34895, 34898, 34899, 34900, 34901, 34902, 34904, 34905, 34906, 34907, 34909, 34910, 34911, 34917, 34918, 34929, 34930, 34931, 34933, 34935, 34936, 34939, 34941, 34943, 34946, 34947, 34949, 34950, 34951, 34952, 34954, 34956, 34957, 34958, 34959, 34960, 34963, 34964, 34968, 34971, 34972, 34974, 34981, 34982, 34984, 34989, 34990, 34991, 34993, 34994, 34996, 34998, 35002, 35003, 35005, 35007, 35008, 35014, 35017, 35020, 35021, 35023, 35026, 35028, 35036, 35037, 35038, 35039, 35042, 35045, 35046, 35052, 35056, 35060, 35061, 35065, 35069, 35073, 35074, 35075, 35076, 35078, 35080, 35088, 35091, 35093, 35094, 35096, 35098, 35102, 35103, 35104, 35105, 35106, 35107, 35113, 35114, 35115, 35116, 35117, 35125, 35127, 35129, 35130, 35131, 35132, 35133, 35136, 35137, 35142, 35144, 35152, 35153, 35155, 35156, 35157, 35158, 35159, 35161, 35162, 35163, 35165, 35166, 35167, 35169, 35172, 35173, 35174, 35176, 35178, 35179, 35180, 35181, 35182, 35183, 35187, 35189, 35191, 35192, 35201, 35204, 35215, 35218, 35224, 35225, 35228, 35232, 35233, 35235, 35237, 35238, 35239, 35241, 35242, 35245, 35248, 35255, 35260, 35262, 35264, 35267, 35269, 35271, 35272, 35273, 35274, 35278, 35281, 35284, 35285, 35286, 35287, 35288, 35290, 35291, 35292, 35293, 35298, 35302, 35303, 35306, 35307, 35309, 35310, 35311, 35312, 35316, 35321, 35323, 35324, 35328, 35331, 35333, 35337, 35340, 35342, 35343, 35345, 35346, 35348, 35351, 35352, 35353, 35354, 35355, 35356, 35363, 35365, 35367, 35372, 35373, 35376, 35377, 35381, 35383, 35384, 35387, 35388, 35389, 35390, 35391, 35394, 35400, 35402, 35405, 35408, 35411, 35412, 35414, 35415, 35416, 35417, 35418, 35419, 35420, 35421, 35423, 35431, 35432, 35436, 35437, 35441, 35442, 35443, 35445, 35447, 35448, 35456, 35459, 35461, 35464, 35465, 35466, 35467, 35471, 35472, 35477, 35478, 35481, 35484, 35486, 35487, 35489, 35491, 35493, 35499, 35502, 35504, 35505, 35506, 35508, 35509, 35512, 35513, 35515, 35516, 35517, 35519, 35520, 35522, 35523, 35524, 35525, 35526, 35529, 35530, 35531, 35532, 35533, 35535, 35536, 35537, 35539, 35540, 35542, 35544, 35546, 35547, 35548, 35550, 35552, 35555, 35562, 35563, 35564, 35566, 35568, 35569, 35570, 35571, 35572, 35579, 35580, 35584, 35585, 35587, 35588, 35589, 35591, 35594, 35598, 35600, 35601, 35604, 35605, 35606, 35607, 35610, 35613, 35614, 35615, 35616, 35627, 35630, 35631, 35632, 35634, 35636, 35637, 35638, 35639, 35641, 35643, 35646, 35647, 35650, 35653, 35654, 35655, 35659, 35660, 35665, 35666, 35667, 35670, 35672, 35676, 35677, 35680, 35685, 35686, 35688, 35689, 35691, 35692, 35694, 35696, 35697, 35700, 35703, 35704, 35705, 35708, 35716, 35717, 35718, 35719, 35721, 35722, 35725, 35727, 35729, 35732, 35733, 35735, 35738, 35740, 35743, 35745, 35746, 35747, 35750, 35752, 35753, 35755, 35756, 35757, 35758, 35763, 35769, 35770, 35771, 35773, 35775, 35781, 35785, 35786, 35787, 35791, 35792, 35794, 35796, 35802, 35803, 35804, 35806, 35807, 35821, 35825, 35826, 35828, 35830, 35832, 35839, 35840, 35843, 35845, 35846, 35847, 35849, 35856, 35858, 35859, 35860, 35863, 35864, 35867, 35870, 35883, 35885, 35886, 35889, 35892, 35898, 35899, 35900, 35910, 35922, 35924, 35925, 35930, 35935, 35937, 35940, 35945, 35946, 35948, 35952, 35956, 35958, 35959, 35960, 35961, 35962, 35964, 35965, 35966, 35967, 35968, 35970, 35971, 35973, 35974, 35975, 35978, 35983, 35987, 35988, 35990, 35992, 35998, 35999, 36005, 36006, 36007, 36009, 36010, 36016, 36017, 36018, 36021, 36022, 36024, 36025, 36027, 36031, 36032, 36033, 36034, 36035, 36041, 36044, 36045, 36046, 36047, 36049, 36050, 36051, 36054, 36055, 36056, 36061, 36064, 36066, 36069, 36071, 36072, 36074, 36076, 36077, 36078, 36080, 36086, 36087, 36088, 36090, 36094, 36097, 36099, 36100, 36101, 36103, 36105, 36108, 36113, 36116, 36117, 36119, 36120, 36121, 36124, 36125, 36126, 36128, 36129, 36134, 36138, 36139, 36140, 36143, 36144, 36145, 36147, 36148, 36150, 36155, 36156, 36159, 36165, 36166, 36167, 36169, 36177, 36179, 36181, 36184, 36188, 36194, 36197, 36200, 36203, 36205, 36207, 36210, 36217, 36218, 36220, 36222, 36223, 36226, 36228, 36234, 36235, 36238, 36239, 36241, 36245, 36247, 36248, 36249, 36250, 36253, 36254, 36255, 36260, 36263, 36264, 36265, 36266, 36268, 36270, 36273, 36274, 36275, 36276, 36277, 36281, 36283, 36288, 36291, 36294, 36295, 36298, 36303, 36307, 36308, 36310, 36311, 36313, 36319, 36323, 36325, 36328, 36329, 36332, 36333, 36334, 36335, 36336, 36337, 36338, 36340, 36342, 36343, 36346, 36348, 36350, 36354, 36358, 36359, 36361, 36362, 36364, 36366, 36370, 36372, 36380, 36382, 36384, 36386, 36388, 36396, 36397, 36398, 36399, 36402, 36404, 36412, 36415, 36416, 36419, 36420, 36422, 36424, 36432, 36433, 36434, 36436, 36440, 36442, 36443, 36449, 36452, 36454, 36455, 36458, 36459, 36461, 36462, 36465, 36467, 36469, 36474, 36477, 36478, 36482, 36484, 36486, 36487, 36489, 36492, 36495, 36496, 36497, 36498, 36499, 36500, 36502, 36503, 36505, 36507, 36516, 36517, 36518, 36519, 36521, 36524, 36526, 36529, 36531, 36537, 36542, 36543, 36544, 36545, 36550, 36554, 36560, 36562, 36565, 36569, 36570, 36571, 36573, 36574, 36576, 36581, 36582, 36583, 36585, 36586, 36587, 36589, 36590, 36592, 36593, 36595, 36598, 36602, 36607, 36608, 36610, 36611, 36613, 36617, 36625, 36626, 36627, 36628, 36631, 36634, 36636, 36637, 36639, 36642, 36646, 36648, 36650, 36651, 36653, 36657, 36659, 36661, 36662, 36663, 36664, 36665, 36666, 36667, 36668, 36671, 36673, 36675, 36676, 36677, 36679, 36682, 36683, 36685, 36687, 36688, 36690, 36691, 36692, 36693, 36694, 36696, 36698, 36699, 36700, 36701, 36702, 36704, 36705, 36706, 36707, 36708, 36712, 36713, 36714, 36715, 36717, 36719, 36720, 36721, 36722, 36723, 36727, 36728, 36729, 36730, 36731, 36735, 36736, 36737, 36738, 36742, 36745, 36746, 36749, 36750, 36752, 36754, 36756, 36757, 36758, 36760, 36762, 36763, 36764, 36765, 36766, 36768, 36769, 36770, 36771, 36774, 36775, 36776, 36777, 36778, 36779, 36780, 36782, 36783, 36784, 36785, 36786, 36789, 36792, 36796, 36799, 36801, 36802, 36805, 36806, 36807, 36808, 36812, 36815, 36817, 36818, 36821, 36823, 36825, 36827, 36828, 36831, 36832, 36833, 36840, 36843, 36844, 36847, 36849, 36850, 36853, 36854, 36858, 36859, 36861, 36862, 36864, 36866, 36869, 36870, 36871, 36873, 36874, 36876, 36877, 36878, 36879, 36880, 36881, 36882, 36884, 36886, 36887, 36889, 36896, 36897, 36898, 36900, 36903, 36904, 36905, 36906, 36911, 36914, 36915, 36917, 36919, 36921, 36925, 36926, 36928, 36929, 36930, 36931, 36933, 36934, 36935, 36942, 36944, 36948, 36949, 36954, 36957, 36966, 36969, 36970, 36971, 36972, 36973, 36975, 36976, 36980, 36981, 36982, 36983, 36985, 36986, 36987, 36989, 36990, 36992, 36994, 36995, 36998, 36999, 37000, 37001, 37002, 37004, 37005, 37006, 37009, 37010, 37011, 37012, 37013, 37014, 37016, 37017, 37019, 37024, 37028, 37031, 37036, 37039, 37041, 37043, 37045, 37046, 37047, 37049, 37050, 37051, 37053, 37060, 37061, 37062, 37063, 37065, 37067, 37070, 37072, 37073, 37075, 37077, 37079, 37084, 37085, 37086, 37087, 37096, 37100, 37102, 37105, 37109, 37110, 37113, 37115, 37118, 37119, 37120, 37122, 37123, 37124, 37125, 37126, 37127, 37129, 37130, 37134, 37135, 37137, 37138, 37139, 37145, 37152, 37155, 37157, 37160, 37162, 37163, 37164, 37167, 37169, 37171, 37172, 37174, 37176, 37177, 37181, 37184, 37185, 37186, 37190, 37191, 37193, 37196, 37199, 37200, 37201, 37202, 37203, 37204, 37205, 37206, 37207, 37211, 37212, 37216, 37217, 37221, 37222, 37223, 37224, 37225, 37226, 37230, 37233, 37237, 37238, 37239, 37242, 37245, 37246, 37247, 37248, 37249, 37251, 37253, 37254, 37255, 37260, 37261, 37262, 37263, 37264, 37272, 37273, 37274, 37275, 37278, 37280, 37281, 37284, 37286, 37290, 37291, 37292, 37293, 37294, 37295, 37299, 37301, 37304, 37305, 37306, 37308, 37309, 37312, 37316, 37321, 37323, 37324, 37325, 37326, 37330, 37332, 37334, 37335, 37336, 37339, 37343, 37344, 37346, 37350, 37354, 37356, 37358, 37359, 37362, 37363, 37367, 37368, 37374, 37379, 37380, 37381, 37386, 37387, 37389, 37391, 37393, 37394, 37401, 37402, 37404, 37405, 37406, 37407, 37413, 37414, 37415, 37417, 37418, 37420, 37421, 37422, 37432, 37434, 37438, 37441, 37442, 37443, 37451, 37452, 37454, 37456, 37457, 37459, 37463, 37464, 37465, 37466, 37467, 37468, 37469, 37472, 37473, 37474, 37475, 37476, 37478, 37479, 37480, 37488, 37492, 37497, 37500, 37503, 37504, 37509, 37514, 37516, 37520, 37521, 37522, 37523, 37524, 37526, 37529, 37532, 37536, 37538, 37539, 37541, 37542, 37543, 37547, 37548, 37550, 37554, 37555, 37556, 37557, 37558, 37562, 37563, 37564, 37568, 37569, 37571, 37572, 37575, 37577, 37578, 37579, 37580, 37582, 37583, 37584, 37586, 37587, 37589, 37590, 37591, 37596, 37598, 37599, 37600, 37602, 37606, 37607, 37608, 37611, 37613, 37614, 37615, 37617, 37621, 37623, 37624, 37628, 37629, 37630, 37634, 37636, 37638, 37639, 37641, 37642, 37644, 37645, 37648, 37654, 37657, 37658, 37659, 37665, 37667, 37668, 37669, 37670, 37671, 37672, 37673, 37674, 37676, 37681, 37682, 37683, 37686, 37689, 37692, 37693, 37695, 37703, 37705, 37707, 37708, 37709, 37710, 37711, 37713, 37714, 37715, 37716, 37717, 37718, 37719, 37720, 37721, 37723, 37726, 37727, 37728, 37730, 37731, 37735, 37736, 37737, 37742, 37743, 37744, 37745, 37746, 37749, 37750, 37751, 37753, 37754, 37756, 37757, 37758, 37759, 37761, 37762, 37766, 37767, 37769, 37770, 37771, 37773, 37774, 37775, 37782, 37784, 37785, 37786, 37787, 37789, 37790, 37793, 37798, 37800, 37801, 37805, 37806, 37811, 37814, 37819, 37821, 37823, 37824, 37825, 37827, 37828, 37832, 37835, 37839, 37841, 37842, 37843, 37844, 37845, 37848, 37851, 37853, 37856, 37857, 37861, 37862, 37865, 37870, 37871, 37872, 37873, 37877, 37878, 37881, 37882, 37888, 37890, 37892, 37893, 37895, 37896, 37897, 37898, 37899, 37901, 37905, 37908, 37909, 37911, 37912, 37915, 37916, 37917, 37918, 37920, 37921, 37924, 37925, 37926, 37929, 37930, 37932, 37933, 37935, 37938, 37939, 37945, 37949, 37950, 37952, 37954, 37956, 37958, 37961, 37963, 37964, 37966, 37967, 37971, 37973, 37975, 37981, 37982, 37983, 37986, 37988, 37989, 37991, 37994, 37996, 38002, 38004, 38005, 38007, 38008, 38009, 38010, 38012, 38013, 38014, 38018, 38023, 38024, 38025, 38027, 38028, 38033, 38035, 38036, 38037, 38038, 38039, 38040, 38043, 38044, 38052, 38055, 38059, 38061, 38065, 38067, 38069, 38071, 38074, 38075, 38078, 38082, 38084, 38086, 38087, 38091, 38094, 38095, 38096, 38097, 38101, 38104, 38109, 38113, 38114, 38115, 38117, 38119, 38123, 38124, 38125, 38126, 38134, 38137, 38138, 38139, 38140, 38141, 38148, 38152, 38153, 38155, 38156, 38157, 38158, 38160, 38162, 38166, 38167, 38168, 38170, 38172, 38175, 38176, 38177, 38181, 38184, 38186, 38188, 38189, 38190, 38192, 38194, 38196, 38198, 38199, 38202, 38208, 38213, 38214, 38218, 38219, 38222, 38225, 38226, 38229, 38230, 38231, 38233, 38240, 38242, 38243, 38244, 38248, 38251, 38253, 38255, 38258, 38259, 38260, 38262, 38264, 38265, 38267, 38268, 38269, 38270, 38271, 38272, 38274, 38276, 38277, 38279, 38281, 38282, 38284, 38287, 38288, 38289, 38290, 38291, 38293, 38294, 38295, 38298, 38299, 38300, 38303, 38304, 38305, 38306, 38307, 38308, 38309, 38310, 38311, 38314, 38315, 38316, 38317, 38320, 38322, 38324, 38325, 38331, 38334, 38336, 38338, 38339, 38340, 38345, 38346, 38348, 38350, 38351, 38352, 38354, 38357, 38360, 38364, 38365, 38368, 38369, 38371, 38373, 38374, 38376, 38379, 38380, 38381, 38385, 38386, 38387, 38388, 38389, 38390, 38391, 38393, 38397, 38400, 38401, 38402, 38403, 38404, 38405, 38407, 38408, 38409, 38411, 38412, 38413, 38414, 38415, 38417, 38418, 38419, 38421, 38424, 38425, 38432, 38435, 38436, 38438, 38439, 38440, 38444, 38445, 38446, 38447, 38449, 38451, 38452, 38453, 38454, 38458, 38461, 38462, 38463, 38465, 38466, 38468, 38469, 38470, 38474, 38475, 38476, 38477, 38478, 38480, 38483, 38485, 38486, 38489, 38494, 38495, 38496, 38497, 38498, 38500, 38501, 38502, 38505, 38506, 38509, 38510, 38511, 38512, 38513, 38514, 38515, 38517, 38521, 38528, 38529, 38531, 38532, 38533, 38535, 38537, 38539, 38540, 38541, 38542, 38545, 38547, 38550, 38552, 38556, 38558, 38559, 38560, 38561, 38563, 38564, 38565, 38566, 38567, 38568, 38569, 38570, 38572, 38576, 38577, 38578, 38585, 38586, 38593, 38595, 38596, 38597, 38599, 38601, 38603, 38604, 38605, 38612, 38613, 38614, 38615, 38616, 38617, 38623, 38628, 38631, 38632, 38633, 38637, 38638, 38639, 38643, 38645, 38646, 38654, 38655, 38658, 38659, 38660, 38663, 38664, 38667, 38668, 38669, 38670, 38671, 38672, 38674, 38681, 38683, 38686, 38687, 38688, 38689, 38690, 38692, 38695, 38696, 38697, 38698, 38699, 38700, 38701, 38703, 38708, 38710, 38713, 38715, 38716, 38719, 38720, 38724, 38726, 38727, 38730, 38731, 38735, 38736, 38738, 38740, 38741, 38742, 38743, 38744, 38745, 38746, 38750, 38751, 38752, 38753, 38756, 38758, 38762, 38763, 38764, 38765, 38766, 38767, 38769, 38772, 38782, 38786, 38789, 38791, 38792, 38793, 38795, 38796, 38797, 38799, 38801, 38802, 38806, 38807, 38808, 38810, 38811, 38813, 38816, 38817, 38819, 38820, 38821, 38823, 38824, 38825, 38827, 38828, 38829, 38830, 38833, 38836, 38837, 38838, 38839, 38841, 38845, 38846, 38848, 38853, 38858, 38859, 38860, 38861, 38864, 38866, 38867, 38870, 38871, 38875, 38884, 38885, 38886, 38887, 38888, 38889, 38891, 38892, 38895, 38897, 38902, 38904, 38905, 38906, 38907, 38910, 38913, 38915, 38923, 38925, 38926, 38927, 38929, 38930, 38931, 38934, 38935, 38936, 38939, 38945, 38947, 38951, 38952, 38954, 38955, 38957, 38958, 38959, 38960, 38961, 38962, 38963, 38964, 38967, 38970, 38972, 38973, 38974, 38976, 38977, 38978, 38981, 38983, 38984, 38987, 38989, 38990, 38991, 38992, 38993, 38994, 38995, 38997, 38998, 39000, 39002, 39004, 39006, 39012, 39014, 39015, 39017, 39018, 39019, 39020, 39022, 39024, 39026, 39027, 39028, 39029, 39031, 39033, 39034, 39035, 39039, 39040, 39041, 39042, 39045, 39046, 39047, 39048, 39049, 39050, 39051, 39053, 39056, 39057, 39058, 39061, 39063, 39067, 39070, 39072, 39073, 39074, 39075, 39076, 39077, 39078, 39080, 39081, 39087, 39090, 39092, 39094, 39095, 39096, 39097, 39098, 39099, 39100, 39104, 39108, 39114, 39115, 39116, 39118, 39119, 39122, 39124, 39127, 39129, 39130, 39131, 39132, 39138, 39139, 39140, 39142, 39143, 39145, 39148, 39149, 39152, 39154, 39155, 39163, 39164, 39167, 39171, 39172, 39173, 39176, 39178, 39179, 39181, 39184, 39187, 39188, 39189, 39191, 39192, 39193, 39194, 39196, 39198, 39199, 39201, 39205, 39206, 39213, 39214, 39221, 39227, 39229, 39234, 39235, 39238, 39239, 39240, 39241, 39242, 39246, 39248, 39260, 39263, 39266, 39267, 39268, 39269, 39273, 39274, 39275, 39282, 39283, 39288, 39289, 39291, 39292, 39293, 39294, 39297, 39298, 39299, 39301, 39302, 39305, 39307, 39308, 39309, 39311, 39312, 39313, 39314, 39315, 39317, 39318, 39319, 39321, 39323, 39324, 39331, 39332, 39335, 39337, 39338, 39340, 39342, 39344, 39346, 39348, 39351, 39353, 39354, 39355, 39356, 39359, 39360, 39361, 39362, 39363, 39365, 39366, 39367, 39369, 39370, 39371, 39372, 39373, 39374, 39375, 39376, 39380, 39382, 39386, 39388, 39389, 39391, 39393, 39395, 39398, 39401, 39403, 39404, 39406, 39408, 39411, 39412, 39414, 39416, 39418, 39424, 39425, 39426, 39427, 39430, 39439, 39441, 39443, 39446, 39452, 39459, 39460, 39467, 39468, 39469, 39471, 39474, 39476, 39477, 39480, 39484, 39485, 39486, 39487, 39489, 39495, 39498, 39499, 39505, 39506, 39507, 39508, 39510, 39513, 39514, 39515, 39516, 39517, 39518, 39522, 39529, 39530, 39531, 39533, 39534, 39536, 39537, 39539, 39544, 39545, 39546, 39547, 39548, 39552, 39554, 39555, 39556, 39557, 39559, 39565, 39566, 39567, 39571, 39572, 39575, 39576, 39577, 39583, 39584, 39585, 39586, 39587, 39588, 39589, 39591, 39592, 39593, 39594, 39596, 39597, 39598, 39599, 39600, 39602, 39604, 39605, 39607, 39608, 39610, 39612, 39615, 39617, 39620, 39621, 39622, 39623, 39624, 39627, 39628, 39630, 39632, 39633, 39634, 39635, 39636, 39638, 39639, 39643, 39647, 39650, 39651, 39652, 39653, 39654, 39656, 39658, 39659, 39662, 39663, 39664, 39667, 39668, 39674, 39677, 39679, 39683, 39686, 39688, 39691, 39693, 39694, 39695, 39696, 39700, 39701, 39703, 39705, 39706, 39709, 39711, 39713, 39714, 39715, 39716, 39717, 39719, 39721, 39722, 39723, 39726, 39727, 39730, 39732, 39735, 39736, 39741, 39742, 39743, 39744, 39745, 39746, 39747, 39748, 39749, 39750, 39751, 39754, 39757, 39762, 39763, 39764, 39769, 39770, 39772, 39774, 39775, 39777, 39778, 39779, 39780, 39781, 39782, 39784, 39785, 39786, 39790, 39791, 39794, 39795, 39796, 39797, 39798, 39799, 39803, 39804, 39806, 39808, 39809, 39811, 39813, 39818, 39825, 39826, 39827, 39828, 39834, 39837, 39838, 39840, 39841, 39842, 39844, 39845, 39846, 39849, 39851, 39853, 39854, 39857, 39858, 39859, 39860, 39862, 39863, 39864, 39867, 39868, 39870, 39872, 39874, 39876, 39880, 39881, 39882, 39883, 39885, 39886, 39888, 39889, 39893, 39894, 39895, 39896, 39897, 39899, 39900, 39901, 39902, 39905, 39906, 39909, 39910, 39915, 39916, 39918, 39919, 39920, 39922, 39923, 39924, 39929, 39930, 39934, 39935, 39936, 39937, 39938, 39939, 39940, 39942, 39944, 39945, 39946, 39948, 39951, 39953, 39954, 39959, 39960, 39961, 39963, 39966, 39969, 39971, 39974, 39975, 39977, 39978, 39979, 39982, 39985, 39986, 39989, 39991, 39992, 39994, 39995, 39997, 39998, 40004, 40005, 40006, 40008, 40012, 40014, 40017, 40018, 40020, 40023, 40024, 40025, 40028, 40032, 40038, 40039, 40040, 40041, 40046, 40048, 40049, 40050, 40052, 40055, 40057, 40060, 40062, 40063, 40064, 40067, 40068, 40070, 40074, 40075, 40079, 40082, 40083, 40084, 40086, 40087, 40092, 40093, 40095, 40098, 40100, 40102, 40103, 40104, 40109, 40110, 40113, 40115, 40116, 40117, 40118, 40120, 40121, 40124, 40125, 40126, 40131, 40132, 40133, 40135, 40136, 40138, 40139, 40140, 40145, 40146, 40148, 40152, 40159, 40169, 40173, 40175, 40185, 40187, 40189, 40194, 40195, 40198, 40199, 40207, 40208, 40209, 40212, 40213, 40215, 40216, 40222, 40236, 40237, 40245, 40246, 40249, 40252, 40253, 40256, 40257, 40258, 40261, 40265, 40266, 40267, 40269, 40271, 40275, 40280, 40283, 40284, 40286, 40288, 40289, 40293, 40294, 40295, 40297, 40298, 40300, 40304, 40307, 40309, 40313, 40319, 40320, 40322, 40323, 40324, 40326, 40330, 40335, 40341, 40343, 40345, 40348, 40350, 40351, 40353, 40354, 40356, 40358, 40359, 40361, 40364, 40366, 40367, 40368, 40373, 40374, 40375, 40376, 40377, 40379, 40380, 40381, 40382, 40384, 40386, 40389, 40393, 40395, 40399, 40402, 40403, 40406, 40407, 40414, 40416, 40417, 40418, 40421, 40422, 40423, 40425, 40427, 40429, 40430, 40433, 40443, 40447, 40455, 40458, 40460, 40467, 40470, 40472, 40474, 40477, 40478, 40481, 40483, 40485, 40487, 40488, 40489, 40491, 40492, 40496, 40497, 40498, 40500, 40501, 40502, 40503, 40504, 40505, 40506, 40507, 40508, 40509, 40510, 40512, 40513, 40516, 40517, 40518, 40519, 40522, 40523, 40526, 40528, 40534, 40538, 40539, 40541, 40542, 40545, 40547, 40548, 40549, 40550, 40551, 40552, 40553, 40556, 40560, 40563, 40570, 40571, 40572, 40573, 40574, 40575, 40576, 40579, 40580, 40581, 40582, 40586, 40587, 40591, 40595, 40598, 40599, 40602, 40603, 40606, 40610, 40611, 40612, 40615, 40616, 40621, 40622, 40623, 40624, 40625, 40626, 40631, 40633, 40635, 40637, 40642, 40644, 40646, 40648, 40650, 40654, 40656, 40659, 40660, 40663, 40664, 40665, 40666, 40667, 40672, 40673, 40675, 40677, 40680, 40681, 40690, 40692, 40696, 40697, 40698, 40699, 40700, 40701, 40703, 40705, 40706, 40708, 40709, 40710, 40711, 40712, 40713, 40714, 40716, 40717, 40719, 40721, 40722, 40725, 40726, 40728, 40729, 40731, 40733, 40734, 40736, 40737, 40739, 40743, 40744, 40745, 40747, 40749, 40751, 40753, 40755, 40758, 40760, 40764, 40765, 40767, 40768, 40769, 40770, 40771, 40772, 40773, 40774, 40782, 40785, 40787, 40788, 40791, 40797, 40798, 40802, 40812, 40816, 40817, 40822, 40823, 40824, 40829, 40830, 40831, 40836, 40840, 40844, 40845, 40847, 40849, 40851, 40854, 40862, 40864, 40865, 40867, 40869, 40871, 40876, 40877, 40879, 40884, 40886, 40887, 40888, 40889, 40891, 40892, 40893, 40895, 40896, 40899, 40902, 40903, 40904, 40905, 40906, 40907, 40908, 40910, 40912, 40915, 40921, 40922, 40924, 40926, 40928, 40931, 40934, 40935, 40936, 40938, 40939, 40940, 40941, 40944, 40948, 40949, 40953, 40958, 40959, 40961, 40963, 40964, 40965, 40966, 40967, 40968, 40971, 40972, 40974, 40976, 40981, 40982, 40983, 40984, 40985, 40987, 40988, 40993, 40994, 40995, 40996, 40998, 41003, 41004, 41006, 41007, 41016, 41021, 41022, 41023, 41025, 41026, 41028, 41029, 41031, 41032, 41034, 41036, 41038, 41039, 41041, 41046, 41048, 41050, 41051, 41052, 41053, 41054, 41057, 41058, 41061, 41064, 41069, 41070, 41071, 41072, 41073, 41074, 41075, 41080, 41081, 41082, 41083, 41084, 41085, 41087, 41089, 41090, 41092, 41093, 41098, 41101, 41102, 41104, 41109, 41111, 41112, 41118, 41120, 41121, 41122, 41126, 41127, 41136, 41137, 41139, 41141, 41146, 41153, 41155, 41156, 41157, 41159, 41160, 41163, 41164, 41173, 41174, 41176, 41179, 41181, 41182, 41183, 41184, 41185, 41187, 41190, 41191, 41194, 41196, 41198, 41204, 41206, 41209, 41213, 41214, 41215, 41217, 41219, 41220, 41221, 41223, 41224, 41228, 41229, 41230, 41232, 41233, 41234, 41240, 41241, 41243, 41246, 41247, 41249, 41250, 41251, 41252, 41257, 41259, 41260, 41261, 41263, 41264, 41268, 41269, 41270, 41271, 41272, 41275, 41277, 41278, 41281, 41286, 41289, 41290, 41292, 41296, 41297, 41300, 41302, 41304, 41307, 41308, 41309, 41311, 41313, 41315, 41316, 41317, 41320, 41321, 41322, 41325, 41326, 41330, 41335, 41337, 41341, 41343, 41344, 41347, 41353, 41360, 41361, 41366, 41367, 41368, 41369, 41373, 41377, 41380, 41384, 41385, 41389, 41393, 41395, 41398, 41402, 41403, 41405, 41407, 41408, 41409, 41411, 41412, 41415, 41419, 41423, 41424, 41426, 41430, 41432, 41434, 41437, 41438, 41439, 41440, 41441, 41444, 41445, 41446, 41447, 41448, 41450, 41452, 41454, 41455, 41456, 41460, 41461, 41463, 41469, 41470, 41474, 41476, 41479, 41480, 41485, 41491, 41493, 41494, 41495, 41497, 41502, 41504, 41507, 41509, 41511, 41512, 41513, 41514, 41515, 41516, 41517, 41519, 41520, 41521, 41523, 41524, 41526, 41527, 41528, 41529, 41530, 41531, 41532, 41534, 41535, 41537, 41539, 41540, 41541, 41542, 41543, 41544, 41545, 41546, 41548, 41549, 41550, 41553, 41558, 41559, 41560, 41561, 41562, 41564, 41566, 41567, 41570, 41573, 41574, 41578, 41581, 41583, 41584, 41590, 41591, 41593, 41594, 41595, 41596, 41598, 41599, 41601, 41602, 41603, 41604, 41605, 41606, 41607, 41608, 41610, 41611, 41612, 41615, 41619, 41620, 41621, 41623, 41633, 41634, 41635, 41636, 41637, 41639, 41640, 41641, 41642, 41643, 41649, 41650, 41652, 41654, 41655, 41657, 41658, 41660, 41664, 41666, 41669, 41671, 41672, 41674, 41675, 41677, 41678, 41680, 41681, 41682, 41684, 41686, 41689, 41691, 41692, 41694, 41696, 41706, 41707, 41708, 41710, 41711, 41713, 41714, 41715, 41716, 41717, 41721, 41722, 41723, 41729, 41730, 41731, 41732, 41734, 41737, 41738, 41747, 41748, 41750, 41751, 41752, 41754, 41757, 41758, 41764, 41765, 41767, 41768, 41769, 41770, 41772, 41774, 41775, 41781, 41783, 41784, 41785, 41786, 41787, 41790, 41791, 41792, 41794, 41798, 41802, 41803, 41804, 41805, 41806, 41810, 41811, 41813, 41814, 41815, 41816, 41825, 41828, 41829, 41830, 41832, 41835, 41838, 41839, 41840, 41845, 41846, 41849, 41850, 41851, 41853, 41857, 41858, 41861, 41870, 41871, 41874, 41875, 41877, 41879, 41880, 41881, 41888, 41889, 41892, 41894, 41896, 41897, 41899, 41904, 41905, 41907, 41909, 41918, 41924, 41929, 41930, 41932, 41941, 41943, 41944, 41946, 41955, 41958, 41959, 41960, 41962, 41967, 41969, 41972, 41975, 41979, 41980, 41981, 41984, 41987, 41988, 41989, 41992, 41993, 41994, 41996, 41998, 41999, 42000, 42002, 42006, 42007, 42008, 42012, 42015, 42016, 42017, 42020, 42021, 42026, 42027, 42028, 42029, 42030, 42031, 42033, 42035, 42036, 42037, 42038, 42039, 42040, 42044, 42046, 42048, 42051, 42052, 42055, 42056, 42057, 42058, 42060, 42061, 42065, 42066, 42070, 42075, 42076, 42077, 42078, 42083, 42085, 42087, 42089, 42090, 42091, 42092, 42093, 42094, 42095, 42097, 42099, 42100, 42101, 42102, 42103, 42105, 42106, 42107, 42109, 42110, 42111, 42115, 42116, 42117, 42118, 42120, 42122, 42123, 42126, 42128, 42132, 42136, 42138, 42139, 42142, 42143, 42147, 42149, 42150, 42153, 42154, 42157, 42159, 42160, 42162, 42164, 42165, 42166, 42167, 42168, 42170, 42173, 42175, 42176, 42177, 42178, 42179, 42182, 42184, 42187, 42192, 42193, 42194, 42203, 42210, 42212, 42218, 42220, 42224, 42226, 42228, 42233, 42234, 42235, 42236, 42238, 42239, 42247, 42249, 42250, 42252, 42253, 42254, 42256, 42258, 42261, 42265, 42266, 42268, 42269, 42271, 42274, 42276, 42277, 42278, 42280, 42281, 42282, 42287, 42291, 42293, 42296, 42297, 42299, 42301, 42305, 42308, 42310, 42311, 42314, 42315, 42316, 42318, 42319, 42320, 42322, 42326, 42330, 42332, 42333, 42334, 42336, 42338, 42339, 42341, 42342, 42344, 42345, 42346, 42347, 42352, 42355, 42356, 42359, 42360, 42361, 42362, 42363, 42364, 42366, 42373, 42374, 42376, 42379, 42380, 42382, 42389, 42395, 42396, 42397, 42398, 42399, 42400, 42401, 42402, 42403, 42404, 42405, 42406, 42407, 42408, 42409, 42411, 42412, 42413, 42414, 42415, 42416, 42417, 42419, 42420, 42421, 42423, 42425, 42426, 42429, 42431, 42432, 42433, 42434, 42435, 42436, 42437, 42438, 42439, 42440, 42445, 42447, 42449, 42450, 42452, 42456, 42460, 42463, 42466, 42468, 42472, 42473, 42475, 42477, 42482, 42484, 42485, 42490, 42491, 42493, 42496, 42497, 42499, 42500, 42502, 42505, 42508, 42514, 42516, 42517, 42519, 42520, 42522, 42525, 42527, 42531, 42532, 42536, 42547, 42554, 42562, 42567, 42569, 42570, 42571, 42572, 42578, 42579, 42582, 42583, 42586, 42587, 42588, 42590, 42594, 42605, 42607, 42611, 42619, 42623, 42628, 42629, 42636, 42641, 42642, 42643, 42646, 42650, 42653, 42657, 42659, 42662, 42666, 42667, 42669, 42671, 42678, 42681, 42684, 42687, 42693, 42697, 42700, 42702, 42703, 42704, 42705, 42706, 42709, 42711, 42713, 42714, 42720, 42721, 42726, 42729, 42730, 42731, 42732, 42736, 42738, 42742, 42744, 42749, 42753, 42754, 42757, 42763, 42768, 42769, 42770, 42773, 42775, 42777, 42778, 42783, 42784, 42786, 42787, 42788, 42789, 42792, 42794, 42796, 42798, 42799, 42801, 42802, 42805, 42806, 42808, 42809, 42812, 42813, 42814, 42817, 42819, 42821, 42822, 42823, 42826, 42827, 42829, 42830, 42831, 42832, 42835, 42836, 42838, 42840, 42845, 42846, 42847, 42850, 42851, 42852, 42855, 42857, 42861, 42862, 42864, 42865, 42871, 42872, 42873, 42875, 42876, 42877, 42879, 42882, 42883, 42884, 42885, 42891, 42898, 42900, 42902, 42904, 42905, 42908, 42910, 42911, 42915, 42920, 42921, 42922, 42923, 42924, 42927, 42928, 42932, 42933, 42936, 42937, 42939, 42940, 42941, 42942, 42943, 42944, 42945, 42946, 42948, 42950, 42954, 42955, 42956, 42957, 42960, 42961, 42963, 42964, 42965, 42969, 42970, 42971, 42975, 42977, 42983, 42984, 42989, 42990, 42991, 42993, 42995, 42998, 42999, 43002, 43003, 43006, 43011, 43015, 43017, 43019, 43023, 43024, 43026, 43027, 43028, 43029, 43031, 43032, 43034, 43038, 43039, 43040, 43045, 43052, 43053, 43055, 43058, 43059, 43062, 43063, 43064, 43065, 43066, 43067, 43068, 43071, 43081, 43082, 43084, 43086, 43090, 43095, 43096, 43097, 43098, 43101, 43103, 43104, 43105, 43110, 43111, 43112, 43113, 43114, 43115, 43118, 43120, 43124, 43130, 43132, 43135, 43136, 43137, 43140, 43145, 43148, 43150, 43151, 43152, 43154, 43155, 43158, 43159, 43161, 43162, 43164, 43165, 43167, 43169, 43175, 43178, 43180, 43181, 43183, 43184, 43185, 43186, 43188, 43189, 43191, 43193, 43194, 43198, 43202, 43204, 43212, 43214, 43215, 43217, 43218, 43221, 43223, 43224, 43226, 43229, 43231, 43233, 43234, 43236, 43239, 43240, 43242, 43243, 43244, 43245, 43248, 43249, 43254, 43256, 43260, 43261, 43267, 43269, 43270, 43272, 43274, 43275, 43276, 43277, 43279, 43282, 43283, 43288, 43296, 43297, 43298, 43299, 43300, 43302, 43306, 43308, 43311, 43312, 43313, 43315, 43316, 43321, 43322, 43323, 43324, 43326, 43327, 43328, 43329, 43330, 43331, 43333, 43334, 43337, 43340, 43346, 43349, 43352, 43353, 43354, 43355, 43357, 43358, 43360, 43361, 43365, 43366, 43367, 43369, 43376, 43380, 43381, 43382, 43383, 43384, 43385, 43386, 43388, 43389, 43390, 43391, 43395, 43396, 43397, 43401, 43402, 43406, 43407, 43408, 43409, 43411, 43412, 43413, 43414, 43416, 43418, 43419, 43420, 43421, 43422, 43424, 43426, 43427, 43429, 43432, 43434, 43435, 43436, 43438, 43439, 43440, 43442, 43444, 43445, 43446, 43447, 43448, 43449, 43450, 43452, 43455, 43456, 43457, 43458, 43459, 43460, 43461, 43470, 43471, 43472, 43474, 43475, 43478, 43480, 43481, 43482, 43483, 43486, 43490, 43491, 43492, 43493, 43495, 43496, 43498, 43500, 43502, 43504, 43505, 43507, 43508, 43510, 43511, 43514, 43517, 43519, 43520, 43521, 43523, 43525, 43528, 43530, 43531, 43533, 43534, 43535, 43536, 43537, 43538, 43539, 43540, 43549, 43551, 43553, 43554, 43561, 43562, 43563, 43567, 43568, 43569, 43576, 43582, 43585, 43588, 43592, 43593, 43594, 43595, 43596, 43597, 43600, 43601, 43604, 43605, 43607, 43615, 43617, 43618, 43620, 43622, 43623, 43624, 43625, 43629, 43630, 43635, 43636, 43638, 43639, 43640, 43642, 43644, 43645, 43647, 43649, 43650, 43651, 43652, 43653, 43654, 43655, 43657, 43663, 43664, 43667, 43669, 43670, 43672, 43673, 43675, 43678, 43679, 43680, 43683, 43685, 43688, 43689, 43690, 43693, 43695, 43696, 43698, 43699, 43701, 43702, 43703, 43705, 43707, 43708, 43710, 43712, 43714, 43717, 43720, 43724, 43726, 43727, 43728, 43730, 43731, 43732, 43735, 43736, 43738, 43739, 43743, 43745, 43746, 43755, 43757, 43758, 43761, 43762, 43764, 43765, 43766, 43767, 43768, 43769, 43771, 43772, 43773, 43774, 43775, 43776, 43777, 43778, 43779, 43781, 43786, 43787, 43788, 43789, 43792, 43796, 43797, 43799, 43804, 43807, 43808, 43810, 43811, 43814, 43818, 43820, 43821, 43824, 43832, 43835, 43837, 43838, 43839, 43842, 43846, 43850, 43851, 43852, 43854, 43860, 43862, 43863, 43869, 43870, 43871, 43872, 43874, 43875, 43876, 43878, 43880, 43884, 43886, 43887, 43888, 43889, 43890, 43893, 43895, 43896, 43897, 43898, 43899, 43901, 43903, 43905, 43912, 43914, 43918, 43924, 43925, 43926, 43929, 43930, 43933, 43934, 43935, 43938, 43939, 43943, 43944, 43946, 43949, 43950, 43954, 43959, 43960, 43962, 43963, 43964, 43965, 43966, 43967, 43968, 43969, 43973, 43975, 43983, 43984, 43987, 43989, 43991, 43992, 43995, 43996, 43997, 43998, 43999, 44000, 44001, 44003, 44004, 44005, 44010, 44011, 44012, 44013, 44014, 44017, 44020, 44024, 44028, 44029, 44033, 44035, 44037, 44038, 44041, 44045, 44047, 44048, 44051, 44052, 44057, 44059, 44060, 44061, 44062, 44064, 44065, 44068, 44069, 44073, 44074, 44077, 44078, 44079, 44080, 44083, 44084, 44088, 44089, 44090, 44092, 44095, 44096, 44099, 44101, 44102, 44103, 44104, 44106, 44107, 44109, 44110, 44111, 44112, 44113, 44115, 44116, 44119, 44122, 44124, 44126, 44128, 44131, 44132, 44134, 44136, 44140, 44141, 44144, 44145, 44146, 44148, 44149, 44150, 44153, 44154, 44155, 44158, 44160, 44161, 44162, 44163, 44165, 44166, 44167, 44168, 44170, 44172, 44173, 44178, 44179, 44180, 44181, 44184, 44185, 44186, 44188, 44189, 44190, 44195, 44197, 44198, 44200, 44201, 44202, 44203, 44204, 44205, 44206, 44207, 44208, 44209, 44210, 44211, 44212, 44214, 44215, 44216, 44221, 44222, 44224, 44225, 44227, 44229, 44232, 44233, 44238, 44247, 44249, 44253, 44255, 44258, 44259, 44261, 44263, 44264, 44266, 44267, 44270, 44276, 44277, 44283, 44284, 44285, 44294, 44299, 44303, 44304, 44309, 44310, 44312, 44313, 44315, 44317, 44318, 44319, 44320, 44321, 44322, 44323, 44324, 44327, 44328, 44329, 44330, 44331, 44332, 44335, 44336, 44338, 44340, 44344, 44347, 44348, 44349, 44350, 44351, 44354, 44360, 44361, 44363, 44364, 44365, 44366, 44371, 44372, 44373, 44375, 44381, 44392, 44393, 44396, 44397, 44398, 44400, 44401, 44402, 44404, 44405, 44406, 44408, 44409, 44410, 44415, 44416, 44417, 44422, 44424, 44425, 44426, 44427, 44429, 44433, 44437, 44440, 44441, 44450, 44451, 44452, 44458, 44462, 44464, 44465, 44468, 44470, 44471, 44472, 44474, 44476, 44479, 44483, 44489, 44492, 44493, 44496, 44499, 44501, 44508, 44511, 44514, 44520, 44523, 44524, 44525, 44528, 44529, 44530, 44535, 44536, 44537, 44538, 44539, 44540, 44541, 44542, 44543, 44544, 44549, 44551, 44552, 44553, 44559, 44561, 44562, 44563, 44565, 44567, 44568, 44571, 44577, 44580, 44581, 44583, 44586, 44588, 44589, 44594, 44595, 44597, 44598, 44599, 44600, 44606, 44608, 44609, 44612, 44614, 44620, 44621, 44622, 44624, 44625, 44628, 44630, 44632, 44634, 44637, 44638, 44646, 44647, 44650, 44651, 44653, 44659, 44660, 44662, 44664, 44667, 44668, 44669, 44670, 44672, 44675, 44676, 44679, 44685, 44686, 44696, 44697, 44702, 44708, 44710, 44712, 44713, 44716, 44721, 44723, 44733, 44736, 44739, 44745, 44746, 44747, 44749, 44750, 44754, 44755, 44760, 44762, 44763, 44764, 44769, 44774, 44776, 44777, 44782, 44785, 44787, 44789, 44790, 44791, 44797, 44798, 44806, 44808, 44809, 44810, 44812, 44814, 44815, 44816, 44820, 44827, 44828, 44829, 44834, 44837, 44840, 44842, 44847, 44849, 44850, 44854, 44855, 44856, 44861, 44863, 44864, 44866, 44870, 44873, 44874, 44875, 44876, 44877, 44878, 44879, 44884, 44888, 44895, 44899, 44900, 44903, 44908, 44921, 44922, 44924, 44926, 44927, 44928, 44929, 44931, 44932, 44933, 44935, 44936, 44939, 44940, 44944, 44945, 44946, 44948, 44949, 44950, 44951, 44953, 44954, 44955, 44957, 44962, 44968, 44969, 44970, 44972, 44973, 44975, 44978, 44981, 44987, 44989, 44990, 44992, 44996, 44999, 45001, 45003, 45008, 45009, 45013, 45014, 45017, 45018, 45023, 45025, 45031, 45032, 45035, 45037, 45039, 45040, 45041, 45042, 45045, 45047, 45060, 45061, 45063, 45064, 45066, 45069, 45073, 45074, 45075, 45092, 45094, 45096, 45098, 45099, 45102, 45103, 45106, 45108, 45109, 45115, 45117, 45118, 45119, 45121, 45123, 45127, 45128, 45131, 45133, 45135, 45137, 45138, 45139, 45140, 45141, 45144, 45147, 45151, 45162, 45164, 45167, 45168, 45169, 45172, 45174, 45175, 45184, 45185, 45186, 45192, 45193, 45197, 45200, 45209, 45211, 45212, 45218, 45220, 45222, 45227, 45232, 45233, 45235, 45238, 45239, 45240, 45241, 45244, 45246, 45250, 45251, 45253, 45256, 45258, 45260, 45261, 45263, 45270, 45271, 45273, 45276, 45277, 45285, 45288, 45296, 45298, 45299, 45300, 45303, 45306, 45307, 45308, 45311, 45314, 45315, 45316, 45318, 45320, 45322, 45323, 45325, 45326, 45328, 45329, 45332, 45336, 45337, 45338, 45341, 45343, 45346, 45351, 45352, 45354, 45356, 45359, 45362, 45363, 45366, 45368, 45369, 45370, 45371, 45373, 45374, 45376, 45381, 45384, 45386, 45387, 45392, 45394, 45397, 45401, 45405, 45407, 45412, 45413, 45414, 45415, 45417, 45421, 45422, 45425, 45428, 45431, 45432, 45435, 45437, 45443, 45449, 45451, 45453, 45455, 45456, 45459, 45460, 45462, 45468, 45473, 45476, 45479, 45481, 45484, 45487, 45488, 45489, 45493, 45494, 45495, 45496, 45497, 45498, 45499, 45502, 45504, 45509, 45511, 45512, 45513, 45516, 45519, 45522, 45524, 45525, 45526, 45527, 45529, 45531, 45532, 45533, 45534, 45540, 45542, 45544, 45548, 45551, 45552, 45560, 45561, 45562, 45565, 45566, 45571, 45573, 45574, 45577, 45578, 45582, 45584, 45585, 45587, 45589, 45593, 45594, 45598, 45599, 45602, 45604, 45606, 45607, 45608, 45615, 45617, 45618, 45619, 45620, 45621, 45622, 45623, 45624, 45627, 45629, 45632, 45634, 45635, 45636, 45638, 45640, 45646, 45652, 45655, 45656, 45660, 45663, 45667, 45670, 45673, 45674, 45675, 45676, 45679, 45684, 45685, 45687, 45689, 45692, 45700, 45702, 45703, 45704, 45708, 45722, 45723, 45724, 45728, 45731, 45732, 45734, 45736, 45737, 45739, 45740, 45744, 45747, 45753, 45754, 45760, 45761, 45764, 45765, 45768, 45769, 45771, 45772, 45775, 45777, 45780, 45783, 45786, 45789, 45791, 45793, 45796, 45799, 45800, 45802, 45803, 45806, 45810, 45811, 45812, 45813, 45814, 45815, 45816, 45819, 45822, 45823, 45824, 45825, 45827, 45828, 45831, 45832, 45835, 45836, 45837, 45839, 45841, 45843, 45844, 45847, 45850, 45851, 45852, 45855, 45860, 45861, 45862, 45868, 45869, 45870, 45871, 45874, 45877, 45878, 45883, 45886, 45887, 45891, 45894, 45899, 45904, 45905, 45906, 45910, 45911, 45913, 45914, 45917, 45918, 45920, 45922, 45923, 45925, 45926, 45927, 45930, 45931, 45932, 45934, 45935, 45936, 45938, 45939, 45942, 45945, 45948, 45954, 45956, 45962, 45963, 45964, 45965, 45966, 45975, 45976, 45982, 45984, 45986, 45990, 45991, 45992, 45993, 45996, 45997, 45998, 46003, 46005, 46009, 46010, 46013, 46014, 46015, 46020, 46026, 46027, 46029, 46030, 46032, 46033, 46034, 46036, 46041, 46043, 46045, 46046, 46047, 46049, 46052, 46053, 46057, 46058, 46060, 46062, 46063, 46070, 46071, 46073, 46075, 46077, 46078, 46081, 46085, 46089, 46091, 46095, 46098, 46100, 46105, 46106, 46107, 46109, 46110, 46111, 46114, 46117, 46118, 46119, 46121, 46122, 46123, 46124, 46125, 46126, 46128, 46134, 46135, 46138, 46139, 46141, 46142, 46144, 46145, 46149, 46152, 46153, 46156, 46157, 46158, 46164, 46166, 46167, 46169, 46170, 46171, 46172, 46173, 46174, 46175, 46177, 46181, 46182, 46184, 46188, 46189, 46190, 46191, 46192, 46195, 46198, 46199, 46200, 46203, 46205, 46206, 46209, 46211, 46212, 46215, 46217, 46219, 46221, 46222, 46223, 46228, 46232, 46233, 46236, 46237, 46238, 46240, 46242, 46243, 46245, 46249, 46253, 46255, 46256, 46259, 46262, 46263, 46264, 46266, 46268, 46269, 46270, 46273, 46275, 46276, 46277, 46281, 46282, 46284, 46287, 46290, 46294, 46297, 46298, 46299, 46307, 46308, 46310, 46311, 46312, 46314, 46316, 46317, 46322, 46323, 46324, 46325, 46326, 46327, 46328, 46329, 46330, 46331, 46332, 46333, 46339, 46341, 46347, 46348, 46349, 46351, 46352, 46355, 46357, 46358, 46359, 46365, 46366, 46370, 46372, 46374, 46375, 46377, 46380, 46381, 46382, 46383, 46384, 46388, 46390, 46398, 46400, 46403, 46405, 46407, 46411, 46418, 46422, 46423, 46424, 46425, 46427, 46434, 46439, 46440, 46441, 46442, 46446, 46447, 46451, 46452, 46453, 46454, 46456, 46458, 46460, 46462, 46465, 46466, 46467, 46469, 46470, 46474, 46477, 46479, 46480, 46484, 46486, 46489, 46490, 46492, 46493, 46494, 46496, 46500, 46501, 46503, 46504, 46505, 46507, 46508, 46513, 46514, 46517, 46518, 46521, 46522, 46524, 46526, 46527, 46529, 46531, 46532, 46533, 46534, 46535, 46536, 46542, 46545, 46546, 46547, 46548, 46552, 46554, 46555, 46560, 46565, 46567, 46571, 46573, 46576, 46579, 46580, 46581, 46582, 46584, 46588, 46591, 46592, 46593, 46596, 46597, 46598, 46599, 46608, 46609, 46610, 46611, 46615, 46619, 46622, 46625, 46626, 46632, 46634, 46635, 46636, 46637, 46638, 46639, 46641, 46643, 46644, 46646, 46648, 46649, 46653, 46657, 46658, 46659, 46662, 46664, 46665, 46667, 46671, 46672, 46675, 46676, 46677, 46681, 46682, 46689, 46690, 46692, 46695, 46696, 46697, 46698, 46699, 46700, 46701, 46703, 46705, 46706, 46708, 46709, 46712, 46713, 46714, 46715, 46716, 46717, 46718, 46719, 46721, 46723, 46726, 46728, 46732, 46733, 46734, 46735, 46738, 46742, 46744, 46745, 46746, 46748, 46750, 46752, 46753, 46754, 46757, 46765, 46767, 46769, 46771, 46772, 46774, 46775, 46776, 46779, 46782, 46784, 46786, 46789, 46790, 46791, 46794, 46798, 46800, 46801, 46805, 46806, 46808, 46810, 46812, 46815, 46822, 46824, 46830, 46839, 46840, 46843, 46844, 46849, 46850, 46853, 46854, 46856, 46857, 46859, 46860, 46863, 46864, 46866, 46867, 46871, 46872, 46873, 46874, 46875, 46877, 46881, 46882, 46883, 46888, 46889, 46891, 46892, 46893, 46894, 46896, 46899, 46901, 46902, 46903, 46905, 46908, 46909, 46911, 46912, 46915, 46917, 46919, 46922, 46923, 46924, 46925, 46929, 46930, 46933, 46934, 46935, 46939, 46944, 46945, 46951, 46952, 46953, 46957, 46958, 46959, 46960, 46961, 46962, 46963, 46965, 46966, 46967, 46968, 46970, 46975, 46977, 46982, 46984, 46985, 46989, 46991, 46994, 46995, 46996, 47002, 47011, 47019, 47025, 47030, 47033, 47040, 47043, 47046, 47050, 47055, 47057, 47062, 47067, 47071, 47072, 47073, 47076, 47078, 47079, 47082, 47083, 47084, 47085, 47087, 47088, 47089, 47090, 47091, 47097, 47098, 47102, 47104, 47106, 47107, 47108, 47109, 47111, 47112, 47115, 47117, 47118, 47122, 47123, 47124, 47125, 47126, 47127, 47128, 47133, 47135, 47138, 47139, 47141, 47143, 47146, 47148, 47154, 47155, 47157, 47159, 47160, 47161, 47164, 47166, 47167, 47172, 47183, 47189, 47192, 47194, 47195, 47196, 47197, 47199, 47201, 47202, 47205, 47207, 47210, 47211, 47212, 47213, 47214, 47216, 47217, 47223, 47224, 47229, 47230, 47231, 47232, 47233, 47235, 47236, 47237, 47238, 47239, 47240, 47242, 47243, 47246, 47252, 47253, 47258, 47263, 47268, 47269, 47270, 47273, 47275, 47278, 47280, 47287, 47289, 47290, 47291, 47292, 47294, 47296, 47297, 47303, 47305, 47308, 47311, 47312, 47316, 47323, 47326, 47328, 47329, 47332, 47333, 47334, 47335, 47337, 47338, 47339, 47347, 47353, 47354, 47355, 47358, 47360, 47361, 47362, 47363, 47365, 47369, 47372, 47373, 47375, 47377, 47381, 47382, 47383, 47385, 47390, 47391, 47393, 47394, 47396, 47397, 47403, 47406, 47407, 47422, 47423, 47424, 47428, 47429, 47432, 47437, 47438, 47440, 47445, 47450, 47452, 47454, 47455, 47457, 47460, 47461, 47466, 47472, 47473, 47474, 47476, 47478, 47480, 47482, 47483, 47485, 47487, 47488, 47489, 47490, 47493, 47496, 47498, 47499, 47500, 47503, 47507, 47508, 47509, 47511, 47512, 47516, 47519, 47522, 47528, 47530, 47531, 47533, 47534, 47537, 47540, 47541, 47545, 47546, 47550, 47551, 47554, 47557, 47558, 47560, 47564, 47566, 47568, 47569, 47570, 47571, 47574, 47580, 47582, 47585, 47587, 47589, 47591, 47593, 47600, 47601, 47603, 47608, 47610, 47611, 47615, 47616, 47617, 47620, 47623, 47629, 47630, 47631, 47634, 47635, 47636, 47642, 47644, 47649, 47651, 47652, 47653, 47657, 47658, 47659, 47660, 47661, 47662, 47663, 47664, 47666, 47667, 47668, 47673, 47678, 47679, 47680, 47681, 47683, 47685, 47687, 47691, 47699, 47700, 47703, 47704, 47705, 47706, 47708, 47715, 47719, 47720, 47725, 47727, 47729, 47730, 47733, 47737, 47739, 47741, 47744, 47747, 47750, 47752, 47754, 47757, 47761, 47765, 47768, 47769, 47777, 47779, 47780, 47781, 47782, 47785, 47790, 47791, 47792, 47793, 47801, 47807, 47809, 47815, 47816, 47817, 47822, 47823, 47824, 47825, 47827, 47832, 47833, 47834, 47839, 47843, 47844, 47849, 47854, 47859, 47860, 47863, 47864, 47867, 47869, 47875, 47878, 47880, 47882, 47885, 47888, 47895, 47897, 47898, 47899, 47901, 47904, 47905, 47906, 47907, 47908, 47913, 47919, 47920, 47921, 47925, 47927, 47928, 47929, 47930, 47934, 47938, 47940, 47941, 47944, 47945, 47947, 47948, 47950, 47951, 47954, 47955, 47957, 47959, 47961, 47963, 47964, 47966, 47969, 47971, 47972, 47973, 47974, 47975, 47978, 47981, 47983, 47985, 47989, 47991, 47992, 47994, 47995, 47999, 48000, 48001, 48002, 48003, 48004, 48007, 48009, 48012, 48019, 48020, 48021, 48022, 48023, 48024, 48028, 48030, 48031, 48033, 48036, 48038, 48039, 48040, 48045, 48048, 48049, 48051, 48052, 48053, 48056, 48057, 48061, 48066, 48067, 48068, 48069, 48070, 48071, 48073, 48075, 48078, 48079, 48082, 48086, 48088, 48098, 48099, 48101, 48102, 48104, 48108, 48110, 48111, 48114, 48117, 48119, 48120, 48124, 48130, 48131, 48133, 48134, 48141, 48145, 48147, 48148, 48150, 48153, 48154, 48155, 48157, 48158, 48159, 48161, 48162, 48163, 48169, 48170, 48171, 48172, 48174, 48175, 48176, 48177, 48181, 48184, 48186, 48187, 48188, 48190, 48191, 48192, 48194, 48197, 48200, 48203, 48204, 48208, 48209, 48210, 48214, 48215, 48216, 48219, 48220, 48221, 48223, 48225, 48227, 48229, 48231, 48232, 48233, 48235, 48237, 48239, 48240, 48242, 48244, 48245, 48247, 48248, 48250, 48251, 48253, 48256, 48258, 48259, 48260, 48261, 48262, 48265, 48267, 48268, 48271, 48272, 48275, 48276, 48277, 48278, 48280, 48282, 48283, 48284, 48288, 48293, 48294, 48295, 48297, 48300, 48301, 48303, 48307, 48308, 48309, 48310, 48311, 48312, 48313, 48315, 48317, 48321, 48323, 48324, 48326, 48328, 48330, 48332, 48336, 48338, 48341, 48346, 48348, 48349, 48350, 48352, 48354, 48359, 48363, 48365, 48370, 48372, 48373, 48374, 48375, 48376, 48380, 48381, 48382, 48383, 48384, 48385, 48386, 48387, 48390, 48395, 48396, 48397, 48399, 48402, 48403, 48405, 48407, 48408, 48409, 48410, 48411, 48412, 48413, 48414, 48415, 48416, 48421, 48424, 48425, 48428, 48429, 48431, 48432, 48438, 48440, 48444, 48445, 48446, 48448, 48450, 48452, 48453, 48455, 48457, 48459, 48462, 48466, 48472, 48473, 48477, 48479, 48482, 48483, 48486, 48488, 48489, 48490, 48491, 48493, 48494, 48496, 48497, 48498, 48499, 48500, 48501, 48505, 48506, 48508, 48510, 48511, 48512, 48513, 48514, 48515, 48517, 48519, 48522, 48523, 48525, 48526, 48528, 48529, 48530, 48532, 48534, 48535, 48536, 48539, 48540, 48541, 48544, 48545, 48546, 48549, 48556, 48559, 48560, 48561, 48562, 48563, 48567, 48568, 48569, 48572, 48573, 48574, 48582, 48583, 48588, 48589, 48590, 48592, 48593, 48595, 48596, 48597, 48600, 48601, 48602, 48604, 48605, 48606, 48607, 48609, 48610, 48614, 48616, 48617, 48619, 48621, 48623, 48624, 48626, 48630, 48631, 48632, 48633, 48634, 48635, 48636, 48639, 48642, 48644, 48646, 48647, 48649, 48650, 48652, 48653, 48659, 48661, 48662, 48663, 48664, 48666, 48671, 48672, 48675, 48676, 48678, 48679, 48681, 48682, 48683, 48684, 48685, 48686, 48689, 48691, 48692, 48693, 48695, 48707, 48709, 48711, 48713, 48714, 48716, 48718, 48719, 48721, 48723, 48725, 48726, 48729, 48732, 48733, 48734, 48736, 48739, 48741, 48742, 48743, 48744, 48746, 48747, 48748, 48749, 48753, 48754, 48755, 48758, 48759, 48762, 48765, 48768, 48769, 48771, 48772, 48773, 48774, 48776, 48778, 48781, 48782, 48783, 48785, 48787, 48791, 48793, 48795, 48797, 48798, 48799, 48805, 48808, 48812, 48814, 48815, 48816, 48817, 48821, 48822, 48823, 48824, 48826, 48828, 48829, 48831, 48835, 48836, 48837, 48839, 48840, 48841, 48845, 48847, 48848, 48850, 48851, 48852, 48853, 48855, 48856, 48860, 48861, 48862, 48863, 48865, 48870, 48871, 48881, 48883, 48889, 48896, 48897, 48899, 48900, 48901, 48902, 48905, 48907, 48908, 48909, 48912, 48913, 48914, 48915, 48917, 48918, 48920, 48924, 48925, 48931, 48939, 48941, 48942, 48943, 48944, 48946, 48947, 48948, 48949, 48952, 48954, 48955, 48956, 48957, 48958, 48960, 48961, 48962, 48964, 48969, 48970, 48972, 48974, 48976, 48979, 48980, 48984, 48986, 48987, 48991, 48992, 48993, 48998, 48999, 49005, 49007, 49008, 49010, 49013, 49015, 49018, 49019, 49020, 49031, 49034, 49039, 49043, 49046, 49047, 49048, 49051, 49053, 49057, 49059, 49060, 49061, 49062, 49065, 49068, 49069, 49070, 49071, 49072, 49074, 49077, 49078, 49081, 49087, 49088, 49090, 49091, 49092, 49094, 49096, 49097, 49103, 49104, 49105, 49106, 49107, 49108, 49112, 49115, 49117, 49119, 49122, 49127, 49128, 49130, 49131, 49132, 49133, 49134, 49135, 49136, 49137, 49140, 49141, 49147, 49148, 49151, 49154, 49156, 49157, 49158, 49160, 49161, 49168, 49170, 49172, 49174, 49175, 49177, 49178, 49180, 49182, 49184, 49186, 49188, 49190, 49191, 49193, 49198, 49199, 49200, 49201, 49204, 49206, 49212, 49217, 49219, 49220, 49221, 49223, 49227, 49228, 49230, 49231, 49233, 49239, 49244, 49246, 49247, 49249, 49250, 49252, 49254, 49255, 49259, 49260, 49261, 49267, 49270, 49273, 49275, 49277, 49279, 49281, 49286, 49287, 49288, 49289, 49290, 49292, 49295, 49296, 49297, 49299, 49301, 49304, 49305, 49307, 49311, 49312, 49313, 49314, 49315, 49318, 49320, 49322, 49326, 49327, 49328, 49333, 49334, 49336, 49337, 49338, 49340, 49344, 49345, 49349, 49351, 49354, 49359, 49360, 49361, 49365, 49366, 49367, 49371, 49372, 49373, 49374, 49377, 49381, 49382, 49383, 49386, 49387, 49389, 49392, 49395, 49396, 49397, 49399, 49401, 49403, 49405, 49406, 49414, 49420, 49427, 49428, 49430, 49432, 49433, 49435, 49439, 49441, 49443, 49446, 49453, 49455, 49457, 49459, 49460, 49462, 49463, 49464, 49466, 49467, 49471, 49472, 49473, 49474, 49475, 49476, 49477, 49479, 49481, 49482, 49484, 49488, 49489, 49490, 49496, 49497, 49499, 49500, 49502, 49503, 49511, 49515, 49517, 49520, 49521, 49524, 49531, 49533, 49534, 49535, 49538, 49541, 49542, 49544, 49546, 49549, 49554, 49555, 49558, 49562, 49564, 49567, 49568, 49578, 49582, 49583, 49588, 49590, 49591, 49592, 49596, 49597, 49598, 49600, 49602, 49604, 49606, 49607, 49609, 49610, 49611, 49612, 49615, 49618, 49619, 49620, 49623, 49626, 49627, 49629, 49633, 49634, 49637, 49638, 49640, 49641, 49643, 49646, 49647, 49648, 49650, 49652, 49653, 49654, 49655, 49656, 49657, 49658, 49659, 49660, 49663, 49668, 49669, 49670, 49671, 49673, 49674, 49675, 49677, 49680, 49681, 49682, 49684, 49685, 49686, 49687, 49688, 49690, 49695, 49698, 49699, 49700, 49701, 49702, 49703, 49704, 49707, 49709, 49711, 49713, 49716, 49717, 49720, 49724, 49725, 49726, 49727, 49732, 49734, 49735, 49738, 49740, 49741, 49743, 49745, 49746, 49750, 49751, 49752, 49760, 49762, 49763, 49765, 49768, 49769, 49772, 49773, 49775, 49778, 49779, 49782, 49786, 49790, 49794, 49796, 49797, 49799, 49807, 49808, 49809, 49813, 49814, 49817, 49819, 49821, 49825, 49828, 49831, 49836, 49837, 49842, 49843, 49845, 49846, 49847, 49848, 49853, 49855, 49856, 49857, 49858, 49865, 49868, 49870, 49871, 49872, 49879, 49881, 49884, 49885, 49886, 49890, 49895, 49896, 49901, 49902, 49903, 49904, 49906, 49908, 49909, 49911, 49913, 49918, 49923, 49924, 49925, 49928, 49929, 49931, 49932, 49934, 49935, 49939, 49941, 49942, 49947, 49948, 49949, 49952, 49954, 49955, 49956, 49958, 49961, 49964, 49969, 49970, 49971, 49972, 49973, 49976, 49977, 49979, 49980, 49988, 49990, 49993, 49994, 49995, 49996, 49997, 49998, 49999, 50000]]

Implementación de Algoritmos

class ComparisonCounter:
    """
    Clase para contar comparaciones realizadas a lo largo de los algoritmos.
    Attributes:
        count (int): número de comparaciones acumuladas.
    Methods:
        compare(a, b): compara dos valores y aumenta el contador.
        reset(): reinicia el contador a cero.
    """
    def __init__(self):
        self.count = 0

    def compare(self, a, b) -> int:
        """
        Compara `a` y `b` y registra la comparación.
        Returns:
            -1 si a < b, 1 si a > b, 0 si son iguales.
        """
        self.count += 1  # incrementar contador en cada llamada
        if a < b:
            return -1
        if a > b:
            return 1
        return 0

    def reset(self):
        """Reinicia el contador de comparaciones a cero."""
        self.count = 0

Algoritmos de búsqueda

Se implementan tres algoritmos de búsqueda sobre listas ordenadas:

  1. Búsqueda Binaria: Método clásico con intervalos acotados.
  2. Búsqueda No Acotada B1: Usa saltos exponenciales seguidos de búsqueda binaria.
  3. Búsqueda No Acotada B2: Variante más agresiva que combina dos niveles de expansión.

Todos los métodos usan un contador de comparaciones para evaluar su eficiencia.
Las variantes B1 y B2 están inspiradas en el enfoque de Baeza-Yates (2004) para búsquedas rápidas en secuencias ordenadas.

# función de búsqueda binaria
def binary_search(arr: List[int], x: int, low: int=0, high: Optional[int]=None, counter: ComparisonCounter=None) -> int:
    """
    Búsqueda binaria con conteo de comparaciones.

    Args:
        arr (List[int]): lista ordenada donde buscar.
        x (int): elemento a buscar.
        low (int): índice inicial de búsqueda.
        high (int): índice final (inclusive); si None, se asigna len(arr)-1.
        counter (ComparisonCounter): contador de comparaciones (requerido).

    Returns:
        Índice de `x` en `arr`, o -1 si no está presente.
    """
    if counter is None:
        raise ValueError("Se requiere ComparisonCounter en binary_search")
    if high is None:
        high = len(arr) - 1

    while low <= high:
        mid = (low + high) // 2  # punto medio
        cmp = counter.compare(arr[mid], x)  # comparar arr[mid] con x
        if cmp == 0:
            return mid  # encontrado
        elif cmp < 0:
            low = mid + 1  # descartar mitad izquierda
        else:
            high = mid - 1  # descartar mitad derecha
    return -1  # no encontrado

# Dobling search (B1)

def doubling_search(arr: List[int], x: int, start: int=0, counter: ComparisonCounter=None) -> int:
    """
    Búsqueda exponencial (de salto exponencial) seguida de binaria.

    Args:
        arr (List[int]): lista ordenada donde buscar.
        x (int): elemento a buscar.
        start (int): índice inicial para el salto.
        counter (ComparisonCounter): contador de comparaciones (requerido).

    Returns:
        Índice donde se encuentra `x`, o posición de inserción si no está presente.
    """
    if counter is None:
        raise ValueError("Se requiere counter en doubling_search")
    n = len(arr)
    bound = 1

    # 1) Encontrar un rango [bound/2, bound] donde podría estar x
    while start + bound < n and counter.compare(arr[start + bound], x) < 0:
        bound *= 2

    # 2) Definir límites para búsqueda binaria
    low = start + bound // 2
    high = min(start + bound, n - 1)
    # 3) Llamar a binary_search en ese rango
    pos = binary_search(arr, x, low, high, counter)
    return pos if pos >= 0 else high + 1


# Búsqueda B2 (doble doubling)

def b2_search(arr: List[int], x: int, start: int=0, counter: ComparisonCounter=None) -> int:
    """
    Búsqueda no acotada B2: doble salto exponencial y luego búsqueda exponencial interna.

    Args:
        arr (List[int]): lista ordenada donde buscar.
        x (int): elemento a buscar.
        start (int): índice inicial.
        counter (ComparisonCounter): contador de comparaciones (requerido).

    Returns:
        Índice o posición de inserción de `x`.
    """
    if counter is None:
        raise ValueError("Se requiere counter en b2_search")
    n = len(arr)
    exp = 1

    # 1) Salto exponencial externo hasta superar o llegar al final
    while start + (1 << exp) < n and counter.compare(arr[start + (1 << exp)], x) < 0:
        exp += 1

    # 2) Delimitar rango para búsqueda interna
    outer_low = start + (1 << (exp - 1))
    # limitamos al final del arreglo
    outer_high = min(start + (1 << exp), n - 1)
    # 3) Usar doubling_search dentro del rango
    return doubling_search(arr, x, outer_low, counter)

Algoritmos de intersección

Ahora implementaremos los algoritmos de intersección de conjuntos:

  1. Melding (ME): Un algoritmo de intersección sencillo basado en fusión.
  2. Baeza-Yates (BY): Utiliza búsqueda binaria con diferentes estrategias.
  3. Barbay & Kenyon (BK): Un algoritmo adaptativo que puede ser más eficiente para ciertas distribuciones de datos.

Cada implementación incluirá contadores para rastrear el número de comparaciones realizadas.

# Melding Intersection (ME)
def melding_intersection(sets: List[List[int]], counter: ComparisonCounter=None) -> Tuple[List[int], int]:
    """
    Implementa el algoritmo Melding (ME) para intersección simultánea.

    Args:
        sets (List[List[int]]): listas ordenadas a intersectar.
        counter (ComparisonCounter): contador de comparaciones (opcional).

    Returns:
        Tuple:
          - result (List[int]): intersección de todas las listas.
          - count (int): número de comparaciones realizadas.
    """
    if counter is None:
        counter = ComparisonCounter()

    # Casos base
    if not sets:
        return [], counter.count
    if len(sets) == 1:
        return sets[0], counter.count

    # Punteros iniciales en la posición 0 de cada lista
    pointers = [0] * len(sets)
    result = []

    # Mientras ningún puntero haya llegado al final
    while all(pointers[i] < len(sets[i]) for i in range(len(sets))):
        # 1) Buscar el valor máximo en la posición actual
        max_val = sets[0][pointers[0]]
        max_idx = 0
        for i in range(1, len(sets)):
            val = sets[i][pointers[i]]
            if counter.compare(val, max_val) > 0:
                max_val, max_idx = val, i

        # 2) Verificar si todas las listas coinciden en max_val
        all_equal = True
        for i in range(len(sets)):
            if counter.compare(sets[i][pointers[i]], max_val) != 0:
                all_equal = False
                break

        if all_equal:
            # Si coinciden, es parte de la intersección
            result.append(max_val)
            # Avanzar todos los punteros
            for i in range(len(sets)):
                pointers[i] += 1
        else:
            # Avanzar únicamente aquellos menores que max_val
            for i in range(len(sets)):
                while pointers[i] < len(sets[i]) and counter.compare(sets[i][pointers[i]], max_val) < 0:
                    pointers[i] += 1

    return result, counter.count


# Baeza-Yates
def baeza_yates_bisection(sets: List[List[int]], counter: ComparisonCounter=None) -> Tuple[List[int], int]:

    """
    Baeza-Yates con búsqueda binaria para intersectar múltiples listas.

    Args:
        sets (List[List[int]]): listas ordenadas.
        counter (ComparisonCounter): contador de comparaciones (opcional).

    Returns:
        Tuple con intersección y número de comparaciones.
    """
    if counter is None:
        counter = ComparisonCounter()
    if not sets:
        return [], counter.count
    if len(sets) == 1:
        return sets[0], counter.count

    # Ordenar conjuntos por tamaño ascendente para optimizar
    sorted_sets = sorted(sets, key=len)
    result = sorted_sets[0].copy()

    # Intersectar iterativamente con búsqueda binaria
    for s in sorted_sets[1:]:
        temp = []
        for e in result:
            idx = binary_search(s, e, 0, None, counter)
            if idx != -1:
                temp.append(e)
        result = temp
        if not result:
            break  # intersección vacía

    return result, counter.count

# Baeza-Yates con búsqueda exponencial
def baeza_yates_b1(sets: List[List[int]], counter: ComparisonCounter=None) -> Tuple[List[int], int]:
    """
    Baeza-Yates con búsqueda exponencial (B1) para intersectar.
    Se busca cada elemento del conjunto más pequeño en los demás.
    """
    if counter is None:
        counter = ComparisonCounter()
    if not sets:
        return [], counter.count
    if len(sets) == 1:
        return sets[0], counter.count

    sorted_sets = sorted(sets, key=len)
    smallest = sorted_sets[0]
    result = []

    # Para cada elemento del conjunto más pequeño
    for e in smallest:
        found_all = True
        for s in sorted_sets[1:]:
            # usar búsqueda binaria para B1
            if binary_search(s, e, 0, None, counter) == -1:
                found_all = False
                break
        if found_all:
            result.append(e)

    return result, counter.count


# Baeza-Yates con búsqueda exponencial (B2)
def baeza_yates_b2(sets: List[List[int]], counter: ComparisonCounter=None) -> Tuple[List[int], int]:
    """
    Baeza-Yates con búsqueda B2 (doble salto exponencial).
    Optimiza escaneando desde la última posición encontrada.
    """
    if counter is None:
        counter = ComparisonCounter()
    if not sets:
        return [], counter.count
    if len(sets) == 1:
        return sets[0], counter.count

    sorted_sets = sorted(sets, key=len)
    smallest = sorted_sets[0]
    result = []
    positions = [0] * len(sorted_sets)

    for e in smallest:
        ok = True
        # revisar en cada lista más grande
        for i in range(1, len(sorted_sets)):
            s = sorted_sets[i]
            pos = positions[i]
            # avanzar linealmente hasta >= e
            while pos < len(s) and counter.compare(s[pos], e) < 0:
                pos += 1
            positions[i] = pos
            # si no coincide, abortar
            if pos == len(s) or counter.compare(s[pos], e) != 0:
                ok = False
                break
        if ok:
            result.append(e)

    return result, counter.count

# Barbay & Kenyon (BK)
def bk_intersection(lists: List[List[int]], findpos: callable = doubling_search) -> Tuple[List[int], int]:
    """
    Barbay & Kenyon (BK) para intersección multi-lista.

    Args:
        lists (List[List[int]]): tuplas/paredes de listas ordenadas.
        findpos (callable): función de búsqueda (default doubling_search).

    Returns:
        Tuple con la lista de intersección y el conteo de comparaciones.
    """
    counter = ComparisonCounter()
    n = len(lists)
    P = [0] * n
    output = []
    # elemento candidato inicial (primer elemento de la primera lista)
    el = lists[0][0] if n and lists[0] else None
    c = 0  # contador interno de coincidencias

    while True:
        for i in range(n):
            pos = findpos(lists[i], el, P[i], counter)
            P[i] = pos
            # si se sale de la lista, terminamos
            if pos >= len(lists[i]):
                return output, counter.count
            pval = lists[i][pos]
            if pval == el:
                c += 1
                if c == n:
                    output.append(el)
                    c = 0
                P[i] += 1
                if P[i] >= len(lists[i]):
                    return output, counter.count
                el = lists[i][P[i]]
            else:
                # reiniciar contador interno y cambiar candidato
                c = 0
                el = pval
                break

Experimentación

Ahora, vamos a crear funciones para medir el rendimiento de cada algoritmo. Mediremos: - Tiempo de ejecución - Número de comparaciones - Longitud de intersección

# Diccionerio de algoritmos
algoritmos = {
    'ME': melding_intersection,
    'BY_bis': baeza_yates_bisection,
    'BY_B1': baeza_yates_b1,
    'BY_B2': baeza_yates_b2,
    'BK': bk_intersection,
}

# Función de experimentación
def run_experiments(
    dataset_a: List[List[int]],
    dataset_b: List[List[int]],
    dataset_c: List[List[int]]
) -> dict:
    """
    Ejecuta todos los algoritmos sobre A, B y C.

    Args:
        dataset_a/b/c: listas de grupos a procesar.
    Returns:
        Diccionario con resultados:
        { algoritmo: { 'A': [(t, c, l),...], 'B':..., 'C':... } }
    """
    resultados = { name: {'A': [], 'B': [], 'C': []} for name in algoritmos }
    for name, func in algoritmos.items():
        for tag, data in zip(('A','B','C'), (dataset_a, dataset_b, dataset_c)):
            for item in data:
                start = time.time()
                inters, comps = func(item)
                end = time.time()
                # guardar tupla (tiempo, comparaciones, longitud)
                resultados[name][tag].append((end - start, comps, len(inters)))
    return resultados

Vamos a ejecutar nuestros algoritmos de intersección en los conjuntos de datos A, B y C, y recopilar métricas para cada combinación de algoritmo y conjunto de datos.

#Corre todos los algoritmos
resultados = run_experiments(dataset_a, dataset_b, dataset_c)
# Construir una lista de registros planos
registros = []
for alg, datos in resultados.items():
    for conj, filas in datos.items():
        for tiempo, comps, long in filas:
            registros.append({
                "algoritmo": alg,
                "conjunto" : conj,
                "tiempo"   : tiempo,
                "comparaciones": comps,
                "long_inter": long
            })

df = pd.DataFrame(registros)
print(df.head())
  algoritmo conjunto    tiempo  comparaciones  long_inter
0        ME        A  0.007507          22428           2
1        ME        A  0.001005           4063           6
2        ME        A  0.001003           3133           1
3        ME        A  0.001997           5340          16
4        ME        A  0.001507           4238           5

Visualización del Rendimiento

Ahora, vamos a crear visualizaciones para comparar el rendimiento de los diferentes algoritmos en nuestros conjuntos de datos. Generaremos diagramas de caja para: - Tiempo de ejecución - Número de comparaciones - Longitudes de intersección

Boxplot de tiempos por algoritmo y conjunto

# Boxplot de tiempos
plt.figure(figsize=(10,6))
sns.boxplot(
    data=df,
    x="conjunto",      # eje X: conjunto A, B, C
    y="tiempo",         # eje Y: tiempo en segundos
    hue="algoritmo"     # color por algoritmo
)
plt.title("Comparativa de tiempos por algoritmo y conjunto")
plt.ylabel("Tiempo (s)")
plt.xlabel("Conjunto")
plt.legend(title="Algoritmo")
plt.tight_layout()
plt.show()

Rendimiento en tiempos
  • ME presenta tiempos de ejecución más altos y gran dispersión en los conjuntos B y C, reflejando su complejidad al avanzar punteros de forma lineal a través de cada lista.

  • BY_bis y BY_B1 son muy eficientes en el conjunto A (intersecciones pequeñas), pero en B y C el coste de las búsquedas binaria o exponencial se hace más patente, incrementando tanto tiempo como variabilidad.

  • BK muestra una dispersión temporal reducida y tiempos medianos consistentes en los tres conjuntos, lo que indica estabilidad frente a variaciones en tamaño y número de listas.

Boxplot de comparaciones por algoritmo y conjunto

# Boxplot de comparaciones
plt.figure(figsize=(10,6))
sns.boxplot(
    data=df,
    x="conjunto",
    y="comparaciones",
    hue="algoritmo"
)
plt.title("Comparativa de comparaciones por algoritmo y conjunto")
plt.ylabel("# Comparaciones")
plt.xlabel("Conjunto")
plt.legend(title="Algoritmo")
plt.tight_layout()
plt.show()

Comparaciones realizadas
  • ME y BY_B2 alcanzan el mayor número de comparaciones en B, ya que ambas estrategias recorren gran parte de los elementos cuando las listas son largas.

  • BY_bis (búsqueda binaria) tiende a generar más comparaciones que BY_B1 en el conjunto C, confirmando que la binaria resulta relativamente costosa cuando el conjunto base es pequeño.

  • BK, gracias a los saltos exponenciales, mantiene un conteo moderado y uniforme de comparaciones, sin picos excesivos.

Boxplot de longitudes de intersección como control

# Boxplot de longitud de intersección
plt.figure(figsize=(10,6))
sns.boxplot(
    data=df,
    x="conjunto",
    y="long_inter",
    hue="algoritmo"
)
plt.title("Longitud de intersección por algoritmo y conjunto (control)")
plt.ylabel("Longitud intersección")
plt.xlabel("Conjunto")
plt.legend(title="Algoritmo")
plt.tight_layout()
plt.show()

Control de longitud de intersección
  • Todas las variantes devuelven longitudes de intersección comparables para cada conjunto, validando la corrección de las implementaciones.

  • El conjunto C genera intersecciones de tamaño muy reducido en todas las corridas, lo cual explica los bajos tiempos y conteos de comparaciones observados.

  • Ahora que hemos recopilado y visualizado nuestros resultados experimentales, vamos a analizar las diferencias de rendimiento entre los algoritmos en los diferentes conjuntos de datos, con sus estadisticas descriptivas

# Agrupar por conjunto y algoritmo y calcular agregados
summary = (
    df
    .groupby(['conjunto', 'algoritmo'])
    .agg(
        tiempo_mediana=('tiempo', 'median'),
        tiempo_media=('tiempo', 'mean'),
        tiempo_min=('tiempo', 'min'),
        tiempo_max=('tiempo', 'max'),
        tiempo_std=('tiempo', 'std'),
        comps_mediana=('comparaciones', 'median'),
        comps_media=('comparaciones', 'mean'),
        comps_min=('comparaciones', 'min'),
        comps_max=('comparaciones', 'max'),
        comps_std=('comparaciones', 'std'),
        long_mediana=('long_inter', 'median'),
        long_media=('long_inter', 'mean'),
        long_min=('long_inter', 'min'),
        long_max=('long_inter', 'max'),
        long_std=('long_inter', 'std')
    )
    .reset_index()
)

# Mostrar tabla de resumen
print("Estadísticas descriptivas por conjunto y algoritmo:")
# Aplicar estilo con formato condicional
styled_summary = (
    summary.style
    .background_gradient(subset=['tiempo_media'], cmap='YlGn')  # verde = mejor (más rápido)
    .background_gradient(subset=['comps_media'], cmap='OrRd')   # rojo = más comparaciones
    .background_gradient(subset=['long_media'], cmap='Blues')   # azul = tamaño intersección
    .set_caption("📊 Estadísticas descriptivas por conjunto y algoritmo")
    .format(precision=2)
)

# Mostrar
styled_summary
Estadísticas descriptivas por conjunto y algoritmo:
Table 1: 📊 Estadísticas descriptivas por conjunto y algoritmo
  conjunto algoritmo tiempo_mediana tiempo_media tiempo_min tiempo_max tiempo_std comps_mediana comps_media comps_min comps_max comps_std long_mediana long_media long_min long_max long_std
0 A BK 0.00 0.00 0.00 0.00 0.00 444.00 492.82 59 1180 191.47 0.00 2.62 0 34 6.62
1 A BY_B1 0.00 0.00 0.00 0.01 0.00 1352.50 1361.37 1068 1865 164.62 9.00 19.76 0 116 27.82
2 A BY_B2 0.00 0.00 0.00 0.01 0.00 3695.50 8236.27 2399 41557 10685.38 9.00 19.76 0 116 27.82
3 A BY_bis 0.00 0.00 0.00 0.00 0.00 1352.50 1361.37 1068 1865 164.62 9.00 19.76 0 116 27.82
4 A ME 0.00 0.00 0.00 0.01 0.00 4375.00 8933.98 2996 42163 10645.96 8.00 18.14 0 108 25.47
5 B BK 0.00 0.00 0.00 0.00 0.00 1074.00 1353.94 110 6237 1051.71 0.00 1.15 0 69 5.13
6 B BY_B1 0.00 0.00 0.00 0.00 0.00 2475.00 2802.26 1407 6998 1157.39 10.00 24.17 0 242 44.64
7 B BY_B2 0.00 0.00 0.00 0.01 0.00 6881.50 12455.76 1765 82938 13314.15 10.00 24.17 0 242 44.64
8 B BY_bis 0.00 0.00 0.00 0.00 0.00 2475.00 2802.26 1407 6998 1157.39 10.00 24.17 0 242 44.64
9 B ME 0.00 0.00 0.00 0.02 0.00 9286.50 16093.73 4650 84172 14022.36 10.00 23.61 0 241 43.62
10 C BK 0.00 0.00 0.00 0.00 0.00 535.50 698.08 85 3206 528.66 0.00 0.17 0 3 0.45
11 C BY_B1 0.00 0.00 0.00 0.00 0.00 1661.00 1776.35 1179 2945 408.93 4.00 9.19 0 81 15.94
12 C BY_B2 0.00 0.00 0.00 0.01 0.00 5702.00 9001.43 1372 56339 10500.56 4.00 9.19 0 81 15.94
13 C BY_bis 0.00 0.00 0.00 0.00 0.00 1661.00 1776.35 1179 2945 408.93 4.00 9.19 0 81 15.94
14 C ME 0.00 0.00 0.00 0.01 0.00 7369.00 12518.63 4542 57646 11564.67 3.00 7.75 0 70 13.45

🔍 Análisis de la tabla

✅ Conjunto A (pares de listas)

Tiempo de ejecución:

  • BK y las variantes BY_B1/BY_bis presentan una mediana de tiempo de 0 ms, indicando ejecuciones muy rápidas.
  • ME y BY_B2 presentan una mediana cercana a 1 ms.
  • BY_B2 destaca de las otras, por una media elevada (~1.3 ms) y alta desviación, debido a casos atípicos donde realiza muchas búsquedas.

Comparaciones:

  • BK requiere pocas comparaciones (mediana ≈ 444), superando a BY_B1/BY_bis (~1 352) y a ME (~4 375).
  • BY_B2 eleva considerablemente las comparaciones (mediana ≈ 3 700, media > 8 000) por su estrategia de doble expansión.

Tamaño de intersección:

  • Las listas en A producen intersecciones pequeñas (mediana entre 0 y 9), lo que favorece a algoritmos como BK, diseñados para abortar rápido cuando hay poca coincidencia.

✅ Conjunto B (intersección de múltiples listas)

Tiempo de ejecución:

  • BK conserva tiempos muy bajos, incluso al aumentar el número de listas.
  • BY_B1 y BY_bis muestran aumentos leves, reflejo de la multiplicación de búsquedas.
  • ME y BY_B2 presentan tiempos más altos, particularmente BY_B2 con outliers notables.

Comparaciones:

  • BK mantiene eficiencia con mediana por debajo de 2 000.
  • ME escala mal: más listas implican más comparaciones lineales.
  • BY_B1 y BY_bis se mantienen en un rango medio, con BY_B1 ligeramente más eficiente cuando la lista base es pequeña.
  • BY_B2 se ve afectado por la acumulación de saltos.

Tamaño de intersección:

  • Las intersecciones tienen mayor tamaño (5–20 elementos), lo que permite observar cómo se comportan los algoritmos ante cierto solapamiento.

✅ Conjunto C (listas con alta intersección)

Tiempo de ejecución:

  • BK, BY_B1 y BY_bis mantienen tiempos bajos y consistentes.
  • ME mejora respecto a los conjuntos anteriores, aunque su linealidad lo sigue limitando.
  • BY_B2 se beneficia parcialmente, pero sus outliers persisten.

Comparaciones:

  • Todos los algoritmos hacen menos comparaciones por el alto solapamiento.
  • BK sigue siendo el más eficiente.
  • BY_B1 y BY_bis tienen menos dispersión.
  • ME reduce comparaciones, pero sigue siendo el más costoso en promedio.
  • BY_B2 mejora, pero sigue siendo inconsistente.

Tamaño de intersección:

  • Las intersecciones son amplias (medianas de 20 a más de 100 elementos), lo que favorece a algoritmos que aprovechan coincidencias tempranas y bien distribuidas.

✅ Conclusiones Generales

Los experimentos muestran diferencias claras entre algoritmos según el tipo y estructura de las listas evaluadas:

  • BK se perfila como la opción más robusta y estable, manteniendo bajos tiempos de ejecución y comparaciones en todos los escenarios. Su diseño lo vuelve el mejor en cuando se trabaja con conjuntos variados o con intersecciones dispersas.

  • ME destaca por su sencillez, pero su escalabilidad es limitada. A medida que se incrementa la cantidad o tamaño de las listas, su número de comparaciones y tiempos de ejecución crecen significativamente, haciéndolo poco práctico para conjuntos complejos.

  • Las variantes de Baeza-Yates ofrecen distintos enfoques:

    • BY_B1 es eficiente cuando el primer conjunto es pequeño, aprovechando la expansión exponencial para reducir tiempo.
    • BY_bis se comporta de forma estable en listas bien equilibradas y con estructuras regulares.
    • BY_B2, si bien intenta ser más agresivo, cae frecuentemente en tiempos y comparaciones elevados, especialmente en listas sin buena distribución o estructura.

En contextos reales, podría plantearse una estrategia híbrida: aplicar primero BK para filtrar posibles intersecciones rápidas, y luego refinar con una variante de BY si se espera una coincidencia significativa. Esta combinación puede ayudar a balancear robustez y precisión.

📋 Tabla comparativa de algoritmos por comportamiento general

Algoritmo Tiempo de ejecución Comparaciones Estabilidad Escenarios favorables
BK Muy bajo (≈ 0 ms) Muy bajo (≈ 400–2 000) Alta Listas con baja o alta intersección; robusto ante cambios en tamaño o estructura.
ME Medio (≈ 1 ms) Alto (≈ 4 000+) Baja Casos simples o enseñanza; no recomendado para listas grandes o numerosas.
BY_B1 Muy bajo (≈ 0 ms) Medio-bajo (≈ 1 300) Media Eficiente con primer conjunto pequeño; adaptable en estructuras dispersas.
BY_bis Muy bajo (≈ 0 ms) Medio (≈ 1 400) Alta Buen rendimiento en listas balanceadas y con buena estructura.
BY_B2 Variable (media elevada) Muy alto (> 8 000) Baja Escenarios con intersección lejana o tardía; sensible a la distribución.

📚 Referencias

Baeza-Yates, R. (2004). A fast set intersection algorithm for sorted sequences. In Combinatorial Pattern Matching. Springer.

Cormen, Thomas H, Charles E Leiserson, Ronald L Rivest, y Clifford Stein. 2022. Introduction to Algorithms. MIT Press.

Estivill-Castro, Vladmir, y Derick Wood. 1992. “A survey of adaptive sorting algorithms.” ACM Computing Surveys (CSUR) 24 (4): 441–76.