Capacitated Facility Location Problem

Problem Description

Suppose there are n facilities and m customers. We wish to choose:

  1. which of the n facilities to open
  2. the assignment of customers to facilities

The objective is to minimize the sum of the opening cost and the assignment cost.

attention: The total demand assigned to a facility must not exceed its capacity.


Problem Modeling


Data Structure

  • Two Main Charactors: Customer and Facility

    1. Customer

      class Customer {
      public:
        Customer() = default;
        Customer(unsigned int count, unsigned int *assignedCost,unsigned int demands);
        ~Customer();
        unsigned int getDemand() const {return demand;};
        void updateAssigned(unsigned int seq);
        unsigned int getAssignedCost(unsigned int index);
        unsigned int  getAssignedIndex();
      
      private:
        unsigned int facility_count = 0; // amount of facicilities accessible
        unsigned int * assigned_cost;    // how much it costs to assign customer to                                                 facilities
        unsigned int demand = 0;         // customer's demand
        unsigned int assigned = -1;      // which facility the customer is assigned to
      };
      
    2. Facility

      class Facility {
      public:
        Facility()= default;
        Facility(unsigned int capac, unsigned int opening);
        ~ Facility() {};
        unsigned int getOpeningCost() const {return opening_cost;};
        unsigned int getCapacility() const {return capacility;};
        void updateCapacility(unsigned int amount);
        unsigned int getCost() const {return cost;};
        unsigned int updateCost(unsigned int a);
        bool assign(unsigned int amount, unsigned int assignedCost);
        bool isOpen() {return is_open;};
      
      private:
        unsigned int cost = 0;            // the sum of opeing cost and assigned cost
        unsigned int capacility = 0;
        unsigned int opening_cost = 0;
        bool is_open = false;          // whther the facility is open or not
      };
      
  • One Tool class to load data: DataLoader

    class DataLoader {
    private:
      int i, j;
      vector<Facility*> facilities;
      vector<Customer*> customers;
        
    public:
      DataLoader(string file_path);
      ~DataLoader();
      unsigned int getCustomerCount() { return j;};
      unsigned int getFacilityCount() { return i;};
      unsigned int getDemand(unsigned int index) const;
      unsigned int getCapacility(unsigned int index) const;
      unsigned int getCost(unsigned int index) const; // get the cost of a specified facility 
      unsigned int getCost() const; // get the sum of cost 
      unsigned int getAssignedCost(unsigned int , unsigned int) const;
      unsigned int pickBestFacility(unsigned int index_j); // for greedy algorithom
      void assign(unsigned int index_j, unsigned int index_i); // assign customer to facility
      void save(const string &); // save data to specified file
    };
    
  • One ProblemSolver function to run different algorithom in main function to sovle the problem.


Algorithom

