NetworkX: How to Import, Manipulate and Visualize a Network using Python?

 

Networkx is a fantastic tool that we can use in python in order to build a network. In this article, I will be showing the basic functionalities of NetworkX by analyzing real-life data. For the purpose of this tutorial, we will be using the OpenFlight dataset which is a database containing information of about 10 000 airports, 6000 airlines, and 70 000 air routes taken by planes every day. For more information, check out their official website OpenFlights.

 

We will divide this tutorial into 3 sections. In the first section, we will be importing data from the OpenFlights database, then we will be transforming the data and creating our network from it, and showcasing some tools we can use to analyze the network. Finally, we will visualize our n2etwork by plotting it and highlighting some key elements.

 

You will find an explanation of each part in the videos. They showcase my thinking process as  I was building the project

In the field of Data, you often hear recurring terms like machine learning, data mining, data science, etc. For somebody new in the field, those terms can be quite confusing. That makes it of utmost importance to understand the meaning of those basic terms in the world of Data. In this article, we will explore the difference between Data Science, Data Analytics, Machine Learning, and Big Data
 

1. Data Import

We need to import the dataset first. In order to do that, we will use the library called urllib. From that library, we will use the request function to open the URL and read the content of the page. We will save the page content in a variable that will contain the data requested.

 

import 
import urllib.request
url = "https://raw.githubusercontent.com/"
"jpatokal/openflights/master/data/airports.dat"
response = urllib.request.urlopen(url)
data = response.read()

Once we have saved the data, it is a good habit to save it to a local file so you don’t have to make multiple requests to the website. The code below will create a file called “airport_db” which contains the airport data taken from the OpenFlights database

 


file = open("airports_db.dat", "wb")
file.write(data)
file.close()

 

The next step is to transform the data into a usable format. The idea is to create the main array (airport_db) that will be made of arrays containing the comma-separated values that OpenFlights provided us.


import csv
f = open("airports_db.dat", encoding = "utf8")
airport_db = [] #main arrar for airport
errors = 0
for airport in csv.reader(f, delimiter = ','):
    current_record = []
    try:
        #each slots containing information about an airport
        current_record.append(int(airport[0])) #airport ID
        current_record.append(airport[1]) 
        current_record.append(airport[2])
        current_record.append(airport[3])
        current_record.append(airport[4])
        current_record.append(airport[5])
        current_record.append(float(airport[6]))
        current_record.append(float(airport[7]))
        current_record.append(float(airport[8]))
        current_record.append(float(airport[9]))
        current_record.append(airport[10])
        current_record.append(airport[11])
        current_record.append(airport[12])
        current_record.append(airport[13])
    except : 
        errors += 1
    else:
        airport_db.append(current_record)
print("Total Airport Imported : ", len(airport_db),
 "# of Errors : ", errors)
Total Airport Imported :  6874 # of Errors :  310

 

Once we have imported the airports, it is now time to import the various routes. The process is going to be the same as importing the airports. It is generally a good idea to write a function for this type of stuff just to avoid generating duplicate code as I did, but since we are importing just two files it is OK in our case.


url = "https://raw.githubusercontent.com/jpatokal/openflights/master/data/routes.dat"
response= ""
data = ""
response = urllib.request.urlopen(url)
data = response.read()
file = open("routes_db.dat", "wb")
file.write(data)
file.close()

Like we did with the airports, we will be saving the routes in the main array that will contain the information about the routes airplanes take. We will save all route information except the Source Airport Name, the Destination Airport Name, and the Codeshare because we do not really need those values.


f = open("routes_db.dat", encoding = "utf8")
route_db = []
errors = 0
for route in csv.reader(f, delimiter = ','):
    current_record = []
    try:
        current_record.append(route[0]) 
        current_record.append(int(route[1]))
        current_record.append(int(route[3]))
        current_record.append(int(route[5]))
        current_record.append(int(route[7]))
        current_record.append(route[8])
  
    except : 
        errors += 1
    else:
        route_db.append(current_record)
print("Total Routes Imported : ", len(route_db), "# of Errors : ", errors)
Total Routes Imported :  66765 # of Errors :  898

2. Data Manipulation/Transformation in NetworkX

 

Now that we have imported the data and transformed it into a usable format, we can finally create our network using networkx. We will first import the library and create our empty graph using the graph function in  networks


import networkx as nx
network = nx.Graph()

 

Next, we need to create nodes and the edges of our network. The nodes will contain information about the airports and the edges will contain information about the routes. We will first use the .addnode() function to create our node. Each node will contain all the information about one airport. We will use a for loop to loop through all the airport records we have saved in our main airport database (array). For each record, we will give a title to each array slot corresponding to the information a slot has. For example, slot 2 contains the information about the airport city, slot 3 the country the airport is located in, etc.

 


for airport in airport_db:
    network.add_node(airport[0], id=airport[0], name=airport[1], city=airport[2], 
                     country=airport[3], iata=airport[4], 
                     icao=airport[5],
                     lat=airport[6], 
                     long=airport[7], 
                     alt=airport[8], offset=airport[9], 
                     daylight=airport[10], timezone=airport[11], 
                     type=airport[12], source=airport[13])

Similarly, we need to add the edges by checking if there is a link between the two airports. In order to do that, we loop through our main route array and check if the airport ids for the source and the destination is amongst the nodes of our network. If the nodes exist we add an edge between them. Each edge will contain information about a route.


for route in route_db:
    if route[2] in network.nodes() and route[3] in network.nodes:
        network.add_edge(route[2], route[3], airline = route[0], 
                         airline_id = route[1], stops = route[4], 
                         equipment = route[5])

Now that we have added the various nodes, let us see if the format is correct. To check the content of a node, we will use the function .nodes[node_id]. Let’s run it in our network and double-check it with the sample record Openflights provided on their website, Doing so, we see that the labels are sorted in alphabetical order and the information stored is correct.


network.nodes[507]
{'alt': 83.0,
 'city': 'London',
 'country': 'United Kingdom',
 'daylight': 'E',
 'iata': 'LHR',
 'icao': 'EGLL',
 'id': 507,
 'lat': 51.4706,
 'long': -0.461941,
 'name': 'London Heathrow Airport',
 'offset': 0.0,
 'source': 'OurAirports',
 'timezone': 'Europe/London',
 'type': 'airport'}

We can do the same for the different routes. To check the information stored in a route, we will use the .edges[source_airport_id, destination_airport_id].


network.edges[507,100]
{'airline': 'LH', 'airline_id': 3320, 'equipment': '763', 'stops': 0}

network.nodes[100]
{'alt': 374.0,
 'city': 'Ottawa',
 'country': 'Canada',
 'daylight': 'A',
 'iata': 'YOW',
 'icao': 'CYOW',
 'id': 100,
 'lat': 45.3224983215332,
 'long': -75.66919708251953,
 'name': 'Ottawa Macdonald-Cartier International Airport',
 'offset': -5.0,
 'source': 'OurAirports',
 'timezone': 'America/Toronto',
 'type': 'airport'}

Now that we can go a step further. One interesting piece of information to pull up is the number and the names of all airports a node is connected to. For this example, we will use London’s airport with the id 507. To get the nodes of its connection, we will loop through the list containing its direct neighbor. To pull that list up, we will use the function .neighbour(node_id).


for i in list(network.neighbors(507)):
    print(network.nodes[i]['id'], " -  ", network.nodes[i]["name"])
344  -   Cologne Bonn Airport
342  -   Hamburg Airport
350  -   Stuttgart Airport
351  -   Berlin-Tegel International Airport
2997  -   Chhatrapati Shivaji International Airport
3093  -   Indira Gandhi International Airport
3941  -   Eleftherios Venizelos International Airport
532  -   Aberdeen Dyce Airport
248  -   Kotoka International Airport
1230  -   Málaga Airport
580  -   Amsterdam Airport Schiphol
737  -   Stockholm-Arlanda Airport

network.edges[507,3830]
{'airline': 'VS', 'airline_id': 5347, 'equipment': '343', 'stops': 0}

If you need just some basic information about neighboring nodes, you can simply use the .info(graph_name, node_id). This will pull up the degree of the node along with the ids of its neighbor. The degree of a node is basically the number of edges attached to it.


nx.info(network, 507)
'Node 507 has the following properties:\nDegree: 170\nNeighbors: 344 342 350 351 2997 3093 3941 532 248 1230 580 737 3682 2179 3673 2057 1218 636 467 1538 3131 3448 302 1423 1489 3849 1382 3876 609 797 3751 3670 599 345 2188 1187 535 3494 1555 340 1738 534 687 1665 352 421 3714 3550 1701 3797 813 3304 2176 3877 3484 517 1197 1529 1638 629 1335 3144 478 3576 1353 346 1524 4059 1354 521 3830 644 1657 3752 3462 1587 1562 3626 591 3731 3577 3469 1194 666 1273 1551 1613 679 146 156 178 193 1208 1678 1386 49 73 100 189 3645 3858 210 1824 1074 1080 260 2908 2170 2177 3885 1128 3395 4029 3988 1626 1059 2560 2564 2922 3077 2359 1225 3930 2072 1468 1479 2939 951 2948 273 1229 1953 2279 1636 3364 3998 3406 2082 3316 1157 1590 3076 3074 8076 3370 596 603 1107 1739 16 2983 1216 1220 4330 2910 1606 893 1132 1205 1206 2223 2206 2207 2397 2985 2976 287 3024 2988 2194'

We can check the density of our network by using the density function .density(graph). A basic way of thinking about density is to understanding as to the ratio between the number of nodes and the number of edges. You can check out the exact formula that Networkx uses by clicking this link.

nx.density(network)
0.0007805270068567253

In order to have a good result, we are supposed to have a fully connected graph. We can check is your network is fully connected by using the .is_connected(graph) function. It will return a boolean response.

nx.is_connected(network)
False

Before we move forward, there are few useful concepts that you can easily implement in NetworkX. The first one is that you can compute the centrality of a network. You can think of centrality as a measure of the importance of each node in the network. So the higher the centrality of a node is, the more important role it plays in a network. For example, if we talk about the Instagram network, the centrality of Cristiano Ronaldo will be higher than the centrality of me @ngorovitch because Cristiano Ronaldo, has more people (nodes) following him, he creates more engagement ergo having a more important role than me in the network. You can check out the exact implementation of the centrality using the following link.

degree_centrality = nx.degree_centrality(network)

In NetworkX, you can easily add new information to our nodes. This time, we will add the centrality values to our nodes. We will just loop through the degree centrality values we calculated above (dictionary), and we will add them to their corresponding nodes.


for airport, centrality_value in degree_centrality.items():
    network.nodes[airport]['degree_centrality'] = centrality_value
network.nodes[507]['degree_centrality']
0.02473446820893351

Another nice feature NetworkX has, is the fact that you can easily check the path between two nodes using the has_path function. It will return a boolean value and the advantage of using this method is that you will not need to make any exception handling using this method.


nx.has_path(network, source= 507, target = 20)
False

nx.has_path(network, source= 507, target = 100)
True

Now let’s get back on track. Right now we have a network that is not fully connected. That probably means that there are some nodes that do not have edges. In other to double-check that we can print out the degree of each node. You can think of the degree of a node as the number of edges a node has. We can simply use the .degree function for that.


