├── LICENSE ├── README.md ├── data └── amazon │ ├── amazon-G.json │ ├── amazon-class_map.json │ ├── amazon-feats.npy │ └── amazon-feats_t.npy ├── requirements.txt ├── smoothness └── smoothness.py └── src ├── encode.py ├── minibatch.py ├── models.py ├── train.py └── utils.py /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Yifan Hou 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Measuring and Improving the Use of Graph Information in Graph Neural Networks 2 | 3 | #### Authors: [Yifan Hou](https://yifan-h.github.io/), Jian Zhang, [James Cheng](https://www.cse.cuhk.edu.hk/~jcheng/), Kaili Ma , Richard T. B. Ma, Hongzhi Chen, Ming-Chang Yang 4 | 5 | ### Overview 6 | 7 | Graph neural networks (GNNs) have been widely used for representation learning on graph data. However, there is limited understanding on how much performance GNNs actually gain from graph data. 8 | 9 | This paper introduces a context-surrounding GNN framework and proposes two smoothness metrics to measure the quantity and quality of information obtained from graph data. A new, improved GNN model, called CS-GNN, is then devised to improve the use of graph information based on the smoothness values of a graph. CS-GNN is shown to achieve better performance than existing methods in different types of real graphs. 10 | 11 | Please see the [paper](https://openreview.net/forum?id=rkeIIkHKvS) for more details. The processed BGP data can be found [here](https://drive.google.com/open?id=1EPFeWhpMBr9Vg7asRR7oLofLwDhqJI6d). 12 | 13 | *Note:* If you make use of this code, the CS-GNN model or the BGP data in your work, please cite the following paper: 14 | 15 | @inproceedings{ 16 | hou2020measuring, 17 | title={Measuring and Improving the Use of Graph Information in Graph Neural Networks}, 18 | author={Yifan Hou and Jian Zhang and James Cheng and Kaili Ma and Richard T. B. Ma and Hongzhi Chen and Ming-Chang Yang}, 19 | booktitle={International Conference on Learning Representations}, 20 | year={2020}, 21 | url={https://openreview.net/forum?id=rkeIIkHKvS} 22 | } 23 | 24 | ### Requirements 25 | 26 | Recent versions of pytorch, numpy, sklearn, tqdm, networkx, pygsp, and pandas are required. You can install those required packages using the following command: 27 | 28 | $ pip install -r requirements.txt 29 | 30 | Deep Graph Library (DGL) is also required. You can install it with the tutorial in [dgl](https://docs.dgl.ai/install/index.html). 31 | 32 | ### How to run 33 | 34 | You can run the .py file directly, using the following command to run the model: 35 | 36 | $ python ./src/train.py 37 | 38 | You may refer ./smoothness/smoothness.py for smoothness computing. 39 | 40 | #### Input format 41 | 42 | * -G.json -- A networkx-specified json file describing the input graph. Nodes have 'val' and 'test' attributes specifying if they are a part of the validation and test sets. When node's 'val' and 'test' are all 'True', it means this node is unlabeled. 43 | * -id_map.json -- A json-stored dictionary mapping the graph node ids to consecutive integers. 44 | * -class_map.json -- A json-stored dictionary mapping the graph node ids to classes. 45 | * -feats.npy --- A numpy-stored array of node features; ordering given by id_map.json. 46 | * -feats_t.npy [optional] --- A numpy-stored array of node topology features; ordering given by id_map.json. Can be re-caculated by removing the file. 47 | 48 | ### Academic Paper 49 | 50 | [**ICLR 2020**] **Measuring and Improving the Use of Graph Information in Graph Neural Networks**, Yifan Hou, Jian Zhang, James Cheng, Kaili Ma, Richard T. B. Ma, Hongzhi Chen, Ming-Chang Yang. 51 | 52 | ### Acknowledgement 53 | We owe many thanks to Ng Hong Wei for cleaning the BGP data. 54 | -------------------------------------------------------------------------------- /data/amazon/amazon-class_map.json: -------------------------------------------------------------------------------- 1 | {"0": 4, "1": 4, "2": 8, "3": 4, "4": 6, "5": 1, "6": 8, "7": 4, "8": 1, "9": 1, "10": 3, "11": 4, "12": 4, "13": 4, "14": 4, "15": 1, "16": 4, "17": 8, "18": 4, "19": 8, "20": 9, "21": 4, "22": 2, "23": 4, "24": 4, "25": 8, "26": 4, "27": 4, "28": 6, "29": 2, "30": 1, "31": 4, "32": 3, "33": 8, "34": 4, "35": 8, "36": 8, "37": 2, "38": 4, "39": 0, "40": 4, "41": 4, "42": 4, "43": 7, "44": 6, "45": 4, "46": 4, "47": 1, "48": 2, "49": 6, "50": 2, "51": 7, "52": 4, "53": 4, "54": 7, "55": 3, "56": 1, "57": 2, "58": 4, "59": 5, "60": 1, "61": 8, "62": 1, "63": 4, "64": 6, "65": 4, "66": 8, "67": 4, "68": 2, "69": 1, "70": 4, "71": 4, "72": 2, "73": 2, "74": 7, "75": 8, "76": 4, "77": 4, "78": 4, "79": 8, "80": 1, "81": 8, "82": 1, "83": 1, "84": 8, "85": 8, "86": 0, "87": 2, "88": 8, "89": 4, "90": 6, "91": 1, "92": 2, "93": 4, "94": 1, "95": 4, "96": 4, "97": 4, "98": 1, "99": 8, "100": 4, "101": 1, "102": 7, "103": 1, "104": 5, "105": 8, "106": 2, "107": 8, "108": 6, "109": 4, "110": 7, "111": 8, "112": 1, "113": 2, "114": 4, "115": 4, "116": 4, "117": 4, "118": 4, "119": 0, "120": 1, "121": 8, "122": 4, "123": 8, "124": 4, "125": 2, "126": 8, "127": 4, "128": 4, "129": 2, "130": 4, "131": 2, "132": 9, "133": 8, "134": 1, "135": 2, "136": 9, "137": 4, "138": 7, "139": 1, "140": 4, "141": 1, "142": 7, "143": 4, "144": 8, "145": 8, "146": 8, "147": 4, "148": 8, "149": 2, "150": 4, "151": 4, "152": 4, "153": 4, "154": 7, "155": 8, "156": 4, "157": 2, "158": 7, "159": 1, "160": 8, "161": 4, "162": 0, "163": 4, "164": 1, "165": 4, "166": 4, "167": 8, "168": 8, "169": 8, "170": 8, "171": 4, "172": 1, "173": 1, "174": 8, "175": 0, "176": 7, "177": 1, "178": 4, "179": 1, "180": 7, "181": 3, "182": 4, "183": 3, "184": 4, "185": 3, "186": 1, "187": 4, "188": 6, "189": 3, "190": 2, "191": 4, "192": 1, "193": 6, "194": 0, "195": 4, "196": 4, "197": 8, "198": 1, "199": 2, "200": 3, "201": 4, "202": 8, "203": 4, "204": 8, "205": 4, "206": 4, "207": 2, "208": 7, "209": 8, "210": 8, "211": 8, "212": 8, "213": 4, "214": 1, "215": 8, "216": 3, "217": 1, "218": 4, "219": 4, "220": 4, "221": 1, "222": 4, "223": 2, "224": 4, "225": 8, "226": 2, "227": 4, "228": 8, "229": 1, "230": 4, "231": 2, "232": 4, "233": 3, "234": 5, "235": 1, "236": 6, "237": 1, "238": 4, "239": 1, "240": 4, "241": 2, "242": 4, "243": 1, "244": 4, "245": 8, "246": 8, "247": 1, "248": 4, "249": 4, "250": 6, "251": 0, "252": 2, "253": 4, "254": 2, "255": 8, "256": 4, "257": 7, "258": 7, "259": 3, "260": 1, "261": 6, "262": 2, "263": 4, "264": 4, "265": 1, "266": 1, "267": 4, "268": 1, "269": 4, "270": 8, "271": 1, "272": 4, "273": 1, "274": 8, "275": 0, "276": 4, "277": 2, "278": 8, "279": 4, "280": 8, "281": 4, "282": 8, "283": 3, "284": 8, "285": 4, "286": 3, "287": 4, "288": 4, "289": 1, "290": 4, "291": 8, "292": 4, "293": 4, "294": 4, "295": 4, "296": 4, "297": 4, "298": 8, "299": 1, "300": 3, "301": 4, "302": 2, "303": 4, "304": 4, "305": 4, "306": 4, "307": 0, "308": 1, "309": 2, "310": 4, "311": 2, "312": 4, "313": 8, "314": 4, "315": 4, "316": 7, "317": 3, "318": 2, "319": 4, "320": 8, "321": 2, "322": 2, "323": 4, "324": 2, "325": 2, "326": 9, "327": 8, "328": 4, "329": 4, "330": 4, "331": 4, "332": 4, "333": 1, "334": 4, "335": 4, "336": 4, "337": 4, "338": 2, "339": 1, "340": 4, "341": 1, "342": 4, "343": 1, "344": 8, "345": 1, "346": 1, "347": 1, "348": 4, "349": 4, "350": 4, "351": 1, "352": 8, "353": 3, "354": 6, "355": 9, "356": 4, "357": 9, "358": 4, "359": 2, "360": 1, "361": 4, "362": 3, "363": 4, "364": 2, "365": 8, "366": 3, "367": 2, "368": 4, "369": 4, "370": 4, "371": 0, "372": 4, "373": 0, "374": 3, "375": 4, "376": 2, "377": 4, "378": 8, "379": 4, "380": 8, "381": 4, "382": 4, "383": 4, "384": 4, "385": 9, "386": 8, "387": 4, "388": 4, "389": 1, "390": 8, "391": 4, "392": 3, "393": 2, "394": 8, "395": 4, "396": 4, "397": 9, "398": 4, "399": 8, "400": 6, "401": 8, "402": 4, "403": 2, "404": 4, "405": 6, "406": 5, "407": 1, "408": 8, "409": 8, "410": 1, "411": 8, "412": 4, "413": 4, "414": 4, "415": 1, "416": 2, "417": 0, "418": 4, "419": 1, "420": 2, "421": 4, "422": 4, "423": 4, "424": 4, "425": 8, "426": 1, "427": 1, "428": 9, "429": 1, "430": 4, "431": 2, "432": 1, "433": 4, "434": 2, "435": 4, "436": 8, "437": 4, "438": 4, "439": 0, "440": 8, "441": 3, "442": 1, "443": 1, "444": 8, "445": 8, "446": 4, "447": 5, "448": 8, "449": 8, "450": 4, "451": 1, "452": 7, "453": 4, "454": 4, "455": 4, "456": 5, "457": 0, "458": 1, "459": 5, "460": 4, "461": 1, "462": 1, "463": 1, "464": 4, "465": 2, "466": 8, "467": 2, "468": 4, "469": 1, "470": 4, "471": 4, "472": 0, "473": 8, "474": 7, "475": 2, "476": 1, "477": 4, "478": 4, "479": 9, "480": 2, "481": 3, "482": 4, "483": 1, "484": 7, "485": 1, "486": 4, "487": 5, "488": 1, "489": 1, "490": 4, "491": 4, "492": 5, "493": 6, "494": 7, "495": 1, "496": 8, "497": 1, "498": 4, "499": 4, "500": 2, "501": 4, "502": 9, "503": 4, "504": 2, "505": 4, "506": 4, "507": 4, "508": 4, "509": 4, "510": 7, "511": 8, "512": 7, "513": 4, "514": 8, "515": 8, "516": 1, "517": 8, "518": 4, "519": 4, "520": 4, "521": 1, "522": 8, "523": 1, "524": 8, "525": 1, "526": 0, "527": 2, "528": 4, "529": 4, "530": 4, "531": 1, "532": 4, "533": 2, "534": 3, "535": 8, "536": 8, "537": 1, "538": 2, "539": 5, "540": 4, "541": 2, "542": 4, "543": 1, "544": 0, "545": 8, "546": 1, "547": 5, "548": 8, "549": 4, "550": 8, "551": 4, "552": 4, "553": 4, "554": 1, "555": 2, "556": 4, "557": 1, "558": 4, "559": 4, "560": 2, "561": 4, "562": 7, "563": 5, "564": 4, "565": 4, "566": 4, "567": 4, "568": 4, "569": 8, "570": 0, "571": 4, "572": 4, "573": 0, "574": 8, "575": 2, "576": 2, "577": 4, "578": 7, "579": 1, "580": 1, "581": 1, "582": 2, "583": 9, "584": 8, "585": 4, "586": 4, "587": 4, "588": 4, "589": 2, "590": 4, "591": 4, "592": 9, "593": 4, "594": 4, "595": 8, "596": 3, "597": 7, "598": 4, "599": 1, "600": 3, "601": 4, "602": 6, "603": 8, "604": 8, "605": 8, "606": 1, "607": 4, "608": 1, "609": 8, "610": 8, "611": 1, "612": 0, "613": 4, "614": 4, "615": 1, "616": 8, "617": 8, "618": 8, "619": 4, "620": 4, "621": 1, "622": 1, "623": 4, "624": 1, "625": 4, "626": 1, "627": 4, "628": 4, "629": 4, "630": 1, "631": 7, "632": 1, "633": 2, "634": 1, "635": 4, "636": 4, "637": 4, "638": 4, "639": 4, "640": 4, "641": 2, "642": 1, "643": 1, "644": 8, "645": 1, "646": 1, "647": 3, "648": 8, "649": 8, "650": 4, "651": 4, "652": 3, "653": 4, "654": 1, "655": 4, "656": 8, "657": 1, "658": 3, "659": 4, "660": 2, "661": 4, "662": 4, "663": 8, "664": 8, "665": 8, "666": 1, "667": 8, "668": 2, "669": 5, "670": 8, "671": 5, "672": 1, "673": 2, "674": 8, "675": 6, "676": 8, "677": 8, "678": 4, "679": 4, "680": 4, "681": 4, "682": 7, "683": 1, "684": 7, "685": 8, "686": 6, "687": 4, "688": 4, "689": 8, "690": 1, "691": 4, "692": 4, "693": 1, "694": 4, "695": 2, "696": 4, "697": 4, "698": 8, "699": 7, "700": 8, "701": 7, "702": 4, "703": 4, "704": 8, "705": 7, "706": 4, "707": 4, "708": 4, "709": 7, "710": 4, "711": 8, "712": 4, "713": 4, "714": 1, "715": 1, "716": 4, "717": 0, "718": 3, "719": 8, "720": 7, "721": 1, "722": 2, "723": 4, "724": 2, "725": 4, "726": 1, "727": 4, "728": 7, "729": 4, "730": 4, "731": 8, "732": 7, "733": 2, "734": 0, "735": 4, "736": 1, "737": 4, "738": 4, "739": 4, "740": 1, "741": 1, "742": 4, "743": 1, "744": 4, "745": 2, "746": 4, "747": 1, "748": 4, "749": 8, "750": 4, "751": 6, "752": 2, "753": 4, "754": 2, "755": 4, "756": 1, "757": 1, "758": 7, "759": 4, "760": 8, "761": 4, "762": 4, "763": 0, "764": 2, "765": 4, "766": 4, "767": 4, "768": 7, "769": 4, "770": 2, "771": 4, "772": 4, "773": 4, "774": 8, "775": 7, "776": 4, "777": 4, "778": 4, "779": 8, "780": 1, "781": 2, "782": 0, "783": 1, "784": 4, "785": 2, "786": 6, "787": 4, "788": 2, "789": 8, "790": 8, "791": 4, "792": 3, "793": 4, "794": 2, "795": 9, "796": 4, "797": 3, "798": 0, "799": 8, "800": 8, "801": 4, "802": 1, "803": 4, "804": 4, "805": 4, "806": 4, "807": 4, "808": 1, "809": 5, "810": 5, "811": 4, "812": 8, "813": 4, "814": 8, "815": 4, "816": 2, "817": 4, "818": 1, "819": 4, "820": 4, "821": 1, "822": 1, "823": 2, "824": 7, "825": 4, "826": 1, "827": 1, "828": 8, "829": 8, "830": 8, "831": 3, "832": 4, "833": 2, "834": 2, "835": 2, "836": 9, "837": 5, "838": 4, "839": 3, "840": 4, "841": 4, "842": 1, "843": 4, "844": 4, "845": 9, "846": 7, "847": 9, "848": 8, "849": 8, "850": 8, "851": 8, "852": 4, "853": 4, "854": 8, "855": 7, "856": 8, "857": 3, "858": 2, "859": 1, "860": 4, "861": 8, "862": 8, "863": 8, "864": 4, "865": 0, "866": 2, "867": 2, "868": 8, "869": 3, "870": 7, "871": 2, "872": 4, "873": 1, "874": 4, "875": 4, "876": 4, "877": 4, "878": 6, "879": 2, "880": 7, "881": 2, "882": 4, "883": 4, "884": 4, "885": 4, "886": 8, "887": 4, "888": 1, "889": 7, "890": 2, "891": 9, "892": 4, "893": 8, "894": 4, "895": 1, "896": 1, "897": 1, "898": 4, "899": 4, "900": 7, "901": 0, "902": 1, "903": 4, "904": 8, "905": 4, "906": 3, "907": 8, "908": 8, "909": 3, "910": 8, "911": 5, "912": 6, "913": 8, "914": 9, "915": 8, "916": 4, "917": 4, "918": 1, "919": 4, "920": 6, "921": 8, "922": 4, "923": 8, "924": 4, "925": 8, "926": 8, "927": 4, "928": 4, "929": 7, "930": 4, "931": 4, "932": 6, "933": 8, "934": 4, "935": 4, "936": 3, "937": 1, "938": 8, "939": 4, "940": 4, "941": 0, "942": 4, "943": 6, "944": 3, "945": 5, "946": 4, "947": 8, "948": 8, "949": 2, "950": 8, "951": 4, "952": 1, "953": 0, "954": 8, "955": 1, "956": 2, "957": 8, "958": 2, "959": 4, "960": 4, "961": 1, "962": 1, "963": 6, "964": 4, "965": 4, "966": 8, "967": 4, "968": 4, "969": 2, "970": 4, "971": 3, "972": 8, "973": 2, "974": 4, "975": 4, "976": 0, "977": 8, "978": 7, "979": 2, "980": 7, "981": 1, "982": 4, "983": 7, "984": 4, "985": 8, "986": 4, "987": 2, "988": 5, "989": 0, "990": 4, "991": 7, "992": 1, "993": 6, "994": 4, "995": 4, "996": 4, "997": 5, "998": 4, "999": 4, "1000": 4, "1001": 1, "1002": 4, "1003": 1, "1004": 4, "1005": 1, "1006": 4, "1007": 9, "1008": 3, "1009": 4, "1010": 4, "1011": 2, "1012": 1, "1013": 8, "1014": 4, "1015": 4, "1016": 4, "1017": 2, "1018": 2, "1019": 8, "1020": 7, "1021": 1, "1022": 4, "1023": 0, "1024": 0, "1025": 1, "1026": 3, "1027": 8, "1028": 6, "1029": 4, "1030": 3, "1031": 3, "1032": 4, "1033": 1, "1034": 4, "1035": 4, "1036": 2, "1037": 4, "1038": 1, "1039": 4, "1040": 2, "1041": 4, "1042": 1, "1043": 1, "1044": 0, "1045": 4, "1046": 4, "1047": 4, "1048": 1, "1049": 8, "1050": 4, "1051": 4, "1052": 1, "1053": 8, "1054": 4, "1055": 8, "1056": 1, "1057": 4, "1058": 4, "1059": 7, "1060": 4, "1061": 0, "1062": 4, "1063": 8, "1064": 8, "1065": 3, "1066": 4, "1067": 4, "1068": 4, "1069": 4, "1070": 8, "1071": 8, "1072": 4, "1073": 8, "1074": 7, "1075": 1, "1076": 2, "1077": 8, "1078": 1, "1079": 4, "1080": 4, "1081": 1, "1082": 1, "1083": 4, "1084": 4, "1085": 3, "1086": 7, "1087": 9, "1088": 3, "1089": 2, "1090": 4, "1091": 4, "1092": 4, "1093": 4, "1094": 2, "1095": 8, "1096": 7, "1097": 8, "1098": 1, "1099": 4, "1100": 8, "1101": 1, "1102": 4, "1103": 4, "1104": 4, "1105": 7, "1106": 1, "1107": 8, "1108": 1, "1109": 8, "1110": 8, "1111": 7, "1112": 8, "1113": 4, "1114": 1, "1115": 4, "1116": 4, "1117": 4, "1118": 4, "1119": 1, "1120": 8, "1121": 5, "1122": 4, "1123": 7, "1124": 3, "1125": 4, "1126": 4, "1127": 4, "1128": 3, "1129": 9, "1130": 1, "1131": 2, "1132": 1, "1133": 4, "1134": 4, "1135": 1, "1136": 2, "1137": 4, "1138": 8, "1139": 4, "1140": 8, "1141": 4, "1142": 2, "1143": 8, "1144": 8, "1145": 4, "1146": 4, "1147": 8, "1148": 7, "1149": 4, "1150": 4, "1151": 8, "1152": 1, "1153": 5, "1154": 8, "1155": 1, "1156": 4, "1157": 1, "1158": 8, "1159": 7, "1160": 4, "1161": 4, "1162": 2, "1163": 4, "1164": 8, "1165": 1, "1166": 4, "1167": 2, "1168": 4, "1169": 2, "1170": 5, "1171": 4, "1172": 4, "1173": 2, "1174": 1, "1175": 7, "1176": 7, "1177": 2, "1178": 3, "1179": 4, "1180": 1, "1181": 1, "1182": 2, "1183": 4, "1184": 4, "1185": 4, "1186": 8, "1187": 4, "1188": 1, "1189": 4, "1190": 4, "1191": 4, "1192": 4, "1193": 1, "1194": 4, "1195": 4, "1196": 9, "1197": 7, "1198": 1, "1199": 4, "1200": 4, "1201": 4, "1202": 4, "1203": 4, "1204": 2, "1205": 2, "1206": 8, "1207": 2, "1208": 0, "1209": 4, "1210": 4, "1211": 4, "1212": 8, "1213": 1, "1214": 2, "1215": 3, "1216": 0, "1217": 7, "1218": 2, "1219": 8, "1220": 2, "1221": 0, "1222": 4, "1223": 2, "1224": 8, "1225": 4, "1226": 4, "1227": 4, "1228": 1, "1229": 4, "1230": 8, "1231": 8, "1232": 8, "1233": 3, "1234": 7, "1235": 1, "1236": 8, "1237": 4, "1238": 6, "1239": 4, "1240": 8, "1241": 4, "1242": 2, "1243": 4, "1244": 4, "1245": 4, "1246": 2, "1247": 4, "1248": 4, "1249": 2, "1250": 9, "1251": 0, "1252": 4, "1253": 8, "1254": 4, "1255": 2, "1256": 3, "1257": 4, "1258": 4, "1259": 3, "1260": 4, "1261": 8, "1262": 7, "1263": 4, "1264": 4, "1265": 1, "1266": 4, "1267": 4, "1268": 2, "1269": 4, "1270": 4, "1271": 4, "1272": 4, "1273": 9, "1274": 7, "1275": 4, "1276": 4, "1277": 4, "1278": 4, "1279": 4, "1280": 4, "1281": 4, "1282": 0, "1283": 8, "1284": 4, "1285": 4, "1286": 6, "1287": 4, "1288": 4, "1289": 4, "1290": 4, "1291": 2, "1292": 4, "1293": 4, "1294": 4, "1295": 2, "1296": 4, "1297": 2, "1298": 6, "1299": 7, "1300": 3, "1301": 5, "1302": 1, "1303": 8, "1304": 0, "1305": 8, "1306": 1, "1307": 2, "1308": 1, "1309": 8, "1310": 8, "1311": 4, "1312": 7, "1313": 7, "1314": 4, "1315": 4, "1316": 1, "1317": 4, "1318": 1, "1319": 4, "1320": 2, "1321": 4, "1322": 8, "1323": 4, "1324": 5, "1325": 4, "1326": 4, "1327": 8, "1328": 8, "1329": 4, "1330": 1, "1331": 1, "1332": 4, "1333": 2, "1334": 2, "1335": 4, "1336": 2, "1337": 0, "1338": 2, "1339": 4, "1340": 1, "1341": 4, "1342": 4, "1343": 5, "1344": 4, "1345": 4, "1346": 4, "1347": 4, "1348": 6, "1349": 4, "1350": 4, "1351": 8, "1352": 8, "1353": 9, "1354": 2, "1355": 8, "1356": 2, "1357": 4, "1358": 1, "1359": 8, "1360": 4, "1361": 8, "1362": 3, "1363": 1, "1364": 1, "1365": 7, "1366": 1, "1367": 5, "1368": 8, "1369": 4, "1370": 8, "1371": 2, "1372": 4, "1373": 4, "1374": 0, "1375": 4, "1376": 4, "1377": 1, "1378": 8, "1379": 4, "1380": 2, "1381": 4, "1382": 1, "1383": 4, "1384": 1, "1385": 8, "1386": 8, "1387": 1, "1388": 4, "1389": 5, "1390": 5, "1391": 4, "1392": 6, "1393": 3, "1394": 8, "1395": 6, "1396": 8, "1397": 4, "1398": 8, "1399": 1, "1400": 6, "1401": 9, "1402": 8, "1403": 7, "1404": 2, "1405": 8, "1406": 0, "1407": 8, "1408": 8, "1409": 8, "1410": 4, "1411": 1, "1412": 4, "1413": 1, "1414": 1, "1415": 4, "1416": 3, "1417": 8, "1418": 4, "1419": 4, "1420": 1, "1421": 8, "1422": 8, "1423": 4, "1424": 1, "1425": 4, "1426": 3, "1427": 2, "1428": 1, "1429": 3, "1430": 1, "1431": 7, "1432": 8, "1433": 2, "1434": 4, "1435": 4, "1436": 4, "1437": 1, "1438": 5, "1439": 4, "1440": 6, "1441": 7, "1442": 4, "1443": 5, "1444": 4, "1445": 9, "1446": 5, "1447": 4, "1448": 8, "1449": 3, "1450": 2, "1451": 4, "1452": 8, "1453": 6, "1454": 4, "1455": 4, "1456": 4, "1457": 2, "1458": 3, "1459": 4, "1460": 8, "1461": 4, "1462": 4, "1463": 2, "1464": 1, "1465": 1, "1466": 8, "1467": 1, "1468": 4, "1469": 7, "1470": 3, "1471": 4, "1472": 4, "1473": 0, "1474": 4, "1475": 1, "1476": 2, "1477": 4, "1478": 8, "1479": 4, "1480": 2, "1481": 8, "1482": 4, "1483": 4, "1484": 1, "1485": 8, "1486": 2, "1487": 8, "1488": 1, "1489": 2, "1490": 2, "1491": 4, "1492": 5, "1493": 1, "1494": 4, "1495": 4, "1496": 7, "1497": 8, "1498": 2, "1499": 4, "1500": 8, "1501": 2, "1502": 4, "1503": 9, "1504": 1, "1505": 4, "1506": 8, "1507": 2, "1508": 2, "1509": 4, "1510": 4, "1511": 7, "1512": 8, "1513": 2, "1514": 4, "1515": 4, "1516": 1, "1517": 8, "1518": 0, "1519": 1, "1520": 1, "1521": 4, "1522": 5, "1523": 1, "1524": 4, "1525": 1, "1526": 2, "1527": 6, "1528": 4, "1529": 1, "1530": 8, "1531": 1, "1532": 4, "1533": 1, "1534": 7, "1535": 4, "1536": 2, "1537": 4, "1538": 4, "1539": 6, "1540": 8, "1541": 1, "1542": 4, "1543": 1, "1544": 4, "1545": 8, "1546": 1, "1547": 2, "1548": 4, "1549": 6, "1550": 1, "1551": 4, "1552": 2, "1553": 2, "1554": 4, "1555": 4, "1556": 2, "1557": 4, "1558": 4, "1559": 4, "1560": 4, "1561": 7, "1562": 4, "1563": 4, "1564": 4, "1565": 4, "1566": 8, "1567": 4, "1568": 4, "1569": 8, "1570": 7, "1571": 4, "1572": 3, "1573": 6, "1574": 4, "1575": 1, "1576": 4, "1577": 4, "1578": 2, "1579": 8, "1580": 4, "1581": 1, "1582": 4, "1583": 8, "1584": 8, "1585": 4, "1586": 8, "1587": 7, "1588": 8, "1589": 1, "1590": 1, "1591": 1, "1592": 4, "1593": 4, "1594": 8, "1595": 8, "1596": 5, "1597": 1, "1598": 1, "1599": 1, "1600": 8, "1601": 8, "1602": 8, "1603": 8, "1604": 8, "1605": 4, "1606": 4, "1607": 7, "1608": 4, "1609": 1, "1610": 8, "1611": 4, "1612": 4, "1613": 7, "1614": 4, "1615": 4, "1616": 4, "1617": 4, "1618": 1, "1619": 4, "1620": 1, "1621": 1, "1622": 4, "1623": 3, "1624": 1, "1625": 4, "1626": 3, "1627": 1, "1628": 2, "1629": 6, "1630": 8, "1631": 2, "1632": 4, "1633": 4, "1634": 6, "1635": 8, "1636": 1, "1637": 8, "1638": 4, "1639": 3, "1640": 4, "1641": 2, "1642": 0, "1643": 4, "1644": 1, "1645": 4, "1646": 0, "1647": 4, "1648": 3, "1649": 1, "1650": 8, "1651": 0, "1652": 4, "1653": 8, "1654": 7, "1655": 2, "1656": 1, "1657": 7, "1658": 8, "1659": 1, "1660": 8, "1661": 8, "1662": 8, "1663": 1, "1664": 2, "1665": 4, "1666": 4, "1667": 8, "1668": 7, "1669": 4, "1670": 8, "1671": 1, "1672": 4, "1673": 5, "1674": 1, "1675": 2, "1676": 6, "1677": 5, "1678": 8, "1679": 3, "1680": 1, "1681": 4, "1682": 4, "1683": 1, "1684": 2, "1685": 4, "1686": 4, "1687": 4, "1688": 1, "1689": 2, "1690": 1, "1691": 4, "1692": 4, "1693": 2, "1694": 6, "1695": 4, "1696": 7, "1697": 7, "1698": 4, "1699": 8, "1700": 4, "1701": 8, "1702": 5, "1703": 8, "1704": 2, "1705": 8, "1706": 5, "1707": 4, "1708": 7, "1709": 4, "1710": 1, "1711": 2, "1712": 1, "1713": 4, "1714": 4, "1715": 1, "1716": 8, "1717": 4, "1718": 4, "1719": 0, "1720": 4, "1721": 7, "1722": 1, "1723": 4, "1724": 4, "1725": 4, "1726": 2, "1727": 8, "1728": 4, "1729": 1, "1730": 4, "1731": 3, "1732": 8, "1733": 4, "1734": 7, "1735": 4, "1736": 2, "1737": 4, "1738": 1, "1739": 0, "1740": 0, "1741": 8, "1742": 3, "1743": 4, "1744": 4, "1745": 1, "1746": 1, "1747": 1, "1748": 7, "1749": 4, "1750": 4, "1751": 8, "1752": 2, "1753": 8, "1754": 4, "1755": 5, "1756": 1, "1757": 8, "1758": 0, "1759": 0, "1760": 4, "1761": 4, "1762": 4, "1763": 2, "1764": 8, "1765": 1, "1766": 7, "1767": 4, "1768": 1, "1769": 4, "1770": 8, "1771": 4, "1772": 1, "1773": 4, "1774": 4, "1775": 1, "1776": 5, "1777": 7, "1778": 2, "1779": 5, "1780": 4, "1781": 5, "1782": 8, "1783": 6, "1784": 4, "1785": 4, "1786": 2, "1787": 4, "1788": 8, "1789": 0, "1790": 4, "1791": 8, "1792": 6, "1793": 4, "1794": 4, "1795": 8, "1796": 0, "1797": 9, "1798": 1, "1799": 2, "1800": 4, "1801": 4, "1802": 4, "1803": 6, "1804": 1, "1805": 4, "1806": 5, "1807": 4, "1808": 4, "1809": 5, "1810": 6, "1811": 4, "1812": 8, "1813": 1, "1814": 4, "1815": 4, "1816": 2, "1817": 8, "1818": 9, "1819": 8, "1820": 8, "1821": 8, "1822": 4, "1823": 1, "1824": 7, "1825": 4, "1826": 4, "1827": 3, "1828": 3, "1829": 1, "1830": 8, "1831": 3, "1832": 7, "1833": 4, "1834": 4, "1835": 9, "1836": 4, "1837": 4, "1838": 3, "1839": 3, "1840": 2, "1841": 7, "1842": 7, "1843": 8, "1844": 1, "1845": 1, "1846": 8, "1847": 4, "1848": 2, "1849": 8, "1850": 9, "1851": 3, "1852": 2, "1853": 2, "1854": 5, "1855": 4, "1856": 4, "1857": 1, "1858": 7, "1859": 4, "1860": 6, "1861": 3, "1862": 2, "1863": 1, "1864": 3, "1865": 1, "1866": 0, "1867": 2, "1868": 2, "1869": 9, "1870": 8, "1871": 4, "1872": 6, "1873": 6, "1874": 4, "1875": 2, "1876": 1, "1877": 1, "1878": 0, "1879": 3, "1880": 8, "1881": 1, "1882": 1, "1883": 2, "1884": 1, "1885": 8, "1886": 8, "1887": 4, "1888": 2, "1889": 4, "1890": 2, "1891": 8, "1892": 7, "1893": 4, "1894": 5, "1895": 4, "1896": 5, "1897": 8, "1898": 4, "1899": 8, "1900": 6, "1901": 0, "1902": 4, "1903": 6, "1904": 5, "1905": 4, "1906": 4, "1907": 5, "1908": 1, "1909": 1, "1910": 1, "1911": 8, "1912": 4, "1913": 1, "1914": 8, "1915": 4, "1916": 4, "1917": 8, "1918": 2, "1919": 8, "1920": 4, "1921": 2, "1922": 8, "1923": 4, "1924": 3, "1925": 4, "1926": 3, "1927": 0, "1928": 1, "1929": 6, "1930": 6, "1931": 4, "1932": 8, "1933": 8, "1934": 4, "1935": 1, "1936": 4, "1937": 4, "1938": 0, "1939": 1, "1940": 8, "1941": 1, "1942": 3, "1943": 8, "1944": 7, "1945": 4, "1946": 4, "1947": 8, "1948": 3, "1949": 4, "1950": 8, "1951": 8, "1952": 2, "1953": 1, "1954": 4, "1955": 4, "1956": 8, "1957": 7, "1958": 1, "1959": 6, "1960": 8, "1961": 1, "1962": 4, "1963": 8, "1964": 8, "1965": 3, "1966": 2, "1967": 8, "1968": 4, "1969": 9, "1970": 8, "1971": 2, "1972": 6, "1973": 7, "1974": 4, "1975": 4, "1976": 2, "1977": 4, "1978": 1, "1979": 8, "1980": 4, "1981": 2, "1982": 8, "1983": 4, "1984": 4, "1985": 9, "1986": 0, "1987": 4, "1988": 2, "1989": 4, "1990": 4, "1991": 4, "1992": 1, "1993": 1, "1994": 1, "1995": 2, "1996": 2, "1997": 2, "1998": 5, "1999": 0, "2000": 3, "2001": 8, "2002": 8, "2003": 4, "2004": 5, "2005": 5, "2006": 2, "2007": 4, "2008": 5, "2009": 4, "2010": 2, "2011": 5, "2012": 4, "2013": 4, "2014": 4, "2015": 2, "2016": 8, "2017": 7, "2018": 0, "2019": 4, "2020": 6, "2021": 3, "2022": 1, "2023": 1, "2024": 8, "2025": 4, "2026": 1, "2027": 4, "2028": 4, "2029": 1, "2030": 3, "2031": 6, "2032": 4, "2033": 7, "2034": 4, "2035": 3, "2036": 7, "2037": 2, "2038": 4, "2039": 8, "2040": 2, "2041": 1, "2042": 4, "2043": 2, "2044": 8, "2045": 7, "2046": 4, "2047": 1, "2048": 4, "2049": 8, "2050": 4, "2051": 1, "2052": 3, "2053": 3, "2054": 4, "2055": 4, "2056": 8, "2057": 4, "2058": 2, "2059": 4, "2060": 1, "2061": 4, "2062": 4, "2063": 5, "2064": 4, "2065": 4, "2066": 2, "2067": 7, "2068": 0, "2069": 2, "2070": 2, "2071": 3, "2072": 3, "2073": 4, "2074": 2, "2075": 1, "2076": 6, "2077": 4, "2078": 1, "2079": 4, "2080": 9, "2081": 2, "2082": 2, "2083": 4, "2084": 8, "2085": 4, "2086": 1, "2087": 4, "2088": 4, "2089": 4, "2090": 1, "2091": 7, "2092": 4, "2093": 4, "2094": 6, "2095": 2, "2096": 1, "2097": 6, "2098": 4, "2099": 4, "2100": 1, "2101": 2, "2102": 4, "2103": 4, "2104": 4, "2105": 5, "2106": 1, "2107": 2, "2108": 4, "2109": 4, "2110": 0, "2111": 2, "2112": 5, "2113": 4, "2114": 4, "2115": 7, "2116": 1, "2117": 3, "2118": 8, "2119": 4, "2120": 4, "2121": 1, "2122": 4, "2123": 1, "2124": 4, "2125": 5, "2126": 4, "2127": 5, "2128": 1, "2129": 4, "2130": 1, "2131": 5, "2132": 6, "2133": 8, "2134": 4, "2135": 4, "2136": 4, "2137": 8, "2138": 4, "2139": 2, "2140": 4, "2141": 0, "2142": 6, "2143": 4, "2144": 1, "2145": 1, "2146": 4, "2147": 6, "2148": 1, "2149": 8, "2150": 2, "2151": 4, "2152": 8, "2153": 4, "2154": 4, "2155": 0, "2156": 1, "2157": 8, "2158": 4, "2159": 4, "2160": 1, "2161": 6, "2162": 9, "2163": 0, "2164": 4, "2165": 2, "2166": 4, "2167": 7, "2168": 2, "2169": 4, "2170": 1, "2171": 4, "2172": 4, "2173": 4, "2174": 7, "2175": 3, "2176": 4, "2177": 1, "2178": 1, "2179": 8, "2180": 8, "2181": 8, "2182": 6, "2183": 7, "2184": 8, "2185": 4, "2186": 9, "2187": 3, "2188": 1, "2189": 5, "2190": 4, "2191": 1, "2192": 1, "2193": 7, "2194": 2, "2195": 1, "2196": 1, "2197": 4, "2198": 8, "2199": 0, "2200": 1, "2201": 2, "2202": 5, "2203": 6, "2204": 2, "2205": 8, "2206": 4, "2207": 4, "2208": 6, "2209": 8, "2210": 2, "2211": 4, "2212": 4, "2213": 4, "2214": 7, "2215": 4, "2216": 4, "2217": 8, "2218": 1, "2219": 8, "2220": 4, "2221": 0, "2222": 4, "2223": 2, "2224": 4, "2225": 4, "2226": 4, "2227": 7, "2228": 5, "2229": 1, "2230": 8, "2231": 8, "2232": 3, "2233": 7, "2234": 4, "2235": 4, "2236": 1, "2237": 6, "2238": 4, "2239": 8, "2240": 4, "2241": 4, "2242": 2, "2243": 1, "2244": 4, "2245": 7, "2246": 2, "2247": 1, "2248": 8, "2249": 7, "2250": 7, "2251": 4, "2252": 4, "2253": 4, "2254": 1, "2255": 4, "2256": 4, "2257": 4, "2258": 2, "2259": 4, "2260": 3, "2261": 1, "2262": 4, "2263": 6, "2264": 4, "2265": 4, "2266": 4, "2267": 8, "2268": 4, "2269": 1, "2270": 1, "2271": 0, "2272": 8, "2273": 7, "2274": 1, "2275": 1, "2276": 8, "2277": 1, "2278": 4, "2279": 6, "2280": 8, "2281": 6, "2282": 2, "2283": 2, "2284": 1, "2285": 1, "2286": 0, "2287": 1, "2288": 4, "2289": 2, "2290": 2, "2291": 7, "2292": 8, "2293": 4, "2294": 4, "2295": 1, "2296": 1, "2297": 0, "2298": 1, "2299": 4, "2300": 4, "2301": 4, "2302": 4, "2303": 2, "2304": 2, "2305": 8, "2306": 8, "2307": 0, "2308": 6, "2309": 4, "2310": 4, "2311": 6, "2312": 2, "2313": 4, "2314": 6, "2315": 1, "2316": 4, "2317": 4, "2318": 1, "2319": 6, "2320": 1, "2321": 8, "2322": 8, "2323": 4, "2324": 4, "2325": 5, "2326": 4, "2327": 9, "2328": 4, "2329": 4, "2330": 4, "2331": 8, "2332": 4, "2333": 8, "2334": 1, "2335": 0, "2336": 2, "2337": 1, "2338": 4, "2339": 2, "2340": 1, "2341": 7, "2342": 7, "2343": 4, "2344": 4, "2345": 7, "2346": 8, "2347": 4, "2348": 4, "2349": 4, "2350": 5, "2351": 4, "2352": 4, "2353": 2, "2354": 1, "2355": 3, "2356": 4, "2357": 4, "2358": 4, "2359": 2, "2360": 8, "2361": 8, "2362": 9, "2363": 8, "2364": 7, "2365": 9, "2366": 1, "2367": 7, "2368": 8, "2369": 8, "2370": 4, "2371": 2, "2372": 4, "2373": 7, "2374": 1, "2375": 3, "2376": 8, "2377": 4, "2378": 4, "2379": 0, "2380": 4, "2381": 2, "2382": 4, "2383": 2, "2384": 4, "2385": 4, "2386": 4, "2387": 4, "2388": 4, "2389": 8, "2390": 3, "2391": 4, "2392": 4, "2393": 8, "2394": 8, "2395": 3, "2396": 4, "2397": 1, "2398": 8, "2399": 7, "2400": 0, "2401": 2, "2402": 7, "2403": 2, "2404": 4, "2405": 1, "2406": 1, "2407": 4, "2408": 7, "2409": 8, "2410": 4, "2411": 8, "2412": 7, "2413": 2, "2414": 4, "2415": 8, "2416": 8, "2417": 6, "2418": 4, "2419": 0, "2420": 1, "2421": 2, "2422": 1, "2423": 8, "2424": 4, "2425": 1, "2426": 4, "2427": 3, "2428": 8, "2429": 4, "2430": 3, "2431": 8, "2432": 4, "2433": 2, "2434": 2, "2435": 8, "2436": 8, "2437": 2, "2438": 4, "2439": 6, "2440": 3, "2441": 4, "2442": 4, "2443": 8, "2444": 8, "2445": 3, "2446": 1, "2447": 4, "2448": 4, "2449": 4, "2450": 8, "2451": 4, "2452": 4, "2453": 7, "2454": 8, "2455": 8, "2456": 8, "2457": 1, "2458": 1, "2459": 7, "2460": 1, "2461": 1, "2462": 4, "2463": 6, "2464": 1, "2465": 2, "2466": 5, "2467": 7, "2468": 8, "2469": 2, "2470": 4, "2471": 0, "2472": 1, "2473": 1, "2474": 1, "2475": 8, "2476": 1, "2477": 4, "2478": 4, "2479": 9, "2480": 4, "2481": 7, "2482": 4, "2483": 9, "2484": 2, "2485": 0, "2486": 4, "2487": 4, "2488": 1, "2489": 1, "2490": 4, "2491": 4, "2492": 1, "2493": 4, "2494": 2, "2495": 8, "2496": 7, "2497": 4, "2498": 1, "2499": 9, "2500": 4, "2501": 4, "2502": 8, "2503": 9, "2504": 2, "2505": 1, "2506": 7, "2507": 4, "2508": 0, "2509": 4, "2510": 4, "2511": 6, "2512": 4, "2513": 7, "2514": 0, "2515": 7, "2516": 4, "2517": 8, "2518": 1, "2519": 1, "2520": 2, "2521": 8, "2522": 8, "2523": 8, "2524": 8, "2525": 4, "2526": 7, "2527": 1, "2528": 8, "2529": 7, "2530": 1, "2531": 2, "2532": 1, "2533": 1, "2534": 4, "2535": 2, "2536": 4, "2537": 4, "2538": 4, "2539": 4, "2540": 2, "2541": 7, "2542": 4, "2543": 7, "2544": 1, "2545": 7, "2546": 2, "2547": 8, "2548": 1, "2549": 1, "2550": 4, "2551": 4, "2552": 1, "2553": 4, "2554": 4, "2555": 7, "2556": 8, "2557": 8, "2558": 6, "2559": 6, "2560": 6, "2561": 8, "2562": 4, "2563": 3, "2564": 8, "2565": 4, "2566": 2, "2567": 4, "2568": 4, "2569": 4, "2570": 4, "2571": 4, "2572": 4, "2573": 3, "2574": 6, "2575": 2, "2576": 2, "2577": 4, "2578": 4, "2579": 4, "2580": 8, "2581": 1, "2582": 4, "2583": 4, "2584": 4, "2585": 8, "2586": 2, "2587": 8, "2588": 4, "2589": 3, "2590": 3, "2591": 1, "2592": 7, "2593": 1, "2594": 8, "2595": 2, "2596": 8, "2597": 6, "2598": 2, "2599": 1, "2600": 2, "2601": 4, "2602": 8, "2603": 8, "2604": 4, "2605": 1, "2606": 3, "2607": 0, "2608": 1, "2609": 2, "2610": 1, "2611": 4, "2612": 8, "2613": 4, "2614": 8, "2615": 8, "2616": 4, "2617": 4, "2618": 4, "2619": 6, "2620": 8, "2621": 8, "2622": 4, "2623": 1, "2624": 2, "2625": 5, "2626": 3, "2627": 6, "2628": 7, "2629": 4, "2630": 4, "2631": 2, "2632": 4, "2633": 4, "2634": 8, "2635": 4, "2636": 8, "2637": 4, "2638": 1, "2639": 9, "2640": 8, "2641": 8, "2642": 8, "2643": 8, "2644": 1, "2645": 4, "2646": 4, "2647": 7, "2648": 2, "2649": 5, "2650": 4, "2651": 4, "2652": 4, "2653": 1, "2654": 4, "2655": 4, "2656": 4, "2657": 4, "2658": 1, "2659": 2, "2660": 4, "2661": 2, "2662": 4, "2663": 4, "2664": 2, "2665": 1, "2666": 6, "2667": 7, "2668": 4, "2669": 8, "2670": 4, "2671": 8, "2672": 4, "2673": 0, "2674": 4, "2675": 4, "2676": 1, "2677": 8, "2678": 7, "2679": 6, "2680": 8, "2681": 4, "2682": 9, "2683": 8, "2684": 1, "2685": 8, "2686": 4, "2687": 6, "2688": 4, "2689": 4, "2690": 4, "2691": 8, "2692": 8, "2693": 1, "2694": 2, "2695": 4, "2696": 4, "2697": 2, "2698": 1, "2699": 2, "2700": 5, "2701": 1, "2702": 4, "2703": 8, "2704": 2, "2705": 4, "2706": 1, "2707": 3, "2708": 2, "2709": 2, "2710": 4, "2711": 4, "2712": 2, "2713": 1, "2714": 1, "2715": 1, "2716": 3, "2717": 2, "2718": 2, "2719": 2, "2720": 1, "2721": 4, "2722": 6, "2723": 3, "2724": 4, "2725": 4, "2726": 2, "2727": 6, "2728": 4, "2729": 1, "2730": 8, "2731": 8, "2732": 1, "2733": 2, "2734": 8, "2735": 4, "2736": 7, "2737": 4, "2738": 4, "2739": 2, "2740": 2, "2741": 3, "2742": 4, "2743": 8, "2744": 4, "2745": 2, "2746": 1, "2747": 8, "2748": 8, "2749": 4, "2750": 4, "2751": 7, "2752": 2, "2753": 4, "2754": 1, "2755": 4, "2756": 4, "2757": 3, "2758": 1, "2759": 6, "2760": 0, "2761": 6, "2762": 4, "2763": 8, "2764": 4, "2765": 4, "2766": 4, "2767": 4, "2768": 4, "2769": 8, "2770": 4, "2771": 1, "2772": 4, "2773": 0, "2774": 1, "2775": 9, "2776": 0, "2777": 4, "2778": 7, "2779": 8, "2780": 4, "2781": 8, "2782": 8, "2783": 8, "2784": 1, "2785": 1, "2786": 4, "2787": 4, "2788": 2, "2789": 4, "2790": 8, "2791": 4, "2792": 4, "2793": 2, "2794": 1, "2795": 4, "2796": 2, "2797": 2, "2798": 1, "2799": 4, "2800": 8, "2801": 4, "2802": 1, "2803": 7, "2804": 1, "2805": 2, "2806": 4, "2807": 8, "2808": 3, "2809": 2, "2810": 1, "2811": 4, "2812": 5, "2813": 9, "2814": 1, "2815": 4, "2816": 6, "2817": 1, "2818": 7, "2819": 1, "2820": 2, "2821": 8, "2822": 4, "2823": 7, "2824": 1, "2825": 1, "2826": 9, "2827": 8, "2828": 1, "2829": 7, "2830": 8, "2831": 4, "2832": 8, "2833": 8, "2834": 7, "2835": 8, "2836": 4, "2837": 4, "2838": 4, "2839": 6, "2840": 1, "2841": 1, "2842": 4, "2843": 8, "2844": 4, "2845": 4, "2846": 4, "2847": 8, "2848": 4, "2849": 4, "2850": 8, "2851": 1, "2852": 7, "2853": 4, "2854": 4, "2855": 7, "2856": 4, "2857": 1, "2858": 4, "2859": 8, "2860": 4, "2861": 4, "2862": 8, "2863": 4, "2864": 4, "2865": 2, "2866": 4, "2867": 8, "2868": 1, "2869": 4, "2870": 3, "2871": 4, "2872": 4, "2873": 4, "2874": 5, "2875": 1, "2876": 2, "2877": 0, "2878": 6, "2879": 2, "2880": 2, "2881": 1, "2882": 4, "2883": 8, "2884": 4, "2885": 2, "2886": 4, "2887": 4, "2888": 4, "2889": 7, "2890": 2, "2891": 8, "2892": 4, "2893": 4, "2894": 3, "2895": 2, "2896": 4, "2897": 1, "2898": 4, "2899": 4, "2900": 0, "2901": 7, "2902": 3, "2903": 8, "2904": 4, "2905": 2, "2906": 2, "2907": 7, "2908": 0, "2909": 4, "2910": 8, "2911": 8, "2912": 2, "2913": 8, "2914": 8, "2915": 4, "2916": 8, "2917": 5, "2918": 8, "2919": 7, "2920": 4, "2921": 6, "2922": 4, "2923": 4, "2924": 5, "2925": 1, "2926": 4, "2927": 4, "2928": 0, "2929": 4, "2930": 4, "2931": 8, "2932": 0, "2933": 1, "2934": 7, "2935": 4, "2936": 5, "2937": 4, "2938": 5, "2939": 1, "2940": 1, "2941": 4, "2942": 4, "2943": 4, "2944": 8, "2945": 1, "2946": 8, "2947": 4, "2948": 4, "2949": 7, "2950": 4, "2951": 4, "2952": 2, "2953": 8, "2954": 4, "2955": 4, "2956": 4, "2957": 8, "2958": 8, "2959": 8, "2960": 4, "2961": 4, "2962": 2, "2963": 4, "2964": 4, "2965": 4, "2966": 9, "2967": 4, "2968": 4, "2969": 4, "2970": 1, "2971": 2, "2972": 9, "2973": 8, "2974": 4, "2975": 4, "2976": 4, "2977": 9, "2978": 4, "2979": 1, "2980": 6, "2981": 2, "2982": 4, "2983": 4, "2984": 8, "2985": 1, "2986": 1, "2987": 8, "2988": 4, "2989": 4, "2990": 4, "2991": 2, "2992": 4, "2993": 4, "2994": 4, "2995": 4, "2996": 4, "2997": 2, "2998": 4, "2999": 4, "3000": 4, "3001": 1, "3002": 4, "3003": 5, "3004": 1, "3005": 1, "3006": 2, "3007": 4, "3008": 4, "3009": 4, "3010": 4, "3011": 4, "3012": 7, "3013": 7, "3014": 9, "3015": 6, "3016": 4, "3017": 2, "3018": 8, "3019": 8, "3020": 7, "3021": 1, "3022": 4, "3023": 5, "3024": 4, "3025": 8, "3026": 4, "3027": 4, "3028": 4, "3029": 4, "3030": 1, "3031": 0, "3032": 1, "3033": 0, "3034": 2, "3035": 5, "3036": 7, "3037": 2, "3038": 4, "3039": 6, "3040": 2, "3041": 8, "3042": 4, "3043": 4, "3044": 3, "3045": 8, "3046": 1, "3047": 0, "3048": 4, "3049": 4, "3050": 4, "3051": 2, "3052": 8, "3053": 4, "3054": 4, "3055": 1, "3056": 3, "3057": 4, "3058": 2, "3059": 8, "3060": 8, "3061": 4, "3062": 3, "3063": 1, "3064": 4, "3065": 8, "3066": 3, "3067": 4, "3068": 3, "3069": 4, "3070": 6, "3071": 3, "3072": 7, "3073": 1, "3074": 4, "3075": 4, "3076": 4, "3077": 7, "3078": 4, "3079": 4, "3080": 4, "3081": 7, "3082": 4, "3083": 1, "3084": 4, "3085": 4, "3086": 4, "3087": 8, "3088": 4, "3089": 4, "3090": 4, "3091": 2, "3092": 7, "3093": 7, "3094": 4, "3095": 8, "3096": 2, "3097": 2, "3098": 4, "3099": 2, "3100": 5, "3101": 4, "3102": 8, "3103": 8, "3104": 4, "3105": 2, "3106": 2, "3107": 4, "3108": 7, "3109": 4, "3110": 4, "3111": 6, "3112": 4, "3113": 1, "3114": 2, "3115": 2, "3116": 1, "3117": 1, "3118": 4, "3119": 1, "3120": 3, "3121": 1, "3122": 4, "3123": 8, "3124": 7, "3125": 1, "3126": 0, "3127": 1, "3128": 4, "3129": 4, "3130": 8, "3131": 4, "3132": 8, "3133": 7, "3134": 4, "3135": 1, "3136": 2, "3137": 4, "3138": 4, "3139": 4, "3140": 7, "3141": 3, "3142": 2, "3143": 1, "3144": 4, "3145": 4, "3146": 4, "3147": 4, "3148": 8, "3149": 6, "3150": 4, "3151": 7, "3152": 2, "3153": 0, "3154": 1, "3155": 4, "3156": 4, "3157": 1, "3158": 2, "3159": 4, "3160": 1, "3161": 1, "3162": 8, "3163": 8, "3164": 1, "3165": 8, "3166": 4, "3167": 4, "3168": 4, "3169": 1, "3170": 8, "3171": 2, "3172": 2, "3173": 7, "3174": 1, "3175": 1, "3176": 4, "3177": 4, "3178": 3, "3179": 4, "3180": 4, "3181": 4, "3182": 1, "3183": 2, "3184": 4, "3185": 1, "3186": 1, "3187": 4, "3188": 1, "3189": 4, "3190": 2, "3191": 6, "3192": 8, "3193": 8, "3194": 8, "3195": 2, "3196": 8, "3197": 9, "3198": 2, "3199": 4, "3200": 4, "3201": 4, "3202": 1, "3203": 4, "3204": 4, "3205": 4, "3206": 4, "3207": 8, "3208": 4, "3209": 4, "3210": 4, "3211": 4, "3212": 8, "3213": 8, "3214": 1, "3215": 6, "3216": 4, "3217": 1, "3218": 1, "3219": 1, "3220": 2, "3221": 3, "3222": 4, "3223": 6, "3224": 3, "3225": 4, "3226": 8, "3227": 8, "3228": 2, "3229": 4, "3230": 4, "3231": 8, "3232": 2, "3233": 7, "3234": 4, "3235": 8, "3236": 9, "3237": 4, "3238": 6, "3239": 4, "3240": 1, "3241": 8, "3242": 6, "3243": 4, "3244": 8, "3245": 4, "3246": 1, "3247": 4, "3248": 1, "3249": 9, "3250": 7, "3251": 1, "3252": 4, "3253": 6, "3254": 8, "3255": 1, "3256": 4, "3257": 4, "3258": 8, "3259": 2, "3260": 3, "3261": 8, "3262": 8, "3263": 4, "3264": 8, "3265": 2, "3266": 4, "3267": 2, "3268": 2, "3269": 8, "3270": 1, "3271": 8, "3272": 8, "3273": 4, "3274": 4, "3275": 4, "3276": 7, "3277": 1, "3278": 4, "3279": 4, "3280": 4, "3281": 4, "3282": 4, "3283": 4, "3284": 4, "3285": 4, "3286": 1, "3287": 2, "3288": 1, "3289": 4, "3290": 4, "3291": 2, "3292": 8, "3293": 2, "3294": 4, "3295": 9, "3296": 2, "3297": 7, "3298": 4, "3299": 7, "3300": 5, "3301": 1, "3302": 4, "3303": 8, "3304": 3, "3305": 1, "3306": 4, "3307": 4, "3308": 1, "3309": 8, "3310": 1, "3311": 5, "3312": 4, "3313": 1, "3314": 6, "3315": 1, "3316": 1, "3317": 4, "3318": 2, "3319": 7, "3320": 4, "3321": 1, "3322": 1, "3323": 4, "3324": 4, "3325": 8, "3326": 4, "3327": 4, "3328": 4, "3329": 4, "3330": 4, "3331": 4, "3332": 4, "3333": 4, "3334": 0, "3335": 4, "3336": 4, "3337": 7, "3338": 2, "3339": 4, "3340": 6, "3341": 9, "3342": 1, "3343": 6, "3344": 2, "3345": 3, "3346": 4, "3347": 4, "3348": 4, "3349": 1, "3350": 8, "3351": 4, "3352": 4, "3353": 4, "3354": 4, "3355": 4, "3356": 4, "3357": 8, "3358": 7, "3359": 7, "3360": 4, "3361": 4, "3362": 9, "3363": 1, "3364": 4, "3365": 8, "3366": 4, "3367": 8, "3368": 8, "3369": 2, "3370": 4, "3371": 4, "3372": 4, "3373": 1, "3374": 1, "3375": 2, "3376": 4, "3377": 1, "3378": 4, "3379": 8, "3380": 4, "3381": 4, "3382": 6, "3383": 8, "3384": 4, "3385": 8, "3386": 2, "3387": 3, "3388": 7, "3389": 2, "3390": 2, "3391": 1, "3392": 4, "3393": 8, "3394": 4, "3395": 0, "3396": 1, "3397": 2, "3398": 5, "3399": 2, "3400": 1, "3401": 0, "3402": 4, "3403": 3, "3404": 6, "3405": 1, "3406": 1, "3407": 6, "3408": 8, "3409": 7, "3410": 4, "3411": 2, "3412": 0, "3413": 4, "3414": 1, "3415": 2, "3416": 0, "3417": 8, "3418": 2, "3419": 4, "3420": 4, "3421": 4, "3422": 8, "3423": 8, "3424": 4, "3425": 2, "3426": 6, "3427": 4, "3428": 4, "3429": 2, "3430": 6, "3431": 4, "3432": 7, "3433": 8, "3434": 2, "3435": 4, "3436": 4, "3437": 4, "3438": 5, "3439": 7, "3440": 8, "3441": 8, "3442": 0, "3443": 3, "3444": 0, "3445": 4, "3446": 4, "3447": 1, "3448": 2, "3449": 1, "3450": 1, "3451": 0, "3452": 4, "3453": 7, "3454": 4, "3455": 2, "3456": 4, "3457": 1, "3458": 4, "3459": 1, "3460": 1, "3461": 4, "3462": 4, "3463": 2, "3464": 4, "3465": 4, "3466": 6, "3467": 4, "3468": 3, "3469": 8, "3470": 4, "3471": 8, "3472": 4, "3473": 2, "3474": 8, "3475": 4, "3476": 1, "3477": 2, "3478": 1, "3479": 4, "3480": 4, "3481": 4, "3482": 1, "3483": 1, "3484": 8, "3485": 8, "3486": 2, "3487": 1, "3488": 8, "3489": 1, "3490": 2, "3491": 1, "3492": 1, "3493": 9, "3494": 4, "3495": 8, "3496": 1, "3497": 3, "3498": 1, "3499": 7, "3500": 1, "3501": 4, "3502": 4, "3503": 4, "3504": 4, "3505": 7, "3506": 7, "3507": 1, "3508": 4, "3509": 1, "3510": 0, "3511": 4, "3512": 8, "3513": 1, "3514": 4, "3515": 4, "3516": 1, "3517": 8, "3518": 4, "3519": 8, "3520": 1, "3521": 5, "3522": 8, "3523": 2, "3524": 4, "3525": 1, "3526": 1, "3527": 1, "3528": 8, "3529": 5, "3530": 4, "3531": 7, "3532": 8, "3533": 4, "3534": 7, "3535": 4, "3536": 6, "3537": 7, "3538": 2, "3539": 4, "3540": 6, "3541": 4, "3542": 4, "3543": 2, "3544": 9, "3545": 6, "3546": 4, "3547": 1, "3548": 8, "3549": 8, "3550": 4, "3551": 8, "3552": 4, "3553": 2, "3554": 4, "3555": 4, "3556": 8, "3557": 8, "3558": 2, "3559": 7, "3560": 5, "3561": 1, "3562": 1, "3563": 9, "3564": 8, "3565": 2, "3566": 2, "3567": 2, "3568": 7, "3569": 4, "3570": 6, "3571": 6, "3572": 6, "3573": 1, "3574": 1, "3575": 4, "3576": 4, "3577": 4, "3578": 4, "3579": 2, "3580": 4, "3581": 4, "3582": 9, "3583": 3, "3584": 4, "3585": 4, "3586": 0, "3587": 4, "3588": 4, "3589": 4, "3590": 1, "3591": 2, "3592": 0, "3593": 8, "3594": 4, "3595": 4, "3596": 4, "3597": 2, "3598": 1, "3599": 0, "3600": 0, "3601": 8, "3602": 2, "3603": 4, "3604": 4, "3605": 4, "3606": 1, "3607": 7, "3608": 8, "3609": 1, "3610": 4, "3611": 8, "3612": 4, "3613": 4, "3614": 2, "3615": 4, "3616": 4, "3617": 1, "3618": 8, "3619": 4, "3620": 8, "3621": 4, "3622": 8, "3623": 1, "3624": 8, "3625": 8, "3626": 5, "3627": 4, "3628": 4, "3629": 2, "3630": 8, "3631": 3, "3632": 8, "3633": 4, "3634": 4, "3635": 1, "3636": 8, "3637": 4, "3638": 4, "3639": 4, "3640": 4, "3641": 4, "3642": 1, "3643": 8, "3644": 0, "3645": 1, "3646": 4, "3647": 1, "3648": 9, "3649": 4, "3650": 4, "3651": 2, "3652": 2, "3653": 4, "3654": 0, "3655": 8, "3656": 8, "3657": 1, "3658": 4, "3659": 8, "3660": 8, "3661": 4, "3662": 1, "3663": 8, "3664": 4, "3665": 8, "3666": 1, "3667": 4, "3668": 2, "3669": 8, "3670": 9, "3671": 4, "3672": 4, "3673": 4, "3674": 4, "3675": 7, "3676": 4, "3677": 4, "3678": 1, "3679": 1, "3680": 4, "3681": 4, "3682": 1, "3683": 7, "3684": 4, "3685": 6, "3686": 3, "3687": 8, "3688": 2, "3689": 4, "3690": 1, "3691": 4, "3692": 4, "3693": 4, "3694": 4, "3695": 4, "3696": 4, "3697": 1, "3698": 4, "3699": 8, "3700": 2, "3701": 8, "3702": 7, "3703": 1, "3704": 1, "3705": 7, "3706": 4, "3707": 4, "3708": 2, "3709": 1, "3710": 2, "3711": 2, "3712": 4, "3713": 9, "3714": 4, "3715": 4, "3716": 4, "3717": 8, "3718": 7, "3719": 4, "3720": 2, "3721": 4, "3722": 8, "3723": 2, "3724": 4, "3725": 1, "3726": 2, "3727": 1, "3728": 4, "3729": 1, "3730": 4, "3731": 4, "3732": 3, "3733": 4, "3734": 4, "3735": 3, "3736": 4, "3737": 2, "3738": 4, "3739": 4, "3740": 5, "3741": 1, "3742": 8, "3743": 3, "3744": 4, "3745": 7, "3746": 4, "3747": 4, "3748": 4, "3749": 7, "3750": 8, "3751": 4, "3752": 4, "3753": 4, "3754": 4, "3755": 9, "3756": 0, "3757": 8, "3758": 1, "3759": 3, "3760": 8, "3761": 4, "3762": 8, "3763": 6, "3764": 4, "3765": 7, "3766": 4, "3767": 1, "3768": 2, "3769": 1, "3770": 4, "3771": 4, "3772": 8, "3773": 5, "3774": 4, "3775": 3, "3776": 4, "3777": 4, "3778": 4, "3779": 7, "3780": 4, "3781": 1, "3782": 9, "3783": 4, "3784": 2, "3785": 4, "3786": 4, "3787": 8, "3788": 8, "3789": 4, "3790": 4, "3791": 1, "3792": 2, "3793": 9, "3794": 4, "3795": 8, "3796": 2, "3797": 1, "3798": 4, "3799": 6, "3800": 4, "3801": 4, "3802": 2, "3803": 1, "3804": 4, "3805": 8, "3806": 0, "3807": 4, "3808": 4, "3809": 1, "3810": 5, "3811": 1, "3812": 8, "3813": 2, "3814": 4, "3815": 6, "3816": 1, "3817": 8, "3818": 4, "3819": 1, "3820": 4, "3821": 1, "3822": 4, "3823": 8, "3824": 2, "3825": 3, "3826": 4, "3827": 5, "3828": 2, "3829": 0, "3830": 5, "3831": 4, "3832": 4, "3833": 4, "3834": 8, "3835": 4, "3836": 2, "3837": 3, "3838": 2, "3839": 9, "3840": 8, "3841": 4, "3842": 2, "3843": 4, "3844": 1, "3845": 1, "3846": 8, "3847": 4, "3848": 4, "3849": 2, "3850": 1, "3851": 6, "3852": 4, "3853": 1, "3854": 4, "3855": 2, "3856": 4, "3857": 2, "3858": 2, "3859": 1, "3860": 1, "3861": 9, "3862": 4, "3863": 8, "3864": 6, "3865": 8, "3866": 8, "3867": 4, "3868": 4, "3869": 4, "3870": 0, "3871": 4, "3872": 1, "3873": 1, "3874": 4, "3875": 4, "3876": 4, "3877": 4, "3878": 7, "3879": 6, "3880": 1, "3881": 7, "3882": 2, "3883": 1, "3884": 1, "3885": 8, "3886": 2, "3887": 4, "3888": 7, "3889": 4, "3890": 4, "3891": 4, "3892": 6, "3893": 4, "3894": 6, "3895": 1, "3896": 8, "3897": 2, "3898": 8, "3899": 0, "3900": 3, "3901": 7, "3902": 4, "3903": 6, "3904": 8, "3905": 4, "3906": 2, "3907": 8, "3908": 8, "3909": 2, "3910": 4, "3911": 7, "3912": 7, "3913": 4, "3914": 4, "3915": 4, "3916": 4, "3917": 4, "3918": 3, "3919": 4, "3920": 1, "3921": 4, "3922": 2, "3923": 4, "3924": 4, "3925": 4, "3926": 4, "3927": 2, "3928": 2, "3929": 1, "3930": 6, "3931": 4, "3932": 8, "3933": 4, "3934": 2, "3935": 1, "3936": 4, "3937": 8, "3938": 8, "3939": 3, "3940": 3, "3941": 0, "3942": 1, "3943": 8, "3944": 4, "3945": 4, "3946": 8, "3947": 0, "3948": 1, "3949": 7, "3950": 4, "3951": 4, "3952": 8, "3953": 8, "3954": 4, "3955": 5, "3956": 1, "3957": 4, "3958": 4, "3959": 4, "3960": 0, "3961": 4, "3962": 4, "3963": 1, "3964": 4, "3965": 4, "3966": 0, "3967": 4, "3968": 1, "3969": 1, "3970": 4, "3971": 8, "3972": 1, "3973": 2, "3974": 4, "3975": 2, "3976": 4, "3977": 4, "3978": 8, "3979": 1, "3980": 4, "3981": 4, "3982": 1, "3983": 8, "3984": 6, "3985": 2, "3986": 0, "3987": 1, "3988": 1, "3989": 4, "3990": 4, "3991": 8, "3992": 8, "3993": 9, "3994": 1, "3995": 4, "3996": 8, "3997": 4, "3998": 9, "3999": 4, "4000": 4, "4001": 2, "4002": 1, "4003": 1, "4004": 2, "4005": 4, "4006": 4, "4007": 1, "4008": 4, "4009": 8, "4010": 8, "4011": 7, "4012": 4, "4013": 4, "4014": 3, "4015": 4, "4016": 3, "4017": 9, "4018": 8, "4019": 1, "4020": 7, "4021": 1, "4022": 5, "4023": 9, "4024": 4, "4025": 4, "4026": 4, "4027": 1, "4028": 2, "4029": 7, "4030": 7, "4031": 8, "4032": 4, "4033": 4, "4034": 1, "4035": 4, "4036": 4, "4037": 1, "4038": 7, "4039": 6, "4040": 3, "4041": 4, "4042": 4, "4043": 4, "4044": 3, "4045": 8, "4046": 8, "4047": 6, "4048": 4, "4049": 5, "4050": 7, "4051": 4, "4052": 1, "4053": 8, "4054": 0, "4055": 1, "4056": 4, "4057": 4, "4058": 2, "4059": 4, "4060": 2, "4061": 1, "4062": 4, "4063": 4, "4064": 4, "4065": 2, "4066": 8, "4067": 4, "4068": 7, "4069": 4, "4070": 6, "4071": 8, "4072": 4, "4073": 2, "4074": 4, "4075": 4, "4076": 4, "4077": 4, "4078": 2, "4079": 4, "4080": 1, "4081": 4, "4082": 0, "4083": 4, "4084": 8, "4085": 4, "4086": 8, "4087": 4, "4088": 8, "4089": 4, "4090": 2, "4091": 4, "4092": 6, "4093": 4, "4094": 2, "4095": 8, "4096": 0, "4097": 5, "4098": 3, "4099": 1, "4100": 4, "4101": 4, "4102": 4, "4103": 4, "4104": 4, "4105": 1, "4106": 4, "4107": 2, "4108": 4, "4109": 0, "4110": 4, "4111": 2, "4112": 4, "4113": 4, "4114": 1, "4115": 4, "4116": 4, "4117": 1, "4118": 1, "4119": 4, "4120": 4, "4121": 5, "4122": 6, "4123": 8, "4124": 1, "4125": 8, "4126": 8, "4127": 4, "4128": 2, "4129": 8, "4130": 5, "4131": 1, "4132": 8, "4133": 4, "4134": 1, "4135": 4, "4136": 4, "4137": 4, "4138": 8, "4139": 1, "4140": 3, "4141": 8, "4142": 4, "4143": 1, "4144": 4, "4145": 4, "4146": 1, "4147": 1, "4148": 8, "4149": 4, "4150": 8, "4151": 8, "4152": 7, "4153": 8, "4154": 4, "4155": 2, "4156": 1, "4157": 3, "4158": 4, "4159": 3, "4160": 3, "4161": 8, "4162": 4, "4163": 6, "4164": 7, "4165": 4, "4166": 8, "4167": 4, "4168": 8, "4169": 1, "4170": 6, "4171": 3, "4172": 8, "4173": 3, "4174": 4, "4175": 4, "4176": 2, "4177": 5, "4178": 8, "4179": 1, "4180": 5, "4181": 4, "4182": 7, "4183": 0, "4184": 1, "4185": 4, "4186": 4, "4187": 4, "4188": 2, "4189": 4, "4190": 4, "4191": 4, "4192": 5, "4193": 4, "4194": 4, "4195": 9, "4196": 4, "4197": 4, "4198": 4, "4199": 4, "4200": 8, "4201": 6, "4202": 1, "4203": 4, "4204": 4, "4205": 2, "4206": 6, "4207": 8, "4208": 4, "4209": 1, "4210": 4, "4211": 8, "4212": 4, "4213": 2, "4214": 4, "4215": 8, "4216": 2, "4217": 0, "4218": 4, "4219": 8, "4220": 6, "4221": 0, "4222": 4, "4223": 1, "4224": 4, "4225": 8, "4226": 4, "4227": 4, "4228": 1, "4229": 4, "4230": 4, "4231": 7, "4232": 9, "4233": 7, "4234": 4, "4235": 4, "4236": 4, "4237": 5, "4238": 8, "4239": 4, "4240": 4, "4241": 8, "4242": 5, "4243": 7, "4244": 2, "4245": 4, "4246": 4, "4247": 5, "4248": 4, "4249": 4, "4250": 4, "4251": 1, "4252": 8, "4253": 4, "4254": 7, "4255": 9, "4256": 4, "4257": 4, "4258": 4, "4259": 4, "4260": 1, "4261": 8, "4262": 8, "4263": 2, "4264": 4, "4265": 1, "4266": 1, "4267": 8, "4268": 4, "4269": 8, "4270": 7, "4271": 2, "4272": 4, "4273": 8, "4274": 1, "4275": 8, "4276": 8, "4277": 8, "4278": 4, "4279": 7, "4280": 4, "4281": 4, "4282": 8, "4283": 7, "4284": 8, "4285": 8, "4286": 1, "4287": 8, "4288": 5, "4289": 2, "4290": 8, "4291": 8, "4292": 2, "4293": 0, "4294": 7, "4295": 6, "4296": 4, "4297": 4, "4298": 4, "4299": 7, "4300": 4, "4301": 4, "4302": 0, "4303": 1, "4304": 8, "4305": 1, "4306": 8, "4307": 4, "4308": 1, "4309": 4, "4310": 1, "4311": 8, "4312": 4, "4313": 8, "4314": 7, "4315": 4, "4316": 8, "4317": 1, "4318": 4, "4319": 2, "4320": 4, "4321": 4, "4322": 8, "4323": 4, "4324": 3, "4325": 7, "4326": 4, "4327": 6, "4328": 8, "4329": 7, "4330": 8, "4331": 1, "4332": 0, "4333": 6, "4334": 8, "4335": 1, "4336": 2, "4337": 2, "4338": 1, "4339": 2, "4340": 2, "4341": 9, "4342": 4, "4343": 4, "4344": 8, "4345": 1, "4346": 4, "4347": 4, "4348": 1, "4349": 4, "4350": 4, "4351": 2, "4352": 6, "4353": 8, "4354": 1, "4355": 3, "4356": 0, "4357": 9, "4358": 2, "4359": 6, "4360": 1, "4361": 8, "4362": 4, "4363": 4, "4364": 3, "4365": 6, "4366": 4, "4367": 1, "4368": 4, "4369": 1, "4370": 8, "4371": 1, "4372": 1, "4373": 4, "4374": 9, "4375": 8, "4376": 1, "4377": 9, "4378": 0, "4379": 4, "4380": 6, "4381": 8, "4382": 0, "4383": 4, "4384": 4, "4385": 1, "4386": 1, "4387": 8, "4388": 0, "4389": 4, "4390": 8, "4391": 2, "4392": 6, "4393": 4, "4394": 4, "4395": 2, "4396": 2, "4397": 6, "4398": 1, "4399": 9, "4400": 1, "4401": 4, "4402": 8, "4403": 4, "4404": 1, "4405": 4, "4406": 8, "4407": 2, "4408": 4, "4409": 4, "4410": 4, "4411": 8, "4412": 1, "4413": 4, "4414": 2, "4415": 2, "4416": 4, "4417": 1, "4418": 2, "4419": 7, "4420": 4, "4421": 4, "4422": 4, "4423": 6, "4424": 4, "4425": 1, "4426": 4, "4427": 6, "4428": 9, "4429": 5, "4430": 4, "4431": 4, "4432": 4, "4433": 4, "4434": 8, "4435": 4, "4436": 8, "4437": 8, "4438": 8, "4439": 8, "4440": 4, "4441": 4, "4442": 4, "4443": 4, "4444": 7, "4445": 5, "4446": 8, "4447": 4, "4448": 1, "4449": 7, "4450": 1, "4451": 8, "4452": 4, "4453": 4, "4454": 4, "4455": 1, "4456": 2, "4457": 4, "4458": 4, "4459": 4, "4460": 6, "4461": 2, "4462": 8, "4463": 2, "4464": 5, "4465": 8, "4466": 2, "4467": 4, "4468": 4, "4469": 9, "4470": 4, "4471": 4, "4472": 0, "4473": 4, "4474": 1, "4475": 4, "4476": 7, "4477": 1, "4478": 4, "4479": 8, "4480": 5, "4481": 6, "4482": 8, "4483": 4, "4484": 3, "4485": 4, "4486": 4, "4487": 4, "4488": 0, "4489": 8, "4490": 8, "4491": 4, "4492": 2, "4493": 4, "4494": 4, "4495": 7, "4496": 8, "4497": 6, "4498": 8, "4499": 2, "4500": 4, "4501": 4, "4502": 1, "4503": 1, "4504": 4, "4505": 4, "4506": 4, "4507": 1, "4508": 1, "4509": 8, "4510": 1, "4511": 4, "4512": 2, "4513": 4, "4514": 4, "4515": 3, "4516": 4, "4517": 7, "4518": 1, "4519": 2, "4520": 4, "4521": 2, "4522": 1, "4523": 4, "4524": 2, "4525": 2, "4526": 4, "4527": 5, "4528": 1, "4529": 8, "4530": 4, "4531": 8, "4532": 1, "4533": 2, "4534": 2, "4535": 8, "4536": 1, "4537": 4, "4538": 6, "4539": 4, "4540": 4, "4541": 4, "4542": 1, "4543": 4, "4544": 8, "4545": 8, "4546": 4, "4547": 4, "4548": 0, "4549": 0, "4550": 4, "4551": 2, "4552": 4, "4553": 4, "4554": 4, "4555": 4, "4556": 6, "4557": 2, "4558": 6, "4559": 7, "4560": 1, "4561": 2, "4562": 4, "4563": 4, "4564": 8, "4565": 8, "4566": 4, "4567": 6, "4568": 2, "4569": 1, "4570": 1, "4571": 6, "4572": 1, "4573": 8, "4574": 4, "4575": 0, "4576": 1, "4577": 3, "4578": 6, "4579": 7, "4580": 4, "4581": 4, "4582": 4, "4583": 2, "4584": 5, "4585": 1, "4586": 4, "4587": 4, "4588": 1, "4589": 9, "4590": 4, "4591": 7, "4592": 4, "4593": 4, "4594": 8, "4595": 8, "4596": 8, "4597": 4, "4598": 2, "4599": 8, "4600": 9, "4601": 3, "4602": 2, "4603": 2, "4604": 1, "4605": 4, "4606": 2, "4607": 0, "4608": 8, "4609": 8, "4610": 4, "4611": 1, "4612": 5, "4613": 4, "4614": 1, "4615": 4, "4616": 0, "4617": 4, "4618": 4, "4619": 6, "4620": 4, "4621": 8, "4622": 4, "4623": 4, "4624": 7, "4625": 2, "4626": 8, "4627": 4, "4628": 3, "4629": 8, "4630": 4, "4631": 2, "4632": 5, "4633": 8, "4634": 8, "4635": 1, "4636": 7, "4637": 4, "4638": 0, "4639": 7, "4640": 4, "4641": 7, "4642": 0, "4643": 6, "4644": 6, "4645": 2, "4646": 3, "4647": 4, "4648": 2, "4649": 8, "4650": 7, "4651": 4, "4652": 1, "4653": 2, "4654": 4, "4655": 4, "4656": 9, "4657": 7, "4658": 2, "4659": 1, "4660": 4, "4661": 8, "4662": 4, "4663": 4, "4664": 2, "4665": 8, "4666": 8, "4667": 4, "4668": 8, "4669": 1, "4670": 4, "4671": 4, "4672": 7, "4673": 4, "4674": 7, "4675": 1, "4676": 6, "4677": 4, "4678": 6, "4679": 2, "4680": 8, "4681": 8, "4682": 4, "4683": 1, "4684": 2, "4685": 8, "4686": 7, "4687": 1, "4688": 9, "4689": 1, "4690": 4, "4691": 2, "4692": 6, "4693": 8, "4694": 4, "4695": 4, "4696": 4, "4697": 8, "4698": 8, "4699": 4, "4700": 8, "4701": 4, "4702": 4, "4703": 4, "4704": 4, "4705": 1, "4706": 4, "4707": 4, "4708": 4, "4709": 4, "4710": 4, "4711": 6, "4712": 4, "4713": 1, "4714": 4, "4715": 2, "4716": 4, "4717": 1, "4718": 8, "4719": 7, "4720": 1, "4721": 4, "4722": 8, "4723": 8, "4724": 4, "4725": 8, "4726": 1, "4727": 7, "4728": 0, "4729": 4, "4730": 1, "4731": 3, "4732": 2, "4733": 4, "4734": 1, "4735": 8, "4736": 4, "4737": 2, "4738": 1, "4739": 4, "4740": 4, "4741": 1, "4742": 8, "4743": 4, "4744": 4, "4745": 4, "4746": 4, "4747": 8, "4748": 4, "4749": 7, "4750": 1, "4751": 4, "4752": 4, "4753": 2, "4754": 6, "4755": 4, "4756": 1, "4757": 4, "4758": 4, "4759": 1, "4760": 4, "4761": 6, "4762": 4, "4763": 6, "4764": 3, "4765": 4, "4766": 0, "4767": 4, "4768": 4, "4769": 4, "4770": 8, "4771": 4, "4772": 4, "4773": 4, "4774": 4, "4775": 6, "4776": 4, "4777": 4, "4778": 1, "4779": 4, "4780": 4, "4781": 1, "4782": 1, "4783": 4, "4784": 6, "4785": 0, "4786": 8, "4787": 4, "4788": 9, "4789": 8, "4790": 8, "4791": 8, "4792": 4, "4793": 8, "4794": 4, "4795": 2, "4796": 3, "4797": 9, "4798": 4, "4799": 4, "4800": 2, "4801": 4, "4802": 2, "4803": 7, "4804": 4, "4805": 1, "4806": 2, "4807": 8, "4808": 2, "4809": 4, "4810": 4, "4811": 3, "4812": 7, "4813": 4, "4814": 3, "4815": 1, "4816": 4, "4817": 5, "4818": 4, "4819": 0, "4820": 4, "4821": 8, "4822": 8, "4823": 4, "4824": 2, "4825": 8, "4826": 4, "4827": 1, "4828": 1, "4829": 4, "4830": 4, "4831": 4, "4832": 4, "4833": 0, "4834": 1, "4835": 8, "4836": 5, "4837": 4, "4838": 4, "4839": 4, "4840": 3, "4841": 1, "4842": 2, "4843": 8, "4844": 8, "4845": 4, "4846": 4, "4847": 4, "4848": 1, "4849": 8, "4850": 7, "4851": 0, "4852": 8, "4853": 4, "4854": 4, "4855": 4, "4856": 2, "4857": 8, "4858": 1, "4859": 4, "4860": 4, "4861": 4, "4862": 8, "4863": 1, "4864": 7, "4865": 4, "4866": 4, "4867": 4, "4868": 8, "4869": 8, "4870": 1, "4871": 8, "4872": 4, "4873": 1, "4874": 3, "4875": 4, "4876": 1, "4877": 4, "4878": 4, "4879": 4, "4880": 4, "4881": 4, "4882": 7, "4883": 7, "4884": 2, "4885": 2, "4886": 1, "4887": 2, "4888": 1, "4889": 8, "4890": 8, "4891": 8, "4892": 7, "4893": 7, "4894": 4, "4895": 6, "4896": 2, "4897": 1, "4898": 4, "4899": 2, "4900": 2, "4901": 5, "4902": 8, "4903": 4, "4904": 8, "4905": 2, "4906": 1, "4907": 1, "4908": 4, "4909": 1, "4910": 8, "4911": 4, "4912": 4, "4913": 1, "4914": 4, "4915": 0, "4916": 4, "4917": 4, "4918": 3, "4919": 1, "4920": 4, "4921": 8, "4922": 2, "4923": 7, "4924": 0, "4925": 8, "4926": 4, "4927": 8, "4928": 0, "4929": 4, "4930": 6, "4931": 1, "4932": 4, "4933": 5, "4934": 1, "4935": 7, "4936": 3, "4937": 4, "4938": 1, "4939": 4, "4940": 8, "4941": 2, "4942": 3, "4943": 8, "4944": 1, "4945": 6, "4946": 4, "4947": 4, "4948": 9, "4949": 8, "4950": 1, "4951": 1, "4952": 2, "4953": 6, "4954": 1, "4955": 1, "4956": 4, "4957": 0, "4958": 4, "4959": 4, "4960": 1, "4961": 1, "4962": 1, "4963": 1, "4964": 3, "4965": 9, "4966": 8, "4967": 7, "4968": 8, "4969": 1, "4970": 4, "4971": 5, "4972": 4, "4973": 4, "4974": 4, "4975": 4, "4976": 8, "4977": 5, "4978": 2, "4979": 8, "4980": 3, "4981": 1, "4982": 2, "4983": 9, "4984": 8, "4985": 7, "4986": 4, "4987": 6, "4988": 4, "4989": 4, "4990": 1, "4991": 7, "4992": 4, "4993": 8, "4994": 6, "4995": 8, "4996": 4, "4997": 9, "4998": 4, "4999": 4, "5000": 2, "5001": 4, "5002": 8, "5003": 1, "5004": 1, "5005": 8, "5006": 1, "5007": 4, "5008": 1, "5009": 8, "5010": 4, "5011": 5, "5012": 5, "5013": 4, "5014": 1, "5015": 7, "5016": 8, "5017": 4, "5018": 4, "5019": 1, "5020": 5, "5021": 5, "5022": 4, "5023": 8, "5024": 4, "5025": 8, "5026": 1, "5027": 4, "5028": 2, "5029": 8, "5030": 4, "5031": 4, "5032": 8, "5033": 4, "5034": 4, "5035": 0, "5036": 3, "5037": 2, "5038": 2, "5039": 4, "5040": 4, "5041": 4, "5042": 4, "5043": 4, "5044": 1, "5045": 1, "5046": 8, "5047": 4, "5048": 9, "5049": 8, "5050": 1, "5051": 4, "5052": 1, "5053": 4, "5054": 4, "5055": 0, "5056": 4, "5057": 4, "5058": 1, "5059": 2, "5060": 4, "5061": 4, "5062": 8, "5063": 8, "5064": 2, "5065": 7, "5066": 4, "5067": 1, "5068": 8, "5069": 8, "5070": 7, "5071": 2, "5072": 8, "5073": 4, "5074": 4, "5075": 4, "5076": 8, "5077": 4, "5078": 4, "5079": 1, "5080": 8, "5081": 7, "5082": 0, "5083": 1, "5084": 1, "5085": 4, "5086": 4, "5087": 4, "5088": 4, "5089": 1, "5090": 7, "5091": 4, "5092": 3, "5093": 4, "5094": 2, "5095": 2, "5096": 4, "5097": 5, "5098": 2, "5099": 5, "5100": 4, "5101": 1, "5102": 4, "5103": 8, "5104": 7, "5105": 4, "5106": 8, "5107": 1, "5108": 8, "5109": 8, "5110": 5, "5111": 4, "5112": 6, "5113": 9, "5114": 8, "5115": 3, "5116": 4, "5117": 4, "5118": 4, "5119": 1, "5120": 6, "5121": 4, "5122": 4, "5123": 6, "5124": 4, "5125": 3, "5126": 2, "5127": 3, "5128": 4, "5129": 7, "5130": 1, "5131": 1, "5132": 8, "5133": 4, "5134": 8, "5135": 4, "5136": 8, "5137": 2, "5138": 2, "5139": 8, "5140": 1, "5141": 4, "5142": 7, "5143": 6, "5144": 4, "5145": 8, "5146": 1, "5147": 2, "5148": 3, "5149": 3, "5150": 8, "5151": 8, "5152": 8, "5153": 4, "5154": 6, "5155": 4, "5156": 1, "5157": 4, "5158": 1, "5159": 8, "5160": 4, "5161": 3, "5162": 8, "5163": 4, "5164": 8, "5165": 8, "5166": 9, "5167": 4, "5168": 4, "5169": 3, "5170": 4, "5171": 2, "5172": 4, "5173": 7, "5174": 2, "5175": 1, "5176": 4, "5177": 9, "5178": 4, "5179": 2, "5180": 8, "5181": 4, "5182": 4, "5183": 4, "5184": 2, "5185": 3, "5186": 5, "5187": 4, "5188": 8, "5189": 4, "5190": 7, "5191": 8, "5192": 7, "5193": 4, "5194": 2, "5195": 4, "5196": 2, "5197": 7, "5198": 4, "5199": 1, "5200": 2, "5201": 1, "5202": 4, "5203": 1, "5204": 8, "5205": 8, "5206": 4, "5207": 1, "5208": 8, "5209": 1, "5210": 1, "5211": 4, "5212": 9, "5213": 2, "5214": 4, "5215": 1, "5216": 4, "5217": 7, "5218": 1, "5219": 2, "5220": 4, "5221": 2, "5222": 4, "5223": 4, "5224": 1, "5225": 5, "5226": 4, "5227": 4, "5228": 4, "5229": 5, "5230": 6, "5231": 1, "5232": 3, "5233": 4, "5234": 1, "5235": 2, "5236": 0, "5237": 8, "5238": 4, "5239": 6, "5240": 4, "5241": 1, "5242": 4, "5243": 4, "5244": 4, "5245": 1, "5246": 7, "5247": 4, "5248": 1, "5249": 4, "5250": 4, "5251": 6, "5252": 8, "5253": 1, "5254": 8, "5255": 8, "5256": 4, "5257": 4, "5258": 1, "5259": 4, "5260": 4, "5261": 8, "5262": 5, "5263": 4, "5264": 1, "5265": 2, "5266": 4, "5267": 7, "5268": 4, "5269": 1, "5270": 1, "5271": 1, "5272": 4, "5273": 8, "5274": 1, "5275": 3, "5276": 1, "5277": 2, "5278": 0, "5279": 4, "5280": 4, "5281": 4, "5282": 1, "5283": 1, "5284": 1, "5285": 2, "5286": 8, "5287": 2, "5288": 2, "5289": 2, "5290": 9, "5291": 2, "5292": 2, "5293": 3, "5294": 1, "5295": 3, "5296": 4, "5297": 4, "5298": 8, "5299": 4, "5300": 4, "5301": 0, "5302": 2, "5303": 4, "5304": 4, "5305": 4, "5306": 7, "5307": 1, "5308": 2, "5309": 4, "5310": 4, "5311": 1, "5312": 8, "5313": 4, "5314": 7, "5315": 4, "5316": 1, "5317": 4, "5318": 2, "5319": 1, "5320": 2, "5321": 4, "5322": 0, "5323": 4, "5324": 4, "5325": 7, "5326": 8, "5327": 1, "5328": 4, "5329": 8, "5330": 4, "5331": 1, "5332": 4, "5333": 2, "5334": 5, "5335": 4, "5336": 2, "5337": 8, "5338": 5, "5339": 3, "5340": 4, "5341": 4, "5342": 2, "5343": 9, "5344": 4, "5345": 1, "5346": 0, "5347": 4, "5348": 5, "5349": 2, "5350": 3, "5351": 8, "5352": 8, "5353": 4, "5354": 4, "5355": 8, "5356": 4, "5357": 7, "5358": 4, "5359": 1, "5360": 4, "5361": 4, "5362": 1, "5363": 5, "5364": 4, "5365": 4, "5366": 0, "5367": 1, "5368": 4, "5369": 7, "5370": 1, "5371": 1, "5372": 1, "5373": 0, "5374": 5, "5375": 5, "5376": 4, "5377": 8, "5378": 8, "5379": 1, "5380": 8, "5381": 8, "5382": 4, "5383": 1, "5384": 4, "5385": 4, "5386": 2, "5387": 1, "5388": 1, "5389": 7, "5390": 2, "5391": 4, "5392": 1, "5393": 3, "5394": 1, "5395": 4, "5396": 2, "5397": 8, "5398": 1, "5399": 4, "5400": 9, "5401": 6, "5402": 1, "5403": 5, "5404": 1, "5405": 8, "5406": 8, "5407": 4, "5408": 4, "5409": 4, "5410": 4, "5411": 3, "5412": 8, "5413": 3, "5414": 4, "5415": 8, "5416": 4, "5417": 1, "5418": 2, "5419": 2, "5420": 1, "5421": 4, "5422": 7, "5423": 4, "5424": 4, "5425": 2, "5426": 4, "5427": 2, "5428": 4, "5429": 2, "5430": 2, "5431": 4, "5432": 1, "5433": 4, "5434": 4, "5435": 1, "5436": 1, "5437": 1, "5438": 1, "5439": 5, "5440": 7, "5441": 1, "5442": 1, "5443": 4, "5444": 1, "5445": 4, "5446": 4, "5447": 1, "5448": 4, "5449": 3, "5450": 4, "5451": 4, "5452": 0, "5453": 4, "5454": 4, "5455": 3, "5456": 2, "5457": 8, "5458": 4, "5459": 8, "5460": 8, "5461": 4, "5462": 4, "5463": 8, "5464": 8, "5465": 2, "5466": 8, "5467": 1, "5468": 2, "5469": 6, "5470": 4, "5471": 1, "5472": 1, "5473": 2, "5474": 2, "5475": 4, "5476": 8, "5477": 2, "5478": 1, "5479": 2, "5480": 4, "5481": 1, "5482": 4, "5483": 1, "5484": 4, "5485": 4, "5486": 1, "5487": 8, "5488": 1, "5489": 2, "5490": 2, "5491": 7, "5492": 2, "5493": 4, "5494": 7, "5495": 6, "5496": 4, "5497": 4, "5498": 7, "5499": 4, "5500": 2, "5501": 8, "5502": 4, "5503": 7, "5504": 4, "5505": 2, "5506": 4, "5507": 8, "5508": 4, "5509": 1, "5510": 8, "5511": 2, "5512": 4, "5513": 4, "5514": 4, "5515": 4, "5516": 6, "5517": 7, "5518": 2, "5519": 8, "5520": 4, "5521": 5, "5522": 4, "5523": 4, "5524": 4, "5525": 4, "5526": 0, "5527": 1, "5528": 6, "5529": 4, "5530": 1, "5531": 9, "5532": 4, "5533": 4, "5534": 1, "5535": 8, "5536": 4, "5537": 8, "5538": 7, "5539": 4, "5540": 8, "5541": 0, "5542": 1, "5543": 1, "5544": 4, "5545": 8, "5546": 8, "5547": 2, "5548": 4, "5549": 6, "5550": 4, "5551": 4, "5552": 4, "5553": 4, "5554": 1, "5555": 8, "5556": 1, "5557": 2, "5558": 3, "5559": 8, "5560": 4, "5561": 1, "5562": 3, "5563": 7, "5564": 4, "5565": 4, "5566": 7, "5567": 8, "5568": 4, "5569": 1, "5570": 4, "5571": 9, "5572": 4, "5573": 4, "5574": 4, "5575": 4, "5576": 1, "5577": 2, "5578": 4, "5579": 4, "5580": 5, "5581": 2, "5582": 2, "5583": 2, "5584": 1, "5585": 6, "5586": 4, "5587": 4, "5588": 6, "5589": 4, "5590": 1, "5591": 2, "5592": 2, "5593": 4, "5594": 1, "5595": 6, "5596": 6, "5597": 4, "5598": 4, "5599": 1, "5600": 3, "5601": 1, "5602": 8, "5603": 9, "5604": 4, "5605": 6, "5606": 4, "5607": 4, "5608": 1, "5609": 4, "5610": 1, "5611": 5, "5612": 4, "5613": 8, "5614": 4, "5615": 2, "5616": 6, "5617": 6, "5618": 6, "5619": 4, "5620": 8, "5621": 2, "5622": 0, "5623": 4, "5624": 4, "5625": 2, "5626": 4, "5627": 0, "5628": 4, "5629": 4, "5630": 4, "5631": 2, "5632": 7, "5633": 0, "5634": 2, "5635": 2, "5636": 8, "5637": 0, "5638": 2, "5639": 7, "5640": 4, "5641": 4, "5642": 4, "5643": 1, "5644": 8, "5645": 4, "5646": 7, "5647": 1, "5648": 1, "5649": 4, "5650": 1, "5651": 8, "5652": 7, "5653": 1, "5654": 4, "5655": 1, "5656": 6, "5657": 8, "5658": 2, "5659": 4, "5660": 8, "5661": 1, "5662": 5, "5663": 1, "5664": 1, "5665": 1, "5666": 8, "5667": 4, "5668": 4, "5669": 8, "5670": 4, "5671": 4, "5672": 4, "5673": 4, "5674": 4, "5675": 0, "5676": 4, "5677": 6, "5678": 4, "5679": 4, "5680": 4, "5681": 4, "5682": 1, "5683": 1, "5684": 2, "5685": 4, "5686": 1, "5687": 4, "5688": 4, "5689": 1, "5690": 8, "5691": 8, "5692": 9, "5693": 3, "5694": 4, "5695": 1, "5696": 4, "5697": 4, "5698": 8, "5699": 8, "5700": 9, "5701": 4, "5702": 8, "5703": 4, "5704": 6, "5705": 5, "5706": 0, "5707": 5, "5708": 1, "5709": 4, "5710": 4, "5711": 4, "5712": 0, "5713": 4, "5714": 2, "5715": 4, "5716": 2, "5717": 2, "5718": 4, "5719": 4, "5720": 4, "5721": 2, "5722": 7, "5723": 8, "5724": 4, "5725": 1, "5726": 8, "5727": 4, "5728": 4, "5729": 4, "5730": 2, "5731": 4, "5732": 4, "5733": 4, "5734": 8, "5735": 1, "5736": 2, "5737": 4, "5738": 3, "5739": 5, "5740": 8, "5741": 8, "5742": 4, "5743": 1, "5744": 4, "5745": 0, "5746": 2, "5747": 1, "5748": 4, "5749": 2, "5750": 8, "5751": 3, "5752": 4, "5753": 8, "5754": 5, "5755": 4, "5756": 9, "5757": 4, "5758": 6, "5759": 2, "5760": 8, "5761": 1, "5762": 8, "5763": 2, "5764": 8, "5765": 2, "5766": 9, "5767": 4, "5768": 4, "5769": 8, "5770": 2, "5771": 4, "5772": 8, "5773": 4, "5774": 8, "5775": 1, "5776": 5, "5777": 6, "5778": 4, "5779": 4, "5780": 4, "5781": 5, "5782": 4, "5783": 4, "5784": 8, "5785": 4, "5786": 0, "5787": 1, "5788": 4, "5789": 4, "5790": 4, "5791": 8, "5792": 4, "5793": 9, "5794": 4, "5795": 4, "5796": 7, "5797": 1, "5798": 7, "5799": 3, "5800": 4, "5801": 3, "5802": 1, "5803": 6, "5804": 1, "5805": 8, "5806": 4, "5807": 3, "5808": 1, "5809": 4, "5810": 4, "5811": 8, "5812": 4, "5813": 4, "5814": 8, "5815": 7, "5816": 4, "5817": 4, "5818": 2, "5819": 8, "5820": 1, "5821": 4, "5822": 8, "5823": 6, "5824": 4, "5825": 4, "5826": 4, "5827": 4, "5828": 4, "5829": 5, "5830": 8, "5831": 8, "5832": 4, "5833": 8, "5834": 1, "5835": 1, "5836": 8, "5837": 8, "5838": 4, "5839": 4, "5840": 8, "5841": 2, "5842": 4, "5843": 2, "5844": 4, "5845": 2, "5846": 4, "5847": 9, "5848": 3, "5849": 4, "5850": 4, "5851": 1, "5852": 4, "5853": 4, "5854": 6, "5855": 1, "5856": 4, "5857": 1, "5858": 1, "5859": 5, "5860": 2, "5861": 8, "5862": 4, "5863": 4, "5864": 7, "5865": 3, "5866": 8, "5867": 4, "5868": 8, "5869": 4, "5870": 4, "5871": 4, "5872": 6, "5873": 4, "5874": 2, "5875": 4, "5876": 8, "5877": 1, "5878": 4, "5879": 1, "5880": 0, "5881": 4, "5882": 4, "5883": 2, "5884": 8, "5885": 8, "5886": 8, "5887": 4, "5888": 4, "5889": 4, "5890": 7, "5891": 8, "5892": 4, "5893": 7, "5894": 2, "5895": 1, "5896": 4, "5897": 4, "5898": 2, "5899": 4, "5900": 1, "5901": 8, "5902": 4, "5903": 4, "5904": 2, "5905": 4, "5906": 4, "5907": 0, "5908": 4, "5909": 7, "5910": 0, "5911": 0, "5912": 0, "5913": 4, "5914": 4, "5915": 8, "5916": 1, "5917": 4, "5918": 8, "5919": 1, "5920": 2, "5921": 4, "5922": 4, "5923": 4, "5924": 0, "5925": 9, "5926": 4, "5927": 4, "5928": 4, "5929": 5, "5930": 4, "5931": 2, "5932": 4, "5933": 8, "5934": 6, "5935": 4, "5936": 4, "5937": 4, "5938": 2, "5939": 3, "5940": 1, "5941": 4, "5942": 4, "5943": 2, "5944": 4, "5945": 1, "5946": 1, "5947": 4, "5948": 4, "5949": 4, "5950": 1, "5951": 4, "5952": 4, "5953": 6, "5954": 8, "5955": 4, "5956": 8, "5957": 9, "5958": 4, "5959": 0, "5960": 4, "5961": 3, "5962": 4, "5963": 7, "5964": 2, "5965": 2, "5966": 4, "5967": 4, "5968": 3, "5969": 1, "5970": 4, "5971": 8, "5972": 7, "5973": 1, "5974": 7, "5975": 1, "5976": 4, "5977": 8, "5978": 4, "5979": 4, "5980": 8, "5981": 7, "5982": 8, "5983": 4, "5984": 4, "5985": 3, "5986": 8, "5987": 6, "5988": 4, "5989": 8, "5990": 4, "5991": 7, "5992": 4, "5993": 7, "5994": 4, "5995": 8, "5996": 4, "5997": 3, "5998": 8, "5999": 1, "6000": 3, "6001": 4, "6002": 4, "6003": 8, "6004": 4, "6005": 2, "6006": 4, "6007": 3, "6008": 4, "6009": 4, "6010": 1, "6011": 2, "6012": 1, "6013": 4, "6014": 4, "6015": 8, "6016": 4, "6017": 8, "6018": 3, "6019": 4, "6020": 4, "6021": 4, "6022": 8, "6023": 1, "6024": 3, "6025": 4, "6026": 4, "6027": 1, "6028": 1, "6029": 4, "6030": 8, "6031": 4, "6032": 2, "6033": 4, "6034": 4, "6035": 4, "6036": 7, "6037": 3, "6038": 1, "6039": 4, "6040": 3, "6041": 4, "6042": 4, "6043": 4, "6044": 4, "6045": 4, "6046": 5, "6047": 9, "6048": 4, "6049": 2, "6050": 0, "6051": 0, "6052": 4, "6053": 8, "6054": 4, "6055": 3, "6056": 8, "6057": 4, "6058": 2, "6059": 4, "6060": 4, "6061": 4, "6062": 8, "6063": 1, "6064": 4, "6065": 3, "6066": 4, "6067": 6, "6068": 1, "6069": 3, "6070": 4, "6071": 4, "6072": 2, "6073": 7, "6074": 4, "6075": 4, "6076": 4, "6077": 1, "6078": 4, "6079": 4, "6080": 1, "6081": 7, "6082": 4, "6083": 4, "6084": 1, "6085": 4, "6086": 4, "6087": 8, "6088": 4, "6089": 4, "6090": 4, "6091": 4, "6092": 8, "6093": 4, "6094": 7, "6095": 4, "6096": 8, "6097": 8, "6098": 2, "6099": 5, "6100": 8, "6101": 4, "6102": 1, "6103": 8, "6104": 4, "6105": 8, "6106": 3, "6107": 5, "6108": 4, "6109": 7, "6110": 6, "6111": 8, "6112": 3, "6113": 4, "6114": 4, "6115": 3, "6116": 4, "6117": 1, "6118": 2, "6119": 1, "6120": 4, "6121": 8, "6122": 7, "6123": 7, "6124": 7, "6125": 4, "6126": 4, "6127": 8, "6128": 4, "6129": 2, "6130": 4, "6131": 8, "6132": 2, "6133": 4, "6134": 7, "6135": 9, "6136": 4, "6137": 4, "6138": 4, "6139": 8, "6140": 4, "6141": 8, "6142": 4, "6143": 4, "6144": 8, "6145": 4, "6146": 4, "6147": 2, "6148": 7, "6149": 4, "6150": 1, "6151": 0, "6152": 4, "6153": 4, "6154": 4, "6155": 7, "6156": 8, "6157": 1, "6158": 5, "6159": 4, "6160": 4, "6161": 4, "6162": 1, "6163": 8, "6164": 1, "6165": 4, "6166": 0, "6167": 4, "6168": 2, "6169": 4, "6170": 4, "6171": 7, "6172": 1, "6173": 2, "6174": 1, "6175": 4, "6176": 2, "6177": 2, "6178": 7, "6179": 8, "6180": 4, "6181": 4, "6182": 0, "6183": 4, "6184": 1, "6185": 4, "6186": 4, "6187": 4, "6188": 2, "6189": 8, "6190": 4, "6191": 4, "6192": 4, "6193": 7, "6194": 7, "6195": 1, "6196": 7, "6197": 4, "6198": 4, "6199": 4, "6200": 1, "6201": 1, "6202": 1, "6203": 7, "6204": 1, "6205": 4, "6206": 1, "6207": 4, "6208": 4, "6209": 4, "6210": 4, "6211": 4, "6212": 4, "6213": 3, "6214": 8, "6215": 4, "6216": 1, "6217": 4, "6218": 1, "6219": 4, "6220": 2, "6221": 9, "6222": 8, "6223": 8, "6224": 5, "6225": 4, "6226": 8, "6227": 4, "6228": 4, "6229": 1, "6230": 1, "6231": 4, "6232": 4, "6233": 6, "6234": 4, "6235": 1, "6236": 1, "6237": 2, "6238": 4, "6239": 1, "6240": 4, "6241": 4, "6242": 4, "6243": 8, "6244": 4, "6245": 4, "6246": 4, "6247": 4, "6248": 1, "6249": 4, "6250": 4, "6251": 8, "6252": 4, "6253": 9, "6254": 4, "6255": 4, "6256": 1, "6257": 4, "6258": 4, "6259": 4, "6260": 8, "6261": 4, "6262": 6, "6263": 8, "6264": 2, "6265": 2, "6266": 2, "6267": 4, "6268": 4, "6269": 2, "6270": 3, "6271": 1, "6272": 9, "6273": 4, "6274": 4, "6275": 2, "6276": 4, "6277": 8, "6278": 5, "6279": 1, "6280": 4, "6281": 6, "6282": 4, "6283": 4, "6284": 9, "6285": 8, "6286": 8, "6287": 4, "6288": 4, "6289": 8, "6290": 4, "6291": 8, "6292": 2, "6293": 2, "6294": 3, "6295": 8, "6296": 8, "6297": 8, "6298": 4, "6299": 4, "6300": 8, "6301": 8, "6302": 2, "6303": 1, "6304": 2, "6305": 9, "6306": 8, "6307": 7, "6308": 1, "6309": 4, "6310": 4, "6311": 7, "6312": 0, "6313": 4, "6314": 8, "6315": 1, "6316": 2, "6317": 4, "6318": 4, "6319": 2, "6320": 8, "6321": 5, "6322": 4, "6323": 4, "6324": 4, "6325": 1, "6326": 4, "6327": 5, "6328": 2, "6329": 1, "6330": 4, "6331": 1, "6332": 9, "6333": 8, "6334": 4, "6335": 1, "6336": 3, "6337": 3, "6338": 1, "6339": 4, "6340": 0, "6341": 8, "6342": 4, "6343": 7, "6344": 4, "6345": 8, "6346": 7, "6347": 4, "6348": 4, "6349": 8, "6350": 8, "6351": 0, "6352": 6, "6353": 3, "6354": 4, "6355": 2, "6356": 4, "6357": 4, "6358": 1, "6359": 7, "6360": 8, "6361": 7, "6362": 5, "6363": 2, "6364": 2, "6365": 4, "6366": 1, "6367": 1, "6368": 2, "6369": 3, "6370": 4, "6371": 4, "6372": 8, "6373": 0, "6374": 8, "6375": 4, "6376": 4, "6377": 4, "6378": 2, "6379": 1, "6380": 0, "6381": 7, "6382": 8, "6383": 4, "6384": 1, "6385": 8, "6386": 1, "6387": 2, "6388": 2, "6389": 1, "6390": 8, "6391": 4, "6392": 1, "6393": 4, "6394": 4, "6395": 7, "6396": 4, "6397": 8, "6398": 1, "6399": 6, "6400": 1, "6401": 8, "6402": 4, "6403": 4, "6404": 2, "6405": 4, "6406": 0, "6407": 4, "6408": 0, "6409": 3, "6410": 1, "6411": 4, "6412": 1, "6413": 1, "6414": 0, "6415": 1, "6416": 4, "6417": 8, "6418": 4, "6419": 4, "6420": 4, "6421": 4, "6422": 0, "6423": 6, "6424": 4, "6425": 4, "6426": 6, "6427": 8, "6428": 9, "6429": 8, "6430": 0, "6431": 4, "6432": 8, "6433": 7, "6434": 1, "6435": 4, "6436": 4, "6437": 4, "6438": 4, "6439": 0, "6440": 8, "6441": 4, "6442": 4, "6443": 7, "6444": 4, "6445": 4, "6446": 8, "6447": 4, "6448": 7, "6449": 2, "6450": 1, "6451": 5, "6452": 7, "6453": 4, "6454": 6, "6455": 4, "6456": 1, "6457": 4, "6458": 9, "6459": 4, "6460": 4, "6461": 4, "6462": 1, "6463": 4, "6464": 4, "6465": 4, "6466": 1, "6467": 8, "6468": 8, "6469": 8, "6470": 4, "6471": 7, "6472": 4, "6473": 8, "6474": 4, "6475": 0, "6476": 9, "6477": 4, "6478": 4, "6479": 4, "6480": 4, "6481": 7, "6482": 2, "6483": 8, "6484": 6, "6485": 0, "6486": 4, "6487": 6, "6488": 7, "6489": 4, "6490": 6, "6491": 2, "6492": 2, "6493": 6, "6494": 4, "6495": 4, "6496": 9, "6497": 8, "6498": 4, "6499": 1, "6500": 4, "6501": 3, "6502": 4, "6503": 1, "6504": 4, "6505": 4, "6506": 5, "6507": 7, "6508": 4, "6509": 8, "6510": 3, "6511": 2, "6512": 4, "6513": 4, "6514": 5, "6515": 1, "6516": 4, "6517": 8, "6518": 8, "6519": 4, "6520": 1, "6521": 2, "6522": 8, "6523": 4, "6524": 7, "6525": 4, "6526": 8, "6527": 4, "6528": 1, "6529": 4, "6530": 0, "6531": 4, "6532": 4, "6533": 7, "6534": 4, "6535": 7, "6536": 5, "6537": 3, "6538": 8, "6539": 8, "6540": 4, "6541": 4, "6542": 1, "6543": 4, "6544": 4, "6545": 4, "6546": 8, "6547": 4, "6548": 4, "6549": 4, "6550": 6, "6551": 4, "6552": 8, "6553": 2, "6554": 8, "6555": 4, "6556": 1, "6557": 9, "6558": 5, "6559": 4, "6560": 2, "6561": 4, "6562": 0, "6563": 1, "6564": 2, "6565": 2, "6566": 7, "6567": 6, "6568": 8, "6569": 7, "6570": 7, "6571": 0, "6572": 8, "6573": 1, "6574": 1, "6575": 6, "6576": 4, "6577": 4, "6578": 4, "6579": 7, "6580": 6, "6581": 2, "6582": 4, "6583": 4, "6584": 8, "6585": 4, "6586": 1, "6587": 4, "6588": 8, "6589": 2, "6590": 4, "6591": 8, "6592": 8, "6593": 1, "6594": 4, "6595": 3, "6596": 2, "6597": 8, "6598": 2, "6599": 8, "6600": 8, "6601": 4, "6602": 4, "6603": 8, "6604": 8, "6605": 6, "6606": 4, "6607": 2, "6608": 4, "6609": 4, "6610": 4, "6611": 7, "6612": 5, "6613": 4, "6614": 1, "6615": 5, "6616": 8, "6617": 7, "6618": 9, "6619": 8, "6620": 0, "6621": 2, "6622": 4, "6623": 6, "6624": 1, "6625": 0, "6626": 7, "6627": 4, "6628": 8, "6629": 2, "6630": 8, "6631": 4, "6632": 7, "6633": 2, "6634": 4, "6635": 3, "6636": 0, "6637": 9, "6638": 4, "6639": 1, "6640": 4, "6641": 6, "6642": 4, "6643": 1, "6644": 6, "6645": 4, "6646": 4, "6647": 1, "6648": 4, "6649": 7, "6650": 1, "6651": 7, "6652": 4, "6653": 0, "6654": 1, "6655": 1, "6656": 4, "6657": 4, "6658": 1, "6659": 1, "6660": 4, "6661": 2, "6662": 8, "6663": 7, "6664": 6, "6665": 8, "6666": 4, "6667": 9, "6668": 8, "6669": 4, "6670": 1, "6671": 4, "6672": 8, "6673": 1, "6674": 8, "6675": 4, "6676": 4, "6677": 8, "6678": 4, "6679": 0, "6680": 4, "6681": 5, "6682": 1, "6683": 8, "6684": 1, "6685": 4, "6686": 4, "6687": 4, "6688": 4, "6689": 9, "6690": 4, "6691": 8, "6692": 3, "6693": 1, "6694": 4, "6695": 5, "6696": 1, "6697": 2, "6698": 6, "6699": 4, "6700": 7, "6701": 2, "6702": 4, "6703": 8, "6704": 4, "6705": 4, "6706": 4, "6707": 8, "6708": 8, "6709": 4, "6710": 1, "6711": 2, "6712": 8, "6713": 7, "6714": 4, "6715": 1, "6716": 4, "6717": 3, "6718": 7, "6719": 2, "6720": 1, "6721": 1, "6722": 8, "6723": 1, "6724": 8, "6725": 2, "6726": 3, "6727": 1, "6728": 6, "6729": 8, "6730": 2, "6731": 1, "6732": 4, "6733": 4, "6734": 8, "6735": 1, "6736": 8, "6737": 2, "6738": 2, "6739": 7, "6740": 1, "6741": 4, "6742": 5, "6743": 9, "6744": 4, "6745": 2, "6746": 7, "6747": 2, "6748": 8, "6749": 4, "6750": 8, "6751": 4, "6752": 1, "6753": 4, "6754": 1, "6755": 6, "6756": 8, "6757": 7, "6758": 2, "6759": 4, "6760": 4, "6761": 4, "6762": 1, "6763": 4, "6764": 8, "6765": 6, "6766": 1, "6767": 8, "6768": 1, "6769": 6, "6770": 2, "6771": 1, "6772": 4, "6773": 4, "6774": 4, "6775": 1, "6776": 3, "6777": 4, "6778": 8, "6779": 7, "6780": 3, "6781": 4, "6782": 8, "6783": 1, "6784": 3, "6785": 2, "6786": 2, "6787": 1, "6788": 1, "6789": 8, "6790": 4, "6791": 3, "6792": 1, "6793": 2, "6794": 1, "6795": 4, "6796": 8, "6797": 1, "6798": 1, "6799": 1, "6800": 7, "6801": 8, "6802": 8, "6803": 4, "6804": 4, "6805": 4, "6806": 4, "6807": 4, "6808": 5, "6809": 8, "6810": 1, "6811": 4, "6812": 1, "6813": 4, "6814": 1, "6815": 4, "6816": 9, "6817": 0, "6818": 2, "6819": 8, "6820": 4, "6821": 4, "6822": 3, "6823": 7, "6824": 4, "6825": 4, "6826": 4, "6827": 8, "6828": 3, "6829": 8, "6830": 4, "6831": 4, "6832": 4, "6833": 4, "6834": 8, "6835": 4, "6836": 4, "6837": 0, "6838": 4, "6839": 4, "6840": 2, "6841": 7, "6842": 2, "6843": 2, "6844": 1, "6845": 3, "6846": 1, "6847": 4, "6848": 4, "6849": 4, "6850": 8, "6851": 3, "6852": 1, "6853": 4, "6854": 5, "6855": 4, "6856": 4, "6857": 5, "6858": 8, "6859": 4, "6860": 8, "6861": 0, "6862": 8, "6863": 4, "6864": 1, "6865": 1, "6866": 2, "6867": 4, "6868": 1, "6869": 7, "6870": 1, "6871": 4, "6872": 4, "6873": 8, "6874": 8, "6875": 8, "6876": 8, "6877": 4, "6878": 0, "6879": 2, "6880": 3, "6881": 8, "6882": 2, "6883": 4, "6884": 7, "6885": 4, "6886": 1, "6887": 8, "6888": 4, "6889": 8, "6890": 4, "6891": 8, "6892": 8, "6893": 4, "6894": 1, "6895": 0, "6896": 4, "6897": 5, "6898": 4, "6899": 4, "6900": 2, "6901": 4, "6902": 1, "6903": 9, "6904": 4, "6905": 4, "6906": 2, "6907": 8, "6908": 1, "6909": 1, "6910": 3, "6911": 8, "6912": 4, "6913": 4, "6914": 4, "6915": 4, "6916": 4, "6917": 4, "6918": 4, "6919": 4, "6920": 7, "6921": 8, "6922": 1, "6923": 8, "6924": 2, "6925": 1, "6926": 1, "6927": 4, "6928": 3, "6929": 4, "6930": 4, "6931": 2, "6932": 1, "6933": 1, "6934": 8, "6935": 1, "6936": 4, "6937": 0, "6938": 1, "6939": 4, "6940": 8, "6941": 1, "6942": 1, "6943": 4, "6944": 1, "6945": 1, "6946": 4, "6947": 4, "6948": 4, "6949": 4, "6950": 4, "6951": 4, "6952": 2, "6953": 4, "6954": 1, "6955": 4, "6956": 1, "6957": 8, "6958": 7, "6959": 1, "6960": 4, "6961": 8, "6962": 3, "6963": 4, "6964": 4, "6965": 4, "6966": 4, "6967": 4, "6968": 6, "6969": 8, "6970": 4, "6971": 9, "6972": 1, "6973": 9, "6974": 4, "6975": 7, "6976": 3, "6977": 1, "6978": 7, "6979": 1, "6980": 0, "6981": 8, "6982": 4, "6983": 7, "6984": 4, "6985": 7, "6986": 3, "6987": 4, "6988": 4, "6989": 4, "6990": 2, "6991": 7, "6992": 8, "6993": 8, "6994": 4, "6995": 4, "6996": 1, "6997": 1, "6998": 4, "6999": 4, "7000": 1, "7001": 8, "7002": 2, "7003": 4, "7004": 2, "7005": 0, "7006": 4, "7007": 3, "7008": 2, "7009": 2, "7010": 4, "7011": 4, "7012": 4, "7013": 4, "7014": 8, "7015": 4, "7016": 4, "7017": 0, "7018": 4, "7019": 1, "7020": 4, "7021": 4, "7022": 1, "7023": 5, "7024": 7, "7025": 4, "7026": 2, "7027": 1, "7028": 4, "7029": 6, "7030": 8, "7031": 2, "7032": 4, "7033": 4, "7034": 1, "7035": 2, "7036": 8, "7037": 3, "7038": 4, "7039": 4, "7040": 4, "7041": 7, "7042": 4, "7043": 4, "7044": 1, "7045": 1, "7046": 8, "7047": 1, "7048": 6, "7049": 4, "7050": 4, "7051": 4, "7052": 4, "7053": 3, "7054": 8, "7055": 1, "7056": 4, "7057": 2, "7058": 1, "7059": 1, "7060": 8, "7061": 4, "7062": 2, "7063": 8, "7064": 1, "7065": 8, "7066": 1, "7067": 4, "7068": 4, "7069": 6, "7070": 4, "7071": 4, "7072": 8, "7073": 2, "7074": 4, "7075": 0, "7076": 1, "7077": 1, "7078": 1, "7079": 4, "7080": 8, "7081": 7, "7082": 3, "7083": 4, "7084": 4, "7085": 4, "7086": 8, "7087": 0, "7088": 5, "7089": 4, "7090": 4, "7091": 2, "7092": 4, "7093": 2, "7094": 9, "7095": 4, "7096": 4, "7097": 8, "7098": 4, "7099": 1, "7100": 4, "7101": 8, "7102": 8, "7103": 1, "7104": 5, "7105": 4, "7106": 4, "7107": 4, "7108": 8, "7109": 4, "7110": 9, "7111": 4, "7112": 4, "7113": 4, "7114": 1, "7115": 4, "7116": 7, "7117": 1, "7118": 8, "7119": 4, "7120": 1, "7121": 4, "7122": 4, "7123": 1, "7124": 4, "7125": 4, "7126": 4, "7127": 4, "7128": 1, "7129": 3, "7130": 4, "7131": 1, "7132": 3, "7133": 4, "7134": 7, "7135": 4, "7136": 4, "7137": 0, "7138": 4, "7139": 4, "7140": 4, "7141": 7, "7142": 4, "7143": 4, "7144": 4, "7145": 4, "7146": 4, "7147": 2, "7148": 4, "7149": 8, "7150": 4, "7151": 5, "7152": 8, "7153": 4, "7154": 6, "7155": 4, "7156": 8, "7157": 6, "7158": 4, "7159": 4, "7160": 2, "7161": 1, "7162": 8, "7163": 4, "7164": 7, "7165": 1, "7166": 9, "7167": 3, "7168": 4, "7169": 4, "7170": 4, "7171": 8, "7172": 4, "7173": 4, "7174": 4, "7175": 8, "7176": 1, "7177": 4, "7178": 8, "7179": 2, "7180": 1, "7181": 7, "7182": 8, "7183": 2, "7184": 4, "7185": 0, "7186": 1, "7187": 2, "7188": 8, "7189": 4, "7190": 4, "7191": 2, "7192": 3, "7193": 8, "7194": 9, "7195": 4, "7196": 4, "7197": 1, "7198": 2, "7199": 2, "7200": 6, "7201": 4, "7202": 1, "7203": 4, "7204": 2, "7205": 1, "7206": 1, "7207": 3, "7208": 4, "7209": 4, "7210": 4, "7211": 2, "7212": 1, "7213": 8, "7214": 8, "7215": 4, "7216": 4, "7217": 6, "7218": 1, "7219": 8, "7220": 8, "7221": 4, "7222": 4, "7223": 4, "7224": 4, "7225": 4, "7226": 8, "7227": 8, "7228": 4, "7229": 2, "7230": 7, "7231": 4, "7232": 3, "7233": 3, "7234": 2, "7235": 6, "7236": 2, "7237": 1, "7238": 2, "7239": 2, "7240": 8, "7241": 4, "7242": 6, "7243": 8, "7244": 1, "7245": 4, "7246": 1, "7247": 1, "7248": 8, "7249": 8, "7250": 4, "7251": 4, "7252": 0, "7253": 0, "7254": 8, "7255": 4, "7256": 7, "7257": 7, "7258": 4, "7259": 4, "7260": 2, "7261": 4, "7262": 8, "7263": 7, "7264": 4, "7265": 1, "7266": 4, "7267": 4, "7268": 5, "7269": 1, "7270": 1, "7271": 4, "7272": 4, "7273": 1, "7274": 4, "7275": 4, "7276": 8, "7277": 6, "7278": 4, "7279": 4, "7280": 1, "7281": 7, "7282": 4, "7283": 1, "7284": 1, "7285": 2, "7286": 2, "7287": 6, "7288": 5, "7289": 4, "7290": 7, "7291": 4, "7292": 4, "7293": 2, "7294": 4, "7295": 4, "7296": 4, "7297": 1, "7298": 4, "7299": 4, "7300": 8, "7301": 2, "7302": 4, "7303": 2, "7304": 2, "7305": 8, "7306": 5, "7307": 4, "7308": 4, "7309": 4, "7310": 7, "7311": 5, "7312": 4, "7313": 8, "7314": 3, "7315": 1, "7316": 1, "7317": 4, "7318": 4, "7319": 2, "7320": 1, "7321": 6, "7322": 2, "7323": 6, "7324": 2, "7325": 1, "7326": 4, "7327": 8, "7328": 4, "7329": 4, "7330": 4, "7331": 4, "7332": 4, "7333": 1, "7334": 0, "7335": 4, "7336": 8, "7337": 1, "7338": 4, "7339": 9, "7340": 4, "7341": 4, "7342": 4, "7343": 4, "7344": 1, "7345": 4, "7346": 2, "7347": 8, "7348": 1, "7349": 7, "7350": 4, "7351": 6, "7352": 1, "7353": 6, "7354": 8, "7355": 5, "7356": 8, "7357": 4, "7358": 4, "7359": 1, "7360": 4, "7361": 8, "7362": 0, "7363": 0, "7364": 5, "7365": 2, "7366": 4, "7367": 2, "7368": 2, "7369": 4, "7370": 7, "7371": 3, "7372": 4, "7373": 4, "7374": 4, "7375": 4, "7376": 4, "7377": 1, "7378": 8, "7379": 0, "7380": 3, "7381": 1, "7382": 4, "7383": 2, "7384": 1, "7385": 8, "7386": 4, "7387": 1, "7388": 1, "7389": 4, "7390": 5, "7391": 8, "7392": 8, "7393": 8, "7394": 4, "7395": 4, "7396": 1, "7397": 4, "7398": 8, "7399": 8, "7400": 4, "7401": 5, "7402": 0, "7403": 4, "7404": 4, "7405": 1, "7406": 4, "7407": 8, "7408": 2, "7409": 7, "7410": 4, "7411": 8, "7412": 3, "7413": 7, "7414": 4, "7415": 6, "7416": 8, "7417": 8, "7418": 7, "7419": 1, "7420": 1, "7421": 4, "7422": 7, "7423": 1, "7424": 4, "7425": 7, "7426": 8, "7427": 1, "7428": 9, "7429": 8, "7430": 3, "7431": 8, "7432": 4, "7433": 4, "7434": 4, "7435": 8, "7436": 1, "7437": 4, "7438": 1, "7439": 4, "7440": 2, "7441": 1, "7442": 1, "7443": 7, "7444": 2, "7445": 3, "7446": 8, "7447": 6, "7448": 3, "7449": 3, "7450": 2, "7451": 0, "7452": 4, "7453": 7, "7454": 1, "7455": 4, "7456": 7, "7457": 7, "7458": 4, "7459": 4, "7460": 1, "7461": 2, "7462": 1, "7463": 4, "7464": 4, "7465": 8, "7466": 2, "7467": 4, "7468": 4, "7469": 2, "7470": 6, "7471": 6, "7472": 1, "7473": 2, "7474": 3, "7475": 1, "7476": 4, "7477": 8, "7478": 8, "7479": 6, "7480": 0, "7481": 1, "7482": 7, "7483": 1, "7484": 8, "7485": 8, "7486": 4, "7487": 8, "7488": 4, "7489": 4, "7490": 8, "7491": 3, "7492": 0, "7493": 7, "7494": 4, "7495": 8, "7496": 4, "7497": 4, "7498": 0, "7499": 8, "7500": 8, "7501": 7, "7502": 8, "7503": 4, "7504": 4, "7505": 8, "7506": 4, "7507": 1, "7508": 1, "7509": 1, "7510": 7, "7511": 2, "7512": 8, "7513": 1, "7514": 1, "7515": 4, "7516": 4, "7517": 8, "7518": 4, "7519": 3, "7520": 4, "7521": 4, "7522": 8, "7523": 0, "7524": 8, "7525": 2, "7526": 7, "7527": 6, "7528": 1, "7529": 7, "7530": 2, "7531": 2, "7532": 7, "7533": 2, "7534": 8, "7535": 1, "7536": 0, "7537": 0, "7538": 7, "7539": 4, "7540": 4, "7541": 4, "7542": 4, "7543": 7, "7544": 8, "7545": 2, "7546": 4, "7547": 7, "7548": 8, "7549": 7, "7550": 1, "7551": 1, "7552": 2, "7553": 8, "7554": 4, "7555": 4, "7556": 1, "7557": 4, "7558": 4, "7559": 4, "7560": 8, "7561": 2, "7562": 0, "7563": 4, "7564": 8, "7565": 8, "7566": 4, "7567": 4, "7568": 7, "7569": 4, "7570": 4, "7571": 2, "7572": 4, "7573": 1, "7574": 3, "7575": 4, "7576": 4, "7577": 7, "7578": 1, "7579": 1, "7580": 1, "7581": 4, "7582": 4, "7583": 8, "7584": 4, "7585": 7, "7586": 1, "7587": 4, "7588": 4, "7589": 1, "7590": 4, "7591": 4, "7592": 4, "7593": 4, "7594": 4, "7595": 1, "7596": 4, "7597": 1, "7598": 4, "7599": 4, "7600": 1, "7601": 8, "7602": 4, "7603": 4, "7604": 1, "7605": 4, "7606": 4, "7607": 2, "7608": 9, "7609": 9, "7610": 4, "7611": 4, "7612": 8, "7613": 2, "7614": 7, "7615": 4, "7616": 8, "7617": 1, "7618": 8, "7619": 2, "7620": 1, "7621": 4, "7622": 4, "7623": 4, "7624": 0, "7625": 8, "7626": 3, "7627": 7, "7628": 1, "7629": 5, "7630": 1, "7631": 7, "7632": 1, "7633": 8, "7634": 4, "7635": 7, "7636": 2, "7637": 4, "7638": 7, "7639": 4, "7640": 3, "7641": 1, "7642": 8, "7643": 8, "7644": 6, "7645": 1, "7646": 4, "7647": 4, "7648": 4, "7649": 8, "7650": 2, "7651": 8, "7652": 5, "7653": 9, "7654": 8, "7655": 4, "7656": 6, "7657": 4, "7658": 8, "7659": 8, "7660": 4, "7661": 4, "7662": 4, "7663": 4, "7664": 8, "7665": 4, "7666": 4, "7667": 2, "7668": 9, "7669": 4, "7670": 1, "7671": 1, "7672": 2, "7673": 1, "7674": 4, "7675": 8, "7676": 4, "7677": 4, "7678": 7, "7679": 7, "7680": 4, "7681": 8, "7682": 4, "7683": 4, "7684": 4, "7685": 7, "7686": 8, "7687": 7, "7688": 2, "7689": 4, "7690": 2, "7691": 4, "7692": 2, "7693": 2, "7694": 4, "7695": 8, "7696": 9, "7697": 1, "7698": 7, "7699": 8, "7700": 5, "7701": 8, "7702": 8, "7703": 4, "7704": 2, "7705": 4, "7706": 8, "7707": 1, "7708": 2, "7709": 4, "7710": 8, "7711": 8, "7712": 8, "7713": 4, "7714": 1, "7715": 4, "7716": 4, "7717": 4, "7718": 7, "7719": 4, "7720": 6, "7721": 8, "7722": 9, "7723": 4, "7724": 2, "7725": 8, "7726": 1, "7727": 7, "7728": 6, "7729": 2, "7730": 4, "7731": 6, "7732": 2, "7733": 0, "7734": 6, "7735": 1, "7736": 8, "7737": 8, "7738": 8, "7739": 0, "7740": 9, "7741": 2, "7742": 8, "7743": 4, "7744": 7, "7745": 4, "7746": 4, "7747": 6, "7748": 6, "7749": 7, "7750": 4, "7751": 2, "7752": 4, "7753": 8, "7754": 8, "7755": 1, "7756": 6, "7757": 5, "7758": 4, "7759": 4, "7760": 4, "7761": 1, "7762": 4, "7763": 7, "7764": 4, "7765": 3, "7766": 4, "7767": 1, "7768": 1, "7769": 1, "7770": 4, "7771": 2, "7772": 2, "7773": 8, "7774": 4, "7775": 3, "7776": 4, "7777": 4, "7778": 6, "7779": 4, "7780": 5, "7781": 8, "7782": 6, "7783": 1, "7784": 7, "7785": 8, "7786": 1, "7787": 4, "7788": 8, "7789": 4, "7790": 4, "7791": 8, "7792": 4, "7793": 2, "7794": 4, "7795": 4, "7796": 8, "7797": 8, "7798": 4, "7799": 4, "7800": 4, "7801": 4, "7802": 4, "7803": 7, "7804": 8, "7805": 4, "7806": 8, "7807": 4, "7808": 2, "7809": 1, "7810": 1, "7811": 5, "7812": 4, "7813": 1, "7814": 3, "7815": 5, "7816": 4, "7817": 1, "7818": 4, "7819": 8, "7820": 1, "7821": 4, "7822": 4, "7823": 1, "7824": 2, "7825": 4, "7826": 8, "7827": 4, "7828": 4, "7829": 6, "7830": 8, "7831": 2, "7832": 8, "7833": 4, "7834": 1, "7835": 4, "7836": 2, "7837": 7, "7838": 4, "7839": 4, "7840": 7, "7841": 4, "7842": 4, "7843": 1, "7844": 4, "7845": 2, "7846": 1, "7847": 2, "7848": 6, "7849": 4, "7850": 1, "7851": 0, "7852": 7, "7853": 2, "7854": 7, "7855": 4, "7856": 2, "7857": 1, "7858": 0, "7859": 8, "7860": 4, "7861": 7, "7862": 4, "7863": 1, "7864": 7, "7865": 9, "7866": 4, "7867": 6, "7868": 1, "7869": 1, "7870": 3, "7871": 7, "7872": 2, "7873": 7, "7874": 4, "7875": 8, "7876": 4, "7877": 4, "7878": 3, "7879": 4, "7880": 0, "7881": 4, "7882": 4, "7883": 1, "7884": 4, "7885": 4, "7886": 4, "7887": 4, "7888": 7, "7889": 3, "7890": 2, "7891": 4, "7892": 2, "7893": 2, "7894": 1, "7895": 2, "7896": 4, "7897": 4, "7898": 5, "7899": 1, "7900": 4, "7901": 8, "7902": 2, "7903": 8, "7904": 2, "7905": 1, "7906": 4, "7907": 8, "7908": 4, "7909": 4, "7910": 4, "7911": 6, "7912": 4, "7913": 4, "7914": 2, "7915": 2, "7916": 4, "7917": 8, "7918": 3, "7919": 8, "7920": 4, "7921": 2, "7922": 2, "7923": 7, "7924": 9, "7925": 1, "7926": 1, "7927": 9, "7928": 2, "7929": 2, "7930": 4, "7931": 2, "7932": 4, "7933": 4, "7934": 2, "7935": 1, "7936": 1, "7937": 8, "7938": 4, "7939": 1, "7940": 6, "7941": 8, "7942": 2, "7943": 8, "7944": 6, "7945": 7, "7946": 0, "7947": 4, "7948": 8, "7949": 9, "7950": 1, "7951": 7, "7952": 4, "7953": 2, "7954": 3, "7955": 9, "7956": 8, "7957": 7, "7958": 4, "7959": 4, "7960": 1, "7961": 1, "7962": 4, "7963": 6, "7964": 2, "7965": 4, "7966": 4, "7967": 4, "7968": 4, "7969": 8, "7970": 4, "7971": 4, "7972": 8, "7973": 4, "7974": 4, "7975": 8, "7976": 2, "7977": 2, "7978": 3, "7979": 7, "7980": 2, "7981": 8, "7982": 7, "7983": 1, "7984": 4, "7985": 4, "7986": 8, "7987": 8, "7988": 8, "7989": 4, "7990": 4, "7991": 4, "7992": 4, "7993": 8, "7994": 4, "7995": 8, "7996": 4, "7997": 7, "7998": 1, "7999": 8, "8000": 1, "8001": 4, "8002": 4, "8003": 4, "8004": 4, "8005": 1, "8006": 4, "8007": 1, "8008": 4, "8009": 4, "8010": 4, "8011": 8, "8012": 1, "8013": 1, "8014": 1, "8015": 2, "8016": 2, "8017": 7, "8018": 4, "8019": 7, "8020": 4, "8021": 4, "8022": 7, "8023": 4, "8024": 4, "8025": 8, "8026": 4, "8027": 4, "8028": 8, "8029": 8, "8030": 8, "8031": 4, "8032": 4, "8033": 2, "8034": 2, "8035": 4, "8036": 4, "8037": 4, "8038": 1, "8039": 8, "8040": 4, "8041": 4, "8042": 2, "8043": 4, "8044": 1, "8045": 4, "8046": 4, "8047": 1, "8048": 8, "8049": 8, "8050": 2, "8051": 8, "8052": 6, "8053": 4, "8054": 9, "8055": 1, "8056": 0, "8057": 4, "8058": 4, "8059": 4, "8060": 8, "8061": 3, "8062": 3, "8063": 8, "8064": 4, "8065": 4, "8066": 8, "8067": 1, "8068": 9, "8069": 1, "8070": 1, "8071": 4, "8072": 6, "8073": 4, "8074": 4, "8075": 8, "8076": 3, "8077": 4, "8078": 4, "8079": 6, "8080": 2, "8081": 4, "8082": 2, "8083": 3, "8084": 4, "8085": 6, "8086": 8, "8087": 4, "8088": 8, "8089": 8, "8090": 1, "8091": 4, "8092": 4, "8093": 2, "8094": 7, "8095": 4, "8096": 1, "8097": 4, "8098": 4, "8099": 4, "8100": 4, "8101": 4, "8102": 7, "8103": 2, "8104": 4, "8105": 4, "8106": 4, "8107": 7, "8108": 4, "8109": 1, "8110": 2, "8111": 1, "8112": 4, "8113": 4, "8114": 4, "8115": 1, "8116": 4, "8117": 4, "8118": 7, "8119": 8, "8120": 4, "8121": 4, "8122": 8, "8123": 1, "8124": 3, "8125": 4, "8126": 1, "8127": 1, "8128": 1, "8129": 1, "8130": 4, "8131": 4, "8132": 7, "8133": 4, "8134": 4, "8135": 4, "8136": 0, "8137": 6, "8138": 4, "8139": 4, "8140": 1, "8141": 4, "8142": 8, "8143": 1, "8144": 7, "8145": 4, "8146": 1, "8147": 7, "8148": 9, "8149": 6, "8150": 8, "8151": 6, "8152": 3, "8153": 1, "8154": 0, "8155": 4, "8156": 1, "8157": 4, "8158": 4, "8159": 4, "8160": 1, "8161": 4, "8162": 4, "8163": 5, "8164": 5, "8165": 8, "8166": 2, "8167": 1, "8168": 7, "8169": 8, "8170": 2, "8171": 8, "8172": 2, "8173": 4, "8174": 6, "8175": 4, "8176": 1, "8177": 1, "8178": 1, "8179": 4, "8180": 9, "8181": 2, "8182": 1, "8183": 8, "8184": 4, "8185": 4, "8186": 4, "8187": 4, "8188": 4, "8189": 1, "8190": 4, "8191": 4, "8192": 6, "8193": 3, "8194": 4, "8195": 8, "8196": 1, "8197": 0, "8198": 8, "8199": 9, "8200": 7, "8201": 4, "8202": 1, "8203": 4, "8204": 8, "8205": 4, "8206": 4, "8207": 4, "8208": 4, "8209": 1, "8210": 4, "8211": 4, "8212": 4, "8213": 1, "8214": 4, "8215": 8, "8216": 2, "8217": 4, "8218": 4, "8219": 4, "8220": 2, "8221": 4, "8222": 1, "8223": 1, "8224": 9, "8225": 3, "8226": 5, "8227": 9, "8228": 1, "8229": 4, "8230": 2, "8231": 2, "8232": 4, "8233": 8, "8234": 8, "8235": 1, "8236": 5, "8237": 6, "8238": 0, "8239": 9, "8240": 4, "8241": 4, "8242": 1, "8243": 6, "8244": 4, "8245": 2, "8246": 9, "8247": 1, "8248": 9, "8249": 4, "8250": 8, "8251": 8, "8252": 4, "8253": 1, "8254": 3, "8255": 2, "8256": 3, "8257": 1, "8258": 1, "8259": 8, "8260": 1, "8261": 1, "8262": 1, "8263": 4, "8264": 2, "8265": 4, "8266": 4, "8267": 9, "8268": 6, "8269": 8, "8270": 2, "8271": 2, "8272": 0, "8273": 9, "8274": 8, "8275": 4, "8276": 0, "8277": 0, "8278": 4, "8279": 4, "8280": 4, "8281": 4, "8282": 1, "8283": 0, "8284": 4, "8285": 4, "8286": 0, "8287": 8, "8288": 1, "8289": 1, "8290": 8, "8291": 4, "8292": 4, "8293": 1, "8294": 4, "8295": 4, "8296": 4, "8297": 4, "8298": 2, "8299": 4, "8300": 4, "8301": 7, "8302": 3, "8303": 2, "8304": 2, "8305": 2, "8306": 1, "8307": 4, "8308": 8, "8309": 4, "8310": 8, "8311": 6, "8312": 2, "8313": 8, "8314": 1, "8315": 1, "8316": 1, "8317": 8, "8318": 2, "8319": 7, "8320": 4, "8321": 2, "8322": 1, "8323": 4, "8324": 8, "8325": 3, "8326": 2, "8327": 7, "8328": 5, "8329": 7, "8330": 4, "8331": 4, "8332": 8, "8333": 7, "8334": 4, "8335": 4, "8336": 8, "8337": 4, "8338": 4, "8339": 9, "8340": 8, "8341": 4, "8342": 2, "8343": 4, "8344": 4, "8345": 3, "8346": 4, "8347": 4, "8348": 3, "8349": 3, "8350": 6, "8351": 8, "8352": 4, "8353": 6, "8354": 3, "8355": 4, "8356": 1, "8357": 4, "8358": 8, "8359": 4, "8360": 3, "8361": 8, "8362": 8, "8363": 8, "8364": 4, "8365": 7, "8366": 8, "8367": 4, "8368": 2, "8369": 2, "8370": 4, "8371": 0, "8372": 7, "8373": 8, "8374": 4, "8375": 4, "8376": 4, "8377": 1, "8378": 4, "8379": 1, "8380": 4, "8381": 7, "8382": 4, "8383": 8, "8384": 8, "8385": 4, "8386": 4, "8387": 8, "8388": 8, "8389": 1, "8390": 4, "8391": 8, "8392": 1, "8393": 4, "8394": 8, "8395": 4, "8396": 4, "8397": 8, "8398": 7, "8399": 8, "8400": 4, "8401": 8, "8402": 5, "8403": 6, "8404": 4, "8405": 5, "8406": 4, "8407": 1, "8408": 2, "8409": 2, "8410": 0, "8411": 7, "8412": 1, "8413": 4, "8414": 4, "8415": 7, "8416": 4, "8417": 4, "8418": 1, "8419": 3, "8420": 0, "8421": 2, "8422": 4, "8423": 1, "8424": 9, "8425": 4, "8426": 2, "8427": 1, "8428": 4, "8429": 0, "8430": 4, "8431": 1, "8432": 8, "8433": 2, "8434": 4, "8435": 7, "8436": 7, "8437": 2, "8438": 2, "8439": 3, "8440": 8, "8441": 4, "8442": 2, "8443": 5, "8444": 8, "8445": 1, "8446": 5, "8447": 4, "8448": 6, "8449": 6, "8450": 8, "8451": 2, "8452": 4, "8453": 9, "8454": 1, "8455": 4, "8456": 4, "8457": 1, "8458": 4, "8459": 6, "8460": 4, "8461": 1, "8462": 4, "8463": 9, "8464": 4, "8465": 1, "8466": 4, "8467": 5, "8468": 4, "8469": 1, "8470": 6, "8471": 4, "8472": 2, "8473": 4, "8474": 4, "8475": 7, "8476": 4, "8477": 9, "8478": 4, "8479": 1, "8480": 2, "8481": 4, "8482": 0, "8483": 8, "8484": 4, "8485": 3, "8486": 4, "8487": 3, "8488": 4, "8489": 1, "8490": 2, "8491": 8, "8492": 2, "8493": 7, "8494": 1, "8495": 5, "8496": 4, "8497": 2, "8498": 8, "8499": 8, "8500": 4, "8501": 8, "8502": 4, "8503": 7, "8504": 4, "8505": 1, "8506": 8, "8507": 1, "8508": 2, "8509": 1, "8510": 9, "8511": 9, "8512": 1, "8513": 2, "8514": 7, "8515": 4, "8516": 4, "8517": 4, "8518": 4, "8519": 8, "8520": 1, "8521": 8, "8522": 4, "8523": 8, "8524": 2, "8525": 3, "8526": 4, "8527": 8, "8528": 4, "8529": 8, "8530": 2, "8531": 3, "8532": 8, "8533": 1, "8534": 7, "8535": 4, "8536": 4, "8537": 8, "8538": 4, "8539": 4, "8540": 0, "8541": 1, "8542": 1, "8543": 8, "8544": 9, "8545": 1, "8546": 7, "8547": 1, "8548": 2, "8549": 8, "8550": 2, "8551": 4, "8552": 6, "8553": 3, "8554": 4, "8555": 7, "8556": 8, "8557": 3, "8558": 1, "8559": 2, "8560": 8, "8561": 8, "8562": 1, "8563": 6, "8564": 4, "8565": 1, "8566": 1, "8567": 9, "8568": 1, "8569": 8, "8570": 1, "8571": 1, "8572": 7, "8573": 0, "8574": 4, "8575": 8, "8576": 5, "8577": 6, "8578": 4, "8579": 7, "8580": 4, "8581": 1, "8582": 1, "8583": 6, "8584": 1, "8585": 8, "8586": 4, "8587": 8, "8588": 7, "8589": 1, "8590": 1, "8591": 4, "8592": 4, "8593": 5, "8594": 4, "8595": 4, "8596": 2, "8597": 0, "8598": 4, "8599": 3, "8600": 8, "8601": 2, "8602": 8, "8603": 8, "8604": 4, "8605": 1, "8606": 2, "8607": 7, "8608": 4, "8609": 4, "8610": 9, "8611": 4, "8612": 7, "8613": 4, "8614": 8, "8615": 8, "8616": 2, "8617": 4, "8618": 8, "8619": 8, "8620": 4, "8621": 8, "8622": 4, "8623": 2, "8624": 3, "8625": 4, "8626": 4, "8627": 4, "8628": 8, "8629": 4, "8630": 1, "8631": 2, "8632": 4, "8633": 2, "8634": 4, "8635": 8, "8636": 1, "8637": 4, "8638": 4, "8639": 8, "8640": 9, "8641": 1, "8642": 4, "8643": 4, "8644": 4, "8645": 4, "8646": 3, "8647": 3, "8648": 7, "8649": 4, "8650": 8, "8651": 3, "8652": 4, "8653": 4, "8654": 1, "8655": 4, "8656": 2, "8657": 0, "8658": 0, "8659": 8, "8660": 4, "8661": 4, "8662": 4, "8663": 4, "8664": 7, "8665": 1, "8666": 4, "8667": 2, "8668": 3, "8669": 4, "8670": 8, "8671": 1, "8672": 8, "8673": 4, "8674": 4, "8675": 7, "8676": 4, "8677": 9, "8678": 7, "8679": 4, "8680": 1, "8681": 8, "8682": 2, "8683": 8, "8684": 6, "8685": 1, "8686": 4, "8687": 2, "8688": 1, "8689": 7, "8690": 4, "8691": 4, "8692": 6, "8693": 4, "8694": 9, "8695": 2, "8696": 1, "8697": 9, "8698": 1, "8699": 2, "8700": 4, "8701": 1, "8702": 2, "8703": 4, "8704": 8, "8705": 4, "8706": 1, "8707": 2, "8708": 4, "8709": 2, "8710": 8, "8711": 1, "8712": 6, "8713": 4, "8714": 7, "8715": 4, "8716": 4, "8717": 2, "8718": 1, "8719": 8, "8720": 8, "8721": 8, "8722": 1, "8723": 8, "8724": 1, "8725": 6, "8726": 2, "8727": 3, "8728": 8, "8729": 2, "8730": 8, "8731": 1, "8732": 1, "8733": 4, "8734": 4, "8735": 4, "8736": 8, "8737": 8, "8738": 1, "8739": 4, "8740": 3, "8741": 4, "8742": 4, "8743": 0, "8744": 1, "8745": 8, "8746": 4, "8747": 4, "8748": 8, "8749": 6, "8750": 0, "8751": 2, "8752": 4, "8753": 1, "8754": 4, "8755": 4, "8756": 1, "8757": 4, "8758": 1, "8759": 7, "8760": 1, "8761": 1, "8762": 2, "8763": 4, "8764": 1, "8765": 9, "8766": 1, "8767": 4, "8768": 1, "8769": 8, "8770": 2, "8771": 1, "8772": 4, "8773": 4, "8774": 4, "8775": 8, "8776": 8, "8777": 8, "8778": 2, "8779": 1, "8780": 4, "8781": 4, "8782": 3, "8783": 3, "8784": 4, "8785": 1, "8786": 4, "8787": 4, "8788": 4, "8789": 7, "8790": 2, "8791": 4, "8792": 4, "8793": 7, "8794": 8, "8795": 1, "8796": 4, "8797": 4, "8798": 1, "8799": 7, "8800": 2, "8801": 6, "8802": 4, "8803": 4, "8804": 4, "8805": 4, "8806": 4, "8807": 6, "8808": 4, "8809": 4, "8810": 1, "8811": 2, "8812": 4, "8813": 2, "8814": 8, "8815": 6, "8816": 8, "8817": 8, "8818": 8, "8819": 4, "8820": 7, "8821": 4, "8822": 6, "8823": 4, "8824": 4, "8825": 7, "8826": 4, "8827": 4, "8828": 8, "8829": 1, "8830": 7, "8831": 1, "8832": 7, "8833": 4, "8834": 1, "8835": 4, "8836": 5, "8837": 4, "8838": 4, "8839": 1, "8840": 8, "8841": 4, "8842": 4, "8843": 4, "8844": 1, "8845": 4, "8846": 8, "8847": 4, "8848": 8, "8849": 4, "8850": 4, "8851": 3, "8852": 1, "8853": 1, "8854": 4, "8855": 4, "8856": 8, "8857": 1, "8858": 1, "8859": 7, "8860": 4, "8861": 8, "8862": 4, "8863": 2, "8864": 8, "8865": 8, "8866": 1, "8867": 2, "8868": 4, "8869": 4, "8870": 3, "8871": 4, "8872": 2, "8873": 7, "8874": 7, "8875": 3, "8876": 7, "8877": 4, "8878": 4, "8879": 8, "8880": 4, "8881": 8, "8882": 8, "8883": 7, "8884": 1, "8885": 4, "8886": 3, "8887": 3, "8888": 4, "8889": 2, "8890": 1, "8891": 4, "8892": 4, "8893": 4, "8894": 9, "8895": 4, "8896": 9, "8897": 3, "8898": 1, "8899": 1, "8900": 4, "8901": 2, "8902": 2, "8903": 8, "8904": 4, "8905": 2, "8906": 3, "8907": 8, "8908": 4, "8909": 1, "8910": 2, "8911": 8, "8912": 4, "8913": 0, "8914": 4, "8915": 4, "8916": 9, "8917": 8, "8918": 4, "8919": 7, "8920": 5, "8921": 2, "8922": 8, "8923": 8, "8924": 8, "8925": 1, "8926": 1, "8927": 0, "8928": 7, "8929": 4, "8930": 2, "8931": 8, "8932": 1, "8933": 8, "8934": 5, "8935": 2, "8936": 6, "8937": 9, "8938": 2, "8939": 7, "8940": 4, "8941": 4, "8942": 4, "8943": 1, "8944": 4, "8945": 4, "8946": 8, "8947": 4, "8948": 0, "8949": 3, "8950": 4, "8951": 4, "8952": 4, "8953": 1, "8954": 4, "8955": 4, "8956": 8, "8957": 4, "8958": 8, "8959": 2, "8960": 4, "8961": 4, "8962": 1, "8963": 8, "8964": 1, "8965": 7, "8966": 4, "8967": 4, "8968": 4, "8969": 4, "8970": 0, "8971": 1, "8972": 1, "8973": 4, "8974": 4, "8975": 2, "8976": 8, "8977": 4, "8978": 1, "8979": 8, "8980": 4, "8981": 8, "8982": 1, "8983": 4, "8984": 1, "8985": 0, "8986": 8, "8987": 2, "8988": 4, "8989": 9, "8990": 0, "8991": 1, "8992": 4, "8993": 1, "8994": 8, "8995": 4, "8996": 1, "8997": 4, "8998": 7, "8999": 8, "9000": 1, "9001": 1, "9002": 4, "9003": 4, "9004": 2, "9005": 4, "9006": 5, "9007": 8, "9008": 1, "9009": 8, "9010": 4, "9011": 4, "9012": 2, "9013": 8, "9014": 7, "9015": 0, "9016": 8, "9017": 4, "9018": 4, "9019": 4, "9020": 1, "9021": 7, "9022": 4, "9023": 3, "9024": 9, "9025": 9, "9026": 3, "9027": 7, "9028": 4, "9029": 4, "9030": 4, "9031": 4, "9032": 8, "9033": 4, "9034": 1, "9035": 7, "9036": 4, "9037": 4, "9038": 2, "9039": 4, "9040": 8, "9041": 1, "9042": 4, "9043": 8, "9044": 8, "9045": 4, "9046": 9, "9047": 3, "9048": 4, "9049": 1, "9050": 7, "9051": 4, "9052": 2, "9053": 2, "9054": 1, "9055": 4, "9056": 1, "9057": 4, "9058": 1, "9059": 4, "9060": 4, "9061": 8, "9062": 4, "9063": 4, "9064": 3, "9065": 4, "9066": 4, "9067": 8, "9068": 0, "9069": 2, "9070": 4, "9071": 8, "9072": 1, "9073": 8, "9074": 8, "9075": 4, "9076": 8, "9077": 1, "9078": 6, "9079": 4, "9080": 4, "9081": 9, "9082": 4, "9083": 2, "9084": 4, "9085": 4, "9086": 4, "9087": 4, "9088": 0, "9089": 7, "9090": 4, "9091": 1, "9092": 4, "9093": 4, "9094": 1, "9095": 8, "9096": 4, "9097": 1, "9098": 7, "9099": 4, "9100": 4, "9101": 8, "9102": 0, "9103": 4, "9104": 7, "9105": 4, "9106": 8, "9107": 4, "9108": 8, "9109": 9, "9110": 1, "9111": 4, "9112": 4, "9113": 2, "9114": 0, "9115": 4, "9116": 4, "9117": 4, "9118": 8, "9119": 4, "9120": 7, "9121": 2, "9122": 7, "9123": 4, "9124": 4, "9125": 4, "9126": 3, "9127": 3, "9128": 2, "9129": 8, "9130": 3, "9131": 2, "9132": 1, "9133": 1, "9134": 3, "9135": 0, "9136": 8, "9137": 4, "9138": 9, "9139": 4, "9140": 4, "9141": 8, "9142": 4, "9143": 8, "9144": 6, "9145": 4, "9146": 4, "9147": 1, "9148": 1, "9149": 8, "9150": 4, "9151": 1, "9152": 8, "9153": 1, "9154": 4, "9155": 1, "9156": 7, "9157": 6, "9158": 4, "9159": 4, "9160": 7, "9161": 0, "9162": 4, "9163": 4, "9164": 6, "9165": 5, "9166": 4, "9167": 8, "9168": 4, "9169": 4, "9170": 4, "9171": 7, "9172": 6, "9173": 4, "9174": 2, "9175": 4, "9176": 1, "9177": 2, "9178": 1, "9179": 2, "9180": 4, "9181": 4, "9182": 8, "9183": 8, "9184": 8, "9185": 8, "9186": 7, "9187": 6, "9188": 2, "9189": 4, "9190": 8, "9191": 4, "9192": 4, "9193": 8, "9194": 4, "9195": 4, "9196": 8, "9197": 0, "9198": 1, "9199": 4, "9200": 4, "9201": 3, "9202": 2, "9203": 6, "9204": 5, "9205": 4, "9206": 1, "9207": 4, "9208": 4, "9209": 4, "9210": 4, "9211": 8, "9212": 3, "9213": 8, "9214": 4, "9215": 6, "9216": 2, "9217": 4, "9218": 4, "9219": 1, "9220": 4, "9221": 3, "9222": 3, "9223": 8, "9224": 2, "9225": 4, "9226": 8, "9227": 4, "9228": 4, "9229": 4, "9230": 3, "9231": 4, "9232": 4, "9233": 4, "9234": 8, "9235": 4, "9236": 4, "9237": 4, "9238": 4, "9239": 2, "9240": 7, "9241": 0, "9242": 6, "9243": 1, "9244": 4, "9245": 7, "9246": 4, "9247": 1, "9248": 2, "9249": 1, "9250": 7, "9251": 4, "9252": 1, "9253": 4, "9254": 8, "9255": 8, "9256": 1, "9257": 4, "9258": 4, "9259": 8, "9260": 4, "9261": 2, "9262": 8, "9263": 4, "9264": 5, "9265": 1, "9266": 2, "9267": 4, "9268": 4, "9269": 7, "9270": 1, "9271": 4, "9272": 1, "9273": 1, "9274": 4, "9275": 1, "9276": 4, "9277": 7, "9278": 6, "9279": 4, "9280": 1, "9281": 7, "9282": 8, "9283": 9, "9284": 4, "9285": 1, "9286": 4, "9287": 1, "9288": 8, "9289": 9, "9290": 4, "9291": 4, "9292": 4, "9293": 5, "9294": 2, "9295": 4, "9296": 8, "9297": 2, "9298": 0, "9299": 1, "9300": 0, "9301": 0, "9302": 3, "9303": 4, "9304": 4, "9305": 0, "9306": 8, "9307": 3, "9308": 5, "9309": 8, "9310": 1, "9311": 9, "9312": 4, "9313": 4, "9314": 2, "9315": 1, "9316": 4, "9317": 7, "9318": 8, "9319": 1, "9320": 2, "9321": 7, "9322": 4, "9323": 4, "9324": 1, "9325": 7, "9326": 4, "9327": 4, "9328": 1, "9329": 8, "9330": 4, "9331": 4, "9332": 8, "9333": 1, "9334": 2, "9335": 0, "9336": 9, "9337": 4, "9338": 1, "9339": 8, "9340": 1, "9341": 4, "9342": 1, "9343": 1, "9344": 2, "9345": 7, "9346": 8, "9347": 4, "9348": 0, "9349": 3, "9350": 1, "9351": 4, "9352": 4, "9353": 4, "9354": 6, "9355": 8, "9356": 4, "9357": 4, "9358": 4, "9359": 4, "9360": 8, "9361": 4, "9362": 8, "9363": 8, "9364": 8, "9365": 0, "9366": 8, "9367": 8, "9368": 8, "9369": 4, "9370": 1, "9371": 1, "9372": 1, "9373": 4, "9374": 1, "9375": 6, "9376": 8, "9377": 1, "9378": 3, "9379": 4, "9380": 0, "9381": 1, "9382": 1, "9383": 8, "9384": 1, "9385": 4, "9386": 7, "9387": 3, "9388": 1, "9389": 8, "9390": 8, "9391": 4, "9392": 4, "9393": 4, "9394": 1, "9395": 0, "9396": 4, "9397": 7, "9398": 8, "9399": 1, "9400": 0, "9401": 5, "9402": 4, "9403": 4, "9404": 1, "9405": 8, "9406": 8, "9407": 4, "9408": 6, "9409": 6, "9410": 4, "9411": 8, "9412": 7, "9413": 4, "9414": 8, "9415": 4, "9416": 8, "9417": 1, "9418": 8, "9419": 7, "9420": 6, "9421": 4, "9422": 1, "9423": 8, "9424": 0, "9425": 6, "9426": 3, "9427": 4, "9428": 1, "9429": 4, "9430": 2, "9431": 0, "9432": 2, "9433": 4, "9434": 2, "9435": 4, "9436": 4, "9437": 5, "9438": 7, "9439": 4, "9440": 4, "9441": 4, "9442": 1, "9443": 2, "9444": 9, "9445": 1, "9446": 8, "9447": 2, "9448": 4, "9449": 1, "9450": 7, "9451": 0, "9452": 8, "9453": 2, "9454": 2, "9455": 7, "9456": 8, "9457": 4, "9458": 4, "9459": 2, "9460": 4, "9461": 9, "9462": 4, "9463": 4, "9464": 3, "9465": 2, "9466": 8, "9467": 8, "9468": 4, "9469": 1, "9470": 4, "9471": 1, "9472": 0, "9473": 8, "9474": 4, "9475": 4, "9476": 1, "9477": 5, "9478": 7, "9479": 8, "9480": 4, "9481": 4, "9482": 1, "9483": 4, "9484": 4, "9485": 8, "9486": 4, "9487": 3, "9488": 1, "9489": 2, "9490": 4, "9491": 4, "9492": 8, "9493": 1, "9494": 1, "9495": 1, "9496": 4, "9497": 1, "9498": 2, "9499": 4, "9500": 2, "9501": 7, "9502": 4, "9503": 6, "9504": 7, "9505": 4, "9506": 4, "9507": 4, "9508": 7, "9509": 4, "9510": 8, "9511": 2, "9512": 3, "9513": 4, "9514": 8, "9515": 4, "9516": 4, "9517": 1, "9518": 2, "9519": 8, "9520": 4, "9521": 4, "9522": 4, "9523": 4, "9524": 6, "9525": 1, "9526": 0, "9527": 1, "9528": 2, "9529": 6, "9530": 1, "9531": 4, "9532": 6, "9533": 4, "9534": 2, "9535": 2, "9536": 2, "9537": 4, "9538": 2, "9539": 7, "9540": 4, "9541": 2, "9542": 4, "9543": 3, "9544": 4, "9545": 4, "9546": 8, "9547": 4, "9548": 7, "9549": 4, "9550": 1, "9551": 4, "9552": 4, "9553": 4, "9554": 8, "9555": 2, "9556": 4, "9557": 4, "9558": 8, "9559": 6, "9560": 9, "9561": 4, "9562": 3, "9563": 2, "9564": 9, "9565": 1, "9566": 4, "9567": 4, "9568": 1, "9569": 5, "9570": 1, "9571": 8, "9572": 7, "9573": 1, "9574": 6, "9575": 8, "9576": 1, "9577": 8, "9578": 8, "9579": 8, "9580": 2, "9581": 4, "9582": 1, "9583": 1, "9584": 6, "9585": 8, "9586": 4, "9587": 4, "9588": 3, "9589": 2, "9590": 2, "9591": 4, "9592": 2, "9593": 4, "9594": 4, "9595": 4, "9596": 6, "9597": 4, "9598": 7, "9599": 2, "9600": 1, "9601": 4, "9602": 8, "9603": 1, "9604": 1, "9605": 3, "9606": 4, "9607": 4, "9608": 3, "9609": 1, "9610": 4, "9611": 4, "9612": 4, "9613": 4, "9614": 7, "9615": 5, "9616": 3, "9617": 4, "9618": 4, "9619": 1, "9620": 3, "9621": 5, "9622": 3, "9623": 4, "9624": 4, "9625": 4, "9626": 1, "9627": 8, "9628": 1, "9629": 1, "9630": 8, "9631": 1, "9632": 1, "9633": 2, "9634": 4, "9635": 1, "9636": 1, "9637": 8, "9638": 4, "9639": 8, "9640": 9, "9641": 1, "9642": 7, "9643": 1, "9644": 5, "9645": 4, "9646": 4, "9647": 4, "9648": 4, "9649": 4, "9650": 8, "9651": 4, "9652": 7, "9653": 4, "9654": 8, "9655": 8, "9656": 9, "9657": 5, "9658": 8, "9659": 3, "9660": 6, "9661": 7, "9662": 8, "9663": 8, "9664": 1, "9665": 4, "9666": 2, "9667": 2, "9668": 4, "9669": 8, "9670": 5, "9671": 8, "9672": 4, "9673": 4, "9674": 4, "9675": 5, "9676": 2, "9677": 1, "9678": 4, "9679": 3, "9680": 4, "9681": 6, "9682": 8, "9683": 2, "9684": 6, "9685": 2, "9686": 8, "9687": 7, "9688": 4, "9689": 3, "9690": 1, "9691": 5, "9692": 2, "9693": 1, "9694": 8, "9695": 1, "9696": 7, "9697": 4, "9698": 3, "9699": 4, "9700": 8, "9701": 1, "9702": 3, "9703": 7, "9704": 6, "9705": 0, "9706": 7, "9707": 4, "9708": 1, "9709": 8, "9710": 2, "9711": 6, "9712": 2, "9713": 4, "9714": 5, "9715": 1, "9716": 4, "9717": 4, "9718": 8, "9719": 1, "9720": 1, "9721": 4, "9722": 4, "9723": 4, "9724": 4, "9725": 1, "9726": 8, "9727": 3, "9728": 1, "9729": 6, "9730": 3, "9731": 4, "9732": 2, "9733": 2, "9734": 4, "9735": 4, "9736": 7, "9737": 8, "9738": 4, "9739": 1, "9740": 2, "9741": 6, "9742": 1, "9743": 1, "9744": 0, "9745": 4, "9746": 1, "9747": 8, "9748": 8, "9749": 4, "9750": 7, "9751": 4, "9752": 4, "9753": 2, "9754": 4, "9755": 4, "9756": 4, "9757": 8, "9758": 1, "9759": 5, "9760": 4, "9761": 1, "9762": 6, "9763": 1, "9764": 4, "9765": 4, "9766": 4, "9767": 1, "9768": 8, "9769": 1, "9770": 2, "9771": 8, "9772": 8, "9773": 4, "9774": 4, "9775": 1, "9776": 2, "9777": 8, "9778": 4, "9779": 4, "9780": 8, "9781": 4, "9782": 4, "9783": 4, "9784": 4, "9785": 2, "9786": 5, "9787": 4, "9788": 8, "9789": 8, "9790": 2, "9791": 4, "9792": 8, "9793": 1, "9794": 7, "9795": 4, "9796": 2, "9797": 1, "9798": 4, "9799": 2, "9800": 7, "9801": 3, "9802": 2, "9803": 6, "9804": 2, "9805": 2, "9806": 1, "9807": 8, "9808": 2, "9809": 4, "9810": 7, "9811": 1, "9812": 4, "9813": 2, "9814": 1, "9815": 8, "9816": 8, "9817": 1, "9818": 8, "9819": 6, "9820": 6, "9821": 0, "9822": 1, "9823": 2, "9824": 4, "9825": 4, "9826": 4, "9827": 5, "9828": 4, "9829": 4, "9830": 4, "9831": 4, "9832": 8, "9833": 1, "9834": 4, "9835": 1, "9836": 2, "9837": 2, "9838": 1, "9839": 4, "9840": 3, "9841": 4, "9842": 7, "9843": 8, "9844": 2, "9845": 4, "9846": 3, "9847": 2, "9848": 4, "9849": 4, "9850": 4, "9851": 1, "9852": 4, "9853": 8, "9854": 4, "9855": 4, "9856": 7, "9857": 4, "9858": 8, "9859": 4, "9860": 8, "9861": 1, "9862": 3, "9863": 1, "9864": 7, "9865": 0, "9866": 1, "9867": 4, "9868": 7, "9869": 1, "9870": 4, "9871": 4, "9872": 7, "9873": 4, "9874": 4, "9875": 7, "9876": 4, "9877": 4, "9878": 4, "9879": 1, "9880": 8, "9881": 1, "9882": 4, "9883": 4, "9884": 7, "9885": 5, "9886": 2, "9887": 4, "9888": 4, "9889": 1, "9890": 6, "9891": 8, "9892": 6, "9893": 7, "9894": 0, "9895": 4, "9896": 7, "9897": 3, "9898": 7, "9899": 4, "9900": 8, "9901": 8, "9902": 4, "9903": 5, "9904": 2, "9905": 7, "9906": 0, "9907": 4, "9908": 8, "9909": 4, "9910": 1, "9911": 1, "9912": 4, "9913": 4, "9914": 8, "9915": 1, "9916": 4, "9917": 2, "9918": 4, "9919": 4, "9920": 4, "9921": 4, "9922": 7, "9923": 8, "9924": 2, "9925": 1, "9926": 1, "9927": 8, "9928": 1, "9929": 1, "9930": 3, "9931": 1, "9932": 3, "9933": 8, "9934": 8, "9935": 2, "9936": 1, "9937": 6, "9938": 1, "9939": 7, "9940": 4, "9941": 4, "9942": 8, "9943": 4, "9944": 8, "9945": 2, "9946": 4, "9947": 4, "9948": 7, "9949": 2, "9950": 1, "9951": 4, "9952": 0, "9953": 7, "9954": 4, "9955": 1, "9956": 4, "9957": 4, "9958": 0, "9959": 4, "9960": 2, "9961": 9, "9962": 8, "9963": 7, "9964": 2, "9965": 4, "9966": 1, "9967": 8, "9968": 4, "9969": 4, "9970": 4, "9971": 4, "9972": 8, "9973": 4, "9974": 4, "9975": 2, "9976": 4, "9977": 7, "9978": 4, "9979": 1, "9980": 4, "9981": 8, "9982": 8, "9983": 4, "9984": 2, "9985": 8, "9986": 4, "9987": 4, "9988": 4, "9989": 1, "9990": 4, "9991": 4, "9992": 2, "9993": 4, "9994": 3, "9995": 8, "9996": 4, "9997": 4, "9998": 9, "9999": 1, "10000": 4, "10001": 1, "10002": 4, "10003": 1, "10004": 4, "10005": 8, "10006": 3, "10007": 4, "10008": 7, "10009": 1, "10010": 4, "10011": 4, "10012": 8, "10013": 7, "10014": 1, "10015": 2, "10016": 1, "10017": 4, "10018": 3, "10019": 4, "10020": 4, "10021": 8, "10022": 3, "10023": 1, "10024": 8, "10025": 8, "10026": 8, "10027": 4, "10028": 8, "10029": 1, "10030": 0, "10031": 1, "10032": 8, "10033": 4, "10034": 1, "10035": 2, "10036": 2, "10037": 4, "10038": 1, "10039": 1, "10040": 4, "10041": 4, "10042": 6, "10043": 1, "10044": 4, "10045": 4, "10046": 1, "10047": 1, "10048": 2, "10049": 0, "10050": 2, "10051": 2, "10052": 4, "10053": 7, "10054": 1, "10055": 4, "10056": 3, "10057": 4, "10058": 5, "10059": 1, "10060": 4, "10061": 1, "10062": 1, "10063": 8, "10064": 4, "10065": 4, "10066": 1, "10067": 8, "10068": 4, "10069": 3, "10070": 4, "10071": 4, "10072": 2, "10073": 4, "10074": 1, "10075": 8, "10076": 7, "10077": 2, "10078": 2, "10079": 4, "10080": 6, "10081": 2, "10082": 1, "10083": 4, "10084": 4, "10085": 4, "10086": 0, "10087": 4, "10088": 1, "10089": 8, "10090": 4, "10091": 4, "10092": 6, "10093": 8, "10094": 2, "10095": 1, "10096": 1, "10097": 5, "10098": 8, "10099": 4, "10100": 7, "10101": 1, "10102": 8, "10103": 1, "10104": 4, "10105": 2, "10106": 1, "10107": 4, "10108": 4, "10109": 4, "10110": 4, "10111": 8, "10112": 4, "10113": 4, "10114": 4, "10115": 4, "10116": 6, "10117": 8, "10118": 8, "10119": 8, "10120": 1, "10121": 3, "10122": 7, "10123": 2, "10124": 8, "10125": 4, "10126": 4, "10127": 4, "10128": 1, "10129": 1, "10130": 4, "10131": 3, "10132": 4, "10133": 7, "10134": 4, "10135": 4, "10136": 4, "10137": 4, "10138": 4, "10139": 9, "10140": 7, "10141": 4, "10142": 4, "10143": 7, "10144": 4, "10145": 2, "10146": 4, "10147": 4, "10148": 8, "10149": 8, "10150": 1, "10151": 0, "10152": 9, "10153": 4, "10154": 0, "10155": 4, "10156": 4, "10157": 4, "10158": 2, "10159": 8, "10160": 1, "10161": 8, "10162": 1, "10163": 1, "10164": 4, "10165": 1, "10166": 4, "10167": 3, "10168": 8, "10169": 8, "10170": 4, "10171": 4, "10172": 4, "10173": 8, "10174": 8, "10175": 2, "10176": 4, "10177": 4, "10178": 7, "10179": 4, "10180": 2, "10181": 8, "10182": 7, "10183": 4, "10184": 1, "10185": 6, "10186": 1, "10187": 8, "10188": 3, "10189": 1, "10190": 4, "10191": 1, "10192": 7, "10193": 7, "10194": 4, "10195": 4, "10196": 4, "10197": 2, "10198": 4, "10199": 8, "10200": 4, "10201": 9, "10202": 4, "10203": 8, "10204": 4, "10205": 1, "10206": 4, "10207": 4, "10208": 1, "10209": 4, "10210": 4, "10211": 5, "10212": 8, "10213": 4, "10214": 1, "10215": 4, "10216": 4, "10217": 1, "10218": 7, "10219": 4, "10220": 7, "10221": 4, "10222": 8, "10223": 1, "10224": 7, "10225": 1, "10226": 8, "10227": 2, "10228": 4, "10229": 4, "10230": 2, "10231": 8, "10232": 4, "10233": 4, "10234": 4, "10235": 1, "10236": 1, "10237": 9, "10238": 8, "10239": 7, "10240": 4, "10241": 3, "10242": 1, "10243": 6, "10244": 6, "10245": 4, "10246": 4, "10247": 5, "10248": 8, "10249": 2, "10250": 8, "10251": 8, "10252": 4, "10253": 3, "10254": 4, "10255": 4, "10256": 8, "10257": 4, "10258": 4, "10259": 1, "10260": 4, "10261": 1, "10262": 4, "10263": 4, "10264": 8, "10265": 4, "10266": 8, "10267": 1, "10268": 1, "10269": 0, "10270": 2, "10271": 4, "10272": 4, "10273": 5, "10274": 4, "10275": 2, "10276": 8, "10277": 1, "10278": 4, "10279": 4, "10280": 1, "10281": 7, "10282": 4, "10283": 6, "10284": 4, "10285": 8, "10286": 4, "10287": 4, "10288": 4, "10289": 4, "10290": 9, "10291": 2, "10292": 1, "10293": 2, "10294": 4, "10295": 4, "10296": 1, "10297": 7, "10298": 4, "10299": 6, "10300": 1, "10301": 4, "10302": 8, "10303": 4, "10304": 4, "10305": 4, "10306": 8, "10307": 4, "10308": 8, "10309": 0, "10310": 4, "10311": 8, "10312": 4, "10313": 1, "10314": 8, "10315": 8, "10316": 2, "10317": 4, "10318": 1, "10319": 9, "10320": 4, "10321": 7, "10322": 8, "10323": 4, "10324": 3, "10325": 7, "10326": 1, "10327": 8, "10328": 1, "10329": 7, "10330": 4, "10331": 1, "10332": 1, "10333": 4, "10334": 4, "10335": 4, "10336": 8, "10337": 4, "10338": 2, "10339": 4, "10340": 4, "10341": 2, "10342": 4, "10343": 4, "10344": 4, "10345": 4, "10346": 4, "10347": 3, "10348": 8, "10349": 2, "10350": 4, "10351": 3, "10352": 8, "10353": 1, "10354": 4, "10355": 4, "10356": 6, "10357": 6, "10358": 2, "10359": 8, "10360": 8, "10361": 4, "10362": 6, "10363": 4, "10364": 3, "10365": 4, "10366": 1, "10367": 1, "10368": 7, "10369": 1, "10370": 3, "10371": 4, "10372": 4, "10373": 4, "10374": 8, "10375": 2, "10376": 4, "10377": 4, "10378": 4, "10379": 8, "10380": 4, "10381": 2, "10382": 1, "10383": 4, "10384": 1, "10385": 1, "10386": 8, "10387": 8, "10388": 2, "10389": 2, "10390": 8, "10391": 1, "10392": 2, "10393": 8, "10394": 3, "10395": 1, "10396": 8, "10397": 4, "10398": 2, "10399": 5, "10400": 4, "10401": 8, "10402": 0, "10403": 4, "10404": 4, "10405": 8, "10406": 1, "10407": 1, "10408": 4, "10409": 8, "10410": 3, "10411": 1, "10412": 4, "10413": 4, "10414": 1, "10415": 4, "10416": 4, "10417": 1, "10418": 2, "10419": 1, "10420": 2, "10421": 4, "10422": 3, "10423": 4, "10424": 8, "10425": 2, "10426": 1, "10427": 3, "10428": 4, "10429": 2, "10430": 1, "10431": 4, "10432": 1, "10433": 4, "10434": 4, "10435": 7, "10436": 1, "10437": 7, "10438": 8, "10439": 4, "10440": 4, "10441": 8, "10442": 4, "10443": 4, "10444": 9, "10445": 2, "10446": 4, "10447": 8, "10448": 8, "10449": 8, "10450": 4, "10451": 4, "10452": 8, "10453": 4, "10454": 4, "10455": 8, "10456": 4, "10457": 4, "10458": 3, "10459": 2, "10460": 4, "10461": 4, "10462": 1, "10463": 4, "10464": 8, "10465": 4, "10466": 0, "10467": 3, "10468": 2, "10469": 4, "10470": 8, "10471": 4, "10472": 4, "10473": 4, "10474": 6, "10475": 4, "10476": 8, "10477": 2, "10478": 0, "10479": 7, "10480": 4, "10481": 7, "10482": 7, "10483": 5, "10484": 8, "10485": 4, "10486": 4, "10487": 4, "10488": 8, "10489": 4, "10490": 0, "10491": 4, "10492": 6, "10493": 7, "10494": 6, "10495": 1, "10496": 4, "10497": 4, "10498": 2, "10499": 8, "10500": 4, "10501": 4, "10502": 4, "10503": 7, "10504": 4, "10505": 1, "10506": 3, "10507": 4, "10508": 2, "10509": 4, "10510": 8, "10511": 4, "10512": 4, "10513": 1, "10514": 8, "10515": 1, "10516": 4, "10517": 1, "10518": 4, "10519": 8, "10520": 4, "10521": 2, "10522": 4, "10523": 4, "10524": 4, "10525": 4, "10526": 3, "10527": 7, "10528": 4, "10529": 4, "10530": 4, "10531": 5, "10532": 2, "10533": 1, "10534": 9, "10535": 4, "10536": 1, "10537": 1, "10538": 6, "10539": 5, "10540": 8, "10541": 0, "10542": 8, "10543": 3, "10544": 2, "10545": 4, "10546": 2, "10547": 1, "10548": 5, "10549": 4, "10550": 4, "10551": 3, "10552": 4, "10553": 4, "10554": 7, "10555": 5, "10556": 4, "10557": 8, "10558": 4, "10559": 8, "10560": 1, "10561": 1, "10562": 7, "10563": 4, "10564": 4, "10565": 8, "10566": 5, "10567": 4, "10568": 6, "10569": 3, "10570": 6, "10571": 1, "10572": 2, "10573": 4, "10574": 4, "10575": 9, "10576": 5, "10577": 2, "10578": 4, "10579": 2, "10580": 7, "10581": 4, "10582": 4, "10583": 2, "10584": 4, "10585": 8, "10586": 1, "10587": 2, "10588": 2, "10589": 4, "10590": 4, "10591": 4, "10592": 1, "10593": 4, "10594": 4, "10595": 7, "10596": 2, "10597": 1, "10598": 1, "10599": 4, "10600": 4, "10601": 2, "10602": 1, "10603": 6, "10604": 4, "10605": 4, "10606": 8, "10607": 2, "10608": 4, "10609": 5, "10610": 4, "10611": 8, "10612": 4, "10613": 8, "10614": 4, "10615": 1, "10616": 8, "10617": 3, "10618": 1, "10619": 1, "10620": 4, "10621": 4, "10622": 8, "10623": 4, "10624": 4, "10625": 4, "10626": 4, "10627": 2, "10628": 4, "10629": 2, "10630": 4, "10631": 6, "10632": 4, "10633": 0, "10634": 4, "10635": 2, "10636": 5, "10637": 4, "10638": 8, "10639": 4, "10640": 4, "10641": 5, "10642": 1, "10643": 8, "10644": 8, "10645": 3, "10646": 1, "10647": 4, "10648": 7, "10649": 4, "10650": 2, "10651": 4, "10652": 4, "10653": 2, "10654": 4, "10655": 4, "10656": 4, "10657": 4, "10658": 2, "10659": 1, "10660": 8, "10661": 4, "10662": 4, "10663": 4, "10664": 2, "10665": 0, "10666": 4, "10667": 4, "10668": 2, "10669": 7, "10670": 5, "10671": 6, "10672": 3, "10673": 4, "10674": 4, "10675": 9, "10676": 7, "10677": 4, "10678": 1, "10679": 4, "10680": 8, "10681": 3, "10682": 8, "10683": 4, "10684": 8, "10685": 8, "10686": 4, "10687": 1, "10688": 4, "10689": 2, "10690": 8, "10691": 4, "10692": 9, "10693": 4, "10694": 7, "10695": 4, "10696": 0, "10697": 2, "10698": 1, "10699": 8, "10700": 2, "10701": 8, "10702": 3, "10703": 4, "10704": 2, "10705": 3, "10706": 0, "10707": 9, "10708": 4, "10709": 4, "10710": 2, "10711": 2, "10712": 4, "10713": 4, "10714": 1, "10715": 0, "10716": 5, "10717": 5, "10718": 8, "10719": 6, "10720": 4, "10721": 4, "10722": 2, "10723": 2, "10724": 8, "10725": 4, "10726": 4, "10727": 1, "10728": 4, "10729": 1, "10730": 4, "10731": 4, "10732": 1, "10733": 0, "10734": 4, "10735": 1, "10736": 4, "10737": 2, "10738": 4, "10739": 2, "10740": 4, "10741": 4, "10742": 2, "10743": 1, "10744": 1, "10745": 1, "10746": 6, "10747": 7, "10748": 0, "10749": 3, "10750": 4, "10751": 2, "10752": 4, "10753": 1, "10754": 8, "10755": 4, "10756": 4, "10757": 8, "10758": 1, "10759": 1, "10760": 4, "10761": 7, "10762": 4, "10763": 4, "10764": 5, "10765": 8, "10766": 1, "10767": 4, "10768": 4, "10769": 1, "10770": 4, "10771": 8, "10772": 4, "10773": 7, "10774": 2, "10775": 4, "10776": 8, "10777": 0, "10778": 8, "10779": 2, "10780": 4, "10781": 8, "10782": 4, "10783": 7, "10784": 4, "10785": 2, "10786": 7, "10787": 8, "10788": 8, "10789": 4, "10790": 5, "10791": 8, "10792": 4, "10793": 4, "10794": 5, "10795": 4, "10796": 4, "10797": 2, "10798": 1, "10799": 1, "10800": 1, "10801": 7, "10802": 4, "10803": 4, "10804": 8, "10805": 1, "10806": 4, "10807": 8, "10808": 8, "10809": 4, "10810": 8, "10811": 4, "10812": 4, "10813": 4, "10814": 4, "10815": 4, "10816": 6, "10817": 3, "10818": 1, "10819": 7, "10820": 4, "10821": 4, "10822": 4, "10823": 2, "10824": 1, "10825": 8, "10826": 8, "10827": 4, "10828": 8, "10829": 4, "10830": 6, "10831": 4, "10832": 8, "10833": 1, "10834": 0, "10835": 4, "10836": 1, "10837": 2, "10838": 4, "10839": 3, "10840": 1, "10841": 2, "10842": 2, "10843": 1, "10844": 2, "10845": 1, "10846": 4, "10847": 1, "10848": 8, "10849": 3, "10850": 4, "10851": 5, "10852": 1, "10853": 8, "10854": 2, "10855": 0, "10856": 4, "10857": 1, "10858": 7, "10859": 4, "10860": 4, "10861": 4, "10862": 7, "10863": 1, "10864": 4, "10865": 4, "10866": 4, "10867": 4, "10868": 4, "10869": 8, "10870": 8, "10871": 3, "10872": 4, "10873": 1, "10874": 7, "10875": 2, "10876": 1, "10877": 4, "10878": 8, "10879": 4, "10880": 4, "10881": 7, "10882": 2, "10883": 4, "10884": 4, "10885": 1, "10886": 1, "10887": 4, "10888": 1, "10889": 2, "10890": 3, "10891": 8, "10892": 2, "10893": 1, "10894": 4, "10895": 4, "10896": 8, "10897": 2, "10898": 4, "10899": 9, "10900": 8, "10901": 4, "10902": 4, "10903": 6, "10904": 8, "10905": 4, "10906": 4, "10907": 8, "10908": 3, "10909": 4, "10910": 4, "10911": 4, "10912": 8, "10913": 1, "10914": 4, "10915": 8, "10916": 2, "10917": 8, "10918": 0, "10919": 2, "10920": 2, "10921": 9, "10922": 1, "10923": 8, "10924": 0, "10925": 4, "10926": 1, "10927": 4, "10928": 1, "10929": 4, "10930": 4, "10931": 7, "10932": 4, "10933": 4, "10934": 6, "10935": 4, "10936": 4, "10937": 4, "10938": 2, "10939": 1, "10940": 2, "10941": 4, "10942": 0, "10943": 0, "10944": 8, "10945": 4, "10946": 4, "10947": 2, "10948": 4, "10949": 4, "10950": 3, "10951": 9, "10952": 4, "10953": 4, "10954": 4, "10955": 9, "10956": 4, "10957": 8, "10958": 2, "10959": 4, "10960": 1, "10961": 1, "10962": 4, "10963": 2, "10964": 3, "10965": 8, "10966": 1, "10967": 6, "10968": 7, "10969": 2, "10970": 4, "10971": 7, "10972": 1, "10973": 8, "10974": 4, "10975": 4, "10976": 4, "10977": 2, "10978": 8, "10979": 8, "10980": 1, "10981": 2, "10982": 4, "10983": 4, "10984": 4, "10985": 4, "10986": 6, "10987": 4, "10988": 9, "10989": 4, "10990": 2, "10991": 4, "10992": 2, "10993": 3, "10994": 8, "10995": 4, "10996": 4, "10997": 2, "10998": 8, "10999": 2, "11000": 2, "11001": 8, "11002": 4, "11003": 4, "11004": 1, "11005": 4, "11006": 8, "11007": 4, "11008": 4, "11009": 6, "11010": 0, "11011": 6, "11012": 8, "11013": 4, "11014": 4, "11015": 8, "11016": 4, "11017": 6, "11018": 2, "11019": 4, "11020": 4, "11021": 4, "11022": 5, "11023": 4, "11024": 4, "11025": 7, "11026": 1, "11027": 4, "11028": 4, "11029": 7, "11030": 7, "11031": 8, "11032": 4, "11033": 2, "11034": 7, "11035": 1, "11036": 8, "11037": 4, "11038": 4, "11039": 4, "11040": 8, "11041": 4, "11042": 4, "11043": 1, "11044": 8, "11045": 7, "11046": 4, "11047": 4, "11048": 9, "11049": 4, "11050": 5, "11051": 1, "11052": 4, "11053": 1, "11054": 8, "11055": 0, "11056": 9, "11057": 1, "11058": 0, "11059": 0, "11060": 4, "11061": 8, "11062": 6, "11063": 5, "11064": 2, "11065": 4, "11066": 4, "11067": 5, "11068": 3, "11069": 1, "11070": 8, "11071": 7, "11072": 8, "11073": 8, "11074": 7, "11075": 4, "11076": 4, "11077": 4, "11078": 0, "11079": 1, "11080": 2, "11081": 4, "11082": 8, "11083": 8, "11084": 4, "11085": 4, "11086": 1, "11087": 4, "11088": 1, "11089": 4, "11090": 7, "11091": 4, "11092": 4, "11093": 5, "11094": 7, "11095": 4, "11096": 4, "11097": 8, "11098": 8, "11099": 4, "11100": 4, "11101": 4, "11102": 2, "11103": 8, "11104": 4, "11105": 0, "11106": 8, "11107": 4, "11108": 9, "11109": 4, "11110": 3, "11111": 4, "11112": 4, "11113": 0, "11114": 4, "11115": 4, "11116": 2, "11117": 4, "11118": 4, "11119": 4, "11120": 1, "11121": 1, "11122": 0, "11123": 1, "11124": 7, "11125": 4, "11126": 4, "11127": 4, "11128": 2, "11129": 4, "11130": 2, "11131": 4, "11132": 8, "11133": 2, "11134": 8, "11135": 4, "11136": 8, "11137": 1, "11138": 8, "11139": 4, "11140": 9, "11141": 8, "11142": 7, "11143": 4, "11144": 4, "11145": 4, "11146": 4, "11147": 8, "11148": 1, "11149": 2, "11150": 8, "11151": 1, "11152": 4, "11153": 4, "11154": 1, "11155": 3, "11156": 4, "11157": 4, "11158": 8, "11159": 4, "11160": 4, "11161": 4, "11162": 2, "11163": 4, "11164": 4, "11165": 8, "11166": 5, "11167": 8, "11168": 4, "11169": 1, "11170": 4, "11171": 2, "11172": 4, "11173": 1, "11174": 1, "11175": 4, "11176": 7, "11177": 4, "11178": 8, "11179": 8, "11180": 8, "11181": 8, "11182": 7, "11183": 1, "11184": 8, "11185": 4, "11186": 8, "11187": 4, "11188": 4, "11189": 0, "11190": 0, "11191": 8, "11192": 8, "11193": 4, "11194": 8, "11195": 8, "11196": 2, "11197": 4, "11198": 4, "11199": 4, "11200": 4, "11201": 0, "11202": 1, "11203": 4, "11204": 1, "11205": 8, "11206": 1, "11207": 1, "11208": 3, "11209": 6, "11210": 6, "11211": 4, "11212": 4, "11213": 2, "11214": 4, "11215": 2, "11216": 4, "11217": 2, "11218": 4, "11219": 4, "11220": 1, "11221": 1, "11222": 7, "11223": 0, "11224": 4, "11225": 7, "11226": 8, "11227": 2, "11228": 1, "11229": 8, "11230": 1, "11231": 4, "11232": 4, "11233": 8, "11234": 4, "11235": 4, "11236": 8, "11237": 8, "11238": 4, "11239": 1, "11240": 4, "11241": 8, "11242": 1, "11243": 4, "11244": 8, "11245": 1, "11246": 8, "11247": 5, "11248": 8, "11249": 7, "11250": 4, "11251": 7, "11252": 1, "11253": 4, "11254": 4, "11255": 3, "11256": 2, "11257": 1, "11258": 8, "11259": 8, "11260": 1, "11261": 9, "11262": 8, "11263": 0, "11264": 4, "11265": 1, "11266": 4, "11267": 4, "11268": 1, "11269": 7, "11270": 2, "11271": 4, "11272": 4, "11273": 4, "11274": 4, "11275": 2, "11276": 4, "11277": 0, "11278": 4, "11279": 4, "11280": 2, "11281": 2, "11282": 8, "11283": 1, "11284": 4, "11285": 4, "11286": 1, "11287": 3, "11288": 9, "11289": 6, "11290": 8, "11291": 4, "11292": 4, "11293": 0, "11294": 0, "11295": 1, "11296": 4, "11297": 4, "11298": 7, "11299": 2, "11300": 9, "11301": 6, "11302": 7, "11303": 4, "11304": 4, "11305": 4, "11306": 8, "11307": 4, "11308": 8, "11309": 4, "11310": 4, "11311": 1, "11312": 8, "11313": 6, "11314": 4, "11315": 0, "11316": 4, "11317": 8, "11318": 4, "11319": 1, "11320": 6, "11321": 8, "11322": 4, "11323": 4, "11324": 8, "11325": 0, "11326": 8, "11327": 1, "11328": 4, "11329": 8, "11330": 4, "11331": 4, "11332": 2, "11333": 2, "11334": 4, "11335": 9, "11336": 4, "11337": 4, "11338": 2, "11339": 7, "11340": 4, "11341": 2, "11342": 7, "11343": 8, "11344": 8, "11345": 1, "11346": 1, "11347": 4, "11348": 4, "11349": 4, "11350": 1, "11351": 8, "11352": 4, "11353": 8, "11354": 6, "11355": 3, "11356": 8, "11357": 4, "11358": 5, "11359": 8, "11360": 8, "11361": 2, "11362": 3, "11363": 4, "11364": 2, "11365": 6, "11366": 4, "11367": 4, "11368": 3, "11369": 2, "11370": 0, "11371": 7, "11372": 1, "11373": 5, "11374": 4, "11375": 3, "11376": 4, "11377": 6, "11378": 2, "11379": 4, "11380": 4, "11381": 8, "11382": 0, "11383": 1, "11384": 8, "11385": 4, "11386": 8, "11387": 1, "11388": 7, "11389": 3, "11390": 2, "11391": 8, "11392": 1, "11393": 1, "11394": 5, "11395": 1, "11396": 1, "11397": 4, "11398": 0, "11399": 4, "11400": 4, "11401": 4, "11402": 8, "11403": 1, "11404": 1, "11405": 4, "11406": 4, "11407": 2, "11408": 1, "11409": 2, "11410": 4, "11411": 4, "11412": 4, "11413": 4, "11414": 4, "11415": 4, "11416": 4, "11417": 5, "11418": 4, "11419": 1, "11420": 1, "11421": 4, "11422": 7, "11423": 4, "11424": 4, "11425": 2, "11426": 2, "11427": 7, "11428": 4, "11429": 8, "11430": 3, "11431": 1, "11432": 7, "11433": 4, "11434": 8, "11435": 1, "11436": 2, "11437": 4, "11438": 8, "11439": 3, "11440": 8, "11441": 4, "11442": 0, "11443": 6, "11444": 1, "11445": 2, "11446": 8, "11447": 4, "11448": 4, "11449": 3, "11450": 1, "11451": 1, "11452": 1, "11453": 4, "11454": 5, "11455": 1, "11456": 4, "11457": 3, "11458": 8, "11459": 4, "11460": 9, "11461": 4, "11462": 8, "11463": 0, "11464": 4, "11465": 1, "11466": 4, "11467": 8, "11468": 8, "11469": 4, "11470": 4, "11471": 8, "11472": 9, "11473": 8, "11474": 4, "11475": 7, "11476": 1, "11477": 4, "11478": 1, "11479": 4, "11480": 4, "11481": 4, "11482": 0, "11483": 2, "11484": 1, "11485": 1, "11486": 4, "11487": 7, "11488": 8, "11489": 4, "11490": 1, "11491": 0, "11492": 4, "11493": 1, "11494": 6, "11495": 4, "11496": 2, "11497": 7, "11498": 5, "11499": 2, "11500": 7, "11501": 8, "11502": 4, "11503": 1, "11504": 3, "11505": 4, "11506": 4, "11507": 4, "11508": 3, "11509": 3, "11510": 1, "11511": 1, "11512": 1, "11513": 2, "11514": 7, "11515": 4, "11516": 2, "11517": 0, "11518": 5, "11519": 1, "11520": 4, "11521": 4, "11522": 4, "11523": 6, "11524": 4, "11525": 1, "11526": 8, "11527": 4, "11528": 3, "11529": 4, "11530": 4, "11531": 1, "11532": 4, "11533": 8, "11534": 4, "11535": 3, "11536": 2, "11537": 4, "11538": 4, "11539": 4, "11540": 2, "11541": 6, "11542": 1, "11543": 8, "11544": 8, "11545": 4, "11546": 2, "11547": 4, "11548": 4, "11549": 8, "11550": 4, "11551": 8, "11552": 4, "11553": 1, "11554": 4, "11555": 1, "11556": 1, "11557": 4, "11558": 4, "11559": 2, "11560": 8, "11561": 1, "11562": 2, "11563": 4, "11564": 2, "11565": 4, "11566": 4, "11567": 4, "11568": 4, "11569": 6, "11570": 4, "11571": 2, "11572": 4, "11573": 6, "11574": 8, "11575": 4, "11576": 7, "11577": 8, "11578": 4, "11579": 1, "11580": 8, "11581": 4, "11582": 2, "11583": 4, "11584": 9, "11585": 4, "11586": 4, "11587": 2, "11588": 4, "11589": 7, "11590": 6, "11591": 4, "11592": 3, "11593": 4, "11594": 0, "11595": 4, "11596": 8, "11597": 2, "11598": 4, "11599": 7, "11600": 4, "11601": 5, "11602": 1, "11603": 1, "11604": 3, "11605": 4, "11606": 4, "11607": 4, "11608": 1, "11609": 1, "11610": 7, "11611": 3, "11612": 4, "11613": 4, "11614": 4, "11615": 2, "11616": 4, "11617": 3, "11618": 0, "11619": 1, "11620": 4, "11621": 8, "11622": 4, "11623": 4, "11624": 8, "11625": 6, "11626": 4, "11627": 3, "11628": 8, "11629": 4, "11630": 1, "11631": 2, "11632": 7, "11633": 9, "11634": 8, "11635": 2, "11636": 2, "11637": 0, "11638": 6, "11639": 4, "11640": 4, "11641": 1, "11642": 1, "11643": 2, "11644": 4, "11645": 8, "11646": 0, "11647": 9, "11648": 4, "11649": 4, "11650": 1, "11651": 9, "11652": 4, "11653": 6, "11654": 8, "11655": 1, "11656": 4, "11657": 8, "11658": 4, "11659": 2, "11660": 1, "11661": 4, "11662": 8, "11663": 4, "11664": 4, "11665": 2, "11666": 4, "11667": 4, "11668": 4, "11669": 7, "11670": 4, "11671": 8, "11672": 0, "11673": 4, "11674": 2, "11675": 1, "11676": 7, "11677": 4, "11678": 8, "11679": 8, "11680": 4, "11681": 4, "11682": 2, "11683": 1, "11684": 1, "11685": 4, "11686": 2, "11687": 6, "11688": 2, "11689": 7, "11690": 4, "11691": 4, "11692": 4, "11693": 1, "11694": 4, "11695": 3, "11696": 4, "11697": 8, "11698": 8, "11699": 3, "11700": 4, "11701": 4, "11702": 4, "11703": 7, "11704": 4, "11705": 1, "11706": 8, "11707": 0, "11708": 2, "11709": 2, "11710": 8, "11711": 5, "11712": 7, "11713": 1, "11714": 0, "11715": 8, "11716": 9, "11717": 8, "11718": 4, "11719": 2, "11720": 1, "11721": 3, "11722": 2, "11723": 4, "11724": 8, "11725": 9, "11726": 8, "11727": 2, "11728": 2, "11729": 7, "11730": 2, "11731": 2, "11732": 0, "11733": 8, "11734": 2, "11735": 2, "11736": 4, "11737": 0, "11738": 9, "11739": 4, "11740": 2, "11741": 4, "11742": 4, "11743": 8, "11744": 4, "11745": 0, "11746": 8, "11747": 4, "11748": 4, "11749": 4, "11750": 1, "11751": 1, "11752": 8, "11753": 7, "11754": 2, "11755": 9, "11756": 4, "11757": 9, "11758": 4, "11759": 2, "11760": 2, "11761": 8, "11762": 6, "11763": 1, "11764": 2, "11765": 1, "11766": 1, "11767": 1, "11768": 3, "11769": 3, "11770": 8, "11771": 4, "11772": 4, "11773": 1, "11774": 4, "11775": 0, "11776": 0, "11777": 4, "11778": 4, "11779": 1, "11780": 4, "11781": 2, "11782": 4, "11783": 1, "11784": 8, "11785": 1, "11786": 2, "11787": 7, "11788": 4, "11789": 7, "11790": 2, "11791": 1, "11792": 8, "11793": 7, "11794": 2, "11795": 4, "11796": 4, "11797": 0, "11798": 7, "11799": 8, "11800": 2, "11801": 7, "11802": 2, "11803": 1, "11804": 4, "11805": 9, "11806": 4, "11807": 1, "11808": 1, "11809": 3, "11810": 2, "11811": 4, "11812": 4, "11813": 1, "11814": 1, "11815": 1, "11816": 4, "11817": 1, "11818": 6, "11819": 1, "11820": 8, "11821": 7, "11822": 2, "11823": 1, "11824": 2, "11825": 7, "11826": 4, "11827": 7, "11828": 4, "11829": 3, "11830": 6, "11831": 4, "11832": 4, "11833": 8, "11834": 7, "11835": 4, "11836": 4, "11837": 5, "11838": 4, "11839": 4, "11840": 4, "11841": 2, "11842": 4, "11843": 7, "11844": 4, "11845": 2, "11846": 4, "11847": 4, "11848": 4, "11849": 8, "11850": 8, "11851": 4, "11852": 5, "11853": 1, "11854": 1, "11855": 4, "11856": 1, "11857": 4, "11858": 1, "11859": 4, "11860": 6, "11861": 1, "11862": 4, "11863": 1, "11864": 8, "11865": 9, "11866": 0, "11867": 6, "11868": 2, "11869": 2, "11870": 4, "11871": 2, "11872": 4, "11873": 1, "11874": 1, "11875": 4, "11876": 8, "11877": 4, "11878": 8, "11879": 4, "11880": 0, "11881": 1, "11882": 4, "11883": 2, "11884": 2, "11885": 8, "11886": 6, "11887": 7, "11888": 7, "11889": 5, "11890": 0, "11891": 0, "11892": 4, "11893": 4, "11894": 4, "11895": 0, "11896": 1, "11897": 1, "11898": 2, "11899": 1, "11900": 8, "11901": 8, "11902": 8, "11903": 4, "11904": 8, "11905": 2, "11906": 4, "11907": 8, "11908": 3, "11909": 1, "11910": 4, "11911": 1, "11912": 4, "11913": 7, "11914": 8, "11915": 4, "11916": 4, "11917": 3, "11918": 4, "11919": 7, "11920": 7, "11921": 5, "11922": 9, "11923": 4, "11924": 2, "11925": 4, "11926": 8, "11927": 1, "11928": 1, "11929": 8, "11930": 0, "11931": 4, "11932": 1, "11933": 8, "11934": 0, "11935": 7, "11936": 4, "11937": 8, "11938": 4, "11939": 9, "11940": 8, "11941": 7, "11942": 4, "11943": 7, "11944": 7, "11945": 1, "11946": 8, "11947": 8, "11948": 8, "11949": 7, "11950": 4, "11951": 8, "11952": 2, "11953": 2, "11954": 1, "11955": 1, "11956": 4, "11957": 8, "11958": 3, "11959": 1, "11960": 4, "11961": 8, "11962": 4, "11963": 4, "11964": 1, "11965": 6, "11966": 4, "11967": 4, "11968": 2, "11969": 3, "11970": 4, "11971": 2, "11972": 8, "11973": 4, "11974": 1, "11975": 8, "11976": 4, "11977": 2, "11978": 8, "11979": 4, "11980": 4, "11981": 9, "11982": 4, "11983": 8, "11984": 1, "11985": 4, "11986": 6, "11987": 4, "11988": 9, "11989": 8, "11990": 4, "11991": 4, "11992": 7, "11993": 4, "11994": 4, "11995": 3, "11996": 4, "11997": 0, "11998": 2, "11999": 4, "12000": 8, "12001": 4, "12002": 8, "12003": 2, "12004": 8, "12005": 3, "12006": 8, "12007": 2, "12008": 4, "12009": 7, "12010": 7, "12011": 5, "12012": 4, "12013": 0, "12014": 8, "12015": 1, "12016": 3, "12017": 1, "12018": 8, "12019": 4, "12020": 3, "12021": 4, "12022": 4, "12023": 1, "12024": 7, "12025": 4, "12026": 4, "12027": 8, "12028": 8, "12029": 4, "12030": 1, "12031": 4, "12032": 4, "12033": 8, "12034": 1, "12035": 4, "12036": 4, "12037": 4, "12038": 4, "12039": 4, "12040": 8, "12041": 8, "12042": 9, "12043": 1, "12044": 4, "12045": 1, "12046": 4, "12047": 4, "12048": 4, "12049": 2, "12050": 2, "12051": 1, "12052": 9, "12053": 0, "12054": 9, "12055": 4, "12056": 7, "12057": 3, "12058": 2, "12059": 4, "12060": 4, "12061": 7, "12062": 1, "12063": 1, "12064": 1, "12065": 7, "12066": 8, "12067": 4, "12068": 7, "12069": 4, "12070": 0, "12071": 1, "12072": 1, "12073": 4, "12074": 6, "12075": 8, "12076": 4, "12077": 4, "12078": 7, "12079": 1, "12080": 8, "12081": 4, "12082": 3, "12083": 4, "12084": 8, "12085": 0, "12086": 6, "12087": 3, "12088": 2, "12089": 1, "12090": 1, "12091": 1, "12092": 4, "12093": 8, "12094": 1, "12095": 2, "12096": 4, "12097": 4, "12098": 4, "12099": 6, "12100": 3, "12101": 1, "12102": 1, "12103": 2, "12104": 8, "12105": 5, "12106": 2, "12107": 4, "12108": 4, "12109": 8, "12110": 7, "12111": 4, "12112": 1, "12113": 4, "12114": 8, "12115": 4, "12116": 7, "12117": 4, "12118": 7, "12119": 4, "12120": 4, "12121": 6, "12122": 4, "12123": 3, "12124": 1, "12125": 4, "12126": 4, "12127": 1, "12128": 0, "12129": 3, "12130": 1, "12131": 4, "12132": 5, "12133": 7, "12134": 4, "12135": 1, "12136": 2, "12137": 8, "12138": 1, "12139": 4, "12140": 6, "12141": 3, "12142": 0, "12143": 8, "12144": 4, "12145": 3, "12146": 6, "12147": 4, "12148": 1, "12149": 3, "12150": 4, "12151": 8, "12152": 8, "12153": 2, "12154": 4, "12155": 1, "12156": 1, "12157": 4, "12158": 1, "12159": 4, "12160": 4, "12161": 0, "12162": 4, "12163": 1, "12164": 2, "12165": 1, "12166": 2, "12167": 6, "12168": 4, "12169": 4, "12170": 8, "12171": 4, "12172": 4, "12173": 0, "12174": 8, "12175": 3, "12176": 4, "12177": 4, "12178": 4, "12179": 7, "12180": 4, "12181": 4, "12182": 1, "12183": 5, "12184": 4, "12185": 4, "12186": 4, "12187": 8, "12188": 7, "12189": 8, "12190": 1, "12191": 4, "12192": 8, "12193": 4, "12194": 4, "12195": 8, "12196": 1, "12197": 9, "12198": 8, "12199": 1, "12200": 9, "12201": 9, "12202": 2, "12203": 7, "12204": 2, "12205": 4, "12206": 6, "12207": 4, "12208": 7, "12209": 9, "12210": 0, "12211": 4, "12212": 6, "12213": 7, "12214": 4, "12215": 4, "12216": 3, "12217": 3, "12218": 4, "12219": 1, "12220": 8, "12221": 8, "12222": 4, "12223": 4, "12224": 8, "12225": 8, "12226": 8, "12227": 8, "12228": 4, "12229": 1, "12230": 4, "12231": 4, "12232": 4, "12233": 1, "12234": 7, "12235": 4, "12236": 8, "12237": 4, "12238": 7, "12239": 1, "12240": 8, "12241": 8, "12242": 4, "12243": 8, "12244": 4, "12245": 4, "12246": 7, "12247": 0, "12248": 2, "12249": 9, "12250": 2, "12251": 1, "12252": 4, "12253": 4, "12254": 4, "12255": 8, "12256": 2, "12257": 4, "12258": 4, "12259": 4, "12260": 1, "12261": 4, "12262": 4, "12263": 4, "12264": 2, "12265": 1, "12266": 9, "12267": 2, "12268": 2, "12269": 8, "12270": 4, "12271": 4, "12272": 4, "12273": 2, "12274": 2, "12275": 8, "12276": 4, "12277": 1, "12278": 9, "12279": 4, "12280": 1, "12281": 4, "12282": 4, "12283": 4, "12284": 4, "12285": 4, "12286": 4, "12287": 4, "12288": 8, "12289": 4, "12290": 8, "12291": 4, "12292": 8, "12293": 2, "12294": 1, "12295": 4, "12296": 2, "12297": 8, "12298": 8, "12299": 6, "12300": 4, "12301": 4, "12302": 9, "12303": 5, "12304": 4, "12305": 1, "12306": 6, "12307": 8, "12308": 0, "12309": 4, "12310": 4, "12311": 1, "12312": 8, "12313": 6, "12314": 1, "12315": 4, "12316": 6, "12317": 7, "12318": 0, "12319": 8, "12320": 1, "12321": 8, "12322": 8, "12323": 4, "12324": 8, "12325": 1, "12326": 2, "12327": 1, "12328": 4, "12329": 4, "12330": 8, "12331": 4, "12332": 2, "12333": 1, "12334": 4, "12335": 8, "12336": 4, "12337": 4, "12338": 6, "12339": 4, "12340": 2, "12341": 3, "12342": 4, "12343": 4, "12344": 1, "12345": 4, "12346": 4, "12347": 4, "12348": 4, "12349": 7, "12350": 4, "12351": 7, "12352": 4, "12353": 1, "12354": 1, "12355": 4, "12356": 1, "12357": 2, "12358": 8, "12359": 1, "12360": 1, "12361": 4, "12362": 4, "12363": 8, "12364": 2, "12365": 7, "12366": 6, "12367": 1, "12368": 4, "12369": 1, "12370": 4, "12371": 4, "12372": 4, "12373": 1, "12374": 8, "12375": 1, "12376": 2, "12377": 7, "12378": 1, "12379": 7, "12380": 0, "12381": 4, "12382": 4, "12383": 4, "12384": 3, "12385": 0, "12386": 2, "12387": 9, "12388": 1, "12389": 4, "12390": 4, "12391": 0, "12392": 8, "12393": 2, "12394": 8, "12395": 4, "12396": 7, "12397": 8, "12398": 7, "12399": 4, "12400": 8, "12401": 4, "12402": 4, "12403": 2, "12404": 1, "12405": 4, "12406": 2, "12407": 8, "12408": 2, "12409": 4, "12410": 1, "12411": 4, "12412": 4, "12413": 4, "12414": 3, "12415": 4, "12416": 4, "12417": 1, "12418": 3, "12419": 4, "12420": 1, "12421": 1, "12422": 2, "12423": 8, "12424": 8, "12425": 1, "12426": 4, "12427": 4, "12428": 4, "12429": 9, "12430": 8, "12431": 4, "12432": 8, "12433": 6, "12434": 4, "12435": 1, "12436": 1, "12437": 8, "12438": 2, "12439": 4, "12440": 4, "12441": 4, "12442": 1, "12443": 4, "12444": 2, "12445": 1, "12446": 8, "12447": 0, "12448": 2, "12449": 8, "12450": 6, "12451": 4, "12452": 8, "12453": 5, "12454": 2, "12455": 9, "12456": 7, "12457": 1, "12458": 4, "12459": 4, "12460": 4, "12461": 1, "12462": 4, "12463": 4, "12464": 4, "12465": 9, "12466": 4, "12467": 4, "12468": 4, "12469": 1, "12470": 8, "12471": 8, "12472": 4, "12473": 8, "12474": 9, "12475": 1, "12476": 4, "12477": 4, "12478": 8, "12479": 0, "12480": 1, "12481": 4, "12482": 4, "12483": 4, "12484": 2, "12485": 4, "12486": 4, "12487": 6, "12488": 4, "12489": 1, "12490": 8, "12491": 4, "12492": 4, "12493": 4, "12494": 4, "12495": 4, "12496": 4, "12497": 4, "12498": 8, "12499": 5, "12500": 3, "12501": 1, "12502": 4, "12503": 1, "12504": 1, "12505": 1, "12506": 9, "12507": 4, "12508": 3, "12509": 2, "12510": 5, "12511": 4, "12512": 4, "12513": 6, "12514": 7, "12515": 3, "12516": 4, "12517": 6, "12518": 4, "12519": 4, "12520": 1, "12521": 0, "12522": 8, "12523": 8, "12524": 4, "12525": 8, "12526": 4, "12527": 4, "12528": 4, "12529": 2, "12530": 8, "12531": 4, "12532": 7, "12533": 4, "12534": 3, "12535": 4, "12536": 4, "12537": 1, "12538": 1, "12539": 7, "12540": 2, "12541": 2, "12542": 1, "12543": 2, "12544": 4, "12545": 5, "12546": 1, "12547": 1, "12548": 1, "12549": 4, "12550": 1, "12551": 1, "12552": 4, "12553": 2, "12554": 8, "12555": 0, "12556": 4, "12557": 2, "12558": 4, "12559": 7, "12560": 8, "12561": 4, "12562": 4, "12563": 3, "12564": 2, "12565": 1, "12566": 8, "12567": 9, "12568": 8, "12569": 4, "12570": 1, "12571": 1, "12572": 1, "12573": 4, "12574": 4, "12575": 6, "12576": 1, "12577": 4, "12578": 2, "12579": 4, "12580": 7, "12581": 8, "12582": 7, "12583": 4, "12584": 6, "12585": 4, "12586": 8, "12587": 1, "12588": 5, "12589": 4, "12590": 2, "12591": 2, "12592": 8, "12593": 8, "12594": 8, "12595": 4, "12596": 4, "12597": 8, "12598": 1, "12599": 1, "12600": 4, "12601": 8, "12602": 8, "12603": 5, "12604": 7, "12605": 3, "12606": 4, "12607": 0, "12608": 2, "12609": 8, "12610": 6, "12611": 1, "12612": 8, "12613": 4, "12614": 8, "12615": 6, "12616": 8, "12617": 4, "12618": 4, "12619": 4, "12620": 4, "12621": 4, "12622": 7, "12623": 1, "12624": 6, "12625": 7, "12626": 4, "12627": 4, "12628": 7, "12629": 4, "12630": 4, "12631": 6, "12632": 4, "12633": 4, "12634": 1, "12635": 2, "12636": 5, "12637": 4, "12638": 4, "12639": 9, "12640": 8, "12641": 4, "12642": 6, "12643": 4, "12644": 4, "12645": 8, "12646": 4, "12647": 4, "12648": 8, "12649": 1, "12650": 8, "12651": 8, "12652": 8, "12653": 4, "12654": 2, "12655": 7, "12656": 6, "12657": 6, "12658": 8, "12659": 8, "12660": 4, "12661": 1, "12662": 8, "12663": 8, "12664": 2, "12665": 4, "12666": 0, "12667": 1, "12668": 0, "12669": 1, "12670": 1, "12671": 1, "12672": 2, "12673": 1, "12674": 4, "12675": 1, "12676": 4, "12677": 1, "12678": 2, "12679": 4, "12680": 4, "12681": 4, "12682": 2, "12683": 1, "12684": 4, "12685": 8, "12686": 2, "12687": 8, "12688": 6, "12689": 2, "12690": 8, "12691": 4, "12692": 1, "12693": 7, "12694": 4, "12695": 4, "12696": 1, "12697": 4, "12698": 8, "12699": 1, "12700": 9, "12701": 4, "12702": 4, "12703": 6, "12704": 6, "12705": 4, "12706": 3, "12707": 4, "12708": 8, "12709": 4, "12710": 4, "12711": 6, "12712": 4, "12713": 4, "12714": 4, "12715": 5, "12716": 4, "12717": 4, "12718": 1, "12719": 2, "12720": 8, "12721": 8, "12722": 8, "12723": 4, "12724": 1, "12725": 0, "12726": 4, "12727": 5, "12728": 8, "12729": 4, "12730": 8, "12731": 4, "12732": 4, "12733": 9, "12734": 4, "12735": 8, "12736": 4, "12737": 4, "12738": 0, "12739": 2, "12740": 2, "12741": 4, "12742": 1, "12743": 2, "12744": 4, "12745": 7, "12746": 2, "12747": 2, "12748": 6, "12749": 3, "12750": 0, "12751": 0, "12752": 1, "12753": 8, "12754": 3, "12755": 1, "12756": 1, "12757": 7, "12758": 6, "12759": 7, "12760": 4, "12761": 4, "12762": 8, "12763": 4, "12764": 4, "12765": 1, "12766": 1, "12767": 4, "12768": 1, "12769": 1, "12770": 8, "12771": 1, "12772": 4, "12773": 8, "12774": 7, "12775": 2, "12776": 1, "12777": 7, "12778": 8, "12779": 4, "12780": 4, "12781": 3, "12782": 8, "12783": 1, "12784": 4, "12785": 1, "12786": 4, "12787": 1, "12788": 8, "12789": 1, "12790": 4, "12791": 5, "12792": 1, "12793": 7, "12794": 4, "12795": 4, "12796": 4, "12797": 5, "12798": 7, "12799": 4, "12800": 1, "12801": 4, "12802": 7, "12803": 8, "12804": 1, "12805": 2, "12806": 1, "12807": 8, "12808": 1, "12809": 4, "12810": 3, "12811": 5, "12812": 4, "12813": 4, "12814": 4, "12815": 4, "12816": 9, "12817": 6, "12818": 1, "12819": 8, "12820": 5, "12821": 4, "12822": 1, "12823": 3, "12824": 4, "12825": 8, "12826": 4, "12827": 4, "12828": 4, "12829": 7, "12830": 4, "12831": 8, "12832": 1, "12833": 2, "12834": 7, "12835": 4, "12836": 8, "12837": 1, "12838": 4, "12839": 8, "12840": 1, "12841": 7, "12842": 4, "12843": 6, "12844": 8, "12845": 1, "12846": 7, "12847": 8, "12848": 4, "12849": 2, "12850": 8, "12851": 8, "12852": 7, "12853": 2, "12854": 4, "12855": 1, "12856": 8, "12857": 0, "12858": 8, "12859": 7, "12860": 4, "12861": 8, "12862": 4, "12863": 2, "12864": 4, "12865": 4, "12866": 2, "12867": 4, "12868": 2, "12869": 4, "12870": 1, "12871": 6, "12872": 4, "12873": 4, "12874": 4, "12875": 4, "12876": 8, "12877": 4, "12878": 4, "12879": 4, "12880": 2, "12881": 1, "12882": 8, "12883": 8, "12884": 7, "12885": 2, "12886": 4, "12887": 4, "12888": 1, "12889": 8, "12890": 0, "12891": 8, "12892": 2, "12893": 1, "12894": 4, "12895": 4, "12896": 2, "12897": 8, "12898": 0, "12899": 1, "12900": 4, "12901": 4, "12902": 8, "12903": 1, "12904": 4, "12905": 4, "12906": 1, "12907": 8, "12908": 8, "12909": 4, "12910": 9, "12911": 8, "12912": 7, "12913": 4, "12914": 8, "12915": 1, "12916": 2, "12917": 4, "12918": 8, "12919": 4, "12920": 8, "12921": 4, "12922": 4, "12923": 8, "12924": 1, "12925": 2, "12926": 4, "12927": 1, "12928": 2, "12929": 1, "12930": 2, "12931": 2, "12932": 4, "12933": 4, "12934": 1, "12935": 2, "12936": 4, "12937": 2, "12938": 1, "12939": 8, "12940": 4, "12941": 4, "12942": 3, "12943": 1, "12944": 1, "12945": 4, "12946": 1, "12947": 2, "12948": 7, "12949": 4, "12950": 0, "12951": 9, "12952": 4, "12953": 1, "12954": 6, "12955": 4, "12956": 4, "12957": 1, "12958": 2, "12959": 8, "12960": 4, "12961": 8, "12962": 8, "12963": 2, "12964": 4, "12965": 4, "12966": 2, "12967": 6, "12968": 4, "12969": 8, "12970": 2, "12971": 4, "12972": 9, "12973": 4, "12974": 7, "12975": 4, "12976": 1, "12977": 2, "12978": 1, "12979": 1, "12980": 8, "12981": 4, "12982": 2, "12983": 7, "12984": 6, "12985": 4, "12986": 4, "12987": 4, "12988": 8, "12989": 2, "12990": 1, "12991": 4, "12992": 7, "12993": 6, "12994": 4, "12995": 8, "12996": 0, "12997": 8, "12998": 4, "12999": 4, "13000": 1, "13001": 8, "13002": 6, "13003": 5, "13004": 2, "13005": 4, "13006": 8, "13007": 4, "13008": 5, "13009": 4, "13010": 4, "13011": 7, "13012": 7, "13013": 1, "13014": 7, "13015": 0, "13016": 1, "13017": 4, "13018": 4, "13019": 4, "13020": 4, "13021": 4, "13022": 2, "13023": 3, "13024": 4, "13025": 4, "13026": 4, "13027": 2, "13028": 4, "13029": 4, "13030": 8, "13031": 8, "13032": 9, "13033": 7, "13034": 4, "13035": 4, "13036": 4, "13037": 4, "13038": 2, "13039": 2, "13040": 4, "13041": 4, "13042": 7, "13043": 8, "13044": 4, "13045": 8, "13046": 1, "13047": 8, "13048": 8, "13049": 8, "13050": 1, "13051": 7, "13052": 4, "13053": 2, "13054": 3, "13055": 8, "13056": 1, "13057": 2, "13058": 8, "13059": 4, "13060": 7, "13061": 4, "13062": 4, "13063": 4, "13064": 2, "13065": 2, "13066": 4, "13067": 5, "13068": 8, "13069": 8, "13070": 2, "13071": 3, "13072": 1, "13073": 3, "13074": 0, "13075": 8, "13076": 3, "13077": 3, "13078": 1, "13079": 1, "13080": 7, "13081": 8, "13082": 8, "13083": 4, "13084": 4, "13085": 4, "13086": 4, "13087": 4, "13088": 4, "13089": 4, "13090": 4, "13091": 7, "13092": 0, "13093": 8, "13094": 4, "13095": 8, "13096": 4, "13097": 1, "13098": 3, "13099": 7, "13100": 1, "13101": 4, "13102": 2, "13103": 2, "13104": 1, "13105": 4, "13106": 4, "13107": 7, "13108": 0, "13109": 2, "13110": 8, "13111": 8, "13112": 9, "13113": 4, "13114": 4, "13115": 7, "13116": 4, "13117": 1, "13118": 7, "13119": 3, "13120": 7, "13121": 0, "13122": 4, "13123": 4, "13124": 4, "13125": 8, "13126": 4, "13127": 2, "13128": 9, "13129": 4, "13130": 7, "13131": 8, "13132": 4, "13133": 4, "13134": 3, "13135": 1, "13136": 2, "13137": 8, "13138": 4, "13139": 4, "13140": 7, "13141": 1, "13142": 9, "13143": 6, "13144": 2, "13145": 4, "13146": 4, "13147": 3, "13148": 1, "13149": 7, "13150": 4, "13151": 4, "13152": 4, "13153": 6, "13154": 2, "13155": 8, "13156": 4, "13157": 1, "13158": 1, "13159": 2, "13160": 4, "13161": 4, "13162": 1, "13163": 4, "13164": 4, "13165": 2, "13166": 8, "13167": 8, "13168": 8, "13169": 2, "13170": 1, "13171": 4, "13172": 8, "13173": 2, "13174": 4, "13175": 6, "13176": 8, "13177": 4, "13178": 4, "13179": 4, "13180": 4, "13181": 3, "13182": 4, "13183": 1, "13184": 1, "13185": 1, "13186": 4, "13187": 4, "13188": 4, "13189": 4, "13190": 4, "13191": 4, "13192": 4, "13193": 3, "13194": 1, "13195": 1, "13196": 4, "13197": 2, "13198": 4, "13199": 4, "13200": 5, "13201": 8, "13202": 1, "13203": 8, "13204": 2, "13205": 8, "13206": 3, "13207": 4, "13208": 7, "13209": 4, "13210": 7, "13211": 1, "13212": 9, "13213": 6, "13214": 9, "13215": 1, "13216": 4, "13217": 1, "13218": 0, "13219": 3, "13220": 4, "13221": 1, "13222": 4, "13223": 4, "13224": 4, "13225": 1, "13226": 1, "13227": 1, "13228": 8, "13229": 8, "13230": 4, "13231": 4, "13232": 4, "13233": 2, "13234": 1, "13235": 4, "13236": 8, "13237": 4, "13238": 4, "13239": 4, "13240": 1, "13241": 8, "13242": 1, "13243": 0, "13244": 4, "13245": 2, "13246": 1, "13247": 2, "13248": 8, "13249": 4, "13250": 4, "13251": 4, "13252": 4, "13253": 9, "13254": 3, "13255": 8, "13256": 4, "13257": 4, "13258": 4, "13259": 2, "13260": 5, "13261": 4, "13262": 8, "13263": 8, "13264": 7, "13265": 8, "13266": 4, "13267": 2, "13268": 7, "13269": 2, "13270": 1, "13271": 8, "13272": 8, "13273": 2, "13274": 4, "13275": 2, "13276": 7, "13277": 1, "13278": 7, "13279": 1, "13280": 5, "13281": 8, "13282": 1, "13283": 3, "13284": 3, "13285": 4, "13286": 1, "13287": 4, "13288": 1, "13289": 4, "13290": 8, "13291": 8, "13292": 1, "13293": 8, "13294": 4, "13295": 8, "13296": 4, "13297": 1, "13298": 0, "13299": 3, "13300": 8, "13301": 4, "13302": 8, "13303": 7, "13304": 6, "13305": 1, "13306": 1, "13307": 4, "13308": 0, "13309": 4, "13310": 3, "13311": 1, "13312": 8, "13313": 4, "13314": 4, "13315": 3, "13316": 7, "13317": 2, "13318": 8, "13319": 4, "13320": 4, "13321": 3, "13322": 3, "13323": 1, "13324": 4, "13325": 4, "13326": 4, "13327": 0, "13328": 1, "13329": 9, "13330": 2, "13331": 1, "13332": 1, "13333": 1, "13334": 4, "13335": 8, "13336": 8, "13337": 4, "13338": 2, "13339": 4, "13340": 8, "13341": 1, "13342": 4, "13343": 6, "13344": 2, "13345": 2, "13346": 4, "13347": 8, "13348": 8, "13349": 2, "13350": 4, "13351": 7, "13352": 2, "13353": 7, "13354": 4, "13355": 4, "13356": 7, "13357": 4, "13358": 1, "13359": 8, "13360": 8, "13361": 1, "13362": 4, "13363": 4, "13364": 8, "13365": 0, "13366": 4, "13367": 5, "13368": 1, "13369": 1, "13370": 4, "13371": 4, "13372": 2, "13373": 3, "13374": 1, "13375": 4, "13376": 6, "13377": 1, "13378": 1, "13379": 8, "13380": 8, "13381": 7, "13382": 9, "13383": 3, "13384": 7, "13385": 9, "13386": 8, "13387": 2, "13388": 3, "13389": 8, "13390": 2, "13391": 4, "13392": 1, "13393": 8, "13394": 4, "13395": 1, "13396": 1, "13397": 4, "13398": 8, "13399": 9, "13400": 4, "13401": 4, "13402": 8, "13403": 4, "13404": 7, "13405": 3, "13406": 2, "13407": 4, "13408": 8, "13409": 7, "13410": 8, "13411": 8, "13412": 0, "13413": 7, "13414": 8, "13415": 4, "13416": 1, "13417": 8, "13418": 1, "13419": 1, "13420": 4, "13421": 7, "13422": 4, "13423": 2, "13424": 4, "13425": 8, "13426": 2, "13427": 8, "13428": 8, "13429": 4, "13430": 2, "13431": 2, "13432": 4, "13433": 2, "13434": 2, "13435": 4, "13436": 3, "13437": 9, "13438": 4, "13439": 2, "13440": 8, "13441": 4, "13442": 4, "13443": 4, "13444": 4, "13445": 4, "13446": 2, "13447": 8, "13448": 6, "13449": 4, "13450": 2, "13451": 1, "13452": 1, "13453": 4, "13454": 1, "13455": 4, "13456": 3, "13457": 2, "13458": 7, "13459": 1, "13460": 2, "13461": 4, "13462": 3, "13463": 1, "13464": 4, "13465": 2, "13466": 8, "13467": 4, "13468": 4, "13469": 4, "13470": 1, "13471": 4, "13472": 6, "13473": 1, "13474": 4, "13475": 2, "13476": 4, "13477": 4, "13478": 8, "13479": 8, "13480": 1, "13481": 4, "13482": 4, "13483": 0, "13484": 1, "13485": 4, "13486": 1, "13487": 6, "13488": 8, "13489": 2, "13490": 4, "13491": 4, "13492": 8, "13493": 1, "13494": 4, "13495": 4, "13496": 4, "13497": 1, "13498": 4, "13499": 4, "13500": 4, "13501": 5, "13502": 4, "13503": 4, "13504": 4, "13505": 2, "13506": 7, "13507": 1, "13508": 8, "13509": 2, "13510": 0, "13511": 8, "13512": 2, "13513": 8, "13514": 9, "13515": 4, "13516": 8, "13517": 4, "13518": 7, "13519": 6, "13520": 2, "13521": 2, "13522": 9, "13523": 4, "13524": 6, "13525": 4, "13526": 3, "13527": 8, "13528": 4, "13529": 4, "13530": 1, "13531": 4, "13532": 4, "13533": 2, "13534": 5, "13535": 4, "13536": 8, "13537": 4, "13538": 1, "13539": 4, "13540": 4, "13541": 8, "13542": 2, "13543": 1, "13544": 3, "13545": 4, "13546": 4, "13547": 2, "13548": 8, "13549": 4, "13550": 8, "13551": 0, "13552": 2, "13553": 8, "13554": 3, "13555": 8, "13556": 8, "13557": 4, "13558": 5, "13559": 5, "13560": 9, "13561": 4, "13562": 8, "13563": 2, "13564": 4, "13565": 1, "13566": 2, "13567": 4, "13568": 8, "13569": 0, "13570": 8, "13571": 1, "13572": 8, "13573": 4, "13574": 2, "13575": 5, "13576": 3, "13577": 3, "13578": 8, "13579": 8, "13580": 4, "13581": 4, "13582": 6, "13583": 4, "13584": 6, "13585": 0, "13586": 6, "13587": 2, "13588": 8, "13589": 1, "13590": 4, "13591": 4, "13592": 1, "13593": 1, "13594": 4, "13595": 2, "13596": 4, "13597": 4, "13598": 4, "13599": 4, "13600": 4, "13601": 1, "13602": 4, "13603": 6, "13604": 6, "13605": 3, "13606": 4, "13607": 4, "13608": 1, "13609": 3, "13610": 4, "13611": 1, "13612": 4, "13613": 8, "13614": 4, "13615": 8, "13616": 9, "13617": 8, "13618": 1, "13619": 4, "13620": 4, "13621": 1, "13622": 4, "13623": 4, "13624": 6, "13625": 6, "13626": 4, "13627": 3, "13628": 2, "13629": 1, "13630": 4, "13631": 4, "13632": 8, "13633": 7, "13634": 7, "13635": 4, "13636": 4, "13637": 8, "13638": 4, "13639": 4, "13640": 2, "13641": 0, "13642": 7, "13643": 4, "13644": 4, "13645": 4, "13646": 4, "13647": 1, "13648": 2, "13649": 8, "13650": 4, "13651": 4, "13652": 1, "13653": 0, "13654": 6, "13655": 8, "13656": 4, "13657": 1, "13658": 1, "13659": 0, "13660": 2, "13661": 3, "13662": 4, "13663": 0, "13664": 2, "13665": 4, "13666": 7, "13667": 4, "13668": 9, "13669": 2, "13670": 8, "13671": 8, "13672": 8, "13673": 4, "13674": 4, "13675": 4, "13676": 1, "13677": 3, "13678": 2, "13679": 1, "13680": 8, "13681": 8, "13682": 3, "13683": 8, "13684": 1, "13685": 8, "13686": 4, "13687": 0, "13688": 2, "13689": 4, "13690": 1, "13691": 3, "13692": 4, "13693": 1, "13694": 1, "13695": 4, "13696": 8, "13697": 8, "13698": 7, "13699": 4, "13700": 7, "13701": 4, "13702": 3, "13703": 2, "13704": 9, "13705": 1, "13706": 1, "13707": 4, "13708": 4, "13709": 0, "13710": 1, "13711": 3, "13712": 4, "13713": 1, "13714": 4, "13715": 0, "13716": 4, "13717": 4, "13718": 4, "13719": 4, "13720": 1, "13721": 1, "13722": 6, "13723": 8, "13724": 4, "13725": 4, "13726": 0, "13727": 4, "13728": 4, "13729": 4, "13730": 4, "13731": 8, "13732": 4, "13733": 1, "13734": 4, "13735": 1, "13736": 4, "13737": 4, "13738": 4, "13739": 4, "13740": 8, "13741": 4, "13742": 7, "13743": 2, "13744": 4, "13745": 4, "13746": 2, "13747": 1, "13748": 4, "13749": 8, "13750": 4, "13751": 0} -------------------------------------------------------------------------------- /data/amazon/amazon-feats.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yifan-h/CS-GNN/8dd5a30fe3084a375f01acf5a793dbf522cf2208/data/amazon/amazon-feats.npy -------------------------------------------------------------------------------- /data/amazon/amazon-feats_t.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yifan-h/CS-GNN/8dd5a30fe3084a375f01acf5a793dbf522cf2208/data/amazon/amazon-feats_t.npy -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | torch==1.0.1 2 | torchvision==0.2.2 3 | numpy==1.22.0 4 | scikit-learn==0.20.3 5 | tqdm==4.32.2 6 | networkx==2.2 7 | pygsp==0.5.1 8 | pandas==0.24.2 -------------------------------------------------------------------------------- /smoothness/smoothness.py: -------------------------------------------------------------------------------- 1 | import json 2 | import pygsp 3 | import numpy as np 4 | import scipy as sp 5 | import networkx as nx 6 | from networkx.readwrite import json_graph 7 | from sklearn import preprocessing 8 | 9 | def convert_ndarray(x): 10 | y = list(range(len(x))) 11 | for k, v in x.items(): 12 | y[int(k)] = v 13 | return np.array(y) 14 | 15 | def convert_list(x): 16 | c = [] 17 | for k, v in x.items(): 18 | if v not in c: 19 | c.append(v) 20 | new_x = {} 21 | for k, v in x.items(): 22 | v_new = [0 for i in range(len(c))] 23 | v_new[c.index (v)] = 1 24 | new_x[k] = v_new 25 | return new_x 26 | 27 | def label_to_vector(x): 28 | new_label = [] 29 | for i in range(x.shape[0]): 30 | new_label.append(np.where(x[i]==1)) 31 | return np.array(new_label) 32 | 33 | def feature_broadcast(feats, G): 34 | new_feats = np.zeros(feats.shape) 35 | for i in range(feats.shape[0]): 36 | neighbors = list(G.neighbors(i)) 37 | if len(neighbors) == 0: 38 | new_feats[i] = feats[i] 39 | else: 40 | surrounding = np.zeros(feats.shape[1]) 41 | for j in neighbors: 42 | surrounding += feats[j] 43 | new_feats[i] = 0.5*feats[i]+0.5*surrounding/len(neighbors) 44 | 45 | return new_feats 46 | 47 | def label_broadcast(G, labels, rate): 48 | remove_edges=[] 49 | for src, dst in G.edges(): 50 | if labels[src] != labels[dst]: 51 | if np.random.random() <= rate: 52 | remove_edges.append((src, dst)) 53 | for src, dst in remove_edges: 54 | G.remove_edge(src, dst) 55 | print('remove {} edges'.format(len(remove_edges))) 56 | return G 57 | 58 | def remove_unlabeled(G): 59 | nids = set() 60 | for nid in G.nodes(): 61 | if G.node[nid]['test'] and G.node[nid]['val']: 62 | nids.add(nid) 63 | for nid in nids: 64 | G.remove_node(nid) 65 | return G 66 | 67 | def compute_feature_smoothness(path, times=0): 68 | G_org = json_graph.node_link_graph(json.load(open(path+'-G.json'))) 69 | # G_org = remove_unlabeled(G_org) 70 | if nx.is_directed(G_org): 71 | G_org = G_org.to_undirected() 72 | edge_num = G_org.number_of_edges() 73 | G = pygsp.graphs.Graph(nx.adjacency_matrix(G_org)) 74 | feats = np.load(path+'-feats.npy') 75 | # smooth 76 | for i in range(times): 77 | feats = feature_broadcast(feats, G_org) 78 | np.save(path+'-feats_'+str(times)+'.npy', feats) 79 | 80 | min_max_scaler = preprocessing.MinMaxScaler() 81 | feats = min_max_scaler.fit_transform(feats) 82 | smoothness = np.zeros(feats.shape[1]) 83 | for src, dst in G_org.edges(): 84 | smoothness += (feats[src]-feats[dst])*(feats[src]-feats[dst]) 85 | smoothness = np.linalg.norm(smoothness,ord=1) 86 | print('The smoothness is: ', 2*smoothness/edge_num/feats.shape[1]) 87 | 88 | def compute_label_smoothness(path, rate=0.): 89 | G_org = json_graph.node_link_graph(json.load(open(path+'-G.json'))) 90 | # G_org = remove_unlabeled(G_org) 91 | if nx.is_directed(G_org): 92 | G_org = G_org.to_undirected() 93 | class_map = json.load(open(path+'-class_map.json')) 94 | for k, v in class_map.items(): 95 | if type(v) != list: 96 | class_map = convert_list(class_map) 97 | break 98 | labels = convert_ndarray(class_map) 99 | labels = np.squeeze(label_to_vector(labels)) 100 | 101 | # smooth 102 | G_org = label_broadcast(G_org, labels, rate) 103 | with open(path+'-G_'+str(rate)+'.json', 'w') as f: 104 | f.write(json.dumps(json_graph.node_link_data(G_org))) 105 | 106 | edge_num = G_org.number_of_edges() 107 | G = pygsp.graphs.Graph(nx.adjacency_matrix(G_org)) 108 | smoothness = 0 109 | for src, dst in G_org.edges(): 110 | if labels[src] != labels[dst]: 111 | smoothness += 1 112 | print('The smoothness is: ', 2*smoothness/edge_num) 113 | 114 | if __name__ == '__main__': 115 | # compute_feature_smoothness('../as/as') 116 | # compute_label_smoothness('../as/as') 117 | -------------------------------------------------------------------------------- /src/encode.py: -------------------------------------------------------------------------------- 1 | # DISCLAIMER: 2 | # Parts of this code file are derived from 3 | # https://github.com/benedekrozemberczki/GraphWaveMachine 4 | # which is under an identical MIT license 5 | 6 | import networkx as nx 7 | import numpy as np 8 | import pygsp 9 | import random 10 | import pandas as pd 11 | from pydoc import locate 12 | import argparse 13 | 14 | class WaveletMachine: 15 | """ 16 | The class is a blue print for the procedure described in "Learning Structural Node Embeddings Via Diffusion Wavelets". 17 | """ 18 | def __init__(self, G, node_id, sample_number): 19 | """ 20 | This method 21 | :param G: Input networkx graph object. 22 | """ 23 | self.approximation = 100 24 | self.step_size = 20 25 | self.heat_coefficient = 1000.0 26 | self.node_label_type = str 27 | self.index=G.nodes() 28 | self.G = pygsp.graphs.Graph(nx.adjacency_matrix(G)) 29 | self.number_of_nodes = len(nx.nodes(G)) 30 | self.node_id = node_id 31 | self.sample_number = sample_number 32 | self.steps = [x*self.step_size for x in range(self.sample_number)] 33 | 34 | def approximate_wavelet_calculator(self): 35 | """ 36 | Given the Chebyshev polynomial, graph the approximate embedding is calculated. 37 | """ 38 | self.real_and_imaginary = [] 39 | for node in range(0,self.number_of_nodes): 40 | impulse = np.zeros((self.number_of_nodes)) 41 | if node in self.node_id: 42 | impulse[node] = 1 43 | wavelet_coefficients = pygsp.filters.approximations.cheby_op(self.G, self.chebyshev, impulse) 44 | self.real_and_imaginary.append([np.mean(np.exp(wavelet_coefficients*1*step*1j)) for step in self.steps]) 45 | else: 46 | self.real_and_imaginary.append([0. for step in self.steps]) 47 | self.real_and_imaginary = np.array(self.real_and_imaginary) 48 | 49 | 50 | def approximate_structural_wavelet_embedding(self): 51 | """ 52 | Estimating the largest eigenvalue, setting up the heat filter and the Cheybshev polynomial. Using the approximate wavelet calculator method. 53 | """ 54 | self.G.estimate_lmax() 55 | self.heat_filter = pygsp.filters.Heat(self.G, tau=[self.heat_coefficient]) 56 | self.chebyshev = pygsp.filters.approximations.compute_cheby_coeff(self.heat_filter, m=self.approximation) 57 | self.approximate_wavelet_calculator() 58 | 59 | def transform_and_save_embedding(self): 60 | """ 61 | Transforming the numpy array with real and imaginary values to a pandas dataframe and saving it as a csv. 62 | """ 63 | self.approximate_structural_wavelet_embedding() 64 | self.real_and_imaginary = np.concatenate([self.real_and_imaginary.real, self.real_and_imaginary.imag], axis=1) 65 | columns_1 = ["reals_" + str(x) for x in range(self.sample_number)] 66 | columns_2 = ["imags_" + str(x) for x in range(self.sample_number)] 67 | columns = columns_1 + columns_2 68 | self.real_and_imaginary = pd.DataFrame(self.real_and_imaginary, columns = columns) 69 | self.real_and_imaginary.index = self.index 70 | self.real_and_imaginary.index = self.real_and_imaginary.index.astype(locate(self.node_label_type)) 71 | self.real_and_imaginary = self.real_and_imaginary.sort_index() 72 | 73 | return self.real_and_imaginary.values 74 | 75 | def get_coding_feats(G, node_id, sample_number): 76 | node_id = set(node_id) 77 | total_node_id = sorted(G) 78 | G = nx.relabel.convert_node_labels_to_integers(G, ordering='sorted') 79 | new_node_id = [] 80 | for i in range(len(total_node_id)): 81 | if total_node_id[i] in node_id: 82 | new_node_id.append(i) 83 | machine = WaveletMachine(G, new_node_id, sample_number) 84 | return machine.transform_and_save_embedding() 85 | -------------------------------------------------------------------------------- /src/minibatch.py: -------------------------------------------------------------------------------- 1 | import os 2 | import random 3 | import numpy as np 4 | from dgl import DGLGraph 5 | import networkx as nx 6 | from tqdm import tqdm 7 | from encode import get_coding_feats 8 | 9 | seed = 123 10 | random.seed(seed) 11 | np.random.seed(seed) 12 | 13 | class NodeMinibatchIterator(object): 14 | 15 | def __init__(self, g, num_layers, batch_size, 16 | nodes_list, feats, feats_t, 17 | labels, concat, generate_tf, 18 | prefix, feat_t_d): 19 | self.g = g 20 | self.num_layers = num_layers 21 | self.batch_size = batch_size 22 | self.nodes_list = nodes_list 23 | self.feats = feats 24 | self.labels = labels 25 | self.concat = concat 26 | self.generate_tf = generate_tf 27 | self.prefix = prefix 28 | self.feat_t_d = feat_t_d 29 | if not generate_tf: 30 | self.feats_t = feats_t 31 | else: 32 | if os.path.exists(prefix + '-feats_tmp.npy'): 33 | self.feats_t = np.load(prefix + '-feats_tmp.npy') 34 | else: 35 | self.feats_t = np.zeros((feats.shape[0], 2*feat_t_d)) 36 | 37 | def get_batchs_nid(self): 38 | random.shuffle(self.nodes_list) 39 | batchs_nid = [] 40 | for i in range(int(len(self.nodes_list)/self.batch_size)): 41 | batchs_nid.append(self.nodes_list[i*self.batch_size:(i+1)*self.batch_size]) 42 | if len(self.nodes_list) % self.batch_size != 0: 43 | batchs_nid.append(self.nodes_list[-(len(self.nodes_list)%self.batch_size):]) 44 | return batchs_nid 45 | 46 | def get_mask(self, total_index, labeled_index): 47 | labeled_index = set(labeled_index) 48 | mask = [] 49 | for i in range(len(total_index)): 50 | if total_index[i] in labeled_index: 51 | mask.append(i) 52 | return np.array(mask) 53 | 54 | def get_subgraphs(self): 55 | batchs_nid = self.get_batchs_nid() 56 | subgraphs = [] 57 | subfeats = [] 58 | subfeats_t = [] 59 | sublabels = [] 60 | submasks = [] 61 | for batch_nid in tqdm(batchs_nid): 62 | # get subgraph with unlabeled nodes 63 | subgraph_nodes = set() 64 | for n_id in batch_nid: 65 | subgraph_node = set() 66 | subgraph_node.add(n_id) 67 | for i in range(self.num_layers): 68 | for node in subgraph_node: 69 | subgraph_node = subgraph_node | set(self.g.neighbors(node)) 70 | subgraph_nodes = subgraph_nodes | subgraph_node 71 | subgraph = self.g.subgraph(subgraph_nodes) 72 | # get labels & feats 73 | sublabels.append(self.labels[sorted(subgraph)]) 74 | subfeats.append(self.feats[sorted(subgraph)]) 75 | if self.generate_tf: 76 | subfeats_t.append(get_coding_feats(subgraph, batch_nid, self.feat_t_d)) 77 | batch_nid_s = sorted(batch_nid) 78 | count = 0 79 | for i in range(subfeats_t[-1].shape[0]): 80 | if subfeats_t[-1][i].sum() != 0: 81 | self.feats_t[batch_nid_s[count]] = subfeats_t[-1][i] 82 | count += 1 83 | else: 84 | subfeats_t.append(self.feats_t[sorted(subgraph)]) 85 | # get mask 86 | submasks.append(self.get_mask(sorted(subgraph), batch_nid)) 87 | subgraph = DGLGraph(nx.relabel.convert_node_labels_to_integers(subgraph, ordering='sorted')) 88 | if not self.concat: 89 | subgraph.add_edges(subgraph.nodes(), subgraph.nodes()) 90 | subgraphs.append(subgraph) 91 | # save feats_t 92 | if self.generate_tf: 93 | if 0 in self.feats_t.sum(1): 94 | np.save(self.prefix + '-feats_tmp.npy', self.feats_t) 95 | else: 96 | np.save(self.prefix + '-feats_t.npy', self.feats_t) 97 | os.remove(self.prefix + '-feats_tmp.npy') 98 | print('Done with topology feats generation and save!') 99 | 100 | return subgraphs, subfeats, subfeats_t, sublabels, submasks 101 | -------------------------------------------------------------------------------- /src/models.py: -------------------------------------------------------------------------------- 1 | import math 2 | import torch 3 | import torch.nn as nn 4 | import torch.nn.functional as F 5 | import dgl.function as fn 6 | from dgl.nn.pytorch import edge_softmax 7 | 8 | class GraphTopoAttention(nn.Module): 9 | def __init__(self, 10 | g, 11 | in_dim, 12 | topo_dim, 13 | out_dim, 14 | num_heads, 15 | feat_drop, 16 | attn_drop, 17 | residual=False, 18 | concat=True, 19 | last_layer=False): 20 | super(GraphTopoAttention, self).__init__() 21 | self.g = g 22 | self.num_heads = num_heads 23 | if feat_drop: 24 | self.feat_drop = nn.Dropout(feat_drop) 25 | else: 26 | self.feat_drop = lambda x : x 27 | if attn_drop: 28 | self.attn_drop = nn.Dropout(attn_drop) 29 | else: 30 | self.attn_drop = lambda x : x 31 | # weight matrix Wl for leverage property 32 | if last_layer: 33 | self.fl = nn.Linear(in_dim+topo_dim, out_dim, bias=False) 34 | else: 35 | self.fl = nn.Linear(in_dim, num_heads*out_dim, bias=False) 36 | # weight matrix Wc for aggregation context 37 | self.fc = nn.Parameter(torch.Tensor(size=(in_dim+topo_dim, num_heads*out_dim))) 38 | # weight matrix Wq for neighbors' querying 39 | self.fq = nn.Parameter(torch.Tensor(size=(in_dim, num_heads*out_dim))) 40 | nn.init.xavier_normal_(self.fl.weight.data) 41 | nn.init.constant_(self.fc.data, 10e-3) 42 | nn.init.constant_(self.fq.data, 10e-3) 43 | self.attn_activation = nn.ELU() 44 | self.softmax = edge_softmax 45 | self.residual = residual 46 | if residual: 47 | if in_dim != out_dim: 48 | self.res_fl = nn.Linear(in_dim, num_heads * out_dim, bias=False) 49 | nn.init.xavier_normal_(self.res_fl.weight.data) 50 | else: 51 | self.res_fl = None 52 | self.concat = concat 53 | self.last_layer = last_layer 54 | 55 | def forward(self, inputs, topo): 56 | # prepare 57 | h, t = self.feat_drop(inputs), self.feat_drop(topo) # NxD, N*T 58 | if not self.last_layer: 59 | ft = self.fl(h).reshape((h.shape[0], self.num_heads, -1)) # NxHxD' 60 | ft_c = torch.matmul(torch.cat((h, t), 1), self.fc).reshape((h.shape[0], self.num_heads, -1)) # NxHxD' 61 | ft_q = torch.matmul(h, self.fq).reshape((h.shape[0], self.num_heads, -1)) # NxHxD' 62 | self.g.ndata.update({'ft' : ft, 'ft_c' : ft_c, 'ft_q' : ft_q}) 63 | self.g.apply_edges(self.edge_attention) 64 | self.edge_softmax() 65 | 66 | l_s = int(0.713*self.g.edata['a_drop'].shape[0]) 67 | topk, _ = torch.topk(self.g.edata['a_drop'], l_s, largest=False, dim=0) 68 | thd = torch.squeeze(topk[-1]) 69 | self.g.edata['a_drop'] = self.g.edata['a_drop'].squeeze() 70 | self.g.edata['a_drop'] = torch.where(self.g.edata['a_drop']-thd<0, self.g.edata['a_drop'].new([0.0]), self.g.edata['a_drop']) 71 | attn_ratio = torch.div((self.g.edata['a_drop'].sum(0).squeeze()+topk.sum(0).squeeze()), self.g.edata['a_drop'].sum(0).squeeze()) 72 | self.g.edata['a_drop'] = self.g.edata['a_drop'] * attn_ratio 73 | self.g.edata['a_drop'] = self.g.edata['a_drop'].unsqueeze(-1) 74 | 75 | self.g.update_all(fn.src_mul_edge('ft', 'a_drop', 'ft'), fn.sum('ft', 'ft')) 76 | ret = self.g.ndata['ft'] 77 | if self.residual: 78 | if self.res_fl is not None: 79 | resval = self.res_fl(h).reshape((h.shape[0], self.num_heads, -1)) # NxHxD' 80 | else: 81 | resval = torch.unsqueeze(h, 1) # Nx1xD' 82 | ret = resval + ret 83 | ret = torch.cat((ret.flatten(1), ft.mean(1).squeeze()), 1) if self.concat else ret.flatten(1) 84 | else: 85 | ret = self.fl(torch.cat((h, t), 1)) 86 | return ret 87 | 88 | def edge_attention(self, edges): 89 | c = edges.dst['ft_c'] 90 | q = edges.src['ft_q'] - c 91 | a = (q * c).sum(-1).unsqueeze(-1) 92 | return {'a': self.attn_activation(a)} 93 | 94 | def edge_softmax(self): 95 | attention = self.softmax(self.g, self.g.edata.pop('a')) 96 | self.g.edata['a_drop'] = self.attn_drop(attention) 97 | 98 | class GTN(nn.Module): 99 | def __init__(self, 100 | g, 101 | num_layers, 102 | feats_d, 103 | feats_t_d, 104 | num_hidden, 105 | num_classes, 106 | heads, 107 | activation, 108 | feat_drop, 109 | attn_drop, 110 | residual, 111 | concat): 112 | super(GTN, self).__init__() 113 | self.g = g 114 | self.num_layers = num_layers 115 | self.gtn_layers = nn.ModuleList() 116 | self.activation = activation 117 | 118 | # input projection (no residual) 119 | self.gtn_layers.append(GraphTopoAttention(g, feats_d, feats_t_d, num_hidden, heads[0], 120 | feat_drop, attn_drop, False, concat)) 121 | # hidden layers 122 | fix_d = concat*(feats_d) 123 | for l in range(1, num_layers+1): 124 | # due to multi-head, the in_dim = num_hidden * num_heads 125 | self.gtn_layers.append(GraphTopoAttention(g, num_hidden*(heads[l-1]+1*concat), feats_t_d, 126 | num_hidden, heads[l], feat_drop, attn_drop, residual, concat)) 127 | # output projection 128 | self.gtn_layers.append(GraphTopoAttention(g, num_hidden*(heads[l-1]+1*concat), feats_t_d, 129 | num_classes, heads[-1], feat_drop, attn_drop, residual, concat, True)) 130 | 131 | def forward(self, inputs, topo): 132 | h, t = inputs, F.normalize(topo) 133 | for l in range(self.num_layers+1): 134 | h = self.gtn_layers[l](h, t) 135 | h = self.activation(h) 136 | # output projection 137 | logits = self.gtn_layers[-1](h, t) 138 | return logits 139 | 140 | -------------------------------------------------------------------------------- /src/train.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn.functional as F 3 | import random 4 | import numpy as np 5 | import time 6 | import dgl 7 | from dgl import DGLGraph 8 | import argparse 9 | from sklearn.metrics import f1_score 10 | from torch.utils.data import DataLoader 11 | from utils import load_data 12 | from models import GTN 13 | 14 | seed = 123 15 | random.seed(seed) 16 | np.random.seed(seed) 17 | torch.manual_seed(seed) 18 | if torch.cuda.is_available(): 19 | torch.cuda.manual_seed(seed) 20 | torch.backends.cudnn.deterministic = True 21 | 22 | def evaluate(g, feats, feats_t, labels, mask, model, loss_fcn, device): 23 | with torch.no_grad(): 24 | model.eval() 25 | model.g = g 26 | for layer in model.gtn_layers: 27 | layer.g = g 28 | output = model(feats.float(), feats_t.float()) 29 | loss = loss_fcn(output[mask], labels[mask]) 30 | # predict = np.where(output[mask].data.cpu().numpy() >= 0.5, 1, 0) 31 | predict = np.argmax(output[mask].data.cpu().numpy(), axis=1) 32 | true = np.argmax(labels[mask].data.cpu().numpy(), axis=1) 33 | score = f1_score(true, predict, average='micro') 34 | return score, loss.item() 35 | 36 | def train_main(args): 37 | # cpu or gpu 38 | if args.gpu < 0: 39 | device = torch.device("cpu") 40 | else: 41 | device = torch.device("cuda:" + str(args.gpu)) 42 | 43 | # create the dataset 44 | g, train_subgraphs, train_subfeats, train_subfeats_t, train_sublabels, train_submasks, val_subgraphs, val_subfeats, \ 45 | val_subfeats_t, val_sublabels, val_submasks, test_subgraphs, test_subfeats, test_subfeats_t, test_sublabels, \ 46 | test_submasks = load_data(args.prefix, args.num_layers, args.batch_size, args.concat, args.sample_number) 47 | 48 | # define the model and optimizer 49 | heads = ([args.num_heads] * (args.num_layers + 1)) 50 | model = GTN(g, 51 | args.num_layers, 52 | train_subfeats[0].shape[1], 53 | args.sample_number*2, 54 | args.num_hidden, 55 | train_sublabels[0].shape[1], 56 | heads, 57 | F.elu, 58 | args.in_drop, 59 | args.attn_drop, 60 | args.residual, 61 | args.concat) 62 | model = model.to(device) 63 | attn_params_name = ['fc', 'fq'] 64 | attn_params = [] 65 | for p in attn_params_name: 66 | attn_params = attn_params + list(filter(lambda kv: p in kv[0], model.named_parameters())) 67 | base_params = [param[1] for param in model.named_parameters() if param not in attn_params] 68 | attn_params = [param[1] for param in attn_params] 69 | optimizer = torch.optim.Adam([{'params': base_params}, 70 | {'params': attn_params, 'lr': args.lr/10}], 71 | lr=args.lr, weight_decay=args.weight_decay) 72 | 73 | loss_fcn = torch.nn.BCEWithLogitsLoss() 74 | 75 | # start training 76 | best_score, best_loss, cur_step = 0, 1000, 0 77 | for epoch in range(args.epochs): 78 | model.train() 79 | loss_list = [] 80 | # shuffle 81 | idx = [i for i in range(len(train_subgraphs))] 82 | random.shuffle(idx) 83 | for i in range(len(train_subgraphs)): 84 | feats = torch.FloatTensor(train_subfeats[idx[i]]).to(device) 85 | feats_t = torch.FloatTensor(train_subfeats_t[idx[i]]).to(device) 86 | labels = torch.FloatTensor(train_sublabels[idx[i]]).to(device) 87 | model.g = train_subgraphs[idx[i]] 88 | for layer in model.gtn_layers: 89 | layer.g = train_subgraphs[idx[i]] 90 | output = model(feats.float(), feats_t.float()) 91 | loss = loss_fcn(output[train_submasks[idx[i]]], labels[train_submasks[idx[i]]]) 92 | optimizer.zero_grad() 93 | loss.backward() 94 | optimizer.step() 95 | loss_list.append(loss) 96 | # validation 97 | score_list = [] 98 | val_loss_list = [] 99 | for i in range(len(val_subgraphs)): 100 | feats = torch.FloatTensor(val_subfeats[i]).to(device) 101 | feats_t = torch.FloatTensor(val_subfeats_t[i]).to(device) 102 | labels = torch.FloatTensor(val_sublabels[i]).to(device) 103 | score, val_loss = evaluate(val_subgraphs[i], 104 | feats, 105 | feats_t, 106 | labels, 107 | val_submasks[i], 108 | model, 109 | loss_fcn, 110 | device) 111 | score_list.append(score) 112 | val_loss_list.append(val_loss) 113 | 114 | # early stop 115 | if sum(score_list)/len(score_list) > best_score: #or sum(val_loss_list)/len(val_loss_list) < best_loss: 116 | print("Epoch {:05d} |Train Loss: {:.4f} | Val Loss: {:.4f} | F1-Score: {:.4f} | save".format(epoch + 1, 117 | sum(loss_list)/len(loss_list), 118 | sum(val_loss_list)/len(val_loss_list), 119 | sum(score_list)/len(score_list))) 120 | torch.save(model.state_dict(), args.prefix.split('/')[-1]+'_best.pkl') 121 | best_score = sum(score_list)/len(score_list) 122 | best_loss = sum(val_loss_list)/len(val_loss_list) 123 | cur_step = 0 124 | optimizer.param_groups[0]['lr'] = args.lr 125 | optimizer.param_groups[-1]['lr'] = args.lr/10 126 | else: 127 | print("Epoch {:05d} |Train Loss: {:.4f} | Val Loss: {:.4f} | F1-Score: {:.4f} ".format(epoch + 1, 128 | sum(loss_list)/len(loss_list), 129 | sum(val_loss_list)/len(val_loss_list), 130 | sum(score_list)/len(score_list))) 131 | cur_step += 1 132 | if cur_step == int(args.patience/2): 133 | optimizer.param_groups[0]['lr'] = args.lr 134 | optimizer.param_groups[-1]['lr'] = args.lr 135 | if cur_step > args.patience: 136 | break 137 | # test 138 | model.load_state_dict(torch.load(args.prefix.split('/')[-1]+'_best.pkl')) 139 | test_score_list = [] 140 | test_loss_list = [] 141 | for i in range(len(test_subgraphs)): 142 | feats = torch.FloatTensor(test_subfeats[i]).to(device) 143 | feats_t = torch.FloatTensor(test_subfeats_t[i]).to(device) 144 | labels = torch.FloatTensor(test_sublabels[i]).to(device) 145 | test_score, test_loss = evaluate(test_subgraphs[i], 146 | feats, 147 | feats_t, 148 | labels, 149 | test_submasks[i], 150 | model, 151 | loss_fcn, 152 | device) 153 | test_score_list.append(test_score) 154 | test_loss_list.append(test_loss) 155 | print("The test Loss: {:.4f}, F1-Score: {:.4f}".format(sum(test_loss_list)/len(test_loss_list), 156 | sum(test_score_list)/len(test_score_list))) 157 | 158 | if __name__ == '__main__': 159 | parser = argparse.ArgumentParser(description='GTN') 160 | parser.add_argument("--gpu", type=int, default=0, 161 | help="which GPU to use. Set -1 to use CPU.") 162 | parser.add_argument("--epochs", type=int, default=1000, 163 | help="number of training epochs") 164 | parser.add_argument("--num-heads", type=int, default=1, 165 | help="number of hidden attention heads") 166 | parser.add_argument("--num-layers", type=int, default=2, 167 | help="number of hidden layers") 168 | parser.add_argument("--num-hidden", type=int, default=32, 169 | help="number of hidden units") 170 | parser.add_argument("--residual", action="store_true", default=True, 171 | help="use residual connection") 172 | parser.add_argument("--concat", action="store_true", default=True, 173 | help="concat neighbors with self") 174 | parser.add_argument("--in-drop", type=float, default=0.3, 175 | help="input feature dropout") 176 | parser.add_argument("--attn-drop", type=float, default=0.3, 177 | help="attention dropout") 178 | parser.add_argument("--lr", type=float, default=0.01, 179 | help="learning rate") 180 | parser.add_argument('--weight-decay', type=float, default=0., 181 | help="weight decay") 182 | parser.add_argument('--batch_size', type=int, default=512, 183 | help="batch size used for training, validation and test") 184 | parser.add_argument('--patience', type=int, default=100, 185 | help="used for early stop") 186 | parser.add_argument("--sample-number", type=int, default=32, 187 | help="characteristic function sample number, delete feats_t.npy before change") 188 | parser.add_argument('--prefix', type=str, default='./data/amazon/amazon', 189 | help="which dataset to use") 190 | args = parser.parse_args() 191 | print(args) 192 | train_main(args) 193 | -------------------------------------------------------------------------------- /src/utils.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import time 3 | import json 4 | import collections 5 | import os 6 | import concurrent.futures as futures 7 | import sklearn 8 | import sklearn.cluster as sklc 9 | from sklearn.preprocessing import StandardScaler 10 | from tqdm import tqdm 11 | import networkx as nx 12 | from networkx.readwrite import json_graph 13 | from minibatch import NodeMinibatchIterator 14 | from encode import get_coding_feats 15 | 16 | seed = 123 17 | np.random.seed(seed) 18 | 19 | def process_graph(G): 20 | # Remove all nodes that do not have val/test annotations 21 | broken_count = 0 22 | for node in G.nodes(): 23 | if not 'val' in G.node[node] or not 'test' in G.node[node]: 24 | G.remove_node(node) 25 | broken_count += 1 26 | if broken_count > 0: 27 | print("Removed {:d} nodes that lacked proper annotations.".format(broken_count)) 28 | return G 29 | 30 | def loadG(x, d): 31 | return json_graph.node_link_graph(json.load(open(x+'-G.json')), d) 32 | 33 | def loadjson(x): 34 | return json.load(open(x)) 35 | 36 | def convert_dict(x, conv, lconv=int): 37 | return {conv(k):lconv(v) for k, v in x.items()} 38 | 39 | def convert_ndarray(x): 40 | y = list(range(len(x))) 41 | for k, v in x.items(): 42 | y[int(k)] = v 43 | return np.array(y) 44 | 45 | def convert_list(x): 46 | c = [] 47 | for k, v in x.items(): 48 | if v not in c: 49 | c.append(v) 50 | new_x = {} 51 | for k, v in x.items(): 52 | v_new = [0 for i in range(len(c))] 53 | v_new[c.index (v)] = 1 54 | new_x[k] = v_new 55 | return new_x 56 | 57 | def check_rm(neighbors_set, unlabeled_nodes): 58 | for node in neighbors_set: 59 | if node not in unlabeled_nodes: 60 | return False 61 | return True 62 | 63 | def rm_useless(G, feats, class_map, unlabeled_nodes, num_layers): 64 | # find useless nodes 65 | print('start to check and remove {} unlabeled nodes'.format(len(unlabeled_nodes))) 66 | unlabeled_nodes = set(unlabeled_nodes) 67 | rm_nodes = [] 68 | for n_id in tqdm(unlabeled_nodes): 69 | neighbors_set = set() 70 | neighbors_set.add(n_id) 71 | for _ in range(num_layers): 72 | for node in neighbors_set: 73 | if nx.is_directed(G): 74 | neighbors_set = neighbors_set | set(G.neighbors(node)) | set(G.predecessors(node)) 75 | else: 76 | neighbors_set = neighbors_set | set(G.neighbors(node)) 77 | if check_rm(neighbors_set, unlabeled_nodes): 78 | rm_nodes.append(n_id) 79 | # rm nodes 80 | if len(rm_nodes): 81 | for node in rm_nodes: 82 | G.remove_node(node) 83 | G_new = nx.relabel.convert_node_labels_to_integers(G, ordering='sorted') 84 | feats = np.delete(feats, rm_nodes, 0) 85 | class_map = np.delete(class_map, rm_nodes, 0) 86 | print('remove {} '.format(len(rm_nodes)), 'useless unlabeled nodes') 87 | return G_new, feats, class_map 88 | 89 | 90 | 91 | def load_data(prefix, num_layers=1, batch_size=1, concat=True, sample_number=50, directed=False): 92 | with futures.ProcessPoolExecutor(max_workers=5) as executor: 93 | # 1. read data 94 | start_time = time.time() 95 | futs = [executor.submit(loadG, prefix, directed), 96 | executor.submit(loadjson, prefix+'-class_map.json'),] 97 | if os.path.exists(prefix + '-feats.npy'): 98 | feats = np.load(prefix + '-feats.npy') 99 | else: 100 | feats = None 101 | 102 | # 2. process preparation 103 | class_map = futs[1].result() 104 | if isinstance(list(class_map.values())[0], list): 105 | lab_conversion = lambda n : n 106 | else: 107 | lab_conversion = lambda n : int(n) 108 | G = futs[0].result() 109 | 110 | # 3. process data 111 | start_time = time.time() 112 | if isinstance(G.nodes()[0], int): 113 | conversion = lambda n : int(n) 114 | else: 115 | conversion = lambda n : n 116 | fut = executor.submit(process_graph, G) 117 | class_map = convert_dict(class_map, conversion, lab_conversion) 118 | # if single label 119 | for k, v in class_map.items(): 120 | if type(v) != list: 121 | class_map = convert_list(class_map) 122 | break 123 | G = fut.result() 124 | 125 | # 4. division 126 | start_time = time.time() 127 | train_nodes = [n for n in G.nodes() if not G.node[n]['test'] and not G.node[n]['val']] 128 | val_nodes = [n for n in G.nodes() if not G.node[n]['test'] and G.node[n]['val']] 129 | test_nodes = [n for n in G.nodes() if G.node[n]['test'] and not G.node[n]['val']] 130 | unlabeled_nodes = [n for n in G.nodes() if G.node[n]['test'] and G.node[n]['val']] 131 | class_map = convert_ndarray(class_map) 132 | # remove useless nodes 133 | if len(unlabeled_nodes) > 0: 134 | G, feats, class_map = rm_useless(G, feats, class_map, unlabeled_nodes, num_layers) 135 | train_nodes = [n for n in G.nodes() if not G.node[n]['test'] and not G.node[n]['val']] 136 | val_nodes = [n for n in G.nodes() if not G.node[n]['test'] and G.node[n]['val']] 137 | test_nodes = [n for n in G.nodes() if G.node[n]['test'] and not G.node[n]['val']] 138 | unlabeled_nodes = [n for n in G.nodes() if G.node[n]['test'] and G.node[n]['val']] 139 | # double check 140 | if len(class_map) != len(train_nodes) + len(val_nodes) + len(test_nodes) + len(unlabeled_nodes): 141 | raise Exception('Error: repeat node id!') 142 | if max([n for n in G.nodes()]) != G.number_of_nodes()-1: 143 | raise Exception('Error: node id out of range!') 144 | 145 | # 5. encode topology features 146 | start_time = time.time() 147 | if os.path.exists(prefix + '-feats_t.npy'): 148 | feats_t = np.load(prefix + '-feats_t.npy') 149 | generate_tf = False 150 | else: 151 | feats_t = None 152 | generate_tf = True 153 | 154 | # 6. post process 155 | train_ids = np.array([n for n in G.nodes() if not G.node[n]['val'] and not G.node[n]['test']]) 156 | train_feats = feats[train_ids] 157 | scaler = StandardScaler() 158 | scaler.fit(train_feats) 159 | feats = scaler.transform(feats) 160 | if not generate_tf: 161 | train_feats_t = feats_t[train_ids] 162 | scaler.fit(train_feats_t) 163 | feats_t = scaler.transform(feats_t) 164 | print("load data in", "{:.5f}".format(time.time() - start_time), "seconds") 165 | 166 | # 7. minibatch 167 | print('start minibatch for train, val, test ...') 168 | start_time = time.time() 169 | G.remove_edges_from(G.selfloop_edges()) 170 | train_subgraphs, train_subfeats, train_subfeats_t, train_sublabels, train_submasks = NodeMinibatchIterator(G, num_layers, \ 171 | batch_size, train_nodes, feats, feats_t, class_map, concat, generate_tf, prefix, sample_number).get_subgraphs() 172 | val_subgraphs, val_subfeats, val_subfeats_t, val_sublabels, val_submasks = NodeMinibatchIterator(G, num_layers, \ 173 | batch_size, val_nodes, feats, feats_t, class_map, concat, generate_tf, prefix, sample_number).get_subgraphs() 174 | test_subgraphs, test_subfeats, test_subfeats_t, test_sublabels, test_submasks = NodeMinibatchIterator(G, num_layers, \ 175 | batch_size, test_nodes, feats, feats_t, class_map, concat, generate_tf, prefix, sample_number).get_subgraphs() 176 | print('Done with minibatch within {:.5f} seconds, start training...'.format(time.time()-start_time)) 177 | 178 | return G, train_subgraphs, train_subfeats, train_subfeats_t, train_sublabels, train_submasks, val_subgraphs, val_subfeats, \ 179 | val_subfeats_t, val_sublabels, val_submasks, test_subgraphs, test_subfeats, test_subfeats_t, test_sublabels, test_submasks 180 | --------------------------------------------------------------------------------