题目
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.
The total demand assigned to a facility must not exceed
its capacity
解题过程
这道题我用了两种方法来解决——贪心算法和模拟退火法,不过效果都不大好(没办法水平就这样^ - ^),感觉和最优解相差甚远
贪心算法
贪心算法的思路很简单,就是让每个用户选择服务费用最少的工厂,最后计算出总的结果,不多说,上代码吧
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <time.h>
using namespace std;
struct factory
{
int open_cost; // 工厂开启的费用
int rest; // 工厂剩余的容量
int state = 0;
int server_num = 0;
};
void tanxin(string file_name, int m, ofstream& out1, ofstream& out2) {
vector<int> capacity_need;
vector<vector<int> > server_cost;
vector<factory> factories;
int factory_num;
int user_num;
ifstream in;
string dir = "../Instances/";
in.open(( dir + file_name).c_str());
in >> factory_num >> user_num;
for (int i = 0; i < factory_num; ++i) {
factory f;
in >> f.rest;
in >> f.open_cost;
factories.push_back(f);
//cout << f.rest << " " << f.open_cost <<endl;
}
int temp;
char c;
for (int i = 0; i < user_num; ++i) {
in >> temp >> c;
capacity_need.push_back(temp);
}
for (int i = 0; i < user_num; ++i) {
vector<int> v;
for (int j = 0; j < factory_num; ++j) {
if (m >= 56) in >> temp;
else in >> temp >> c;
v.push_back(temp);
//cout << v[j] << " ";
}
server_cost.push_back(v);
//cout << endl;
}
int total_cost = 0;
vector<int> server_factories;
double start = clock();
for (int i = 0; i < user_num; ++i) {
int cost = INT_MAX;
int k = -1;
for (int j = 0; j < factory_num; ++j) {
if(factories[j].rest >= capacity_need[i]) {
if ( cost > server_cost[i][j] ) {
cost = server_cost[i][j];
k = j;
}
}
}
total_cost += cost;
server_factories.push_back(k);
factories[k].rest -= capacity_need[i];
factories[k].server_num += 1;
}
for (int i = 0; i < factory_num; ++i) {
if (factories[i].server_num > 0) {
factories[i].state = 1;
total_cost += factories[i].open_cost;
}
}
double end = clock();
double times = (double)(end-start)/CLK_TCK;
out1 << "|" << file_name << "|" << total_cost << "|" << times << "|" << endl;
out2 << total_cost << endl;
for (int i = 0; i < factory_num; ++i) {
out2 << factories[i].state << " ";
}
out2 << endl;
for (int i = 0; i < user_num; ++i) {
out2 << server_factories[i] << " ";
}
out2 << endl << endl;
}
int main() {
char c[3];
ofstream out1;
out1.open("./1.txt");
ofstream out2;
out2.open("./2.txt");
for (int i = 1; i <= 71; ++i) {
sprintf(c, "p%d", i);
string s = c;
tanxin(s, i, out1, out2);
}
//read_data_from_file("p1", 1);
return 0;
}
- 最终结果和用时
result | times | |
---|---|---|
p1 | 10355 | 0 |
p2 | 9041 | 0 |
p3 | 11041 | 0 |
p4 | 13041 | 0 |
p5 | 10827 | 0 |
p6 | 9513 | 0 |
p7 | 11513 | 0 |
p8 | 13513 | 0 |
p9 | 10355 | 0 |
p10 | 9041 | 0 |
p11 | 11041 | 0 |
p12 | 13041 | 0 |
p13 | 11915 | 0 |
p14 | 9426 | 0 |
p15 | 13026 | 0 |
p16 | 16626 | 0 |
p17 | 11915 | 0 |
p18 | 9426 | 0 |
p19 | 13026 | 0 |
p20 | 16626 | 0 |
p21 | 11915 | 0 |
p22 | 9426 | 0 |
p23 | 13026 | 0 |
p24 | 16626 | 0 |
p25 | 16655 | 0 |
p26 | 14125 | 0 |
p27 | 18925 | 0 |
p28 | 23725 | 0 |
p29 | 17487 | 0 |
p30 | 14750 | 0 |
p31 | 19950 | 0 |
p32 | 25150 | 0 |
p33 | 17013 | 0 |
p34 | 14380 | 0 |
p35 | 19380 | 0 |
p36 | 24380 | 0 |
p37 | 16597 | 0 |
p38 | 14067 | 0 |
p39 | 18867 | 0 |
p40 | 23667 | 0 |
p41 | 8853 | 0 |
p42 | 10681 | 0 |
p43 | 13592 | 0 |
p44 | 12280 | 0 |
p45 | 12949 | 0 |
p46 | 14215 | 0 |
p47 | 14162 | 0 |
p48 | 13543 | 0 |
p49 | 13675 | 0 |
p50 | 10106 | 0 |
p51 | 10848 | 0 |
p52 | 15442 | 0 |
p53 | 14438 | 0 |
p54 | 15941 | 0 |
p55 | 14585 | 0 |
p56 | 28141 | 0 |
p57 | 37141 | 0.001 |
p58 | 58141 | 0 |
p59 | 43380 | 0 |
p60 | 28141 | 0.001 |
p61 | 37141 | 0 |
p62 | 58141 | 0.001 |
p63 | 43380 | 0 |
p64 | 28141 | 0.001 |
p65 | 37141 | 0 |
p66 | 58141 | 0 |
p67 | 43654 | 0 |
p68 | 28141 | 0 |
p69 | 37141 | 0 |
p70 | 58141 | 0 |
p71 | 43380 | 0 |
10355
1 1 1 1 1 1 1 1 1 1
5 7 8 2 9 9 5 6 3 2 6 3 4 0 6 4 5 0 3 9 7 6 3 5 6 9 5 7 0 3 3 8 2 1 3 7 9 3 6 4 5 7 8 8 1 7 0 2 4 6
9041
1 1 1 1 1 1 1 1 1 1
5 7 8 2 9 9 5 6 3 2 6 3 4 0 6 4 5 0 3 9 7 6 3 5 6 9 5 7 0 3 3 8 2 1 3 7 9 3 6 4 5 7 8 8 1 7 0 2 4 6
11041
1 1 1 1 1 1 1 1 1 1
5 7 8 2 9 9 5 6 3 2 6 3 4 0 6 4 5 0 3 9 7 6 3 5 6 9 5 7 0 3 3 8 2 1 3 7 9 3 6 4 5 7 8 8 1 7 0 2 4 6
13041
1 1 1 1 1 1 1 1 1 1
5 7 8 2 9 9 5 6 3 2 6 3 4 0 6 4 5 0 3 9 7 6 3 5 6 9 5 7 0 3 3 8 2 1 3 7 9 3 6 4 5 7 8 8 1 7 0 2 4 6
10827
1 1 1 1 1 1 1 1 1 1
5 7 8 2 9 9 5 6 3 2 6 3 4 0 6 4 5 0 3 9 7 6 3 5 6 9 5 7 0 3 3 8 2 1 6 7 9 3 6 4 0 7 8 8 1 7 0 2 4 8
9513
1 1 1 1 1 1 1 1 1 1
5 7 8 2 9 9 5 6 3 2 6 3 4 0 6 4 5 0 3 9 7 6 3 5 6 9 5 7 0 3 3 8 2 1 6 7 9 3 6 4 0 7 8 8 1 7 0 2 4 8
11513
1 1 1 1 1 1 1 1 1 1
5 7 8 2 9 9 5 6 3 2 6 3 4 0 6 4 5 0 3 9 7 6 3 5 6 9 5 7 0 3 3 8 2 1 6 7 9 3 6 4 0 7 8 8 1 7 0 2 4 8
13513
1 1 1 1 1 1 1 1 1 1
5 7 8 2 9 9 5 6 3 2 6 3 4 0 6 4 5 0 3 9 7 6 3 5 6 9 5 7 0 3 3 8 2 1 6 7 9 3 6 4 0 7 8 8 1 7 0 2 4 8
10355
1 1 1 1 1 1 1 1 1 1
5 7 8 2 9 9 5 6 3 2 6 3 4 0 6 4 5 0 3 9 7 6 3 5 6 9 5 7 0 3 3 8 2 1 3 7 9 3 6 4 5 7 8 8 1 7 0 2 4 6
9041
1 1 1 1 1 1 1 1 1 1
5 7 8 2 9 9 5 6 3 2 6 3 4 0 6 4 5 0 3 9 7 6 3 5 6 9 5 7 0 3 3 8 2 1 3 7 9 3 6 4 5 7 8 8 1 7 0 2 4 6
11041
1 1 1 1 1 1 1 1 1 1
5 7 8 2 9 9 5 6 3 2 6 3 4 0 6 4 5 0 3 9 7 6 3 5 6 9 5 7 0 3 3 8 2 1 3 7 9 3 6 4 5 7 8 8 1 7 0 2 4 6
13041
1 1 1 1 1 1 1 1 1 1
5 7 8 2 9 9 5 6 3 2 6 3 4 0 6 4 5 0 3 9 7 6 3 5 6 9 5 7 0 3 3 8 2 1 3 7 9 3 6 4 5 7 8 8 1 7 0 2 4 6
11915
1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 19 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 19 4 5 12 14 13 8
9426
1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 19 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 19 4 5 12 14 13 8
13026
1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 19 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 19 4 5 12 14 13 8
16626
1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 19 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 19 4 5 12 14 13 8
11915
1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 19 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 19 4 5 12 14 13 8
9426
1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 19 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 19 4 5 12 14 13 8
13026
1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 19 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 19 4 5 12 14 13 8
16626
1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 19 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 19 4 5 12 14 13 8
11915
1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 19 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 19 4 5 12 14 13 8
9426
1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 19 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 19 4 5 12 14 13 8
13026
1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 19 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 19 4 5 12 14 13 8
16626
1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
0 6 1 18 7 14 12 11 5 4 18 5 8 6 12 13 4 0 12 1 15 16 4 9 19 3 15 7 5 6 1 0 17 4 0 8 0 6 11 1 0 6 16 19 4 5 12 14 13 8
16655
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
14125
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
18925
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
23725
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
17487
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 1
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 29 15 25
14750
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 1
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 29 15 25
19950
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 1
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 29 15 25
25150
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 1
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 29 15 25
17013
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 1
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 29 15 25
14380
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 1
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 29 15 25
19380
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 1
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 29 15 25
24380
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 1
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 29 15 25
16597
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
14067
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
18867
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
23667
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
8853
1 1 1 1 1 1 1 1 1 1
2 8 8 1 6 8 4 3 0 3 9 1 8 9 1 2 2 6 4 2 0 5 0 6 6 7 1 7 7 9 4 3 7 3 4 0 2 0 7 1 9 0 9 2 0 0 0 5 1 5 7 3 9 0 3 9 0 7 8 1 5 8 6 4 6 5 5 7 5 3 5 0 8 8 9 0 6 7 3 9 3 5 4 5 5 7 4 5 6 6
10681
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
16 17 0 6 9 19 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 19 14 17 10 4 17 8 7 6 7 10 6 8 8 11 6 5 11 7 15 14 11 7 8
13592
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
20 21 18 22 16 21 18 12 15 10 9 23 20 4 27 24 29 16 1 6 10 13 22 19 10 22 29 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
12280
1 1 1 1 1 1 1 1 1 1
9 1 1 6 1 2 9 3 7 8 7 0 0 3 0 7 4 8 8 7 8 0 4 4 7 5 4 0 1 7 4 8 3 3 2 5 3 1 1 7 0 2 1 0 9 5 1 1 6 7 9 0 3 9 8 2 2 6 6 0 5 7 6 9 9 2 6 6 7 0 3 0 8 7 7 6 5 5 7 5 4 5 7 7 6 4 4 2 2 3
12949
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
3 18 15 2 8 19 4 9 18 0 0 1 17 0 1 5 17 6 2 7 0 12 16 17 14 19 17 2 7 0 7 19 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 19 17 2 1 14 5 17 17 14 12 13 9 19 14 10 1 18 15 10
14215
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 1
5 4 18 19 11 8 14 17 6 0 2 9 13 7 24 7 6 7 2 19 12 29 2 13 14 29 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 29 21 5 29 12 24 10
14162
1 1 1 1 1 1 1 1 1 1
2 8 0 8 1 9 7 9 7 9 3 6 1 6 9 7 9 8 8 9 1 8 6 9 7 9 0 8 7 7 0 6 2 1 7 0 8 7 1 9 0 6 0 7 0 3 7 7 5 7 0 0 1 0 3 7 1 6 1 4 6 7 7 0 7 2 5 7 4 5 2 7 3 7 2 6 3 5 7 7 7 2 2 2 6 3 5 6 6 5
13543
1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 0 1 1
3 0 12 0 6 0 12 0 12 1 1 0 13 3 1 0 15 0 1 0 19 1 1 0 18 5 14 11 18 9 14 11 15 12 1 11 18 18 13 11 15 11 5 3 15 11 4 11 15 11 10 11 15 12 12 11 3 11 18 2 3 12 18 4 3 12 9 5 3 13 9 10 2 3 9 13 2 3 9 15
13675
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 1
0 22 12 1 25 5 12 10 22 20 1 29 1 12 13 3 27 0 2 12 0 22 5 26 3 29 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 2 27 0 23 10 3 21 3 29 4 23 16 2 27
10106
1 1 1 1 1 1 1 1 1 1
3 1 0 9 0 5 8 2 8 1 5 2 6 6 1 2 0 2 8 1 5 7 6 6 4 9 8 5 2 5 0 9 6 2 9 0 8 5 0 5 2 1 7 9 9 2 8 5 0 5 6 7 6 5 5 1 8 5 7 5 1 2 0 9 0 2 7 2 8 1 0 7 6 0 7 1 2 5 7 5 5 7 6 9 4 1 7 5 7 5 5 2 6 6 3 2 8 2 3 7
10848
1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1
1 19 12 13 11 9 6 11 8 9 6 6 11 8 7 11 7 12 19 8 5 6 12 8 8 6 15 11 8 7 1 19 16 12 11 0 6 11 8 7 6 6 11 8 7 0 6 11 9 7 3 19 15 12 8 5 7 17 15 15 5 6 19 0 3 5 16 19 0 10 11 19 14 19 11 0 12 10 9 0 7 6 19 0 2 0 7 9 15 0 5 16 19 0 11 2 13 9 17 0
15442
1 1 1 1 1 1 1 1 1 1
8 9 3 8 8 2 4 9 9 0 1 9 3 8 0 3 6 9 0 1 5 1 3 8 5 4 7 9 9 7 5 2 3 6 6 2 4 3 1 7 5 3 3 8 6 2 4 2 1 7 5 7 3 2 7 5 2 0 4 4 2 1 3 6 3 3 0 0 0 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 0 4 4
14438
1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1
19 3 12 4 9 8 3 11 13 9 19 3 15 1 14 19 3 11 13 9 8 3 11 4 9 5 18 5 7 19 13 3 12 8 17 13 3 12 4 9 19 3 15 19 11 19 9 15 1 14 11 3 12 8 17 19 3 15 19 10 19 0 8 5 2 19 3 8 5 2 1 18 13 19 0 19 3 15 2 4 1 18 14 7 19 19 18 13 10 12 2 18 1 0 0 13 3 12 4 1
15941
1 1 1 1 1 1 1 1 1 1
4 9 0 9 0 4 4 6 9 0 9 9 3 9 2 1 6 4 9 0 9 0 2 5 2 1 6 4 8 0 4 0 3 5 8 1 6 4 8 0 4 0 2 3 2 1 4 4 5 0 4 0 0 3 2 4 6 3 8 7 4 6 3 0 2 4 7 1 8 7 2 2 2 3 2 1 6 4 8 8 4 6 3 3 2 8 6 4 8 7 4 3 2 3 2 4 6 4 8 5
14585
1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1
19 19 8 6 9 19 0 2 6 9 9 2 2 14 9 19 0 2 4 9 4 2 2 14 10 4 2 2 4 8 19 3 11 6 9 19 19 14 7 9 13 2 2 14 18 19 19 0 16 9 19 19 0 7 9 19 19 0 0 10 19 6 2 6 10 19 19 2 4 5 19 3 11 6 10 4 2 2 4 2 2 2 2 14 10 0 2 6 14 15 0 0 6 14 15 19 19 0 8 10
28141
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 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 29 0 27 29 17 20 29 11 3 6 9 19 11 27 7 1 23 13 9 25 1 29 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 29 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 29 1 28 29 16 8 26 20 8 10 4 1 27 8
37141
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 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 29 0 27 29 17 20 29 11 3 6 9 19 11 27 7 1 23 13 9 25 1 29 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 29 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 29 1 28 29 16 8 26 20 8 10 4 1 27 8
58141
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 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 29 0 27 29 17 20 29 11 3 6 9 19 11 27 7 1 23 13 9 25 1 29 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 29 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 29 1 28 29 16 8 26 20 8 10 4 1 27 8
43380
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 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 29 0 27 29 17 20 29 11 3 6 9 19 11 27 7 1 23 13 9 25 1 29 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 29 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 29 1 28 29 16 8 26 20 8 10 4 1 27 8
28141
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 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 29 0 27 29 17 20 29 11 3 6 9 19 11 27 7 1 23 13 9 25 1 29 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 29 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 29 1 28 29 16 8 26 20 8 10 4 1 27 8
37141
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 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 29 0 27 29 17 20 29 11 3 6 9 19 11 27 7 1 23 13 9 25 1 29 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 29 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 29 1 28 29 16 8 26 20 8 10 4 1 27 8
58141
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 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 29 0 27 29 17 20 29 11 3 6 9 19 11 27 7 1 23 13 9 25 1 29 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 29 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 29 1 28 29 16 8 26 20 8 10 4 1 27 8
43380
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 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 29 0 27 29 17 20 29 11 3 6 9 19 11 27 7 1 23 13 9 25 1 29 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 29 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 29 1 28 29 16 8 26 20 8 10 4 1 27 8
28141
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 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 29 0 27 29 17 20 29 11 3 6 9 19 11 27 7 1 23 13 9 25 1 29 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 29 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 29 1 28 29 16 8 26 20 8 10 4 1 27 8
37141
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 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 29 0 27 29 17 20 29 11 3 6 9 19 11 27 7 1 23 13 9 25 1 29 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 29 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 29 1 28 29 16 8 26 20 8 10 4 1 27 8
58141
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 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 29 0 27 29 17 20 29 11 3 6 9 19 11 27 7 1 23 13 9 25 1 29 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 29 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 29 1 28 29 16 8 26 20 8 10 4 1 27 8
43654
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 19 0 7 8 2 7 2 23 4 8 29 9 13 8 1 6 15 15 19 15 15 3 18 16 7 29 21 2 15 3 4 6 2 1 15 6 23 23 9 29 11 11 0 2 21 11 29 21 18 16 13 23 3 16 3 1 4 13 14 16 26 21 29 14 20 4 13 8 9 17 2 1 7 21 14 11 10 2 13 4 24 10 22 19 4 14 1 23 14 8 28 1 26 28 16 29 28 10 2 5 8 18 10 26 6 0 22 12 8 24 16 28 0 6 16 17 7 10 29 14 9 9 12 27 14 20 19 7 1 22 11 11 8 15 25 4 22 13 0 1 16 18 10 5 18 10 7 10 8 7 10 4 21 3 24 4 23 11 16 22 7 18 16 29 12 1 4 28 22 1 13 23 19 22 22 1 13 26 3 25 3 27 21 27 14 28 0 27 28 15 7 25 19 7 9 3 0 26 7
28141
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 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 29 0 27 29 17 20 29 11 3 6 9 19 11 27 7 1 23 13 9 25 1 29 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 29 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 29 1 28 29 16 8 26 20 8 10 4 1 27 8
37141
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 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 29 0 27 29 17 20 29 11 3 6 9 19 11 27 7 1 23 13 9 25 1 29 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 29 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 29 1 28 29 16 8 26 20 8 10 4 1 27 8
58141
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 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 29 0 27 29 17 20 29 11 3 6 9 19 11 27 7 1 23 13 9 25 1 29 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 29 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 29 1 28 29 16 8 26 20 8 10 4 1 27 8
43380
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 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 29 0 27 29 17 20 29 11 3 6 9 19 11 27 7 1 23 13 9 25 1 29 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 29 23 2 14 24 20 23 10 2 14 27 4 26 4 28 22 28 15 29 1 28 29 16 8 26 20 8 10 4 1 27 8
模拟退火法
模拟火法的思路也很简单,先让用户随机选择工厂,只有在退火过程中选择新的方式产生新解,主要用了一下三种方式:随机交换两个用户服务的工程,随机替换两个用户的工程,将两个用户之间所有用户的工厂进行逆转。
模拟退火法的结果比贪心算法的结果稍微好了一点点,但也只是一点点,可能是生成新解的方法不够好,以及参数设得也不够好吧
代码:
SA.hpp
#ifndef SA_H_
#define SA_H_
#include <vector>
#include <string>
#include <fstream>
using namespace std;
struct factory
{
int open_cost;
int rest;
int serve_num = 0; // 服务的人数
};
class SA
{
public:
SA(){}
~SA(){}
void read_data(string file_name, int m);
void init_result();
int get_total_cost(vector<int> v, vector<factory> fs); // 获取所有的费用
void generate_new_result(); // 生成新街
void SA_MAIN(string file_name, int m, ofstream& out1, ofstream& out2);
void print_result(string file_name, double times, ofstream& out1, ofstream& out2);
private:
vector<int> capacity_need;
vector<vector<int> > server_cost;
vector<factory> factories;
int m;
int factory_num;
int user_num;
string file_dir = "../Instances/";
int total_cost;
vector<int> server_factories;
bool can_swap(vector<int> v, vector<factory> fs, int i, int j);
bool can_replace(vector<factory> fs, int i, int j);
int currentTemplate;
const int MAPKOB_LENGTH = 500;
const double SPEED = 0.98;
double INITIAL_TEMPERATURE = 500.0; // 初始温度
const double MIN_TEMPERATURE = 0.1;
};
#endif
SA.cpp
#include "SA.hpp"
#include <iostream>
#include <fstream>
#include <time.h>
#include <stdlib.h>
#include <algorithm>
#include <time.h>
void SA::read_data(string file_name, int m) {
ifstream in;
in.open((file_dir + file_name).c_str());
in >> factory_num >> user_num;
for (int i = 0; i < factory_num; ++i) {
factory f;
in >> f.rest;
in >> f.open_cost;
factories.push_back(f);
//cout << f.rest << " " << f.open_cost <<endl;
}
int temp;
char c;
for (int i = 0; i < user_num; ++i) {
in >> temp >> c;
capacity_need.push_back(temp);
}
for (int i = 0; i < user_num; ++i) {
vector<int> v;
for (int j = 0; j < factory_num; ++j) {
if (m >= 56) in >> temp;
else in >> temp >> c;
v.push_back(temp);
//cout << v[j] << " ";
}
server_cost.push_back(v);
//cout << endl;
}
}
void SA::init_result() {
/*for (int i = 0; i < user_num; ++i) {
int f = rand() % factory_num;
while(factories[f].rest < capacity_need[i]) {
f = rand() % factory_num;
}
factories[f].rest -= capacity_need[i];
factories[f].serve_num += 1;
server_factories.push_back(f);
}
total_cost = get_total_cost(server_factories, factories);*/
for (int i = 0; i < user_num; ++i) {
int cost = INT_MAX;
int k = -1;
for (int j = 0; j < factory_num; ++j) {
if (cost > server_cost[i][j]) {
cost = server_cost[i][j];
k = j;
}
}
server_factories.push_back(k);
factories[k].rest -= capacity_need[i];
factories[k].serve_num += 1;
}
total_cost = get_total_cost(server_factories, factories);
}
// int SA::test() {
// return get_total_cost(server_factories, factories);
// }
int SA::get_total_cost(vector<int> v, vector<factory> fs) {
int total = 0;
for (int i = 0; i < factory_num; ++i) {
if(fs[i].serve_num > 0)
total += fs[i].open_cost;
}
for (int i = 0; i < user_num; ++i) {
total += server_cost[i][v[i]];
}
return total;
}
bool SA::can_swap(vector<int> v, vector<factory> fs, int i, int j) {
return (fs[v[i]].rest + capacity_need[i]> capacity_need[j]) && (fs[v[j]].rest + capacity_need[j] > capacity_need[i]);
}
bool SA::can_replace(vector<factory> fs, int i, int j) {
return fs[j].rest >= capacity_need[i] ;
}
void SA::generate_new_result() {
vector<int> new_result = server_factories;
vector<factory> new_factories = factories;
int i = rand() % user_num;
int j = rand() % user_num;
if (i > j) {
int temp = i;
i = j;
j = temp;
}
int proportion[4] = {10, 25, 1, 0};
int len = proportion[0] + proportion[1] + proportion[2] + proportion[3];
int k = rand() % len;
//cout << k << endl;
//int k = 3;
// 交换两个人的工厂
if (k < proportion[0]) {
if(can_swap(new_result, new_factories, i, j)) {
new_factories[new_result[i]].rest = new_factories[new_result[i]].rest + capacity_need[i] - capacity_need[j];
new_factories[new_result[j]].rest = new_factories[new_result[j]].rest + capacity_need[j] - capacity_need[i];
int temp = new_result[i];
new_result[i] = new_result[j];
new_result[j] = temp;
}
}
// 将两个人的工厂替换为其它的工厂
else if ( k < + proportion[0] + proportion[1]) {
int m = rand() % factory_num;
int n = rand() % factory_num;
int a = 0;
while(!can_replace(new_factories, i, m)) {
m = rand() % factory_num;
++a;
if (a > factory_num * 10) {
return;
}
}
new_factories[new_result[i]].rest += capacity_need[i];
new_factories[new_result[i]].serve_num -= 1;
new_factories[m].rest -= capacity_need[i];
new_factories[m].serve_num +=1;
new_result[i] = m;
a = 0;
while(!can_replace(new_factories, j, n)) {
n = rand() % factory_num;
++a;
if (a > factory_num * 10) {
return;
}
}
new_factories[new_result[j]].rest += capacity_need[j];
new_factories[new_result[j]].serve_num -= 1;
new_factories[n].rest -= capacity_need[j];
new_factories[n].serve_num +=1;
new_result[j] = n;
}
else if(k < proportion[0] + proportion[1] + proportion[2]) {
while (i < j) {
if(can_swap(new_result, new_factories, i, j)) {
new_factories[new_result[i]].rest = new_factories[new_result[i]].rest + capacity_need[i] - capacity_need[j];
new_factories[new_result[j]].rest = new_factories[new_result[j]].rest + capacity_need[j] - capacity_need[i];
int temp = new_result[i];
new_result[i] = new_result[j];
new_result[j] = temp;
}
++i;
--j;
}
}
else {
while(i <= j) {
int m = rand() % factory_num;
while (!can_replace(new_factories, i, m)) {
m = rand() % factory_num;
}
new_factories[new_result[i]].rest += capacity_need[i];
new_factories[new_result[i]].serve_num -= 1;
new_factories[m].rest -= capacity_need[i];
new_factories[m].serve_num +=1;
new_result[i] = m;
++i;
}
}
int new_total = get_total_cost(new_result, new_factories);
if(new_total < total_cost) {
/* cout << "new" << endl;
cout << new_total << endl;*/
server_factories = new_result;
factories = new_factories;
total_cost = new_total;
}
else {
if(exp((total_cost - new_total) * 1.0 / currentTemplate) > (rand() * 1.0 / RAND_MAX)){
server_factories = new_result;
factories = new_factories;
total_cost = new_total;
}
}
}
void SA::SA_MAIN(string file_name, int m, ofstream& out1, ofstream& out2) {
read_data(file_name, m);
srand(time(0));
clock_t start,end;
start = clock();
init_result();
currentTemplate = INITIAL_TEMPERATURE;
while(MIN_TEMPERATURE < currentTemplate) {
for (int i = 0; i < MAPKOB_LENGTH; ++i) {
generate_new_result();
}
currentTemplate *= SPEED;
}
end = clock();
print_result(file_name, (double)(end-start)/CLK_TCK, out1, out2);
}
void SA::print_result(string file, double times, ofstream& out1, ofstream& out2) {
out1 << "|" << file << "|" << total_cost << "|" << times << "|" << endl;
out2 << total_cost << endl;
for (int i = 0; i < factory_num; ++i) {
out2 << (factories[i].serve_num > 0) << ", " ;
}
/* cout << endl;
for (int i = 0; i < factory_num; ++i) {
cout << factories[i].rest << ", ";
}*/
out2 << endl;
for (int i = 0; i < user_num; ++i) {
out2 << server_factories[i] << ", ";
}
out2 << endl << endl;
}
main.cpp
#include "SA.hpp"
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream out1;
out1.open("./1.txt");
ofstream out2;
out2.open("./2.txt");
for (int i = 1; i <= 71; ++i) {
SA sa = SA();
char filename[3];
sprintf(filename, "p%d", i);
sa.SA_MAIN(filename, i, out1, out2);
}
cout << endl;
return 0;
}
- 结果
Result | times | |
---|---|---|
p1 | 10044 | 0.33 |
p2 | 9168 | 0.322 |
p3 | 10514 | 0.322 |
p4 | 12079 | 0.338 |
p5 | 10321 | 0.339 |
p6 | 9310 | 0.337 |
p7 | 10814 | 0.337 |
p8 | 12682 | 0.354 |
p9 | 9788 | 0.418 |
p10 | 8931 | 0.323 |
p11 | 10348 | 0.362 |
p12 | 11720 | 0.376 |
p13 | 9700 | 0.443 |
p14 | 8866 | 0.368 |
p15 | 10384 | 0.366 |
p16 | 12345 | 0.372 |
p17 | 9332 | 0.364 |
p18 | 8452 | 0.371 |
p19 | 10415 | 0.495 |
p20 | 12884 | 0.451 |
p21 | 9303 | 0.427 |
p22 | 8236 | 0.44 |
p23 | 10368 | 0.371 |
p24 | 12192 | 0.378 |
p25 | 15805 | 0.836 |
p26 | 12770 | 1.029 |
p27 | 16471 | 1.028 |
p28 | 19207 | 1.052 |
p29 | 16055 | 1.091 |
p30 | 14292 | 0.887 |
p31 | 17354 | 1.039 |
p32 | 21210 | 0.873 |
p33 | 14694 | 0.909 |
p34 | 13704 | 1.191 |
p35 | 16234 | 0.974 |
p36 | 19972 | 0.848 |
p37 | 15090 | 0.846 |
p38 | 13460 | 0.874 |
p39 | 17104 | 0.981 |
p40 | 19434 | 0.856 |
p41 | 8900 | 0.482 |
p42 | 7554 | 0.511 |
p43 | 7949 | 0.692 |
p44 | 12112 | 0.51 |
p45 | 9798 | 0.483 |
p46 | 8684 | 0.505 |
p47 | 13496 | 0.638 |
p48 | 11543 | 0.513 |
p49 | 8882 | 0.517 |
p50 | 9405 | 0.529 |
p51 | 9443 | 0.575 |
p52 | 14854 | 0.537 |
p53 | 13023 | 0.579 |
p54 | 14469 | 0.551 |
p55 | 12328 | 0.585 |
p56 | 31010 | 1.606 |
p57 | 37063 | 1.09 |
p58 | 54385 | 1.365 |
p59 | 43514 | 1.107 |
p60 | 30114 | 1.333 |
p61 | 36281 | 1.136 |
p62 | 50265 | 1.142 |
p63 | 42432 | 1.108 |
p64 | 31057 | 1.223 |
p65 | 37039 | 1.114 |
p66 | 51683 | 1.111 |
p67 | 40581 | 1.13 |
p68 | 30331 | 1.543 |
p69 | 36813 | 1.189 |
p70 | 54253 | 1.305 |
p71 | 41282 | 1.107 |
10044
1, 0, 1, 1, 0, 1, 1, 1, 1, 1,
5, 7, 8, 2, 9, 9, 5, 9, 3, 2, 6, 3, 0, 0, 6, 9, 5, 0, 3, 9, 7, 6, 3, 5, 6, 9, 5, 7, 0, 3, 3, 8, 2, 0, 3, 7, 9, 3, 6, 8, 5, 7, 8, 2, 5, 7, 0, 2, 5, 6,
9168
1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
5, 7, 8, 2, 9, 9, 5, 6, 3, 2, 6, 3, 5, 9, 6, 9, 5, 0, 3, 9, 7, 6, 3, 5, 6, 9, 5, 7, 0, 3, 3, 8, 2, 1, 3, 7, 9, 3, 6, 8, 5, 7, 8, 2, 1, 7, 0, 2, 5, 6,
10514
1, 0, 1, 1, 1, 1, 1, 1, 1, 0,
5, 7, 8, 2, 5, 2, 5, 6, 3, 2, 6, 3, 4, 0, 6, 4, 5, 0, 3, 2, 7, 6, 3, 5, 6, 2, 5, 7, 0, 3, 3, 8, 2, 0, 3, 7, 6, 3, 6, 4, 5, 7, 8, 8, 5, 7, 0, 2, 4, 6,
12079
1, 0, 1, 1, 1, 1, 1, 1, 0, 0,
5, 7, 0, 2, 5, 2, 5, 6, 3, 2, 6, 6, 4, 0, 6, 4, 5, 0, 3, 2, 7, 6, 3, 5, 6, 2, 5, 7, 0, 3, 3, 0, 2, 0, 3, 7, 6, 3, 6, 4, 5, 7, 0, 2, 5, 7, 0, 2, 4, 6,
10321
1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
5, 7, 8, 2, 9, 9, 5, 6, 7, 2, 6, 3, 4, 0, 6, 4, 5, 0, 7, 9, 7, 6, 3, 5, 6, 9, 8, 7, 0, 3, 3, 8, 2, 0, 3, 8, 9, 3, 6, 4, 5, 7, 8, 8, 5, 7, 0, 2, 4, 6,
9310
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 7, 8, 2, 7, 9, 5, 6, 3, 2, 6, 6, 4, 0, 6, 4, 5, 0, 3, 9, 7, 6, 3, 5, 6, 9, 8, 7, 0, 3, 3, 8, 2, 1, 3, 8, 9, 3, 5, 4, 5, 7, 8, 8, 1, 7, 0, 2, 4, 6,
10814
1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
5, 7, 8, 2, 9, 9, 5, 6, 7, 2, 6, 3, 4, 0, 6, 4, 5, 0, 7, 9, 8, 6, 3, 5, 6, 9, 8, 7, 0, 3, 3, 8, 2, 0, 3, 7, 9, 3, 6, 4, 5, 7, 8, 8, 5, 7, 0, 2, 4, 6,
12682
1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
5, 7, 8, 2, 7, 2, 5, 6, 7, 2, 6, 6, 4, 0, 6, 4, 5, 0, 3, 9, 7, 6, 3, 9, 8, 9, 5, 7, 0, 3, 3, 8, 2, 0, 3, 7, 9, 3, 6, 4, 5, 7, 8, 8, 5, 7, 0, 2, 4, 6,
9788
1, 1, 0, 1, 0, 1, 1, 1, 1, 1,
5, 7, 8, 8, 9, 9, 5, 9, 3, 0, 6, 3, 0, 0, 6, 9, 5, 0, 7, 7, 7, 6, 3, 5, 6, 9, 5, 7, 0, 3, 3, 8, 5, 1, 3, 7, 9, 3, 6, 8, 5, 7, 8, 8, 1, 7, 0, 3, 5, 6,
8931
1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
5, 7, 8, 2, 9, 2, 5, 6, 7, 2, 6, 3, 4, 0, 6, 4, 5, 0, 7, 9, 7, 6, 3, 5, 6, 9, 5, 7, 0, 3, 3, 8, 2, 0, 3, 7, 9, 3, 6, 4, 5, 7, 8, 8, 5, 7, 0, 2, 4, 6,
10348
1, 0, 1, 1, 0, 1, 1, 1, 1, 0,
5, 7, 8, 2, 7, 2, 5, 6, 3, 2, 6, 3, 0, 0, 6, 6, 5, 0, 3, 7, 7, 6, 3, 5, 6, 2, 5, 7, 0, 3, 3, 8, 2, 0, 3, 7, 6, 3, 6, 8, 5, 7, 8, 8, 5, 7, 0, 2, 0, 6,
11720
1, 0, 1, 1, 0, 1, 1, 1, 1, 0,
5, 7, 8, 2, 7, 2, 5, 6, 3, 2, 6, 3, 3, 0, 6, 2, 5, 0, 7, 7, 7, 6, 3, 5, 6, 2, 5, 7, 0, 3, 3, 8, 2, 0, 3, 7, 6, 3, 6, 8, 5, 7, 8, 8, 5, 7, 0, 2, 5, 6,
9700
1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1,
0, 6, 14, 15, 4, 14, 12, 11, 5, 4, 11, 5, 17, 6, 12, 19, 4, 0, 12, 1, 15, 14, 4, 14, 19, 17, 15, 11, 5, 6, 1, 0, 17, 4, 0, 8, 0, 6, 11, 1, 0, 6, 19, 17, 4, 5, 12, 14, 1, 8,
8866
1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1,
0, 6, 11, 18, 7, 7, 19, 16, 17, 4, 18, 5, 17, 6, 15, 13, 4, 0, 7, 16, 15, 16, 4, 5, 19, 17, 15, 7, 5, 4, 4, 0, 17, 4, 0, 15, 11, 6, 11, 15, 0, 13, 16, 19, 6, 5, 17, 5, 13, 7,
10384
1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1,
0, 6, 14, 15, 4, 14, 3, 8, 5, 4, 6, 5, 8, 6, 15, 13, 4, 13, 6, 13, 19, 14, 4, 14, 19, 3, 15, 0, 5, 14, 4, 0, 15, 4, 0, 8, 0, 6, 6, 15, 0, 13, 19, 19, 4, 5, 3, 5, 13, 8,
12345
0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1,
16, 6, 2, 2, 18, 5, 19, 16, 5, 4, 18, 5, 18, 6, 12, 19, 4, 12, 12, 16, 19, 16, 4, 5, 19, 2, 4, 16, 19, 6, 4, 16, 6, 4, 2, 5, 2, 6, 12, 16, 2, 6, 19, 19, 4, 5, 12, 5, 2, 18,
9332
1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0,
0, 6, 1, 15, 4, 14, 12, 8, 17, 4, 12, 8, 8, 6, 15, 17, 4, 0, 12, 1, 15, 14, 4, 14, 14, 17, 15, 0, 17, 14, 8, 14, 17, 4, 0, 8, 0, 6, 6, 1, 0, 6, 1, 17, 4, 1, 17, 14, 1, 8,
8452
1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0,
0, 6, 1, 15, 7, 14, 12, 14, 17, 4, 9, 7, 17, 6, 12, 17, 4, 7, 12, 1, 15, 14, 4, 9, 14, 17, 15, 7, 17, 6, 1, 0, 17, 4, 0, 15, 0, 15, 6, 15, 0, 6, 1, 17, 6, 7, 17, 14, 1, 7,
10415
1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1,
0, 6, 15, 15, 7, 7, 17, 8, 17, 4, 9, 9, 8, 6, 15, 13, 4, 7, 7, 13, 15, 4, 4, 9, 19, 17, 15, 7, 17, 6, 8, 0, 17, 4, 0, 8, 0, 6, 6, 15, 0, 6, 19, 19, 4, 7, 17, 8, 13, 8,
12884
1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0,
0, 6, 1, 17, 7, 7, 17, 8, 17, 6, 11, 7, 17, 11, 11, 13, 11, 7, 7, 1, 1, 16, 0, 7, 6, 13, 11, 7, 17, 6, 1, 0, 17, 13, 0, 8, 0, 6, 11, 1, 0, 13, 16, 17, 6, 7, 17, 8, 1, 8,
9303
1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0,
0, 6, 1, 17, 4, 14, 17, 8, 17, 4, 9, 9, 8, 6, 13, 13, 4, 0, 0, 1, 6, 14, 4, 9, 14, 17, 4, 0, 17, 4, 1, 8, 17, 4, 0, 8, 0, 6, 6, 1, 0, 6, 1, 17, 6, 4, 17, 14, 13, 8,
8236
1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0,
0, 6, 14, 18, 4, 14, 18, 14, 18, 4, 18, 18, 17, 6, 15, 13, 4, 0, 0, 13, 15, 14, 4, 14, 14, 17, 15, 16, 17, 14, 15, 0, 17, 4, 0, 4, 0, 6, 6, 16, 0, 6, 16, 15, 6, 4, 17, 14, 13, 18,
10368
1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1,
0, 6, 14, 15, 6, 14, 19, 8, 5, 4, 4, 5, 17, 6, 15, 13, 4, 13, 0, 13, 19, 14, 4, 14, 19, 17, 15, 0, 5, 6, 4, 0, 17, 4, 0, 8, 0, 6, 6, 13, 0, 13, 19, 19, 4, 5, 17, 15, 13, 8,
12192
1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0,
0, 2, 14, 2, 4, 14, 12, 16, 17, 4, 12, 7, 17, 12, 12, 17, 4, 7, 12, 16, 15, 16, 4, 14, 14, 17, 15, 7, 17, 14, 15, 0, 17, 4, 0, 15, 0, 15, 12, 15, 0, 2, 16, 17, 4, 7, 17, 14, 2, 7,
15805
0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0,
21, 27, 3, 3, 25, 8, 13, 18, 21, 13, 26, 27, 24, 22, 5, 8, 27, 18, 21, 9, 4, 27, 27, 7, 5, 10, 27, 8, 5, 25, 4, 2, 18, 9, 4, 21, 27, 24, 16, 5, 4, 13, 18, 7, 21, 10, 20, 8, 25, 9, 22, 13, 8, 7, 13, 21, 27, 8, 16, 26, 22, 13, 8, 7, 13, 4, 2, 22, 9, 3, 8, 9, 24, 7, 4, 10, 7, 8, 5, 7, 2, 13, 10, 9, 4, 21, 10, 8, 3, 16, 4, 13, 8, 10, 4, 26, 16, 24, 7, 5, 13, 5, 20, 10, 4, 24, 27, 9, 8, 9, 10, 20, 8, 5, 13, 22, 16, 8, 25, 5, 22, 7, 8, 26, 13, 24, 27, 3, 13, 25, 10, 13, 8, 7, 7, 21, 27, 8, 3, 25, 8, 2, 18, 18, 21, 18, 3, 16, 25, 25,
12770
0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
21, 18, 8, 16, 16, 8, 13, 18, 21, 13, 8, 13, 24, 21, 5, 8, 16, 8, 25, 16, 21, 13, 8, 16, 5, 10, 20, 16, 5, 13, 4, 13, 11, 9, 4, 24, 8, 21, 11, 11, 4, 13, 22, 9, 4, 22, 20, 9, 5, 13, 22, 13, 8, 7, 13, 22, 18, 8, 24, 5, 22, 13, 8, 7, 13, 4, 24, 11, 9, 4, 8, 21, 18, 7, 4, 10, 7, 8, 7, 13, 4, 13, 10, 10, 4, 21, 16, 8, 11, 16, 4, 2, 8, 9, 4, 8, 13, 18, 7, 5, 4, 5, 11, 9, 18, 22, 20, 8, 7, 5, 10, 20, 8, 5, 7, 22, 16, 8, 25, 5, 10, 20, 9, 5, 13, 24, 8, 16, 13, 25, 10, 13, 16, 7, 13, 22, 8, 8, 5, 11, 8, 13, 18, 18, 21, 10, 20, 9, 25, 25,
16471
0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0,
10, 27, 21, 25, 20, 8, 13, 18, 7, 13, 8, 8, 18, 21, 16, 21, 13, 8, 25, 16, 21, 27, 24, 16, 16, 22, 20, 8, 8, 2, 11, 13, 11, 9, 1, 21, 8, 8, 25, 8, 8, 13, 10, 10, 24, 10, 20, 16, 25, 7, 22, 13, 8, 7, 13, 22, 8, 8, 13, 25, 10, 13, 8, 7, 9, 11, 24, 11, 10, 1, 20, 22, 18, 21, 13, 22, 7, 8, 7, 7, 11, 13, 10, 10, 1, 21, 27, 24, 2, 16, 8, 2, 8, 10, 1, 22, 27, 8, 7, 16, 13, 13, 11, 9, 1, 22, 27, 8, 8, 9, 10, 20, 16, 25, 13, 22, 8, 8, 25, 13, 7, 20, 8, 7, 13, 1, 18, 16, 25, 25, 22, 13, 16, 7, 7, 24, 27, 8, 25, 25, 8, 13, 18, 18, 1, 24, 20, 9, 8, 11,
19207
0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0,
23, 27, 21, 16, 8, 8, 13, 18, 21, 13, 8, 13, 24, 21, 5, 23, 13, 18, 7, 5, 21, 27, 27, 7, 16, 10, 27, 8, 8, 13, 2, 2, 11, 9, 4, 21, 8, 27, 11, 8, 11, 13, 10, 10, 21, 22, 27, 16, 5, 7, 22, 13, 8, 7, 13, 22, 8, 5, 13, 11, 22, 13, 8, 7, 13, 2, 24, 11, 9, 4, 11, 9, 24, 10, 4, 22, 7, 8, 27, 7, 11, 2, 10, 9, 4, 8, 13, 13, 4, 11, 4, 13, 8, 9, 4, 23, 13, 18, 21, 5, 4, 13, 22, 10, 4, 10, 27, 8, 5, 9, 24, 27, 9, 5, 13, 22, 8, 8, 7, 5, 27, 7, 8, 5, 13, 24, 18, 8, 24, 11, 22, 13, 8, 7, 7, 22, 18, 8, 8, 11, 8, 13, 18, 21, 21, 22, 27, 8, 5, 13,
16055
0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0,
21, 10, 8, 16, 20, 8, 13, 18, 21, 13, 14, 13, 24, 21, 5, 22, 8, 8, 21, 5, 21, 16, 27, 25, 16, 24, 20, 8, 25, 27, 2, 24, 11, 9, 4, 22, 27, 21, 25, 11, 25, 24, 10, 9, 21, 7, 27, 16, 5, 7, 22, 13, 8, 7, 13, 21, 27, 5, 13, 25, 22, 13, 8, 7, 13, 2, 13, 20, 9, 4, 11, 13, 18, 21, 14, 10, 7, 16, 27, 13, 11, 13, 10, 7, 14, 14, 10, 24, 21, 11, 4, 2, 8, 10, 4, 14, 16, 24, 21, 5, 4, 13, 11, 10, 4, 24, 20, 16, 7, 5, 22, 20, 9, 25, 9, 22, 27, 8, 25, 9, 22, 27, 8, 5, 9, 21, 18, 24, 8, 11, 22, 13, 16, 7, 7, 22, 27, 8, 8, 25, 8, 21, 18, 7, 14, 10, 16, 9, 7, 9,
14292
0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0,
21, 18, 8, 3, 20, 8, 13, 18, 9, 1, 26, 13, 27, 22, 4, 22, 13, 8, 7, 5, 21, 20, 24, 25, 5, 5, 20, 8, 5, 9, 4, 2, 11, 10, 4, 22, 27, 21, 25, 11, 8, 13, 10, 9, 21, 10, 20, 8, 5, 7, 22, 13, 8, 7, 13, 10, 3, 8, 13, 26, 22, 13, 8, 7, 9, 11, 13, 10, 9, 4, 8, 22, 18, 9, 4, 22, 7, 16, 7, 7, 4, 2, 10, 10, 4, 21, 10, 27, 2, 16, 4, 13, 10, 9, 4, 26, 21, 24, 21, 16, 4, 24, 11, 10, 3, 10, 20, 8, 8, 13, 10, 13, 16, 5, 7, 22, 27, 8, 25, 5, 10, 27, 8, 26, 7, 18, 27, 3, 3, 2, 10, 13, 16, 7, 7, 22, 20, 3, 5, 16, 11, 21, 18, 18, 21, 10, 27, 16, 5, 2,
17354
0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0,
21, 10, 7, 7, 20, 8, 13, 18, 7, 1, 8, 21, 8, 21, 16, 22, 27, 18, 9, 9, 21, 16, 27, 25, 5, 22, 20, 16, 5, 6, 2, 2, 10, 7, 4, 21, 16, 27, 2, 16, 4, 13, 10, 21, 1, 22, 20, 9, 5, 7, 10, 13, 8, 7, 13, 24, 27, 9, 24, 5, 22, 13, 8, 7, 9, 2, 13, 22, 9, 4, 8, 21, 18, 21, 1, 10, 7, 8, 27, 7, 4, 13, 10, 9, 4, 22, 27, 25, 16, 5, 4, 2, 8, 10, 4, 6, 27, 24, 21, 9, 2, 13, 22, 9, 4, 10, 20, 8, 25, 13, 22, 20, 9, 5, 7, 22, 27, 8, 7, 13, 24, 20, 6, 25, 7, 21, 27, 5, 13, 2, 10, 13, 9, 7, 7, 22, 18, 8, 8, 25, 2, 21, 18, 10, 4, 10, 27, 8, 25, 25,
21210
0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0,
21, 10, 7, 25, 2, 8, 13, 18, 9, 13, 8, 16, 8, 7, 5, 8, 16, 18, 7, 5, 11, 27, 27, 7, 5, 10, 20, 9, 5, 25, 4, 2, 10, 9, 13, 24, 16, 21, 21, 16, 11, 13, 18, 10, 4, 7, 7, 16, 5, 13, 10, 13, 8, 7, 9, 21, 8, 3, 3, 25, 10, 13, 8, 7, 13, 4, 24, 11, 10, 4, 20, 16, 18, 9, 21, 24, 20, 16, 5, 13, 11, 13, 10, 10, 4, 21, 27, 18, 16, 11, 8, 13, 8, 10, 4, 21, 8, 24, 21, 16, 11, 4, 11, 10, 4, 24, 27, 18, 25, 13, 10, 20, 9, 5, 7, 24, 27, 8, 7, 9, 27, 3, 8, 5, 13, 24, 27, 8, 25, 2, 10, 16, 8, 7, 7, 21, 16, 16, 3, 25, 4, 21, 18, 21, 21, 10, 20, 9, 25, 9,
14694
1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0,
22, 10, 7, 25, 16, 8, 13, 18, 21, 13, 21, 21, 24, 25, 16, 22, 13, 18, 25, 16, 21, 16, 24, 25, 16, 24, 0, 8, 7, 6, 4, 2, 10, 9, 4, 21, 0, 8, 25, 8, 25, 2, 18, 9, 24, 10, 0, 16, 25, 13, 22, 13, 8, 7, 13, 22, 0, 8, 24, 2, 10, 13, 8, 7, 13, 2, 13, 22, 9, 4, 4, 13, 18, 21, 9, 10, 7, 16, 7, 7, 4, 2, 10, 10, 4, 21, 10, 25, 7, 16, 4, 13, 8, 10, 4, 21, 13, 18, 21, 16, 4, 24, 2, 9, 4, 22, 8, 8, 7, 9, 10, 0, 6, 25, 13, 22, 13, 8, 7, 9, 24, 0, 6, 25, 7, 10, 18, 9, 8, 25, 10, 13, 16, 7, 7, 22, 18, 8, 25, 25, 8, 13, 18, 21, 4, 22, 16, 8, 25, 9,
13704
0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1,
22, 28, 7, 16, 11, 8, 21, 18, 21, 9, 21, 21, 18, 22, 11, 14, 16, 8, 7, 5, 21, 8, 27, 25, 5, 22, 28, 16, 5, 9, 2, 2, 11, 9, 4, 21, 28, 21, 25, 5, 8, 13, 10, 10, 4, 22, 27, 8, 5, 9, 22, 13, 8, 7, 13, 21, 18, 16, 7, 2, 22, 13, 8, 7, 13, 2, 13, 22, 10, 4, 14, 13, 18, 7, 4, 29, 7, 8, 25, 7, 11, 13, 10, 7, 4, 21, 28, 21, 7, 9, 2, 13, 8, 9, 4, 8, 21, 8, 7, 4, 4, 4, 28, 10, 4, 22, 27, 8, 25, 5, 29, 27, 16, 5, 13, 10, 27, 8, 7, 5, 28, 7, 9, 7, 7, 22, 18, 8, 7, 25, 10, 13, 8, 7, 7, 22, 28, 8, 8, 25, 11, 13, 18, 18, 4, 10, 27, 29, 5, 13,
16234
1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0,
22, 10, 8, 11, 11, 8, 13, 8, 21, 1, 21, 13, 24, 0, 5, 22, 16, 8, 25, 5, 21, 16, 27, 7, 5, 10, 27, 8, 5, 27, 4, 13, 11, 9, 4, 21, 27, 27, 7, 16, 4, 21, 10, 10, 24, 7, 0, 8, 7, 7, 10, 13, 8, 7, 13, 24, 0, 8, 25, 11, 22, 13, 8, 7, 9, 11, 13, 10, 10, 1, 8, 13, 24, 21, 16, 24, 7, 16, 7, 9, 4, 13, 10, 7, 4, 21, 13, 27, 4, 16, 4, 13, 8, 9, 4, 8, 13, 24, 7, 5, 4, 24, 11, 9, 4, 22, 16, 8, 8, 13, 22, 0, 16, 5, 7, 10, 16, 8, 7, 5, 7, 7, 8, 1, 9, 10, 27, 8, 13, 25, 10, 13, 16, 7, 7, 10, 0, 8, 7, 11, 11, 13, 10, 10, 1, 10, 0, 8, 5, 25,
19972
0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1,
21, 10, 7, 7, 8, 8, 13, 18, 7, 1, 20, 21, 8, 21, 16, 14, 16, 8, 7, 13, 21, 20, 8, 25, 16, 10, 20, 29, 8, 25, 2, 13, 11, 7, 1, 21, 16, 21, 2, 16, 25, 13, 11, 7, 14, 10, 20, 16, 25, 9, 22, 13, 8, 7, 13, 21, 18, 8, 25, 25, 22, 13, 8, 7, 9, 8, 2, 11, 7, 21, 20, 21, 18, 7, 14, 10, 7, 8, 7, 7, 11, 13, 10, 10, 1, 8, 8, 8, 2, 16, 2, 13, 8, 9, 13, 8, 16, 18, 14, 9, 25, 2, 11, 10, 1, 10, 16, 9, 8, 9, 29, 20, 16, 25, 13, 10, 16, 8, 7, 9, 22, 16, 16, 7, 13, 18, 20, 29, 8, 25, 10, 13, 8, 7, 7, 21, 18, 8, 25, 25, 2, 21, 18, 10, 14, 10, 20, 16, 7, 11,
15090
0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0,
21, 18, 8, 11, 5, 8, 13, 18, 21, 1, 20, 13, 24, 7, 5, 22, 27, 8, 7, 5, 21, 27, 27, 7, 16, 22, 27, 8, 13, 27, 4, 13, 11, 7, 1, 21, 27, 27, 11, 5, 8, 13, 15, 9, 4, 10, 20, 8, 5, 7, 10, 13, 8, 7, 13, 22, 20, 8, 15, 5, 22, 13, 8, 7, 9, 11, 13, 10, 9, 4, 11, 22, 18, 21, 4, 24, 7, 16, 7, 7, 11, 13, 10, 9, 1, 21, 10, 21, 16, 5, 8, 13, 8, 10, 4, 21, 27, 24, 7, 5, 11, 5, 22, 9, 1, 22, 27, 8, 8, 5, 22, 20, 16, 7, 13, 22, 16, 8, 7, 5, 27, 20, 9, 5, 13, 10, 8, 8, 5, 8, 10, 13, 16, 7, 7, 21, 20, 8, 8, 5, 8, 21, 18, 9, 4, 10, 20, 8, 15, 13,
13460
0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1,
21, 18, 9, 7, 8, 8, 13, 18, 7, 1, 21, 13, 8, 11, 5, 22, 13, 8, 7, 5, 21, 16, 27, 7, 9, 10, 18, 9, 8, 7, 4, 13, 11, 9, 4, 21, 27, 27, 16, 8, 2, 27, 10, 9, 21, 10, 7, 16, 5, 9, 22, 13, 8, 7, 13, 21, 18, 29, 13, 16, 22, 13, 8, 7, 13, 4, 2, 22, 9, 4, 8, 13, 18, 21, 1, 10, 7, 16, 7, 7, 11, 13, 10, 9, 4, 21, 27, 27, 2, 5, 4, 13, 8, 9, 4, 21, 13, 18, 7, 5, 11, 13, 11, 7, 1, 22, 27, 8, 8, 5, 10, 7, 8, 5, 7, 22, 27, 8, 7, 5, 27, 20, 9, 29, 13, 10, 16, 8, 13, 9, 10, 13, 8, 7, 13, 21, 18, 8, 7, 9, 4, 13, 10, 10, 1, 10, 20, 29, 7, 9,
17104
1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0,
21, 10, 24, 2, 11, 8, 13, 18, 21, 13, 8, 16, 24, 22, 5, 21, 16, 18, 9, 16, 21, 27, 8, 7, 16, 5, 0, 8, 5, 2, 4, 13, 11, 9, 4, 21, 27, 8, 11, 25, 4, 13, 18, 9, 1, 7, 27, 8, 5, 7, 22, 13, 8, 7, 13, 21, 1, 8, 25, 25, 22, 13, 8, 7, 13, 2, 24, 22, 9, 1, 8, 13, 18, 21, 4, 10, 7, 16, 25, 7, 11, 2, 10, 9, 4, 21, 13, 25, 4, 11, 4, 13, 8, 10, 4, 8, 13, 18, 7, 1, 2, 13, 22, 10, 1, 24, 0, 8, 25, 5, 10, 0, 8, 5, 7, 22, 27, 8, 7, 13, 7, 7, 9, 5, 7, 22, 18, 8, 13, 2, 10, 13, 8, 7, 13, 21, 8, 8, 8, 25, 11, 13, 18, 18, 1, 18, 0, 8, 5, 7,
19434
0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0,
21, 16, 7, 11, 2, 8, 13, 18, 21, 13, 8, 13, 24, 21, 16, 8, 16, 8, 7, 5, 21, 16, 8, 7, 5, 22, 1, 8, 7, 5, 2, 24, 11, 9, 4, 21, 27, 21, 16, 5, 11, 2, 18, 9, 4, 24, 27, 8, 5, 13, 22, 13, 8, 7, 13, 21, 27, 5, 8, 11, 22, 13, 8, 7, 9, 4, 13, 22, 9, 4, 8, 22, 18, 18, 1, 10, 7, 16, 5, 7, 2, 13, 10, 9, 4, 8, 13, 21, 2, 16, 2, 13, 8, 10, 4, 24, 16, 18, 2, 5, 2, 13, 22, 9, 21, 24, 27, 8, 8, 5, 22, 27, 16, 5, 9, 22, 27, 8, 7, 5, 27, 27, 1, 5, 13, 24, 1, 16, 13, 11, 22, 13, 8, 7, 7, 10, 27, 8, 8, 11, 8, 21, 18, 7, 21, 10, 27, 8, 7, 9,
8900
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 8, 7, 3, 6, 8, 4, 3, 0, 3, 9, 3, 7, 9, 1, 7, 2, 6, 4, 2, 5, 5, 0, 6, 6, 6, 2, 6, 7, 9, 4, 3, 7, 3, 4, 0, 2, 0, 2, 1, 9, 0, 9, 2, 3, 0, 6, 9, 1, 5, 7, 3, 9, 0, 1, 9, 0, 7, 8, 1, 5, 2, 6, 4, 6, 5, 5, 1, 5, 3, 4, 0, 8, 8, 8, 0, 6, 8, 3, 9, 0, 5, 1, 5, 5, 0, 4, 7, 6, 5,
7554
0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1,
6, 19, 8, 6, 6, 19, 10, 6, 8, 8, 16, 1, 2, 4, 1, 1, 2, 6, 1, 2, 19, 2, 19, 10, 4, 11, 6, 19, 6, 10, 10, 6, 11, 4, 6, 10, 19, 2, 4, 4, 1, 11, 6, 10, 2, 6, 4, 4, 8, 4, 16, 11, 2, 8, 2, 2, 19, 16, 19, 4, 4, 11, 8, 16, 6, 4, 10, 6, 6, 8, 10, 6, 11, 11, 6, 16, 4, 11, 8, 19,
7949
1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1,
19, 21, 18, 6, 18, 21, 18, 12, 15, 19, 8, 29, 0, 19, 15, 24, 21, 17, 12, 6, 17, 6, 21, 19, 10, 10, 29, 14, 14, 21, 6, 12, 8, 15, 18, 17, 19, 14, 0, 21, 14, 8, 14, 24, 17, 15, 21, 12, 10, 14, 8, 15, 15, 24, 0, 18, 10, 14, 14, 0, 8, 10, 6, 8, 12, 6, 24, 18, 0, 24,
12112
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
9, 5, 1, 6, 1, 2, 4, 3, 7, 8, 6, 0, 0, 3, 6, 7, 4, 4, 5, 7, 8, 0, 4, 4, 7, 5, 4, 0, 1, 6, 4, 8, 3, 3, 2, 5, 4, 5, 1, 7, 0, 2, 1, 0, 9, 5, 1, 1, 6, 7, 2, 0, 8, 9, 8, 2, 2, 6, 6, 1, 5, 7, 6, 9, 9, 1, 6, 6, 7, 0, 4, 0, 8, 7, 9, 0, 5, 5, 7, 5, 4, 5, 7, 7, 6, 9, 4, 2, 2, 3,
9798
1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1,
5, 18, 8, 10, 10, 18, 18, 19, 18, 0, 0, 5, 16, 0, 0, 5, 16, 3, 3, 16, 0, 12, 16, 14, 12, 18, 8, 10, 10, 0, 18, 19, 19, 8, 3, 16, 18, 0, 19, 18, 10, 0, 18, 18, 19, 8, 12, 16, 16, 5, 3, 0, 8, 0, 14, 12, 19, 12, 16, 14, 14, 19, 8, 10, 5, 14, 5, 3, 19, 5, 12, 3, 14, 18, 14, 10, 5, 18, 10, 10,
8684
1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0,
5, 20, 21, 19, 3, 5, 5, 19, 5, 0, 3, 5, 13, 19, 21, 21, 5, 8, 20, 19, 12, 27, 3, 12, 20, 27, 3, 21, 8, 27, 0, 27, 5, 27, 5, 13, 12, 8, 20, 0, 27, 25, 19, 27, 3, 21, 19, 8, 20, 20, 12, 19, 19, 3, 3, 13, 25, 8, 5, 5, 27, 27, 25, 25, 21, 5, 20, 12, 21, 8,
13496
1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
4, 8, 2, 8, 1, 9, 7, 9, 8, 7, 6, 4, 1, 6, 7, 7, 9, 9, 6, 7, 2, 8, 6, 7, 7, 7, 0, 8, 7, 8, 2, 6, 2, 0, 9, 1, 8, 7, 1, 7, 0, 6, 1, 9, 0, 2, 7, 7, 5, 7, 2, 4, 1, 0, 2, 7, 0, 5, 1, 4, 4, 7, 0, 5, 7, 0, 6, 7, 4, 5, 0, 0, 2, 9, 0, 6, 6, 5, 6, 7, 0, 1, 2, 2, 6, 6, 5, 7, 6, 5,
11543
1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1,
5, 3, 8, 0, 5, 3, 12, 0, 12, 3, 12, 19, 13, 3, 0, 0, 17, 0, 12, 17, 18, 3, 0, 0, 18, 5, 0, 0, 19, 8, 0, 0, 18, 12, 13, 0, 18, 19, 0, 0, 18, 18, 5, 3, 18, 17, 3, 8, 3, 13, 17, 8, 16, 12, 12, 8, 5, 16, 18, 3, 3, 16, 18, 3, 3, 13, 19, 5, 3, 19, 19, 8, 0, 13, 19, 13, 3, 13, 12, 17,
8882
1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1,
0, 29, 11, 23, 23, 5, 28, 11, 5, 18, 2, 29, 2, 29, 16, 5, 29, 0, 2, 23, 0, 23, 5, 28, 2, 29, 16, 5, 29, 0, 23, 11, 23, 23, 5, 28, 5, 2, 16, 23, 28, 0, 28, 21, 2, 23, 11, 18, 2, 2, 23, 2, 28, 0, 18, 16, 0, 28, 2, 23, 11, 5, 21, 0, 29, 5, 23, 16, 0, 29,
9405
1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
3, 1, 0, 9, 0, 5, 8, 2, 6, 1, 5, 2, 6, 6, 1, 2, 8, 2, 8, 1, 5, 7, 6, 6, 5, 9, 8, 5, 2, 5, 0, 1, 7, 2, 9, 0, 8, 7, 0, 3, 2, 1, 7, 2, 9, 2, 7, 5, 7, 5, 6, 7, 6, 5, 6, 1, 8, 5, 2, 5, 1, 2, 0, 9, 0, 2, 7, 2, 8, 1, 0, 7, 6, 0, 9, 1, 8, 5, 9, 5, 5, 7, 6, 9, 7, 2, 8, 5, 7, 8, 5, 5, 6, 6, 3, 7, 0, 2, 8, 0,
9443
1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1,
1, 19, 17, 13, 16, 0, 7, 11, 8, 8, 5, 7, 11, 1, 1, 0, 5, 12, 19, 8, 5, 19, 17, 0, 13, 0, 15, 11, 8, 7, 1, 19, 12, 13, 11, 0, 7, 17, 15, 7, 17, 7, 11, 8, 7, 0, 5, 11, 15, 8, 1, 19, 15, 13, 8, 5, 7, 17, 15, 13, 5, 16, 19, 0, 15, 5, 16, 19, 0, 11, 11, 5, 12, 19, 11, 19, 7, 12, 8, 0, 7, 7, 12, 8, 1, 0, 12, 12, 16, 0, 5, 16, 19, 0, 11, 11, 13, 12, 17, 0,
14854
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
5, 3, 3, 8, 6, 2, 4, 9, 1, 0, 5, 3, 3, 6, 0, 3, 6, 0, 0, 2, 5, 3, 3, 8, 5, 4, 7, 9, 7, 7, 8, 2, 3, 2, 6, 2, 4, 3, 1, 7, 9, 3, 3, 8, 6, 2, 4, 2, 7, 7, 8, 9, 3, 2, 9, 5, 1, 9, 4, 4, 2, 1, 3, 6, 1, 3, 0, 1, 0, 2, 7, 3, 3, 6, 4, 4, 7, 2, 7, 7, 8, 9, 3, 2, 8, 5, 3, 3, 2, 0, 5, 9, 9, 1, 9, 5, 6, 9, 4, 2,
13023
1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1,
19, 3, 15, 19, 9, 13, 3, 11, 13, 18, 19, 11, 15, 1, 11, 19, 3, 11, 13, 18, 8, 3, 11, 19, 18, 5, 18, 5, 8, 0, 11, 3, 12, 8, 19, 13, 3, 12, 8, 9, 19, 3, 15, 19, 11, 19, 11, 13, 1, 12, 5, 18, 12, 8, 9, 19, 3, 15, 3, 9, 19, 3, 11, 5, 9, 19, 3, 15, 5, 2, 1, 18, 13, 19, 0, 19, 3, 15, 2, 11, 5, 18, 13, 8, 19, 5, 18, 13, 19, 0, 0, 18, 1, 0, 0, 13, 3, 12, 8, 9,
14469
1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
4, 2, 0, 9, 2, 4, 4, 6, 2, 0, 4, 0, 3, 3, 6, 1, 6, 4, 8, 0, 4, 6, 2, 3, 2, 1, 4, 4, 8, 0, 4, 6, 8, 4, 8, 1, 6, 4, 8, 0, 4, 0, 2, 9, 2, 4, 4, 4, 5, 0, 4, 9, 3, 3, 2, 4, 4, 3, 9, 0, 4, 9, 3, 9, 2, 4, 8, 3, 8, 5, 3, 0, 2, 3, 2, 1, 4, 4, 9, 0, 2, 9, 3, 3, 6, 0, 6, 1, 9, 0, 2, 0, 2, 9, 2, 1, 6, 4, 5, 5,
12328
1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1,
19, 3, 9, 6, 10, 19, 0, 0, 6, 9, 10, 5, 2, 14, 8, 19, 2, 0, 4, 9, 3, 2, 2, 14, 10, 4, 2, 2, 6, 10, 19, 6, 6, 6, 9, 19, 19, 0, 5, 5, 9, 5, 2, 14, 10, 4, 19, 0, 4, 2, 19, 19, 0, 5, 9, 19, 19, 0, 4, 9, 19, 6, 6, 6, 10, 19, 19, 0, 4, 5, 19, 5, 8, 4, 9, 2, 0, 2, 4, 10, 2, 2, 6, 14, 10, 4, 2, 2, 14, 19, 3, 2, 2, 6, 8, 19, 19, 2, 6, 9,
31010
1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1,
26, 22, 1, 8, 26, 3, 8, 3, 14, 5, 9, 28, 0, 12, 27, 16, 14, 21, 5, 5, 16, 16, 15, 5, 17, 8, 7, 22, 3, 16, 4, 12, 7, 14, 2, 16, 7, 16, 26, 27, 1, 18, 12, 7, 22, 22, 12, 5, 19, 19, 3, 14, 5, 27, 17, 28, 5, 9, 14, 15, 17, 27, 13, 14, 0, 27, 5, 14, 9, 15, 15, 3, 17, 15, 14, 15, 12, 22, 3, 16, 5, 12, 5, 12, 23, 22, 15, 2, 14, 5, 9, 29, 0, 21, 29, 26, 19, 0, 11, 9, 23, 9, 19, 11, 27, 7, 17, 23, 13, 9, 8, 1, 29, 21, 7, 18, 18, 19, 11, 18, 15, 28, 29, 13, 28, 15, 21, 4, 8, 2, 23, 8, 12, 9, 16, 13, 5, 23, 19, 1, 2, 17, 27, 17, 5, 7, 1, 8, 11, 18, 8, 11, 5, 27, 4, 27, 5, 29, 12, 17, 23, 21, 28, 18, 11, 0, 2, 15, 29, 23, 2, 13, 26, 5, 23, 17, 4, 18, 27, 1, 7, 4, 28, 22, 28, 15, 8, 1, 8, 26, 0, 8, 12, 9, 12, 22, 26, 1, 27, 8,
37063
1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 4, 6, 15, 9, 26, 10, 3, 6, 15, 9, 29, 27, 14, 27, 27, 14, 21, 5, 5, 12, 16, 3, 19, 17, 9, 25, 22, 5, 14, 4, 5, 7, 3, 4, 25, 7, 29, 24, 5, 14, 12, 26, 7, 3, 22, 12, 15, 22, 0, 17, 14, 24, 4, 21, 4, 0, 5, 14, 15, 17, 11, 22, 25, 15, 21, 5, 14, 9, 10, 29, 3, 17, 15, 14, 6, 12, 11, 3, 14, 5, 25, 11, 7, 7, 5, 12, 3, 24, 15, 9, 29, 27, 24, 16, 17, 14, 23, 22, 3, 6, 23, 19, 11, 27, 19, 26, 11, 11, 9, 25, 17, 29, 19, 7, 11, 10, 19, 11, 6, 0, 10, 28, 3, 10, 11, 21, 21, 5, 21, 23, 10, 12, 27, 16, 26, 5, 29, 22, 9, 4, 17, 19, 11, 11, 19, 11, 11, 11, 0, 7, 11, 5, 27, 4, 25, 0, 24, 22, 17, 23, 22, 28, 17, 11, 0, 9, 5, 29, 23, 17, 14, 24, 4, 23, 10, 24, 14, 27, 4, 26, 4, 28, 22, 28, 11, 29, 4, 28, 29, 16, 25, 23, 9, 23, 10, 4, 0, 27, 23,
54385
1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
23, 17, 21, 28, 11, 1, 8, 6, 6, 5, 9, 6, 8, 14, 9, 2, 7, 16, 29, 20, 16, 14, 20, 5, 17, 10, 7, 0, 20, 21, 11, 10, 14, 9, 2, 16, 7, 16, 24, 0, 1, 18, 11, 1, 22, 22, 19, 5, 0, 0, 17, 19, 24, 6, 17, 28, 29, 9, 14, 1, 17, 27, 18, 29, 0, 21, 5, 2, 24, 10, 29, 9, 19, 8, 0, 19, 22, 17, 0, 16, 5, 5, 11, 23, 20, 5, 6, 2, 24, 6, 19, 29, 17, 11, 29, 17, 2, 8, 22, 9, 6, 17, 27, 11, 5, 7, 17, 11, 11, 9, 7, 1, 22, 21, 29, 18, 1, 8, 11, 9, 0, 28, 28, 27, 1, 11, 21, 21, 5, 2, 23, 8, 14, 27, 16, 16, 0, 10, 14, 1, 2, 22, 1, 17, 5, 19, 11, 8, 18, 18, 7, 11, 5, 22, 2, 24, 0, 24, 24, 17, 23, 20, 28, 17, 11, 0, 9, 5, 19, 22, 2, 2, 24, 20, 23, 7, 2, 14, 27, 29, 26, 20, 28, 22, 21, 11, 29, 1, 16, 20, 16, 8, 28, 9, 8, 10, 26, 1, 27, 8,
43514
1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
0, 20, 14, 15, 9, 3, 8, 6, 24, 7, 9, 29, 8, 12, 3, 2, 14, 16, 23, 20, 16, 16, 15, 19, 17, 8, 7, 22, 20, 16, 6, 10, 14, 14, 2, 16, 14, 24, 24, 10, 1, 12, 12, 1, 20, 28, 3, 10, 22, 19, 3, 14, 23, 4, 24, 13, 29, 9, 19, 1, 17, 27, 13, 25, 15, 21, 7, 2, 9, 7, 0, 9, 17, 8, 20, 6, 13, 17, 0, 14, 1, 12, 12, 7, 12, 22, 4, 2, 24, 15, 9, 24, 27, 8, 29, 17, 19, 29, 22, 3, 2, 9, 27, 17, 27, 7, 1, 23, 13, 9, 25, 20, 22, 21, 7, 17, 10, 8, 15, 29, 0, 10, 10, 13, 28, 15, 21, 1, 8, 2, 23, 12, 12, 2, 16, 13, 0, 25, 14, 1, 2, 17, 6, 4, 6, 19, 2, 8, 7, 9, 8, 20, 29, 22, 4, 24, 0, 24, 12, 17, 23, 8, 19, 17, 21, 0, 9, 10, 25, 22, 17, 14, 24, 20, 25, 10, 2, 14, 27, 4, 3, 20, 28, 22, 28, 0, 29, 1, 28, 29, 16, 8, 28, 9, 8, 10, 4, 1, 27, 8,
30114
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1,
0, 20, 21, 15, 9, 3, 10, 3, 6, 5, 9, 7, 0, 14, 9, 2, 7, 16, 16, 20, 12, 16, 4, 19, 17, 8, 5, 22, 20, 14, 4, 10, 7, 2, 2, 27, 14, 29, 5, 10, 1, 0, 12, 1, 22, 5, 12, 5, 22, 19, 17, 19, 23, 6, 17, 4, 5, 5, 19, 15, 17, 27, 22, 29, 15, 23, 5, 14, 9, 5, 19, 3, 19, 8, 22, 15, 17, 17, 15, 16, 5, 25, 11, 23, 7, 5, 15, 2, 6, 15, 9, 29, 27, 27, 29, 17, 2, 0, 22, 3, 6, 17, 19, 11, 27, 7, 17, 23, 7, 9, 25, 17, 9, 19, 7, 11, 19, 8, 11, 28, 0, 10, 29, 27, 28, 5, 21, 21, 8, 16, 28, 25, 12, 27, 21, 28, 0, 5, 14, 1, 4, 22, 27, 4, 6, 19, 1, 8, 11, 9, 8, 11, 1, 22, 2, 25, 5, 29, 12, 1, 19, 20, 19, 17, 11, 0, 10, 25, 29, 23, 27, 19, 23, 20, 12, 7, 2, 14, 27, 29, 3, 4, 28, 22, 28, 15, 29, 9, 28, 29, 27, 8, 23, 11, 8, 10, 4, 1, 27, 4,
36281
0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1,
23, 8, 1, 15, 18, 25, 8, 3, 26, 25, 26, 22, 27, 14, 2, 2, 14, 16, 16, 12, 12, 16, 25, 5, 17, 10, 7, 21, 5, 14, 23, 5, 7, 14, 2, 25, 7, 8, 26, 17, 1, 12, 12, 1, 3, 22, 12, 5, 22, 22, 17, 14, 5, 4, 17, 4, 5, 5, 14, 15, 17, 27, 18, 29, 15, 4, 5, 14, 23, 15, 18, 3, 2, 8, 22, 15, 16, 11, 3, 14, 5, 25, 11, 23, 12, 5, 15, 2, 4, 5, 15, 29, 2, 21, 29, 28, 2, 10, 11, 3, 29, 3, 27, 11, 27, 7, 11, 23, 12, 18, 25, 16, 21, 29, 7, 11, 18, 12, 11, 7, 15, 28, 28, 27, 28, 15, 21, 17, 8, 2, 23, 23, 12, 27, 16, 26, 2, 29, 22, 28, 2, 17, 1, 11, 5, 7, 28, 8, 11, 18, 8, 11, 3, 22, 2, 25, 14, 23, 12, 17, 3, 8, 28, 17, 11, 26, 2, 5, 29, 23, 17, 14, 23, 5, 12, 23, 2, 18, 27, 4, 26, 4, 28, 22, 28, 11, 29, 4, 28, 29, 22, 8, 26, 2, 8, 10, 4, 1, 27, 8,
50265
1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
19, 20, 21, 8, 9, 0, 10, 3, 26, 5, 9, 28, 8, 16, 9, 2, 27, 16, 16, 20, 16, 16, 25, 19, 17, 18, 5, 22, 20, 21, 23, 8, 18, 3, 2, 27, 0, 16, 26, 10, 5, 5, 26, 10, 20, 5, 20, 5, 22, 0, 17, 2, 26, 27, 26, 26, 5, 5, 19, 28, 17, 27, 3, 25, 0, 21, 5, 2, 21, 10, 29, 3, 2, 8, 5, 19, 10, 22, 3, 22, 5, 29, 5, 23, 20, 5, 3, 3, 23, 10, 19, 29, 17, 27, 29, 18, 19, 10, 22, 3, 29, 9, 19, 11, 27, 19, 17, 11, 11, 9, 25, 20, 29, 19, 29, 11, 20, 8, 11, 2, 0, 10, 10, 2, 28, 5, 21, 20, 8, 21, 10, 8, 23, 27, 16, 26, 5, 9, 18, 28, 2, 17, 19, 11, 26, 19, 11, 8, 18, 18, 8, 11, 5, 22, 2, 25, 0, 29, 22, 9, 19, 20, 19, 17, 26, 0, 2, 5, 25, 22, 21, 19, 26, 20, 23, 10, 2, 18, 27, 29, 19, 20, 28, 22, 28, 11, 29, 17, 28, 29, 16, 8, 26, 20, 8, 10, 26, 18, 27, 8,
42432
1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
9, 20, 21, 0, 9, 26, 8, 6, 6, 25, 9, 22, 17, 14, 27, 11, 25, 16, 16, 20, 13, 16, 25, 19, 17, 9, 21, 20, 20, 16, 6, 12, 14, 14, 2, 16, 14, 24, 24, 20, 1, 12, 12, 23, 20, 22, 12, 10, 19, 19, 14, 13, 1, 4, 17, 4, 2, 9, 14, 1, 17, 11, 13, 29, 0, 4, 19, 2, 9, 10, 29, 22, 17, 8, 14, 9, 16, 22, 9, 14, 1, 12, 11, 24, 20, 22, 6, 2, 14, 10, 9, 29, 27, 8, 29, 17, 20, 29, 11, 9, 29, 17, 6, 11, 27, 19, 11, 23, 11, 9, 25, 1, 21, 0, 29, 17, 10, 8, 11, 2, 25, 10, 29, 22, 28, 11, 21, 21, 8, 21, 23, 8, 23, 9, 16, 26, 2, 23, 12, 1, 4, 17, 27, 11, 6, 19, 11, 8, 11, 9, 8, 11, 1, 22, 4, 24, 0, 23, 12, 17, 23, 17, 19, 17, 11, 0, 2, 1, 19, 23, 17, 13, 24, 20, 25, 23, 2, 10, 27, 4, 25, 4, 28, 6, 1, 0, 29, 1, 28, 29, 21, 0, 23, 20, 8, 10, 4, 1, 27, 8,
31057
1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
0, 20, 1, 15, 11, 1, 8, 3, 6, 5, 15, 29, 0, 14, 27, 2, 14, 16, 16, 5, 16, 16, 4, 19, 17, 10, 21, 0, 20, 16, 4, 10, 14, 3, 2, 27, 14, 24, 24, 10, 1, 25, 8, 1, 20, 17, 20, 5, 19, 23, 21, 14, 24, 4, 16, 4, 5, 9, 14, 1, 17, 11, 13, 25, 4, 24, 5, 14, 9, 10, 18, 9, 19, 8, 5, 15, 13, 11, 3, 14, 5, 5, 9, 23, 20, 5, 4, 14, 24, 15, 9, 24, 0, 27, 16, 17, 2, 8, 13, 3, 6, 17, 27, 11, 27, 19, 1, 23, 29, 9, 26, 1, 3, 1, 16, 17, 18, 19, 11, 6, 20, 10, 10, 2, 21, 11, 21, 17, 8, 2, 10, 8, 23, 9, 16, 26, 0, 23, 19, 3, 2, 23, 27, 11, 6, 19, 11, 8, 16, 9, 8, 11, 1, 23, 4, 25, 0, 24, 20, 0, 21, 8, 1, 17, 26, 0, 2, 15, 19, 23, 2, 19, 26, 11, 21, 10, 2, 18, 27, 4, 3, 4, 28, 17, 28, 0, 29, 1, 27, 29, 0, 0, 26, 20, 8, 10, 4, 1, 27, 8,
37039
0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
19, 8, 6, 15, 25, 26, 8, 3, 6, 5, 19, 4, 8, 12, 27, 2, 14, 21, 23, 19, 17, 24, 25, 19, 17, 4, 5, 22, 3, 14, 11, 12, 14, 3, 2, 24, 14, 24, 26, 10, 5, 25, 26, 23, 22, 24, 12, 5, 22, 19, 17, 14, 24, 6, 24, 4, 5, 5, 14, 15, 27, 27, 13, 25, 13, 24, 5, 2, 6, 15, 29, 22, 19, 24, 22, 15, 12, 11, 15, 25, 5, 12, 11, 23, 23, 5, 4, 3, 24, 10, 19, 29, 8, 24, 29, 17, 11, 29, 24, 28, 6, 9, 19, 11, 27, 19, 17, 11, 13, 9, 25, 17, 9, 19, 28, 17, 19, 8, 11, 3, 25, 10, 10, 13, 21, 11, 21, 21, 8, 2, 23, 8, 12, 27, 4, 4, 5, 23, 12, 28, 2, 17, 19, 11, 6, 19, 17, 8, 11, 9, 8, 11, 3, 22, 4, 25, 14, 24, 12, 17, 3, 17, 28, 17, 26, 13, 2, 5, 29, 23, 2, 14, 24, 4, 11, 28, 24, 10, 27, 4, 26, 4, 28, 22, 28, 15, 29, 4, 28, 29, 22, 8, 26, 5, 8, 10, 4, 14, 27, 23,
51683
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1,
0, 22, 28, 15, 9, 3, 8, 3, 6, 5, 9, 29, 0, 12, 2, 2, 25, 16, 16, 5, 16, 16, 4, 19, 16, 8, 5, 22, 3, 16, 4, 12, 7, 3, 2, 16, 7, 16, 5, 12, 1, 5, 12, 1, 22, 22, 12, 5, 22, 19, 3, 19, 26, 4, 26, 4, 29, 9, 19, 1, 12, 27, 13, 29, 15, 4, 5, 2, 6, 15, 15, 3, 19, 8, 5, 15, 13, 7, 3, 16, 5, 5, 11, 23, 12, 5, 15, 2, 6, 15, 9, 29, 0, 8, 29, 26, 0, 29, 22, 2, 6, 9, 27, 11, 27, 7, 1, 11, 13, 9, 7, 16, 16, 19, 7, 11, 1, 19, 11, 6, 15, 28, 28, 13, 28, 11, 25, 1, 28, 2, 23, 25, 12, 27, 16, 4, 5, 23, 22, 7, 2, 23, 27, 11, 6, 19, 9, 8, 11, 19, 8, 11, 22, 22, 4, 27, 0, 29, 12, 0, 23, 22, 19, 15, 26, 0, 2, 25, 29, 23, 2, 19, 26, 5, 23, 7, 2, 0, 27, 4, 3, 4, 28, 22, 28, 15, 29, 1, 28, 29, 0, 8, 12, 2, 8, 22, 4, 1, 27, 8,
40581
1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1,
0, 18, 0, 14, 29, 2, 9, 2, 23, 4, 8, 29, 9, 13, 8, 15, 13, 15, 15, 4, 11, 13, 3, 4, 16, 3, 29, 24, 4, 13, 3, 4, 6, 2, 1, 26, 6, 23, 11, 9, 29, 24, 11, 22, 0, 23, 11, 4, 18, 22, 2, 12, 23, 26, 16, 3, 1, 24, 13, 0, 11, 26, 2, 29, 14, 26, 4, 13, 13, 4, 23, 8, 12, 23, 14, 4, 18, 10, 2, 13, 4, 24, 4, 23, 6, 16, 14, 1, 23, 6, 8, 23, 18, 26, 24, 25, 29, 12, 11, 2, 1, 8, 18, 10, 26, 18, 25, 22, 12, 8, 24, 0, 8, 18, 6, 10, 13, 18, 12, 29, 14, 9, 1, 12, 0, 10, 13, 0, 2, 1, 9, 9, 11, 8, 25, 25, 4, 4, 10, 0, 3, 22, 18, 10, 10, 12, 8, 15, 10, 8, 11, 15, 0, 25, 3, 29, 4, 22, 23, 16, 22, 22, 18, 16, 25, 24, 1, 29, 24, 22, 16, 13, 23, 3, 22, 16, 1, 13, 26, 3, 6, 3, 29, 12, 1, 14, 26, 0, 1, 29, 29, 24, 22, 8, 22, 9, 23, 0, 26, 22,
30331
1, 1, 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, 1, 0, 0,
0, 22, 1, 15, 26, 26, 8, 3, 6, 5, 9, 4, 6, 12, 27, 2, 1, 16, 16, 5, 12, 14, 4, 5, 17, 9, 21, 22, 20, 14, 4, 12, 7, 3, 2, 24, 7, 24, 26, 10, 1, 12, 26, 1, 3, 17, 4, 5, 22, 19, 17, 14, 26, 27, 21, 23, 5, 25, 14, 1, 17, 27, 22, 25, 15, 21, 5, 26, 24, 8, 18, 3, 19, 8, 14, 19, 9, 11, 4, 16, 5, 5, 11, 23, 20, 5, 15, 2, 24, 15, 9, 7, 27, 24, 16, 17, 5, 23, 11, 7, 6, 9, 19, 11, 27, 19, 11, 11, 11, 9, 7, 17, 21, 1, 4, 17, 1, 8, 11, 3, 15, 10, 10, 6, 10, 11, 21, 20, 5, 21, 10, 8, 23, 27, 16, 26, 0, 23, 14, 7, 4, 3, 27, 4, 6, 19, 11, 8, 18, 9, 8, 11, 22, 27, 4, 25, 0, 24, 12, 0, 23, 20, 19, 17, 11, 0, 2, 10, 16, 22, 21, 14, 24, 20, 11, 23, 2, 18, 27, 4, 3, 4, 19, 22, 21, 15, 27, 1, 8, 20, 16, 8, 26, 20, 8, 10, 4, 1, 27, 8,
36813
1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 20, 21, 8, 2, 1, 8, 3, 26, 10, 9, 7, 0, 29, 27, 2, 7, 16, 16, 5, 16, 16, 16, 19, 16, 9, 5, 0, 3, 16, 11, 5, 7, 3, 2, 16, 7, 24, 26, 10, 1, 0, 8, 1, 7, 22, 20, 15, 19, 19, 3, 11, 24, 27, 24, 28, 2, 5, 20, 15, 10, 27, 22, 29, 15, 24, 19, 2, 23, 15, 29, 9, 2, 8, 15, 15, 19, 11, 3, 16, 5, 25, 11, 23, 20, 5, 15, 2, 24, 25, 9, 24, 0, 22, 29, 26, 20, 10, 22, 9, 29, 22, 27, 11, 27, 7, 1, 11, 11, 9, 25, 1, 29, 29, 7, 27, 20, 19, 5, 7, 15, 10, 10, 2, 1, 11, 29, 21, 8, 21, 28, 8, 23, 9, 24, 26, 5, 5, 19, 1, 21, 23, 1, 11, 5, 25, 1, 8, 11, 9, 8, 11, 5, 27, 2, 25, 0, 29, 24, 28, 23, 22, 1, 15, 11, 0, 10, 25, 19, 23, 2, 19, 24, 20, 25, 7, 2, 0, 27, 29, 7, 8, 28, 15, 28, 26, 29, 1, 28, 20, 16, 8, 26, 20, 8, 10, 24, 1, 27, 8,
54253
1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1,
0, 20, 21, 15, 9, 13, 8, 6, 6, 5, 9, 4, 0, 16, 9, 2, 1, 16, 16, 20, 16, 24, 18, 5, 17, 9, 5, 0, 5, 16, 6, 10, 18, 9, 2, 16, 1, 24, 20, 5, 27, 5, 8, 1, 10, 22, 19, 5, 0, 19, 17, 13, 24, 4, 24, 28, 15, 9, 20, 15, 17, 11, 22, 29, 4, 23, 5, 2, 24, 15, 19, 4, 2, 8, 20, 19, 13, 11, 0, 16, 5, 5, 11, 24, 20, 5, 15, 6, 6, 10, 19, 29, 0, 27, 29, 24, 20, 8, 22, 28, 6, 9, 1, 11, 27, 19, 28, 23, 13, 9, 1, 17, 29, 24, 29, 17, 18, 19, 11, 28, 20, 10, 10, 13, 28, 15, 21, 20, 5, 21, 23, 8, 23, 9, 16, 28, 2, 23, 22, 9, 6, 17, 19, 11, 11, 19, 11, 8, 11, 0, 8, 11, 5, 22, 2, 24, 5, 24, 24, 17, 19, 8, 1, 15, 6, 0, 9, 15, 29, 22, 2, 13, 24, 5, 28, 10, 2, 18, 27, 15, 23, 4, 28, 22, 28, 15, 29, 17, 28, 29, 16, 8, 24, 20, 23, 10, 4, 1, 27, 8,
41282
1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1,
23, 4, 6, 8, 2, 0, 10, 6, 26, 25, 26, 4, 10, 14, 3, 24, 14, 16, 16, 5, 13, 16, 4, 5, 17, 8, 5, 22, 3, 16, 4, 5, 18, 2, 2, 11, 0, 24, 24, 17, 14, 25, 12, 23, 22, 22, 3, 5, 22, 23, 17, 14, 5, 4, 24, 4, 2, 5, 14, 15, 17, 11, 13, 25, 0, 24, 5, 14, 26, 10, 18, 3, 2, 8, 22, 15, 16, 22, 3, 14, 5, 25, 5, 23, 23, 5, 15, 2, 6, 5, 15, 28, 0, 21, 29, 17, 2, 29, 14, 3, 6, 3, 28, 11, 5, 6, 17, 23, 13, 18, 25, 16, 29, 17, 29, 17, 10, 8, 11, 18, 15, 29, 10, 13, 12, 5, 21, 25, 5, 2, 23, 8, 23, 22, 16, 26, 2, 5, 22, 15, 4, 17, 28, 15, 11, 13, 11, 8, 11, 18, 8, 11, 5, 22, 4, 25, 0, 24, 12, 17, 26, 8, 28, 17, 26, 0, 2, 5, 29, 13, 2, 14, 24, 4, 23, 10, 2, 18, 2, 4, 26, 4, 28, 22, 28, 11, 29, 17, 28, 29, 16, 8, 23, 2, 8, 10, 4, 0, 2, 8,