network.degree()
DegreeView({1: 4, 2: 7, 3: 9, 4: 9, 5: 32, 6: 4, 7: 5, 8: 8, 9: 7, 10: 1, 11: 1, 12: 1, 13: 0, 14: 0, 15: 1, 16: 34, 17: 0, 18: 4, 19: 0, 20: 0, 21: 4, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 3, 28: 1, 29: 4, 30: 3, 31: 1, 32: 4, 33: 2, 34: 2, 35: 0, 36: 0, 37: 3, 38: 0, 39: 0, 40: 2, 41: 4, 42: 0, 43: 0, 44: 0, 45: 4, 46: 0, 47: 0, 48: 0, 49: 35, 50: 3, 51: 0, 52: 0, 53: 0, 54: 2, 55: 10, 56: 4, 57: 0, 58: 3, 59: 0, 60: 1, 61: 1, 62: 0, 63: 2, 64: 0, 65: 1, 66: 0, 67: 4, 68: 1, 69: 3, 70: 4, 71: 0, 72: 3, 73: 32, 74: 0, 75: 2, 76: 0, 77: 0, 78: 2, 79: 2, 80: 0, 81: 0, 82: 0, 83: 0, 84: 0, 85: 0, 86: 0, 87: 10, 88: 0, 89: 0, 90: 7, 91: 0, 92: 0, 93: 0, 94: 3, 95: 0, 96: 0, 97: 0, 98: 0, 99: 0, 100: 26, 101: 0, 102: 0, 103: 0, 104: 0, 105: 0, 106: 2, 107: 0, 108: 1, 109: 2, 110: 0, 111: 13, 112: 3, 113: 3, 114: 0, 115: 3, 116: 1, 117: 7, 119: 4, 120: 9, 121: 10, 122: 2, 123: 0, 124: 0, 125: 3, 126: 2, 127: 2, 128: 2, 129: 0, 130: 0, 131: 0, 132: 11, 133: 6, 134: 0, 135: 3, 136: 4, 137: 0, 138: 0, 139: 0, 140: 2, 141: 6, 142: 0, 143: 5, 144: 13, 145: 0, 146: 91, 147: 3, 148: 2, 149: 2, 150: 0, 151: 0, 152: 1, 153: 2, 154: 2, 155: 4, 156: 75, 157: 0, 158: 0, 159: 0, 160: 23, 161: 3, 162: 2, 163: 0, 164: 3, 165: 0, 166: 9, 167: 1, 168: 2, 169: 4, 170: 2, 171: 0, 172: 2, 173: 2, 174: 5, 175: 2, 176: 5, 177: 2, 178: 59, 179: 2, 180: 0, 181: 1, 182: 3, 183: 3, 184: 8, 185: 0, 186: 0, 187: 4, 188: 7, 189: 11, 190: 2, 191: 0, 192: 4, 193: 147, 194: 0, 195: 0, 196: 18, 197: 0, 198: 1, 199: 1, 200: 2, 201: 0, 202: 7, 203: 0, 204: 0, 205: 0, 206: 0, 207: 0, 208: 0, 209: 4, 210: 63, 211: 3, 212: 0, 213: 0, 214: 0, 215: 0, 216: 5, 217: 0, 218: 0, 219: 0, 220: 7, 221: 11, 222: 1, 224: 2, 225: 2, 226: 0, 227: 0, 228: 0, 229: 0, 230: 4, 231: 23, 232: 0, 233: 2, 234: 6, 235: 3, 236: 2, 237: 4, 238: 6, 239: 3, 240: 1, 241: 0, 242: 0, 243: 6, 244: 2, 245: 20, 246: 15, 247: 2, 248: 29, 249: 1, 250: 0, 251: 0, 252: 1, 253: 21, 254: 0, 255: 0, 256: 0, 257: 0, 258: 0, 259: 0, 260: 22, 261: 0, 262: 2, 263: 2, 264: 3, 265: 0, 266: 1, 267: 1, 268: 1, 269: 1, 270: 8, 271: 0, 272: 0, 273: 41, 274: 0, 275: 2, 276: 1, 277: 1, 278: 0, 279: 0, 280: 9, 281: 0, 282: 0, 283: 0, 284: 0, 285: 0, 286: 10, 287: 59, 288: 0, 289: 0, 290: 3, 291: 3, 292: 0, 293: 23, 294: 0, 295: 4, 296: 4, 297: 0, 298: 16, 299: 1, 300: 0, 301: 0, 302: 151, 303: 0, 304: 83, 305: 0, 306: 0, 307: 0, 308: 0, 309: 8, 310: 2, 311: 0, 312: 0, 313: 0, 314: 0, 315: 0, 316: 0, 317: 0, 318: 0, 319: 0, 320: 0, 322: 0, 323: 0, 324: 0, 325: 0, 326: 0, 327: 0, 328: 0, 329: 0, 330: 0, 331: 0, 332: 0, 333: 0, 334: 0, 335: 0, 336: 0, 337: 68, 338: 17, 339: 6, 340: 242, 341: 11, 342: 86, 343: 0, 344: 92, 345: 146, 346: 190, 347: 31, 348: 28, 349: 4, 350: 81, 351: 108, 352: 51, 353: 42, 354: 0, 355: 47, 356: 1, 357: 0, 358: 0, 359: 0, 360: 0, 361: 0, 362: 1, 363: 0, 364: 4, 365: 0, 366: 0, 367: 0, 368: 0, 369: 0, 370: 0, 371: 8, 372: 0, 373: 29, 374: 1, 375: 0, 376: 0, 377: 0, 378: 0, 379: 0, 380: 0, 381: 0, 382: 12, 383: 0, 384: 0, 385: 0, 386: 0, 387: 0, 388: 0, 389: 0, 390: 0, 391: 0, 392: 0, 393: 7, 394: 0, 395: 0, 396: 0, 397: 0, 398: 0, 399: 0, 400: 2, 401: 0, 402: 0, 403: 0, 404: 0, 405: 0, 406: 0, 407: 0, 408: 0, 409: 0, 410: 7, 411: 0, 412: 0, 413: 1, 414: 0, 415: 28, 416: 1, 417: 0, 418: 0, 419: 0, 420: 0, 421: 89, 422: 0, 423: 0, 424: 0, 425: 0, 426: 0, 427: 0, 428: 2, 429: 1, 430: 2, 431: 0, 432: 2, 433: 1, 434: 0, 435: 2, 436: 0, 437: 1, 438: 2, 439: 1, 440: 0, 441: 3, 442: 3, 443: 0, 444: 0, 445: 0, 446: 3, 447: 0, 448: 3, 449: 0, 450: 0, 451: 0, 452: 0, 453: 1, 454: 0, 455: 1, 456: 0, 457: 0, 458: 10, 459: 0, 460: 7, 461: 0, 462: 2, 463: 0, 464: 0, 465: 28, 466: 0, 467: 18, 468: 5, 469: 80, 470: 0, 471: 0, 472: 1, 474: 0, 475: 0, 476: 0, 477: 0, 478: 146, 479: 0, 480: 0, 481: 5, 482: 0, 483: 0, 484: 0, 485: 0, 486: 0, 487: 0, 488: 20, 489: 0, 490: 72, 491: 48, 492: 84, 493: 0, 494: 17, 495: 23, 496: 0, 497: 2, 498: 15, 499: 30, 500: 0, 501: 0, 502: 164, 503: 36, 504: 0, 505: 0, 506: 0, 507: 170, 508: 14, 509: 0, 510: 0, 511: 0, 512: 0, 513: 0, 514: 9, 515: 4, 516: 0, 517: 51, 518: 0, 519: 2, 520: 10, 521: 48, 522: 2, 523: 56, 524: 0, 525: 0, 526: 0, 528: 0, 529: 11, 530: 5, 531: 2, 532: 29, 533: 11, 534: 62, 535: 89, 536: 1, 537: 21, 538: 2, 539: 0, 540: 1, 541: 5, 542: 1, 543: 0, 544: 0, 545: 0, 546: 0, 547: 8, 548: 152, 549: 0, 550: 0, 551: 0, 552: 19, 553: 0, 554: 0, 555: 0, 556: 0, 557: 0, 558: 0, 559: 0, 560: 0, 561: 0, 562: 0, 563: 0, 564: 0, 565: 0, 566: 0, 567: 0, 568: 0, 569: 0, 570: 0, 571: 0, 572: 0, 573: 0, 574: 0, 575: 0, 576: 0, 577: 0, 578: 0, 579: 2, 580: 246, 581: 0, 582: 11, 583: 0, 584: 0, 585: 63, 586: 8, 587: 0, 588: 0, 589: 0, 590: 0, 591: 30, 592: 0, 593: 0, 594: 0, 595: 0, 596: 30, 597: 0, 599: 144, 600: 15, 601: 6, 602: 0, 603: 26, 604: 0, 605: 2, 607: 8, 608: 39, 609: 121, 610: 2, 611: 0, 612: 1, 613: 0, 614: 0, 615: 0, 616: 0, 617: 0, 618: 1, 619: 1, 621: 0, 622: 0, 623: 0, 624: 0, 625: 4, 626: 0, 627: 0, 628: 13, 629: 55, 630: 10, 631: 4, 632: 8, 633: 0, 634: 6, 635: 15, 636: 48, 637: 5, 638: 8, 639: 0, 640: 1, 641: 7, 642: 1, 643: 5, 644: 103, 645: 10, 646: 2, 647: 7, 648: 0, 649: 6, 650: 0, 651: 6, 652: 5, 653: 3, 654: 0, 655: 1, 656: 1, 657: 35, 658: 2, 659: 1, 660: 3, 662: 5, 663: 20, 664: 29, 665: 31, 666: 37, 667: 0, 668: 46, 669: 52, 670: 0, 671: 27, 673: 0, 674: 19, 675: 11, 676: 7, 677: 0, 678: 0, 679: 77, 680: 31, 681: 0, 682: 0, 683: 0, 684: 0, 685: 2, 686: 0, 687: 30, 688: 2, 689: 0, 690: 0, 691: 19, 692: 0, 693: 1, 694: 0, 695: 0, 696: 0, 697: 0, 698: 2, 699: 31, 700: 0, 701: 0, 702: 0, 703: 1, 704: 0, 705: 0, 706: 0, 707: 2, 708: 11, 709: 4, 710: 0, 711: 6, 712: 0, 713: 0, 714: 2, 715: 2, 716: 0, 717: 0, 718: 2, 719: 2, 720: 0, 721: 2, 722: 1, 723: 0, 724: 1, 725: 0, 726: 3, 727: 0, 728: 4, 729: 2, 730: 1, 731: 0, 733: 3, 734: 2, 735: 0, 736: 0, 737: 123, 738: 15, 739: 0, 740: 0, 741: 0, 742: 2, 743: 1, 745: 0, 746: 4, 748: 0, 750: 0, 751: 0, 753: 0, 754: 0, 755: 0, 756: 0, 757: 0, 758: 0, 759: 0, 760: 0, 761: 0, 762: 0, 763: 0, 764: 0, 765: 0, 766: 0, 767: 0, 768: 0, 769: 0, 770: 0, 771: 0, 772: 5, 773: 0, 774: 0, 775: 0, 777: 0, 778: 0, 779: 0, 780: 0, 781: 0, 782: 0, 783: 0, 784: 0, 785: 0, 786: 0, 787: 0, 788: 0, 789: 0, 790: 0, 791: 0, 792: 0, 793: 0, 794: 3, 795: 0, 796: 0, 797: 21, 798: 0, 799: 13, 800: 4, 801: 0, 802: 0, 803: 0, 804: 3, 806: 0, 807: 0, 808: 0, 809: 0, 810: 0, 811: 2, 812: 0, 813: 80, 814: 0, 815: 2, 816: 0, 817: 0, 818: 0, 819: 0, 820: 2, 821: 0, 822: 0, 823: 0, 824: 0, 825: 0, 827: 1, 828: 0, 829: 0, 831: 0, 832: 0, 833: 0, 834: 0, 835: 0, 836: 0, 837: 0, 838: 4, 839: 0, 840: 1, 841: 0, 842: 0, 843: 1, 844: 0, 845: 1, 846: 0, 847: 0, 848: 0, 849: 1, 850: 0, 851: 0, 852: 0, 853: 0, 854: 0, 855: 0, 856: 0, 857: 0, 858: 0, 859: 0, 860: 0, 861: 0, 862: 0, 863: 0, 864: 0, 865: 2, 866: 1, 867: 0, 868: 0, 869: 0, 870: 0, 871: 0, 872: 0, 873: 0, 874: 0, 875: 0, 876: 0, 877: 2, 878: 0, 879: 3, 880: 6, 881: 8, 882: 0, 883: 12, 884: 0, 885: 0, 886: 9, 887: 1, 888: 4, 889: 0, 890: 2, 891: 9, 892: 0, 893: 27, 894: 1, 895: 0, 896: 0, 897: 21, 898: 2, 899: 0, 900: 2, 901: 3, 902: 0, 903: 0, 904: 0, 905: 0, 906: 5, 907: 18, 908: 1, 909: 0, 910: 7, 911: 0, 912: 7, 913: 0, 914: 0, 915: 8, 916: 13, 917: 1, 918: 21, 919: 0, 920: 3, 921: 6, 922: 2, 923: 5, 924: 1, 925: 0, 926: 0, 927: 3, 928: 0, 929: 2, 930: 3, 931: 0, 932: 4, 933: 3, 934: 0, 935: 0, 936: 0, 937: 2, 938: 0, 939: 0, 940: 0, 941: 0, 942: 0, 943: 3, 944: 1, 945: 0, 946: 2, 948: 3, 949: 2, 950: 0, 951: 38, 952: 2, 953: 3, 955: 0, 956: 0, 957: 2, 958: 2, 959: 3, 960: 1, 961: 0, 962: 0, 963: 0, 964: 0, 965: 0, 966: 0, 967: 1, 968: 0, 969: 0, 970: 16, 971: 0, 972: 0, 973: 3, 974: 6, 976: 3, 977: 2, 978: 0, 979: 15, 980: 0, 981: 0, 982: 0, 983: 0, 984: 7, 985: 6, 986: 3, 987: 0, 988: 6, 989: 0, 990: 3, 991: 0, 992: 0, 993: 0, 994: 9, 995: 1, 996: 0, 997: 0, 998: 0, 999: 11, 1000: 0, 1001: 3, 1002: 0, 1003: 0, 1004: 5, 1005: 14, 1006: 0, 1007: 0, 1008: 0, 1009: 0, 1010: 0, 1011: 0, 1012: 0, 1013: 5, 1014: 0, 1015: 0, 1016: 7, 1017: 0, 1018: 1, 1019: 0, 1020: 20, 1021: 0, 1022: 0, 1023: 0, 1024: 0, 1025: 0, 1026: 3, 1027: 0, 1028: 1, 1029: 0, 1030: 0, 1031: 3, 1032: 2, 1033: 3, 1034: 0, 1035: 3, 1036: 4, 1037: 2, 1038: 7, 1039: 0, 1040: 1, 1041: 0, 1042: 3, 1043: 2, 1044: 16, 1045: 0, 1046: 0, 1047: 0, 1048: 0, 1049: 0, 1050: 7, 1051: 55, 1052: 3, 1053: 7, 1054: 82, 1055: 57, 1056: 85, 1057: 17, 1058: 4, 1059: 12, 1060: 0, 1062: 2, 1063: 7, 1064: 22, 1065: 1, 1066: 16, 1067: 0, 1068: 0, 1069: 0, 1070: 9, 1071: 0, 1072: 9, 1074: 91, 1075: 49, 1076: 0, 1077: 2, 1078: 2, 1079: 2, 1080: 12, 1081: 2, 1082: 2, 1083: 0, 1084: 32, 1085: 0, 1086: 0, 1087: 0, 1088: 0, 1089: 0, 1090: 0, 1091: 0, 1092: 0, 1093: 0, 1094: 9, 1095: 0, 1096: 0, 1097: 3, 1098: 0, 1099: 0, 1100: 0, 1101: 0, 1102: 16, 1103: 13, 1104: 1, 1105: 2, 1106: 6, 1107: 73, 1108: 0, 1109: 2, 1110: 2, 1111: 2, 1112: 3, 1113: 2, 1114: 2, 1116: 2, 1117: 4, 1118: 1, 1119: 2, 1120: 4, 1121: 5, 1122: 4, 1123: 0, 1126: 0, 1127: 1, 1128: 80, 1129: 0, 1130: 26, 1131: 0, 1132: 6, 1133: 0, 1134: 0, 1135: 0, 1136: 3, 1137: 0, 1138: 3, 1139: 0, 1140: 2, 1141: 1, 1143: 2, 1144: 2, 1145: 9, 1146: 0, 1147: 11, 1148: 0, 1149: 4, 1150: 0, 1151: 0, 1152: 1, 1153: 2, 1154: 11, 1156: 0, 1157: 24, 1158: 0, 1159: 0, 1160: 0, 1161: 0, 1162: 1, 1163: 0, 1164: 0, 1165: 17, 1166: 1, 1167: 0, 1168: 0, 1169: 1, 1170: 0, 1171: 0, 1172: 0, 1173: 8, 1174: 0, 1175: 22, 1176: 2, 1177: 20, 1178: 0, 1179: 0, 1180: 11, 1181: 0, 1182: 1, 1183: 4, 1184: 0, 1185: 0, 1186: 9, 1187: 18, 1189: 0, 1190: 18, 1191: 11, 1192: 0, 1193: 2, 1194: 41, 1195: 0, 1196: 9, 1197: 54, 1198: 25, 1199: 0, 1200: 42, 1201: 0, 1202: 4, 1203: 14, 1204: 0, 1205: 8, 1206: 37, 1207: 0, 1208: 28, 1209: 24, 1210: 0, 1211: 0, 1212: 96, 1213: 15, 1214: 10, 1215: 0, 1216: 35, 1218: 162, 1219: 2, 1220: 6, 1221: 0, 1222: 50, 1223: 5, 1224: 0, 1225: 59, 1226: 16, 1227: 17, 1229: 158, 1230: 117, 1231: 26, 1232: 0, 1233: 0, 1234: 1, 1235: 0, 1236: 16, 1237: 0, 1238: 1, 1239: 0, 1241: 0, 1242: 2, 1243: 22, 1244: 0, 1245: 0, 1246: 57, 1247: 2, 1249: 0, 1250: 5, 1251: 17, 1252: 8, 1253: 38, 1254: 0, 1255: 0, 1256: 0, 1257: 0, 1258: 0, 1259: 0, 1260: 0, 1261: 0, 1262: 2, 1263: 0, 1264: 49, 1265: 9, 1266: 0, 1267: 0, 1268: 5, 1269: 0, 1270: 10, 1271: 0, 1272: 0, 1273: 47, 1274: 4, 1275: 0, 1276: 5, 1277: 1, 1278: 5, 1279: 2, 1280: 13, 1281: 0, 1282: 0, 1283: 0, 1284: 0, 1285: 3, 1286: 0, 1287: 0, 1288: 0, 1289: 4, 1290: 0, 1291: 0, 1292: 0, 1293: 0, 1294: 0, 1295: 0, 1296: 0, 1297: 0, 1298: 0, 1299: 0, 1300: 0, 1301: 0, 1302: 0, 1303: 0, 1305: 0, 1306: 0, 1307: 0, 1308: 0, 1309: 3, 1310: 0, 1311: 0, 1312: 0, 1313: 1, 1314: 0, 1315: 0, 1316: 0, 1317: 0, 1318: 0, 1319: 0, 1320: 5, 1321: 23, 1322: 11, 1323: 9, 1324: 26, 1325: 0, 1326: 0, 1327: 0, 1328: 0, 1329: 0, 1330: 6, 1331: 0, 1332: 0, 1333: 0, 1334: 0, 1335: 77, 1336: 0, 1337: 0, 1338: 0, 1339: 0, 1340: 0, 1341: 0, 1342: 0, 1343: 0, 1344: 1, 1345: 0, 1346: 0, 1347: 0, 1348: 0, 1349: 0, 1350: 4, 1351: 0, 1352: 10, 1353: 84, 1354: 89, 1355: 0, 1356: 5, 1357: 0, 1358: 0, 1359: 20, 1360: 9, 1361: 2, 1362: 0, 1363: 0, 1364: 0, 1365: 0, 1366: 0, 1367: 59, 1368: 0, 1369: 0, 1370: 0, 1371: 1, 1372: 0, 1373: 0, 1374: 2, 1375: 0, 1376: 5, 1377: 0, 1378: 0, 1379: 0, 1380: 0, 1381: 0, 1382: 239, 1383: 0, 1384: 0, 1385: 0, 1386: 122, 1387: 0, 1388: 0, 1389: 0, 1390: 0, 1391: 0, 1392: 0, 1393: 0, 1394: 0, 1395: 0, 1396: 0, 1397: 0, 1398: 0, 1399: 32, 1400: 0, 1401: 0, 1402: 0, 1403: 11, 1404: 0, 1405: 3, 1406: 0, 1407: 0, 1408: 1, 1409: 2, 1410: 0, 1411: 0, 1412: 4, 1413: 0, 1414: 0, 1415: 9, 1416: 1, 1417: 1, 1418: 56, 1419: 0, 1420: 0, 1421: 0, 1422: 0, 1423: 66, 1424: 0, 1425: 1, 1426: 0, 1427: 0, 1428: 0, 1429: 0, 1430: 0, 1431: 0, 1432: 0, 1433: 0, 1434: 0, 1435: 26, 1436: 0, 1437: 0, 1438: 3, 1439: 4, 1440: 0, 1441: 3, 1442: 0, 1443: 0, 1444: 0, 1445: 0, 1446: 2, 1447: 0, 1448: 5, 1449: 0, 1450: 5, 1451: 1, 1452: 62, 1453: 1, 1454: 4, 1455: 7, 1456: 8, 1457: 0, 1458: 30, 1459: 4, 1460: 39, 1461: 2, 1462: 5, 1463: 1, 1464: 3, 1465: 4, 1466: 0, 1467: 0, 1468: 11, 1469: 9, 1470: 9, 1471: 0, 1472: 51, 1473: 3, 1474: 39, 1475: 1, 1476: 8, 1478: 0, 1479: 11, 1480: 4, 1481: 0, 1482: 2, 1483: 0, 1484: 0, 1485: 0, 1486: 55, 1487: 0, 1488: 13, 1489: 76, 1490: 2, 1491: 0, 1492: 0, 1493: 0, 1496: 0, 1498: 0, 1499: 0, 1500: 0, 1501: 41, 1502: 0, 1503: 0, 1504: 0, 1505: 9, 1506: 19, 1507: 0, 1508: 22, 1509: 50, 1510: 3, 1511: 3, 1512: 39, 1513: 0, 1514: 4, 1515: 28, 1516: 0, 1517: 31, 1518: 0, 1519: 38, 1520: 33, 1521: 0, 1522: 0, 1523: 0, 1524: 111, 1525: 80, 1526: 29, 1527: 0, 1528: 17, 1529: 33, 1530: 0, 1531: 4, 1532: 0, 1534: 5, 1535: 0, 1536: 1, 1537: 0, 1538: 64, 1539: 38, 1540: 0, 1541: 0, 1542: 0, 1543: 0, 1544: 0, 1545: 11, 1546: 2, 1547: 0, 1548: 0, 1549: 0, 1550: 23, 1551: 72, 1552: 0, 1553: 50, 1554: 0, 1555: 160, 1556: 0, 1558: 5, 1559: 0, 1560: 0, 1561: 51, 1562: 65, 1563: 26, 1564: 0, 1565: 0, 1566: 0, 1567: 5, 1568: 0, 1569: 22, 1570: 0, 1571: 0, 1572: 0, 1573: 0, 1574: 0, 1575: 0, 1576: 0, 1577: 0, 1578: 0, 1579: 3, 1580: 0, 1581: 0, 1582: 3, 1583: 0, 1584: 2, 1585: 0, 1586: 0, 1587: 94, 1588: 1, 1589: 0, 1590: 79, 1591: 0, 1592: 0, 1593: 0, 1594: 3, 1595: 0, 1596: 2, 1597: 0, 1598: 0, 1599: 0, 1600: 0, 1601: 0, 1602: 1, 1603: 0, 1604: 0, 1605: 2, 1606: 76, 1607: 0, 1608: 0, 1609: 11, 1610: 6, 1611: 8, 1612: 21, 1613: 138, 1615: 0, 1616: 0, 1617: 2, 1618: 0, 1619: 0, 1620: 0, 1621: 0, 1622: 0, 1623: 0, 1624: 0, 1625: 4, 1626: 64, 1627: 1, 1628: 5, 1629: 8, 1630: 0, 1631: 0, 1632: 0, 1633: 17, 1634: 3, 1635: 0, 1636: 61, 1637: 1, 1638: 103, 1639: 2, 1640: 0, 1641: 0, 1642: 0, 1643: 0, 1645: 1, 1646: 13, 1647: 1, 1648: 0, 1649: 1, 1650: 0, 1651: 1, 1652: 18, 1653: 0, 1654: 2, 1655: 7, 1656: 1, 1657: 67, 1658: 3, 1659: 1, 1660: 0, 1661: 0, 1662: 4, 1663: 12, 1664: 0, 1665: 100, 1666: 0, 1667: 0, 1668: 0, 1669: 0, 1670: 0, 1671: 0, 1672: 0, 1673: 0, 1675: 2, 1676: 12, 1677: 0, 1678: 135, 1679: 2, 1680: 0, 1681: 0, 1682: 41, 1683: 0, 1684: 0, 1685: 10, 1686: 0, 1687: 0, 1688: 65, 1689: 5, 1690: 0, 1691: 3, 1692: 3, 1693: 2, 1694: 3, 1695: 0, 1696: 5, 1697: 0, 1698: 0, 1699: 2, 1701: 230, 1702: 0, 1703: 0, 1705: 0, 1706: 45, 1707: 0, 1708: 0, 1709: 0, 1710: 0, 1712: 0, 1713: 0, 1715: 29, 1716: 0, 1718: 0, 1719: 0, 1721: 4, 1722: 4, 1723: 3, 1724: 3, 1726: 7, 1728: 4, 1729: 3, 1731: 0, 1732: 0, 1733: 0, 1734: 0, 1735: 25, 1736: 0, 1737: 22, 1738: 5, 1739: 51, 1740: 0, 1741: 12, 1742: 17, 1743: 6, 1744: 0, 1745: 18, 1746: 4, 1747: 0, 1748: 0, 1749: 0, 1750: 0, 1751: 0, 1753: 0, 1754: 21, 1755: 2, 1756: 0, 1757: 0, 1758: 0, 1759: 9, 1760: 48, 1761: 16, 1762: 30, 1763: 0, 1764: 8, 1765: 0, 1766: 0, 1767: 20, 1769: 0, 1770: 0, 1771: 7, 1772: 15, 1773: 1, 1774: 10, 1775: 0, 1776: 11, 1777: 0, 1778: 0, 1779: 19, 1780: 29, 1781: 0, 1782: 0, 1783: 5, 1784: 0, 1785: 7, 1786: 2, 1787: 0, 1788: 0, 1789: 2, 1790: 0, 1791: 0, 1792: 7, 1793: 1, 1794: 4, 1795: 1, 1796: 6, 1797: 10, 1798: 1, 1800: 9, 1801: 4, 1802: 2, 1803: 0, 1804: 41, 1805: 0, 1806: 0, 1807: 13, 1808: 2, 1809: 0, 1810: 2, 1811: 0, 1813: 1, 1814: 5, 1815: 10, 1816: 6, 1817: 1, 1818: 1, 1819: 8, 1820: 3, 1821: 7, 1822: 1, 1823: 0, 1824: 94, 1825: 32, 1826: 9, 1827: 0, 1828: 1, 1829: 5, 1830: 3, 1831: 6, 1832: 0, 1833: 0, 1834: 1, 1835: 2, 1836: 21, 1837: 1, 1838: 5, 1839: 5, 1840: 22, 1841: 0, 1842: 6, 1843: 0, 1844: 0, 1845: 6, 1846: 5, 1847: 32, 1848: 5, 1849: 0, 1850: 10, 1851: 2, 1852: 81, 1853: 8, 1854: 9, 1855: 5, 1856: 5, 1857: 0, 1858: 4, 1859: 0, 1860: 0, 1861: 0, 1862: 0, 1863: 8, 1864: 0, 1865: 3, 1866: 2, 1867: 2, 1868: 0, 1869: 6, 1870: 0, 1871: 72, 1872: 0, 1874: 0, 1875: 0, 1877: 0, 1878: 0, 1879: 2, 1880: 0, 1881: 15, 1882: 0, 1883: 0, 1884: 2, 1885: 38, 1886: 0, 1887: 2, 1889: 3, 1890: 0, 1891: 0, 1892: 32, 1893: 0, 1894: 0, 1895: 2, 1896: 0, 1897: 13, 1898: 0, 1899: 0, 1900: 0, 1901: 8, 1902: 0, 1903: 4, 1904: 3, 1905: 7, 1906: 0, 1907: 0, 1908: 1, 1909: 33, 1910: 9, 1911: 0, 1912: 0, 1913: 0, 1914: 0, 1915: 0, 1916: 0, 1917: 0, 1918: 6, 1919: 0, 1920: 0, 1921: 0, 1923: 11, 1924: 0, 1925: 3, 1926: 19, 1927: 0, 1928: 0, 1930: 6, 1931: 0, 1932: 2, 1933: 0, 1934: 1, 1935: 0, 1936: 0, 1937: 1, 1941: 6, 1942: 0, 1943: 4, 1944: 3, 1945: 0, 1946: 1, 1947: 0, 1948: 10, 1949: 2, 1950: 1, 1951: 1, 1952: 2, 1953: 38, 1954: 0, 1955: 0, 1956: 4, 1957: 14, 1958: 2, 1959: 9, 1960: 24, 1961: 12, 1963: 4, 1964: 0, 1965: 3, 1966: 0, 1968: 3, 1969: 5, 1970: 1, 1971: 3, 1972: 3, 1973: 0, 1974: 0, 1975: 3, 1976: 0, 1977: 2, 1978: 3, 1979: 2, 1980: 2, 1981: 2, 1982: 0, 1983: 1, 1984: 2, 1985: 2, 1986: 3, 1987: 4, 1989: 7, 1990: 6, 1991: 4, 1992: 4, 1993: 3, 1994: 3, 1995: 5, 1997: 21, 1998: 1, 1999: 2, 2000: 3, 2001: 9, 2002: 1, 2003: 1, 2004: 2, 2005: 9, 2006: 50, 2007: 2, 2008: 0, 2009: 21, 2010: 0, 2011: 4, 2012: 2, 2013: 0, 2014: 1, 2015: 4, 2016: 0, 2017: 1, 2018: 1, 2019: 0, 2020: 0, 2021: 0, 2022: 0, 2023: 3, 2024: 4, 2025: 2, 2026: 0, 2027: 0, 2028: 5, 2029: 2, 2030: 6, 2031: 3, 2032: 0, 2033: 0, 2034: 3, 2035: 1, 2036: 0, 2037: 3, 2038: 0, 2039: 0, 2040: 0, 2041: 1, 2042: 21, 2043: 0, 2044: 0, 2045: 2, 2046: 1, 2047: 1, 2048: 4, 2049: 0, 2050: 15, 2051: 4, 2052: 0, 2053: 4, 2054: 0, 2055: 0, 2056: 0, 2057: 40, 2058: 0, 2059: 11, 2060: 3, 2061: 3, 2062: 3, 2063: 0, 2064: 46, 2065: 0, 2066: 4, 2067: 9, 2068: 2, 2069: 5, 2070: 0, 2071: 0, 2072: 107, 2073: 0, 2074: 41, 2075: 3, 2076: 2, 2077: 0, 2078: 0, 2079: 0, 2080: 0, 2081: 1, 2082: 77, 2083: 0, 2084: 2, 2085: 0, 2086: 2, 2088: 0, 2089: 7, 2090: 8, 2091: 0, 2092: 0, 2093: 1, 2095: 1, 2096: 8, 2097: 3, 2098: 0, 2099: 0, 2100: 0, 2101: 0, 2102: 0, 2103: 2, 2104: 14, 2105: 0, 2106: 4, 2107: 0, 2108: 0, 2109: 8, 2110: 2, 2111: 0, 2112: 0, 2113: 0, 2114: 3, 2117: 1, 2118: 0, 2119: 0, 2120: 0, 2121: 15, 2122: 0, 2123: 8, 2125: 0, 2126: 0, 2127: 0, 2128: 0, 2130: 0, 2131: 34, 2132: 0, 2133: 0, 2134: 12, 2135: 0, 2136: 4, 2138: 0, 2139: 0, 2141: 0, 2142: 2, 2143: 0, 2144: 0, 2147: 0, 2148: 0, 2151: 2, 2153: 0, 2154: 0, 2156: 0, 2157: 23, 2158: 0, 2162: 11, 2163: 0, 2164: 5, 2165: 1, 2166: 6, 2167: 7, 2168: 0, 2169: 0, 2170: 55, 2171: 0, 2172: 2, 2173: 0, 2174: 0, 2175: 0, 2176: 56, 2177: 44, 2178: 0, 2179: 88, 2180: 3, 2181: 0, 2182: 0, 2184: 0, 2185: 0, 2186: 0, 2187: 0, 2188: 184, 2189: 1, 2190: 0, 2191: 76, 2192: 1, 2193: 0, 2194: 53, 2195: 5, 2196: 0, 2197: 0, 2202: 1, 2203: 3, 2204: 1, 2205: 0, 2206: 36, 2207: 33, 2208: 0, 2209: 0, 2210: 0, 2211: 0, 2212: 2, 2213: 0, 2214: 8, 2215: 0, 2216: 0, 2217: 1, 2218: 0, 2219: 16, 2220: 0, 2221: 8, 2222: 3, 2223: 37, 2224: 0, 2225: 0, 2227: 5, 2228: 0, 2229: 0, 2230: 0, 2232: 0, 2233: 2, 2234: 6, 2235: 0, 2236: 0, 2237: 0, 2239: 0, 2240: 0, 2241: 0, 2242: 0, 2243: 2, 2244: 10, 2245: 0, 2246: 19, 2247: 0, 2249: 4, 2250: 0, 2251: 3, 2252: 2, 2253: 0, 2254: 2, 2255: 3, 2256: 6, 2257: 2, 2258: 2, 2259: 4, 2260: 0, 2261: 0, 2262: 1, 2263: 0, 2264: 37, 2265: 0, 2267: 0, 2268: 23, 2270: 1, 2271: 0, 2272: 4, 2273: 0, 2274: 0, 2275: 19, 2276: 102, 2277: 0, 2278: 4, 2279: 103, 2280: 2, 2281: 5, 2282: 0, 2283: 0, 2284: 1, 2285: 0, 2286: 1, 2287: 36, 2288: 6, 2289: 0, 2290: 3, 2291: 2, 2293: 0, 2294: 2, 2295: 1, 2296: 2, 2297: 2, 2298: 1, 2299: 3, 2300: 0, 2301: 0, 2302: 0, 2303: 0, 2304: 2, 2305: 36, 2306: 0, 2307: 11, 2308: 7, 2309: 0, 2310: 5, 2311: 1, 2312: 6, 2313: 11, 2314: 0, 2315: 0, 2316: 2, 2317: 0, 2318: 0, 2319: 0, 2320: 0, 2321: 0, 2322: 9, 2323: 0, 2324: 6, 2325: 0, 2326: 9, 2327: 8, 2328: 1, 2329: 0, 2330: 6, 2332: 3, 2333: 8, 2334: 22, 2335: 1, 2336: 1, 2337: 6, 2338: 0, 2339: 0, 2340: 5, 2341: 3, 2342: 0, 2343: 0, 2344: 4, 2345: 5, 2346: 2, 2347: 15, 2348: 0, 2350: 0, 2351: 0, 2352: 1, 2353: 0, 2354: 0, 2355: 0, 2356: 1, 2358: 0, 2359: 73, 2360: 0, 2361: 2, 2364: 0, 2365: 2, 2366: 0, 2367: 0, 2370: 33, 2371: 0, 2372: 36, 2374: 2, 2375: 0, 2376: 0, 2377: 0, 2378: 13, 2379: 0, 2380: 2, 2381: 4, 2383: 0, 2384: 31, 2385: 0, 2386: 0, 2387: 7, 2388: 1, 2389: 0, 2390: 3, 2391: 0, 2392: 0, 2393: 0, 2394: 0, 2396: 0, 2397: 77, 2399: 1, 2400: 5, 2401: 2, 2402: 3, 2404: 4, 2405: 0, 2406: 0, 2407: 0, 2408: 0, 2409: 1, 2410: 0, 2411: 0, 2414: 0, 2415: 0, 2421: 0, 2422: 2, 2423: 4, 2425: 2, 2426: 2, 2428: 0, 2429: 8, 2430: 8, 2433: 5, 2435: 0, 2436: 0, 2437: 0, 2438: 0, 2439: 1, 2440: 5, 2441: 1, 2442: 44, 2443: 11, 2444: 0, 2445: 0, 2446: 0, 2447: 0, 2448: 0, 2449: 0, 2450: 0, 2451: 0, 2452: 8, 2453: 0, 2454: 3, 2455: 1, 2456: 1, 2457: 0, 2458: 1, 2459: 0, 2460: 1, 2461: 2, 2462: 0, 2463: 0, 2464: 0, 2465: 0, 2466: 0, 2467: 2, 2468: 0, 2469: 1, 2470: 1, 2471: 3, 2472: 0, 2473: 0, 2474: 1, 2476: 4, 2477: 2, 2478: 0, 2479: 0, 2481: 0, 2482: 0, 2483: 0, 2484: 0, 2485: 0, 2486: 0, 2487: 6, 2488: 4, 2490: 7, 2491: 2, 2492: 1, 2493: 0, 2494: 0, 2495: 2, 2496: 6, 2497: 4, 2498: 0, 2499: 0, 2500: 0, 2501: 3, 2502: 0, 2503: 0, 2504: 0, 2505: 0, 2506: 0, 2508: 2, 2509: 3, 2511: 0, 2512: 2, 2513: 7, 2514: 0, 2515: 0, 2516: 0, 2517: 1, 2518: 2, 2519: 0, 2520: 0, 2521: 1, 2522: 8, 2524: 1, 2525: 2, 2526: 18, 2527: 0, 2528: 12, 2529: 0, 2530: 0, 2531: 45, 2532: 0, 2533: 1, 2534: 0, 2535: 3, 2536: 0, 2537: 35, 2538: 10, 2539: 4, 2540: 0, 2541: 2, 2542: 0, 2543: 3, 2544: 1, 2545: 24, 2546: 0, 2547: 3, 2548: 18, 2549: 1, 2550: 2, 2551: 18, 2552: 0, 2553: 0, 2554: 7, 2555: 12, 2556: 2, 2558: 0, 2559: 18, 2560: 50, 2561: 0, 2562: 11, 2563: 0, 2564: 91, 2565: 0, 2566: 3, 2567: 0, 2568: 1, 2569: 7, 2570: 3, 2571: 0, 2572: 5, 2573: 0, 2574: 0, 2575: 6, 2576: 4, 2577: 3, 2578: 51, 2579: 0, 2580: 0, 2581: 7, 2582: 2, 2583: 0, 2584: 8, 2585: 0, 2586: 8, 2587: 2, 2589: 0, 2590: 7, 2591: 1, 2592: 0, 2593: 0, 2594: 0, 2595: 5, 2596: 3, 2597: 10, 2598: 0, 2599: 28, 2600: 0, 2601: 0, 2602: 4, 2603: 1, 2604: 5, 2605: 0, 2606: 0, 2607: 4, 2609: 3, 2610: 18, 2612: 18, 2613: 12, 2614: 0, 2615: 2, 2616: 8, 2618: 26, 2619: 6, 2620: 0, 2621: 30, 2622: 1, 2623: 6, 2624: 5, 2625: 0, 2626: 0, 2627: 0, 2628: 1, 2629: 2, 2630: 1, 2631: 1, 2632: 1, 2633: 9, 2635: 4, 2636: 0, 2637: 1, 2638: 9, 2639: 0, 2640: 0, 2641: 4, 2642: 3, 2643: 0, 2644: 0, 2645: 4, 2646: 0, 2647: 5, 2648: 0, 2649: 5, 2650: 41, 2651: 6, 2652: 0, 2653: 0, 2654: 0, 2655: 0, 2656: 4, 2657: 2, 2658: 2, 2659: 0, 2660: 0, 2661: 0, 2662: 4, 2663: 0, 2664: 2, 2665: 5, 2666: 0, 2667: 3, 2668: 0, 2669: 0, 2670: 2, 2671: 2, 2672: 1, 2673: 19, 2674: 0, 2675: 0, 2676: 0, 2677: 0, 2678: 2, 2679: 0, 2680: 1, 2681: 0, 2682: 0, 2683: 1, 2684: 0, 2685: 0, 2686: 0, 2687: 0, 2688: 24, 2689: 0, 2690: 1, 2691: 0, 2692: 0, 2694: 0, 2695: 0, 2696: 0, 2697: 1, 2699: 10, 2700: 0, 2701: 0, 2702: 0, 2703: 0, 2704: 0, 2705: 2, 2706: 3, 2707: 0, 2708: 3, 2709: 74, 2710: 6, 2711: 1, 2712: 1, 2713: 3, 2714: 8, 2715: 18, 2716: 1, 2717: 1, 2718: 1, 2719: 1, 2720: 0, 2722: 1, 2723: 0, 2724: 2, 2725: 1, 2726: 2, 2727: 0, 2728: 2, 2729: 8, 2730: 0, 2731: 2, 2732: 2, 2733: 1, 2734: 1, 2735: 0, 2736: 0, 2737: 0, 2738: 2, 2739: 4, 2740: 0, 2741: 1, 2742: 2, 2743: 1, 2744: 0, 2745: 18, 2746: 1, 2747: 1, 2748: 2, 2749: 8, 2750: 2, 2751: 2, 2752: 1, 2753: 3, 2754: 0, 2755: 1, 2756: 4, 2758: 0, 2759: 7, 2760: 0, 2761: 3, 2762: 16, 2763: 0, 2764: 1, 2765: 0, 2766: 0, 2767: 4, 2768: 5, 2769: 6, 2770: 0, 2771: 12, 2772: 2, 2773: 7, 2774: 4, 2775: 0, 2776: 0, 2777: 0, 2778: 0, 2780: 0, 2781: 3, 2782: 0, 2783: 0, 2784: 0, 2785: 1, 2786: 1, 2787: 1, 2788: 1, 2789: 56, 2790: 0, 2791: 0, 2792: 3, 2794: 0, 2795: 0, 2796: 1, 2797: 0, 2799: 0, 2800: 0, 2801: 4, 2802: 5, 2803: 0, 2804: 1, 2805: 0, 2806: 3, 2807: 2, 2808: 2, 2809: 1, 2810: 0, 2812: 5, 2813: 0, 2814: 0, 2816: 12, 2817: 0, 2818: 0, 2819: 0, 2820: 0, 2821: 6, 2822: 1, 2823: 0, 2824: 3, 2826: 0, 2827: 0, 2828: 0, 2829: 0, 2830: 1, 2831: 0, 2832: 0, 2833: 1, 2834: 0, 2835: 1, 2836: 0, 2837: 0, 2838: 0, 2839: 0, 2840: 0, 2841: 0, 2842: 0, 2843: 0, 2844: 3, 2845: 0, 2846: 1, 2847: 0, 2848: 8, 2849: 1, 2850: 14, 2851: 46, 2852: 2, 2853: 1, 2854: 2, 2855: 0, 2856: 6, 2857: 0, 2858: 1, 2859: 0, 2860: 1, 2861: 2, 2862: 0, 2863: 0, 2864: 1, 2865: 0, 2866: 0, 2867: 0, 2868: 6, 2870: 1, 2871: 0, 2872: 0, 2873: 0, 2874: 23, 2875: 19, 2876: 0, 2877: 9, 2878: 11, 2879: 2, 2881: 13, 2882: 8, 2883: 19, 2884: 5, 2885: 4, 2886: 0, 2887: 0, 2888: 1, 2889: 2, 2890: 49, 2891: 6, 2893: 7, 2894: 12, 2895: 25, 2896: 6, 2897: 19, 2898: 1, 2899: 34, 2900: 4, 2901: 5, 2902: 21, 2903: 5, 2905: 0, 2906: 0, 2907: 5, 2908: 45, 2909: 0, 2910: 34, 2911: 4, 2912: 22, 2913: 13, 2914: 9, 2916: 3, 2917: 3, 2918: 3, 2920: 4, 2922: 38, 2923: 20, 2925: 6, 2926: 5, 2927: 20, 2929: 0, 2930: 4, 2931: 1, 2932: 4, 2933: 9, 2934: 15, 2935: 8, 2936: 4, 2937: 25, 2938: 9, 2939: 62, 2940: 12, 2941: 9, 2942: 5, 2944: 20, 2945: 16, 2947: 12, 2948: 111, 2949: 5, 2950: 0, 2951: 0, 2952: 10, 2953: 0, 2954: 41, 2955: 4, 2956: 2, 2957: 2, 2958: 15, 2960: 35, 2961: 4, 2962: 16, 2963: 3, 2964: 22, 2965: 18, 2966: 7, 2967: 10, 2968: 14, 2969: 2, 2972: 9, 2973: 5, 2974: 12, 2975: 66, 2976: 11, 2977: 0, 2978: 0, 2979: 31, 2980: 4, 2981: 6, 2983: 57, 2984: 0, 2985: 143, 2986: 0, 2987: 6, 2988: 73, 2989: 6, 2990: 21, 2991: 5, 2992: 19, 2993: 20, 2994: 16, 2995: 0, 2996: 2, 2997: 83, 2998: 0, 2999: 1, 3000: 1, 3001: 2, 3002: 3, 3003: 1, 3004: 0, 3005: 0, 3006: 0, 3007: 10, 3008: 6, 3009: 2, 3010: 1, 3011: 0, 3012: 2, 3013: 0, 3014: 0, 3015: 8, 3016: 0, 3017: 12, 3018: 2, 3019: 1, 3020: 7, 3021: 0, 3022: 2, 3023: 2, 3024: 40, 3025: 0, 3026: 0, 3027: 0, 3028: 0, 3029: 0, 3030: 1, 3033: 0, 3034: 15, 3035: 20, 3036: 0, 3037: 0, 3038: 3, 3039: 3, 3040: 5, 3041: 0, 3042: 6, 3043: 35, 3044: 0, 3045: 0, 3048: 0, 3049: 0, 3050: 5, 3051: 0, 3052: 0, 3053: 0, 3054: 0, 3055: 3, 3056: 0, 3057: 4, 3058: 0, 3059: 0, 3061: 5, 3062: 0, 3063: 4, 3064: 0, 3065: 0, 3066: 8, 3067: 0, 3068: 1, 3069: 11, 3070: 0, 3071: 1, 3072: 2, 3073: 2, 3074: 4, 3075: 0, 3076: 33, 3077: 131, 3078: 0, 3079: 3, 3080: 2, 3081: 5, 3082: 0, 3084: 6, 3085: 1, 3087: 0, 3089: 3, 3091: 0, 3092: 2, 3093: 96, 3094: 1, 3095: 0, 3096: 0, 3097: 2, 3098: 8, 3099: 0, 3100: 4, 3101: 1, 3102: 0, 3103: 1, 3104: 3, 3105: 9, 3107: 0, 3108: 0, 3109: 0, 3112: 6, 3113: 0, 3115: 7, 3116: 5, 3117: 0, 3118: 3, 3119: 0, 3120: 16, 3121: 38, 3122: 1, 3124: 0, 3125: 30, 3127: 1, 3128: 0, 3129: 1, 3130: 1, 3131: 39, 3132: 0, 3134: 1, 3135: 7, 3136: 20, 3137: 17, 3138: 0, 3140: 0, 3141: 0, 3142: 2, 3143: 9, 3144: 37, 3145: 0, 3146: 4, 3147: 0, 3148: 0, 3149: 0, 3150: 0, 3151: 0, 3152: 4, 3153: 16, 3155: 5, 3156: 27, 3157: 48, 3158: 0, 3159: 0, 3161: 2, 3162: 0, 3163: 1, 3164: 1, 3165: 0, 3166: 0, 3167: 0, 3169: 0, 3170: 2, 3171: 0, 3172: 0, 3173: 1, 3174: 6, 3175: 0, 3176: 0, 3177: 10, 3178: 0, 3179: 32, 3180: 1, 3181: 5, 3182: 1, 3183: 4, 3184: 1, 3185: 0, 3186: 1, 3187: 0, 3188: 0, 3196: 20, 3197: 0, 3198: 0, 3199: 45, 3200: 0, 3201: 2, 3204: 3, 3205: 51, 3207: 0, 3208: 0, 3209: 3, 3211: 0, 3213: 4, 3214: 0, 3215: 2, 3217: 1, 3220: 0, 3221: 0, 3222: 8, 3223: 2, 3224: 3, 3226: 0, 3227: 0, 3228: 0, 3229: 0, 3230: 0, 3232: 1, 3233: 0, 3234: 0, 3235: 2, 3236: 2, 3237: 4, 3238: 0, 3239: 28, 3240: 23, 3241: 2, 3242: 3, 3243: 3, 3244: 9, 3245: 1, 3246: 1, 3247: 2, 3249: 4, 3250: 11, 3251: 1, 3252: 0, 3253: 3, 3254: 1, 3256: 10, 3257: 4, 3258: 3, 3259: 1, 3260: 5, 3261: 6, 3262: 5, 3263: 13, 3264: 1, 3265: 5, 3266: 20, 3267: 6, 3268: 1, 3269: 30, 3270: 3, 3271: 5, 3272: 14, 3273: 7, 3274: 0, 3275: 63, 3276: 0, 3277: 0, 3278: 0, 3279: 0, 3280: 0, 3281: 0, 3282: 2, 3284: 4, 3287: 2, 3288: 2, 3289: 8, 3291: 0, 3292: 0, 3294: 3, 3295: 0, 3296: 2, 3297: 0, 3298: 7, 3299: 3, 3300: 1, 3301: 0, 3302: 1, 3303: 12, 3304: 110, 3305: 5, 3306: 0, 3307: 4, 3308: 20, 3309: 0, 3310: 3, 3311: 0, 3312: 0, 3313: 0, 3314: 0, 3315: 0, 3316: 123, 3317: 0, 3318: 1, 3319: 8, 3320: 60, 3321: 13, 3322: 30, 3323: 4, 3324: 9, 3325: 2, 3326: 5, 3328: 2, 3329: 3, 3330: 10, 3331: 1, 3332: 1, 3333: 2, 3334: 2, 3335: 0, 3336: 3, 3337: 5, 3338: 0, 3339: 54, 3340: 0, 3341: 26, 3343: 0, 3344: 0, 3345: 6, 3346: 3, 3347: 3, 3348: 1, 3349: 6, 3350: 0, 3351: 37, 3352: 0, 3353: 2, 3354: 0, 3355: 6, 3356: 2, 3357: 0, 3358: 2, 3359: 3, 3360: 0, 3361: 85, 3362: 1, 3363: 2, 3364: 197, 3366: 8, 3368: 49, 3369: 46, 3370: 140, 3371: 70, 3372: 40, 3373: 44, 3374: 83, 3375: 55, 3376: 65, 3377: 4, 3378: 32, 3379: 83, 3380: 14, 3381: 9, 3382: 91, 3383: 69, 3384: 38, 3385: 46, 3386: 71, 3387: 38, 3388: 54, 3389: 35, 3390: 52, 3391: 65, 3392: 23, 3393: 82, 3394: 48, 3395: 101, 3396: 3, 3397: 4, 3398: 1, 3399: 54, 3400: 54, 3402: 6, 3404: 55, 3406: 149, 3407: 0, 3408: 12, 3409: 1, 3410: 19, 3411: 2, 3413: 1, 3414: 1, 3415: 3, 3416: 0, 3417: 3, 3418: 0, 3419: 0, 3420: 3, 3421: 0, 3422: 0, 3423: 0, 3424: 0, 3425: 0, 3426: 2, 3427: 0, 3428: 2, 3429: 1, 3430: 1, 3431: 0, 3432: 0, 3433: 0, 3434: 0, 3435: 0, 3436: 0, 3437: 2, 3438: 0, 3439: 0, 3440: 0, 3441: 0, 3442: 5, 3443: 0, 3444: 0, 3445: 1, 3446: 1, 3447: 14, 3448: 103, 3449: 0, 3450: 0, 3451: 0, 3452: 0, 3453: 35, 3454: 20, 3455: 0, 3456: 21, 3457: 12, 3458: 43, 3459: 11, 3460: 2, 3461: 2, 3462: 90, 3463: 6, 3464: 0, 3465: 1, 3466: 0, 3467: 10, 3468: 0, 3469: 105, 3470: 0, 3471: 0, 3472: 5, 3473: 32, 3474: 0, 3475: 0, 3476: 0, 3477: 0, 3478: 0, 3479: 0, 3480: 0, 3481: 0, 3482: 0, 3483: 0, 3484: 148, 3485: 0, 3486: 56, 3487: 0, 3488: 46, 3489: 0, 3490: 0, 3491: 1, 3492: 12, 3493: 3, 3494: 153, 3495: 16, 3496: 0, 3497: 1, 3498: 4, 3499: 0, 3500: 0, 3501: 0, 3502: 23, 3503: 0, 3504: 5, 3505: 0, 3506: 0, 3507: 0, 3508: 0, 3509: 0, 3510: 0, 3511: 0, 3512: 0, 3513: 2, 3514: 11, 3515: 23, 3516: 0, 3517: 6, 3518: 0, 3519: 0, 3520: 91, 3521: 0, 3522: 0, 3523: 0, 3524: 9, 3525: 0, 3527: 1, 3528: 1, 3530: 0, 3531: 3, 3532: 0, 3533: 97, 3534: 0, 3535: 2, 3536: 92, 3537: 0, 3538: 0, 3539: 0, 3541: 0, 3542: 12, 3543: 3, 3544: 6, 3545: 1, 3546: 1, 3547: 0, 3548: 0, 3549: 0, 3550: 168, 3551: 0, 3552: 0, 3553: 0, 3554: 0, 3555: 0, 3556: 0, 3557: 0, 3558: 5, 3559: 13, 3560: 7, 3561: 10, 3562: 0, 3563: 0, 3564: 11, 3565: 0, 3566: 48, 3567: 0, 3568: 0, 3569: 0, 3570: 37, 3571: 7, 3572: 0, 3573: 0, 3574: 0, 3575: 0, 3576: 138, 3577: 93, 3578: 8, 3579: 0, 3580: 9, 3581: 0, 3582: 12, 3583: 0, 3584: 1, 3585: 35, 3586: 0, 3587: 0, 3588: 0, 3589: 16, 3590: 0, 3591: 1, 3592: 0, 3593: 0, 3594: 0, 3595: 0, 3596: 2, 3597: 1, 3598: 4, 3599: 22, 3600: 0, 3601: 0, 3602: 11, 3603: 0, 3604: 1, 3605: 0, 3606: 0, 3607: 0, 3608: 19, 3609: 5, 3610: 2, 3611: 19, 3612: 1, 3613: 13, 3614: 0, 3615: 15, 3616: 0, 3617: 31, 3618: 0, 3619: 0, 3620: 5, 3621: 35, 3622: 18, 3623: 0, 3624: 1, 3625: 0, 3626: 39, 3627: 16, 3628: 1, 3629: 0, 3630: 5, 3631: 0, 3632: 0, 3633: 5, 3634: 0, 3635: 0, 3636: 16, 3637: 0, 3638: 0, 3639: 0, 3640: 0, 3641: 19, 3642: 2, 3643: 0, 3644: 12, 3645: 135, 3646: 69, 3647: 0, 3648: 0, 3649: 0, 3650: 1, 3651: 0, 3652: 7, 3653: 4, 3654: 0, 3655: 0, 3656: 0, 3657: 0, 3658: 3, 3659: 2, 3660: 17, 3661: 5, 3662: 0, 3663: 0, 3664: 1, 3665: 1, 3666: 0, 3667: 0, 3668: 0, 3669: 0, 3670: 188, 3671: 2, 3672: 0, 3673: 42, 3674: 2, 3675: 2, 3676: 17, 3677: 0, 3678: 61, 3679: 0, 3680: 1, 3681: 0, 3682: 217, 3683: 0, 3684: 0, 3685: 20, 3686: 0, 3687: 11, 3688: 0, 3689: 2, 3690: 47, 3691: 3, 3692: 0, 3693: 13, 3694: 2, 3695: 0, 3696: 3, 3697: 70, 3698: 7, 3699: 0, 3700: 1, 3701: 1, 3702: 0, 3704: 2, 3705: 3, 3706: 0, 3707: 0, 3708: 1, 3709: 0, 3710: 1, 3711: 10, 3712: 26, 3713: 3, 3714: 126, 3715: 2, 3716: 0, 3717: 30, 3718: 1, 3719: 2, 3720: 58, 3721: 0, 3722: 23, 3723: 0, 3724: 1, 3726: 3, 3727: 0, 3728: 52, 3729: 17, 3730: 2, 3731: 57, 3732: 3, 3733: 0, 3734: 15, 3735: 0, 3736: 1, 3737: 0, 3738: 2, 3739: 1, 3740: 0, 3742: 0, 3743: 3, 3744: 4, 3745: 16, 3746: 0, 3747: 72, 3748: 30, 3749: 1, 3750: 0, 3751: 168, 3752: 122, 3753: 1, 3754: 2, 3755: 0, 3756: 0, 3757: 0, 3758: 0, 3759: 33, 3760: 0, 3761: 0, 3762: 0, 3763: 0, 3764: 6, 3765: 0, 3766: 0, 3767: 0, 3768: 0, 3769: 0, 3770: 1, 3771: 5, 3772: 0, 3773: 0, 3774: 34, 3775: 3, 3776: 0, 3777: 9, 3778: 0, 3779: 0, 3780: 0, 3781: 0, 3782: 5, 3783: 0, 3784: 3, 3785: 0, 3786: 0, 3787: 0, 3788: 0, 3789: 0, 3790: 1, 3791: 0, 3792: 0, 3793: 33, 3794: 8, 3795: 0, 3796: 2, 3797: 161, 3798: 0, 3799: 0, 3800: 0, 3801: 0, 3802: 0, 3803: 0, 3804: 2, 3805: 1, 3806: 20, 3807: 14, 3808: 7, 3809: 0, 3810: 0, 3811: 20, 3812: 0, 3814: 0, 3815: 0, 3816: 1, 3817: 29, 3818: 0, 3819: 11, 3820: 20, 3821: 0, 3822: 0, 3823: 0, 3824: 1, 3825: 26, 3826: 5, 3827: 0, 3828: 0, 3829: 8, 3830: 205, 3831: 0, 3832: 13, 3833: 0, 3834: 0, 3835: 0, 3836: 0, 3837: 0, 3838: 2, 3839: 17, 3840: 6, 3841: 0, 3842: 0, 3843: 1, 3844: 0, 3845: 5, 3846: 4, 3848: 2, 3849: 72, 3850: 0, 3851: 3, 3852: 3, 3853: 0, 3854: 4, 3855: 18, 3856: 2, 3857: 11, 3858: 131, 3859: 6, 3860: 2, 3861: 39, 3862: 12, 3863: 22, 3864: 19, 3865: 1, 3866: 0, 3867: 22, 3868: 0, 3869: 0, 3870: 0, 3871: 0, 3872: 3, 3873: 5, 3874: 0, 3875: 8, 3876: 140, 3877: 133, 3878: 102, 3879: 1, 3880: 7, 3881: 4, 3882: 0, 3883: 0, 3884: 0, 3885: 120, 3886: 1, 3887: 0, 3888: 0, 3889: 0, 3890: 2, 3891: 0, 3892: 0, 3893: 0, 3894: 2, 3895: 0, 3896: 9, 3897: 0, 3898: 13, 3899: 0, 3900: 0, 3901: 9, 3903: 17, 3904: 2, 3905: 4, 3906: 1, 3907: 0, 3908: 7, 3909: 0, 3910: 8, 3911: 2, 3913: 2, 3914: 2, 3915: 0, 3916: 6, 3917: 2, 3919: 14, 3920: 5, 3921: 0, 3922: 0, 3923: 0, 3924: 2, 3927: 1, 3928: 26, 3929: 4, 3930: 131, 3931: 26, 3932: 3, 3933: 1, 3935: 0, 3936: 1, 3937: 2, 3938: 2, 3939: 1, 3940: 42, 3941: 103, 3942: 43, 3943: 8, 3944: 2, 3945: 4, 3946: 5, 3947: 3, 3948: 6, 3949: 6, 3950: 2, 3952: 0, 3953: 68, 3954: 0, 3955: 0, 3956: 19, 3957: 0, 3958: 3, 3959: 46, 3960: 0, 3962: 0, 3963: 0, 3964: 33, 3965: 1, 3966: 0, 3967: 9, 3968: 1, 3969: 0, 3971: 5, 3972: 9, 3973: 25, 3974: 9, 3975: 6, 3976: 4, 3977: 16, 3978: 1, 3979: 1, 3980: 24, 3982: 0, 3984: 1, 3985: 0, 3986: 21, 3987: 2, 3988: 41, 3989: 19, 3990: 1, 3991: 0, 3992: 56, 3994: 1, 3995: 5, 3996: 0, 3997: 3, 3998: 127, 3999: 20, 4000: 3, 4004: 0, 4005: 0, 4006: 1, 4007: 8, 4008: 14, 4009: 9, 4010: 3, 4011: 14, 4012: 1, 4013: 2, 4014: 23, 4015: 6, 4016: 9, 4017: 13, 4018: 4, 4019: 23, 4020: 7, 4021: 12, 4022: 1, 4023: 3, 4024: 1, 4025: 1, 4026: 1, 4027: 2, 4028: 5, 4029: 186, 4030: 41, 4031: 0, 4033: 28, 4034: 20, 4037: 8, 4038: 4, 4039: 4, 4040: 4, 4041: 10, 4042: 2, 4043: 11, 4044: 2, 4045: 3, 4046: 10, 4047: 7, 4048: 3, 4049: 2, 4050: 2, 4051: 1, 4052: 2, 4054: 4, 4056: 4, 4057: 19, 4058: 2, 4059: 64, 4060: 0, 4061: 3, 4062: 1, 4063: 6, 4064: 2, 4065: 0, 4066: 0, 4067: 6, 4069: 8, 4071: 0, 4072: 10, 4073: 0, 4074: 19, 4075: 30, 4076: 3, 4077: 1, 4078: 51, 4080: 0, 4081: 1, 4083: 5, 4084: 0, 4085: 30, 4086: 1, 4087: 7, 4088: 1, 4089: 8, 4090: 9, 4091: 30, 4092: 6, 4093: 1, 4094: 0, 4095: 3, 4096: 0, 4097: 15, 4098: 1, 4099: 9, 4100: 4, 4101: 7, 4102: 0, 4103: 6, 4104: 0, 4105: 13, 4106: 1, 4107: 0, 4108: 41, 4109: 18, 4110: 7, 4111: 19, 4112: 11, 4113: 9, 4114: 1, 4115: 3, 4116: 4, 4117: 1, 4119: 13, 4120: 38, 4121: 0, 4124: 3, 4125: 1, 4127: 5, 4128: 4, 4129: 3, 4130: 12, 4131: 2, 4132: 1, 4133: 1, 4135: 1, 4136: 0, 4137: 0, 4138: 0, 4139: 0, 4140: 7, 4141: 4, 4142: 1, 4143: 1, 4144: 60, 4146: 0, 4147: 2, 4148: 9, 4149: 18, 4151: 0, 4152: 0, 4153: 3, 4155: 1, 4156: 1, 4157: 2, 4158: 2, 4159: 1, 4160: 1, 4161: 12, 4162: 8, 4165: 0, 4166: 18, 4167: 50, 4169: 2, 4170: 0, 4171: 0, 4172: 0, 4173: 0, 4174: 0, 4175: 0, 4177: 0, 4178: 0, 4179: 0, 4180: 0, 4182: 0, 4183: 1, 4184: 0, 4185: 0, 4186: 0, 4187: 0, 4188: 1, 4189: 5, 4190: 2, 4191: 3, 4192: 3, 4193: 1, 4194: 1, 4195: 1, 4196: 1, 4197: 4, 4198: 38, 4199: 2, 4200: 2, 4201: 3, 4202: 1, 4203: 2, 4204: 2, 4206: 29, 4207: 0, 4208: 0, 4209: 6, 4213: 0, 4214: 3, 4215: 2, 4216: 7, 4217: 2, 4218: 1, 4219: 1, 4220: 0, 4221: 0, 4222: 0, 4223: 0, 4224: 0, 4225: 0, 4226: 0, 4227: 0, 4228: 0, 4229: 0, 4230: 0, 4231: 0, 4235: 2, 4236: 0, 4237: 2, 4238: 2, 4239: 2, 4242: 5, 4244: 0, 4247: 3, 4249: 2, 4250: 1, 4252: 4, 4253: 0, 4254: 0, 4255: 1, 4256: 1, 4257: 0, 4261: 1, 4262: 0, 4263: 1, 4265: 4, 4268: 0, 4270: 0, 4271: 2, 4272: 0, 4273: 1, 4274: 15, 4275: 0, 4276: 3, 4278: 3, 4280: 0, 4284: 2, 4285: 9, 4286: 6, 4287: 1, 4289: 0, 4290: 0, 4291: 3, 4292: 10, 4293: 0, 4295: 0, 4296: 3, 4297: 4, 4299: 0, 4300: 1, 4301: 5, 4302: 24, 4303: 0, 4304: 7, 4305: 2, 4306: 1, 4307: 0, 4308: 4, 4309: 10, 4312: 3, 4313: 0, 4314: 2, 4315: 21, 4316: 0, 4317: 97, 4318: 4, 4319: 8, 4320: 5, 4321: 0, 4322: 4, 4325: 9, 4326: 3, 4327: 6, 4328: 8, 4330: 43, 4331: 38, 4333: 0, 4335: 1, 4336: 4, 4338: 1, 4339: 1, 4340: 0, 4341: 2, 4342: 0, 4343: 0, 4344: 2, 4345: 4, 4347: 3, 4348: 9, 4349: 1, 4350: 5, 4351: 0, 4352: 11, 4353: 3, 4354: 1, 4355: 9, 4356: 14, 4357: 7, 4358: 4, 4359: 9, 4360: 0, 4362: 6, 4363: 5, 4364: 10, 4365: 5, 4367: 17, 4368: 4, 4369: 2, 4370: 0, 4371: 3, 4372: 0, 4373: 1, 4374: 28, 4375: 6, 4376: 0, 4377: 3, 4379: 0, 4380: 28, 4381: 10, 4382: 0, 4383: 0, 4384: 3, 4386: 3, 4387: 0, 4388: 1, 4390: 0, 5404: 1, 5405: 0, 5406: 0, 5407: 2, 5408: 0, 5409: 3, 5410: 1, 5411: 5, 5412: 5, 5413: 0, 5414: 1, 5415: 1, 5416: 3, 5417: 3, 5418: 3, 5419: 3, 5420: 1, 5421: 3, 5422: 3, 5423: 3, 5424: 3, 5425: 4, 5426: 0, 5427: 0, 5428: 3, 5429: 1, 5430: 5, 5431: 3, 5432: 2, 5433: 3, 5434: 3, 5435: 7, 5436: 3, 5437: 1, 5438: 2, 5439: 1, 5440: 2, 5441: 0, 5442: 4, 5443: 2, 5444: 2, 5445: 2, 5446: 2, 5447: 3, 5448: 2, 5449: 2, 5450: 0, 5452: 0, 5453: 0, 5456: 0, 5457: 2, 5458: 0, 5459: 0, 5460: 0, 5461: 2, 5462: 0, 5463: 1, 5464: 0, 5465: 0, 5466: 0, 5467: 0, 5468: 0, 5469: 0, 5470: 0, 5471: 0, 5472: 0, 5473: 2, 5474: 2, 5478: 0, 5479: 3, 5480: 0, 5481: 0, 5482: 0, 5483: 0, 5484: 0, 5485: 1, 5486: 0, 5487: 3, 5488: 1, 5489: 0, 5490: 0, 5491: 0, 5492: 2, 5493: 0, 5494: 0, 5495: 3, 5496: 0, 5497: 2, 5498: 1, 5499: 0, 5500: 1, 5501: 0, 5502: 1, 5503: 3, 5504: 0, 5505: 0, 5506: 0, 5507: 0, 5508: 0, 5509: 1, 5510: 0, 5511: 1, 5512: 0, 5513: 0, 5514: 0, 5515: 0, 5516: 0, 5517: 0, 5518: 0, 5519: 0, 5520: 0, 5521: 0, 5522: 0, 5523: 1, 5524: 3, 5525: 0, 5526: 1, 5527: 3, 5528: 0, 5529: 1, 5530: 0, 5531: 0, 5532: 0, 5533: 0, 5534: 3, 5535: 0, 5536: 0, 5537: 0, 5538: 1, 5539: 0, 5540: 0, 5541: 0, 5542: 0, 5543: 0, 5544: 0, 5545: 1, 5546: 0, 5547: 0, 5548: 0, 5549: 0, 5550: 0, 5551: 0, 5552: 4, 5553: 1, 5554: 1, 5555: 1, 5556: 1, 5557: 5, 5558: 0, 5559: 0, 5560: 0, 5561: 0, 5562: 8, 5563: 1, 5564: 2, 5565: 0, 5566: 4, 5567: 3, 5568: 2, 5569: 3, 5570: 0, 5571: 2, 5572: 1, 5573: 0, 5574: 1, 5575: 1, 5577: 2, 5578: 0, 5579: 0, 5580: 3, 5581: 3, 5582: 5, 5583: 3, 5584: 2, 5585: 2, 5586: 4, 5587: 3, 5588: 3, 5589: 3, 5590: 0, 5591: 3, 5592: 0, 5593: 2, 5594: 2, 5595: 2, 5596: 2, 5597: 2, 5598: 0, 5599: 1, 5602: 0, 5603: 0, 5604: 4, 5605: 0, 5606: 0, 5607: 0, 5608: 0, 5609: 0, 5610: 0, 5611: 0, 5612: 1, 5613: 2, 5614: 0, 5615: 0, 5616: 0, 5617: 0, 5618: 0, 5619: 0, 5620: 0, 5621: 0, 5622: 0, 5623: 0, 5624: 0, 5625: 0, 5626: 0, 5627: 0, 5628: 0, 5629: 0, 5630: 2, 5631: 0, 5632: 6, 5633: 1, 5634: 0, 5635: 0, 5636: 0, 5637: 1, 5639: 0, 5640: 0, 5641: 2, 5642: 1, 5643: 2, 5644: 0, 5645: 3, 5646: 0, 5647: 0, 5648: 0, 5649: 0, 5650: 0, 5651: 0, 5652: 2, 5653: 1, 5654: 0, 5659: 1, 5662: 0, 5663: 0, 5664: 0, 5665: 5, 5669: 0, 5670: 3, 5671: 2, 5672: 3, 5673: 12, 5674: 15, 5675: 1, 5676: 0, 5677: 0, 5678: 0, 5679: 0, 5680: 1, 5681: 0, 5682: 0, 5683: 0, 5684: 0, 5685: 0, 5686: 2, 5687: 7, 5688: 1, 5689: 0, 5690: 0, 5691: 5, 5692: 1, 5693: 1, 5694: 3, 5695: 2, 5696: 2, 5697: 3, 5698: 0, 5699: 2, 5700: 0, 5701: 1, 5702: 4, 5703: 1, 5704: 0, 5705: 0, 5706: 0, 5707: 0, 5708: 0, 5709: 1, 5710: 0, 5711: 2, 5714: 1, 5715: 1, 5716: 1, 5717: 0, 5718: 1, 5719: 1, 5720: 2, 5721: 2, 5722: 2, 5723: 1, 5724: 2, 5725: 1, 5726: 2, 5727: 2, 5728: 1, 5729: 1, 5730: 3, 5731: 1, 5732: 1, 5733: 2, 5734: 2, 5735: 1, 5736: 1, 5737: 3, 5738: 4, 5739: 1, 5740: 3, 5741: 2, 5742: 4, 5743: 0, 5744: 1, 5745: 0, 5746: 1, 5747: 3, 5748: 1, 5749: 2, 5750: 2, 5751: 1, 5752: 0, 5753: 1, 5754: 1, 5755: 0, 5756: 1, 5757: 2, 5758: 2, 5759: 1, 5760: 1, 5761: 3, 5762: 1, 5763: 1, 5764: 0, 5765: 2, 5766: 3, 5767: 1, 5768: 3, 5769: 1, 5770: 1, 5771: 1, 5772: 2, 5773: 2, 5774: 1, 5775: 1, 5776: 1, 5777: 1, 5779: 1, 5780: 8, 5781: 1, 5782: 0, 5783: 0, 5786: 0, 5787: 1, 5788: 0, 5789: 0, 5790: 0, 5791: 0, 5792: 0, 5793: 2, 5794: 3, 5795: 0, 5796: 3, 5797: 0, 5798: 3, 5799: 2, 5800: 2, 5801: 1, 5802: 1, 5803: 0, 5806: 0, 5807: 3, 5808: 0, 5809: 1, 5810: 5, 5811: 2, 5812: 0, 5813: 0, 5814: 0, 5831: 0, 5832: 2, 5833: 0, 5834: 0, 5835: 0, 5836: 0, 5837: 1, 5838: 0, 5839: 0, 5840: 1, 5841: 0, 5842: 1, 5843: 0, 5844: 2, 5845: 0, 5847: 2, 5848: 1, 5849: 0, 5850: 0, 5851: 0, 5852: 0, 5853: 0, 5856: 0, 5857: 1, 5858: 0, 5859: 2, 5860: 0, 5861: 2, 5862: 1, 5863: 0, 5864: 1, 5865: 1, 5866: 0, 5867: 1, 5868: 0, 5869: 2, 5870: 0, 5871: 0, 5872: 0, 5873: 1, 5874: 2, 5875: 3, 5876: 0, 5877: 1, 5878: 3, 5879: 0, 5880: 0, 5881: 0, 5882: 0, 5883: 1, 5884: 1, 5885: 1, 5887: 0, 5888: 0, 5889: 3, 5890: 4, 5891: 3, 5892: 3, 5893: 3, 5894: 3, 5895: 3, 5896: 1, 5897: 4, 5898: 2, 5899: 1, 5900: 2, 5901: 2, 5902: 2, 5903: 1, 5904: 3, 5905: 5, 5906: 3, 5907: 0, 5908: 10, 5909: 1, 5910: 3, 5911: 1, 5912: 2, 5913: 0, 5914: 1, 5915: 2, 5916: 2, 5917: 2, 5918: 3, 5919: 2, 5920: 2, 5921: 1, 5922: 0, 5924: 2, 5925: 2, 5926: 0, 5927: 1, 5928: 1, 5929: 0, 5930: 1, 5931: 1, 5932: 2, 5933: 4, 5934: 5, 5935: 2, 5936: 3, 5937: 2, 5938: 0, 5939: 4, 5940: 2, 5941: 2, 5942: 3, 5943: 2, 5944: 0, 5945: 0, 5946: 0, 5947: 0, 5948: 0, 5949: 1, 5950: 0, 5951: 6, 5952: 7, 5953: 0, 5954: 4, 5959: 1, 5960: 2, 5961: 2, 5962: 2, 5963: 2, 5964: 3, 5965: 2, 5966: 1, 5967: 7, 5968: 3, 5969: 2, 5989: 0, 5990: 0, 5991: 0, 5992: 0, 5993: 0, 5994: 3, 5995: 0, 5996: 3, 5997: 6, 5998: 1, 5999: 2, 6000: 1, 6001: 1, 6002: 0, 6003: 1, 6004: 0, 6005: 1, 6006: 1, 6007: 2, 6008: 4, 6009: 0, 6010: 0, 6011: 0, 6012: 1, 6013: 1, 6014: 0, 6016: 2, 6017: 0, 6018: 1, 6019: 1, 6020: 0, 6021: 1, 6022: 1, 6023: 1, 6024: 1, 6025: 1, 6026: 1, 6027: 0, 6028: 0, 6029: 0, 6030: 0, 6031: 0, 6032: 0, 6033: 0, 6034: 5, 6036: 1, 6037: 3, 6038: 2, 6039: 4, 6040: 3, 6041: 0, 6042: 0, 6043: 0, 6044: 0, 6045: 1, 6046: 2, 6047: 3, 6048: 0, 6049: 0, 6050: 0, 6051: 1, 6052: 1, 6053: 1, 6054: 2, 6055: 1, 6056: 1, 6057: 0, 6058: 1, 6059: 0, 6060: 0, 6061: 0, 6062: 0, 6065: 0, 6066: 1, 6067: 1, 6068: 0, 6069: 2, 6070: 0, 6071: 0, 6072: 2, 6073: 1, 6074: 0, 6075: 0, 6076: 0, 6077: 0, 6078: 0, 6079: 6, 6080: 2, 6081: 0, 6082: 0, 6083: 2, 6084: 2, 6085: 2, 6086: 5, 6088: 3, 6089: 5, 6090: 2, 6091: 0, 6092: 4, 6093: 1, 6094: 1, 6095: 1, 6097: 0, 6098: 2, 6099: 0, 6100: 0, 6101: 0, 6102: 0, 6103: 2, 6104: 0, 6105: 9, 6106: 1, 6107: 0, 6108: 0, 6109: 1, 6110: 1, 6111: 6, 6112: 0, 6113: 0, 6114: 1, 6115: 0, 6116: 0, 6117: 0, 6118: 1, 6119: 2, 6120: 0, 6121: 1, 6122: 1, 6123: 0, 6124: 1, 6125: 1, 6126: 0, 6128: 0, 6130: 1, 6133: 8, 6134: 1, 6136: 0, 6137: 8, 6138: 8, 6139: 3, 6140: 5, 6141: 3, 6142: 3, 6143: 7, 6144: 0, 6145: 0, 6146: 2, 6147: 19, 6148: 3, 6149: 6, 6150: 9, 6151: 3, 6152: 7, 6153: 3, 6154: 2, 6155: 0, 6156: 9, 6157: 1, 6158: 0, 6159: 2, 6160: 3, 6161: 0, 6162: 2, 6163: 0, 6164: 1, 6165: 1, 6166: 2, 6167: 0, 6168: 2, 6169: 1, 6170: 0, 6171: 0, 6172: 1, 6173: 12, 6174: 2, 6175: 0, 6176: 1, 6177: 0, 6179: 1, 6180: 1, 6181: 0, 6182: 1, 6183: 3, 6184: 2, 6185: 2, 6186: 1, 6187: 4, 6188: 2, 6189: 4, 6190: 2, 6191: 3, 6192: 1, 6193: 2, 6194: 3, 6195: 5, 6196: 0, 6197: 2, 6198: 1, 6199: 0, 6200: 0, 6201: 0, 6202: 0, 6203: 0, 6204: 2, 6205: 0, 6206: 0, 6207: 0, 6208: 0, 6209: 1, 6210: 0, 6211: 0, 6212: 2, 6213: 0, 6214: 0, 6215: 2, 6216: 2, 6217: 2, 6218: 1, 6219: 3, 6220: 2, 6221: 0, 6222: 2, 6223: 3, 6224: 0, 6225: 1, 6226: 0, 6227: 0, 6228: 0, 6229: 0, 6230: 0, 6232: 0, 6233: 0, 6234: 0, 6235: 2, 6236: 0, 6237: 3, 6238: 2, 6239: 0, 6240: 2, 6241: 4, 6242: 4, 6243: 2, 6244: 0, 6245: 2, 6246: 0, 6247: 0, 6248: 2, 6249: 2, 6250: 0, 6251: 0, 6252: 0, 6253: 1, 6254: 0, 6255: 3, 6256: 1, 6257: 0, 6258: 2, 6259: 0, 6260: 3, 6261: 0, 6262: 3, 6263: 0, 6264: 1, 6265: 1, 6266: 2, 6267: 2, 6268: 1, 6269: 3, 6270: 3, 6271: 2, 6272: 1, 6273: 0, 6274: 0, 6275: 0, 6276: 2, 6277: 0, 6278: 2, 6279: 0, 6280: 0, 6281: 2, 6282: 0, 6283: 0, 6284: 0, 6285: 3, 6286: 3, 6287: 1, 6288: 0, 6289: 4, 6290: 0, 6291: 0, 6292: 0, 6293: 0, 6294: 3, 6295: 1, 6296: 3, 6297: 1, 6298: 4, 6299: 0, 6300: 1, 6301: 2, 6302: 2, 6303: 2, 6304: 3, 6305: 0, 6306: 0, 6307: 2, 6308: 0, 6309: 2, 6310: 1, 6311: 1, 6312: 1, 6313: 0, 6314: 1, 6315: 1, 6316: 3, 6317: 2, 6318: 1, 6319: 2, 6320: 3, 6321: 1, 6322: 2, 6323: 0, 6324: 2, 6325: 2, 6326: 0, 6327: 0, 6328: 0, 6329: 1, 6330: 0, 6331: 0, 6332: 0, 6333: 2, 6334: 1, 6335: 0, 6336: 0, 6337: 2, 6338: 3, 6339: 0, 6340: 0, 6341: 36, 6342: 10, 6343: 11, 6344: 7, 6345: 36, 6346: 17, 6347: 33, 6348: 8, 6349: 4, 6350: 3, 6351: 15, 6352: 8, 6353: 12, 6354: 5, 6355: 30, 6356: 13, 6357: 13, 6358: 1, 6359: 7, 6360: 9, 6361: 14, 6362: 0, 6363: 2, 6364: 0, 6365: 3, 6366: 19, 6367: 4, 6368: 7, 6369: 0, 6370: 1, 6371: 2, 6372: 1, 6373: 1, 6374: 1, 6375: 5, 6376: 4, 6377: 1, 6378: 2, 6379: 10, 6380: 8, 6381: 4, 6382: 3, 6383: 13, 6384: 7, 6385: 14, 6386: 18, 6387: 18, 6388: 7, 6389: 0, 6390: 19, 6391: 9, 6392: 32, 6393: 12, 6394: 14, 6395: 7, 6396: 2, 6397: 5, 6398: 4, 6399: 11, 6400: 16, 6401: 6, 6402: 2, 6403: 8, 6404: 2, 6405: 0, 6406: 1, 6407: 5, 6408: 1, 6409: 2, 6410: 2, 6411: 7, 6412: 3, 6413: 4, 6414: 6, 6415: 0, 6419: 0, 6420: 0, 6421: 0, 6422: 0, 6423: 0, 6424: 0, 6425: 0, 6426: 2, 6427: 7, 6429: 4, 6430: 18, 6431: 0, 6432: 3, 6434: 19, 6445: 0, 6446: 0, 6447: 0, 6450: 0, 6454: 0, 6455: 0, 6456: 1, 6458: 0, 6460: 7, 6464: 0, 6465: 0, 6466: 1, 6467: 0, 6477: 3, 6478: 0, 6479: 0, 6481: 0, 6482: 0, 6483: 0, 6485: 3, 6487: 0, 6489: 0, 6492: 4, 6493: 8, 6494: 0, 6497: 0, 6499: 0, 6500: 0, 6505: 32, 6506: 0, 6511: 0, 6519: 0, 6520: 0, 6522: 0, 6712: 2, 6713: 1, 6714: 2, 6715: 2, 6716: 3, 6717: 3, 6718: 3, 6719: 2, 6720: 2, 6722: 3, 6723: 2, 6724: 2, 6725: 2, 6726: 0, 6727: 0, 6728: 0, 6729: 1, 6730: 2, 6731: 2, 6732: 2, 6733: 1, 6734: 1, 6735: 1, 6737: 2, 6738: 2, 6739: 2, 6740: 1, 6741: 1, 6742: 1, 6743: 6, 6744: 3, 6745: 0, 6746: 0, 6747: 5, 6748: 1, 6749: 1, 6751: 0, 6752: 1, 6753: 4, 6754: 0, 6755: 2, 6756: 1, 6757: 1, 6758: 5, 6759: 0, 6760: 1, 6761: 0, 6762: 0, 6763: 1, 6764: 0, 6765: 1, 6766: 1, 6767: 1, 6768: 1, 6769: 2, 6771: 1, 6772: 2, 6773: 2, 6774: 0, 6775: 0, 6776: 9, 6777: 2, 6778: 3, 6779: 2, 6780: 1, 6781: 1, 6782: 3, 6783: 1, 6784: 1, 6785: 0, 6786: 0, 6787: 0, 6788: 2, 6789: 3, 6790: 1, 6791: 0, 6792: 1, 6793: 1, 6794: 2, 6795: 2, 6797: 0, 6798: 0, 6799: 0, 6800: 1, 6803: 2, 6805: 0, 6806: 0, 6807: 0, 6808: 0, 6809: 0, 6814: 1, 6816: 0, 6819: 0, 6823: 0, 6824: 0, 6825: 1, 6826: 0, 6829: 0, 6830: 0, 6832: 0, 6833: 0, 6834: 0, 6837: 2, 6838: 0, 6839: 3, 6840: 0, 6841: 0, 6843: 0, 6844: 0, 6845: 0, 6849: 0, 6853: 0, 6855: 0, 6859: 0, 6860: 0, 6862: 0, 6866: 0, 6867: 0, 6868: 0, 6870: 0, 6871: 0, 6873: 0, 6876: 0, 6877: 0, 6878: 0, 6880: 1, 6881: 1, 6883: 1, 6886: 0, 6887: 0, 6894: 0, 6896: 0, 6897: 0, 6898: 0, 6899: 0, 6905: 0, 6906: 0, 6907: 0, 6908: 0, 6909: 0, 6910: 0, 6911: 0, 6914: 0, 6915: 0, 6916: 1, 6917: 0, 6918: 0, 6922: 0, 6924: 1, 6926: 2, 6927: 0, 6928: 0, 6929: 0, 6930: 0, 6931: 0, 6932: 0, 6933: 1, 6934: 0, 6936: 0, 6937: 0, 6939: 0, 6940: 1, 6943: 2, 6944: 9, 6945: 1, 6947: 0, 6948: 0, 6949: 2, 6950: 0, 6951: 0, 6952: 0, 6955: 4, 6956: 0, 6957: 2, 6958: 2, 6959: 1, 6960: 2, 6961: 0, 6963: 5, 6967: 0, 6968: 0, 6969: 7, 6973: 0, 6974: 1, 6975: 0, 6984: 0, 6985: 0, 6986: 0, 6989: 1, 6990: 0, 6991: 0, 6992: 4, 6993: 0, 6994: 0, 6995: 0, 6996: 0, 6997: 0, 6998: 0, 6999: 0, 7000: 0, 7001: 2, 7003: 2, 7009: 0, 7010: 0, 7011: 0, 7012: 0, 7013: 0, 7014: 0, 7015: 0, 7016: 0, 7017: 0, 7018: 1, 7019: 0, 7020: 0, 7021: 0, 7022: 0, 7023: 0, 7025: 0, 7026: 0, 7027: 0, 7030: 0, 7033: 0, 7035: 0, 7036: 0, 7037: 0, 7042: 0, 7046: 0, 7047: 0, 7048: 0, 7051: 1, 7052: 0, 7053: 0, 7054: 0, 7056: 18, 7058: 0, 7059: 2, 7060: 0, 7061: 0, 7062: 2, 7063: 0, 7064: 2, 7065: 1, 7066: 2, 7067: 2, 7068: 1, 7069: 0, 7070: 1, 7071: 1, 7072: 0, 7073: 2, 7074: 1, 7075: 0, 7076: 1, 7077: 0, 7078: 2, 7079: 0, 7080: 0, 7081: 1, 7082: 2, 7083: 2, 7085: 0, 7086: 0, 7087: 3, 7088: 5, 7089: 0, 7090: 1, 7092: 2, 7093: 2, 7094: 1, 7095: 1, 7096: 3, 7097: 2, 7098: 4, 7101: 0, 7103: 0, 7105: 0, 7106: 0, 7107: 3, 7108: 5, 7111: 3, 7114: 2, 7115: 0, 7116: 0, 7117: 3, 7120: 0, 7121: 1, 7122: 1, 7123: 0, 7125: 0, 7126: 0, 7128: 4, 7129: 0, 7130: 0, 7131: 0, 7134: 0, 7135: 1, 7136: 1, 7140: 0, 7142: 2, 7143: 0, 7146: 1, 7148: 1, 7154: 2, 7157: 1, 7158: 1, 7159: 2, 7160: 1, 7161: 1, 7162: 2, 7177: 3, 7178: 2, 7179: 2, 7180: 3, 7181: 2, 7182: 1, 7183: 3, 7184: 3, 7185: 3, 7186: 2, 7187: 4, 7188: 2, 7190: 4, 7191: 1, 7192: 3, 7194: 2, 7195: 1, 7198: 0, 7199: 1, 7201: 3, 7202: 1, 7203: 1, 7204: 0, 7205: 1, 7206: 3, 7207: 2, 7208: 4, 7209: 3, 7210: 0, 7213: 2, 7214: 0, 7217: 0, 7220: 2, 7221: 0, 7222: 0, 7226: 0, 7229: 0, 7230: 0, 7233: 0, 7235: 0, 7236: 0, 7240: 1, 7242: 1, 7244: 0, 7245: 0, 7246: 0, 7251: 0, 7252: 2, 7253: 0, 7254: 0, 7255: 2, 7256: 0, 7259: 0, 7260: 0, 7261: 0, 7262: 0, 7263: 0, 7264: 0, 7265: 0, 7266: 0, 7267: 0, 7268: 0, 7269: 0, 7272: 0, 7273: 0, 7274: 0, 7275: 2, 7277: 1, 7278: 0, 7280: 0, 7291: 0, 7292: 0, 7293: 0, 7294: 0, 7295: 0, 7296: 0, 7297: 0, 7301: 0, 7302: 0, 7307: 0, 7309: 0, 7311: 0, 7312: 0, 7313: 1, 7320: 0, 7323: 0, 7324: 0, 7325: 0, 7330: 0, 7331: 0, 7332: 0, 7333: 0, 7334: 0, 7335: 0, 7336: 0, 7338: 0, 7339: 0, 7340: 0, 7341: 0, 7343: 0, 7346: 0, 7347: 0, 7348: 0, 7349: 0, 7350: 0, 7351: 0, 7352: 0, 7353: 0, 7354: 0, 7355: 2, 7357: 0, 7359: 1, 7360: 0, 7361: 0, 7362: 0, 7363: 0, 7364: 3, 7367: 2, 7368: 2, 7369: 1, 7370: 1, 7371: 0, 7372: 1, 7373: 2, 7374: 1, 7375: 2, 7376: 3, 7377: 0, 7378: 0, 7379: 0, 7380: 3, 7381: 0, 7382: 1, 7383: 1, 7384: 3, 7394: 1, 7395: 2, 7396: 0, 7397: 0, 7398: 1, 7399: 1, 7406: 0, 7407: 2, 7408: 0, 7409: 0, 7411: 0, 7413: 0, 7414: 0, 7415: 0, 7416: 0, 7417: 3, 7418: 0, 7419: 0, 7420: 0, 7421: 0, 7422: 0, 7423: 0, 7424: 1, 7426: 0, 7427: 0, 7428: 0, 7429: 0, 7432: 0, 7437: 0, 7442: 0, 7443: 0, 7446: 0, 7448: 0, 7449: 0, 7450: 1, 7451: 0, 7452: 0, 7453: 8, 7454: 0, 7455: 0, 7456: 2, 7459: 1, 7461: 0, 7464: 0, 7465: 0, 7466: 0, 7467: 0, 7468: 0, 7469: 0, 7470: 1, 7472: 0, 7473: 0, 7474: 0, 7475: 0, 7476: 0, 7480: 0, 7481: 0, 7483: 0, 7484: 0, 7485: 0, 7486: 0, 7487: 0, 7488: 0, 7489: 0, 7490: 8, 7492: 0, 7494: 0, 7495: 0, 7496: 0, 7497: 0, 7498: 0, 7499: 0, 7500: 0, 7501: 0, 7503: 9, 7504: 1, 7506: 5, 7508: 2, 7510: 0, 7511: 0, 7513: 0, 7514: 0, 7516: 0, 7517: 0, 7518: 0, 7519: 2, 7521: 0, 7522: 0, 7523: 0, 7531: 0, 7532: 4, 7533: 0, 7536: 0, 7538: 0, 7542: 0, 7544: 0, 7546: 5, 7547: 1, 7548: 0, 7549: 0, 7550: 0, 7551: 0, 7552: 0, 7556: 0, 7557: 0, 7558: 1, 7559: 0, 7560: 0, 7563: 4, 7565: 0, 7566: 0, 7569: 0, 7570: 0, 7571: 0, 7572: 0, 7573: 0, 7574: 0, 7575: 0, 7576: 0, 7577: 2, 7578: 0, 7579: 3, 7580: 0, 7581: 0, 7582: 0, 7583: 0, 7584: 1, 7586: 0, 7587: 0, 7588: 0, 7589: 0, 7590: 0, 7591: 0, 7592: 0, 7593: 0, 7594: 0, 7595: 0, 7596: 0, 7597: 0, 7598: 0, 7599: 0, 7600: 0, 7601: 0, 7610: 0, 7611: 0, 7615: 0, 7616: 2, 7617: 2, 7618: 2, 7619: 0, 7621: 0, 7622: 0, 7627: 0, 7629: 0, 7630: 0, 7633: 0, 7634: 2, 7642: 0, 7646: 0, 7647: 0, 7648: 0, 7649: 0, 7650: 0, 7651: 0, 7652: 0, 7653: 0, 7654: 0, 7655: 0, 7656: 0, 7657: 0, 7658: 0, 7659: 0, 7660: 0, 7662: 0, 7663: 0, 7669: 5, 7670: 0, 7671: 0, 7673: 0, 7674: 0, 7675: 0, 7683: 0, 7684: 0, 7685: 0, 7686: 0, 7690: 0, 7691: 0, 7692: 0, 7693: 0, 7694: 0, 7700: 0, 7701: 0, 7702: 0, 7703: 0, 7704: 0, 7710: 0, 7711: 0, 7712: 0, 7714: 0, 7716: 0, 7717: 0, 7720: 0, 7721: 0, 7722: 0, 7723: 0, 7724: 0, 7725: 0, 7726: 0, 7727: 0, 7728: 0, 7730: 0, 7731: 0, 7732: 0, 7738: 0, 7766: 0, 7767: 0, 7768: 0, 7769: 0, 7772: 0, 7773: 0, 7774: 1, 7775: 0, 7776: 0, 7777: 0, 7778: 0, 7780: 0, 7782: 0, 7787: 0, 7792: 0, 7800: 0, 7804: 0, 7805: 0, 7806: 0, 7809: 0, 7810: 0, 7811: 0, 7812: 0, 7813: 0, 7814: 0, 7815: 0, 7816: 0, 7817: 0, 7818: 0, 7820: 0, 7821: 2, 7822: 0, 7826: 0, 7827: 0, 7828: 0, 7830: 0, 7831: 0, 7834: 0, 7835: 0, 7836: 0, 7837: 0, 7838: 0, 7839: 0, 7840: 0, 7841: 0, 7846: 0, 7847: 0, 7848: 0, 7849: 0, 7853: 0, 7854: 0, 7855: 0, 7856: 0, 7857: 0, 7859: 0, 7861: 0, 7862: 4, 7863: 2, 7867: 0, 7868: 0, 7869: 0, 7870: 0, 7871: 0, 7872: 0, 7875: 0, 7879: 0, 7880: 0, 7885: 0, 7886: 0, 7888: 0, 7889: 0, 7892: 0, 7893: 0, 7894: 1, 7902: 0, 7903: 0, 7904: 0, 7905: 0, 7906: 0, 7907: 0, 7908: 0, 7909: 0, 7910: 0, 7911: 0, 7912: 0, 7913: 0, 7918: 0, 7924: 0, 7925: 0, 7928: 0, 7929: 0, 7930: 0, 7931: 0, 7932: 2, 7933: 0, 7935: 0, 7936: 0, 7938: 0, 7939: 0, 7941: 0, 7946: 0, 7947: 0, 7948: 0, 7962: 1, 7963: 0, 7976: 1, 7978: 0, 7979: 0, 7980: 0, 7981: 0, 7982: 0, 7983: 0, 7984: 0, 7985: 0, 7986: 0, 7987: 2, 7990: 0, 7991: 0, 7998: 0, 7999: 0, 8000: 0, 8005: 0, 8006: 0, 8007: 0, 8029: 0, 8030: 0, 8031: 0, 8032: 0, 8033: 0, 8034: 0, 8035: 0, 8038: 0, 8039: 0, 8042: 0, 8043: 2, 8050: 0, 8051: 0, 8052: 0, 8053: 0, 8054: 0, 8055: 0, 8062: 0, 8063: 0, 8069: 0, 8070: 0, 8075: 0, 8076: 40, 8077: 0, 8079: 0, 8080: 0, 8083: 0, 8084: 0, 8085: 0, 8086: 0, 8087: 0, 8088: 0, 8089: 0, 8090: 0, 8091: 0, 8092: 0, 8093: 0, 8094: 0, 8095: 0, 8096: 0, 8097: 0, 8098: 0, 8099: 0, 8100: 0, 8101: 0, 8102: 0, 8103: 0, 8104: 0, 8105: 0, 8106: 0, 8107: 0, 8108: 0, 8109: 0, 8110: 0, 8111: 0, 8112: 0, 8113: 0, 8114: 0, 8115: 0, 8116: 0, 8117: 0, 8118: 0, 8119: 0, 8120: 0, 8121: 0, 8122: 0, 8123: 0, 8124: 0, 8126: 0, 8127: 0, 8130: 0, 8133: 0, 8134: 0, 8135: 0, 8136: 0, 8137: 0, 8138: 0, 8139: 0, 8140: 0, 8141: 0, 8142: 0, 8143: 0, 8146: 0, 8147: 0, 8148: 0, 8149: 0, 8152: 0, 8162: 0, 8165: 0, 8177: 0, 8178: 0, 8179: 0, 8180: 2, 8182: 0, 8187: 0, 8188: 0, 8189: 0, 8194: 0, 8195: 0, 8199: 2, 8200: 3, 8208: 1, 8209: 1, 8215: 0, 8216: 0, 8217: 1, 8218: 0, 8219: 0, 8220: 0, 8221: 0, 8223: 1, 8224: 0, 8225: 2, 8227: 1, 8228: 0, 8229: 0, 8230: 0, 8233: 0, 8234: 0, 8235: 5, 8236: 0, 8237: 2, 8238: 3, 8239: 3, 8240: 2, 8241: 1, 8242: 1, 8243: 2, 8244: 2, 8245: 0, 8246: 0, 8247: 1, 8248: 0, 8249: 0, 8250: 0, 8252: 0, 8253: 0, 8254: 0, 8255: 0, 8256: 1, 8257: 0, 8258: 1, 8259: 2, 8260: 0, 8265: 0, 8266: 6, 8273: 0, 8274: 0, 8276: 0, 8277: 0, 8278: 0, 8280: 0, 8281: 0, 8282: 0, 8283: 0, 8284: 0, 8285: 0, 8286: 0, 8287: 0, 8288: 0, 8289: 0, 8290: 0, 8291: 0, 8292: 0, 8293: 0, 8294: 0, 8295: 0, 8296: 0, 8297: 0, 8298: 0, 8299: 0, 8300: 0, 8302: 0, 8303: 0, 8305: 0, 8306: 0, 8308: 0, 8312: 0, 8313: 0, 8314: 2, 8318: 0, 8319: 0, 8320: 0, 8321: 0, 8322: 0, 8323: 0, 8328: 0, 8331: 0, 8332: 0, 8333: 0, 8334: 0, 8335: 0, 8336: 0, 8337: 0, 8340: 0, 8341: 0, 8342: 0, 8343: 0, 8344: 0, 8347: 0, 8348: 0, 8349: 0, 8350: 0, 8351: 0, 8352: 0, 8353: 0, 8354: 0, 8355: 0, 8356: 0, 8357: 0, 8358: 0, 8359: 0, 8360: 0, 8361: 0, 8362: 0, 8363: 0, 8364: 0, 8365: 0, 8366: 0, 8367: 0, 8379: 0, 8380: 0, 8394: 0, 8395: 0, 8397: 0, 8401: 10, 8403: 0, 8404: 0, 8405: 0, 8406: 0, 8407: 6, 8409: 0, 8410: 0, 8412: 0, 8414: 26, 8417: 4, 8419: 0, 8423: 0, 8426: 0, 8427: 0, 8428: 4, 8430: 0, 8431: 0, 8432: 0, 8435: 0, 8438: 0, 8443: 0, 8445: 0, 8446: 0, 8459: 0, 8460: 0, 8461: 0, 8462: 0, 8467: 0, 8468: 0, 8469: 0, 8472: 0, 8473: 0, 8474: 0, 8475: 0, 8476: 0, 8477: 0, 8482: 0, 8493: 0, 8494: 0, 8495: 0, 8496: 0, 8497: 0, 8499: 0, 8500: 0, 8501: 0, 8502: 0, 8503: 0, 8504: 0, 8505: 0, 8506: 0, 8507: 0, 8508: 0, 8509: 0, 8510: 0, 8511: 0, 8512: 0, 8513: 0, 8514: 0, 8515: 0, 8516: 0, 8517: 0, 8519: 0, 8520: 0, 8524: 0, 8526: 0, 8528: 0, 8532: 0, 8538: 0, 8542: 0, 8544: 0, 8545: 0, 8548: 0, 8550: 0, 8553: 0, 8555: 0, 8556: 0, 8559: 0, 8560: 0, 8565: 0, 8577: 0, 8593: 0, 8601: 0, 8603: 0, 8604: 0, 8606: 0, 8608: 0, 8609: 0, 8610: 0, 8611: 0, 8612: 0, 8613: 0, 8614: 0, 8615: 0, 8616: 0, 8617: 0, 8618: 0, 8619: 0, 8620: 0, 8621: 0, 8622: 0, 8623: 0, 8624: 0, 8625: 0, 8626: 0, 8627: 0, 8628: 1, 8630: 4, 8631: 0, 8632: 0, 8633: 0, 8634: 0, 8639: 0, 8641: 0, 8644: 0, 8646: 0, 8648: 0, 8653: 0, 8654: 0, 8655: 0, 8658: 0, 8660: 0, 8661: 0, 8663: 0, 8664: 0, 8665: 0, 8666: 0, 8667: 0, 8669: 0, 8670: 0, 8671: 0, 8681: 0, 8682: 0, 8683: 0, 8684: 0, 8689: 0, 8690: 0, 8691: 0, 8692: 0, 8693: 0, 8694: 0, 8695: 0, 8696: 0, 8698: 0, 8700: 0, 8701: 0, 8702: 0, 8703: 0, 8706: 0, 8707: 0, 8708: 0, 8709: 0, 8710: 0, 8711: 0, 8712: 0, 8713: 0, 8714: 0, 8715: 0, 8717: 0, 8718: 0, 8721: 0, 8722: 0, 8723: 0, 8740: 1, 8742: 0, 8743: 0, 8744: 0, 8745: 0, 8746: 0, 8747: 0, 8750: 0, 8751: 0, 8752: 0, 8759: 0, 8761: 0, 8762: 0, 8763: 0, 8771: 0, 8772: 0, 8773: 0, 8774: 2, 8775: 1, 8776: 0, 8777: 0, 8780: 0, 8782: 1, 8784: 0, 8785: 0, 8789: 0, 8790: 0, 8792: 0, 8793: 0, 8796: 0, 8798: 0, 8801: 0, 8802: 0, 8804: 0, 8807: 3, 8808: 0, 8809: 0, 8811: 0, 8812: 0, 8813: 0, 8815: 0, 8820: 0, 8821: 0, 8822: 0, 8823: 0, 8824: 0, 8825: 0, 8831: 0, 8833: 0, 8834: 0, 8835: 0, 8838: 0, 8839: 0, 8840: 0, 8845: 3, 8846: 0, 8847: 0, 8848: 0, 8850: 0, 8853: 0, 8854: 0, 8855: 0, 8859: 0, 8860: 0, 8861: 0, 8862: 0, 8864: 0, 8866: 0, 8867: 0, 8868: 0, 8869: 0, 8870: 0, 8871: 0, 8872: 0, 8873: 0, 8874: 0, 8875: 0, 8876: 13, 8877: 0, 8880: 0, 8888: 0, 8890: 0, 8892: 2, 8893: 0, 8894: 0, 8914: 1, 8918: 0, 8925: 0, 8926: 0, 8927: 0, 8928: 0, 8931: 0, 8933: 0, 8935: 0, 8943: 0, 8944: 1, 8946: 0, 8948: 0, 8949: 6, 8950: 0, 8951: 0, 8952: 0, 8953: 0, 8954: 0, 8958: 0, 8961: 2, 8963: 0, 8965: 0, 8966: 0, 8967: 0, 8968: 0, 8969: 0, 8971: 0, 8972: 0, 8974: 0, 8975: 0, 8980: 0, 8982: 0, 8983: 0, 8984: 0, 8989: 0, 8994: 0, 8995: 0, 8996: 0, 8998: 0, 9001: 0, 9002: 0, 9004: 0, 9006: 0, 9008: 0, 9025: 7, 9026: 2, 9042: 0, 9044: 4, 9045: 1, 9048: 0, 9054: 0, 9062: 0, 9065: 0, 9066: 0, 9068: 0, 9075: 0, 9076: 0, 9079: 0, 9088: 0, 9089: 0, 9090: 2, 9091: 0, 9093: 0, 9095: 0, 9096: 0, 9100: 0, 9102: 0, 9103: 0, 9104: 0, 9107: 4, 9120: 0, 9123: 0, 9124: 0, 9125: 0, 9126: 0, 9127: 0, 9129: 0, 9132: 0, 9134: 0, 9136: 0, 9137: 0, 9138: 0, 9139: 0, 9140: 0, 9141: 0, 9147: 0, 9148: 0, 9149: 0, 9156: 0, 9162: 0, 9163: 0, 9164: 0, 9175: 0, 9178: 0, 9179: 0, 9182: 0, 9183: 0, 9184: 0, 9185: 0, 9186: 0, 9187: 0, 9188: 0, 9189: 0, 9190: 0, 9191: 0, 9193: 0, 9199: 0, 9205: 0, 9207: 0, 9215: 0, 9218: 0, 9225: 0, 9226: 0, 9227: 0, 9228: 0, 9229: 2, 9232: 0, 9233: 0, 9236: 0, 9237: 0, 9238: 0, 9239: 0, 9240: 0, 9241: 0, 9243: 0, 9244: 0, 9245: 0, 9247: 0, 9248: 0, 9249: 0, 9251: 0, 9252: 0, 9253: 0, 9255: 0, 9273: 1, 9276: 0, 9277: 0, 9290: 0, 9305: 0, 9311: 2, 9317: 0, 9327: 8, 9348: 0, 9371: 0, 9372: 0, 9373: 0, 9374: 0, 9376: 0, 9377: 0, 9378: 0, 9379: 0, 9380: 0, 9386: 1, 9388: 0, 9390: 0, 9391: 0, 9392: 0, 9393: 0, 9394: 0, 9395: 0, 9396: 0, 9397: 0, 9399: 0, 9400: 0, 9402: 0, 9403: 0, 9406: 0, 9407: 0, 9408: 0, 9409: 0, 9411: 0, 9412: 0, 9413: 0, 9414: 0, 9415: 0, 9416: 0, 9417: 0, 9418: 0, 9419: 0, 9428: 0, 9429: 0, 9447: 0, 9448: 0, 9450: 0, 9474: 0, 9475: 0, 9481: 0, 9484: 0, 9488: 0, 9492: 0, 9500: 0, 9511: 0, 9521: 0, 9528: 0, 9532: 0, 9533: 0, 9542: 0, 9543: 1, 9544: 0, 9545: 0, 9546: 0, 9547: 0, 9739: 2, 9744: 2, 9746: 0, 9749: 0, 9753: 0, 9754: 0, 9759: 0, 9760: 0, 9761: 0, 9763: 0, 9768: 1, 9769: 0, 9771: 1, 9772: 0, 9773: 0, 9774: 1, 9776: 0, 9777: 0, 9778: 0, 9779: 0, 9780: 0, 9781: 0, 9782: 0, 9783: 0, 9784: 0, 9786: 0, 9787: 0, 9788: 0, 9789: 0, 9790: 0, 9791: 0, 9792: 0, 9793: 0, 9794: 0, 9795: 0, 9796: 0, 9797: 0, 9798: 0, 9799: 0, 9800: 0, 9805: 0, 9806: 0, 9808: 0, 9818: 0, 9819: 0, 9820: 0, 9821: 0, 9824: 3, 9825: 0, 9826: 1, 9828: 2, 9829: 1, 9830: 0, 9831: 0, 9832: 0, 9844: 2, 9846: 13, 9847: 0, 9848: 2, 9849: 3, 9850: 0, 9853: 0, 9854: 0, 9857: 0, 9860: 0, 9861: 0, 9862: 0, 9863: 0, 9864: 0, 9866: 0, 9868: 0, 9872: 0, 9873: 0, 9874: 0, 9875: 0, 9886: 0, 9887: 1, 9888: 1, 9889: 1, 9890: 0, 9891: 0, 9892: 0, 9897: 0, 9898: 1, 9899: 0, 9901: 0, 9902: 0, 9904: 1, 9905: 1, 9935: 0, 9937: 0, 9938: 0, 9939: 0, 9942: 0, 9943: 0, 10017: 0, 10057: 0, 10061: 0, 10062: 0, 10069: 0, 10080: 0, 10089: 0, 10096: 0, 10102: 0, 10103: 0, 10104: 0, 10105: 0, 10106: 0, 10107: 0, 10110: 0, 10114: 0, 10116: 0, 10117: 0, 10121: 0, 10122: 0, 10123: 0, 10128: 0, 10129: 0, 10130: 0, 10131: 0, 10132: 0, 10133: 0, 10134: 0, 10135: 0, 10137: 0, 10138: 0, 10139: 0, 10140: 0, 10141: 0, 10142: 0, 10144: 0, 10145: 0, 10148: 0, 10149: 0, 10151: 0, 10154: 0, 10155: 0, 10156: 0, 10157: 0, 10160: 2, 10161: 0, 10162: 0, 10163: 0, 10164: 0, 10165: 0, 10166: 0, 10169: 0, 10171: 0, 10173: 0, 10178: 0, 10184: 0, 10185: 0, 10186: 0, 10295: 0, 10360: 0, 10363: 0, 10370: 0, 10371: 0, 10378: 0, 10544: 0, 10545: 0, 10611: 0, 10617: 0, 10618: 0, 10723: 0, 10744: 0, 10745: 0, 10746: 0, 10747: 0, 10748: 0, 10750: 0, 10751: 0, 10752: 0, 10753: 0, 10776: 0, 10794: 0, 10800: 0, 10802: 0, 10803: 0, 10804: 0, 10831: 0, 10934: 0, 10938: 0, 10939: 0, 10941: 1, 10942: 0, 10949: 0, 10951: 0, 10952: 0, 11004: 0, 11005: 0, 11008: 0, 11009: 0, 11010: 0, 11011: 0, 11012: 0, 11017: 0, 11022: 0, 11030: 0, 11031: 0, 11032: 0, 11035: 0, 11038: 0, 11048: 0, 11049: 0, 11053: 0, 11054: 0, 11055: 0, 11067: 0, 11068: 0, 11069: 0, 11070: 0, 11071: 0, 11072: 0, 11073: 0, 11074: 0, 11075: 0, 11076: 0, 11077: 0, 11078: 0, 11079: 0, 11080: 0, 11081: 0, 11082: 0, 11084: 0, 11086: 0, 11087: 0, 11088: 0, 11089: 0, 11090: 0, 11091: 0, 11092: 0, 11093: 0, 11094: 0, 11095: 0, 11096: 0, 11097: 0, 11098: 0, 11099: 0, 11100: 0, 11101: 0, 11102: 0, 11103: 0, 11110: 0, 11111: 0, 11127: 0, 11131: 0, 11132: 0, 11133: 0, 11134: 0, 11139: 0, 11140: 0, 11141: 0, 11142: 0, 11143: 0, 11144: 0, 11145: 0, 11146: 0, 11153: 0, 11170: 0, 11175: 0, 11176: 0, 11177: 0, 11178: 0, 11179: 0, 11180: 0, 11181: 0, 11182: 0, 11193: 0, 11194: 0, 11195: 0, 11198: 0, 11199: 0, 11200: 0, 11201: 0, 11202: 0, 11203: 0, 11204: 0, 11205: 0, 11206: 0, 11207: 0, 11208: 0, 11209: 0, 11210: 0, 11211: 0, 11212: 0, 11229: 2, 11230: 2, 11243: 0, 11255: 0, 11257: 2, 11258: 2, 11268: 0, 11269: 0, 11270: 0, 11272: 0, 11273: 0, 11274: 0, 11277: 0, 11288: 0, 11290: 2, 11291: 0, 11292: 0, 11293: 0, 11295: 0, 11299: 0, 11312: 0, 11328: 0, 11332: 0, 11352: 0, 11353: 0, 11354: 0, 11355: 0, 11357: 0, 11386: 0, 11389: 0, 11401: 0, 11406: 0, 11407: 0, 11431: 0, 11433: 0, 11436: 1, 11438: 0, 11452: 0, 11479: 0, 11498: 1, 11524: 0, 11583: 0, 11638: 0, 11644: 0, 11649: 0, 11658: 0, 11673: 0, 11684: 0, 11700: 0, 11702: 0, 11717: 0, 11718: 0, 11719: 0, 11720: 0, 11721: 0, 11722: 0, 11735: 0, 11737: 0, 11738: 0, 11739: 0, 11740: 0, 11742: 0})