1. Greedy Algorithom

  • strategy taken:

    visit all the customers in sequence, for every customer, find a best facility for it, which satisfies:

    1. The remaining capacility of it can hold the demand of the customer.
    2. Among all the available facility, the facility has the minimum cost for the customer.
  • Code Implement:

    void greedyAlgorithm(DataLoader & data) {
      int customer_count = data.getCustomerCount();
      int facility_count = data.getFacilityCount();
          
      for (int i = 0; i < customer_count; ++i) {
      	int index_j = data.pickBestFacility(i);
      	data.assign(i, index_j);
      }
    }
    
    unsigned int DataLoader::pickBestFacility(unsigned int index_j) {
    	unsigned int best = 0;
    	for (int tmp = 0; tmp < i - 1; ++tmp) {
    		if (customers[index_j]->getDemand() <= facilities[tmp]->getCapacility()) {
    			if (customers[index_j]->getAssignedCost(best) > customers[index_j]->getAssignedCost(tmp)) {
    				best = tmp;
    			}
    		}
    	}
    	return best;
    }
    
  • Result:

    File Result Time(s)
    p1 9263 0.00052815
    p2 7949 0.000620098
    p3 9949 0.000656021
    p4 11949 0.00066885
    p5 9735 0.000684246
    p6 8421 0.000683818
    p7 10421 0.00125174
    p8 12421 0.00104946
    p9 9263 0.000766355
    p10 7949 0.000917745
    p11 9949 0.000640197
    p12 11949 0.00063421
    p13 10231 0.00114098
    p14 7742 0.00097334
    p15 11342 0.00141254
    p16 14942 0.00154554
    p17 10231 0.00136764
    p18 7742 0.00110335
    p19 11342 0.00184875
    p20 14942 0.00148268
    p21 10231 0.00100755
    p22 7742 0.00277376
    p23 11342 0.000976761
    p24 14942 0.00129451
    p25 15694 0.0038955
    p26 13164 0.00413798
    p27 17964 0.00396093
    p28 22764 0.00383862
    p29 16448 0.0038925
    p30 13711 0.00627026
    p31 18911 0.00426371
    p32 24111 0.00567069
    p33 16009 0.0052905
    p34 13376 0.0047786
    p35 18376 0.00601751
    p36 23376 0.00411788
    p37 15636 0.00387796
    p38 13106 0.00384033
    p39 17906 0.00366927
    p40 22706 0.00630233
    p41 8090 0.00106272
    p42 9896 0.00149508
    p43 12721 0.00204932
    p44 11140 0.00111019
    p45 12055 0.00152672
    p46 13065 0.00184319
    p47 11962 0.000970774
    p48 10181 0.00157847
    p49 12376 0.00196036
    p50 9329 0.00285459
    p51 10329 0.00209636
    p52 14364 0.00100627
    p53 13390 0.00192059
    p54 11647 0.00104861
    p55 13902 0.00197448
    p56 25710 0.00904658
    p57 34410 0.00521524
    p58 54710 0.00524902
    p59 40829 0.00824602
    p60 25710 0.00507283
    p61 34410 0.00689677
    p62 54710 0.00499713
    p63 40829 0.0146702
    p64 25710 0.00718629
    p65 34410 0.00498943
    p66 54710 0.0051049
    p67 41474 0.00750532
    p68 25710 0.00518017
    p69 34410 0.0102145
    p70 54710 0.00768622
    p71 40829 0.00513142
  • Detail:

    p1

    9544

    1 1 1 1 1 1 1 1 1 0

    5 7 8 2 7 2 5 6 3 2 6 3 4 0 6 4 5 0 3 7 7 6 3 5 6 2 5 7 0 3 3 8 2 1 3 8 6 3 6 4 5 7 8 2 1 6 0 2 4 6

    p2

    8246

    1 1 1 1 1 1 1 1 1 0

    5 7 8 2 7 2 5 6 3 2 6 3 4 0 6 4 5 0 3 7 7 6 3 5 6 2 5 7 0 3 3 8 2 1 3 8 6 3 6 4 5 7 8 2 1 6 0 2 4 6

    p3

    10046

    1 1 1 1 1 1 1 1 1 0

    5 7 8 2 7 2 5 6 3 2 6 3 4 0 6 4 5 0 3 7 7 6 3 5 6 2 5 7 0 3 3 8 2 1 3 8 6 3 6 4 5 7 8 2 1 6 0 2 4 6

    p4

    11846

    1 1 1 1 1 1 1 1 1 0

    5 7 8 2 7 2 5 6 3 2 6 3 4 0 6 4 5 0 3 7 7 6 3 5 6 2 5 7 0 3 3 8 2 1 3 8 6 3 6 4 5 7 8 2 1 6 0 2 4 6

    p5

    10052

    1 1 1 1 1 1 1 1 1 0

    5 7 8 2 7 2 5 6 3 2 6 3 4 0 6 4 5 0 3 7 7 6 3 5 6 2 5 7 0 3 3 8 2 1 6 7 6 3 4 4 0 1 8 8 1 8 0 2 4 8

    p6

    8754

    1 1 1 1 1 1 1 1 1 0

    5 7 8 2 7 2 5 6 3 2 6 3 4 0 6 4 5 0 3 7 7 6 3 5 6 2 5 7 0 3 3 8 2 1 6 7 6 3 4 4 0 1 8 8 1 8 0 2 4 8

    p7

    10554

    1 1 1 1 1 1 1 1 1 0

    5 7 8 2 7 2 5 6 3 2 6 3 4 0 6 4 5 0 3 7 7 6 3 5 6 2 5 7 0 3 3 8 2 1 6 7 6 3 4 4 0 1 8 8 1 8 0 2 4 8

    p8

    12354

    1 1 1 1 1 1 1 1 1 0

    5 7 8 2 7 2 5 6 3 2 6 3 4 0 6 4 5 0 3 7 7 6 3 5 6 2 5 7 0 3 3 8 2 1 6 7 6 3 4 4 0 1 8 8 1 8 0 2 4 8

    p9

    9258

    1 1 1 1 1 1 1 1 1 0

    5 7 8 2 7 2 5 6 3 2 6 3 4 0 6 4 5 0 3 7 7 6 3 5 6 2 5 7 0 3 3 8 2 1 3 7 6 3 6 4 5 7 8 8 1 7 0 2 4 6

    p10

    7960

    1 1 1 1 1 1 1 1 1 0

    5 7 8 2 7 2 5 6 3 2 6 3 4 0 6 4 5 0 3 7 7 6 3 5 6 2 5 7 0 3 3 8 2 1 3 7 6 3 6 4 5 7 8 8 1 7 0 2 4 6

    p11

    9760

    1 1 1 1 1 1 1 1 1 0

    5 7 8 2 7 2 5 6 3 2 6 3 4 0 6 4 5 0 3 7 7 6 3 5 6 2 5 7 0 3 3 8 2 1 3 7 6 3 6 4 5 7 8 8 1 7 0 2 4 6

    p12

    11560

    1 1 1 1 1 1 1 1 1 0

    5 7 8 2 7 2 5 6 3 2 6 3 4 0 6 4 5 0 3 7 7 6 3 5 6 2 5 7 0 3 3 8 2 1 3 7 6 3 6 4 5 7 8 8 1 7 0 2 4 6

    p13

    9860

    1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0

    0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 14 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 17 4 5 12 14 13 8

    p14

    7625

    1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0

    0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 14 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 17 4 5 12 14 13 8

    p15

    11025

    1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0

    0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 14 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 17 4 5 12 14 13 8

    p16

    14425

    1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0

    0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 14 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 17 4 5 12 14 13 8

    p17

    9860

    1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0

    0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 14 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 17 4 5 12 14 13 8

    p18

    7625

    1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0

    0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 14 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 17 4 5 12 14 13 8

    p19

    11025

    1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0

    0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 14 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 17 4 5 12 14 13 8

    p20

    14425

    1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0

    0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 14 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 17 4 5 12 14 13 8

    p21

    9860

    1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0

    0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 14 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 17 4 5 12 14 13 8

    p22

    7625

    1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0

    0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 14 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 17 4 5 12 14 13 8

    p23

    11025

    1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0

    0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 14 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 17 4 5 12 14 13 8

    p24

    144251

    1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0

    0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 14 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 17 4 5 12 14 13 8

    p25

    15694

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 25 5 27 20 8 5 12 22 20 8 13 26 10 13 8 25 13 21 18 8 25 25 8 13 18 10 4 22 20 8 15 25

    p26

    13164

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 25 5 27 20 8 5 12 22 20 8 13 26 10 13 8 25 13 21 18 8 25 25 8 13 18 10 4 22 20 8 15 25

    p27

    17964

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 25 5 27 20 8 5 12 22 20 8 13 26 10 13 8 25 13 21 18 8 25 25 8 13 18 10 4 22 20 8 15 25

    p28

    22764

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 25 5 27 20 8 5 12 22 20 8 13 26 10 13 8 25 13 21 18 8 25 25 8 13 18 10 4 22 20 8 15 25

    p29

    16105

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 7 5 27 20 16 5 12 22 20 3 13 26 10 13 16 7 13 21 18 3 25 25 11 19 18 10 4 22 20 9 15 25

    p30

    13471

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 7 5 27 20 16 5 12 22 20 3 13 26 10 13 16 7 13 21 18 3 25 25 11 19 18 10 4 22 20 9 15 25

    p31

    18471

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 7 5 27 20 16 5 12 22 20 3 13 26 10 13 16 7 13 21 18 3 25 25 11 19 18 10 4 22 20 9 15 25

    p32

    23471

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 7 5 27 20 16 5 12 22 20 3 13 26 10 13 16 7 13 21 18 3 25 25 11 19 18 10 4 22 20 9 15 25

    p33

    15666

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 7 5 27 20 8 5 12 22 20 8 13 26 10 13 8 7 7 21 18 8 25 25 8 13 18 10 4 22 20 9 15 25

    p34

    13136

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 7 5 27 20 8 5 12 22 20 8 13 26 10 13 8 7 7 21 18 8 25 25 8 13 18 10 4 22 20 9 15 25

    p35

    17936

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 7 5 27 20 8 5 12 22 20 8 13 26 10 13 8 7 7 21 18 8 25 25 8 13 18 10 4 22 20 9 15 25

    p36

    22736

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 7 5 27 20 8 5 12 22 20 8 13 26 10 13 8 7 7 21 18 8 25 25 8 13 18 10 4 22 20 9 15 25

    p37

    15636

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 7 5 27 20 8 5 12 22 20 8 13 26 10 13 8 7 7 21 18 8 25 25 8 13 18 10 4 22 20 8 15 25

    p38

    13106

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 7 5 27 20 8 5 12 22 20 8 13 26 10 13 8 7 7 21 18 8 25 25 8 13 18 10 4 22 20 8 15 25

    p39

    17906

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 7 5 27 20 8 5 12 22 20 8 13 26 10 13 8 7 7 21 18 8 25 25 8 13 18 10 4 22 20 8 15 25

    p40

    22706

    0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0

    21 10 7 3 20 8 13 18 21 1 26 13 24 21 5 23 13 8 7 5 21 27 8 7 5 22 20 8 5 6 4 13 11 9 4 21 27 8 7 5 11 19 15 10 4 7 20 8 5 7 22 13 8 7 13 21 27 8 3 11 22 13 8 7 9 4 17 22 9 3 8 22 18 21 4 10 12 8 7 7 11 13 10 10 4 21 27 24 11 5 4 13 8 9 4 26 13 24 21 5 4 17 17 9 3 22 20 8 25 5 10 20 8 5 7 22 27 8 7 5 27 20 8 5 12 22 20 8 13 26 10 13 8 7 7 21 18 8 25 25 8 13 18 10 4 22 20 8 15 25

    p41

    8049

    1 1 1 1 1 1 1 1 1 0

    2 8 8 1 6 8 4 3 0 3 0 1 8 8 1 2 2 6 4 2 0 5 0 6 6 7 1 7 7 5 4 3 7 3 4 0 2 0 7 1 5 0 8 2 0 0 0 5 1 5 7 3 3 0 3 1 0 7 8 1 5 8 6 4 6 5 5 7 5 3 5 9 8 7 8 0 6 7 3 4 9 5 4 5 5 9 4 5 6 6

    p42

    9478

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

    16 17 0 6 9 10 0 6 17 8 16 5 2 6 2 5 7 9 2 2 3 0 5 4 12 11 9 12 9 10 12 6 11 13 6 11 3 2 4 4 1 15 18 10 2 6 4 4 0 4 16 0 7 9 14 5 18 14 17 10 4 17 8 7 6 7 10 6 8 8 11 6 5 11 7 15 14 11 7 8

    p43

    12637

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

    20 21 18 22 16 21 18 12 15 10 9 23 20 4 27 24 28 16 1 6 10 13 22 19 10 22 5 9 14 11 22 13 8 15 5 17 8 22 26 25 14 8 14 23 11 14 6 13 17 7 20 15 2 7 1 3 3 13 14 0 26 11 6 26 12 7 22 18 16 23

    p44

    11212

    1 1 1 1 1 1 1 1 1 0

    8 1 1 6 1 2 4 3 7 8 7 0 0 3 0 7 4 8 8 7 8 0 4 4 7 5 4 0 1 7 4 0 3 3 2 5 3 1 1 7 0 2 1 0 7 5 1 1 6 7 2 0 3 7 8 2 2 6 6 0 5 7 6 8 7 2 6 6 7 0 3 9 5 7 7 9 5 5 7 5 4 5 7 7 6 4 4 2 2 3

    p45

    11798

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

    3 18 15 2 8 18 4 9 18 0 0 1 17 0 1 5 17 6 2 7 0 12 16 17 14 18 17 2 7 0 7 8 17 0 10 16 18 0 18 1 7 0 18 9 17 8 2 16 17 7 3 7 8 0 11 12 17 14 16 14 9 18 17 2 1 14 5 17 17 14 12 13 9 18 14 10 1 18 15 10

    p46

    12703

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0

    5 4 18 19 11 8 14 17 6 0 2 9 13 7 24 7 6 7 2 19 12 28 2 13 14 28 4 13 7 11 9 28 17 28 26 7 12 1 28 6 27 7 8 16 3 21 10 0 2 20 12 19 23 3 24 13 25 14 6 24 4 28 24 26 21 5 19 12 24 10

    p47

    11863

    1 1 1 1 1 1 1 1 1 1

    2 8 0 8 1 7 7 8 7 7 3 6 1 6 7 7 8 8 8 8 1 1 6 7 7 7 0 6 7 7 0 6 2 1 7 0 3 7 1 7 0 6 0 7 0 3 7 7 5 7 0 0 1 0 3 7 1 6 0 4 6 7 9 9 7 0 5 7 4 5 9 99 7 9 6 3 5 6 7 9 9 9 9 5 6 3 5 6 6 5

    p48

    9791

    1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 1 0 0 1 0

    3 0 12 0 6 0 12 0 12 1 1 0 13 3 1 0 15 0 1 0 18 1 1 0 18 5 4294967295 4294967295 18 9 42949672954294967295 15 12 4294967295 4294967295 18 18 4294967295 4294967295 15 11 5 3 15 11 4 11 15 11 10 11 15 12 12 11 4294967295 11 18 2 4294967295 12 18 1 4294967295 12 9 5 4294967295 13 9 10 4294967295 4294967295 9 13 4294967295 4294967295 9 15

    p49

    11973

    1 1 1 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 0

    0 22 12 1 25 5 12 10 22 20 1 28 1 12 13 3 27 0 2 12 0 22 5 26 3 26 15 7 27 0 23 10 1 23 7 28 4 2 19 1 28 0 27 14 23 25 12 17 7 27 20 0 28 3 28 14 4294967295 27 0 23 10 3 21 4294967295 28 4 23 16 4294967295 27

    p50

    9513

    1 1 1 1 1 1 1 1 1 0

    3 1 0 8 0 5 8 2 8 1 5 2 6 6 1 2 0 2 8 1 5 7 6 6 4 1 8 5 2 5 0 1 6 2 1 0 8 5 0 5 2 1 7 2 0 2 8 5 0 5 6 7 6 5 5 1 1 5 7 5 1 2 0 6 0 2 7 2 8 6 4294967295 4294967295 6 0 7 2 2 5 7 5 4294967295 7 6 4294967295 4 2 7 5 7 5 5 2 6 6 3 2 4294967295 2 3 4294967295

    p51

    10450

    1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

    1 0 12 13 11 9 6 11 8 9 6 6 11 8 7 11 7 12 15 8 5 6 12 8 8 6 15 11 8 7 1 0 16 12 11 0 6 11 8 7 6 6 11 8 7 0 6 11 9 7 3 0 15 12 8 5 7 17 15 15 5 6 11 0 3 5 16 3 0 10 11 5 14 12 11 0 6 10 9 0 7 6 11 0 2 0 7 9 15 0 5 16 18 0 11 2 13 9 17 0

    p52

    14364

    1 1 1 1 1 1 1 1 1 0

    8 1 3 8 8 2 4 3 1 0 1 1 3 8 0 3 6 0 0 2 5 3 3 8 5 4 7 0 7 7 5 2 3 6 6 2 4 3 6 7 5 3 3 8 6 2 4 2 7 7 5 7 3 2 7 5 2 0 4 4 2 1 3 6 3 3 0 0 4294967295 2 7 3 3 6 5 4 7 2 7 7 5 7 3 2 8 5 5 3 2 0 5 7 7 2 0 5 6 4294967295 4 4

    p53

    13390

    1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 0

    8 3 12 4 9 8 3 11 13 9 17 3 15 1 14 8 3 11 13 9 8 3 11 4 9 5 18 5 7 9 13 3 12 8 17 13 3 12 4 9 11 3 15 5 11 17 11 15 1 14 11 3 12 4 17 11 3 15 5 10 17 0 8 5 2 18 3 11 5 2 1 18 13 0 0 17 3 15 2 4 1 18 14 7 17 1 18 13 10 12 2 18 1 0 0 13 3 12 4 1

    p54

    11647

    1 1 1 1 1 1 1 1 1 0 4 0 0 0 0 4 4 6 5 0 4 0 3 3 2 1 6 4 8 0 8 0 2 5 2 1 6 4 8 0 4 0 3 5 8 1 6 4 8 0 4 4294967295 2 3 2 1 4 4 5 0 4 4294967295 4294967295 4294967295 2 4294967295 6 3 8 4294967295 4 4294967295 3 4294967295 4294967295 4 7 1 8 4294967295 2 4294967295 2 3 2 1 6 4 8 4294967295 4 4294967295 3 4294967295 2 4294967295 6 4 8 4294967295 4294967295 4294967295 2 3 2 4294967295 6 4 5 5 p55 13902 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 0 4 3 8 6 9 9 0 2 6 9 9 2 2 14 9 4 0 2 4 9 4 2 2 14 10 4 2 2 4 8 9 3 11 6 10 4 3 14 7 10 13 2 2 14 18 4 0 0 16 5 4 3 0 7 10 4 0 0 0 10 4 6 2 6 10 4 0 2 4 5 4 3 11 6 10 4 2 2 4 2 2 2 2 14 10 0 2 6 14 15 4294967295 4294967295 6 14 15 4 3 4294967295 8 10

    p56

    25710

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

    19 20 1 15 9 3 8 3 6 25 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 7 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 5 5 14 15 17 27 13 25 15 21 5 14 9 10 18 3 2 8 0 15 16 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 7 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 1 9 21 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 18 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 27 1 28 20 16 8 26 20 8 10 4 1 27 8

    p57

    34410

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

    19 20 1 15 9 3 8 3 6 25 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 7 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 5 5 14 15 17 27 13 25 15 21 5 14 9 10 18 3 2 8 0 15 16 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 7 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 1 9 21 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 18 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 27 1 28 20 16 8 26 20 8 10 4 1 27 8

    p58

    54710

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

    19 20 1 15 9 3 8 3 6 25 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 7 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 5 5 14 15 17 27 13 25 15 21 5 14 9 10 18 3 2 8 0 15 16 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 7 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 1 9 21 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 18 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 27 1 28 20 16 8 26 20 8 10 4 1 27 8

    p59

    40829

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

    19 20 1 15 9 3 8 3 6 25 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 7 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 5 5 14 15 17 27 13 25 15 21 5 14 9 10 18 3 2 8 0 15 16 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 7 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 1 9 21 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 18 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 27 1 28 20 16 8 26 20 8 10 4 1 27 8

    p60

    25710

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

    19 20 1 15 9 3 8 3 6 25 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 7 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 5 5 14 15 17 27 13 25 15 21 5 14 9 10 18 3 2 8 0 15 16 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 7 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 1 9 21 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 18 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 27 1 28 20 16 8 26 20 8 10 4 1 27 8

    p61

    34410

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

    19 20 1 15 9 3 8 3 6 25 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 7 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 5 5 14 15 17 27 13 25 15 21 5 14 9 10 18 3 2 8 0 15 16 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 7 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 1 9 21 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 18 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 27 1 28 20 16 8 26 20 8 10 4 1 27 8

    p62

    54710

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

    19 20 1 15 9 3 8 3 6 25 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 7 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 5 5 14 15 17 27 13 25 15 21 5 14 9 10 18 3 2 8 0 15 16 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 7 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 1 9 21 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 18 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 27 1 28 20 16 8 26 20 8 10 4 1 27 8

    p63

    40829

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 19 20 1 15 9 3 8 3 6 25 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 7 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 5 5 14 15 17 27 13 25 15 21 5 14 9 10 18 3 2 8 0 15 16 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 7 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 1 9 21 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 18 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 27 1 28 20 16 8 26 20 8 10 4 1 27 8

    p64

    25710

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 19 20 1 15 9 3 8 3 6 25 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 7 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 5 5 14 15 17 27 13 25 15 21 5 14 9 10 18 3 2 8 0 15 16 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 7 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 1 9 21 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 18 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 27 1 28 20 16 8 26 20 8 10 4 1 27 8

    p65

    34410

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 19 20 1 15 9 3 8 3 6 25 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 7 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 5 5 14 15 17 27 13 25 15 21 5 14 9 10 18 3 2 8 0 15 16 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 7 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 1 9 21 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 18 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 27 1 28 20 16 8 26 20 8 10 4 1 27 8

    p66

    54710

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 19 20 1 15 9 3 8 3 6 25 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 7 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 5 5 14 15 17 27 13 25 15 21 5 14 9 10 18 3 2 8 0 15 16 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 7 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 1 9 21 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 18 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 27 1 28 20 16 8 26 20 8 10 4 1 27 8

    p67

    41474

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 19 20 1 8 9 3 8 3 24 5 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 21 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 2 5 14 15 17 27 22 25 15 21 5 14 9 10 18 3 2 8 22 15 12 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 28 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 17 9 1 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 11 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 23 2 14 27 4 26 4 28 22 28 15 8 1 28 20 16 8 26 20 8 10 4 1 27 8

    p68

    25710

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

    19 20 1 15 9 3 8 3 6 25 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 7 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 5 5 14 15 17 27 13 25 15 21 5 14 9 10 18 3 2 8 0 15 16 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 7 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 1 9 21 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 18 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 27 1 28 20 16 8 26 20 8 10 4 1 27 8

    p69

    34410

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

    19 20 1 15 9 3 8 3 6 25 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 7 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 5 5 14 15 17 27 13 25 15 21 5 14 9 10 18 3 2 8 0 15 16 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 7 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 1 9 21 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 18 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 27 1 28 20 16 8 26 20 8 10 4 1 27 8

    p70

    54710

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

    19 20 1 15 9 3 8 3 6 25 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 7 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 5 5 14 15 17 27 13 25 15 21 5 14 9 10 18 3 2 8 0 15 16 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 7 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 1 9 21 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 18 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 27 1 28 20 16 8 26 20 8 10 4 1 27 8

    p71

    40829

    1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

    19 20 1 15 9 3 8 3 6 25 9 4 10 14 9 2 7 16 16 20 16 16 4 19 17 8 7 0 3 16 4 5 7 3 2 16 7 24 24 10 1 12 12 1 3 22 12 5 22 19 17 14 24 4 17 4 5 5 14 15 17 27 13 25 15 21 5 14 9 10 18 3 2 8 0 15 16 11 3 14 5 25 11 23 20 5 15 2 24 15 9 7 0 27 7 17 20 8 11 3 6 9 19 11 27 7 1 23 13 9 25 1 9 21 7 17 18 8 11 18 0 10 10 13 28 15 21 20 8 2 23 12 12 9 16 26 5 23 14 1 2 17 19 11 6 19 11 8 18 9 8 11 5 22 4 25 0 24 12 17 23 8 19 17 26 0 2 5 19 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 27 1 28 20 16 8 26 20 8 10 4 1 27 8

