Design report and results showing for Algorithm Course’s Final Project….
算法设计与分析 期末项目 – Capacitated Facility Location Problem
代码仓库
一、问题描述
-
Capacitated Facility Location Problem(CFLP)
,也叫做有容量限制的设施区位问题,是指在一组候选位置中选出若干个进行设施建设以服务所有顾客。对于每个位置,都有一个设施开设的成本,以及一个数组来指示从这个位置的设施服务各个顾客的成本。问题求解的目标是找到一个最优解,使得服务所有顾客的总成本最小。
-
在求解
CFLP
问题的过程中,我们的目的是找出使总体开销最小(所有设施启动开销与服务顾客的开销之和
),同时又能满足所有顾客需求,保证每台设备不超出其可服务容量的最优规划。
-
CFLP
本质上属于0-1整数规划问题Integer Programming
,此处采用Wikipedia
上的数学形式进行描述:此处的目标开销函数为:
-
i
为设备下标号,范围为0 <= i < facilityNum
,j
为顾客下标号,范围为0 <= j < customerNum
-
c_ij
表示设备i
为顾客j
提供服务的成本cost
,y_ij
表示是否让设备i
为顾客j
提供服务,取值范围为true/false
。 -
f_i
表示设备i
开启的成本,即OpenCost
,x_i
为是否开启对应设备进行服务,取值范围也为true/false
,即0-1
整数取值。 -
u_i
表示设备提供的容量,d_j
表示顾客的需求。
-
-
同时,上述数学描述还需要满足约束:同一顾客不能被多台设备同时服务;设备服务总数不能超过其容量。在此约束下求解目标规划函数的最优解。此种
0-1
整数规划问题本质为NP-Hard
问题,一般具有两类方法进行问题求解:Branch and Cut
,利用运筹学方法直接求解最优解,但是缺点是运行时间十分的长。Approximate Search
,近似规划找出问题的近似解,运行时间短找出一个比较好的解。
二、算法设计
-
首先基于本问题采取贪心算法策略,为使整体开销最小而实施针对
customer
于每台不同设备上的assign_cost
的贪心策略。考虑到测试样例中顾客的数量一般都比设备数量多,同时每一台设备的open_cost
代价并非很高(数量级与顾客的assign_cost
相同),此处只采取一阶段的贪心策略,针对服务顾客的开销进行贪心搜索:-
顺序遍历所有的顾客,针对每一个未满足需求的顾客,获取将其放置到所有容量足够的设备上所造成的开销队列,从小到大对开销队列进行排序,获取最小开销的操作。
-
更新当前操作的总体开销,若目标设备原本处于关闭状态,那么还需要加上其
open_cost
。
贪心算法源码:
/* * GreedyAlgrithm.h -- Use Greedy Search to solve CFL Problem */ #ifndef GREEDY_ALGORITHM_H #define GREEDY_ALGORITHM_H #include <iostream> #include <vector> #include <fstream> #include <algorithm> #include <string> #include <windows.h> using namespace std; struct customer { int cost; int id; customer(int c, int i){ cost = c; id = i; } }; class Greedy { public: Greedy(){} void readFile(string filePath); int performGreedySearch(); int fac_num, cus_num; // State vector vector<bool> fac_open; // Result vector vector<int> result; private: // Info vectors vector<int> capacity; vector<int> open_cost; vector<int> demand; vector<vector<int>> assign_cost; }; #endif
结构分析:
-
采取
C++
语言进行OOP
编程,创建贪心算法求解CFLP
问题的类对象,定义读取测试样例输入函数readFile()
,同时定义贪心搜索函数performGreedySearch()
,作为算法求解的启动函数。
#include "GreedyAlgorithm.h" void Greedy::readFile(string filePath){ ifstream in(filePath.c_str()); in >> fac_num >> cus_num; // Read variables in order for(int i=0; i<fac_num; i++){ int temp_cap, temp_cost; in >> temp_cap >> temp_cost; capacity.push_back(temp_cap); open_cost.push_back(temp_cost); } for(int i=0; i<cus_num; i++){ float temp_demand; in >> temp_demand; demand.push_back((int)temp_demand); } for(int i=0; i<fac_num; i++){ vector<int> temp; for(int j=0; j<cus_num; j++){ float ass_cost; in >> ass_cost; temp.push_back((int)ass_cost); } assign_cost.push_back(temp); } // Init State for(int i=0; i<fac_num; i++){ fac_open.push_back(false); } for(int i=0; i<cus_num; i++){ result.push_back(-1); } } bool sort_customer(customer c1, customer c2){ return c1.cost < c2.cost; } int Greedy::performGreedySearch(){ int total_cost = 0; vector<customer> store; for(int i=0; i<cus_num; i++){ store.clear(); for(int j=0; j<fac_num; j++){ customer target = customer(assign_cost[j][i], j); store.push_back(target); } // Sort customer by their assign cost, keep cost less customer first sort(store.begin(), store.end(), sort_customer); // Pick facillity in order for(int j=0; j<fac_num; j++){ int fac_id = store[j].id; if(capacity[fac_id] >= demand[i]){ capacity[fac_id] -= demand[i]; result[i] = fac_id; total_cost += store[j].cost; // If target facility not open, open it if(!fac_open[fac_id]){ fac_open[fac_id] = true; total_cost += open_cost[fac_id]; } break; } } } return total_cost; } int main(){ for(int i=1; i<=71; i++){ string targetName = "p" + to_string(i); string resultFile = "../result/Greedy/" + targetName; ofstream out(resultFile.c_str()); Greedy gr; string targetFile = "../testData/" + targetName; gr.readFile(targetFile); int result = gr.performGreedySearch(); out << result << "\n"; for(int i=0; i<gr.fac_num; i++){ out << gr.fac_open[i] << " "; } out << "\n"; for(int i=0; i<gr.cus_num; i++){ out << gr.result[i] << " "; } out << "\n"; } return 0; }
结构分析:
-
readFile()
按照测试样例格式进行初始化信息的读取,将类内部的各项变量进行初始化赋值。 -
performGreedySearch()
顺序进行顾客服务,记录当前顾客被assign
到不同容量足够的设备上的assign_cost
队列,利用STL
库的sort
函数进行升序排序,获取当前局部最优操作并执行,更新当前总体开销。
贪心算法测试结果:
贪心算法求解具体结果:
p1
9440 1 1 1 1 1 1 1 1 1 1 8 8 1 6 3 8 2 4 4 1 9 0 3 2 0 3 4 0 9 7 3 4 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 3
p2
8126 1 1 1 1 1 1 1 1 1 1 8 8 1 6 3 8 2 4 4 1 9 0 3 2 0 3 4 0 9 7 3 4 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 3
p3
10126 1 1 1 1 1 1 1 1 1 1 8 8 1 6 3 8 2 4 4 1 9 0 3 2 0 3 4 0 9 7 3 4 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 3
p4
12126 1 1 1 1 1 1 1 1 1 1 8 8 1 6 3 8 2 4 4 1 9 0 3 2 0 3 4 0 9 7 3 4 6 4 2 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 3
p5
9375 1 1 1 1 1 1 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 1
p6
8061 1 1 1 1 1 1 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 1
p7
10061 1 1 1 1 1 1 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 1
p8
12061 1 1 1 1 1 1 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 1
p9
9040 1 1 1 1 1 1 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0
p10
7726 1 1 1 1 1 1 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0
p11
9726 1 1 1 1 1 1 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0
p12
11726 1 1 1 1 1 1 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0
p13
12032 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9
p14
9180 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9
p15
13180 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9
p16
17180 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9
p17
12032 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9
p18
9180 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9
p19
13180 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9
p20
17180 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9
p21
12032 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9
p22
9180 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9
p23
13180 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9
p24
17180 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 12 10 10 1 18 17 13 14 17 15 4 1 6 13 3 15 10 4 9 12 15 15 19 6 17 16 17 1 17 13 7 2 16 3 10 11 19 19 13 6 0 5 0 8 5 14 10 19 9
p25
18753 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 2 21 18 8 17 14 25 2 29 7 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 7 5 20 0 0 8 20 14 8 25 25 5 2 5
p26
15831 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 2 21 18 8 17 14 25 2 29 7 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 7 5 20 0 0 8 20 14 8 25 25 5 2 5
p27
21031 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 2 21 18 8 17 14 25 2 29 7 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 7 5 20 0 0 8 20 14 8 25 25 5 2 5
p28
26231 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 2 21 18 8 17 14 25 2 29 7 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 7 5 20 0 0 8 20 14 8 25 25 5 2 5
p29
20007 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 8 5 2 24 17 11 17 24 2 2 21 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 27 24 24 24 5 5 8 25 13 18 0 5 9 0 29 0 11 24 5 8 14 17 29 13 17 0 8 13 14 8 25 25 11 2 11
p30
16812 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 8 5 2 24 17 11 17 24 2 2 21 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 27 24 24 24 5 5 8 25 13 18 0 5 9 0 29 0 11 24 5 8 14 17 29 13 17 0 8 13 14 8 25 25 11 2 11
p31
22212 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 8 5 2 24 17 11 17 24 2 2 21 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 27 24 24 24 5 5 8 25 13 18 0 5 9 0 29 0 11 24 5 8 14 17 29 13 17 0 8 13 14 8 25 25 11 2 11
p32
27612 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 8 5 2 24 17 11 17 24 2 2 21 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 27 24 24 24 5 5 8 25 13 18 0 5 9 0 29 0 11 24 5 8 14 17 29 13 17 0 8 13 14 8 25 25 11 2 11
p33
18611 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 2 21 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5
p34
15689 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 2 21 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5
p35
20889 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 2 21 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5
p36
26089 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 2 21 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5
p37
18611 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 2 21 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5
p38
15689 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 2 21 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5
p39
20889 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 2 21 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5
p40
26089 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 20 11 20 2 20 5 2 24 14 17 22 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 10 24 14 0 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 2 21 18 8 17 17 25 2 29 17 11 14 28 14 1 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5
p41
7226 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 9 2 7 3 3 3 5 0 5 6 4 1 1 6 6 9 7 2 8 8 8 0 0 1 5 0 6 6 6 4 4 0 4 4 0 7 7 9 2 6 5 7 2 2 7 7 9 2 2 7 2
p42
9957 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 10 11 9 15 18 16 3 17 1 11 18 6 10 6 15 0 2 14 14 5 11 9 8 12 8 11 16 17 13 7 19 6 8 14 10 10 0 0 1 1 3 3 16 9 14 8 19 15 15 16 17 7 13 13 5 2 14 14 14 11 11 4 3 11 3 0 15 19 6 10 18 19 19 19 18 18 19 19 19
p43
12448 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 18 19 15 24 25 22 26 21 27 29 24 23 3 9 18 11 8 15 12 7 25 26 22 20 17 13 29 6 29 4 5 2 2 13 0 22 7 12 21 11 4 12 28 23 5 25 26 17 17 11 21 0 9 18 6 6 19 20 2 29 5 27 1 29 27 28 1 27 28 29
p44
7585 1 1 1 1 1 1 1 1 1 1 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 1 1 1 1 1 7 6 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 6 8 8 8 8 7 5 9 9 7 6 5 5 8 8 7 7 9 5 5 5 9 3 0 6 6 8 1 5 4 9 9 7 7 9 6 6 5 2 7 9 7 9 9 7 6 5 7 5
p45
9848 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 6 6 6 6 2 2 3 2 3 2 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 0 0 2 3 11 12 18 16 19 7 15 16 8 13 11 16 18 19 14 15 10 9 12 9 15 17 13 13 8 12 7 10 18 12 13 17 14 17 8 16 10 7
p46
12639 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 10 0 10 10 10 0 10 1 1 1 1 11 11 11 11 2 2 3 2 3 2 4 4 5 6 6 5 7 7 8 7 8 9 9 10 2 3 17 24 28 29 12 21 22 24 14 18 17 16 28 29 27 13 22 25 26 13 18 18 24 19 15 28 18 26 27 14 13 15 12
p47
6634 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 2 2 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 8 8 8 8 8 9 8 0 9 9 9 9 2 2 2 9 2
p48
9044 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 1 1 1 2 3 2 2 3 3 4 4 4 5 5 5 5 5 5 6 6 6 6 6 7 7 8 8 8 8 8 8 8 9 9 9 9 10 10 11 10 11 10 12 13 12 13 13 12 13 14 15 12 14 12 0 15 14 14 15 16 16 17 17 17 17 17 17 18 18 19 19 19 19 19
p49
12867 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 1 0 1 1 2 1 2 2 2 3 5 3 5 4 6 6 6 7 7 7 7 7 7 9 10 8 11 10 12 12 14 13 13 13 14 15 15 16 16 17 16 17 16 20 19 18 19 18 20 21 18 21 18 0 22 23 23 22 24 24 26 25 26 25 26 27 27 28 29 28 29
p50
10062 1 1 1 1 1 1 1 1 1 1 3 6 3 0 9 9 5 5 3 7 7 4 1 9 9 9 9 2 5 3 0 0 0 4 0 0 7 4 4 7 7 7 3 3 3 5 9 9 0 6 0 9 9 1 5 5 5 5 5 3 3 5 6 0 0 0 9 6 1 2 1 7 7 7 3 3 0 4 8 7 3 6 6 6 6 4 4 3 3 4 3 5 2 2 2 1 6 7 2 7 1 2 2 2 2 2 2 2 2 2
p51
11175 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 15 6 19 10 12 13 5 16 15 1 5 3 6 13 6 13 12 16 2 15 0 0 10 14 14 14 1 3 19 7 1 1 17 19 15 5 13 13 10 0 0 13 13 13 16 5 5 5 5 17 15 2 0 14 14 10 6 6 13 12 13 5 1 5 15 15 10 3 9 7 15 0 0 0 10 19 19 19 19 3 19 5 16 12 13 13 6 8 12 1 13 13 13 18 18 13 18 18 18 18
p52
10364 1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 7 7 7 3 4 4 4 3 4 4 4 4 8 8 8 8 3 8 3 3 9 9 9 9 9 9 9 9 5 6 6 6 6 6 6 6 6 6 6 7 7 4 5 5 5 5 3 4 6 2 5 3 3 3 4 6 5 5 5 0 5 5 6 4 7 6 6 4 3 3 5 3 4 7 1 6 3 3 5 5 3 3 7 5 3 1 1 1 1 5 1 3 4 3 7
p53
12876 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 5 5 5 5 5 5 5 5 19 19 19 7 7 7 7 7 7 12 12 12 12 13 13 12 3 9 9 9 9 9 9 9 9 15 18 18 18 18 18 18 18 18 18 18 5 5 7 12 13 15 15 4 7 18 5 11 3 3 1 6 18 2 15 13 0 13 2 18 10 5 17 18 6 3 3 15 3 6 6 2 14 19 13 15 15 3 1 6 15 1 2 2 17 17 2 17 1 10 1 16
p54
10351 1 1 1 1 1 1 1 1 1 1 9 9 7 7 7 7 7 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 3 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 6 6 8 8 6 8 8 8 8 8 8 3 3 6 6 6 6 6 6 6 6 6 5 5 6 5 5 5 6 6 0 0 0 0 0 9 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4 4 9 9 4 4 4 2 4 2 2
p55
12383 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 17 17 16 17 16 4 4 4 8 8 8 8 2 8 8 2 2 2 8 12 1 12 12 12 12 12 6 6 6 6 6 14 14 6 6 6 6 6 6 7 19 19 19 7 0 0 0 0 0 0 0 0 7 7 7 7 10 7 7 7 11 11 9 11 3 11 11 7 11 9 9 11 9 11 17 13 9 13 13 13 13 15 15 15 15 15 15 15 5 15 5 18 18 18 18 17 18 18 18 18
p56
23882 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 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p57
32882 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 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p58
53882 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 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p59
39121 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 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p60
23882 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 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p61
32882 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 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p62
53882 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 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p63
39121 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 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p64
23882 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 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p65
32882 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 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p66
53882 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 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p67
39671 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 1 18 19 21 22 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 19 29 2 19 19 4 16 27 6 20 8 24 15 18 9 6 26 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 19 5 27 7 28 6 25 25 2 3 27 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p68
23882 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 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p69
32882 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 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p70
53882 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 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p71
39121 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 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 6 5 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
-
-
考虑到贪心算法容易陷入局部最优解,此处结合禁忌搜索算法,将初始解设为贪心算法的最终局部最优解,然后进行邻域移动的搜索,建立禁忌表进行领域可行解的查找,具体策略如下:
- 此处算法的解状态规定为:每一位顾客对应的设备序号组成的结果序列,那么邻域的转移就可以看成:
customer
从当前设备移动到其余设备之后,形成的新序列。 - 当然,在邻域移动的过程中会遇到许多的非法解(即形成的新序列中有设备超出服务容量),此时根据禁忌准则,不马上删除非法解,而是实施一定程度上的惩罚,设定惩罚系数
alpha
将惩罚值加入非法解的开销中,最终使其与可行解一起进行最小开销领域获取。 - 若当前取得的最小开销解为非法解,那么说明当前惩罚系数不够高,为了将搜索过程导向多可行解区域,须提高惩罚值,减少非法解的产生。
- 同时在搜索过程中进行可行最优解开销进行记录,并且将当前求解的可行最优解
push
入禁忌表中。整体算法的迭代次数为2.0 * cus_num + fac_num
,同时设定禁忌破除规定,设置当禁忌表内部存在比当前更好的可行解时,实施禁忌破除。
禁忌搜索算法代码:
/* * TabuSearch.h -- Use Tabu Search to solve CFL Problem */ #ifndef TABU_SEARCH_H #define TABU_SEARCH_H #include <iostream> #include <vector> #include <algorithm> #include <fstream> #include <cmath> #include <string> #include <windows.h> using namespace std; struct customer { int cost; int id; customer(int c, int i){ cost = c; id = i; } }; struct move_p { int src_cus; int dst_fac; bool feasible; double cost; move_p(int src, int dst, bool fea, double cos){ src_cus = src; dst_fac = dst; feasible = fea; cost = cos; } }; class Tabu { public: Tabu(){ alpha = 1.0; epsilon = 0.1; } void readFile(string filePath); // Get greedy result as init solution path int performGreedySearch(); // Perform Tabu Search int performTabuSearch(); // Tabu tools methods int performPenalty(); int getCurrentResult(); void getNeighborResult(int iteration, int beta); int fac_num, cus_num; // State vector vector<bool> fac_open; // Result vector vector<int> result; vector<int> fea_result; private: int best_feasible_cost, best_cost; double alpha, epsilon; // Info vectors vector<int> capacity; vector<int> temp_capacity; vector<int> open_cost; vector<int> demand; vector<vector<int>> assign_cost; vector<vector<int>> tabu_list; }; #endif
#include "TabuSearch.h" void Tabu::readFile(string filePath){ ifstream in(filePath.c_str()); in >> fac_num >> cus_num; // Read variables in order for(int i=0; i<fac_num; i++){ int temp_cap, temp_cost; in >> temp_cap >> temp_cost; capacity.push_back(temp_cap); temp_capacity.push_back(temp_cap); open_cost.push_back(temp_cost); } for(int i=0; i<cus_num; i++){ float temp_demand; in >> temp_demand; demand.push_back((int)temp_demand); } for(int i=0; i<fac_num; i++){ vector<int> temp; for(int j=0; j<cus_num; j++){ float ass_cost; in >> ass_cost; temp.push_back((int)ass_cost); } assign_cost.push_back(temp); } // Init State for(int i=0; i<fac_num; i++){ fac_open.push_back(false); } for(int i=0; i<cus_num; i++){ result.push_back(0); fea_result.push_back(0); } for(int i=0; i<fac_num; i++){ vector<int> temp; for(int j=0; j<cus_num; j++){ temp.push_back(-1); } tabu_list.push_back(temp); } } bool sort_customer(customer c1, customer c2){ return c1.cost < c2.cost; } bool sort_move(move_p c1, move_p c2){ return c1.cost < c2.cost; } // Get greedy result as init solution path int Tabu::performGreedySearch(){ int total_cost = 0; vector<customer> store; // Greedy choose facility for every customer for(int i=0; i<cus_num; i++){ store.clear(); for(int j=0; j<fac_num; j++){ customer target = customer(assign_cost[j][i], j); store.push_back(target); } // Sort customer by their assign cost, keep cost less customer first sort(store.begin(), store.end(), sort_customer); // Pick facillity in order for(int j=0; j<fac_num; j++){ int fac_id = store[j].id; if(capacity[fac_id] >= demand[i]){ capacity[fac_id] -= demand[i]; result[i] = fac_id; total_cost += store[j].cost; // If target facility not open, open it if(!fac_open[fac_id]){ fac_open[fac_id] = true; total_cost += open_cost[fac_id]; } break; } } } return total_cost; } // Perform Tabu Search int Tabu::performTabuSearch(){ best_feasible_cost = performGreedySearch(); best_cost = best_feasible_cost; for(int i=0; i<fea_result.size(); i++) fea_result[i] = result[i]; int count = 0; double temp_result = 0; for(int i=0; i<cus_num*2; i++){ getNeighborResult(i, 3 + fac_num / 2); if(fabs(temp_result - best_cost) < 0.00001){ count++; }else { count = 0; temp_result = best_cost; } if(count > fac_num) break; } return best_feasible_cost; } // Tabu tools methods int Tabu::performPenalty(){ int res = 0; vector<int> temp_cap(temp_capacity); for(int i=0; i<cus_num; i++){ temp_cap[result[i]] -= demand[i]; } for(int i=0; i<fac_num; i++){ // Perform penalty if(temp_cap[i] < 0){ res -= temp_cap[i]; } } return res; } // Return current cost int Tabu::getCurrentResult(){ int res = 0; bool open[fac_num]; for(int i=0; i<fac_num; i++){ open[i] = false; } // Create temp records for(int i=0; i<cus_num; i++){ res += assign_cost[result[i]][i]; open[result[i]] = true; } // Adding open cost for(int i=0; i<fac_num; i++){ if(open[i]) res += open_cost[i]; } return res; } // Get seatch neighbor result void Tabu::getNeighborResult(int iteration, int beta){ vector<move_p> path; for(int i=0; i<cus_num; i++){ int temp = result[i]; for(int j=0; j<fac_num; j++){ // Swap facility number if(temp != j){ result[i] = j; int targetResult = getCurrentResult(); int penalty = performPenalty(); bool ability = penalty > 0 ? false : true; int cost = targetResult + penalty * alpha; move_p neighmove = move_p(i, j, ability, cost); // Judge tabu list and neighbor path feasible // Tabu enable conditions: Less Penalty, available and cost less, unavailable but cost less than best if(tabu_list[j][i] < penalty || (ability && cost < best_feasible_cost) || (!ability && cost < best_cost)){ path.push_back(neighmove); } } } result[i] = temp; } sort(path.begin(), path.end(), sort_move); // Find small cost and enable neighbor for(int i=0; i<path.size(); i++){ if(path[i].feasible){ if(path[i].cost < best_feasible_cost){ int origin = result[path[i].src_cus]; result[path[i].src_cus] = path[i].dst_fac; for(int i=0; i<fea_result.size(); i++) fea_result[i] = result[i]; best_feasible_cost = path[i].cost; result[path[i].src_cus] = origin; } break; } } // Update best solution and tabu list if(path[0].cost < best_cost) best_cost = path[0].cost; tabu_list[path[0].dst_fac][path[0].src_cus] = iteration + beta; result[path[0].src_cus] = path[0].dst_fac; if(path[0].feasible){ alpha /= (1+epsilon); }else { alpha *= (1+epsilon); } } int main(){ for(int i=1; i<=71; i++){ string targetName = "p" + to_string(i); string resultFile = "../result/Tabu/" + targetName; ofstream out(resultFile.c_str()); Tabu tb; string targetFile = "../testData/" + targetName; tb.readFile(targetFile); int result = tb.performTabuSearch(); for(int i=0; i<tb.fac_num; i++){ tb.fac_open[i] = false; } for(int i=0; i<tb.fac_num; i++){ tb.fac_open[tb.fea_result[i]] = true; } out << result << "\n"; for(int i=0; i<tb.fac_num; i++){ out << tb.fac_open[i] << " "; } out << "\n"; for(int i=0; i<tb.cus_num; i++){ out << tb.result[i] << " "; } out << "\n"; } }
结构分析:
- 此处复用了之前贪心算法的文件读取函数,以及计算贪心解作为禁忌搜索的初始解。
- 类内部提供了很多工具函数,包括惩罚值的计算函数
performPenality()
,以及计算当前状态序列的总体开销,以便于在搜索过程中进行最优查询,getNeighborResult()
搜索邻域转移状态集合中的最优可行路径,同时根据当前迭代次序与整体禁忌表长度,进行禁忌条目更新。
禁忌搜索算法结果:
分析:相比于贪心算法,禁忌搜索算法求解结果有些许提升,但所需时间更多,禁忌搜索的结果很大程度上取决于迭代次数,以及具体邻域移动规则的设定,禁忌破解与禁忌表长度的最佳选取,此处实现的禁忌搜索仍有很大的提升空间。
禁忌搜索算法具体样例结果:
p1
9256 0 1 1 1 1 0 1 0 1 0 8 2 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 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 4 0 4 0
p2
7942 0 1 1 1 1 0 1 0 1 0 8 2 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 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 4 0 4 0
p3
9942 0 1 1 1 1 0 1 0 1 0 8 2 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 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 4 0 4 0
p4
11942 0 1 1 1 1 0 1 0 1 0 8 2 1 6 3 8 2 4 4 1 9 8 3 2 8 3 4 0 9 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 4 0 4 0
p5
9169 0 1 1 1 1 0 1 0 1 0 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 0
p6
7855 0 1 1 1 1 0 1 0 1 0 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 0
p7
9855 0 1 1 1 1 0 1 0 1 0 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 0
p8
11855 0 1 1 1 1 0 1 0 1 0 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 0
p9
9040 0 1 1 1 1 0 1 0 1 0 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0
p10
7726 0 1 1 1 1 0 1 0 1 0 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0
p11
9726 0 1 1 1 1 0 1 0 1 0 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0
p12
11726 0 1 1 1 1 0 1 0 1 0 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 5 1 5 0 5 2 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0
p13
8863 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 0 1 16 12 10 10 1 15 17 13 15 17 15 19 1 6 13 3 15 10 17 9 12 15 15 19 6 17 16 17 1 17 13 15 13 16 3 10 3 19 19 13 6 16 15 16 3 15 12 10 19 9
p14
7435 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 0 1 16 12 10 10 1 1 17 13 12 17 15 19 1 6 13 3 15 10 17 9 12 15 15 19 6 17 16 17 1 17 13 15 19 16 3 10 3 19 19 13 6 16 15 16 17 15 12 10 19 9
p15
9635 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 0 1 16 12 10 10 1 1 17 13 12 17 15 19 1 6 13 3 15 10 17 9 12 15 15 19 6 17 16 17 1 17 13 15 19 16 3 10 3 19 19 13 6 16 15 16 17 15 12 10 19 9
p16
11835 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 0 1 16 12 10 10 1 1 17 13 12 17 15 19 1 6 13 3 15 10 17 9 12 15 15 19 6 17 16 17 1 17 13 15 19 16 3 10 3 19 19 13 6 16 15 16 17 15 12 10 19 9
p17
8863 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 0 1 16 12 10 10 1 1 17 13 12 17 15 19 1 10 13 3 15 10 17 9 12 15 15 19 6 17 16 17 1 17 13 15 19 16 3 10 8 19 19 13 6 16 15 16 8 15 12 10 19 9
p18
7435 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 0 1 16 12 10 10 1 12 17 13 12 17 15 19 1 6 13 3 15 10 17 9 12 15 15 19 6 17 16 17 1 17 13 15 13 16 3 10 3 19 19 13 6 16 15 16 3 15 15 10 19 9
p19
9635 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 0 1 16 12 10 10 1 12 17 13 12 17 15 19 1 6 13 3 15 10 17 9 12 15 15 19 6 17 16 17 1 17 13 15 13 16 3 10 3 19 19 13 6 16 15 16 3 15 15 10 19 9
p20
11835 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 0 1 16 12 10 10 1 15 17 13 12 17 15 19 19 6 13 3 15 10 17 9 12 15 15 19 6 17 16 17 1 17 13 15 13 16 3 10 17 19 19 13 6 16 15 16 9 15 12 10 19 9
p21
8863 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 0 1 16 14 10 10 1 12 17 13 14 17 15 19 1 6 13 3 15 10 17 9 12 15 15 19 6 17 16 17 1 17 13 15 13 16 3 10 17 19 19 13 6 16 16 16 14 15 14 10 19 9
p22
7435 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 0 1 16 12 10 10 1 12 17 13 8 17 15 19 1 6 13 3 15 10 17 9 12 15 15 19 6 17 16 17 1 17 13 15 13 16 3 10 8 19 19 13 6 16 16 16 8 15 12 10 19 9
p23
9635 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 0 1 16 12 10 10 1 12 17 13 13 17 15 19 1 6 13 3 15 10 17 9 12 15 15 19 6 17 16 17 1 17 13 15 13 16 3 10 17 19 19 13 6 16 16 16 1 15 12 10 19 9
p24
11835 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 0 1 16 12 10 10 1 12 17 13 13 17 15 19 1 6 13 3 15 10 17 9 12 15 15 19 6 17 16 17 1 17 13 15 13 16 3 10 17 19 19 13 6 16 16 16 1 15 12 10 19 9
p25
13866 1 0 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 20 11 20 14 20 5 2 24 14 17 24 8 8 20 3 14 14 17 5 11 2 0 5 3 5 8 2 24 5 24 5 25 20 25 20 20 24 15 11 14 0 14 15 13 24 14 3 13 11 8 25 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 7 20 17 2 17 17 7 20 5 2 24 2 11 7 24 2 3 25 13 8 17 17 25 2 25 7 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 17 5 24 0 7 0 11 24 11 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5
p26
11847 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 0 0 0 20 11 20 2 20 5 2 24 14 17 5 8 8 20 19 14 14 17 5 11 2 0 5 17 5 8 19 24 5 24 5 25 20 25 20 20 24 15 0 14 0 14 15 8 24 14 11 20 11 8 5 14 14 5 20 20 17 11 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 19 17 17 7 20 5 2 24 2 11 0 24 2 17 25 20 8 17 17 25 2 25 7 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 20 8 11 5 24 0 25 0 11 24 11 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5
p27
14941 1 0 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 20 11 20 14 20 5 2 24 14 17 5 8 8 20 3 14 14 17 5 11 2 0 5 3 5 8 2 24 5 24 5 25 13 25 20 20 24 15 0 14 0 14 15 8 24 14 11 13 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 7 20 17 2 17 17 7 20 5 2 24 17 11 0 24 2 17 25 13 8 2 17 25 2 25 7 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 11 5 24 0 25 0 11 24 11 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5
p28
18435 1 0 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 20 11 20 14 20 5 2 24 14 17 5 20 8 20 3 14 14 17 5 11 2 0 5 3 5 8 2 24 5 24 5 25 13 25 20 20 24 15 0 14 0 14 15 8 24 14 11 13 11 8 29 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 7 20 17 2 17 17 7 20 5 2 24 17 11 7 24 2 3 25 13 8 0 17 25 2 29 0 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 13 25 5 24 0 29 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5
p29
13664 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 0 0 0 0 0 20 11 13 2 20 5 2 24 2 17 24 8 8 20 17 14 14 17 5 11 2 0 5 17 5 8 2 24 5 24 5 25 13 25 20 20 24 15 11 14 0 14 15 8 24 14 0 13 11 8 29 14 14 5 13 20 17 29 0 14 0 5 20 11 11 11 24 0 24 24 20 13 11 17 24 8 26 20 14 24 20 0 20 17 2 17 17 0 20 5 2 24 17 11 17 5 2 0 25 13 8 17 17 25 2 29 17 11 14 8 14 14 2 11 11 25 24 15 24 5 5 8 25 13 8 0 5 26 0 11 0 11 24 25 8 14 0 29 20 17 0 8 20 14 8 25 25 5 2 5
p30
12142 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 0 0 0 0 0 20 11 13 2 20 5 2 24 2 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 15 0 14 0 14 15 8 24 14 11 13 11 8 29 14 14 5 13 20 17 29 0 14 0 5 20 11 11 11 9 0 15 9 20 13 11 17 24 8 9 20 14 24 20 0 20 17 17 17 17 0 20 5 2 24 17 11 17 24 2 2 25 8 8 17 17 25 2 29 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 17 5 9 0 25 0 11 24 11 8 14 0 5 20 17 0 8 20 14 8 25 25 5 2 5
p31
15434 1 0 1 1 0 1 0 0 1 1 0 1 0 1 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 20 11 13 2 20 5 2 24 14 17 9 8 8 20 3 14 14 17 5 11 2 0 5 3 5 8 2 24 5 24 5 25 13 25 20 20 24 15 11 14 0 14 15 8 24 14 0 13 11 8 29 14 14 5 13 20 17 25 0 14 0 5 20 11 11 11 9 0 5 24 20 13 11 17 24 8 9 20 17 24 20 0 20 17 2 17 17 17 20 5 2 24 17 11 17 9 2 25 25 8 8 17 17 25 2 29 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 0 5 9 0 11 0 11 24 9 8 14 0 5 20 17 0 8 20 14 8 25 25 5 2 5
p32
17741 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 0 0 0 0 0 20 11 13 2 20 5 2 9 2 17 24 8 8 20 17 14 14 17 5 11 2 0 5 17 9 8 2 24 5 24 5 25 13 25 20 20 24 15 11 14 0 14 15 8 24 14 0 13 11 8 29 14 14 5 13 20 17 25 0 14 0 5 20 11 11 11 9 0 25 24 20 13 11 17 24 8 9 20 14 24 20 0 20 17 2 17 17 0 20 5 2 24 17 11 17 5 2 29 29 13 8 17 17 25 2 29 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 8 0 5 9 0 11 0 11 24 5 8 14 0 5 20 17 0 8 20 14 8 25 25 5 2 5
p33
12990 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 0 0 0 0 0 20 11 20 2 20 5 2 24 14 17 5 20 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 15 0 14 0 14 15 13 24 14 11 13 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 0 25 13 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 20 11 5 24 0 11 0 11 24 11 8 14 0 5 20 17 0 8 20 14 8 25 25 5 2 5
p34
13608 1 0 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 1 0 0 0 1 0 0 0 0 0 20 11 20 2 20 5 2 24 14 17 24 8 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 20 25 20 20 24 15 0 14 0 14 15 8 24 14 17 13 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 24 20 14 24 20 7 20 17 19 17 17 7 20 5 2 24 17 11 17 24 2 3 25 18 8 17 17 25 2 29 17 11 14 8 14 14 2 11 11 27 24 24 24 24 5 8 25 13 18 0 5 24 0 29 0 11 24 5 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5
p35
14432 1 0 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 20 11 20 2 20 5 2 24 14 17 24 8 8 20 3 14 14 17 5 11 14 0 5 3 5 8 2 24 5 24 5 25 13 25 20 20 24 15 17 14 0 14 15 2 24 14 0 13 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 17 13 17 17 17 17 0 20 5 2 24 17 11 17 24 2 25 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 5 24 24 24 24 5 8 25 13 8 17 5 24 0 25 0 11 24 11 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5
p36
16335 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 0 0 0 0 0 20 11 13 2 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 13 25 20 20 24 15 17 14 0 14 15 2 24 14 11 13 11 8 5 14 14 5 20 20 17 0 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 25 25 13 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 5 24 24 24 24 5 8 25 13 8 17 5 24 0 25 0 11 24 11 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5
p37
12397 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 0 0 0 0 0 20 11 20 2 20 5 2 24 14 17 5 20 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 15 0 14 0 14 15 20 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 25 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 0 24 24 24 24 5 8 25 20 20 11 5 24 0 11 0 11 24 11 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5
p38
11237 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 0 0 0 0 0 20 11 20 2 20 5 2 24 14 17 5 20 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 15 0 14 0 14 15 20 24 14 11 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 17 20 17 17 17 17 0 20 5 2 24 17 11 17 24 2 25 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 0 24 24 24 24 5 8 25 20 8 11 5 24 0 25 0 11 24 11 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5
p39
13437 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 0 0 0 0 0 20 11 20 2 20 5 2 24 14 17 24 8 8 20 2 14 14 17 5 11 2 11 5 17 5 8 2 24 5 24 25 25 20 25 20 20 24 15 0 14 0 14 15 20 24 14 11 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 17 20 17 17 17 17 0 20 5 2 24 17 11 17 24 2 25 25 20 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 5 24 24 24 24 5 8 25 20 8 11 5 24 0 0 0 11 24 11 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5
p40
16335 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 0 0 0 0 0 20 11 20 2 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 13 25 20 20 24 15 17 14 0 14 15 2 24 14 11 13 11 8 5 14 14 5 20 20 17 0 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 25 25 13 8 17 17 25 2 25 17 11 14 8 14 14 2 11 11 5 24 24 24 24 5 8 25 13 8 17 5 24 0 25 0 11 24 11 8 14 17 5 20 17 0 8 20 14 8 25 25 5 2 5
p41
7103 0 1 0 1 1 1 1 1 1 1 5 6 4 1 7 9 3 7 8 8 4 6 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 9 2 7 3 3 3 5 0 5 6 4 1 1 6 6 9 7 2 8 8 8 0 0 1 5 0 6 6 6 4 4 0 4 4 0 7 7 2 2 2 5 7 2 9 7 9 9 9 9 9 2
p42
9482 1 1 1 1 0 0 1 0 0 1 1 1 1 0 1 1 1 1 1 0 12 10 11 9 15 18 16 3 17 1 11 18 6 10 6 15 0 2 14 14 5 11 9 8 12 8 11 16 17 13 7 19 6 8 14 10 10 0 0 1 1 3 3 12 9 14 8 19 15 15 16 17 7 13 13 5 2 14 14 14 11 11 3 3 11 3 0 15 19 6 10 18 19 19 19 18 18 19 19 19
p43
10227 0 0 0 0 1 0 1 0 0 1 0 1 1 1 0 0 0 1 1 1 0 1 1 1 1 1 1 1 0 1 4 19 18 24 25 22 26 21 27 29 24 23 13 9 18 11 21 11 12 21 25 26 22 22 17 13 29 6 29 4 5 24 2 13 19 22 25 12 21 11 4 12 28 23 5 25 26 17 17 11 21 9 9 18 6 6 19 22 2 5 5 27 1 29 27 28 1 27 28 29
p44
7134 1 0 0 0 1 0 1 0 0 0 4 4 4 4 4 4 4 4 6 0 0 0 0 0 0 0 1 1 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 3 7 7 6 5 5 8 8 7 7 9 5 5 5 9 3 0 6 6 8 6 5 4 9 9 7 7 8 6 6 5 8 7 9 9 9 9 9 6 5 7 5
p45
9167 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 6 6 6 6 2 2 3 2 3 2 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 0 0 2 3 11 12 18 16 18 7 15 16 1 13 11 16 18 16 14 15 10 9 12 9 15 17 13 13 11 12 7 10 18 12 13 17 14 17 17 17 10 7
p46
8535 0 1 1 1 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 10 10 10 10 10 10 1 1 1 1 11 11 11 11 2 2 3 2 3 2 6 6 6 6 6 6 7 7 7 7 9 9 9 10 2 3 24 24 28 29 12 15 12 24 11 18 27 29 28 29 27 13 29 24 26 13 18 18 18 12 15 28 26 26 13 26 13 15 12
p47
6491 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 1 2 1 1 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 6 8 8 8 8 6 8 8 8 9 6 9 9 9 0 9 9
p48
9044 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 2 3 2 2 3 3 4 4 4 5 5 5 5 5 5 6 6 6 6 6 7 7 8 8 8 8 8 8 8 9 9 9 9 10 10 11 10 11 10 12 13 12 13 13 12 13 14 15 12 14 12 0 15 14 14 15 16 16 17 17 17 17 17 17 18 18 19 19 19 19 19
p49
9122 0 1 1 1 0 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 1 2 2 2 3 5 3 5 3 6 6 6 7 7 7 7 7 7 9 10 9 10 10 12 12 12 15 12 13 15 15 15 16 16 17 16 17 16 18 19 18 19 18 19 22 18 23 18 1 22 23 23 22 25 26 26 25 26 25 26 28 28 28 28 28 28
p50
9655 1 0 1 1 0 1 1 1 0 1 3 6 3 0 2 2 5 5 3 7 7 4 1 9 9 2 9 2 5 3 6 0 0 4 0 6 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 0 0 0 6 6 1 2 9 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 1 7 2 7 9 1 2 2 1 2 1 9 1 9
p51
10532 0 1 1 1 0 1 1 0 0 0 1 0 1 1 0 1 1 0 0 1 15 6 19 10 12 13 5 16 15 1 5 3 6 13 6 13 12 16 2 15 0 0 10 14 14 14 1 3 19 7 1 1 17 19 15 5 13 13 10 0 0 13 13 13 16 5 5 5 5 17 15 2 0 14 14 10 6 6 18 12 13 5 1 5 15 15 10 3 7 7 15 0 0 0 10 19 19 19 19 3 19 5 16 12 13 13 6 5 12 1 13 13 13 18 18 13 13 18 18 13
p52
9588 0 0 0 1 1 0 0 1 0 0 7 7 7 7 7 7 7 7 3 4 4 4 3 4 4 4 4 8 8 8 8 3 3 8 3 9 9 9 9 9 9 9 9 9 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 5 5 6 4 7 6 6 4 3 3 5 3 4 7 1 6 3 3 5 5 3 3 7 5 3 5 5 9 1 5 1 3 4 3 7
p53
10361 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 1 5 5 5 5 5 5 5 5 19 19 19 7 7 7 7 7 7 12 13 13 12 13 12 13 12 9 9 9 9 9 9 9 9 2 18 18 18 18 18 18 18 18 18 18 5 5 7 12 12 2 15 1 7 18 5 15 3 3 1 6 18 2 15 13 3 13 2 18 6 5 17 18 6 3 3 15 3 6 6 2 18 19 13 15 15 3 1 6 15 19 15 2 17 17 2 17 1 6 1 5
p54
9546 0 0 1 0 0 0 0 1 0 0 7 7 7 7 7 7 7 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 3 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 6 6 8 8 6 8 8 8 8 8 8 3 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 9 9 9 9 9 9
p55
11152 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 17 17 16 17 16 4 4 4 4 4 4 8 2 8 8 8 2 2 8 12 6 12 12 6 12 12 12 6 6 6 6 14 14 6 6 6 6 6 6 7 19 19 19 7 0 0 0 0 0 0 0 0 7 7 7 7 7 7 7 7 11 11 9 11 11 11 11 7 11 9 13 11 9 11 17 13 9 13 9 9 13 15 15 15 15 15 15 15 5 15 5 18 18 18 18 17 18 18 18 18
p56
23882 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 4 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p57
32882 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 4 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p58
53882 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 4 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p59
39121 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 4 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p60
23882 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 4 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p61
32882 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 4 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p62
53882 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 4 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p63
39121 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 4 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p64
23882 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 4 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p65
32882 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 4 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p66
53882 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 4 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p67
39671 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 22 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 18 16 5 24 10 18 27 14 29 2 19 19 4 16 27 6 20 8 24 15 18 9 6 26 8 19 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 19 5 27 7 28 6 25 25 2 3 27 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 24 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p68
23882 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 4 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p69
32882 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 4 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p70
53882 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 4 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
p71
39121 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 1 1 18 19 21 27 2 12 15 27 22 28 4 28 13 1 28 18 1 20 22 0 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 13 21 19 14 24 16 24 16 8 6 11 9 18 25 29 0 7 8 13 11 5 14 28 25 18 12 19 9 23 23 20 23 8 16 10 0 9 25 29 13 4 2 27 7 28 6 25 25 2 3 11 6 0 28 28 15 25 18 4 0 4 24 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 9 3 3 28 10 12 22 11 11 25 5 24 15 27 25 24 17 23 0 8 11 2 15 3 13 13 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 23 0 21 2 21 6 4 7 12 7 15 10 19
- 此处算法的解状态规定为:每一位顾客对应的设备序号组成的结果序列,那么邻域的转移就可以看成:
-
随机局部搜索算法
Random-Local-Search
以局部搜索算法为基础,将搜索状态设定为设备开启/关闭序列,即每台设备的0-1
状态序列。RLS
算法以随机状态作为初始解,针对于当前状态设定设备的Open
表与Close
表,进行最优领域可行状态搜索,直到迭代深度。- 此处针对于不同状态,建立贪心函数对每个设备状态序列进行
Greedy Assign
,总是选择对于当前状态的贪心分配策略,计算该状态的对应开销,用于状态优劣性比较。 RLS
依赖于随机性进行局部搜索,可以一定程度上避免之前的贪心算法,以及禁忌搜索陷入局部最优的困境,但缺点是运行时间长,随机次数高,结果波动性大。
随机局部搜索算法代码:
/* * RandomLocalSearch.h -- Use random local search to solve CFLP */ #ifndef RANDOM_LOCAL_SEARCH_H #define RANDOM_LOCAL_SEARCH_H #include <iostream> #include <vector> #include <fstream> #include <algorithm> #include <string> #include <cstdio> #include <ctime> #include <cmath> #include <windows.h> using namespace std; class RLS{ public: RLS(){ bestCost = (double)INT_MAX; tempCost = 0; } void readFile(string filePath); int performRandomLocalSearch(); // Random Search tools methods vector<bool> randomStartState(); vector<bool> chooseBetterNeighbor(vector<bool>& curr_state); // Cost calculating for facility state double calculateCostForState(vector<bool>& state); // Greedy assign customers to state, decide state available or not bool greedyAssignCustomer(vector<bool>& state); void calcluateCost(); int fac_num, cus_num; // State vector vector<bool> fac_open; // Result vector vector<int> result; private: double bestCost, tempCost; vector<bool> bestState; vector<int> usedCapacity; // Info vectors vector<int> capacity; vector<int> open_cost; vector<int> demand; vector<vector<int>> assign_cost; }; #endif
#include "RandomLocalSearch.h" void RLS::readFile(string filePath){ ifstream in(filePath.c_str()); in >> fac_num >> cus_num; // Read variables in order for(int i=0; i<fac_num; i++){ int temp_cap, temp_cost; in >> temp_cap >> temp_cost; capacity.push_back(temp_cap); open_cost.push_back(temp_cost); } for(int i=0; i<cus_num; i++){ float temp_demand; in >> temp_demand; demand.push_back((int)temp_demand); } for(int i=0; i<fac_num; i++){ vector<int> temp; for(int j=0; j<cus_num; j++){ float ass_cost; in >> ass_cost; temp.push_back((int)ass_cost); } assign_cost.push_back(temp); } // Init State for(int i=0; i<fac_num; i++){ fac_open.push_back(false); } for(int i=0; i<cus_num; i++){ result.push_back(-1); } } int RLS::performRandomLocalSearch(){ int searchTime = 100; for(int i=0; i<searchTime; i++){ vector<bool> startState = randomStartState(); // Start Random Search bool endFlag = false; double curr_cost = tempCost; while(!endFlag){ vector<bool> nextState = chooseBetterNeighbor(startState); if(curr_cost <= tempCost){ endFlag = true; }else { startState = nextState; curr_cost = tempCost; } } calculateCostForState(startState); if(tempCost < bestCost){ bestCost = tempCost; bestState = startState; } } calculateCostForState(bestState); return bestCost; } // Random Search tools methods vector<bool> RLS::randomStartState(){ vector<bool> result; srand((int)time(0)); for(int i=0; i<fac_num; i++){ int rand_result = rand() % 10; if(rand_result > 5){ result.push_back(true); }else { result.push_back(false); } } return result; } vector<bool> RLS::chooseBetterNeighbor(vector<bool>& curr_state){ vector<bool> bestNext = curr_state; double best_cost = tempCost; vector<int> open; vector<int> close; for (int i = 0; i < fac_num; i++) { if (curr_state[i]) { open.push_back(i); } else { close.push_back(i); } } vector<bool> next; double nextCost = 0; // close a open facility for (int i : open) { next = curr_state; next[i] = false; nextCost = calculateCostForState(next); if (nextCost < best_cost) { best_cost = nextCost; bestNext = next; } } // open a closed facility for (int i : close) { next = curr_state; next[i] = true; nextCost = calculateCostForState(next); if (nextCost < best_cost) { best_cost = nextCost; bestNext = next; } } // close a open facility and open a closed facility for (int i : open) { next = curr_state; next[i] = false; for (int j : close) { next[j] = true; nextCost = calculateCostForState(next); if (nextCost < best_cost) { best_cost = nextCost; bestNext = next; } } } return bestNext; } // Cost calculating for facility state double RLS::calculateCostForState(vector<bool>& state){ bool success = greedyAssignCustomer(state); if(success){ calcluateCost(); return tempCost; }else { return (double)INT_MAX; } } // Greedy assign customers to state, decide state available or not bool RLS::greedyAssignCustomer(vector<bool>& state){ usedCapacity.clear(); for(int i=0; i<fac_num; i++){ usedCapacity.push_back(0); fac_open[i] = false; } for (int j = 0; j < cus_num; j++) { int whichFacility = -1; for (int i = 0; i < fac_num; i++) { if (state[i]) { if (capacity[i] >= demand[j] + usedCapacity[i]) { whichFacility = i; break; } } } if (whichFacility == -1) { return false; } for (int i = 0; i < fac_num; i++) { if (state[i]) { if (usedCapacity[i] + demand[j] <= capacity[i] && assign_cost[i][j] < assign_cost[whichFacility][j]) { whichFacility = i; } } } result[j] = whichFacility; usedCapacity[whichFacility] += demand[j]; fac_open[whichFacility] = true; } return true; } void RLS::calcluateCost(){ int openCost = 0, serveCost = 0; for(int i=0; i<fac_num; i++){ if(fac_open[i]){ openCost += open_cost[i]; } } for(int i=0; i<cus_num; i++){ serveCost += assign_cost[result[i]][i]; } tempCost = openCost + serveCost; } int main(){ string details = "../result/RLS/all.txt"; ofstream outP(details.c_str()); for(int i=1; i<=71; i++){ string targetName = "p" + to_string(i); RLS rls; string targetFile = "../testData/" + targetName; rls.readFile(targetFile); int result = rls.performRandomLocalSearch(); outP << targetName << "\n```\n"; outP << result << "\n"; for(int i=0; i<rls.fac_num; i++){ outP << rls.fac_open[i] << " "; } outP << "\n"; for(int i=0; i<rls.cus_num; i++){ outP << rls.result[i] << " "; } outP << "\n```\n"; } return 0; }
结构分析:
- 此处的随机局部搜索的主体为迭代循环,每次循环开始之前随机初始状态,然后结合函数
chooseBestNeighbor()
选择开销最小的当前状态邻域,进行开销比较,更新当前最优状态。
随机局部搜索结果:
分析:随机局部搜索算法消耗较多时间,运行结果比贪心算法与禁忌搜索算法要好挺多,主要原因在于迭代过程的初始随机状态,可以很大程度上避免过早陷入局部最优,避免
一叶障目
。随机局部搜索具体样例结果:
p1
9413 0 0 0 0 1 0 1 0 0 0 4 4 6 6 6 4 4 4 4 6 4 4 4 4 4 6 6 6 6 6 3 4 9 4 2 5 1 5 0 5 2 5 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 3
p2
8255 0 0 0 0 1 0 1 0 0 0 4 4 6 6 6 4 4 4 4 6 4 4 4 4 4 6 6 6 6 6 3 4 9 4 2 5 1 5 0 5 2 5 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 3
p3
10055 0 0 0 0 1 0 1 0 0 0 4 4 6 6 6 4 4 4 4 6 4 4 4 4 4 6 6 6 6 6 3 4 9 4 2 5 1 5 0 5 2 5 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 3
p4
11855 0 0 0 0 1 0 1 0 0 0 4 4 6 6 6 4 4 4 4 6 4 4 4 4 4 6 6 6 6 6 3 4 9 4 2 5 1 5 0 5 2 5 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 3
p5
9348 0 0 0 0 1 0 1 0 0 0 4 4 6 6 6 4 4 4 4 6 4 6 6 2 8 3 4 0 9 7 3 8 9 4 2 5 1 5 0 5 2 5 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 1
p6
8190 0 0 0 0 1 0 1 0 0 0 4 4 6 6 6 4 4 4 4 6 4 6 6 2 8 3 4 0 9 7 3 8 9 4 2 5 1 5 0 5 2 5 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 1
p7
9990 0 0 0 0 1 0 1 0 0 0 4 4 6 6 6 4 4 4 4 6 4 6 6 2 8 3 4 0 9 7 3 8 9 4 2 5 1 5 0 5 2 5 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 1
p8
11790 0 0 0 0 1 0 1 0 0 0 4 4 6 6 6 4 4 4 4 6 4 6 6 2 8 3 4 0 9 7 3 8 9 4 2 5 1 5 0 5 2 5 0 3 9 4 4 3 0 4 1 8 1 5 7 0 2 0 7 1
p9
9013 0 0 0 0 1 0 1 0 0 0 4 4 6 6 6 4 4 4 4 6 4 4 4 4 4 6 6 6 6 7 3 8 9 4 2 5 1 5 0 5 2 5 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0
p10
7855 0 0 0 0 1 0 1 0 0 0 4 4 6 6 6 4 4 4 4 6 4 4 4 4 4 6 6 6 6 7 3 8 9 4 2 5 1 5 0 5 2 5 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0
p11
9655 0 0 0 0 1 0 1 0 0 0 4 4 6 6 6 4 4 4 4 6 4 4 4 4 4 6 6 6 6 7 3 8 9 4 2 5 1 5 0 5 2 5 0 3 9 4 4 3 0 4 1 8 1 5 7 0 4 0 4 0
p12
11455 0 0 0 0 1 0 1 0 0 0 4 4 6 6 6 4 4 4 4 6 4 4 4 4 4 6 6 6 6 7 3 8 6 4 5 5 1 5 0 5 9 6 0 3 9 4 4 3 0 4 1 8 1 5 7 0 9 0 7 0
p13
11719 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 18 18 18 18 19 18 19 18 18 19 18 19 19 18 2 19 2 19 19 19 19 2 2 2 2 2 16 17 1 17 13 7 2 16 3 10 11 1 1 13 6 0 5 0 8 5 14 10 2 9
p14
9121 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 18 18 18 18 19 18 19 18 18 19 18 19 19 18 2 19 2 19 19 19 19 2 2 2 2 2 16 17 1 17 13 7 2 16 3 10 11 1 1 13 6 0 5 0 8 5 14 10 2 9
p15
12921 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 18 18 18 18 19 18 19 18 18 19 18 19 19 18 2 19 2 19 19 19 19 2 2 2 2 2 16 17 1 17 13 7 2 16 3 10 11 1 1 13 6 0 5 0 8 5 14 10 2 9
p16
16721 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 18 18 18 18 19 18 19 18 18 19 18 19 19 18 2 19 2 19 19 19 19 2 2 2 2 2 16 17 1 17 13 7 2 16 3 10 11 1 1 13 6 0 5 0 8 5 14 10 2 9
p17
10315 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 0 0 1 0 0 1 7 7 1 18 3 18 14 4 7 4 1 6 2 3 5 7 4 9 14 5 7 2 6 4 0 3 1 4 2 7 2 0 3 6 3 1 1 2 6 0 5 0 8 5 14 6 2 9
p18
8013 1 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 1 1 0 0 1 10 10 1 18 17 18 3 17 7 1 1 6 2 3 7 10 17 6 18 18 7 2 6 17 0 17 1 17 2 7 2 0 3 10 3 1 1 2 6 0 0 7 3 18 7 10 2 6
p19
12209 0 0 1 1 0 0 1 1 0 1 1 0 0 0 0 0 0 1 1 0 7 3 10 10 18 18 17 18 3 17 7 2 18 6 2 3 7 10 17 9 18 18 7 2 6 17 7 17 3 17 2 7 2 10 3 10 3 18 2 18 6 10 6 6 3 2 6 9 9 9
p20
13809 0 0 1 1 0 0 1 1 0 1 1 0 0 0 0 0 0 1 1 0 7 3 10 10 18 18 17 18 3 17 7 2 18 6 2 3 7 10 17 9 18 18 7 2 6 17 7 17 3 17 2 7 2 10 3 10 3 18 2 18 6 10 6 6 3 2 6 9 9 9
p21
11380 0 1 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 1 7 1 10 10 1 13 3 13 3 4 7 4 1 10 13 3 7 10 4 10 1 7 7 19 10 4 7 3 1 4 13 7 13 7 3 10 3 19 19 13 10 13 13 1 3 19 1 3 19 1
p22
8152 1 0 1 1 1 1 1 1 0 0 1 0 0 1 0 0 0 0 0 1 0 3 10 10 19 13 3 13 3 4 7 4 19 6 13 3 5 10 4 6 7 5 7 19 6 4 0 3 3 4 13 7 2 0 3 10 3 19 19 13 6 0 5 0 3 5 7 10 19 6
p23
11584 1 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 1 0 14 1 1 1 2 14 11 5 1 1 14 2 11 5 14 1 8 14 5 5 2 8 1 0 1 11 11 2 14 2 0 11 14 11 2 2 2 14 0 5 0 8 5 14 8 11 8
p24
12984 1 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 1 0 14 1 1 1 2 14 11 5 1 1 14 2 11 5 14 1 8 14 5 5 2 8 1 0 1 11 11 2 14 2 0 11 14 11 2 2 2 14 0 5 0 8 5 14 8 11 8
p25
15852 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 20 11 20 2 20 5 2 9 14 0 9 8 8 20 3 14 14 0 5 11 2 0 5 3 5 8 2 5 5 9 5 11 6 11 20 20 5 15 0 14 0 14 15 8 5 14 0 20 11 8 5 14 14 5 20 20 2 11 0 14 0 5 20 11 11 11 9 0 5 9 20 6 11 0 9 8 9 20 14 9 20 7 20 0 2 0 2 4 20 5 2 9 7 11 7 5 2 2 11 20 8 7 14 11 14 5 7 11 14 28 14 1 0 11 11 11 5 15 5 5 5 8 11 20 8 0 11 9 0 11 0 11 9 9 8 14 7 11 20 0 0 8 20 14 8 11 11 11 0 11
p26
13477 1 0 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 20 11 20 2 20 5 2 9 14 0 9 16 8 20 3 14 14 0 5 11 2 0 5 3 5 8 19 24 5 24 5 11 6 11 20 20 24 24 0 14 0 14 24 8 24 14 0 20 11 8 5 14 14 5 20 20 2 11 0 14 0 5 20 11 11 11 9 0 5 9 20 6 11 0 24 8 9 20 14 24 20 7 20 0 19 0 2 4 20 5 2 24 7 11 7 5 2 2 11 16 8 7 14 11 2 5 7 11 14 8 14 14 0 11 11 11 24 24 24 24 5 8 11 20 16 0 5 9 0 12 0 11 24 5 8 14 7 5 20 0 0 8 20 14 8 11 11 5 0 5
p27
17977 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 13 11 13 2 13 5 2 24 14 0 24 16 8 8 3 14 14 0 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 8 8 24 24 0 14 0 14 24 8 24 14 0 13 11 8 5 14 14 5 13 13 2 11 0 14 0 5 8 11 11 11 24 0 5 24 13 6 11 0 24 8 24 8 14 24 13 7 13 0 19 0 2 4 8 5 2 24 7 11 7 5 2 2 25 16 8 7 14 25 2 25 7 11 14 8 14 1 0 11 11 25 24 24 24 24 5 8 25 13 16 0 5 24 0 25 0 11 24 5 8 14 7 5 13 0 0 8 13 14 8 25 25 5 0 5
p28
21271 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0 1 0 0 1 1 0 0 0 1 0 0 1 0 0 20 11 13 2 20 5 2 9 14 0 9 16 8 20 3 14 14 0 5 11 2 0 5 3 5 8 19 24 5 24 5 11 6 11 20 20 24 24 0 14 0 14 24 8 24 14 0 13 27 8 5 14 14 5 13 20 2 11 0 14 0 5 20 11 11 11 9 0 5 9 20 6 11 0 24 8 9 20 14 24 20 7 13 0 19 0 2 4 20 5 2 24 7 11 7 5 2 2 27 16 8 7 14 11 2 5 7 11 14 8 14 1 0 11 11 27 24 24 24 24 5 8 11 13 16 0 5 9 0 27 0 11 24 5 8 14 7 5 20 0 0 8 20 14 8 27 11 5 0 5
p29
17076 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 0 0 0 1 0 0 0 1 0 20 11 13 2 20 5 2 9 14 17 9 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 11 6 11 20 20 24 15 0 14 0 14 15 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 5 9 20 6 11 17 24 8 9 20 14 24 20 7 13 17 17 17 17 4 20 5 2 24 17 11 17 5 2 2 11 16 8 17 17 11 2 5 17 11 14 28 14 1 2 11 11 0 24 24 24 24 5 8 5 13 16 0 5 9 0 12 0 0 24 9 8 14 7 24 20 17 0 8 20 14 8 0 0 0 2 5
p30
14475 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 0 0 0 1 1 0 0 1 0 20 11 13 2 20 5 2 9 14 17 9 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 2 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 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 5 9 20 6 11 17 24 8 9 20 14 24 20 7 13 17 17 17 17 4 20 5 2 24 17 11 17 5 2 2 25 16 8 17 17 25 2 25 17 11 14 28 14 1 2 11 11 25 24 24 24 24 5 8 25 13 16 0 5 9 0 12 0 11 24 5 8 14 7 25 20 17 0 8 20 14 8 25 25 11 2 24
p31
17887 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 0 0 1 0 1 1 0 0 0 1 0 1 1 0 0 20 11 13 2 20 5 2 9 14 17 9 8 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 11 6 11 20 20 24 24 0 14 0 14 24 8 24 14 0 13 27 8 5 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 9 0 5 9 20 6 11 17 24 8 26 20 14 24 20 7 13 17 17 17 17 7 20 5 2 24 17 11 17 5 2 2 27 13 8 17 17 11 2 5 17 11 14 8 14 1 2 11 11 27 24 24 24 24 5 8 11 13 8 0 5 9 0 12 0 11 5 9 8 14 7 27 20 17 0 8 20 14 8 27 0 0 2 5
p32
23188 1 1 1 1 1 1 1 0 1 0 0 1 0 1 1 1 1 1 0 0 1 0 0 0 0 0 1 1 0 1 20 11 13 2 20 5 2 5 14 17 5 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 2 5 5 5 5 11 6 11 20 20 5 15 0 14 0 14 15 8 5 14 0 13 27 8 29 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 5 0 26 29 20 6 11 17 15 8 26 20 14 29 20 0 13 17 17 17 17 4 20 29 2 15 17 11 17 29 2 2 29 16 8 17 17 11 2 29 17 11 14 8 14 1 2 11 11 27 11 15 11 0 0 8 27 13 16 0 0 26 0 29 0 27 0 29 8 14 17 29 20 17 0 8 20 14 8 27 17 27 2 27
p33
15418 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1 1 1 1 0 0 1 0 0 0 1 0 1 1 0 1 20 11 20 2 20 5 2 24 14 17 24 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 2 24 5 24 5 11 6 11 20 20 24 15 0 14 0 14 15 8 24 14 0 20 27 8 29 14 14 5 20 20 17 11 0 14 0 5 20 11 11 11 24 0 5 24 20 6 11 17 24 8 26 20 14 24 20 7 20 17 17 17 17 4 20 5 2 24 17 11 17 5 2 2 29 16 8 17 17 11 2 29 17 11 14 8 14 1 2 11 11 27 24 24 24 24 5 8 11 20 16 0 5 24 0 29 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 27 11 5 2 5
p34
14505 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 0 0 0 1 1 1 0 0 1 20 11 13 2 20 5 2 9 14 17 9 16 8 20 3 14 14 17 5 11 2 0 5 3 5 8 19 24 5 24 5 25 6 25 20 20 24 15 0 14 0 14 15 8 24 14 0 13 11 8 29 14 14 5 13 20 17 11 0 14 0 5 20 11 11 11 9 0 5 9 20 6 11 17 24 8 26 20 14 24 20 7 13 17 17 17 17 4 20 5 2 24 17 11 17 5 2 2 25 16 8 17 17 25 2 29 17 11 14 8 14 14 2 11 11 25 24 24 24 24 5 8 25 13 16 0 5 9 0 12 0 11 24 5 8 14 7 5 20 17 0 8 20 14 8 25 25 5 2 5
p35
17289 0 0 1 1 1 1 1 0 1 0 0 1 1 1 1 0 0 1 1 0 0 0 1 1 1 0 0 0 0 0 13 11 13 2 13 5 2 24 14 17 22 8 8 8 3 14 14 17 5 11 2 4 5 3 5 8 2 24 5 24 5 11 6 11 8 8 24 24 23 14 17 14 24 8 24 14 4 13 11 8 5 14 14 5 13 13 17 11 11 14 17 5 8 11 11 11 22 17 5 22 13 6 11 17 24 8 22 8 14 24 13 17 13 17 17 17 17 4 8 5 2 24 17 11 17 5 2 2 11 18 8 17 17 11 2 5 17 11 14 8 14 14 2 11 11 11 24 24 24 24 5 8 11 13 18 4 5 24 11 12 17 11 24 5 8 14 17 5 13 17 17 8 13 14 8 11 11 5 2 5
p36
21260 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 11 13 2 13 5 2 9 14 0 9 8 8 8 3 14 14 0 5 11 2 0 5 3 5 8 2 5 5 9 5 11 6 11 8 8 5 15 0 14 0 14 15 8 5 14 0 13 11 8 5 14 14 5 13 13 2 11 0 14 0 5 8 11 11 11 9 0 5 9 13 6 11 0 9 8 9 8 14 9 13 7 13 0 2 0 2 4 8 5 2 9 7 11 7 5 2 2 11 13 8 7 14 11 2 5 7 11 14 8 14 1 2 11 11 11 5 15 5 5 5 8 11 13 8 0 5 9 0 12 0 11 5 9 8 14 7 11 13 0 0 8 13 14 8 11 11 0 2 0
p37
13705 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 1 1 1 0 1 1 0 0 0 0 20 11 20 14 20 11 14 24 14 0 22 16 20 20 0 14 14 0 25 11 14 0 22 0 22 20 0 24 24 24 25 25 20 25 20 20 24 24 0 14 0 14 24 16 24 14 0 20 11 14 25 14 14 11 20 20 14 11 0 14 0 24 20 11 11 11 22 0 22 22 20 20 11 0 24 20 22 20 14 24 20 0 20 0 0 0 0 0 20 25 14 24 0 11 0 24 14 14 21 16 16 0 14 25 14 25 0 11 14 14 14 14 0 11 11 21 24 24 24 24 11 16 25 20 16 0 25 24 0 21 0 11 24 21 20 14 0 25 20 0 0 20 20 14 20 25 25 11 0 24
p38
12651 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 1 1 1 0 1 1 0 0 0 0 20 11 20 14 20 11 14 24 14 0 22 16 20 20 0 14 14 0 25 11 14 0 22 0 22 20 0 24 24 24 25 25 20 25 20 20 24 24 0 14 0 14 24 16 24 14 0 20 11 14 25 14 14 11 20 20 14 11 0 14 0 24 20 11 11 11 22 0 22 22 20 20 11 0 24 20 22 20 14 24 20 0 20 0 0 0 0 0 20 25 14 24 0 11 0 24 14 14 21 16 16 0 14 25 14 25 0 11 14 14 14 14 0 11 11 21 24 24 24 24 11 16 25 20 16 0 25 24 0 21 0 11 24 21 20 14 0 25 20 0 0 20 20 14 20 25 25 11 0 24
p39
17155 1 0 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 1 1 20 0 20 2 20 5 2 5 28 17 5 20 28 20 3 2 17 17 5 0 2 0 5 3 5 20 2 5 5 5 5 5 20 29 20 20 5 5 0 2 0 20 5 10 5 17 0 20 0 28 29 28 17 5 20 20 17 0 0 17 0 5 20 0 0 0 5 0 5 5 20 20 5 17 5 20 5 20 2 5 20 0 20 17 17 17 17 4 20 5 2 5 17 0 17 5 2 2 29 18 28 17 17 0 2 29 17 0 28 28 17 2 2 0 0 29 5 5 5 0 0 28 0 20 18 0 0 29 0 29 0 0 0 29 28 17 17 29 20 17 0 28 20 17 20 29 0 0 2 0
p40
16888 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 1 1 20 0 20 17 20 5 19 5 28 17 22 20 28 20 17 28 17 17 5 0 19 0 5 17 5 20 19 5 5 22 5 5 20 29 20 20 5 5 0 17 0 20 5 28 5 17 0 20 0 28 29 28 17 5 20 20 17 0 0 17 0 5 20 0 0 0 22 0 5 22 20 20 5 17 5 20 22 20 19 5 20 0 20 17 17 17 17 0 20 5 17 5 17 0 17 5 17 19 29 20 28 17 17 0 19 29 17 0 28 28 17 19 17 0 0 29 5 5 5 5 5 28 5 20 20 0 5 22 0 29 0 0 5 29 28 17 17 29 20 17 0 28 20 0 20 29 0 0 0 0
p41
6953 1 0 1 0 1 0 1 1 1 0 0 6 4 6 7 7 7 7 8 8 4 6 2 6 2 7 7 8 0 6 6 6 4 4 6 4 4 4 8 8 0 0 0 0 7 2 2 6 6 2 2 7 7 7 7 4 0 7 6 4 4 6 6 6 2 7 2 8 0 7 0 0 6 0 0 6 6 6 4 4 0 4 4 4 7 7 2 2 6 7 7 2 2 7 7 7 2 2 7 2
p42
6721 1 1 0 0 0 1 1 0 1 0 0 1 0 0 0 1 0 1 0 1 11 8 11 5 15 19 1 11 17 1 11 8 6 19 6 15 0 17 8 5 5 11 5 8 8 8 11 17 17 11 1 19 6 8 5 19 6 0 0 1 1 11 17 8 11 5 19 19 15 15 1 17 1 17 17 5 17 5 5 5 11 11 11 11 11 11 0 15 19 6 19 15 19 19 19 19 19 19 19 19
p43
6719 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 1 0 1 0 1 0 0 0 0 1 21 15 23 25 20 25 21 1 1 23 23 25 9 15 15 21 15 21 21 25 9 20 20 20 2 1 15 1 1 1 2 2 2 21 9 25 1 21 15 1 21 23 23 23 25 9 20 9 15 20 25 9 15 15 15 21 20 2 23 23 23 23 1 1 23 23 2 23 2
p44
7620 0 1 0 1 0 0 0 0 0 1 3 3 3 3 3 3 3 3 1 1 1 1 9 9 9 9 9 9 9 3 3 9 3 3 3 3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 4 6 8 8 8 8 7 5 3 7 7 6 5 5 8 8 7 7 8 5 5 5 3 3 0 6 6 2 1 5 4 7 5 7 7 8 6 6 5 2 7 7 7 3 8 7 6 5 7 5
p45
7563 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 0 0 1 0 1 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 11 8 13 17 19 7 19 19 8 13 11 19 13 19 5 6 10 10 2 2 0 17 13 13 8 11 7 10 19 2 13 17 17 17 8 17 10 7
p46
7907 0 0 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 10 10 10 10 10 10 10 22 22 22 22 22 22 22 22 14 14 14 14 14 27 6 6 6 6 6 6 8 8 8 8 8 27 27 10 14 27 6 27 22 22 22 22 22 14 27 27 27 27 22 10 27 27 22 6 27 27 22 27 6 22 22 22 22 6 6 6 6 10 22
p47
6832 0 0 1 0 1 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 6 6 6 6 6 6 6 6 7 7 6 7 6 0 7 7 7 7 7 8 8 8 8 8 9 8 0 9 9 9 9 2 2 2 9 2
p48
7041 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 1 1 1 19 19 4 4 4 4 4 4 4 2 2 2 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 11 11 4 11 11 11 4 11 4 11 4 11 11 11 11 11 11 11 17 11 11 4 11 11 14 14 11 14 11 17 14 14 14 14 17 17 17 17 17 17 17 17 18 18 19 18 19 19 19
p49
6944 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 1 1 1 0 0 0 1 0 1 0 1 1 0 2 2 2 2 2 2 2 2 4 4 4 4 4 14 14 2 14 14 2 2 14 2 11 11 11 11 11 14 14 19 17 17 17 19 17 11 17 17 17 17 17 17 18 19 18 19 18 19 23 18 23 18 2 23 23 23 23 25 25 25 25 25 25 25 27 27 28 27 28 28
p50
10402 0 0 0 0 0 0 0 0 1 1 8 9 8 9 9 9 8 9 8 8 8 8 9 9 9 8 9 2 5 3 0 0 0 4 0 0 7 4 4 7 7 7 3 3 3 5 1 1 0 6 0 1 1 1 5 5 5 5 5 3 3 5 6 0 0 0 6 6 2 2 2 7 7 7 3 3 6 4 8 7 3 6 6 0 6 4 4 3 3 4 3 5 2 2 2 2 6 7 2 7 2 2 2 2 2 2 2 2 2 2
p51
9977 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 1 1 1 1 17 10 19 10 16 18 16 16 19 8 8 14 18 18 10 18 16 16 16 19 10 10 10 14 14 14 9 19 19 19 8 19 17 19 19 16 18 18 10 10 10 18 18 18 16 16 16 16 16 17 19 8 10 14 14 10 10 10 18 16 18 8 8 8 19 19 10 19 9 17 19 10 10 10 10 19 19 19 19 19 19 16 16 16 18 18 18 8 16 8 18 18 18 18 18 18 18 18 18 18
p52
11355 1 0 1 1 1 0 0 0 0 0 4 4 4 4 4 4 4 4 3 4 4 4 3 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 4 4 4 3 4 0 0 4 4 2 2 0 4 4 4 4 2 0 0 0 0 0 0 2 2 2 2 2 4 4 0 0 2 2 7 1 6 0 5 5 5 0 5 7 1 0 1 1 1 1 5 1 7 7 0 7
p53
10408 1 1 1 1 0 1 1 1 0 1 0 0 1 0 0 0 1 0 1 0 5 5 5 5 5 5 5 5 1 7 7 7 7 7 7 7 7 12 12 12 12 3 3 12 3 9 9 9 9 9 9 9 9 2 18 18 18 18 18 18 18 18 18 18 5 5 7 12 3 2 2 3 7 18 5 2 3 3 1 6 18 2 2 3 0 3 2 5 6 5 18 18 6 3 3 2 3 6 6 2 18 1 3 2 2 3 1 6 2 1 2 2 2 2 2 18 1 6 1 16
p54
9950 0 1 0 0 0 1 1 1 0 0 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 1 7 1 1 1 1 1 7 1 1 7 6 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 6 6 5 5 5 5 5 5 5 5 5 5 5 7 7 5 5 6 5 5 5 6 6 0 0 0 0 0 9 0 0 0 0 0 4 4 4 4 4 4 4 4 4 4 4 9 4 9 4 4 2 4 2 2
p55
10128 0 1 0 1 1 0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 17 17 16 17 16 4 4 4 8 8 8 8 8 8 4 17 8 6 6 12 1 12 12 6 12 12 12 6 6 6 6 14 14 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 14 7 7 6 7 7 7 7 7 7 7 7 7 7 13 7 3 7 3 7 7 13 13 7 13 13 17 13 13 13 13 13 13 15 15 15 15 15 15 15 15 15 15 17 17 17 17 17 17 17 17 17
p56
22599 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 1 1 18 19 21 27 2 12 21 27 22 28 4 28 10 1 28 18 1 20 22 0 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 14 24 16 24 16 8 6 25 9 18 7 29 0 7 8 3 25 5 14 28 25 18 12 19 9 5 10 20 5 8 16 10 0 9 25 29 10 6 5 27 7 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 7 14 8 26 25 28 19 26 16 2 12 26 0 28 24 25 20 1 9 3 3 28 10 12 22 12 25 25 5 24 21 27 25 24 0 10 0 8 28 2 16 3 3 1 27 10 24 5 27 5 4 3 21 1 20 19 14 26 2 0 10 29 10 5 21 2 19 12 8 28 10 0 21 2 21 6 4 7 12 7 21 20 19
p57
29619 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 1 0 1 1 0 1 1 0 1 1 0 0 0 1 18 19 21 22 2 12 21 0 22 0 4 19 13 1 19 18 1 10 22 0 18 16 5 24 10 18 24 19 29 2 19 19 4 16 18 6 8 8 24 16 18 9 6 4 8 19 13 21 19 10 24 16 24 16 8 6 11 9 18 25 29 0 18 8 13 11 5 19 19 25 18 12 19 9 5 13 10 5 8 16 10 0 9 25 29 13 6 5 24 25 11 6 25 25 2 3 11 6 0 11 19 21 25 18 4 0 4 24 22 3 6 4 18 12 12 8 11 25 0 8 9 11 0 6 9 16 2 11 4 0 11 24 25 10 1 9 3 3 11 10 12 22 11 11 25 5 24 21 18 25 24 0 10 0 8 11 2 16 3 13 13 24 10 2 5 22 5 4 3 21 1 8 19 10 4 2 2 10 29 13 5 21 2 19 12 8 11 10 0 21 2 21 6 4 25 12 25 21 13 6
p58
42659 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 1 7 19 2 27 2 12 15 27 27 27 4 19 10 1 19 7 1 10 27 0 27 24 5 24 10 27 27 19 29 2 19 19 4 24 27 6 8 8 24 15 7 9 6 4 8 19 3 2 19 10 24 24 24 15 8 6 11 9 27 7 29 0 7 8 3 11 5 19 19 12 7 12 19 9 5 10 10 5 8 24 10 0 9 7 29 10 6 5 27 7 11 6 7 11 2 3 11 6 0 11 19 15 12 7 4 0 4 24 27 3 6 4 27 12 12 8 11 7 0 8 9 11 0 6 9 15 2 11 4 0 11 24 11 10 1 9 3 3 11 10 12 24 11 11 11 5 24 15 24 7 0 0 10 0 8 12 2 15 3 3 1 0 5 2 5 2 5 4 3 15 1 8 19 8 4 2 24 10 29 8 5 15 2 19 12 8 12 5 5 15 5 15 6 4 6 6 7 15 3 6
p59
34876 1 1 1 0 1 1 1 1 0 0 1 1 0 1 0 0 0 0 1 0 1 1 1 0 1 0 1 1 0 1 18 6 21 27 2 6 21 27 22 27 4 6 13 1 6 18 1 20 22 0 18 21 5 24 10 18 27 6 29 2 6 26 4 21 27 6 20 20 24 21 18 20 6 4 20 26 13 21 6 20 24 24 24 21 20 6 11 26 18 7 29 0 7 20 13 11 5 10 6 11 18 6 6 20 5 13 20 5 20 24 10 0 26 7 29 13 6 5 27 7 11 4 7 11 2 13 11 11 0 11 0 21 11 18 4 0 4 24 22 13 26 4 27 11 11 20 11 7 0 20 26 11 0 4 26 21 2 18 26 0 11 24 7 20 1 26 1 13 0 10 7 22 27 7 7 5 24 21 27 7 24 0 10 0 13 27 2 21 13 13 13 27 10 24 5 27 5 4 1 21 1 10 6 10 26 2 24 10 29 10 5 21 2 11 7 13 18 10 0 21 2 2 4 4 18 4 7 2 13 26
p60
22148 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 0 1 0 1 1 1 1 1 0 0 1 0 7 19 21 22 2 6 15 28 22 28 4 28 10 1 28 7 1 10 22 0 7 16 5 24 10 7 24 19 4 2 19 19 4 16 28 6 8 8 24 16 7 9 6 4 8 19 3 21 19 10 24 16 24 16 8 6 25 9 22 7 4 0 7 8 3 25 5 19 28 25 7 6 19 9 23 23 10 23 8 16 10 0 9 25 4 10 6 5 24 7 28 6 25 25 2 3 28 6 0 28 28 15 25 7 4 0 4 24 22 3 19 4 22 6 6 8 28 7 0 8 9 25 28 19 9 16 2 28 19 0 28 24 25 10 23 9 3 3 28 10 6 22 28 25 25 5 24 15 22 25 24 0 23 0 8 28 2 15 3 3 1 0 10 24 5 24 5 4 3 21 1 8 19 10 4 2 0 10 4 10 5 21 2 19 6 8 28 23 0 21 2 21 6 4 7 6 7 15 10 19
p61
27843 1 1 1 1 1 1 1 1 0 1 0 0 0 0 1 0 1 0 0 1 0 1 1 1 1 1 0 0 1 0 7 19 21 22 2 6 21 28 22 28 4 28 23 1 28 7 1 14 22 0 7 16 5 24 23 7 24 19 4 2 19 19 4 16 28 6 14 9 24 16 7 9 6 4 9 19 3 21 19 14 24 16 24 16 9 6 25 9 22 7 4 0 7 9 3 25 5 14 28 25 7 6 19 9 23 23 14 23 9 16 23 0 9 25 4 23 6 5 24 7 28 6 25 25 2 3 28 6 0 28 28 21 25 7 4 0 4 24 22 3 19 4 22 6 6 9 28 7 14 9 9 25 28 19 9 16 2 28 19 0 28 24 25 14 23 9 3 3 28 14 6 22 28 25 25 5 24 21 22 25 24 0 23 0 3 28 2 16 3 3 1 0 23 24 5 24 5 4 3 21 1 14 19 14 4 2 0 14 4 14 5 21 2 19 6 9 28 23 0 21 2 21 6 4 7 6 7 21 23 19
p62
38665 0 0 1 0 1 0 0 0 0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 1 1 0 0 1 1 0 27 28 2 27 2 11 15 27 27 28 4 28 10 23 28 11 23 10 27 27 27 24 23 24 10 27 27 14 4 2 4 4 4 24 27 4 14 9 24 15 11 9 11 4 9 4 10 2 14 14 24 24 24 15 9 11 11 9 27 11 4 2 11 9 10 11 23 14 28 11 27 11 4 9 23 23 10 23 9 24 10 2 9 11 4 10 4 2 27 11 28 4 11 11 2 23 11 11 2 28 28 15 11 27 4 24 4 24 27 23 14 4 27 11 28 9 28 27 14 9 9 28 28 4 9 15 2 28 4 28 28 24 28 10 23 9 23 10 28 10 28 27 28 28 28 2 24 15 27 4 24 14 23 24 10 14 2 15 10 23 23 24 10 24 23 24 23 9 23 15 23 10 28 14 9 2 24 10 9 10 2 15 2 14 14 9 14 23 24 2 2 2 14 4 14 14 27 15 10 9
p63
30636 1 0 1 1 1 1 1 0 0 1 0 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 0 18 19 2 24 2 12 2 0 18 17 4 17 3 3 19 18 3 9 24 0 18 24 5 24 5 18 24 19 4 2 19 19 4 24 18 6 9 9 24 24 18 9 6 4 9 19 3 2 19 17 24 24 24 24 9 6 11 9 18 25 4 0 18 9 3 11 5 17 19 25 18 12 19 9 5 5 9 5 9 24 5 0 9 25 4 3 6 5 24 25 17 6 25 25 2 3 11 6 0 17 17 2 25 18 4 0 4 24 24 3 19 4 18 12 12 9 11 25 17 9 9 11 17 19 9 24 2 11 19 17 11 24 25 9 5 9 3 3 17 17 12 18 11 11 25 5 24 2 18 25 24 17 5 0 3 11 2 2 3 3 3 0 5 2 5 18 5 4 3 2 5 9 19 17 4 2 0 17 4 17 5 2 2 19 12 9 11 5 0 2 2 24 6 4 25 12 25 5 17 19
p64
22199 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 0 0 0 0 1 0 0 1 0 1 7 19 2 27 2 12 15 27 27 27 4 19 10 1 19 7 1 10 27 0 27 16 5 24 10 27 27 19 29 2 19 19 4 16 27 6 8 8 24 16 7 9 6 4 8 19 3 2 19 10 24 16 24 16 8 6 11 9 27 7 29 0 7 8 3 11 5 19 19 12 7 12 19 9 5 10 10 5 8 16 10 0 9 7 29 10 6 5 27 7 11 6 7 11 2 3 11 6 0 11 19 15 12 7 4 0 4 24 27 3 19 4 27 12 12 8 11 7 0 8 9 11 0 19 9 16 2 11 19 0 11 24 11 10 1 9 3 3 11 10 12 27 11 11 11 5 24 15 27 7 24 0 10 0 8 11 2 15 3 3 1 27 10 24 5 27 5 4 3 15 1 8 19 10 4 2 0 10 29 10 5 15 2 19 12 8 11 10 0 2 2 2 6 4 7 12 7 15 10 19
p65
28114 0 1 0 1 1 0 0 1 1 1 1 0 1 0 0 0 1 0 0 0 0 1 1 1 1 0 0 1 0 0 7 12 21 27 21 12 21 27 22 27 4 12 10 1 12 7 1 10 22 27 27 16 23 24 10 27 27 10 4 21 4 4 4 16 27 12 8 8 24 16 7 9 12 4 8 4 3 21 4 10 24 16 24 16 8 12 7 9 22 7 4 24 7 8 3 12 23 10 12 12 7 12 4 9 23 23 10 23 8 16 10 23 9 7 4 10 4 23 27 7 27 4 7 7 24 3 27 12 10 12 10 21 12 7 4 24 4 24 22 3 4 4 27 12 12 8 27 7 10 8 9 12 27 4 9 16 21 12 4 10 27 24 12 10 23 9 3 3 27 10 12 22 12 12 7 23 24 21 27 7 24 10 23 24 8 12 21 16 3 3 1 27 10 24 23 27 23 4 3 21 1 8 12 10 4 21 24 10 4 10 23 21 21 12 12 8 12 23 27 21 21 21 4 4 7 4 7 21 10 12
p66
36600 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 0 1 0 0 7 19 21 27 21 11 21 27 22 17 19 17 13 1 19 7 1 13 22 27 27 21 1 27 13 27 27 19 19 21 19 19 19 21 27 19 9 9 27 21 7 9 19 9 9 19 13 21 19 17 27 22 21 21 9 19 11 9 22 7 9 17 7 9 13 11 17 17 19 25 7 11 19 9 13 13 13 17 9 22 13 17 9 25 19 13 19 21 27 7 17 19 25 25 17 13 11 11 17 17 17 21 25 7 19 17 19 27 22 13 19 19 27 11 11 9 11 7 17 9 9 11 17 19 9 21 21 11 19 17 11 21 25 13 1 9 1 13 17 17 11 22 11 11 25 17 27 21 27 25 27 17 13 17 13 11 21 21 13 13 13 27 13 21 13 27 1 19 1 21 1 13 19 17 9 21 27 13 9 13 21 21 21 19 11 9 11 13 17 21 17 27 11 11 7 11 7 1 13 17
p67
31638 0 0 1 0 0 0 0 1 1 0 1 0 0 1 1 0 0 0 1 0 0 1 1 0 1 0 0 0 1 1 18 14 21 22 2 28 21 28 22 28 29 28 13 13 28 18 13 10 22 24 18 24 2 24 10 18 24 14 29 2 28 14 29 21 28 28 8 8 24 21 18 8 28 29 8 14 13 21 14 14 24 24 24 21 8 28 18 8 18 7 29 2 7 8 13 28 2 14 28 7 7 28 28 8 10 10 10 10 8 24 10 10 8 7 29 13 29 2 24 7 28 28 7 7 2 13 28 28 2 28 28 21 7 18 29 24 29 24 22 13 14 29 18 14 18 8 24 7 14 8 14 18 14 14 14 21 2 18 29 24 7 24 7 10 13 8 13 13 24 10 7 22 7 7 7 2 24 21 22 7 24 14 10 2 8 18 2 21 13 13 13 24 10 24 2 18 2 29 13 21 13 8 14 14 29 2 2 10 29 10 2 21 21 29 7 8 18 10 10 21 2 21 29 29 7 29 7 21 10 29
p68
22002 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 0 1 1 0 1 0 1 1 1 1 7 6 21 27 2 12 21 27 22 28 4 28 10 3 28 7 3 10 22 0 27 16 5 24 10 27 27 28 29 2 6 26 4 16 27 6 8 8 24 16 7 9 6 4 8 26 3 21 6 10 24 16 24 16 8 6 11 9 22 7 29 0 7 8 3 11 5 28 28 12 7 12 6 9 5 10 10 5 8 16 10 0 9 7 29 10 6 5 27 7 28 6 7 11 2 3 11 6 0 28 28 21 12 7 4 0 4 24 22 3 26 4 27 12 12 8 28 7 0 8 26 11 28 6 26 16 2 11 26 0 28 24 11 10 5 9 3 3 28 10 12 22 11 11 11 5 24 21 27 7 24 0 10 0 8 11 2 16 3 3 3 27 10 24 5 27 5 4 3 21 5 8 28 10 26 2 0 10 29 10 5 21 2 6 12 8 11 10 0 21 2 21 6 4 7 12 7 21 8 6
p69
27778 1 0 1 1 0 1 0 0 1 1 0 1 0 1 0 0 1 0 1 1 0 1 0 0 0 1 1 1 1 1 18 19 21 27 2 11 21 27 18 28 29 28 13 13 28 18 3 13 27 0 18 16 5 0 13 18 27 19 29 2 19 19 26 16 27 19 8 8 16 16 18 9 19 26 8 19 13 21 19 19 0 16 2 16 8 19 11 9 18 25 29 0 18 8 13 11 5 19 28 25 18 11 19 9 5 13 8 5 8 16 13 0 9 25 29 13 19 5 27 25 28 19 25 25 2 3 11 11 0 28 28 21 25 18 29 0 29 27 27 3 19 29 27 11 11 8 28 25 0 8 26 11 28 19 26 16 2 11 26 0 28 21 25 8 5 9 3 3 28 13 11 27 11 11 25 5 16 21 27 25 27 0 5 0 8 11 2 16 3 13 13 27 13 2 5 27 5 29 3 21 5 8 19 8 26 2 0 13 29 13 5 21 2 19 11 8 28 13 0 21 2 21 19 29 25 11 25 21 8 19
p70
37827 1 1 0 0 0 0 0 0 1 0 1 0 1 0 0 1 1 1 0 1 0 1 0 0 0 1 1 1 1 0 27 19 21 27 21 12 15 27 27 28 26 28 10 1 28 27 1 10 27 0 27 16 1 0 10 27 27 19 26 21 19 19 26 16 27 12 8 8 16 16 25 8 12 26 8 19 8 21 19 10 0 16 21 16 8 12 25 8 27 25 26 0 25 8 8 25 0 17 28 25 25 12 19 8 10 10 10 10 8 16 10 0 26 25 26 10 19 0 27 25 28 19 25 25 0 1 28 12 0 28 28 15 25 25 26 0 26 27 27 1 19 26 27 12 12 8 28 25 17 8 26 25 17 19 26 16 21 12 26 17 28 21 25 10 1 8 1 8 28 10 12 27 12 25 12 0 16 15 27 12 27 17 10 0 8 28 21 15 8 1 1 27 10 0 10 27 1 26 1 21 1 8 19 10 26 21 0 8 26 8 21 21 21 19 12 8 28 10 0 21 21 21 19 19 12 12 12 15 17 19
p71
29846 0 0 1 0 0 0 0 1 1 0 1 0 1 1 0 0 0 0 0 1 0 1 1 1 0 0 1 0 1 1 7 19 21 22 2 12 21 28 22 28 29 28 13 13 28 7 13 10 22 28 7 21 23 2 10 7 22 19 29 2 19 19 26 21 28 12 8 8 21 21 7 8 12 26 8 19 13 21 19 10 2 22 2 21 8 12 7 8 22 7 29 2 7 8 13 12 23 19 28 12 7 12 19 8 23 23 10 23 8 22 10 2 26 7 29 13 19 2 22 7 28 19 7 7 2 13 28 12 2 28 28 21 12 7 29 2 29 21 22 13 19 29 22 12 12 8 28 7 28 8 26 12 28 19 26 21 2 12 26 10 28 21 12 10 23 8 13 13 19 10 12 22 12 12 7 2 21 21 22 7 2 10 23 2 8 12 2 21 13 13 13 22 10 21 23 22 23 29 13 21 23 8 19 10 26 21 21 10 29 10 2 21 21 19 12 8 19 23 21 21 2 21 19 29 7 19 7 23 10 19
- 此处针对于不同状态,建立贪心函数对每个设备状态序列进行