Now we can see that a lot of our nodes do not have edges attached to them. So let’s go ahead and remove all the nodes that have 0 as the degree

code 19


for airport, degree in list(network.degree()):
    if degree == 0:
        network.remove_node(airport)
nx.info(network)
'Name: \nType: Graph\nNumber of nodes: 3102\nNumber of edges: 18438\nAverage degree:  11.8878'

After removing all nodes with no connection, we still have an unconnected graph. We did a little bit more and evaluate the subgraphs within our graph.

nx.is_connected(network)
False

nx.number_connected_components(network)
7

We realize that there are about 7 connected components in our graph. That means that there are some airports that are not part of our main network. So let’s go ahead and evaluate the length of our subgraphs.

[len(e) for e in nx.connected_components(network)]
[3077, 10, 4, 3, 2, 2, 4]

By going that, we can see that there is a subnetwork containing the bulk of our airports (3077) and small subnetworks that are not connected to the main one. This is maybe due to the fact that they link so many regional airports within a country or something similar to that. Since they are not a lot, we can easily disregard those values. So let’s go ahead and save the subgraph 3077 in a new variable that will be used to display the network


main_subgraph = max(nx.connected_components(network), key=len)
network_main = network.subgraph(main_subgraph)
nx.info(network_main)<br><br>
'Name: \nType: SubGraph\nNumber of nodes: 3077\nNumber of edges: 18414\nAverage degree:  11.9688'
nx.is_connected(network_main)<br>
True

