diff --git a/datasets.py b/datasets.py index b19e2a3..cb07994 100644 --- a/datasets.py +++ b/datasets.py @@ -15,8 +15,8 @@ from torch_geometric.data import InMemoryDataset, Data from utils import Normalisation, ConnType, AnalysisType, EncodingStrategy, DatasetType -from utils_datasets import OLD_NETMATS_PEOPLE, DESIKAN_COMPLETE_TS, DESIKAN_TRACKS, UKB_IDS_PATH, UKB_PHENOTYPE_PATH, \ - UKB_TIMESERIES_PATH, NODE_FEATURES_NAMES, STRUCT_COLUMNS +from utils_datasets import DESIKAN_COMPLETE_TS, DESIKAN_TRACKS, UKB_IDS_PATH, UKB_PHENOTYPE_PATH, \ + UKB_TIMESERIES_PATH, NODE_FEATURES_NAMES, STRUCT_COLUMNS, UKB_WITHOUT_BMI PEOPLE_DEMOGRAPHICS_PATH = 'meta_data/people_demographics.csv' @@ -284,7 +284,7 @@ def __init__(self, root, target_var: str, num_nodes: int, threshold: int, connec encoding_strategy: EncodingStrategy = EncodingStrategy.NONE, transform=None, pre_transform=None): - if target_var not in ['gender', 'age']: + if target_var not in ['gender', 'age', 'bmi']: print("UKBDataset not prepared for that target_var!") exit(-2) if connectivity_type not in [ConnType.FMRI]: @@ -323,17 +323,23 @@ def __create_data_object(self, person: int, ts: np.ndarray, covars: pd.DataFrame if self.target_var == 'gender': y = torch.tensor([covars.loc[person, 'Sex']], dtype=torch.float) + elif self.target_var == 'bmi': + y = torch.tensor([covars.loc[person, 'BMI.at.scan']], dtype=torch.float) else: y = torch.tensor([covars.loc[person, 'Age.at.scan']], dtype=torch.float) data = Data(x=x, edge_index=edge_index, edge_attr=edge_attr, y=y) data.ukb_id = torch.tensor([person]) - data.bmi = torch.tensor([covars.loc[person, 'BMI.at.scan']]) - data.age = torch.tensor([covars.loc[person, 'Age.at.scan']]) + if self.target_var == 'gender': data.age = torch.tensor([covars.loc[person, 'Age.at.scan']]) + data.bmi = torch.tensor([covars.loc[person, 'BMI.at.scan']]) + elif self.target_var == 'bmi': + data.sex = torch.tensor([covars.loc[person, 'Sex']]) + data.age = torch.tensor([covars.loc[person, 'Age.at.scan']]) else: data.sex = torch.tensor([covars.loc[person, 'Sex']]) + data.bmi = torch.tensor([covars.loc[person, 'BMI.at.scan']]) return data @@ -352,6 +358,8 @@ def process(self): if person in [1663368, 3443644]: # No information in Covars file continue + if self.target_var == 'bmi' and person in UKB_WITHOUT_BMI: + continue if self.connectivity_type == ConnType.FMRI: ts = np.loadtxt(f'{UKB_TIMESERIES_PATH}/UKB{person}_ts_raw.txt', delimiter=',') diff --git a/main_loop.py b/main_loop.py index 3027892..7890084 100644 --- a/main_loop.py +++ b/main_loop.py @@ -705,9 +705,6 @@ def send_global_results(test_metrics: Dict[str, float]): label_scaler=scaler_labels) print(test_metrics) - print('{:1d}-Final: {:.7f}, Auc: {:.4f}, Acc: {:.4f}, Sens: {:.4f}, Speci: {:.4f}' - ''.format(outer_split_num, test_metrics['loss'], test_metrics['auc'], test_metrics['acc'], - test_metrics['sensitivity'], test_metrics['specificity'])) if scaler_labels is None: print('{:1d}-Final: {:.7f}, Auc: {:.4f}, Acc: {:.4f}, Sens: {:.4f}, Speci: {:.4f}' ''.format(outer_split_num, test_metrics['loss'], test_metrics['auc'], test_metrics['acc'], diff --git a/utils_datasets.py b/utils_datasets.py index 8ed3dc1..07ca50b 100644 --- a/utils_datasets.py +++ b/utils_datasets.py @@ -194,87 +194,168 @@ 969476, 970764, 971160, 978578, 979984, 983773, 984472, 987074, 987983, 989987, 990366, 991267, 992673, 992774, 993675, 994273, 996782] -OLD_NETMATS_PEOPLE = [100206, 100307, 100408, 100610, 101006, 101107, 101309, 101915, 102008, 102109, 102311, 102513, - 102614, 102715, 102816, 103010, 103111, 103212, 103414, 103515, 103818, 104012, 104416, 104820, - 105014, 105115, 105216, 105620, 105923, 106016, 106319, 106521, 106824, 107018, 107321, 107422, - 107725, 108020, 108121, 108222, 108323, 108525, 108828, 109123, 109325, 109830, 110007, 110411, - 110613, 111009, 111211, 111312, 111413, 111514, 111716, 112112, 112314, 112516, 112920, 113215, - 113316, 113619, 113922, 114217, 114318, 114419, 114621, 114823, 114924, 115017, 115219, 115320, - 115724, 115825, 116524, 116726, 117021, 117122, 117324, 117930, 118023, 118124, 118225, 118528, - 118730, 118831, 118932, 119025, 119126, 120111, 120212, 120414, 120515, 120717, 121416, 121618, - 121921, 122317, 122620, 122822, 123117, 123420, 123521, 123723, 123824, 123925, 124220, 124422, - 124624, 124826, 125222, 125424, 125525, 126325, 126426, 126628, 127226, 127327, 127630, 127731, - 127832, 127933, 128026, 128127, 128632, 128935, 129028, 129129, 129331, 129634, 130013, 130114, - 130316, 130417, 130518, 130619, 130720, 130821, 130922, 131217, 131419, 131722, 131823, 131924, - 132017, 132118, 133019, 133625, 133827, 133928, 134021, 134223, 134324, 134425, 134627, 134728, - 134829, 135124, 135225, 135528, 135629, 135730, 135932, 136126, 136227, 136631, 136732, 136833, - 137027, 137128, 137229, 137431, 137532, 137633, 137936, 138130, 138231, 138332, 138534, 138837, - 139233, 139435, 139637, 139839, 140117, 140319, 140824, 140925, 141119, 141422, 141826, 142828, - 143224, 143325, 143426, 143830, 144125, 144226, 144428, 144731, 144832, 144933, 145127, 145632, - 145834, 146129, 146331, 146432, 146533, 146735, 146836, 146937, 147030, 147636, 147737, 148032, - 148133, 148335, 148436, 148840, 148941, 149236, 149337, 149539, 149741, 149842, 150625, 150726, - 150928, 151223, 151324, 151425, 151526, 151627, 151728, 151829, 151930, 152225, 152427, 152831, - 153025, 153126, 153227, 153429, 153631, 153732, 153833, 153934, 154229, 154330, 154431, 154532, - 154734, 154835, 154936, 155635, 155938, 156031, 156233, 156334, 156435, 156536, 156637, 157336, - 157437, 157942, 158035, 158136, 158338, 158540, 158843, 159138, 159239, 159340, 159441, 159744, - 160123, 160729, 160830, 161327, 161630, 161731, 161832, 162026, 162228, 162329, 162733, 162935, - 163129, 163331, 163432, 163836, 164030, 164131, 164636, 164939, 165032, 165436, 165638, 165840, - 165941, 166438, 166640, 167036, 167238, 167440, 167743, 168139, 168240, 168341, 168745, 168947, - 169040, 169343, 169444, 169545, 169949, 170631, 171330, 171532, 171633, 172029, 172130, 172332, - 172433, 172534, 172938, 173334, 173435, 173536, 173637, 173738, 173839, 173940, 174437, 174841, - 175035, 175136, 175237, 175338, 175439, 175540, 175742, 176037, 176239, 176441, 176542, 176744, - 176845, 177140, 177241, 177645, 177746, 178142, 178243, 178647, 178748, 178849, 178950, 179245, - 179346, 180129, 180230, 180432, 180533, 180735, 180836, 180937, 181131, 181232, 181636, 182032, - 182436, 182739, 182840, 183034, 185038, 185139, 185341, 185442, 185846, 185947, 186040, 186141, - 186444, 186545, 186848, 187143, 187345, 187547, 187850, 188145, 188347, 188448, 188549, 188751, - 189349, 189450, 189652, 190031, 191033, 191235, 191336, 191437, 191841, 191942, 192035, 192136, - 192237, 192439, 192540, 192641, 192843, 193239, 193845, 194140, 194443, 194645, 194746, 194847, - 195041, 195445, 195647, 195849, 195950, 196144, 196346, 196750, 197348, 197550, 198047, 198249, - 198350, 198451, 198653, 198855, 199150, 199251, 199352, 199453, 199655, 199958, 200008, 200109, - 200311, 200513, 200614, 200917, 201111, 201414, 201515, 201818, 202113, 202719, 203418, 203923, - 204016, 204218, 204319, 204420, 204521, 204622, 205119, 205220, 205725, 205826, 206222, 206323, - 206525, 206727, 206828, 206929, 207123, 207426, 208024, 208125, 208226, 208327, 208630, 209127, - 209228, 209329, 209834, 209935, 210011, 210112, 210415, 210617, 211114, 211215, 211316, 211417, - 211619, 211720, 211821, 211922, 212015, 212116, 212217, 212318, 212419, 212823, 213017, 213421, - 213522, 214019, 214221, 214423, 214524, 214625, 214726, 217126, 217429, 219231, 220721, 221319, - 223929, 224022, 227432, 227533, 228434, 231928, 233326, 236130, 237334, 238033, 239136, 239944, - 245333, 246133, 248339, 249947, 250427, 250932, 251833, 255639, 255740, 256540, 257542, 257845, - 257946, 263436, 268749, 268850, 270332, 274542, 275645, 280739, 280941, 281135, 283543, 285345, - 285446, 286347, 286650, 287248, 289555, 290136, 293748, 295146, 297655, 298051, 298455, 299154, - 299760, 300618, 300719, 303119, 303624, 304020, 304727, 305830, 307127, 308129, 308331, 309636, - 310621, 311320, 314225, 316633, 316835, 318637, 320826, 321323, 322224, 325129, 329440, 329844, - 330324, 333330, 334635, 336841, 339847, 341834, 342129, 346137, 346945, 348545, 349244, 350330, - 352132, 352738, 353740, 356948, 358144, 360030, 361234, 361941, 365343, 366042, 366446, 368551, - 368753, 371843, 376247, 377451, 378756, 378857, 379657, 380036, 381038, 381543, 382242, 385046, - 385450, 386250, 387959, 389357, 390645, 391748, 392447, 392750, 393247, 393550, 394956, 395251, - 395756, 395958, 397154, 397760, 397861, 401422, 406432, 406836, 412528, 413934, 414229, 415837, - 419239, 421226, 422632, 424939, 429040, 432332, 433839, 436239, 436845, 441939, 445543, 448347, - 449753, 453441, 453542, 454140, 456346, 459453, 461743, 463040, 465852, 467351, 468050, 469961, - 475855, 479762, 480141, 481042, 481951, 485757, 486759, 495255, 497865, 499566, 500222, 506234, - 510225, 510326, 512835, 513130, 513736, 516742, 517239, 518746, 519647, 519950, 520228, 522434, - 523032, 524135, 525541, 529549, 529953, 530635, 531536, 531940, 536647, 540436, 541640, 541943, - 545345, 547046, 548250, 552241, 552544, 553344, 555348, 555651, 555954, 557857, 558657, 558960, - 559053, 559457, 561242, 561444, 561949, 562345, 562446, 565452, 566454, 567052, 567759, 567961, - 568963, 570243, 571144, 572045, 573249, 573451, 576255, 578057, 579665, 579867, 580044, 580347, - 580650, 580751, 581349, 581450, 583858, 585256, 585862, 586460, 587664, 588565, 589567, 590047, - 592455, 594156, 597869, 598568, 599065, 599469, 599671, 601127, 604537, 609143, 611938, 613538, - 614439, 615441, 615744, 616645, 617748, 618952, 620434, 622236, 623844, 626648, 627549, 627852, - 628248, 633847, 634748, 635245, 638049, 645450, 645551, 647858, 654350, 654552, 654754, 656253, - 656657, 657659, 660951, 662551, 663755, 664757, 665254, 667056, 668361, 671855, 672756, 673455, - 675661, 677766, 677968, 679568, 679770, 680250, 680452, 680957, 683256, 685058, 686969, 687163, - 690152, 692964, 693764, 694362, 695768, 698168, 700634, 702133, 704238, 705341, 706040, 707749, - 709551, 713239, 715041, 715647, 715950, 720337, 723141, 724446, 725751, 727553, 727654, 728454, - 729254, 729557, 731140, 732243, 734045, 735148, 737960, 742549, 744553, 748258, 748662, 749058, - 749361, 751348, 753150, 753251, 756055, 757764, 759869, 760551, 761957, 763557, 765056, 765864, - 767464, 769064, 770352, 771354, 773257, 774663, 779370, 782561, 783462, 784565, 788674, 788876, - 789373, 792564, 792766, 792867, 793465, 800941, 802844, 803240, 804646, 809252, 810843, 812746, - 814548, 814649, 815247, 816653, 818455, 818859, 820745, 825048, 825553, 825654, 826353, 826454, - 827052, 828862, 832651, 833148, 833249, 835657, 837560, 837964, 841349, 843151, 844961, 845458, - 849264, 849971, 852455, 856766, 856968, 857263, 859671, 861456, 865363, 867468, 869472, 870861, - 871762, 871964, 872158, 872562, 872764, 873968, 877168, 877269, 878776, 878877, 880157, 882161, - 884064, 885975, 886674, 887373, 888678, 889579, 891667, 894067, 894673, 894774, 896778, 896879, - 898176, 899885, 901038, 901139, 901442, 902242, 904044, 905147, 907656, 908860, 910241, 910443, - 911849, 912447, 917255, 917558, 919966, 922854, 923755, 926862, 927359, 930449, 932554, 933253, - 937160, 942658, 943862, 947668, 951457, 952863, 955465, 957974, 958976, 959574, 962058, 965367, - 965771, 966975, 969476, 970764, 971160, 978578, 979984, 983773, 984472, 987074, 987983, 989987, - 990366, 991267, 992673, 992774, 993675, 994273, 996782] +UKB_WITHOUT_BMI = [1000531, 1006841, 1007645, 1009385, 1011364, 1022920, 1023146, 1023629, 1025225, 1025416, 1028600, + 1029922, 1036245, 1037847, 1038603, 1040242, 1040783, 1052008, 1054651, 1059341, 1060261, 1066576, + 1068132, 1069518, 1074090, 1083253, 1087493, 1088530, 1090309, 1091233, 1091490, 1091513, 1095573, + 1096420, 1100685, 1101292, 1101896, 1103589, 1105255, 1109910, 1111640, 1118787, 1120861, 1124352, + 1129316, 1132191, 1136818, 1140926, 1141490, 1148305, 1152081, 1154550, 1156121, 1167753, 1173162, + 1173867, 1174833, 1179153, 1181291, 1184103, 1186662, 1187131, 1193044, 1200704, 1208431, 1212343, + 1215045, 1215905, 1217446, 1218306, 1218539, 1219134, 1222346, 1222401, 1223314, 1225740, 1226955, + 1228925, 1229994, 1230025, 1230074, 1230564, 1233395, 1235334, 1237930, 1244201, 1245890, 1253057, + 1253989, 1255170, 1256929, 1257205, 1258891, 1261223, 1270028, 1282218, 1288311, 1294720, 1294956, + 1297982, 1303823, 1304392, 1304550, 1305852, 1306217, 1310360, 1317124, 1328031, 1328753, 1331164, + 1332458, 1335167, 1350938, 1355099, 1358914, 1360088, 1360544, 1365973, 1368872, 1368971, 1369233, + 1384389, 1385117, 1401283, 1401624, 1404204, 1408376, 1412900, 1417188, 1418338, 1418519, 1423325, + 1425505, 1426979, 1430519, 1431319, 1431737, 1436159, 1436488, 1438573, 1440811, 1443943, 1448419, + 1450297, 1450950, 1456526, 1458079, 1460149, 1461035, 1462077, 1462419, 1462525, 1464978, 1465545, + 1467395, 1469314, 1476025, 1478923, 1480917, 1488515, 1491983, 1501296, 1501641, 1502177, 1509733, + 1512042, 1515734, 1516427, 1516707, 1525989, 1527120, 1529182, 1534126, 1537024, 1539624, 1547919, + 1552957, 1555874, 1558056, 1558941, 1559657, 1569768, 1572062, 1576917, 1577357, 1578334, 1578805, + 1578864, 1582782, 1584989, 1594932, 1596816, 1597471, 1597941, 1598125, 1601502, 1602629, 1605478, + 1610582, 1613093, 1615419, 1620705, 1627659, 1630698, 1637694, 1641809, 1643680, 1663732, 1666335, + 1670160, 1672778, 1677605, 1680144, 1680279, 1683532, 1689961, 1691332, 1694048, 1695371, 1699393, + 1704967, 1705128, 1705657, 1706021, 1708030, 1709781, 1710429, 1712296, 1714868, 1722736, 1723467, + 1724876, 1725529, 1727554, 1727720, 1728168, 1729952, 1730975, 1731247, 1737779, 1750846, 1751547, + 1756071, 1757776, 1758556, 1758969, 1762369, 1768138, 1768292, 1769371, 1774970, 1777593, 1787569, + 1789103, 1791033, 1795687, 1795755, 1800808, 1802778, 1805302, 1806308, 1806588, 1810446, 1812228, + 1814462, 1814628, 1816667, 1817806, 1821533, 1838686, 1839537, 1841480, 1842661, 1843155, 1844269, + 1845001, 1845755, 1846632, 1847271, 1847823, 1848177, 1848613, 1853480, 1861574, 1864579, 1866275, + 1866505, 1866811, 1870017, 1870690, 1870828, 1872976, 1875859, 1875961, 1876718, 1877260, 1878536, + 1888946, 1889395, 1892958, 1898448, 1914773, 1915544, 1918266, 1918843, 1921715, 1926252, 1933367, + 1934184, 1934904, 1938415, 1939015, 1939249, 1942839, 1944694, 1946205, 1946685, 1949699, 1951875, + 1952792, 1953269, 1954027, 1956417, 1956692, 1957003, 1957775, 1959505, 1960090, 1966945, 1971125, + 1971307, 1971664, 1976758, 1978366, 1983885, 1984430, 1985245, 1986115, 1986263, 1986349, 1995607, + 1996177, 1997033, 2003793, 2004629, 2010340, 2012292, 2018723, 2020796, 2024767, 2027324, 2029569, + 2031795, 2034350, 2034810, 2040115, 2041585, 2042338, 2047752, 2048525, 2056286, 2063588, 2063920, + 2064491, 2066898, 2067329, 2070712, 2071039, 2074133, 2074880, 2084878, 2088087, 2091006, 2094541, + 2096269, 2097741, 2098099, 2101163, 2114010, 2114297, 2115394, 2119651, 2121019, 2121893, 2123343, + 2123797, 2139652, 2141030, 2142437, 2142470, 2146654, 2148676, 2153434, 2156048, 2160563, 2162676, + 2171263, 2172094, 2175346, 2181162, 2182705, 2183351, 2184616, 2190846, 2194138, 2196694, 2198135, + 2198629, 2199959, 2212700, 2217002, 2219355, 2222792, 2229042, 2232483, 2233457, 2243670, 2244404, + 2246703, 2248337, 2248341, 2250641, 2251073, 2257273, 2260223, 2262370, 2262813, 2266000, 2268035, + 2276702, 2280306, 2286798, 2286932, 2287431, 2288183, 2290758, 2293048, 2294216, 2295513, 2297669, + 2298454, 2300511, 2302523, 2308973, 2313266, 2313673, 2315594, 2317972, 2323652, 2326113, 2326605, + 2326716, 2331089, 2333693, 2334972, 2337625, 2337819, 2340073, 2341454, 2342878, 2343335, 2346707, + 2355836, 2364539, 2365518, 2370052, 2370211, 2373709, 2375538, 2379320, 2391392, 2391691, 2394535, + 2399977, 2400437, 2403514, 2407045, 2414128, 2414169, 2415490, 2418650, 2418818, 2420311, 2422408, + 2422601, 2424104, 2424758, 2428055, 2435127, 2435746, 2437851, 2440340, 2443289, 2446463, 2447017, + 2456031, 2463566, 2467638, 2467710, 2471189, 2476170, 2476464, 2491015, 2492995, 2493187, 2493851, + 2500653, 2502339, 2507249, 2511733, 2520748, 2524015, 2524871, 2525461, 2526849, 2529654, 2531799, + 2532999, 2541500, 2553615, 2555143, 2556600, 2557472, 2559542, 2560152, 2562200, 2563503, 2564449, + 2564775, 2565184, 2565889, 2567428, 2568280, 2568585, 2575174, 2580780, 2583362, 2585110, 2587398, + 2589133, 2593433, 2595633, 2596156, 2597774, 2599312, 2604008, 2605208, 2605546, 2609234, 2617861, + 2618037, 2618925, 2623002, 2626450, 2628306, 2629981, 2634252, 2636607, 2639082, 2641635, 2643966, + 2647761, 2651217, 2652894, 2659290, 2664282, 2667644, 2669162, 2669222, 2670633, 2674048, 2678412, + 2678464, 2679556, 2683587, 2684449, 2685738, 2689688, 2690040, 2696769, 2696819, 2697608, 2705501, + 2709009, 2711931, 2716666, 2718684, 2725192, 2726819, 2729782, 2731740, 2734217, 2734710, 2735905, + 2736933, 2743412, 2749306, 2749351, 2750738, 2750872, 2756714, 2757072, 2757735, 2759283, 2760541, + 2763505, 2764259, 2767412, 2767767, 2769520, 2773286, 2774530, 2775755, 2779307, 2783176, 2787391, + 2791567, 2791714, 2794758, 2794899, 2796349, 2799925, 2800868, 2802761, 2804663, 2811958, 2815447, + 2815652, 2815748, 2821676, 2823613, 2824041, 2824651, 2825764, 2825814, 2826751, 2828205, 2833281, + 2834840, 2837153, 2841348, 2841574, 2844010, 2845514, 2846586, 2850375, 2856776, 2858617, 2859766, + 2860788, 2866141, 2867503, 2869500, 2871089, 2873010, 2877832, 2879725, 2880353, 2883533, 2887290, + 2889255, 2897880, 2898191, 2900756, 2900836, 2904999, 2907321, 2908526, 2909052, 2909069, 2910339, + 2911177, 2914410, 2916455, 2916583, 2920575, 2921820, 2922108, 2924663, 2925177, 2927119, 2927448, + 2928044, 2930555, 2932112, 2933174, 2934260, 2934648, 2937100, 2937445, 2941977, 2943140, 2945715, + 2945782, 2950351, 2950420, 2951149, 2961075, 2964524, 2970900, 2977932, 2979620, 2980160, 2980567, + 2986506, 2987686, 2990436, 2991694, 2994549, 3005319, 3005381, 3005768, 3008467, 3021154, 3024368, + 3024781, 3026854, 3029704, 3032654, 3036396, 3039544, 3044084, 3046823, 3049034, 3051531, 3052346, + 3053219, 3053628, 3061547, 3066103, 3066865, 3068146, 3071870, 3072429, 3073417, 3074139, 3078025, + 3081932, 3085115, 3086173, 3093295, 3094242, 3110879, 3111342, 3115636, 3116450, 3121430, 3130420, + 3131562, 3132983, 3133842, 3138135, 3139933, 3146719, 3147455, 3155933, 3157065, 3173957, 3173966, + 3180520, 3181529, 3187171, 3193568, 3199661, 3202979, 3203345, 3203771, 3206382, 3209062, 3210698, + 3211785, 3212855, 3214700, 3218104, 3218406, 3218943, 3221130, 3223856, 3223899, 3224528, 3225310, + 3227415, 3227973, 3230758, 3232821, 3234169, 3242594, 3245166, 3247178, 3249113, 3253128, 3253401, + 3259197, 3264939, 3272355, 3282612, 3283396, 3287151, 3290457, 3290494, 3290703, 3292623, 3299312, + 3302143, 3305738, 3313907, 3317041, 3317107, 3318412, 3318799, 3321570, 3323855, 3323920, 3329505, + 3330996, 3335360, 3336481, 3338469, 3341762, 3344521, 3344717, 3345350, 3347216, 3347919, 3352165, + 3352274, 3355790, 3359360, 3365232, 3366017, 3369576, 3375148, 3377394, 3380182, 3384503, 3386657, + 3388233, 3389141, 3390209, 3401690, 3402428, 3404885, 3405310, 3407333, 3407752, 3408580, 3415620, + 3417019, 3418126, 3423119, 3423352, 3429500, 3431354, 3434962, 3434996, 3435724, 3438890, 3454685, + 3455094, 3467130, 3470590, 3473517, 3476196, 3476732, 3476950, 3483390, 3484283, 3486038, 3487212, + 3494984, 3498297, 3500647, 3503474, 3504778, 3512171, 3512719, 3515854, 3519057, 3519156, 3520635, + 3522251, 3523466, 3523584, 3525397, 3528853, 3530362, 3530728, 3532712, 3532739, 3534714, 3534765, + 3536214, 3547250, 3548024, 3550180, 3551554, 3551651, 3551967, 3552245, 3552323, 3555957, 3557004, + 3558508, 3563489, 3564927, 3565775, 3567409, 3567948, 3572671, 3575041, 3582796, 3587108, 3589333, + 3589595, 3590619, 3591083, 3596119, 3596762, 3606389, 3607093, 3607130, 3610778, 3611568, 3612714, + 3616084, 3619811, 3620092, 3621411, 3622207, 3628137, 3635738, 3639369, 3640371, 3644668, 3645563, + 3647742, 3649000, 3649299, 3652978, 3657927, 3659308, 3660813, 3661323, 3661622, 3662448, 3663312, + 3669656, 3671190, 3673706, 3674645, 3675055, 3677176, 3683400, 3684304, 3685624, 3685763, 3685838, + 3691191, 3692813, 3697122, 3697259, 3700699, 3703226, 3703365, 3706273, 3706871, 3708376, 3715981, + 3723117, 3725182, 3727005, 3734238, 3734386, 3735832, 3741931, 3743430, 3744199, 3747537, 3747667, + 3748670, 3750302, 3752925, 3754229, 3759568, 3760923, 3762525, 3766843, 3767867, 3768176, 3769669, + 3771197, 3771220, 3771475, 3775026, 3776179, 3780804, 3781554, 3790419, 3790580, 3791895, 3792386, + 3793208, 3795384, 3796081, 3798717, 3799309, 3800729, 3800885, 3802622, 3803792, 3806200, 3807425, + 3809367, 3810524, 3811233, 3812289, 3812396, 3813142, 3813199, 3813804, 3815697, 3818681, 3819843, + 3822560, 3823036, 3823188, 3824561, 3826428, 3829875, 3831667, 3832021, 3833611, 3835422, 3837874, + 3839404, 3841100, 3841671, 3842957, 3858217, 3861552, 3861686, 3865431, 3874455, 3876426, 3878487, + 3878604, 3879302, 3883074, 3883789, 3888266, 3888796, 3889559, 3893939, 3897625, 3899464, 3904572, + 3907598, 3910793, 3915649, 3918432, 3921334, 3927346, 3928921, 3931124, 3931659, 3934930, 3936323, + 3944935, 3946785, 3949929, 3950075, 3953745, 3954583, 3957709, 3958403, 3964629, 3967635, 3969061, + 3977580, 3980264, 3984803, 3985121, 3995450, 4001350, 4005614, 4006975, 4008077, 4009210, 4010863, + 4012096, 4013652, 4014857, 4020122, 4020463, 4026184, 4026725, 4029814, 4032209, 4034137, 4035067, + 4035099, 4044295, 4044721, 4052005, 4053170, 4062008, 4065020, 4065438, 4068155, 4069813, 4070604, + 4072330, 4074280, 4077279, 4077554, 4078824, 4079271, 4083784, 4085170, 4086811, 4092439, 4093086, + 4093146, 4099911, 4100311, 4101005, 4101218, 4104488, 4105654, 4106724, 4109068, 4111156, 4111265, + 4111307, 4112772, 4113536, 4120072, 4121105, 4123075, 4129755, 4130129, 4130405, 4132729, 4135134, + 4137533, 4138148, 4138519, 4140859, 4143458, 4143481, 4144244, 4153002, 4153400, 4159187, 4159284, + 4161442, 4162600, 4164549, 4165080, 4168680, 4169057, 4171874, 4172425, 4178223, 4180512, 4183594, + 4184094, 4185352, 4189141, 4193173, 4196100, 4198643, 4198804, 4207132, 4207345, 4211593, 4213367, + 4213410, 4214379, 4217538, 4221074, 4222390, 4223078, 4223601, 4224282, 4224436, 4224597, 4229488, + 4229986, 4235544, 4238279, 4238821, 4240322, 4244118, 4244719, 4246539, 4250650, 4251583, 4251938, + 4253043, 4261221, 4261342, 4262957, 4267460, 4268789, 4272731, 4273278, 4273283, 4273842, 4277479, + 4278407, 4284798, 4286558, 4286671, 4288885, 4291553, 4292637, 4294766, 4307292, 4310199, 4315377, + 4315518, 4326059, 4326524, 4327466, 4327819, 4329713, 4330719, 4346036, 4347501, 4349446, 4351206, + 4351446, 4352459, 4353216, 4355022, 4357107, 4361751, 4363639, 4366471, 4370364, 4374620, 4379995, + 4384898, 4387280, 4387343, 4387571, 4396454, 4396784, 4399398, 4404665, 4405020, 4408685, 4410562, + 4413683, 4414757, 4418096, 4418191, 4419226, 4425060, 4427472, 4430018, 4434719, 4436953, 4446454, + 4447635, 4450275, 4452620, 4452909, 4455016, 4456096, 4459168, 4464480, 4464907, 4465668, 4467281, + 4467793, 4469728, 4472611, 4473670, 4474258, 4477018, 4477354, 4477851, 4477865, 4478582, 4489907, + 4495226, 4497481, 4501630, 4502323, 4502933, 4503336, 4507169, 4509633, 4511393, 4511945, 4513650, + 4517731, 4523398, 4526685, 4532285, 4534049, 4537905, 4539349, 4539459, 4540233, 4545162, 4550673, + 4555471, 4560338, 4562349, 4562418, 4563284, 4563666, 4563764, 4563944, 4564165, 4564312, 4564585, + 4564982, 4571001, 4574522, 4577852, 4578338, 4591484, 4593950, 4594125, 4594621, 4600531, 4604442, + 4605567, 4607748, 4610676, 4616806, 4616963, 4618324, 4618815, 4625048, 4625453, 4628185, 4628209, + 4628813, 4629507, 4636405, 4637871, 4639110, 4640416, 4640441, 4647260, 4648268, 4655004, 4657547, + 4658895, 4662383, 4666199, 4671798, 4671919, 4675809, 4679753, 4680740, 4682349, 4687692, 4692022, + 4693650, 4696897, 4697193, 4698416, 4699980, 4701881, 4705344, 4708631, 4709652, 4710069, 4710508, + 4713437, 4715730, 4719674, 4719930, 4720268, 4722529, 4729328, 4732210, 4734108, 4734263, 4744095, + 4746218, 4748563, 4749594, 4750186, 4752640, 4757184, 4760628, 4761470, 4764227, 4764784, 4765190, + 4766657, 4767304, 4768910, 4768976, 4778761, 4782147, 4782719, 4782763, 4784058, 4788776, 4789390, + 4789993, 4791079, 4794256, 4802087, 4802384, 4807513, 4810580, 4812709, 4815515, 4817031, 4824247, + 4825342, 4825590, 4829681, 4836047, 4836888, 4837752, 4838426, 4842736, 4846801, 4848742, 4849271, + 4850191, 4855394, 4855861, 4862464, 4877219, 4877761, 4879752, 4883565, 4888705, 4897036, 4901689, + 4901838, 4902721, 4902750, 4905243, 4922726, 4927934, 4931460, 4932628, 4939616, 4943406, 4944101, + 4945334, 4947423, 4947992, 4949646, 4952053, 4955788, 4962501, 4962599, 4962894, 4970712, 4975170, + 4976349, 4977313, 4979771, 4983695, 4986529, 4990616, 4996609, 4996678, 5002703, 5003528, 5008093, + 5014644, 5016003, 5019475, 5021479, 5023081, 5025435, 5035926, 5037778, 5042738, 5045484, 5046359, + 5046875, 5051507, 5056315, 5061589, 5066192, 5066256, 5069180, 5070728, 5070930, 5071531, 5077044, + 5079596, 5079891, 5081966, 5082205, 5097539, 5098082, 5103842, 5104862, 5110272, 5120296, 5124097, + 5134622, 5135182, 5139251, 5140523, 5143437, 5148390, 5148422, 5149139, 5152714, 5157579, 5159995, + 5165346, 5165907, 5166788, 5167024, 5169579, 5170250, 5171702, 5173018, 5177759, 5180919, 5183820, + 5187802, 5189839, 5191718, 5192170, 5195484, 5199049, 5202176, 5202442, 5205983, 5209722, 5213457, + 5214279, 5214614, 5227259, 5227361, 5233241, 5233555, 5241562, 5243939, 5244686, 5248751, 5252956, + 5264604, 5268096, 5268128, 5268438, 5271348, 5271653, 5276459, 5277715, 5278416, 5281240, 5283882, + 5286362, 5289410, 5292470, 5300957, 5301927, 5305784, 5315296, 5318900, 5322769, 5328797, 5334860, + 5336304, 5339802, 5341042, 5345322, 5345499, 5346653, 5368064, 5368616, 5369848, 5372036, 5375104, + 5376817, 5377265, 5379176, 5382732, 5384592, 5390469, 5390766, 5391784, 5396838, 5397068, 5398824, + 5402302, 5414584, 5417972, 5419378, 5419907, 5419963, 5427918, 5428215, 5429453, 5431305, 5434639, + 5438792, 5438879, 5439129, 5439331, 5441214, 5441862, 5442598, 5445320, 5445710, 5447489, 5449336, + 5449934, 5450071, 5450806, 5456404, 5464564, 5467694, 5473644, 5476954, 5481642, 5481858, 5484870, + 5485605, 5485621, 5487943, 5489290, 5499162, 5499921, 5500707, 5501498, 5504827, 5506221, 5506301, + 5508885, 5509927, 5511845, 5515812, 5517858, 5527237, 5532242, 5534638, 5547246, 5547341, 5548071, + 5548229, 5548360, 5550141, 5550382, 5551420, 5553150, 5554901, 5556602, 5559235, 5559540, 5564183, + 5567153, 5568279, 5569024, 5570345, 5571354, 5578097, 5581885, 5589336, 5589538, 5590110, 5592710, + 5596327, 5597452, 5597782, 5597870, 5601733, 5603599, 5613422, 5620600, 5626978, 5627392, 5628545, + 5631949, 5632154, 5632220, 5636733, 5641051, 5643107, 5644787, 5645104, 5647621, 5648755, 5648902, + 5648970, 5650796, 5653193, 5658177, 5660193, 5661896, 5666209, 5666329, 5668153, 5668195, 5671645, + 5674942, 5675085, 5678367, 5679069, 5679076, 5680060, 5681912, 5692922, 5695560, 5696975, 5698204, + 5700259, 5700574, 5701445, 5704022, 5708194, 5708717, 5709990, 5712551, 5713749, 5715149, 5728969, + 5733441, 5734059, 5734474, 5734865, 5747894, 5751770, 5756617, 5756825, 5757387, 5759021, 5766789, + 5769400, 5770256, 5775040, 5775446, 5777617, 5780767, 5782605, 5782784, 5782955, 5783272, 5784560, + 5787048, 5789133, 5790318, 5793645, 5795476, 5799607, 5802446, 5803570, 5807979, 5808618, 5811236, + 5811699, 5814264, 5817316, 5818851, 5821015, 5822811, 5823657, 5825078, 5827942, 5829567, 5829580, + 5838675, 5846534, 5853329, 5854174, 5856268, 5857826, 5861081, 5874166, 5874459, 5883980, 5893829, + 5901643, 5904504, 5911004, 5913313, 5915485, 5921941, 5953792, 5956097, 5958384, 5958726, 5968543, + 5976739, 5981287, 5982223, 5984963, 5985501, 5988409, 5992389, 5992730, 5993824, 6004177, 6011369, + 6016642, 6018196, 6018825, 6019757, 6021484]