2. Simulated Annealing

  • strategy taken:

    Take the calculation result of the greedy algorithm before as the initial solution, and the new solution is obtained through several iteration processes.

  • Code Implement:

    void Simulated_annealing(int p, vector <int>& capacity, vector <int>& opencost, vector<double>& customer_demand, vector<vector<double>>& assign_cost) {
    	//generate random
    	srand((unsigned)time(NULL));  
    	//start timing
    	auto start = system_clock::now();
    	//define cost
    	int final_cost = 0;
    	int facility_num = capacity.size();
    	int customer_num = customer_demand.size();
    	string f_greedy1 = "greedy1_solutions/s";
    	string f_sa = "Simulated_annealing_solutions/s";
    	//define facility solution
    	vector<int> which_facility(facility_num, 0);
    	//define customer solution
    	vector<int> customer_choose(customer_num, 0);
    	vector<int> serve_number(facility_num, 0);
    	vector <int> current_capacity = capacity;
    	//get initial solution from greedy algorithom
    	ifstream fin(f_greedy1+to_string(p));
    	fin >> final_cost;
    	for (int i = 0; i < facility_num; i++) {
    		fin >> which_facility[i];
    	}
    	for (int i = 0; i < customer_num; i++) {
    		fin >> customer_choose[i];
    		current_capacity[customer_choose[i]] -= customer_demand[i];
    		serve_number[customer_choose[i]]++;
    	}
    	fin.close();
    	ofstream fout(f_sa+to_string(p));
    	int best_final_cost = final_cost;
    	vector<int> best_which_facility = which_facility;
    	vector<int> best_customer_choose = customer_choose;
    	int customer = 0;
    	int facility = 0;
    	int change = 0;
    	bool flag = false;	
    	double Tem = (double)final_cost/10;
    	for (int outer = 0; outer < facility_num*20; outer++) {
    		if (Tem < 1e-15) {
    			break;
    		}
    		for (int inner = 0; inner < customer_num*10; inner++) {
    			customer = rand()%customer_num;
    			flag = false;
    			for (int i = 0; i < facility_num; i++) {
    				facility = rand()%facility_num;
    				if (facility != customer_choose[customer] && current_capacity[facility] > customer_demand[customer]) {
    					flag = true;
    					break;
    				}
    			}
    			if (!flag) {
    				continue;
    			}
    			change = (1 - which_facility[facility])*opencost[facility]+
    			assign_cost[facility][customer]-
    			assign_cost[customer_choose[customer]][customer]-
    			(serve_number[customer_choose[customer]]==1 ? opencost[customer_choose[customer]]:0);
    			if (min(1.0, exp(-change / Tem)) < (rand()%1000)/1000.0) {
    				continue;
    			}
    			//update
    			final_cost += change;
    			current_capacity[customer_choose[customer]] += customer_demand[customer];
    			current_capacity[facility] -= customer_demand[customer];
    			serve_number[customer_choose[customer]]--;
    			if (serve_number[customer_choose[customer]] == 0) {
    				which_facility[customer_choose[customer]] = 0;
    			}
    			if (serve_number[facility] == 0) {
    				which_facility[facility] = 1;
    			}
    			serve_number[facility]++;
    			customer_choose[customer] = facility;
    			//record best solution
    			if (final_cost < best_final_cost) {
    				Tem *= 0.95;
    				best_final_cost = final_cost;
    				best_customer_choose = customer_choose;
    				best_which_facility = which_facility;
    			}
    		}
    		Tem *= 0.98;
    	}
      fout << compute_cost(opencost, assign_cost, best_which_facility, best_customer_choose) << endl;
    	for (int i = 0; i < facility_num; i++) {
    		fout << best_which_facility[i] << " ";
    	}
    	fout << endl;
    	for (int i = 0; i < customer_num; i++) {
    		fout << best_customer_choose[i] << " ";
    	}
    	auto end   = system_clock::now();
    	auto duration = duration_cast<microseconds>(end - start);
    	fout << endl << double(duration.count()) * microseconds::period::num / microseconds::period::den;
    	fout.close();
    }
    
  • Result:

    File Result Time(s)
    p1 8863 0.020943
    p2 7926 0.021947
    p3 9365 0.019946
    p4 10793 0.021939
    p5 8950 0.031883
    p6 7777 0.031914
    p7 9543 0.038895
    p8 11088 0.034909
    p9 8544 0.030917
    p10 7617 0.02593
    p11 9027 0.026925
    p12 10132 0.023934
    p13 8376 0.041888
    p14 7182 0.038895
    p15 8977 0.034906
    p16 10603 0.032913
    p17 8288 0.03291
    p18 7125 0.031915
    p19 8952 0.032912
    p20 10752 0.03294
    p21 8144 0.03096
    p22 7092 0.034024
    p23 8746 0.036938
    p24 10374 0.041887
    p25 12632 0.126661
    p26 11140 0.125665
    p27 13295 0.1267
    p28 15794 0.1326
    p29 13452 0.130652
    p30 11701 0.129695
    p31 14014 0.131606
    p32 16490 0.12766
    p33 12316 0.124666
    p34 11285 0.124672
    p35 13137 0.130885
    p36 15128 0.126663
    p37 12200 0.126619
    p38 10984 0.128614
    p39 12984 0.124666
    p40 14984 0.124706
    p41 7103 0.03494
    p42 1910 0.052818
    p43 6488 0.05884
    p44 7128 0.035905
    p45 6969 0.06283
    p46 6269 0.057845
    p47 6249 0.035903
    p48 5919 0.052817
    p49 5606 0.058838
    p50 9288 0.039894
    p51 8211 0.066038
    p52 9303 0.041885
    p53 9328 0.068814
    p54 9275 0.049494
    p55 8443 0.067817
    p56 22848 0.19049
    p57 29836 0.189492
    p58 46649 0.191489
    p59 40829 0.194478
    p60 22266 0.19244
    p61 27930 0.180478
    p62 44442 0.191534
    p63 28201 0.226393
    p64 22535 0.234373
    p65 26972 0.178561
    p66 41550 0.182813
    p67 27865 0.179518
    p68 22711 0.17669
    p69 29664 0.189531
    p70 43674 0.210472
    p71 31862 0.186501
    • Detail:

      p1

      8863

      1 1 1 1 1 0 1 0 1 1

      8 2 1 6 3 8 2 4 4 1 9 0 3 2 8 3 4 0 9 4 3 4 6 4 2 6 1 6 0 1 2 6 0 3 9 4 4 3 0 4 3 8 1 6 4 0 2 0 4 0

      p2

      7926

      1 1 1 1 1 1 1 1 1 0

      8 2 1 6 3 8 2 4 4 1 4 0 3 2 8 3 4 0 6 7 3 4 6 4 2 5 1 5 0 5 2 6 0 3 4 4 4 3 0 4 1 8 1 5 7 0 2 0 4 0

      p3

      9365

      1 1 1 1 1 0 1 0 1 0

      8 2 1 6 3 8 2 4 4 1 4 0 3 2 8 3 4 0 6 4 3 2 6 4 2 6 1 6 0 1 2 6 0 3 2 4 4 3 0 4 3 8 1 6 4 0 2 0 4 0

      p4

      10793

      1 1 1 1 1 0 1 0 1 0 8 2 1 6 3 8 2 4 4 1 4 8 3 2 0 3 2 0 6 4 3 4 6 4 2 6 1 6 0 1 2 6 0 3 4 4 4 3 0 4 2 8 1 6 4 0 2 0 4 0

      p5

      8950

      1 1 1 1 1 0 1 0 1 1

      8 8 1 6 1 8 2 4 4 1 9 8 0 2 8 3 2 3 9 9 3 8 6 4 2 6 1 1 0 1 2 6 0 3 9 4 4 3 0 4 1 8 1 6 4 0 9 0 4 0

      p6

      7777

      1 1 1 1 1 0 1 1 1 1

      8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 7 3 8 6 4 2 6 1 1 0 1 2 6 0 3 9 4 4 3 0 4 1 8 1 6 7 0 2 3 7 0

      p7

      9543

      1 1 1 1 1 0 1 0 1 1

      8 8 1 6 1 8 2 4 4 1 9 8 3 2 8 3 2 0 9 9 3 8 6 4 2 6 1 1 0 1 2 6 0 3 9 4 4 3 3 4 1 8 1 6 4 0 9 0 4 0

      p8

      11088

      1 1 1 1 1 0 1 0 1 1

      8 8 1 6 3 8 2 4 4 1 9 8 3 2 8 3 2 0 9 9 3 8 6 4 2 6 1 1 0 1 2 6 0 3 9 4 4 3 0 4 1 8 1 6 4 0 9 3 4 0

      p9

      8544

      1 1 1 0 1 0 1 0 1 1

      8 8 1 6 1 8 2 4 2 1 9 8 0 2 8 0 4 0 9 4 1 8 6 4 2 6 1 1 0 1 2 6 0 0 9 4 4 0 8 4 1 8 1 6 4 0 2 0 4 0

      p10

      7617

      1 1 1 1 1 0 1 1 1 0

      8 8 1 6 3 8 2 4 4 1 4 8 3 2 8 3 4 0 6 7 3 8 6 4 2 6 1 1 0 1 2 6 0 3 4 4 4 3 0 4 1 8 1 6 7 0 4 0 4 0

      p11

      9027

      1 1 1 1 1 0 1 0 1 0

      8 8 1 6 3 8 2 4 4 1 4 8 3 2 8 3 2 0 6 4 3 8 6 4 2 6 1 1 0 1 2 6 0 3 4 4 4 3 0 4 1 8 1 6 4 0 2 0 4 0

      p12

      10132

      1 1 1 0 1 0 1 0 1 0

      8 8 1 6 1 8 2 4 4 1 4 8 0 2 8 0 2 0 6 4 1 8 6 4 2 6 1 1 8 1 2 6 0 0 4 4 4 1 0 4 1 8 1 6 4 0 2 0 4 0

      p13

      8376

      1 1 0 0 0 0 0 0 0 1 1 0 0 1 1 1 0 1 0 1

      0 1 10 10 1 13 17 13 14 17 15 19 19 10 13 14 15 10 19 9 14 15 15 19 9 17 0 17 1 17 13 14 13 0 1 10 17 19 19 13 9 0 15 0 9 13 14 10 19 9

      p14

      7182

      0 0 0 1 0 0 1 0 0 0 1 0 0 1 1 1 1 1 0 1

      16 3 10 10 19 13 17 13 14 17 15 19 19 10 13 3 15 10 17 6 14 15 15 19 6 17 16 17 3 17 13 15 13 16 3 10 3 19 19 13 6 16 15 16 3 13 14 10 19 6

      p15

      8977

      0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 1 1 1 0 1

      16 3 10 10 19 15 17 13 3 17 15 19 19 6 13 3 15 10 17 6 3 15 15 19 6 17 16 17 19 17 13 15 13 16 3 10 3 19 19 13 6 16 16 16 3 13 15 10 19 6

      p16

      10603

      0 0 0 1 0 0 0 0 0 1 1 0 0 1 0 1 1 1 0 1

      16 3 10 10 19 13 17 13 3 17 15 19 19 10 13 3 15 10 17 9 3 15 15 19 9 17 16 3 17 17 13 15 13 16 3 10 3 19 19 13 9 16 16 16 3 13 15 10 19 9

      p17

      8288

      1 0 0 1 0 0 0 0 0 1 1 0 0 1 1 1 0 1 0 1

      0 3 10 10 19 15 17 13 14 17 15 19 19 10 13 3 15 10 17 9 14 15 15 19 9 17 0 17 3 17 13 15 13 0 3 10 3 19 19 13 9 0 15 0 3 13 14 10 19 9

      p18

      7125

      0 0 0 1 0 0 0 0 0 1 1 0 0 1 1 1 1 1 0 1

      16 3 10 10 19 15 17 13 14 17 15 19 19 10 13 3 15 10 17 9 14 15 15 19 9 17 16 17 3 17 13 15 13 16 3 10 3 19 19 13 9 16 15 16 3 13 14 10 19 9

      p19

      8952

      0 0 0 1 0 0 1 0 0 0 1 0 0 1 1 1 1 1 0 1

      16 3 10 10 19 15 17 13 14 17 15 19 19 6 13 3 15 10 17 6 14 15 15 19 6 17 16 17 3 17 13 15 13 16 3 10 3 19 19 13 6 16 15 16 3 13 14 10 19 6

      p20

      10752

      0 0 0 1 0 0 1 0 0 0 1 0 0 1 1 1 1 1 0 1

      16 3 10 10 19 15 17 13 14 17 15 19 19 6 13 3 15 10 17 6 14 15 15 19 6 17 16 17 3 17 13 15 13 16 3 10 3 19 19 13 6 16 15 16 3 13 14 10 19 6

      p21

      8144

      1 1 0 0 0 0 0 0 0 1 1 0 0 1 1 1 0 1 0 1

      0 1 10 10 1 15 17 13 14 17 15 19 1 10 13 14 15 10 17 9 14 15 15 19 9 17 0 17 1 17 13 15 13 0 1 10 17 19 19 13 10 0 0 0 9 13 14 10 19 9

      p22

      7092

      1 0 0 1 0 0 0 0 0 1 1 0 0 1 1 1 0 1 0 1

      0 3 10 10 19 15 17 13 14 17 15 19 19 10 13 3 15 10 17 9 14 15 15 19 9 17 0 17 3 17 13 15 13 0 3 10 3 19 19 13 10 0 0 0 3 13 14 10 19 9

      p23

      8746

      1 0 0 1 0 0 0 0 0 1 1 0 0 1 0 1 0 1 0 1

      0 3 10 10 19 15 17 13 3 17 15 19 19 10 13 3 15 10 17 9 15 15 15 19 9 17 0 17 3 17 13 15 13 0 3 10 3 19 19 13 10 0 0 0 3 13 15 10 19 9

      p24

      10374

      0 0 0 1 0 0 0 0 0 1 1 0 0 1 0 1 1 1 0 1

      16 3 10 10 19 15 17 13 3 17 15 19 19 10 13 3 15 10 17 9 15 15 15 19 9 17 16 17 3 17 13 15 13 16 3 10 3 19 19 13 10 16 15 16 3 13 15 10 19 9

      p25

      12632

      1 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      20 11 20 14 20 5 2 24 14 17 24 8 8 20 2 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 20 11 8 5 14 14 5 20 20 17 11 11 14 0 5 20 11 11 11 24 0 24 24 20 20 11 17 24 8 24 20 14 24 20 7 20 17 17 17 2 7 20 5 2 24 17 11 7 24 14 2 25 20 8 17 14 25 2 25 7 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 20 8 0 5 24 0 25 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5

      p26

      11140

      1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      20 11 20 14 20 5 14 24 14 17 5 8 8 20 2 14 14 17 25 11 2 0 5 17 5 8 2 24 5 24 25 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 20 11 8 5 14 14 5 20 20 17 11 11 14 0 5 20 11 11 11 24 0 24 24 20 20 11 17 24 8 5 20 14 24 20 0 20 17 2 17 2 0 20 5 2 24 0 11 0 5 2 14 25 8 8 17 17 25 2 25 0 11 20 8 14 14 2 11 11 25 24 24 24 24 5 8 25 20 20 11 5 24 0 25 0 0 24 5 8 14 0 5 20 17 0 8 20 14 8 25 25 5 2 5

      p27

      13295

      1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      20 11 20 14 20 5 2 24 14 17 24 8 8 20 17 14 14 17 25 11 2 0 5 17 5 8 2 24 5 24 11 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 20 11 8 5 14 14 5 20 20 17 11 11 14 0 5 20 11 11 11 24 0 24 24 20 20 11 0 24 8 24 20 14 24 8 0 20 0 2 0 17 0 20 5 2 24 0 11 17 24 2 14 25 20 8 17 17 25 2 25 0 11 14 8 14 14 2 11 11 11 24 24 24 24 5 8 25 20 20 11 5 24 0 11 0 11 24 5 8 14 0 5 20 17 0 8 20 14 8 25 25 5 2 5

      p28

      15794

      1 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      20 25 20 14 20 5 14 24 14 17 24 8 8 20 2 14 14 17 5 11 14 17 24 17 5 8 2 24 5 24 25 25 20 25 20 20 24 24 11 14 0 14 24 8 24 14 7 20 11 8 5 14 14 5 20 20 17 0 0 14 0 5 20 11 11 11 24 0 24 24 20 20 11 0 24 8 24 20 14 24 20 7 20 17 2 17 2 7 20 5 2 24 2 11 0 24 2 7 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 5 24 5 8 25 20 8 0 5 24 11 25 0 0 24 24 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5

      p29

      13452

      1 0 1 0 0 1 0 0 1 1 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      20 11 13 2 20 5 2 9 14 17 24 8 8 20 2 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 13 25 20 20 24 24 0 14 0 14 9 8 24 14 0 13 11 8 5 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 9 0 9 9 20 20 11 17 24 8 9 20 2 24 20 0 13 17 17 17 17 0 20 5 2 24 17 11 17 9 2 2 25 13 8 17 14 25 2 25 17 11 8 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 0 5 9 0 25 0 0 24 25 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5

      p30

      11701

      1 0 1 0 0 1 0 0 1 1 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      20 11 20 2 20 5 2 24 14 17 9 8 8 20 0 14 14 17 25 11 2 0 5 17 5 8 2 24 5 24 5 25 13 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 5 2 14 5 13 13 17 11 11 14 0 5 20 11 11 11 9 0 9 9 20 20 11 0 24 8 9 20 14 24 20 0 13 17 17 17 17 0 20 5 2 9 17 11 17 9 2 2 25 13 8 17 17 25 2 25 17 11 14 14 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 0 5 9 0 25 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5

      p31

      14014

      1 0 1 0 0 1 0 0 1 1 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      20 11 20 2 20 5 2 24 14 17 9 8 8 20 2 14 14 17 25 11 2 0 5 17 5 8 2 24 5 9 5 25 13 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 25 14 14 5 13 20 17 25 11 14 0 5 20 11 11 11 9 0 9 24 13 20 11 17 24 8 9 20 14 9 20 0 13 17 2 17 17 0 20 5 2 24 17 11 17 5 2 2 25 8 8 17 17 25 2 25 0 11 14 8 14 2 2 11 11 25 24 24 24 24 5 8 25 13 8 0 5 9 0 25 0 11 24 9 8 14 0 5 20 17 0 8 20 14 8 25 25 5 2 5

      p32

      16490

      1 0 1 0 0 1 0 0 1 1 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      13 25 20 2 13 5 2 24 14 17 9 8 8 20 2 14 14 17 5 11 2 0 9 17 5 8 2 24 5 9 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 9 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 9 0 5 9 13 13 11 17 24 8 9 20 14 24 20 17 13 17 2 17 17 0 20 5 2 24 17 0 17 9 2 2 25 13 13 17 17 25 2 25 0 11 14 8 14 17 2 11 11 11 24 24 24 24 5 8 25 13 8 0 5 9 0 25 0 11 24 25 8 14 0 5 20 17 0 8 20 14 8 11 25 5 2 5

      p33

      12316

      1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      20 11 20 2 20 5 2 24 14 17 24 20 8 20 17 14 14 17 25 11 2 0 5 17 5 8 2 24 5 24 25 25 20 25 20 20 24 24 17 14 0 14 24 8 24 14 17 20 11 8 5 14 14 5 8 20 17 11 11 14 0 5 20 11 11 11 24 0 5 5 8 20 11 17 24 8 24 20 14 24 20 0 8 17 17 17 17 0 20 5 2 24 17 11 17 5 2 14 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 5 24 5 8 25 20 14 0 5 24 0 25 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 11 25 5 2 5

      p34

      11285

      1 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      20 11 13 2 20 5 2 24 14 17 5 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 13 11 8 5 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 24 5 20 20 11 17 24 8 24 20 14 24 20 0 13 17 17 17 17 0 20 5 2 24 17 11 17 5 2 2 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 0 5 24 0 25 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5

      p35

      13137

      1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      20 11 8 2 20 5 2 24 14 17 24 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 20 25 20 20 24 5 0 14 0 14 24 8 24 14 0 20 11 8 5 14 14 5 20 20 17 25 0 14 0 5 20 11 11 11 24 0 5 24 20 8 11 17 24 8 5 20 14 24 20 0 20 17 2 17 17 17 20 5 2 24 17 11 17 24 2 17 25 8 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 11 24 24 24 24 5 8 5 20 8 0 5 24 0 25 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5

      p36

      15128

      1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      20 11 20 2 20 5 17 24 14 17 5 8 8 20 2 14 14 17 5 11 2 0 24 17 5 8 2 24 24 24 5 25 8 25 20 20 24 24 11 14 0 14 24 8 24 14 11 20 11 8 25 14 14 5 20 8 17 11 11 14 0 5 20 11 11 11 24 0 5 5 20 20 11 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 17 11 17 5 2 2 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 5 24 5 8 25 20 8 0 5 24 0 25 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5

      p37

      12200

      1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      20 11 20 2 20 5 2 24 14 17 24 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 20 11 8 5 14 14 5 20 20 17 11 11 14 0 5 20 11 11 11 24 0 24 24 20 20 11 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 17 11 17 24 2 2 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 20 8 0 5 24 0 25 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5

      p38

      10984

      1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      20 11 20 2 20 5 2 24 14 17 24 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 20 11 8 5 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 20 11 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 17 11 17 24 2 2 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 20 8 0 5 24 0 25 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5

      p39

      12984

      1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      20 11 20 2 20 5 2 24 14 17 24 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 20 11 8 5 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 20 11 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 17 11 17 5 2 2 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 20 8 0 5 24 0 25 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5

      p40

      14984

      1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0

      20 11 20 2 20 5 2 24 14 17 24 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 20 25 20 20 24 24 0 14 0 14 24 8 24 14 0 20 11 8 5 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 20 11 17 24 8 24 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 17 11 17 5 2 2 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 20 8 0 5 24 0 25 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5

      p41

      7103

      1 1 1 1 1 1 1 1 1 1

      5 6 4 1 7 9 3 7 8 8 4 9 2 6 2 7 7 3 0 6 6 1 4 1 6 5 5 4 8 5 8 0 0 0 3 9 2 6 6 2 2 7 3 3 3 5 0 5 6 4 1 1 6 6 2 7 2 8 8 8 0 0 1 5 0 6 6 6 4 4 0 4 4 0 7 7 2 2 6 5 7 2 9 7 9 9 9 9 9 2

      p42

      6910

      1 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 1 1 1

      12 18 11 5 19 19 16 13 16 16 11 18 19 14 19 0 0 17 14 14 5 11 5 11 12 12 11 16 17 13 0 19 18 14 14 19 19 0 0 0 16 11 13 16 5 5 18 19 0 18 16 17 17 13 13 5 12 14 14 14 11 11 11 11 11 11 0 0 19 19 19 12 19 19 19 18 18 19 19 19

      p43

      6488

      0 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 1 0 0 1 0 0 1 1

      6 21 18 29 25 22 25 21 28 29 28 1 13 9 18 6 21 6 18 21 25 9 22 22 22 13 29 6 29 29 29 13 13 13 22 9 1 1 21 18 18 18 28 28 29 25 9 22 9 6 21 9 25 6 18 6 21 22 25 29 29 29 1 29 28 29 28 1 28 29

      p44

      7128

      1 1 1 1 1 1 1 1 1 1

      4 4 4 4 4 4 4 4 0 0 6 0 0 0 0 0 1 8 1 7 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 0 1 1 2 8 7 5 9 7 7 6 5 5 8 8 7 7 9 5 5 5 9 3 0 6 6 8 1 0 4 7 9 7 7 8 6 6 5 8 7 9 9 9 9 9 6 5 7 5

      p45

      6969

      1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 1 0 0 0 0

      0 0 0 0 0 0 0 6 6 6 6 6 6 6 6 2 2 2 2 2 2 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 0 0 2 2 8 2 15 14 13 10 15 5 8 13 14 13 13 0 14 15 10 10 12 10 15 13 13 13 8 12 10 10 15 2 13 8 14 14 8 14 10 13

      p46

      6269

      0 1 1 0 0 1 0 0 0 1 1 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0

      10 10 10 10 10 10 10 19 1 28 1 1 1 1 1 2 2 2 2 2 2 5 5 5 5 5 5 9 9 9 9 13 9 9 10 2 2 5 14 28 28 19 19 28 14 14 18 14 13 28 10 13 13 1 2 13 13 18 18 14 19 19 28 18 14 13 14 13 19 18

      p47

      6249

      1 1 1 1 1 1 1 1 1 1

      0 0 0 0 0 0 0 0 0 2 1 1 1 2 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 7 7 6 7 6 0 7 7 7 7 7 7 8 8 8 8 6 8 8 8 9 2 9 9 9 9 9 0

      p48

      5919

      1 0 0 1 0 1 0 1 1 1 1 0 0 1 1 0 0 1 0 1

      0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 8 8 9 8 8 9 8 9 9 9 9 10 10 10 10 10 10 13 13 13 13 13 8 13 14 14 13 14 13 0 14 14 14 14 17 17 17 17 17 17 17 17 19 19 19 19 19 19 19

      p49

      5606

      0 1 1 0 0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 1 0 1 0

      1 1 1 2 1 2 2 2 2 2 2 2 2 7 7 7 7 7 7 7 7 7 9 9 9 9 9 13 13 13 13 13 13 13 13 13 16 16 16 16 16 16 20 20 20 20 20 20 21 20 21 20 1 21 21 21 21 26 26 26 26 26 26 26 28 28 28 28 26 28

      p50

      9288

      1 1 1 1 1 1 1 1 0 1

      3 6 3 0 2 1 5 5 3 7 7 4 1 9 9 9 9 2 5 3 6 0 0 4 0 0 7 4 4 7 7 7 3 3 3 5 9 9 0 6 0 9 9 9 5 5 5 5 5 3 3 5 6 4 0 0 9 6 1 2 2 7 7 7 3 3 0 4 7 7 3 6 6 0 0 4 4 3 3 4 3 5 2 2 2 2 6 7 2 7 9 1 2 2 1 2 1 1 9 1

      p51

      8211

      1 1 0 0 0 1 0 0 0 0 1 0 1 1 1 1 0 0 1 1

      15 0 19 10 12 18 5 5 15 1 5 14 18 13 13 13 12 5 5 15 0 0 10 14 14 14 15 19 19 1 1 1 19 19 15 5 18 13 10 0 0 13 13 13 12 5 5 5 5 15 15 5 14 14 14 10 13 0 18 12 12 5 1 5 15 15 10 19 15 1 15 0 0 0 10 19 19 19 19 19 19 5 12 12 13 13 13 5 12 1 13 13 18 18 18 13 13 18 18 13

      p52

      9303

      0 0 0 1 1 1 1 1 1 1

      7 7 7 7 7 7 7 7 3 4 4 4 4 4 4 4 4 8 3 8 8 3 8 8 3 9 9 5 9 9 9 9 9 5 6 6 6 6 6 6 6 6 6 6 7 7 4 8 8 5 5 3 4 6 7 5 3 3 3 4 6 9 5 5 3 3 5 7 4 7 6 6 4 3 3 5 3 4 7 5 6 3 3 5 5 3 3 7 5 3 8 5 9 6 5 6 3 4 3 7

      p53

      9328

      0 1 0 1 0 1 0 1 0 1 0 0 1 1 0 1 0 1 1 0

      5 5 5 5 5 5 5 5 1 7 7 7 7 7 7 7 7 12 13 13 12 13 12 13 12 15 9 9 9 9 9 9 9 15 18 18 18 18 18 18 18 18 18 18 5 5 7 12 12 15 15 1 7 18 5 15 3 3 1 7 18 9 15 13 3 13 9 18 7 5 17 18 7 3 3 15 3 7 7 17 18 7 13 15 15 3 1 5 15 1 15 9 17 17 15 17 1 7 1 5

      p54

      9275

      1 0 1 1 1 1 1 1 1 1

      7 7 7 7 7 7 7 7 2 2 2 2 2 2 2 2 2 2 2 3 3 3 2 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 6 6 6 8 8 8 8 8 8 8 8 8 3 6 6 6 6 6 6 6 6 6 5 5 6 5 5 5 6 6 0 0 6 0 5 7 0 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 9 4 9 4 9 9 9 9 9

      p55

      8443

      1 0 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 0 1 0

      18 18 18 18 18 18 8 8 8 8 8 8 2 8 2 2 2 2 8 12 6 6 12 6 12 12 12 12 6 6 6 6 6 6 6 6 6 6 6 7 7 0 0 7 0 0 0 0 0 0 0 0 7 7 7 7 7 7 7 7 7 9 13 7 13 7 9 7 7 9 13 9 9 13 18 13 9 13 9 9 13 15 15 15 15 15 15 15 15 15 15 18 18 18 18 18 18 18 18 18

      p56

      22848

      1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1

      18 19 21 27 21 12 21 27 22 28 4 28 10 3 28 18 3 20 22 27 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 16 18 9 6 4 8 19 3 21 19 20 24 16 24 16 8 6 11 9 18 25 29 0 7 8 3 11 5 17 28 25 18 12 6 9 23 23 20 5 8 16 10 0 9 25 29 10 19 5 27 7 28 6 25 25 2 3 11 12 0 28 28 21 25 18 4 0 4 24 22 3 19 29 27 12 12 8 28 7 17 8 9 11 28 19 26 16 2 11 26 17 28 24 11 20 23 9 3 3 28 10 12 22 11 11 25 5 24 21 27 25 24 17 23 0 8 11 2 16 3 3 3 27 10 24 5 27 5 4 3 21 5 20 19 10 26 2 0 10 29 10 5 21 2 6 12 8 28 23 0 21 2 21 6 4 7 12 7 21 10 19

      p57

      29836

      0 0 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0

      18 19 21 27 2 12 21 27 22 28 4 28 13 13 28 18 3 20 22 27 18 16 5 24 10 18 27 19 4 2 19 19 4 16 27 6 20 8 24 16 18 8 6 4 8 19 13 21 19 20 24 16 24 16 8 6 11 8 18 7 4 2 7 8 13 11 5 17 28 25 18 12 19 8 23 23 20 23 8 16 10 17 26 25 4 13 6 5 27 7 28 6 25 25 2 3 11 6 17 28 28 21 25 18 4 24 4 27 22 3 19 4 27 12 12 8 28 7 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 8 3 3 28 10 12 22 11 11 25 5 24 21 27 11 24 17 23 17 8 11 2 16 3 13 13 27 10 24 5 27 5 4 3 21 5 20 19 10 26 2 24 10 4 10 5 21 2 19 12 8 28 23 17 21 2 21 6 4 7 12 7 21 10 19

      p58

      46649

      1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 0 1 1 1 0 1 1 0

      18 19 21 27 2 12 21 27 18 28 4 28 10 3 28 18 3 20 27 0 18 16 5 24 10 18 24 19 4 2 19 19 4 16 27 6 20 8 24 16 18 9 6 9 8 19 3 21 19 14 24 16 24 16 8 6 11 9 18 7 4 0 7 8 3 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 4 10 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 21 25 18 4 0 4 24 27 3 19 4 27 12 12 8 28 7 17 8 9 11 17 19 9 16 2 11 19 17 28 24 25 20 23 9 3 3 28 10 12 27 11 11 25 5 24 21 27 25 24 17 23 0 8 11 2 16 3 3 3 27 10 24 5 27 5 4 3 21 5 20 19 14 4 2 0 10 4 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 21 10 19

      p59

      32175

      1 0 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 1 1 1 1 1 0

      18 19 21 27 2 12 21 27 18 28 4 28 10 3 28 18 3 10 27 0 18 16 5 24 10 18 27 19 4 2 19 19 4 16 27 6 8 8 24 16 18 8 6 4 8 19 3 21 19 14 24 16 24 16 8 6 25 8 18 25 4 0 7 8 3 25 5 14 19 25 18 12 6 8 23 23 10 23 8 16 10 0 26 25 4 10 6 5 27 7 28 6 25 25 2 3 28 6 0 28 28 21 25 18 4 0 4 24 27 3 19 4 27 12 12 8 28 7 14 8 26 25 28 19 26 16 2 12 26 0 28 24 25 10 23 8 3 3 28 10 12 27 12 25 25 5 24 21 27 25 24 0 23 0 8 28 2 16 3 3 3 27 10 24 5 27 5 4 3 21 5 14 19 14 26 2 0 10 4 14 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 21 10 19

      p60

      22266

      1 0 1 1 1 1 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1

      18 19 2 27 2 12 21 27 22 28 4 28 10 3 28 18 3 20 22 0 18 16 5 24 23 18 27 19 29 2 19 19 4 16 27 12 20 8 24 16 18 9 12 4 8 19 3 21 19 20 24 16 24 16 8 12 11 9 18 7 29 0 7 8 3 11 5 17 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 10 19 5 27 7 28 19 25 25 2 3 28 12 0 28 28 21 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 7 17 8 9 11 17 19 9 16 2 11 19 17 11 24 11 20 23 9 3 3 28 10 12 22 11 11 25 5 24 21 27 25 24 17 23 0 8 11 2 16 3 3 3 27 10 24 5 27 5 4 3 21 5 20 19 10 4 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 19 4 7 12 7 21 10 19

      p61

      27930

      0 0 0 0 1 1 0 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 1 0 1 0 0 1 1 0

      18 19 21 18 21 12 21 18 22 28 4 28 13 13 28 18 13 13 22 28 18 21 5 24 13 18 24 19 4 21 19 19 4 21 28 12 20 20 24 21 18 9 12 4 20 19 13 21 19 20 24 24 24 21 20 12 18 9 18 18 4 24 7 20 13 12 5 19 28 12 18 12 19 9 5 13 20 5 20 24 13 5 9 7 4 13 19 5 24 7 28 19 7 7 5 13 28 12 5 28 28 15 12 18 4 24 4 24 22 13 19 4 18 12 12 20 28 7 28 20 9 12 28 19 9 21 21 12 19 28 28 24 12 20 5 9 13 13 28 20 12 22 12 12 7 5 24 15 18 7 24 28 5 28 20 28 5 15 13 13 13 24 20 24 5 27 5 4 13 21 5 20 19 20 4 21 24 20 4 20 5 21 21 19 12 9 28 13 27 21 21 21 19 4 7 19 7 15 10 19

      p62

      44442

      0 0 0 1 0 1 0 1 0 1 0 0 1 1 0 1 0 1 1 1 0 1 0 0 0 1 0 1 0 1

      18 19 21 18 21 19 21 18 18 18 19 19 13 13 19 18 13 13 18 18 18 21 21 21 13 18 18 19 29 21 19 19 19 21 18 19 13 13 21 21 18 9 19 29 9 19 13 21 19 19 21 21 21 21 9 19 18 9 18 18 29 21 18 9 13 18 13 19 19 18 18 19 19 9 13 13 13 13 9 21 13 21 9 25 29 13 29 21 27 25 27 29 25 25 21 13 27 25 27 27 27 15 25 25 29 27 29 27 27 13 9 29 27 25 25 9 27 25 17 9 9 25 17 29 9 15 15 25 9 17 27 27 25 9 17 9 3 3 17 17 25 27 25 25 25 17 27 15 27 25 27 17 3 17 13 25 15 15 3 3 3 27 17 17 17 17 5 29 3 15 5 9 17 17 9 5 17 17 29 17 5 15 5 25 12 9 12 5 5 15 5 15 12 29 7 12 7 15 5 12

      p63

      28201

      0 0 1 0 1 0 1 0 0 1 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 0 0 1 1

      18 6 2 18 2 6 2 18 18 28 4 28 13 13 28 18 13 13 18 28 18 16 2 24 13 18 24 28 4 2 6 4 4 16 28 6 13 13 24 16 18 9 6 4 9 4 13 2 6 14 24 16 24 16 9 6 18 9 18 18 4 2 18 9 13 6 2 14 28 25 18 6 6 9 23 23 13 23 9 16 23 2 9 25 4 13 6 2 24 25 28 6 25 25 2 13 28 6 2 28 28 15 25 18 4 24 4 24 16 13 14 4 18 6 6 9 28 25 14 9 9 25 28 6 9 16 2 28 4 17 28 24 25 14 23 9 13 13 28 14 6 18 28 25 25 2 24 15 18 25 24 17 23 17 13 28 2 15 13 13 13 24 23 24 23 24 23 4 13 15 23 13 28 14 4 2 24 14 29 14 2 15 2 6 6 9 28 23 17 24 24 16 6 4 25 25 25 15 23 6

      p64

      22535

      1 0 1 1 1 1 1 0 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0

      18 19 21 27 2 12 21 27 22 28 4 28 13 13 28 18 3 20 22 0 18 16 5 24 10 18 27 19 4 2 19 19 4 16 27 6 20 8 24 16 18 8 6 4 8 19 13 21 19 20 24 16 24 16 8 6 11 8 18 25 4 0 25 8 13 11 5 17 28 25 18 12 19 8 23 23 20 23 8 16 10 0 26 25 4 13 6 5 27 25 28 6 25 25 2 3 11 6 0 28 28 21 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 25 17 8 26 11 17 19 26 16 2 11 26 17 28 24 25 20 23 8 3 3 28 10 12 22 11 11 25 5 24 16 27 25 24 17 23 0 8 11 2 16 3 13 13 27 10 24 5 27 5 4 3 21 5 20 19 10 26 2 0 10 4 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 25 12 25 21 10 19

      p65

      26972

      0 0 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 1 1 1 1 0 1 0 0 1 1 0

      18 19 21 22 21 12 21 18 22 28 4 28 13 13 28 18 13 13 22 28 18 21 5 24 13 18 24 19 4 21 19 19 4 21 28 12 20 20 24 21 18 9 12 4 20 19 13 21 19 20 24 24 24 21 20 12 18 9 18 18 4 24 7 20 13 12 5 19 28 12 18 12 19 9 5 13 20 5 20 24 13 5 9 7 4 13 19 5 24 7 28 19 7 7 5 13 28 12 5 28 28 15 12 18 4 24 4 24 22 13 19 4 18 12 12 20 28 7 28 20 9 12 28 19 9 21 21 12 19 28 28 24 12 20 5 9 13 13 28 20 12 22 12 12 7 5 24 15 18 7 24 28 5 28 20 28 5 15 13 13 13 24 20 24 5 27 5 4 13 21 5 20 19 20 4 21 24 20 4 20 5 21 21 19 12 9 28 13 27 21 21 21 19 4 7 12 7 15 20 19

      p66

      41550

      0 0 0 0 0 1 0 1 0 1 0 0 1 1 0 1 0 1 1 1 0 1 1 0 0 0 0 0 0 1

      18 19 21 22 21 19 21 18 18 18 19 19 13 13 19 18 13 13 18 18 18 21 21 21 13 18 18 19 29 21 19 19 19 21 18 19 13 13 21 21 18 9 19 29 9 19 13 21 19 19 21 21 21 21 9 19 18 9 18 18 29 21 18 9 13 18 13 19 19 18 18 19 19 9 13 13 13 13 9 21 13 21 9 18 29 13 19 21 18 18 19 19 18 18 21 13 18 19 21 19 19 21 18 7 29 21 29 21 22 13 19 29 22 12 12 9 12 7 17 9 9 12 17 29 9 21 21 12 9 17 17 22 12 13 13 9 13 13 17 17 12 22 12 12 7 17 22 15 22 7 22 17 13 17 13 12 15 15 13 13 9 17 17 17 17 22 5 29 5 15 5 9 17 17 9 5 17 17 29 17 5 15 5 12 12 9 12 5 17 15 5 15 12 29 7 12 7 15 17 17

      p67

      27865

      0 0 1 0 1 0 1 0 0 1 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 0 0 1 1

      18 6 2 18 2 6 2 18 18 28 4 28 13 13 28 18 13 13 18 28 18 16 2 24 13 18 24 28 29 2 6 6 4 16 28 6 13 13 24 16 18 9 6 4 9 4 13 16 28 14 24 16 24 16 9 6 18 9 18 18 29 2 18 9 13 28 2 14 28 25 18 6 6 9 23 23 13 23 9 16 23 2 9 25 29 13 6 2 24 25 28 6 25 25 2 13 28 6 2 28 28 16 25 18 4 24 4 24 22 13 14 4 18 6 6 9 28 25 14 9 9 25 28 6 9 16 2 25 4 28 28 24 25 13 23 9 13 13 28 14 6 22 28 25 25 2 24 16 22 25 24 17 23 17 13 28 2 16 13 13 13 24 23 24 23 18 23 4 13 16 23 9 14 14 4 2 24 14 29 23 2 16 2 6 6 9 28 23 17 16 2 16 6 4 25 25 25 24 23 28

      p68

      22711

      1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1

      18 19 21 27 2 12 21 27 22 28 4 28 20 3 28 18 3 20 22 0 27 16 5 24 10 18 27 19 29 21 19 19 4 16 27 12 20 8 24 16 18 9 6 4 8 19 3 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 18 8 3 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 10 6 5 27 25 28 6 25 25 2 3 28 6 0 28 28 21 25 18 4 0 4 24 22 3 19 4 27 12 12 8 28 25 14 8 26 11 28 19 26 16 2 11 26 0 28 24 25 20 23 9 3 3 28 10 12 22 11 11 25 5 24 21 27 25 24 0 23 0 8 11 2 16 3 3 3 27 10 24 5 27 5 4 3 21 5 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 25 12 25 21 10 19

      p69

      29664

      0 0 0 1 1 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 1 0 1 0 0 1 1 0

      18 19 21 18 21 12 21 18 22 28 4 28 13 13 28 18 13 13 22 28 18 21 5 24 13 18 24 19 4 21 19 19 4 21 28 12 20 20 24 21 18 9 12 4 20 19 13 21 19 20 24 24 24 21 20 12 18 9 18 18 4 24 7 20 13 12 5 19 28 12 18 12 19 9 5 13 20 5 20 24 13 5 9 7 4 13 19 5 24 7 28 19 7 7 5 13 28 12 5 28 28 15 12 18 4 24 4 24 22 13 19 4 18 12 12 20 28 7 28 20 9 12 28 19 9 21 21 12 19 28 28 24 12 20 5 9 13 13 19 20 12 22 12 12 7 5 24 15 18 7 24 17 5 17 20 12 5 15 13 13 13 24 20 21 5 27 5 4 3 21 5 20 19 20 4 21 27 20 4 20 5 21 21 19 12 9 17 13 17 21 21 21 19 4 7 19 7 15 10 19

      p70

      43674

      0 0 0 1 0 1 0 1 0 1 0 0 1 1 0 1 0 1 1 1 0 1 0 0 0 1 0 1 0 1

      18 19 21 18 21 19 21 18 18 18 19 19 13 13 19 18 13 13 18 18 18 21 21 21 13 18 18 19 29 21 19 19 19 21 18 19 13 13 21 21 18 9 19 29 9 19 13 21 19 19 21 21 21 21 9 19 18 9 18 18 29 21 18 9 13 18 13 19 19 25 25 25 19 9 13 13 13 13 9 21 13 21 9 25 29 9 19 21 27 25 27 29 25 25 21 3 27 25 27 19 27 21 25 25 29 27 29 27 27 3 9 29 27 7 25 9 27 25 17 9 9 25 17 29 9 21 21 25 9 17 27 21 12 9 3 9 3 3 17 17 12 27 12 25 12 17 27 15 27 12 27 17 3 17 3 12 21 15 3 3 3 27 17 27 17 27 5 29 3 21 5 9 17 17 9 5 27 17 29 17 5 15 5 12 12 9 12 5 5 15 5 15 12 29 7 12 7 15 5 17

      p71

      31862

      0 0 1 0 1 0 1 1 0 1 0 0 1 1 1 1 1 1 1 0 0 0 0 1 1 1 0 0 1 1

      18 6 2 18 2 6 2 18 18 28 4 28 13 13 28 18 13 13 18 28 18 16 2 24 13 18 24 28 4 2 6 4 4 16 28 6 13 13 24