The subnetwork is fully connected, now we can go ahead and visualize the data we have‌.

 

3. Network Visualization in NetworkX

 

Now that we have created our network, our next goal is to visualize the network. In order to do that we will be using the matplot library

import matplotlib.pyplot as plt

First, we will add a new label called coordinates to our nodes. The coordinates will be a tuple containing the latitude and the longitude of our nodes.


for airport in network_main.nodes():
    network_main.node[airport]['coordinates'] = (network_main.node[airport]['long'],
                                                 network_main.node[airport]['lat'] )

Once we have added the coordinates we can easily draw the various network nodes using as attributes the new coordinates that we created. They will use as shape size a dot with the node_size of 3.

nx.draw(network_main, nx.get_node_attributes(network_main, 'coordinates'), 
node_shape = '.' , node_size= 3 )
plt.show()

raw Map of flights

Pretty satisfactory result! We can clearly see the shape of the map of the earth. The red dots are our airports(nodes) and the black lines correspond to our routes (edges). However, it is not very presentable. Let’s go ahead and modify it a little. First, we will need to set the size of the figure to make it a bit bigger; then we will modify the nodes using the function nx.draw_networkx_nodes in which we will set as shape a dot and a size = 6 since we have a bigger figure. Finally, we will modify the edges using the function .draw_networkx_edges that take as attribute the with of an edge and the alpha value (transparency).

