16 {1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4},
17 {5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8,5,6,7,8},
18 {9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12,9,10,11,12},
19 {13,14,15,16,13,14,15,16,13,14,15,16,13,14,15,16,13,14,15,16,13,14,15,16,13,14,15,16,13,14,15,16,13,14,15,16,13,14,15,16,13,14,15,16,13,14,15,16,13,14,15,16,13,14,15,16,13,14,15,16,13,14,15,16,13,14,15,16},
20 {17,18,19,20,17,18,19,20,17,18,19,20,17,18,19,20,17,18,19,20,17,18,19,20,17,18,19,20,17,18,19,20,17,18,19,20,17,18,19,20,17,18,19,20,17,18,19,20,17,18,19,20,17,18,19,20,17,18,19,20,17,18,19,20,17,18,19,20},
21 {21,22,23,24,21,22,23,24,21,22,23,24,21,22,23,24,21,22,23,24,21,22,23,24,21,22,23,24,21,22,23,24,21,22,23,24,21,22,23,24,21,22,23,24,21,22,23,24,21,22,23,24,21,22,23,24,21,22,23,24,21,22,23,24,21,22,23,24},
22 {25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28,25,26,27,28},
23 {29,30,31,32,29,30,31,32,29,30,31,32,29,30,31,32,29,30,31,32,29,30,31,32,29,30,31,32,29,30,31,32,29,30,31,32,29,30,31,32,29,30,31,32,29,30,31,32,29,30,31,32,29,30,31,32,29,30,31,32,29,30,31,32,29,30,31,32},
24 {33,34,35,36,33,34,35,36,33,34,35,36,33,34,35,36,33,34,35,36,33,34,35,36,33,34,35,36,33,34,35,36,33,34,35,36,33,34,35,36,33,34,35,36,33,34,35,36,33,34,35,36,33,34,35,36,33,34,35,36,33,34,35,36,33,34,35,36},
25 {37,38,39,40,37,38,39,40,37,38,39,40,37,38,39,40,37,38,39,40,37,38,39,40,37,38,39,40,37,38,39,40,37,38,39,40,37,38,39,40,37,38,39,40,37,38,39,40,37,38,39,40,37,38,39,40,37,38,39,40,37,38,39,40,37,38,39,40},
26 {41,42,43,44,41,42,43,44,41,42,43,44,41,42,43,44,41,42,43,44,41,42,43,44,41,42,43,44,41,42,43,44,41,42,43,44,41,42,43,44,41,42,43,44,41,42,43,44,41,42,43,44,41,42,43,44,41,42,43,44,41,42,43,44,41,42,43,44},
27 {45,46,47,48,45,46,47,48,45,46,47,48,45,46,47,48,45,46,47,48,45,46,47,48,45,46,47,48,45,46,47,48,45,46,47,48,45,46,47,48,45,46,47,48,45,46,47,48,45,46,47,48,45,46,47,48,45,46,47,48,45,46,47,48,45,46,47,48},
28 {49,50,51,52,49,50,51,52,49,50,51,52,49,50,51,52,49,50,51,52,49,50,51,52,49,50,51,52,49,50,51,52,49,50,51,52,49,50,51,52,49,50,51,52,49,50,51,52,49,50,51,52,49,50,51,52,49,50,51,52,49,50,51,52,49,50,51,52},
29 {53,54,55,56,53,54,55,56,53,54,55,56,53,54,55,56,53,54,55,56,53,54,55,56,53,54,55,56,53,54,55,56,53,54,55,56,53,54,55,56,53,54,55,56,53,54,55,56,53,54,55,56,53,54,55,56,53,54,55,56,53,54,55,56,53,54,55,56},
30 {57,58,59,60,57,58,59,60,57,58,59,60,57,58,59,60,57,58,59,60,57,58,59,60,57,58,59,60,57,58,59,60,57,58,59,60,57,58,59,60,57,58,59,60,57,58,59,60,57,58,59,60,57,58,59,60,57,58,59,60,57,58,59,60,57,58,59,60},
31 {61,62,63,64,61,62,63,64,61,62,63,64,61,62,63,64,61,62,63,64,61,62,63,64,61,62,63,64,61,62,63,64,61,62,63,64,61,62,63,64,61,62,63,64,61,62,63,64,61,62,63,64,61,62,63,64,61,62,63,64,61,62,63,64,61,62,63,64},
32 {65,66,67,68,65,66,67,68,65,66,67,68,65,66,67,68,65,66,67,68,65,66,67,68,65,66,67,68,65,66,67,68,65,66,67,68,65,66,67,68,65,66,67,68,65,66,67,68,65,66,67,68,65,66,67,68,65,66,67,68,65,66,67,68,65,66,67,68},
33 {69,70,71,72,69,70,71,72,69,70,71,72,69,70,71,72,69,70,71,72,69,70,71,72,69,70,71,72,69,70,71,72,69,70,71,72,69,70,71,72,69,70,71,72,69,70,71,72,69,70,71,72,69,70,71,72,69,70,71,72,69,70,71,72,69,70,71,72},
34 {4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1,4,3,2,1},
35 {8,7,6,5,8,7,6,5,8,7,6,5,8,7,6,5,8,7,6,5,8,7,6,5,8,7,6,5,8,7,6,5,8,7,6,5,8,7,6,5,8,7,6,5,8,7,6,5,8,7,6,5,8,7,6,5,8,7,6,5,8,7,6,5,8,7,6,5},
36 {12,11,10,9,12,11,10,9,12,11,10,9,12,11,10,9,12,11,10,9,12,11,10,9,12,11,10,9,12,11,10,9,12,11,10,9,12,11,10,9,12,11,10,9,12,11,10,9,12,11,10,9,12,11,10,9,12,11,10,9,12,11,10,9,12,11,10,9},
37 {16,15,14,13,16,15,14,13,16,15,14,13,16,15,14,13,16,15,14,13,16,15,14,13,16,15,14,13,16,15,14,13,16,15,14,13,16,15,14,13,16,15,14,13,16,15,14,13,16,15,14,13,16,15,14,13,16,15,14,13,16,15,14,13,16,15,14,13},
38 {20,19,18,17,20,19,18,17,20,19,18,17,20,19,18,17,20,19,18,17,20,19,18,17,20,19,18,17,20,19,18,17,20,19,18,17,20,19,18,17,20,19,18,17,20,19,18,17,20,19,18,17,20,19,18,17,20,19,18,17,20,19,18,17,20,19,18,17},
39 {24,23,22,21,24,23,22,21,24,23,22,21,24,23,22,21,24,23,22,21,24,23,22,21,24,23,22,21,24,23,22,21,24,23,22,21,24,23,22,21,24,23,22,21,24,23,22,21,24,23,22,21,24,23,22,21,24,23,22,21,24,23,22,21,24,23,22,21},
40 {28,27,26,25,28,27,26,25,28,27,26,25,28,27,26,25,28,27,26,25,28,27,26,25,28,27,26,25,28,27,26,25,28,27,26,25,28,27,26,25,28,27,26,25,28,27,26,25,28,27,26,25,28,27,26,25,28,27,26,25,28,27,26,25,28,27,26,25},
41 {32,31,30,29,32,31,30,29,32,31,30,29,32,31,30,29,32,31,30,29,32,31,30,29,32,31,30,29,32,31,30,29,32,31,30,29,32,31,30,29,32,31,30,29,32,31,30,29,32,31,30,29,32,31,30,29,32,31,30,29,32,31,30,29,32,31,30,29},
42 {36,35,34,33,36,35,34,33,36,35,34,33,36,35,34,33,36,35,34,33,36,35,34,33,36,35,34,33,36,35,34,33,36,35,34,33,36,35,34,33,36,35,34,33,36,35,34,33,36,35,34,33,36,35,34,33,36,35,34,33,36,35,34,33,36,35,34,33},
43 {40,39,38,37,40,39,38,37,40,39,38,37,40,39,38,37,40,39,38,37,40,39,38,37,40,39,38,37,40,39,38,37,40,39,38,37,40,39,38,37,40,39,38,37,40,39,38,37,40,39,38,37,40,39,38,37,40,39,38,37,40,39,38,37,40,39,38,37},
44 {44,43,42,41,44,43,42,41,44,43,42,41,44,43,42,41,44,43,42,41,44,43,42,41,44,43,42,41,44,43,42,41,44,43,42,41,44,43,42,41,44,43,42,41,44,43,42,41,44,43,42,41,44,43,42,41,44,43,42,41,44,43,42,41,44,43,42,41},
45 {48,47,46,45,48,47,46,45,48,47,46,45,48,47,46,45,48,47,46,45,48,47,46,45,48,47,46,45,48,47,46,45,48,47,46,45,48,47,46,45,48,47,46,45,48,47,46,45,48,47,46,45,48,47,46,45,48,47,46,45,48,47,46,45,48,47,46,45},
46 {52,51,50,49,52,51,50,49,52,51,50,49,52,51,50,49,52,51,50,49,52,51,50,49,52,51,50,49,52,51,50,49,52,51,50,49,52,51,50,49,52,51,50,49,52,51,50,49,52,51,50,49,52,51,50,49,52,51,50,49,52,51,50,49,52,51,50,49},
47 {56,55,54,53,56,55,54,53,56,55,54,53,56,55,54,53,56,55,54,53,56,55,54,53,56,55,54,53,56,55,54,53,56,55,54,53,56,55,54,53,56,55,54,53,56,55,54,53,56,55,54,53,56,55,54,53,56,55,54,53,56,55,54,53,56,55,54,53},
48 {60,59,58,57,60,59,58,57,60,59,58,57,60,59,58,57,60,59,58,57,60,59,58,57,60,59,58,57,60,59,58,57,60,59,58,57,60,59,58,57,60,59,58,57,60,59,58,57,60,59,58,57,60,59,58,57,60,59,58,57,60,59,58,57,60,59,58,57},
49 {64,63,62,61,64,63,62,61,64,63,62,61,64,63,62,61,64,63,62,61,64,63,62,61,64,63,62,61,64,63,62,61,64,63,62,61,64,63,62,61,64,63,62,61,64,63,62,61,64,63,62,61,64,63,62,61,64,63,62,61,64,63,62,61,64,63,62,61},
50 {68,67,66,65,68,67,66,65,68,67,66,65,68,67,66,65,68,67,66,65,68,67,66,65,68,67,66,65,68,67,66,65,68,67,66,65,68,67,66,65,68,67,66,65,68,67,66,65,68,67,66,65,68,67,66,65,68,67,66,65,68,67,66,65,68,67,66,65},
51 {72,71,70,69,72,71,70,69,72,71,70,69,72,71,70,69,72,71,70,69,72,71,70,69,72,71,70,69,72,71,70,69,72,71,70,69,72,71,70,69,72,71,70,69,72,71,70,69,72,71,70,69,72,71,70,69,72,71,70,69,72,71,70,69,72,71,70,69}
54 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
55 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
56 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
57 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
58 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
59 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
60 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
61 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
62 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
63 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
64 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
65 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
66 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
67 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
68 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
69 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
70 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
71 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
72 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
73 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
74 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
75 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
76 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
77 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
78 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
79 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
80 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
81 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
82 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
83 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
84 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
85 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
86 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
87 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
88 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17},
89 {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17}
91 int ixx[18][41][3] = {
92 {{19,0,0},{20,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{19,0,0},{20,0,0},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{19,0,0},{20,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{19,0,0},{20,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{19,0,0},{19,0,0},{17,0,0},{18,0,0},{19,0,0},{20,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
93 {{16,0,0},{17,0,0},{18,17,0},{16,0,0},{17,0,0},{18,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{19,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{19,0,0},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{19,0,0},{12,20,19},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{13,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
94 {{11,0,0},{11,0,0},{11,0,0},{11,0,0},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{13,0,0},{14,0,0},{15,0,0},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{13,0,0},{14,0,0},{15,0,0},{13,0,0},{14,0,0},{15,0,0},{16,13,0},{13,0,0},{14,0,0},{13,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
95 {{10,0,0},{10,0,0},{10,0,0},{10,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{8,0,0},{7,0,0},{6,0,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{8,0,0},{7,0,0},{6,0,0},{8,0,0},{7,0,0},{6,0,0},{5,8,0},{8,0,0},{7,0,0},{8,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
96 {{5,0,0},{4,0,0},{3,4,0},{5,0,0},{4,0,0},{3,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{9,1,2},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{8,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
97 {{2,0,0},{1,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{2,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
98 {{8,0,0},{8,0,0},{7,0,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{3,2,9},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{5,4,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{5,0,0},{7,0,0},{7,0,0},{6,0,0},{6,0,0},{9,0,0},{9,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
99 {{8,0,0},{8,0,0},{8,0,0},{9,0,0},{9,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{13,0,0},{13,0,0},{13,0,0},{12,0,0},{12,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0}},
100 {{13,0,0},{13,0,0},{14,0,0},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{18,19,12},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{16,17,0},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{16,0,0},{14,0,0},{14,0,0},{15,0,0},{15,0,0},{12,0,0},{12,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
101 {{19,0,0},{20,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{19,0,0},{20,0,0},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{19,0,0},{20,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{19,0,0},{20,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{19,0,0},{19,0,0},{17,0,0},{18,0,0},{19,0,0},{20,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
102 {{16,0,0},{17,0,0},{18,17,0},{16,0,0},{17,0,0},{18,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{19,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{19,0,0},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{19,0,0},{12,20,19},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{13,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
103 {{11,0,0},{11,0,0},{11,0,0},{11,0,0},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{13,0,0},{14,0,0},{15,0,0},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{13,0,0},{14,0,0},{15,0,0},{13,0,0},{14,0,0},{15,0,0},{16,13,0},{13,0,0},{14,0,0},{13,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
104 {{10,0,0},{10,0,0},{10,0,0},{10,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{8,0,0},{7,0,0},{6,0,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{8,0,0},{7,0,0},{6,0,0},{8,0,0},{7,0,0},{6,0,0},{5,8,0},{8,0,0},{7,0,0},{8,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
105 {{5,0,0},{4,0,0},{3,4,0},{5,0,0},{4,0,0},{3,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{9,1,2},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{8,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
106 {{2,0,0},{1,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{2,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
107 {{8,0,0},{8,0,0},{7,0,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{3,2,9},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{5,4,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{5,0,0},{7,0,0},{7,0,0},{6,0,0},{6,0,0},{9,0,0},{9,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
108 {{13,0,0},{13,0,0},{13,0,0},{12,0,0},{12,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{8,0,0},{8,0,0},{8,0,0},{9,0,0},{9,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0}},
109 {{13,0,0},{13,0,0},{14,0,0},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{18,19,12},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{18,0,0},{16,17,0},{13,0,0},{14,0,0},{15,0,0},{16,0,0},{17,0,0},{16,0,0},{14,0,0},{14,0,0},{15,0,0},{15,0,0},{12,0,0},{12,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}}
112 {{12,0,0},{12,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{8,0,0},{8,0,0},{8,0,0},{8,0,0},{8,0,0},{7,0,0},{7,0,0},{7,0,0},{6,0,0},{8,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
113 {{17,0,0},{17,0,0},{17,18,0},{16,0,0},{16,0,0},{16,0,0},{15,0,0},{15,0,0},{15,0,0},{15,0,0},{15,0,0},{14,0,0},{14,0,0},{14,0,0},{14,0,0},{14,0,0},{14,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{12,13,16},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{11,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
114 {{20,0,0},{19,0,0},{18,0,0},{17,0,0},{20,0,0},{19,0,0},{18,0,0},{17,0,0},{16,0,0},{15,0,0},{14,0,0},{13,0,0},{16,0,0},{15,0,0},{14,0,0},{13,0,0},{19,0,0},{19,0,0},{19,0,0},{18,0,0},{18,0,0},{18,0,0},{18,0,0},{17,0,0},{17,0,0},{17,0,0},{16,0,0},{16,0,0},{16,0,0},{19,20,0},{15,0,0},{15,0,0},{14,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
115 {{20,0,0},{19,0,0},{18,0,0},{17,0,0},{20,0,0},{19,0,0},{18,0,0},{17,0,0},{16,0,0},{15,0,0},{14,0,0},{13,0,0},{16,0,0},{15,0,0},{14,0,0},{13,0,0},{19,0,0},{19,0,0},{19,0,0},{18,0,0},{18,0,0},{18,0,0},{18,0,0},{17,0,0},{17,0,0},{17,0,0},{16,0,0},{16,0,0},{16,0,0},{19,20,0},{15,0,0},{15,0,0},{14,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
116 {{17,0,0},{17,0,0},{17,18,0},{16,0,0},{16,0,0},{16,0,0},{15,0,0},{15,0,0},{15,0,0},{15,0,0},{15,0,0},{14,0,0},{14,0,0},{14,0,0},{14,0,0},{14,0,0},{14,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{12,13,16},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{11,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
117 {{12,0,0},{12,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{8,0,0},{8,0,0},{8,0,0},{8,0,0},{8,0,0},{7,0,0},{7,0,0},{7,0,0},{6,0,0},{8,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
118 {{9,0,0},{8,0,0},{8,0,0},{7,0,0},{7,0,0},{7,0,0},{7,0,0},{6,0,0},{6,0,0},{6,0,0},{6,0,0},{6,0,0},{6,0,0},{4,5,9},{5,0,0},{5,0,0},{5,0,0},{5,0,0},{5,0,0},{5,0,0},{2,3,0},{4,0,0},{4,0,0},{4,0,0},{4,0,0},{4,0,0},{3,0,0},{3,0,0},{2,0,0},{3,0,0},{2,0,0},{8,0,0},{7,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
119 {{3,0,0},{2,0,0},{1,0,0},{6,0,0},{5,0,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{3,0,0},{2,0,0},{1,0,0},{6,0,0},{5,0,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0}},
120 {{9,0,0},{8,0,0},{8,0,0},{7,0,0},{7,0,0},{7,0,0},{7,0,0},{6,0,0},{6,0,0},{6,0,0},{6,0,0},{6,0,0},{6,0,0},{4,5,9},{5,0,0},{5,0,0},{5,0,0},{5,0,0},{5,0,0},{5,0,0},{2,3,0},{4,0,0},{4,0,0},{4,0,0},{4,0,0},{4,0,0},{3,0,0},{3,0,0},{2,0,0},{3,0,0},{2,0,0},{8,0,0},{7,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
121 {{12,0,0},{12,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{8,0,0},{8,0,0},{8,0,0},{8,0,0},{8,0,0},{7,0,0},{7,0,0},{7,0,0},{6,0,0},{8,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
122 {{17,0,0},{17,0,0},{17,18,0},{16,0,0},{16,0,0},{16,0,0},{15,0,0},{15,0,0},{15,0,0},{15,0,0},{15,0,0},{14,0,0},{14,0,0},{14,0,0},{14,0,0},{14,0,0},{14,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{12,13,16},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{11,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
123 {{20,0,0},{19,0,0},{18,0,0},{17,0,0},{20,0,0},{19,0,0},{18,0,0},{17,0,0},{16,0,0},{15,0,0},{14,0,0},{13,0,0},{16,0,0},{15,0,0},{14,0,0},{13,0,0},{19,0,0},{19,0,0},{19,0,0},{18,0,0},{18,0,0},{18,0,0},{18,0,0},{17,0,0},{17,0,0},{17,0,0},{16,0,0},{16,0,0},{16,0,0},{19,20,0},{15,0,0},{15,0,0},{14,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
124 {{20,0,0},{19,0,0},{18,0,0},{17,0,0},{20,0,0},{19,0,0},{18,0,0},{17,0,0},{16,0,0},{15,0,0},{14,0,0},{13,0,0},{16,0,0},{15,0,0},{14,0,0},{13,0,0},{19,0,0},{19,0,0},{19,0,0},{18,0,0},{18,0,0},{18,0,0},{18,0,0},{17,0,0},{17,0,0},{17,0,0},{16,0,0},{16,0,0},{16,0,0},{19,20,0},{15,0,0},{15,0,0},{14,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
125 {{17,0,0},{17,0,0},{17,18,0},{16,0,0},{16,0,0},{16,0,0},{15,0,0},{15,0,0},{15,0,0},{15,0,0},{15,0,0},{14,0,0},{14,0,0},{14,0,0},{14,0,0},{14,0,0},{14,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{13,0,0},{12,13,16},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{12,0,0},{11,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
126 {{12,0,0},{12,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{11,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{10,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{9,0,0},{8,0,0},{8,0,0},{8,0,0},{8,0,0},{8,0,0},{7,0,0},{7,0,0},{7,0,0},{6,0,0},{8,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
127 {{9,0,0},{8,0,0},{8,0,0},{7,0,0},{7,0,0},{7,0,0},{7,0,0},{6,0,0},{6,0,0},{6,0,0},{6,0,0},{6,0,0},{6,0,0},{4,5,9},{5,0,0},{5,0,0},{5,0,0},{5,0,0},{5,0,0},{5,0,0},{2,3,0},{4,0,0},{4,0,0},{4,0,0},{4,0,0},{4,0,0},{3,0,0},{3,0,0},{2,0,0},{3,0,0},{2,0,0},{8,0,0},{7,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},
128 {{3,0,0},{2,0,0},{1,0,0},{6,0,0},{5,0,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{3,0,0},{2,0,0},{1,0,0},{6,0,0},{5,0,0},{8,0,0},{7,0,0},{6,0,0},{5,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0},{4,0,0},{3,0,0},{2,0,0},{1,0,0}},
129 {{9,0,0},{8,0,0},{8,0,0},{7,0,0},{7,0,0},{7,0,0},{7,0,0},{6,0,0},{6,0,0},{6,0,0},{6,0,0},{6,0,0},{6,0,0},{4,5,9},{5,0,0},{5,0,0},{5,0,0},{5,0,0},{5,0,0},{5,0,0},{2,3,0},{4,0,0},{4,0,0},{4,0,0},{4,0,0},{4,0,0},{3,0,0},{3,0,0},{2,0,0},{3,0,0},{2,0,0},{8,0,0},{7,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}}
133 : m_name(ps.getUntrackedParameter<std::
string>(
"name",
"EcalDAQHandler")) {
135 std::cout <<
"EcalDAQ Source handler constructor\n" << std::endl;
155 uint16_t hv_off_dbstatus = ( dbStatus & (1 << pos ) ) ;
156 if(hv_off_dbstatus>0) hv_off_dbstatus=1;
157 return hv_off_dbstatus;
162 if(m_debug)
std::cout <<
"------- Ecal DAQ - > getNewObjects\n";
164 std::ostringstream
ss;
167 unsigned long long max_since = 1;
170 max_since =
tagInfo().lastInterval.first;
173 std::cout <<
" max_since : " << max_since << std::endl;
176 uint16_t oldEBStatus[72][17][2];
177 uint16_t newEBStatus[72][17][2];
178 uint16_t oldEEStatus[20][20][2];
179 uint16_t newEEStatus[20][20][2];
185 Ref daq_db = lastPayload();
186 if(m_debug)
std::cout <<
"retrieved last payload " << std::endl;
190 for(
int k = 0 ;
k < 2;
k++ ) {
192 for(
int iphi = 1 ; iphi < 73; iphi++) {
193 for(
int ieta = 1 ; ieta < 18; ieta++) {
197 uint16_t dbStatus = 0;
198 dbStatus =(daq_db->barrel( ebid.
hashedIndex())).getStatusCode();
199 oldEBStatus[iphi - 1][ieta -1][
k] = dbStatus;
202 if ( it != daq_db->end() ) {
204 std::cout<<
"*** error channel not found: eta/phi ="<< ieta <<
"/" << iphi << std::endl;
206 daq_temp->
setValue( ebid, dbStatus );
207 if(m_debug && dbStatus != 0)
std::cout <<
"barrel side " <<
k <<
" phi " << iphi <<
" eta " << ieta <<
" status " << dbStatus << std::endl;
213 for(
int ix = 1 ; ix < 21; ix++) {
214 for(
int iy = 1 ; iy < 21; iy++) {
220 uint16_t dbStatus = 0;
221 if ( it != daq_db->end() ) {
222 dbStatus = it->getStatusCode();
224 oldEEStatus[ix - 1][iy -1][
k] = dbStatus;
225 daq_temp->
setValue( eeid, dbStatus );
226 if(m_debug && dbStatus != 0)
std::cout <<
"endcap side " <<
k <<
" x " << ix <<
" y " << iy <<
" status " << dbStatus << std::endl;
233 if(m_debug)
std::cout <<
" No db found : set default values " << std::endl;
236 for(
int k = 0 ;
k < 2;
k++ ) {
238 for(
int iphi = 1 ; iphi < 73; iphi++) {
239 for(
int ieta = 1 ; ieta < 18; ieta++) {
243 uint16_t dbStatus = 0;
244 oldEBStatus[iphi - 1][ieta -1][
k] = dbStatus;
245 daq_temp->
setValue( ebid, dbStatus );
250 for(
int ix = 1 ; ix < 21; ix++) {
251 for(
int iy = 1 ; iy < 21; iy++) {
254 uint16_t dbStatus = 0;
255 oldEEStatus[ix - 1][iy -1][
k] = dbStatus;
256 daq_temp->
setValue( eeid, dbStatus );
266 if(m_debug)
std::cout <<
"Retrieving DAQ status from OMDS DB ... " << std::endl;
268 if(m_debug)
std::cout <<
"Connection done" << std::endl;
271 std::cout <<
" Problem with OMDS: connection parameters " << m_sid <<
"/" << m_user <<
"/" << m_pass << std::endl;
289 if(m_firstRun < (
unsigned long)max_since) {
290 min_run= (int)max_since+1;
292 else { min_run=(int)m_firstRun; }
293 int max_run=(int)m_lastRun;
294 std::cout <<
"min_run " << min_run <<
" max_run " << max_run << std::endl;
297 my_list = econn->fetchRunListByLocation(my_runtag, min_run, max_run, my_locdef);
299 std::vector<RunIOV> run_vec = my_list.
getRuns();
300 int num_runs = run_vec.size();
302 std::cout <<
" number of runs is : " << num_runs << std::endl;
304 unsigned long irun=0;
312 for(
int kr = num_runs -1; kr < num_runs; kr++){
317 if(run_vec[kr].getRunTag().getGeneralTag() !=
"GLOBAL")
continue;
318 bool somediff =
false;
321 for(
int k = 0 ;
k < 2;
k++ ) {
322 for(
int iphi = 0 ; iphi < 72; iphi++) {
323 for(
int ieta = 0 ; ieta < 17; ieta++) {
324 newEBStatus[iphi][ieta][
k] = 0;
327 for(
int ix = 0 ; ix < 20; ix++) {
328 for(
int iy = 0 ; iy < 20; iy++) {
329 newEEStatus[ix][iy][
k] = 0;
337 std::map<EcalLogicID, RunDat> fed_dat;
338 econn->fetchDataSet(&fed_dat, &run_vec[kr]);
341 typedef std::map<EcalLogicID, RunDat>::const_iterator fedIter;
346 std::map<EcalLogicID, RunFEConfigDat> feconfig;
347 econn->fetchDataSet(&feconfig, &run_vec[kr]);
349 if(fed_dat.size() == 0 || feconfig.size() == 0) {
350 std::cout <<
" run " << irun <<
" tag " << run_vec[kr].getRunTag().getGeneralTag()
351 <<
" Run type " << run_vec[kr].getRunTag().getRunTypeDef().getRunType()
352 <<
" feconfig and/or read FED size = 0, leaving..." << std::endl;
357 if(fed_dat.size() != 54 ) {
358 int SM[36] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
359 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
360 int Sect[2][9] = {{0, 0, 0, 0, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 0, 0, 0, 0}};
361 for (fedIter
p=fed_dat.begin();
p!=fed_dat.end();
p++) {
376 Sect[izz][sm - 1] = 1;
386 for(
int sm = 0; sm < 36; sm++)
390 for(
int tt = 0;
tt < 68;
tt++)
393 for(
int tt = 0;
tt < 68;
tt++)
396 for(
int z = 0; z < 2; z++)
397 for(
int sec = 0; sec < 9; sec++)
398 if(Sect[z][sec] != 1) {
401 if(z == 1) sec18 = sec + 9;
402 for(
int sc = 0 ; sc < 41; sc++) {
403 if(
ixx[sec18][sc][0] != 0) {
404 newEEStatus[
ixx[sec18][sc][0] - 1][
iyy[sec18][sc][0] - 1][z] = 1;
405 if(
ixx[sec18][sc][1] != 0) {
406 newEEStatus[
ixx[sec18][sc][1] - 1][iyy[sec18][sc][1] - 1][z] = 1;
407 if(
ixx[sec18][sc][2] != 0) {
408 newEEStatus[
ixx[sec18][sc][2] - 1][iyy[sec18][sc][2] - 1][z] = 1;
416 typedef std::map<EcalLogicID, RunFEConfigDat>::const_iterator feConfIter;
421 for (feConfIter
p=feconfig.begin();
p!=feconfig.end();
p++) {
429 myconfig.
setId(fe_conf_id);
430 econn->fetchConfigSet(&myconfig);
435 std::vector< ODBadTTDat > badTT_dat;
446 econn->fetchConfigSet(&mybadTT);
448 econn->fetchConfigDataSet(&badTT_dat, &mybadTT);
449 NbadTT = badTT_dat.size();
460 for(
size_t iTT = 0; iTT < NbadTT; iTT++){
461 int fed_id = badTT_dat[iTT].getFedId();
462 int tt_id = badTT_dat[iTT].getTTId();
468 if(fed_id >= 610 && fed_id <= 645) {
473 if(fed_id > 627) side = +1;
475 <<
" eta " <<
ietaEB[fed_id - 610][tt_id - 1]
476 <<
" side " << side << std::endl;
477 newEBStatus[
iphiEB[fed_id - 610][tt_id - 1] - 1][
ietaEB[fed_id - 610][tt_id - 1] - 1][side] = 1;
479 else if(fed_id <= 609 || (fed_id >= 646 && fed_id <= 654)) {
485 if(m_debug)
std::cout <<
" x " <<
ixx[fed_id - 601][tt_id - 1][0]
486 <<
" y " <<
iyy[fed_id - 601][tt_id - 1][0];
487 newEEStatus[
ixx[fed_id - 601][tt_id - 1][0] - 1][iyy[fed_id - 601][tt_id - 1][0] - 1][side] = 1;
488 if(
ixx[fed_id - 601][tt_id - 1][1] != 0) {
489 if(m_debug)
std::cout <<
" x2 " <<
ixx[fed_id - 601][tt_id - 1][1]
490 <<
" y2 " << iyy[fed_id - 601][tt_id - 1][1];
491 newEEStatus[
ixx[fed_id - 601][tt_id - 1][1] - 1][iyy[fed_id - 601][tt_id - 1][1] - 1][side] = 1;
492 if(
ixx[fed_id - 601][tt_id - 1][2] != 0) {
493 if(m_debug)
std::cout <<
" x3 " <<
ixx[fed_id - 601][tt_id - 1][2]
494 <<
" y3 " << iyy[fed_id - 601][tt_id - 1][2];
495 newEEStatus[
ixx[fed_id - 601][tt_id - 1][2] - 1][iyy[fed_id - 601][tt_id - 1][2] - 1][side] = 1;
498 if(m_debug)
std::cout <<
" side " << side << std::endl;
502 if(m_debug)
std::cout <<
" x " <<
ixx[fed_id - 637][tt_id - 1][0]
503 <<
" y " <<
iyy[fed_id - 637][tt_id - 1][0];
504 newEEStatus[
ixx[fed_id - 637][tt_id - 1][0] - 1][iyy[fed_id - 637][tt_id - 1][0] - 1][side] = 1;
505 if(
ixx[fed_id - 637][tt_id - 1][1] != 0) {
506 if(m_debug)
std::cout <<
" x2 " <<
ixx[fed_id - 637][tt_id - 1][1]
507 <<
" y2 " << iyy[fed_id - 637][tt_id - 1][1];
508 newEEStatus[
ixx[fed_id - 637][tt_id - 1][1] - 1][iyy[fed_id - 637][tt_id - 1][1] - 1][side] = 1;
509 if(
ixx[fed_id - 637][tt_id - 1][2] != 0) {
510 if(m_debug)
std::cout <<
" x3 " <<
ixx[fed_id - 637][tt_id - 1][2]
511 <<
" y3 " << iyy[fed_id - 637][tt_id - 1][2];
512 newEEStatus[
ixx[fed_id - 637][tt_id - 1][2] - 1][iyy[fed_id - 637][tt_id - 1][2] - 1][side] = 1;
515 if(m_debug)
std::cout <<
" side " << side << std::endl;
519 std::cout <<
" Strange Fed " << fed_id <<
" TT/SC " << tt_id <<
" Give up " << std::endl;
525 for(
int k = 0 ;
k < 2;
k++ ) {
528 if(m_debug)
std::cout <<
" Side : " <<
k <<
" barrel " << std::endl;
529 for(
int iphi = 0 ; iphi < 72; iphi++) {
530 for(
int ieta = 0 ; ieta < 17; ieta++) {
531 if(newEBStatus[iphi][ieta][
k] != oldEBStatus[iphi][ieta][
k]) {
534 daq_temp->
setValue( ebid, newEBStatus[iphi][ieta][k]);
535 if(m_debug)
std::cout <<
" change in EB side " << iz <<
" phi " << iphi +1 <<
" eta " << ieta + 1 << std::endl;
537 if(m_debug)
std::cout << newEBStatus[iphi][ieta][
k] <<
" " ;
538 oldEBStatus[iphi][ieta][
k] = newEBStatus[iphi][ieta][
k];
542 if(m_debug)
std::cout <<
" endcaps " << std::endl;
543 for(
int iy = 0 ; iy < 20; iy++) {
544 for(
int ix = 0 ; ix < 20; ix++) {
546 if(newEEStatus[ix][iy][
k] != oldEEStatus[ix][iy][
k]) {
549 daq_temp->
setValue( eeid, newEEStatus[ix][iy][k]);
550 if(m_debug)
std::cout <<
" change in EE side " << iz <<
" x " << ix +1 <<
" y " << iy + 1 << std::endl;
552 if(m_debug)
std::cout << newEEStatus[ix][iy][
k] <<
" " ;
553 oldEEStatus[ix][iy][
k] = newEEStatus[ix][iy][
k];
571 for(
int k = 0 ;
k < 2;
k++ ) {
573 for(
int iphi = 1 ; iphi < 73; iphi++) {
574 for(
int ieta = 1 ; ieta < 18; ieta++) {
577 uint16_t dbStatus = 0;
579 daq_pop->
setValue( ebid, dbStatus );
585 for(
int ix = 1 ; ix < 21; ix++) {
586 for(
int iy = 1 ; iy < 21; iy++) {
591 uint16_t dbStatus = 0;
592 if ( it != daq_temp->
end() ) {
593 dbStatus = it->getStatusCode();
595 daq_pop->
setValue( eeid, dbStatus );
603 std::cout <<
"Generating popcon record for run "<< irun << std::endl;
607 ss <<
"Run=" << irun <<
"_DAQchanged_"<<std::endl;
608 m_userTextLog = ss.str()+
";";
612 std::cout<<
"Run" << irun <<
" DAQ record was the same as previous run " << std::endl;
613 ss <<
"Run=" << irun <<
"_DAQunchanged_"<<std::endl;
614 m_userTextLog = ss.str()+
";";
625 if(m_debug)
std::cout <<
"Ecal - > end of getNewObjects -----------\n";
EcalDAQTowerStatusMap EcalDAQTowerStatus
static bool validDetId(int ix, int iy, int iz)
T getParameter(std::string const &) const
void setRunTypeDef(const RunTypeDef &runTypeDef)
std::vector< RunIOV > getRuns()
EcalDAQHandler(edm::ParameterSet const &)
edm::Ref< Container > Ref
const_iterator end() const
int hashedIndex() const
get a compact index for arrays [TODO: NEEDS WORK]
void setValue(const uint32_t id, const Item &item)
const_iterator find(uint32_t rawId) const
uint32_t rawId() const
get the raw id
void setLocationDef(const LocationDef &locDef)
void setRunType(std::string runtype)
const Item & barrel(size_t hashedIndex) const
static bool validDetId(int iz, EcalSubdetector sd, int i, int j)
check if a valid index combination
uint16_t OffDBStatus(uint16_t dbStatus, int pos)
void setLocation(std::string loc)
std::vector< Item >::const_iterator const_iterator
void setGeneralTag(std::string tag)
tuple size
Write out results.