plt.figure(figsize = (20, 15))
nx.draw_networkx_nodes(network_main, nx.get_node_attributes(network_main,
 'coordinates'), node_shape = '.' , node_size = 6)
nx.draw_networkx_edges(network_main, nx.get_node_attributes(network_main, 
'coordinates'), width = 0.3 , alpha = 0.5)
plt.show()

Map of flights clean

Now we have a more presentable plot showing all the website traffic in the world. Finally, let’s go a step further, let’s set a different color for nodes in each continent (blue for Europe, red for Asia, Yellow for Africa, etc..) and set the node size based on the centrality values. So the higher the centrality of an airport is the bigger the node is. Additionally, let us show the routes Turkish Airlines and US airlines are taking.


maximum_centrality = max(degree_centrality.values())
for airport in network_main.nodes():
    if network_main.nodes[airport]['timezone'].find('Europe') == 0 :
        network_main.nodes[airport]['color'] = 'blue'
    elif network_main.nodes[airport]['timezone'].find('Asia')== 0 :
        network_main.nodes[airports]['color'] = 'red'
    elif network_main.nodes[airport]['timezone'].find('Africa') == 0 :
        network_main.nodes[airport]['color'] = 'yellow'
    elif network_main.nodes[airport]['timezone'].find('America') == 0 :
        network_main.nodes[airport]['color'] = 'green'
    elif network_main.nodes[airport]['timezone'].find('Australia') == 0 :
        network_main.nodes[airport]['color'] = 'orange'
    elif network_main.nodes[airport]['timezone'].find('Pacific') == 0 :
        network_main.nodes[airport]['color'] = 'purple'
    else:
        network_main.nodes[airport]['color'] = 'grey'
                           
    if network_main.nodes[airport]['degree_centrality'] >= maximum_centrality * .9:
        network_main.nodes[airport]['importance'] = 400
    elif network_main.nodes[airport]['degree_centrality'] >= maximum_centrality * .5:
        network_main.nodes[airport]['importance'] = 150
    else:
        network_main.nodes[airport]['importance'] = 10

for route in network_main.edges():
    if (network_main[route[0]][route[1]]['airline'] == "TK"):
        network_main[route[0]][route[1]]['color'] = 'red'
        network_main[route[0]][route[1]]['size'] = 1.5
    elif (network_main[route[0]][route[1]]['airline'] == "US"):
        network_main[route[0]][route[1]]['color'] = 'blue'
        network_main[route[0]][route[1]]['size'] = 1.5
    else:
        network_main[route[0]][route[1]]['color'] = 'grey'
        network_main[route[0]][route[1]]['size'] = 0.2

Once we are done transforming the values, let’s plot them.


plt.figure(figsize = (20, 15))
nx.draw_networkx_nodes(network_main, nx.get_node_attributes(network_main, 'coordinates'), node_shape = '.' , 
                       node_size = [importance for importance in nx.get_node_attributes(network_main, 'importance').values()],
                       node_color = [color for color in nx.get_node_attributes(network_main, 'color').values()])
nx.draw_networkx_edges(network_main, nx.get_node_attributes(network_main, 'coordinates'), 
                       width =[size for size in nx.get_edge_attributes(network_main, 'size').values()],
                       edge_color =[color for color in nx.get_edge_attributes(network_main, 'color').values()],
                       alpha = 0.1)

plt.show()

US airlines, Turkish Airlines flights map

There you go, we have now a more comprehensible map that we can further explore based on your need. The map above shows nodes separated by continents and by centrality values; edges separated by the company name (US airlines and Turkish Airlines) Of course we can add a legend, highlights the routes of various airlines, highlight the airports with the most traffic, etc. Some nodes are with the wrong color, maybe wrong timezones in the dataset? Well, I will leave that for you to find out ?

 

A Final Word …

NetworkX possesses various tools to create a network. The library is relatively easy to use and quite intuitive. Anybody that feels comfortable with python should be able to grasp how to use NetworkX. It can be applied to various projects and it is very useful.

Finally, once the last figure is not correct, I have purposely left a mistake in the code preceding the last figure. I will leave a link to your personal website and your LinkedIn profile for the first person who sends me an updated code correcting the mistake and the picture of the correct maps. Good luck ?

 

 

 

 

 

 

Leave a Comment