aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Wang2025-03-28 12:04:48 -0500
committerAnthony Wang2025-03-28 12:04:48 -0500
commitcf7b4a878026da2e77de7c0ec4f0236396f55eb4 (patch)
tree939d061a85b07f89827cf6ac41aa5f57be9ba56a
Initial commitHEADmaster
-rw-r--r--README.md3
-rw-r--r--input41
-rw-r--r--main.cpp229
-rw-r--r--output1755
4 files changed, 2028 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..d6ad165
--- /dev/null
+++ b/README.md
@@ -0,0 +1,3 @@
+# MOO
+
+A circuit description language that I wrote in 2021 where MOO is NAND.
diff --git a/input b/input
new file mode 100644
index 0000000..fae69bb
--- /dev/null
+++ b/input
@@ -0,0 +1,41 @@
+def NOT x -> y
+ y = MOO x x
+fed
+def AND x y -> z
+ z = NOT MOO x y
+fed
+def OR x y -> z
+ # z = NOT AND NOT x NOT y
+ z = MOO ( NOT x NOT y )
+fed
+def XOR x y -> z
+ # z = AND OR x y NOT AND x y
+ z = AND ( OR x y ) ( MOO x y )
+fed
+def MUX x y b -> z
+ z = XOR ( AND x NOT b ) ( AND y b )
+fed
+def DEMUX x b -> y z
+ zero = XOR x x
+ y = MUX x zero b
+ z = MUX zero x b
+fed
+def IS_PALINDROME x 32 -> y
+ a_0 = NOT XOR x_0 x_0
+ loop i 16
+ a_i+1 = AND ( NOT XOR x_i x_31-i ) a_i
+ pool
+ y = AND a_16 a_16
+fed
+def ADD x 64 y 64 -> z 65
+ c_0 = XOR x_0 x_0
+ loop i 64
+ z_i = XOR ( XOR x_i y_i ) c_i
+ c_i+1 = OR ( OR ( AND x_i y_i ) ( AND x_i c_i ) ) ( AND y_i c_i )
+ pool
+ z_64 = c_64
+fed
+def MULTIPLY x 8 y 8 -> z 16
+ # uhhhhhhhh
+ z 65 = ADD x 64 x 64
+fed \ No newline at end of file
diff --git a/main.cpp b/main.cpp
new file mode 100644
index 0000000..258d51d
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,229 @@
+#include <bits/stdc++.h>
+#define f first
+#define s second
+using namespace std;
+using ll = long long;
+using ii = pair<int, int>;
+using str = string;
+
+int idx = 0;
+
+struct func {
+ vector<str> arg, ret, body;
+ // generate body with a and r substituted in as the arg and ret values
+ vector<str> sub(vector<str> & a, vector<str> & r) {
+ vector<str> res;
+ map<str, str> var;
+ for (str s : body) {
+ stringstream ss(s);
+ res.push_back("");
+ while (ss >> s) {
+ if (s == "=" || s == "MOO") {
+ res.back() += s + " ";
+ continue;
+ }
+ auto it = find(begin(arg), end(arg), s);
+ if (it != end(arg)) {
+ res.back() += a[it-begin(arg)] + " ";
+ continue;
+ }
+ it = find(begin(ret), end(ret), s);
+ if (it != end(ret)) {
+ res.back() += r[it-begin(ret)] + " ";
+ continue;
+ }
+ if (!var.count(s)) var[s] = to_string(++idx);
+ res.back() += var[s] + " ";
+ }
+ }
+ return res;
+ }
+ str remove_u(str & s) {
+ str res = s;
+ if (res.find('_') != -1)
+ res.erase(res.find('_'), 1);
+ return res;
+ }
+ void print() {
+ for (int i = 0; i < arg.size(); ++i) cout << ",("[i == 0] << remove_u(arg[i]);
+ cout << ")-";
+ for (int i = 0; i < ret.size(); ++i) cout << ",>"[i == 0] << remove_u(ret[i]);
+ cout << ":\n";
+ for (str s : body) {
+ stringstream ss(s);
+ int pos = 0;
+ while (ss >> s) {
+ if (pos && pos++ > 1) cout << ",";
+ cout << remove_u(s);
+ if (s == "MOO") cout << "(", pos = 1;
+ }
+ cout << ")\n";
+ }
+ }
+};
+
+map<str, func> M;
+
+int main() {
+ if (fopen("in", "r")) freopen("input", "r", stdin), freopen("output", "w", stdout);
+
+ // Initialize MOO function
+ func & F = M["MOO"];
+ F.arg.push_back("x"), F.arg.push_back("y");
+ F.ret.push_back("z");
+ F.body.push_back("z = MOO x y");
+
+ str s;
+ while (getline(cin, s)) {
+ stringstream ss(s);
+ ss >> s;
+ if (s == "def") { // function definition
+ str name; ss >> name;
+ func & F = M[name];
+ // support "arrays"
+ while (ss >> s, s != "->") { // args
+ try {
+ int n = stoi(s);
+ str ar = F.arg.back();
+ F.arg.pop_back();
+ for (int i = 0; i < n; ++i) F.arg.push_back(ar+"_"+to_string(i));
+ }
+ catch (...) {
+ F.arg.push_back(s);
+ }
+ }
+ while (ss >> s) { // return values
+ try {
+ int n = stoi(s);
+ str ar = F.ret.back();
+ F.ret.pop_back();
+ for (int i = 0; i < n; ++i) F.ret.push_back(ar+"_"+to_string(i));
+ }
+ catch (...) {
+ F.ret.push_back(s);
+ }
+ }
+
+ // Read in the body
+ vector<str> parse;
+ vector<pair<char, int>> loopinfo;
+ while (getline(cin, s), s != "fed") {
+ if (s.find('#') != -1) continue; // comment
+
+ if (s.find("loop") != -1) { // loop
+ parse.push_back("loop");
+ stringstream ss(s);
+ ss >> s;
+ char c; int n; ss >> c >> n;
+ loopinfo.emplace_back(c, n);
+ continue;
+ }
+
+ if (s.find("pool") != -1) { // end of loop
+ char c = loopinfo.back().f;
+ int n = loopinfo.back().s;
+ vector<vector<str>> reps(n);
+ vector<map<int, int>> loopvar(n);
+ while (parse.back() != "loop") {
+ for (int i = 0; i < n; ++i) {
+ str line = parse.back(), nline;
+ stringstream ss(line);
+ while (ss >> s) {
+ int pos_u = s.find('_'), pos_c = s.find(c);
+ str t = s;
+ if (pos_u != -1 && pos_c != -1) {
+ // parse array access
+ str var_name = s.substr(0, pos_u);
+ t = var_name+"_";
+ if (s.find('+') != -1) {
+ int pos_o = s.find('+');
+ str arg_a = s.substr(pos_u+1, pos_o-pos_u-1);
+ str arg_b = s.substr(pos_o+1);
+ t += to_string((arg_a[0] == c ? i : stoi(arg_a)) + (arg_b[0] == c ? i : stoi(arg_b)));
+ }
+ else if (s.find('-') != -1) {
+ int pos_o = s.find('-');
+ str arg_a = s.substr(pos_u+1, pos_o-pos_u-1);
+ str arg_b = s.substr(pos_o+1);
+ t += to_string((arg_a[0] == c ? i : stoi(arg_a)) - (arg_b[0] == c ? i : stoi(arg_b)));
+ }
+ else t += to_string(i);
+ }
+ else {
+ try {
+ int x = stoi(s);
+ if (!loopvar[i].count(x)) loopvar[i][x] = ++idx;
+ t = to_string(loopvar[i][x]);
+ }
+ catch (...) {}
+ }
+ nline += t + " ";
+ }
+ reps[i].push_back(nline);
+ }
+ parse.pop_back();
+ }
+ parse.pop_back(), loopinfo.pop_back();
+ for (int i = 0; i < n; ++i)
+ for (int j = reps[i].size()-1; j >= 0; --j) parse.push_back(reps[i][j]);
+ continue;
+ }
+
+
+ stringstream ss(s);
+ vector<str> R;
+ while (ss >> s, s != "=") R.push_back(s);
+
+ vector<str> st, fst;
+ vector<int> cnt(1, 0);
+ while (ss >> s) {
+ if (s == "(" || s == ")") continue; // parenthesis for readibility
+
+ try {
+ int n = stoi(s);
+ str ar = st.back();
+ st.pop_back();
+ for (int i = 0; i < n; ++i) st.push_back(ar+"_"+to_string(i));
+ }
+ catch (...) {
+ st.push_back(s);
+ }
+ if (M.count(s)) fst.push_back(s), cnt.push_back(0);
+ else ++cnt.back();
+ while (cnt.size() && fst.size() && cnt.back() == M[fst.back()].arg.size()) {
+ func & f = M[fst.back()]; // current func
+ vector<str> a;
+ while (st.back() != fst.back())
+ a.push_back(st.back()), st.pop_back();
+ reverse(begin(a), end(a));
+ vector<str> r(f.ret.size());
+ for (str & s : r) s = to_string(++idx);
+
+ vector<str> sub = M[fst.back()].sub(a, r);
+
+ for (str & s : sub) parse.push_back(s);
+ fst.pop_back(), st.pop_back(), cnt.pop_back();
+ for (str & s : r) st.push_back(s), ++cnt.back();
+ }
+ }
+
+ for (int i = 0; i < st.size(); ++i) {
+ for (int j = parse.size()-1; j >= 0; --j) {
+ int pos = parse[j].find(st[i]);
+ if (pos != -1 && pos < parse[j].find("=")) {
+ parse[j] = R[i] + parse[j].substr(st[i].size());
+ break;
+ }
+ }
+ }
+ }
+
+ F.body = parse;
+ cout << name;
+ F.print();
+ }
+ else {
+ // uhhhhh
+ }
+ }
+} \ No newline at end of file
diff --git a/output b/output
new file mode 100644
index 0000000..9ad5ab7
--- /dev/null
+++ b/output
@@ -0,0 +1,1755 @@
+NOT(x)->y:
+y=MOO(x,x)
+AND(x,y)->z:
+2=MOO(x,y)
+z=MOO(2,2)
+OR(x,y)->z:
+4=MOO(x,x)
+5=MOO(y,y)
+z=MOO(4,5)
+XOR(x,y)->z:
+8=MOO(x,x)
+9=MOO(y,y)
+7=MOO(8,9)
+10=MOO(x,y)
+12=MOO(7,10)
+z=MOO(12,12)
+MUX(x,y,b)->z:
+13=MOO(b,b)
+15=MOO(x,13)
+14=MOO(15,15)
+17=MOO(y,b)
+16=MOO(17,17)
+19=MOO(14,14)
+20=MOO(16,16)
+21=MOO(19,20)
+22=MOO(14,16)
+23=MOO(21,22)
+z=MOO(23,23)
+DEMUX(x,b)->y,z:
+25=MOO(x,x)
+26=MOO(x,x)
+27=MOO(25,26)
+28=MOO(x,x)
+29=MOO(27,28)
+zero=MOO(29,29)
+31=MOO(b,b)
+32=MOO(x,31)
+33=MOO(32,32)
+34=MOO(zero,b)
+35=MOO(34,34)
+36=MOO(33,33)
+37=MOO(35,35)
+38=MOO(36,37)
+39=MOO(33,35)
+40=MOO(38,39)
+y=MOO(40,40)
+42=MOO(b,b)
+43=MOO(zero,42)
+44=MOO(43,43)
+45=MOO(x,b)
+46=MOO(45,45)
+47=MOO(44,44)
+48=MOO(46,46)
+49=MOO(47,48)
+50=MOO(44,46)
+51=MOO(49,50)
+z=MOO(51,51)
+IS_PALINDROME(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31)->y:
+53=MOO(x0,x0)
+54=MOO(x0,x0)
+55=MOO(53,54)
+56=MOO(x0,x0)
+57=MOO(55,56)
+52=MOO(57,57)
+a0=MOO(52,52)
+164=MOO(x0,x0)
+165=MOO(x31,x31)
+132=MOO(164,165)
+133=MOO(x0,x31)
+116=MOO(132,133)
+100=MOO(116,116)
+84=MOO(100,100)
+68=MOO(84,a0)
+a1=MOO(68,68)
+166=MOO(x1,x1)
+167=MOO(x30,x30)
+134=MOO(166,167)
+135=MOO(x1,x30)
+117=MOO(134,135)
+101=MOO(117,117)
+85=MOO(101,101)
+69=MOO(85,a1)
+a2=MOO(69,69)
+168=MOO(x2,x2)
+169=MOO(x29,x29)
+136=MOO(168,169)
+137=MOO(x2,x29)
+118=MOO(136,137)
+102=MOO(118,118)
+86=MOO(102,102)
+70=MOO(86,a2)
+a3=MOO(70,70)
+170=MOO(x3,x3)
+171=MOO(x28,x28)
+138=MOO(170,171)
+139=MOO(x3,x28)
+119=MOO(138,139)
+103=MOO(119,119)
+87=MOO(103,103)
+71=MOO(87,a3)
+a4=MOO(71,71)
+172=MOO(x4,x4)
+173=MOO(x27,x27)
+140=MOO(172,173)
+141=MOO(x4,x27)
+120=MOO(140,141)
+104=MOO(120,120)
+88=MOO(104,104)
+72=MOO(88,a4)
+a5=MOO(72,72)
+174=MOO(x5,x5)
+175=MOO(x26,x26)
+142=MOO(174,175)
+143=MOO(x5,x26)
+121=MOO(142,143)
+105=MOO(121,121)
+89=MOO(105,105)
+73=MOO(89,a5)
+a6=MOO(73,73)
+176=MOO(x6,x6)
+177=MOO(x25,x25)
+144=MOO(176,177)
+145=MOO(x6,x25)
+122=MOO(144,145)
+106=MOO(122,122)
+90=MOO(106,106)
+74=MOO(90,a6)
+a7=MOO(74,74)
+178=MOO(x7,x7)
+179=MOO(x24,x24)
+146=MOO(178,179)
+147=MOO(x7,x24)
+123=MOO(146,147)
+107=MOO(123,123)
+91=MOO(107,107)
+75=MOO(91,a7)
+a8=MOO(75,75)
+180=MOO(x8,x8)
+181=MOO(x23,x23)
+148=MOO(180,181)
+149=MOO(x8,x23)
+124=MOO(148,149)
+108=MOO(124,124)
+92=MOO(108,108)
+76=MOO(92,a8)
+a9=MOO(76,76)
+182=MOO(x9,x9)
+183=MOO(x22,x22)
+150=MOO(182,183)
+151=MOO(x9,x22)
+125=MOO(150,151)
+109=MOO(125,125)
+93=MOO(109,109)
+77=MOO(93,a9)
+a10=MOO(77,77)
+184=MOO(x10,x10)
+185=MOO(x21,x21)
+152=MOO(184,185)
+153=MOO(x10,x21)
+126=MOO(152,153)
+110=MOO(126,126)
+94=MOO(110,110)
+78=MOO(94,a10)
+a11=MOO(78,78)
+186=MOO(x11,x11)
+187=MOO(x20,x20)
+154=MOO(186,187)
+155=MOO(x11,x20)
+127=MOO(154,155)
+111=MOO(127,127)
+95=MOO(111,111)
+79=MOO(95,a11)
+a12=MOO(79,79)
+188=MOO(x12,x12)
+189=MOO(x19,x19)
+156=MOO(188,189)
+157=MOO(x12,x19)
+128=MOO(156,157)
+112=MOO(128,128)
+96=MOO(112,112)
+80=MOO(96,a12)
+a13=MOO(80,80)
+190=MOO(x13,x13)
+191=MOO(x18,x18)
+158=MOO(190,191)
+159=MOO(x13,x18)
+129=MOO(158,159)
+113=MOO(129,129)
+97=MOO(113,113)
+81=MOO(97,a13)
+a14=MOO(81,81)
+192=MOO(x14,x14)
+193=MOO(x17,x17)
+160=MOO(192,193)
+161=MOO(x14,x17)
+130=MOO(160,161)
+114=MOO(130,130)
+98=MOO(114,114)
+82=MOO(98,a14)
+a15=MOO(82,82)
+194=MOO(x15,x15)
+195=MOO(x16,x16)
+162=MOO(194,195)
+163=MOO(x15,x16)
+131=MOO(162,163)
+115=MOO(131,131)
+99=MOO(115,115)
+83=MOO(99,a15)
+a16=MOO(83,83)
+197=MOO(a16,a16)
+y=MOO(197,197)
+ADD(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61,x62,x63,y0,y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16,y17,y18,y19,y20,y21,y22,y23,y24,y25,y26,y27,y28,y29,y30,y31,y32,y33,y34,y35,y36,y37,y38,y39,y40,y41,y42,y43,y44,y45,y46,y47,y48,y49,y50,y51,y52,y53,y54,y55,y56,y57,y58,y59,y60,y61,y62,y63)->z0,z1,z2,z3,z4,z5,z6,z7,z8,z9,z10,z11,z12,z13,z14,z15,z16,z17,z18,z19,z20,z21,z22,z23,z24,z25,z26,z27,z28,z29,z30,z31,z32,z33,z34,z35,z36,z37,z38,z39,z40,z41,z42,z43,z44,z45,z46,z47,z48,z49,z50,z51,z52,z53,z54,z55,z56,z57,z58,z59,z60,z61,z62,z63,z64:
+199=MOO(x0,x0)
+200=MOO(x0,x0)
+201=MOO(199,200)
+202=MOO(x0,x0)
+203=MOO(201,202)
+c0=MOO(203,203)
+1508=MOO(x0,x0)
+1509=MOO(y0,y0)
+1380=MOO(1508,1509)
+1381=MOO(x0,y0)
+1316=MOO(1380,1381)
+1124=MOO(1316,1316)
+1188=MOO(1124,1124)
+1189=MOO(c0,c0)
+996=MOO(1188,1189)
+997=MOO(1124,c0)
+932=MOO(996,997)
+z0=MOO(932,932)
+868=MOO(x0,y0)
+740=MOO(868,868)
+804=MOO(x0,c0)
+676=MOO(804,804)
+548=MOO(740,740)
+549=MOO(676,676)
+420=MOO(548,549)
+484=MOO(y0,c0)
+356=MOO(484,484)
+228=MOO(420,420)
+229=MOO(356,356)
+c1=MOO(228,229)
+1510=MOO(x1,x1)
+1511=MOO(y1,y1)
+1382=MOO(1510,1511)
+1383=MOO(x1,y1)
+1317=MOO(1382,1383)
+1125=MOO(1317,1317)
+1190=MOO(1125,1125)
+1191=MOO(c1,c1)
+998=MOO(1190,1191)
+999=MOO(1125,c1)
+933=MOO(998,999)
+z1=MOO(933,933)
+869=MOO(x1,y1)
+741=MOO(869,869)
+805=MOO(x1,c1)
+677=MOO(805,805)
+550=MOO(741,741)
+551=MOO(677,677)
+421=MOO(550,551)
+485=MOO(y1,c1)
+357=MOO(485,485)
+230=MOO(421,421)
+231=MOO(357,357)
+c2=MOO(230,231)
+1512=MOO(x2,x2)
+1513=MOO(y2,y2)
+1384=MOO(1512,1513)
+1385=MOO(x2,y2)
+1318=MOO(1384,1385)
+1126=MOO(1318,1318)
+1192=MOO(1126,1126)
+1193=MOO(c2,c2)
+1000=MOO(1192,1193)
+1001=MOO(1126,c2)
+934=MOO(1000,1001)
+z2=MOO(934,934)
+870=MOO(x2,y2)
+742=MOO(870,870)
+806=MOO(x2,c2)
+678=MOO(806,806)
+552=MOO(742,742)
+553=MOO(678,678)
+422=MOO(552,553)
+486=MOO(y2,c2)
+358=MOO(486,486)
+232=MOO(422,422)
+233=MOO(358,358)
+c3=MOO(232,233)
+1514=MOO(x3,x3)
+1515=MOO(y3,y3)
+1386=MOO(1514,1515)
+1387=MOO(x3,y3)
+1319=MOO(1386,1387)
+1127=MOO(1319,1319)
+1194=MOO(1127,1127)
+1195=MOO(c3,c3)
+1002=MOO(1194,1195)
+1003=MOO(1127,c3)
+935=MOO(1002,1003)
+z3=MOO(935,935)
+871=MOO(x3,y3)
+743=MOO(871,871)
+807=MOO(x3,c3)
+679=MOO(807,807)
+554=MOO(743,743)
+555=MOO(679,679)
+423=MOO(554,555)
+487=MOO(y3,c3)
+359=MOO(487,487)
+234=MOO(423,423)
+235=MOO(359,359)
+c4=MOO(234,235)
+1516=MOO(x4,x4)
+1517=MOO(y4,y4)
+1388=MOO(1516,1517)
+1389=MOO(x4,y4)
+1320=MOO(1388,1389)
+1128=MOO(1320,1320)
+1196=MOO(1128,1128)
+1197=MOO(c4,c4)
+1004=MOO(1196,1197)
+1005=MOO(1128,c4)
+936=MOO(1004,1005)
+z4=MOO(936,936)
+872=MOO(x4,y4)
+744=MOO(872,872)
+808=MOO(x4,c4)
+680=MOO(808,808)
+556=MOO(744,744)
+557=MOO(680,680)
+424=MOO(556,557)
+488=MOO(y4,c4)
+360=MOO(488,488)
+236=MOO(424,424)
+237=MOO(360,360)
+c5=MOO(236,237)
+1518=MOO(x5,x5)
+1519=MOO(y5,y5)
+1390=MOO(1518,1519)
+1391=MOO(x5,y5)
+1321=MOO(1390,1391)
+1129=MOO(1321,1321)
+1198=MOO(1129,1129)
+1199=MOO(c5,c5)
+1006=MOO(1198,1199)
+1007=MOO(1129,c5)
+937=MOO(1006,1007)
+z5=MOO(937,937)
+873=MOO(x5,y5)
+745=MOO(873,873)
+809=MOO(x5,c5)
+681=MOO(809,809)
+558=MOO(745,745)
+559=MOO(681,681)
+425=MOO(558,559)
+489=MOO(y5,c5)
+361=MOO(489,489)
+238=MOO(425,425)
+239=MOO(361,361)
+c6=MOO(238,239)
+1520=MOO(x6,x6)
+1521=MOO(y6,y6)
+1392=MOO(1520,1521)
+1393=MOO(x6,y6)
+1322=MOO(1392,1393)
+1130=MOO(1322,1322)
+1200=MOO(1130,1130)
+1201=MOO(c6,c6)
+1008=MOO(1200,1201)
+1009=MOO(1130,c6)
+938=MOO(1008,1009)
+z6=MOO(938,938)
+874=MOO(x6,y6)
+746=MOO(874,874)
+810=MOO(x6,c6)
+682=MOO(810,810)
+560=MOO(746,746)
+561=MOO(682,682)
+426=MOO(560,561)
+490=MOO(y6,c6)
+362=MOO(490,490)
+240=MOO(426,426)
+241=MOO(362,362)
+c7=MOO(240,241)
+1522=MOO(x7,x7)
+1523=MOO(y7,y7)
+1394=MOO(1522,1523)
+1395=MOO(x7,y7)
+1323=MOO(1394,1395)
+1131=MOO(1323,1323)
+1202=MOO(1131,1131)
+1203=MOO(c7,c7)
+1010=MOO(1202,1203)
+1011=MOO(1131,c7)
+939=MOO(1010,1011)
+z7=MOO(939,939)
+875=MOO(x7,y7)
+747=MOO(875,875)
+811=MOO(x7,c7)
+683=MOO(811,811)
+562=MOO(747,747)
+563=MOO(683,683)
+427=MOO(562,563)
+491=MOO(y7,c7)
+363=MOO(491,491)
+242=MOO(427,427)
+243=MOO(363,363)
+c8=MOO(242,243)
+1524=MOO(x8,x8)
+1525=MOO(y8,y8)
+1396=MOO(1524,1525)
+1397=MOO(x8,y8)
+1324=MOO(1396,1397)
+1132=MOO(1324,1324)
+1204=MOO(1132,1132)
+1205=MOO(c8,c8)
+1012=MOO(1204,1205)
+1013=MOO(1132,c8)
+940=MOO(1012,1013)
+z8=MOO(940,940)
+876=MOO(x8,y8)
+748=MOO(876,876)
+812=MOO(x8,c8)
+684=MOO(812,812)
+564=MOO(748,748)
+565=MOO(684,684)
+428=MOO(564,565)
+492=MOO(y8,c8)
+364=MOO(492,492)
+244=MOO(428,428)
+245=MOO(364,364)
+c9=MOO(244,245)
+1526=MOO(x9,x9)
+1527=MOO(y9,y9)
+1398=MOO(1526,1527)
+1399=MOO(x9,y9)
+1325=MOO(1398,1399)
+1133=MOO(1325,1325)
+1206=MOO(1133,1133)
+1207=MOO(c9,c9)
+1014=MOO(1206,1207)
+1015=MOO(1133,c9)
+941=MOO(1014,1015)
+z9=MOO(941,941)
+877=MOO(x9,y9)
+749=MOO(877,877)
+813=MOO(x9,c9)
+685=MOO(813,813)
+566=MOO(749,749)
+567=MOO(685,685)
+429=MOO(566,567)
+493=MOO(y9,c9)
+365=MOO(493,493)
+246=MOO(429,429)
+247=MOO(365,365)
+c10=MOO(246,247)
+1528=MOO(x10,x10)
+1529=MOO(y10,y10)
+1400=MOO(1528,1529)
+1401=MOO(x10,y10)
+1326=MOO(1400,1401)
+1134=MOO(1326,1326)
+1208=MOO(1134,1134)
+1209=MOO(c10,c10)
+1016=MOO(1208,1209)
+1017=MOO(1134,c10)
+942=MOO(1016,1017)
+z10=MOO(942,942)
+878=MOO(x10,y10)
+750=MOO(878,878)
+814=MOO(x10,c10)
+686=MOO(814,814)
+568=MOO(750,750)
+569=MOO(686,686)
+430=MOO(568,569)
+494=MOO(y10,c10)
+366=MOO(494,494)
+248=MOO(430,430)
+249=MOO(366,366)
+c11=MOO(248,249)
+1530=MOO(x11,x11)
+1531=MOO(y11,y11)
+1402=MOO(1530,1531)
+1403=MOO(x11,y11)
+1327=MOO(1402,1403)
+1135=MOO(1327,1327)
+1210=MOO(1135,1135)
+1211=MOO(c11,c11)
+1018=MOO(1210,1211)
+1019=MOO(1135,c11)
+943=MOO(1018,1019)
+z11=MOO(943,943)
+879=MOO(x11,y11)
+751=MOO(879,879)
+815=MOO(x11,c11)
+687=MOO(815,815)
+570=MOO(751,751)
+571=MOO(687,687)
+431=MOO(570,571)
+495=MOO(y11,c11)
+367=MOO(495,495)
+250=MOO(431,431)
+251=MOO(367,367)
+c12=MOO(250,251)
+1532=MOO(x12,x12)
+1533=MOO(y12,y12)
+1404=MOO(1532,1533)
+1405=MOO(x12,y12)
+1328=MOO(1404,1405)
+1136=MOO(1328,1328)
+1212=MOO(1136,1136)
+1213=MOO(c12,c12)
+1020=MOO(1212,1213)
+1021=MOO(1136,c12)
+944=MOO(1020,1021)
+z12=MOO(944,944)
+880=MOO(x12,y12)
+752=MOO(880,880)
+816=MOO(x12,c12)
+688=MOO(816,816)
+572=MOO(752,752)
+573=MOO(688,688)
+432=MOO(572,573)
+496=MOO(y12,c12)
+368=MOO(496,496)
+252=MOO(432,432)
+253=MOO(368,368)
+c13=MOO(252,253)
+1534=MOO(x13,x13)
+1535=MOO(y13,y13)
+1406=MOO(1534,1535)
+1407=MOO(x13,y13)
+1329=MOO(1406,1407)
+1137=MOO(1329,1329)
+1214=MOO(1137,1137)
+1215=MOO(c13,c13)
+1022=MOO(1214,1215)
+1023=MOO(1137,c13)
+945=MOO(1022,1023)
+z13=MOO(945,945)
+881=MOO(x13,y13)
+753=MOO(881,881)
+817=MOO(x13,c13)
+689=MOO(817,817)
+574=MOO(753,753)
+575=MOO(689,689)
+433=MOO(574,575)
+497=MOO(y13,c13)
+369=MOO(497,497)
+254=MOO(433,433)
+255=MOO(369,369)
+c14=MOO(254,255)
+1536=MOO(x14,x14)
+1537=MOO(y14,y14)
+1408=MOO(1536,1537)
+1409=MOO(x14,y14)
+1330=MOO(1408,1409)
+1138=MOO(1330,1330)
+1216=MOO(1138,1138)
+1217=MOO(c14,c14)
+1024=MOO(1216,1217)
+1025=MOO(1138,c14)
+946=MOO(1024,1025)
+z14=MOO(946,946)
+882=MOO(x14,y14)
+754=MOO(882,882)
+818=MOO(x14,c14)
+690=MOO(818,818)
+576=MOO(754,754)
+577=MOO(690,690)
+434=MOO(576,577)
+498=MOO(y14,c14)
+370=MOO(498,498)
+256=MOO(434,434)
+257=MOO(370,370)
+c15=MOO(256,257)
+1538=MOO(x15,x15)
+1539=MOO(y15,y15)
+1410=MOO(1538,1539)
+1411=MOO(x15,y15)
+1331=MOO(1410,1411)
+1139=MOO(1331,1331)
+1218=MOO(1139,1139)
+1219=MOO(c15,c15)
+1026=MOO(1218,1219)
+1027=MOO(1139,c15)
+947=MOO(1026,1027)
+z15=MOO(947,947)
+883=MOO(x15,y15)
+755=MOO(883,883)
+819=MOO(x15,c15)
+691=MOO(819,819)
+578=MOO(755,755)
+579=MOO(691,691)
+435=MOO(578,579)
+499=MOO(y15,c15)
+371=MOO(499,499)
+258=MOO(435,435)
+259=MOO(371,371)
+c16=MOO(258,259)
+1540=MOO(x16,x16)
+1541=MOO(y16,y16)
+1412=MOO(1540,1541)
+1413=MOO(x16,y16)
+1332=MOO(1412,1413)
+1140=MOO(1332,1332)
+1220=MOO(1140,1140)
+1221=MOO(c16,c16)
+1028=MOO(1220,1221)
+1029=MOO(1140,c16)
+948=MOO(1028,1029)
+z16=MOO(948,948)
+884=MOO(x16,y16)
+756=MOO(884,884)
+820=MOO(x16,c16)
+692=MOO(820,820)
+580=MOO(756,756)
+581=MOO(692,692)
+436=MOO(580,581)
+500=MOO(y16,c16)
+372=MOO(500,500)
+260=MOO(436,436)
+261=MOO(372,372)
+c17=MOO(260,261)
+1542=MOO(x17,x17)
+1543=MOO(y17,y17)
+1414=MOO(1542,1543)
+1415=MOO(x17,y17)
+1333=MOO(1414,1415)
+1141=MOO(1333,1333)
+1222=MOO(1141,1141)
+1223=MOO(c17,c17)
+1030=MOO(1222,1223)
+1031=MOO(1141,c17)
+949=MOO(1030,1031)
+z17=MOO(949,949)
+885=MOO(x17,y17)
+757=MOO(885,885)
+821=MOO(x17,c17)
+693=MOO(821,821)
+582=MOO(757,757)
+583=MOO(693,693)
+437=MOO(582,583)
+501=MOO(y17,c17)
+373=MOO(501,501)
+262=MOO(437,437)
+263=MOO(373,373)
+c18=MOO(262,263)
+1544=MOO(x18,x18)
+1545=MOO(y18,y18)
+1416=MOO(1544,1545)
+1417=MOO(x18,y18)
+1334=MOO(1416,1417)
+1142=MOO(1334,1334)
+1224=MOO(1142,1142)
+1225=MOO(c18,c18)
+1032=MOO(1224,1225)
+1033=MOO(1142,c18)
+950=MOO(1032,1033)
+z18=MOO(950,950)
+886=MOO(x18,y18)
+758=MOO(886,886)
+822=MOO(x18,c18)
+694=MOO(822,822)
+584=MOO(758,758)
+585=MOO(694,694)
+438=MOO(584,585)
+502=MOO(y18,c18)
+374=MOO(502,502)
+264=MOO(438,438)
+265=MOO(374,374)
+c19=MOO(264,265)
+1546=MOO(x19,x19)
+1547=MOO(y19,y19)
+1418=MOO(1546,1547)
+1419=MOO(x19,y19)
+1335=MOO(1418,1419)
+1143=MOO(1335,1335)
+1226=MOO(1143,1143)
+1227=MOO(c19,c19)
+1034=MOO(1226,1227)
+1035=MOO(1143,c19)
+951=MOO(1034,1035)
+z19=MOO(951,951)
+887=MOO(x19,y19)
+759=MOO(887,887)
+823=MOO(x19,c19)
+695=MOO(823,823)
+586=MOO(759,759)
+587=MOO(695,695)
+439=MOO(586,587)
+503=MOO(y19,c19)
+375=MOO(503,503)
+266=MOO(439,439)
+267=MOO(375,375)
+c20=MOO(266,267)
+1548=MOO(x20,x20)
+1549=MOO(y20,y20)
+1420=MOO(1548,1549)
+1421=MOO(x20,y20)
+1336=MOO(1420,1421)
+1144=MOO(1336,1336)
+1228=MOO(1144,1144)
+1229=MOO(c20,c20)
+1036=MOO(1228,1229)
+1037=MOO(1144,c20)
+952=MOO(1036,1037)
+z20=MOO(952,952)
+888=MOO(x20,y20)
+760=MOO(888,888)
+824=MOO(x20,c20)
+696=MOO(824,824)
+588=MOO(760,760)
+589=MOO(696,696)
+440=MOO(588,589)
+504=MOO(y20,c20)
+376=MOO(504,504)
+268=MOO(440,440)
+269=MOO(376,376)
+c21=MOO(268,269)
+1550=MOO(x21,x21)
+1551=MOO(y21,y21)
+1422=MOO(1550,1551)
+1423=MOO(x21,y21)
+1337=MOO(1422,1423)
+1145=MOO(1337,1337)
+1230=MOO(1145,1145)
+1231=MOO(c21,c21)
+1038=MOO(1230,1231)
+1039=MOO(1145,c21)
+953=MOO(1038,1039)
+z21=MOO(953,953)
+889=MOO(x21,y21)
+761=MOO(889,889)
+825=MOO(x21,c21)
+697=MOO(825,825)
+590=MOO(761,761)
+591=MOO(697,697)
+441=MOO(590,591)
+505=MOO(y21,c21)
+377=MOO(505,505)
+270=MOO(441,441)
+271=MOO(377,377)
+c22=MOO(270,271)
+1552=MOO(x22,x22)
+1553=MOO(y22,y22)
+1424=MOO(1552,1553)
+1425=MOO(x22,y22)
+1338=MOO(1424,1425)
+1146=MOO(1338,1338)
+1232=MOO(1146,1146)
+1233=MOO(c22,c22)
+1040=MOO(1232,1233)
+1041=MOO(1146,c22)
+954=MOO(1040,1041)
+z22=MOO(954,954)
+890=MOO(x22,y22)
+762=MOO(890,890)
+826=MOO(x22,c22)
+698=MOO(826,826)
+592=MOO(762,762)
+593=MOO(698,698)
+442=MOO(592,593)
+506=MOO(y22,c22)
+378=MOO(506,506)
+272=MOO(442,442)
+273=MOO(378,378)
+c23=MOO(272,273)
+1554=MOO(x23,x23)
+1555=MOO(y23,y23)
+1426=MOO(1554,1555)
+1427=MOO(x23,y23)
+1339=MOO(1426,1427)
+1147=MOO(1339,1339)
+1234=MOO(1147,1147)
+1235=MOO(c23,c23)
+1042=MOO(1234,1235)
+1043=MOO(1147,c23)
+955=MOO(1042,1043)
+z23=MOO(955,955)
+891=MOO(x23,y23)
+763=MOO(891,891)
+827=MOO(x23,c23)
+699=MOO(827,827)
+594=MOO(763,763)
+595=MOO(699,699)
+443=MOO(594,595)
+507=MOO(y23,c23)
+379=MOO(507,507)
+274=MOO(443,443)
+275=MOO(379,379)
+c24=MOO(274,275)
+1556=MOO(x24,x24)
+1557=MOO(y24,y24)
+1428=MOO(1556,1557)
+1429=MOO(x24,y24)
+1340=MOO(1428,1429)
+1148=MOO(1340,1340)
+1236=MOO(1148,1148)
+1237=MOO(c24,c24)
+1044=MOO(1236,1237)
+1045=MOO(1148,c24)
+956=MOO(1044,1045)
+z24=MOO(956,956)
+892=MOO(x24,y24)
+764=MOO(892,892)
+828=MOO(x24,c24)
+700=MOO(828,828)
+596=MOO(764,764)
+597=MOO(700,700)
+444=MOO(596,597)
+508=MOO(y24,c24)
+380=MOO(508,508)
+276=MOO(444,444)
+277=MOO(380,380)
+c25=MOO(276,277)
+1558=MOO(x25,x25)
+1559=MOO(y25,y25)
+1430=MOO(1558,1559)
+1431=MOO(x25,y25)
+1341=MOO(1430,1431)
+1149=MOO(1341,1341)
+1238=MOO(1149,1149)
+1239=MOO(c25,c25)
+1046=MOO(1238,1239)
+1047=MOO(1149,c25)
+957=MOO(1046,1047)
+z25=MOO(957,957)
+893=MOO(x25,y25)
+765=MOO(893,893)
+829=MOO(x25,c25)
+701=MOO(829,829)
+598=MOO(765,765)
+599=MOO(701,701)
+445=MOO(598,599)
+509=MOO(y25,c25)
+381=MOO(509,509)
+278=MOO(445,445)
+279=MOO(381,381)
+c26=MOO(278,279)
+1560=MOO(x26,x26)
+1561=MOO(y26,y26)
+1432=MOO(1560,1561)
+1433=MOO(x26,y26)
+1342=MOO(1432,1433)
+1150=MOO(1342,1342)
+1240=MOO(1150,1150)
+1241=MOO(c26,c26)
+1048=MOO(1240,1241)
+1049=MOO(1150,c26)
+958=MOO(1048,1049)
+z26=MOO(958,958)
+894=MOO(x26,y26)
+766=MOO(894,894)
+830=MOO(x26,c26)
+702=MOO(830,830)
+600=MOO(766,766)
+601=MOO(702,702)
+446=MOO(600,601)
+510=MOO(y26,c26)
+382=MOO(510,510)
+280=MOO(446,446)
+281=MOO(382,382)
+c27=MOO(280,281)
+1562=MOO(x27,x27)
+1563=MOO(y27,y27)
+1434=MOO(1562,1563)
+1435=MOO(x27,y27)
+1343=MOO(1434,1435)
+1151=MOO(1343,1343)
+1242=MOO(1151,1151)
+1243=MOO(c27,c27)
+1050=MOO(1242,1243)
+1051=MOO(1151,c27)
+959=MOO(1050,1051)
+z27=MOO(959,959)
+895=MOO(x27,y27)
+767=MOO(895,895)
+831=MOO(x27,c27)
+703=MOO(831,831)
+602=MOO(767,767)
+603=MOO(703,703)
+447=MOO(602,603)
+511=MOO(y27,c27)
+383=MOO(511,511)
+282=MOO(447,447)
+283=MOO(383,383)
+c28=MOO(282,283)
+1564=MOO(x28,x28)
+1565=MOO(y28,y28)
+1436=MOO(1564,1565)
+1437=MOO(x28,y28)
+1344=MOO(1436,1437)
+1152=MOO(1344,1344)
+1244=MOO(1152,1152)
+1245=MOO(c28,c28)
+1052=MOO(1244,1245)
+1053=MOO(1152,c28)
+960=MOO(1052,1053)
+z28=MOO(960,960)
+896=MOO(x28,y28)
+768=MOO(896,896)
+832=MOO(x28,c28)
+704=MOO(832,832)
+604=MOO(768,768)
+605=MOO(704,704)
+448=MOO(604,605)
+512=MOO(y28,c28)
+384=MOO(512,512)
+284=MOO(448,448)
+285=MOO(384,384)
+c29=MOO(284,285)
+1566=MOO(x29,x29)
+1567=MOO(y29,y29)
+1438=MOO(1566,1567)
+1439=MOO(x29,y29)
+1345=MOO(1438,1439)
+1153=MOO(1345,1345)
+1246=MOO(1153,1153)
+1247=MOO(c29,c29)
+1054=MOO(1246,1247)
+1055=MOO(1153,c29)
+961=MOO(1054,1055)
+z29=MOO(961,961)
+897=MOO(x29,y29)
+769=MOO(897,897)
+833=MOO(x29,c29)
+705=MOO(833,833)
+606=MOO(769,769)
+607=MOO(705,705)
+449=MOO(606,607)
+513=MOO(y29,c29)
+385=MOO(513,513)
+286=MOO(449,449)
+287=MOO(385,385)
+c30=MOO(286,287)
+1568=MOO(x30,x30)
+1569=MOO(y30,y30)
+1440=MOO(1568,1569)
+1441=MOO(x30,y30)
+1346=MOO(1440,1441)
+1154=MOO(1346,1346)
+1248=MOO(1154,1154)
+1249=MOO(c30,c30)
+1056=MOO(1248,1249)
+1057=MOO(1154,c30)
+962=MOO(1056,1057)
+z30=MOO(962,962)
+898=MOO(x30,y30)
+770=MOO(898,898)
+834=MOO(x30,c30)
+706=MOO(834,834)
+608=MOO(770,770)
+609=MOO(706,706)
+450=MOO(608,609)
+514=MOO(y30,c30)
+386=MOO(514,514)
+288=MOO(450,450)
+289=MOO(386,386)
+c31=MOO(288,289)
+1570=MOO(x31,x31)
+1571=MOO(y31,y31)
+1442=MOO(1570,1571)
+1443=MOO(x31,y31)
+1347=MOO(1442,1443)
+1155=MOO(1347,1347)
+1250=MOO(1155,1155)
+1251=MOO(c31,c31)
+1058=MOO(1250,1251)
+1059=MOO(1155,c31)
+963=MOO(1058,1059)
+z31=MOO(963,963)
+899=MOO(x31,y31)
+771=MOO(899,899)
+835=MOO(x31,c31)
+707=MOO(835,835)
+610=MOO(771,771)
+611=MOO(707,707)
+451=MOO(610,611)
+515=MOO(y31,c31)
+387=MOO(515,515)
+290=MOO(451,451)
+291=MOO(387,387)
+c32=MOO(290,291)
+1572=MOO(x32,x32)
+1573=MOO(y32,y32)
+1444=MOO(1572,1573)
+1445=MOO(x32,y32)
+1348=MOO(1444,1445)
+1156=MOO(1348,1348)
+1252=MOO(1156,1156)
+1253=MOO(c32,c32)
+1060=MOO(1252,1253)
+1061=MOO(1156,c32)
+964=MOO(1060,1061)
+z32=MOO(964,964)
+900=MOO(x32,y32)
+772=MOO(900,900)
+836=MOO(x32,c32)
+708=MOO(836,836)
+612=MOO(772,772)
+613=MOO(708,708)
+452=MOO(612,613)
+516=MOO(y32,c32)
+388=MOO(516,516)
+292=MOO(452,452)
+293=MOO(388,388)
+c33=MOO(292,293)
+1574=MOO(x33,x33)
+1575=MOO(y33,y33)
+1446=MOO(1574,1575)
+1447=MOO(x33,y33)
+1349=MOO(1446,1447)
+1157=MOO(1349,1349)
+1254=MOO(1157,1157)
+1255=MOO(c33,c33)
+1062=MOO(1254,1255)
+1063=MOO(1157,c33)
+965=MOO(1062,1063)
+z33=MOO(965,965)
+901=MOO(x33,y33)
+773=MOO(901,901)
+837=MOO(x33,c33)
+709=MOO(837,837)
+614=MOO(773,773)
+615=MOO(709,709)
+453=MOO(614,615)
+517=MOO(y33,c33)
+389=MOO(517,517)
+294=MOO(453,453)
+295=MOO(389,389)
+c34=MOO(294,295)
+1576=MOO(x34,x34)
+1577=MOO(y34,y34)
+1448=MOO(1576,1577)
+1449=MOO(x34,y34)
+1350=MOO(1448,1449)
+1158=MOO(1350,1350)
+1256=MOO(1158,1158)
+1257=MOO(c34,c34)
+1064=MOO(1256,1257)
+1065=MOO(1158,c34)
+966=MOO(1064,1065)
+z34=MOO(966,966)
+902=MOO(x34,y34)
+774=MOO(902,902)
+838=MOO(x34,c34)
+710=MOO(838,838)
+616=MOO(774,774)
+617=MOO(710,710)
+454=MOO(616,617)
+518=MOO(y34,c34)
+390=MOO(518,518)
+296=MOO(454,454)
+297=MOO(390,390)
+c35=MOO(296,297)
+1578=MOO(x35,x35)
+1579=MOO(y35,y35)
+1450=MOO(1578,1579)
+1451=MOO(x35,y35)
+1351=MOO(1450,1451)
+1159=MOO(1351,1351)
+1258=MOO(1159,1159)
+1259=MOO(c35,c35)
+1066=MOO(1258,1259)
+1067=MOO(1159,c35)
+967=MOO(1066,1067)
+z35=MOO(967,967)
+903=MOO(x35,y35)
+775=MOO(903,903)
+839=MOO(x35,c35)
+711=MOO(839,839)
+618=MOO(775,775)
+619=MOO(711,711)
+455=MOO(618,619)
+519=MOO(y35,c35)
+391=MOO(519,519)
+298=MOO(455,455)
+299=MOO(391,391)
+c36=MOO(298,299)
+1580=MOO(x36,x36)
+1581=MOO(y36,y36)
+1452=MOO(1580,1581)
+1453=MOO(x36,y36)
+1352=MOO(1452,1453)
+1160=MOO(1352,1352)
+1260=MOO(1160,1160)
+1261=MOO(c36,c36)
+1068=MOO(1260,1261)
+1069=MOO(1160,c36)
+968=MOO(1068,1069)
+z36=MOO(968,968)
+904=MOO(x36,y36)
+776=MOO(904,904)
+840=MOO(x36,c36)
+712=MOO(840,840)
+620=MOO(776,776)
+621=MOO(712,712)
+456=MOO(620,621)
+520=MOO(y36,c36)
+392=MOO(520,520)
+300=MOO(456,456)
+301=MOO(392,392)
+c37=MOO(300,301)
+1582=MOO(x37,x37)
+1583=MOO(y37,y37)
+1454=MOO(1582,1583)
+1455=MOO(x37,y37)
+1353=MOO(1454,1455)
+1161=MOO(1353,1353)
+1262=MOO(1161,1161)
+1263=MOO(c37,c37)
+1070=MOO(1262,1263)
+1071=MOO(1161,c37)
+969=MOO(1070,1071)
+z37=MOO(969,969)
+905=MOO(x37,y37)
+777=MOO(905,905)
+841=MOO(x37,c37)
+713=MOO(841,841)
+622=MOO(777,777)
+623=MOO(713,713)
+457=MOO(622,623)
+521=MOO(y37,c37)
+393=MOO(521,521)
+302=MOO(457,457)
+303=MOO(393,393)
+c38=MOO(302,303)
+1584=MOO(x38,x38)
+1585=MOO(y38,y38)
+1456=MOO(1584,1585)
+1457=MOO(x38,y38)
+1354=MOO(1456,1457)
+1162=MOO(1354,1354)
+1264=MOO(1162,1162)
+1265=MOO(c38,c38)
+1072=MOO(1264,1265)
+1073=MOO(1162,c38)
+970=MOO(1072,1073)
+z38=MOO(970,970)
+906=MOO(x38,y38)
+778=MOO(906,906)
+842=MOO(x38,c38)
+714=MOO(842,842)
+624=MOO(778,778)
+625=MOO(714,714)
+458=MOO(624,625)
+522=MOO(y38,c38)
+394=MOO(522,522)
+304=MOO(458,458)
+305=MOO(394,394)
+c39=MOO(304,305)
+1586=MOO(x39,x39)
+1587=MOO(y39,y39)
+1458=MOO(1586,1587)
+1459=MOO(x39,y39)
+1355=MOO(1458,1459)
+1163=MOO(1355,1355)
+1266=MOO(1163,1163)
+1267=MOO(c39,c39)
+1074=MOO(1266,1267)
+1075=MOO(1163,c39)
+971=MOO(1074,1075)
+z39=MOO(971,971)
+907=MOO(x39,y39)
+779=MOO(907,907)
+843=MOO(x39,c39)
+715=MOO(843,843)
+626=MOO(779,779)
+627=MOO(715,715)
+459=MOO(626,627)
+523=MOO(y39,c39)
+395=MOO(523,523)
+306=MOO(459,459)
+307=MOO(395,395)
+c40=MOO(306,307)
+1588=MOO(x40,x40)
+1589=MOO(y40,y40)
+1460=MOO(1588,1589)
+1461=MOO(x40,y40)
+1356=MOO(1460,1461)
+1164=MOO(1356,1356)
+1268=MOO(1164,1164)
+1269=MOO(c40,c40)
+1076=MOO(1268,1269)
+1077=MOO(1164,c40)
+972=MOO(1076,1077)
+z40=MOO(972,972)
+908=MOO(x40,y40)
+780=MOO(908,908)
+844=MOO(x40,c40)
+716=MOO(844,844)
+628=MOO(780,780)
+629=MOO(716,716)
+460=MOO(628,629)
+524=MOO(y40,c40)
+396=MOO(524,524)
+308=MOO(460,460)
+309=MOO(396,396)
+c41=MOO(308,309)
+1590=MOO(x41,x41)
+1591=MOO(y41,y41)
+1462=MOO(1590,1591)
+1463=MOO(x41,y41)
+1357=MOO(1462,1463)
+1165=MOO(1357,1357)
+1270=MOO(1165,1165)
+1271=MOO(c41,c41)
+1078=MOO(1270,1271)
+1079=MOO(1165,c41)
+973=MOO(1078,1079)
+z41=MOO(973,973)
+909=MOO(x41,y41)
+781=MOO(909,909)
+845=MOO(x41,c41)
+717=MOO(845,845)
+630=MOO(781,781)
+631=MOO(717,717)
+461=MOO(630,631)
+525=MOO(y41,c41)
+397=MOO(525,525)
+310=MOO(461,461)
+311=MOO(397,397)
+c42=MOO(310,311)
+1592=MOO(x42,x42)
+1593=MOO(y42,y42)
+1464=MOO(1592,1593)
+1465=MOO(x42,y42)
+1358=MOO(1464,1465)
+1166=MOO(1358,1358)
+1272=MOO(1166,1166)
+1273=MOO(c42,c42)
+1080=MOO(1272,1273)
+1081=MOO(1166,c42)
+974=MOO(1080,1081)
+z42=MOO(974,974)
+910=MOO(x42,y42)
+782=MOO(910,910)
+846=MOO(x42,c42)
+718=MOO(846,846)
+632=MOO(782,782)
+633=MOO(718,718)
+462=MOO(632,633)
+526=MOO(y42,c42)
+398=MOO(526,526)
+312=MOO(462,462)
+313=MOO(398,398)
+c43=MOO(312,313)
+1594=MOO(x43,x43)
+1595=MOO(y43,y43)
+1466=MOO(1594,1595)
+1467=MOO(x43,y43)
+1359=MOO(1466,1467)
+1167=MOO(1359,1359)
+1274=MOO(1167,1167)
+1275=MOO(c43,c43)
+1082=MOO(1274,1275)
+1083=MOO(1167,c43)
+975=MOO(1082,1083)
+z43=MOO(975,975)
+911=MOO(x43,y43)
+783=MOO(911,911)
+847=MOO(x43,c43)
+719=MOO(847,847)
+634=MOO(783,783)
+635=MOO(719,719)
+463=MOO(634,635)
+527=MOO(y43,c43)
+399=MOO(527,527)
+314=MOO(463,463)
+315=MOO(399,399)
+c44=MOO(314,315)
+1596=MOO(x44,x44)
+1597=MOO(y44,y44)
+1468=MOO(1596,1597)
+1469=MOO(x44,y44)
+1360=MOO(1468,1469)
+1168=MOO(1360,1360)
+1276=MOO(1168,1168)
+1277=MOO(c44,c44)
+1084=MOO(1276,1277)
+1085=MOO(1168,c44)
+976=MOO(1084,1085)
+z44=MOO(976,976)
+912=MOO(x44,y44)
+784=MOO(912,912)
+848=MOO(x44,c44)
+720=MOO(848,848)
+636=MOO(784,784)
+637=MOO(720,720)
+464=MOO(636,637)
+528=MOO(y44,c44)
+400=MOO(528,528)
+316=MOO(464,464)
+317=MOO(400,400)
+c45=MOO(316,317)
+1598=MOO(x45,x45)
+1599=MOO(y45,y45)
+1470=MOO(1598,1599)
+1471=MOO(x45,y45)
+1361=MOO(1470,1471)
+1169=MOO(1361,1361)
+1278=MOO(1169,1169)
+1279=MOO(c45,c45)
+1086=MOO(1278,1279)
+1087=MOO(1169,c45)
+977=MOO(1086,1087)
+z45=MOO(977,977)
+913=MOO(x45,y45)
+785=MOO(913,913)
+849=MOO(x45,c45)
+721=MOO(849,849)
+638=MOO(785,785)
+639=MOO(721,721)
+465=MOO(638,639)
+529=MOO(y45,c45)
+401=MOO(529,529)
+318=MOO(465,465)
+319=MOO(401,401)
+c46=MOO(318,319)
+1600=MOO(x46,x46)
+1601=MOO(y46,y46)
+1472=MOO(1600,1601)
+1473=MOO(x46,y46)
+1362=MOO(1472,1473)
+1170=MOO(1362,1362)
+1280=MOO(1170,1170)
+1281=MOO(c46,c46)
+1088=MOO(1280,1281)
+1089=MOO(1170,c46)
+978=MOO(1088,1089)
+z46=MOO(978,978)
+914=MOO(x46,y46)
+786=MOO(914,914)
+850=MOO(x46,c46)
+722=MOO(850,850)
+640=MOO(786,786)
+641=MOO(722,722)
+466=MOO(640,641)
+530=MOO(y46,c46)
+402=MOO(530,530)
+320=MOO(466,466)
+321=MOO(402,402)
+c47=MOO(320,321)
+1602=MOO(x47,x47)
+1603=MOO(y47,y47)
+1474=MOO(1602,1603)
+1475=MOO(x47,y47)
+1363=MOO(1474,1475)
+1171=MOO(1363,1363)
+1282=MOO(1171,1171)
+1283=MOO(c47,c47)
+1090=MOO(1282,1283)
+1091=MOO(1171,c47)
+979=MOO(1090,1091)
+z47=MOO(979,979)
+915=MOO(x47,y47)
+787=MOO(915,915)
+851=MOO(x47,c47)
+723=MOO(851,851)
+642=MOO(787,787)
+643=MOO(723,723)
+467=MOO(642,643)
+531=MOO(y47,c47)
+403=MOO(531,531)
+322=MOO(467,467)
+323=MOO(403,403)
+c48=MOO(322,323)
+1604=MOO(x48,x48)
+1605=MOO(y48,y48)
+1476=MOO(1604,1605)
+1477=MOO(x48,y48)
+1364=MOO(1476,1477)
+1172=MOO(1364,1364)
+1284=MOO(1172,1172)
+1285=MOO(c48,c48)
+1092=MOO(1284,1285)
+1093=MOO(1172,c48)
+980=MOO(1092,1093)
+z48=MOO(980,980)
+916=MOO(x48,y48)
+788=MOO(916,916)
+852=MOO(x48,c48)
+724=MOO(852,852)
+644=MOO(788,788)
+645=MOO(724,724)
+468=MOO(644,645)
+532=MOO(y48,c48)
+404=MOO(532,532)
+324=MOO(468,468)
+325=MOO(404,404)
+c49=MOO(324,325)
+1606=MOO(x49,x49)
+1607=MOO(y49,y49)
+1478=MOO(1606,1607)
+1479=MOO(x49,y49)
+1365=MOO(1478,1479)
+1173=MOO(1365,1365)
+1286=MOO(1173,1173)
+1287=MOO(c49,c49)
+1094=MOO(1286,1287)
+1095=MOO(1173,c49)
+981=MOO(1094,1095)
+z49=MOO(981,981)
+917=MOO(x49,y49)
+789=MOO(917,917)
+853=MOO(x49,c49)
+725=MOO(853,853)
+646=MOO(789,789)
+647=MOO(725,725)
+469=MOO(646,647)
+533=MOO(y49,c49)
+405=MOO(533,533)
+326=MOO(469,469)
+327=MOO(405,405)
+c50=MOO(326,327)
+1608=MOO(x50,x50)
+1609=MOO(y50,y50)
+1480=MOO(1608,1609)
+1481=MOO(x50,y50)
+1366=MOO(1480,1481)
+1174=MOO(1366,1366)
+1288=MOO(1174,1174)
+1289=MOO(c50,c50)
+1096=MOO(1288,1289)
+1097=MOO(1174,c50)
+982=MOO(1096,1097)
+z50=MOO(982,982)
+918=MOO(x50,y50)
+790=MOO(918,918)
+854=MOO(x50,c50)
+726=MOO(854,854)
+648=MOO(790,790)
+649=MOO(726,726)
+470=MOO(648,649)
+534=MOO(y50,c50)
+406=MOO(534,534)
+328=MOO(470,470)
+329=MOO(406,406)
+c51=MOO(328,329)
+1610=MOO(x51,x51)
+1611=MOO(y51,y51)
+1482=MOO(1610,1611)
+1483=MOO(x51,y51)
+1367=MOO(1482,1483)
+1175=MOO(1367,1367)
+1290=MOO(1175,1175)
+1291=MOO(c51,c51)
+1098=MOO(1290,1291)
+1099=MOO(1175,c51)
+983=MOO(1098,1099)
+z51=MOO(983,983)
+919=MOO(x51,y51)
+791=MOO(919,919)
+855=MOO(x51,c51)
+727=MOO(855,855)
+650=MOO(791,791)
+651=MOO(727,727)
+471=MOO(650,651)
+535=MOO(y51,c51)
+407=MOO(535,535)
+330=MOO(471,471)
+331=MOO(407,407)
+c52=MOO(330,331)
+1612=MOO(x52,x52)
+1613=MOO(y52,y52)
+1484=MOO(1612,1613)
+1485=MOO(x52,y52)
+1368=MOO(1484,1485)
+1176=MOO(1368,1368)
+1292=MOO(1176,1176)
+1293=MOO(c52,c52)
+1100=MOO(1292,1293)
+1101=MOO(1176,c52)
+984=MOO(1100,1101)
+z52=MOO(984,984)
+920=MOO(x52,y52)
+792=MOO(920,920)
+856=MOO(x52,c52)
+728=MOO(856,856)
+652=MOO(792,792)
+653=MOO(728,728)
+472=MOO(652,653)
+536=MOO(y52,c52)
+408=MOO(536,536)
+332=MOO(472,472)
+333=MOO(408,408)
+c53=MOO(332,333)
+1614=MOO(x53,x53)
+1615=MOO(y53,y53)
+1486=MOO(1614,1615)
+1487=MOO(x53,y53)
+1369=MOO(1486,1487)
+1177=MOO(1369,1369)
+1294=MOO(1177,1177)
+1295=MOO(c53,c53)
+1102=MOO(1294,1295)
+1103=MOO(1177,c53)
+985=MOO(1102,1103)
+z53=MOO(985,985)
+921=MOO(x53,y53)
+793=MOO(921,921)
+857=MOO(x53,c53)
+729=MOO(857,857)
+654=MOO(793,793)
+655=MOO(729,729)
+473=MOO(654,655)
+537=MOO(y53,c53)
+409=MOO(537,537)
+334=MOO(473,473)
+335=MOO(409,409)
+c54=MOO(334,335)
+1616=MOO(x54,x54)
+1617=MOO(y54,y54)
+1488=MOO(1616,1617)
+1489=MOO(x54,y54)
+1370=MOO(1488,1489)
+1178=MOO(1370,1370)
+1296=MOO(1178,1178)
+1297=MOO(c54,c54)
+1104=MOO(1296,1297)
+1105=MOO(1178,c54)
+986=MOO(1104,1105)
+z54=MOO(986,986)
+922=MOO(x54,y54)
+794=MOO(922,922)
+858=MOO(x54,c54)
+730=MOO(858,858)
+656=MOO(794,794)
+657=MOO(730,730)
+474=MOO(656,657)
+538=MOO(y54,c54)
+410=MOO(538,538)
+336=MOO(474,474)
+337=MOO(410,410)
+c55=MOO(336,337)
+1618=MOO(x55,x55)
+1619=MOO(y55,y55)
+1490=MOO(1618,1619)
+1491=MOO(x55,y55)
+1371=MOO(1490,1491)
+1179=MOO(1371,1371)
+1298=MOO(1179,1179)
+1299=MOO(c55,c55)
+1106=MOO(1298,1299)
+1107=MOO(1179,c55)
+987=MOO(1106,1107)
+z55=MOO(987,987)
+923=MOO(x55,y55)
+795=MOO(923,923)
+859=MOO(x55,c55)
+731=MOO(859,859)
+658=MOO(795,795)
+659=MOO(731,731)
+475=MOO(658,659)
+539=MOO(y55,c55)
+411=MOO(539,539)
+338=MOO(475,475)
+339=MOO(411,411)
+c56=MOO(338,339)
+1620=MOO(x56,x56)
+1621=MOO(y56,y56)
+1492=MOO(1620,1621)
+1493=MOO(x56,y56)
+1372=MOO(1492,1493)
+1180=MOO(1372,1372)
+1300=MOO(1180,1180)
+1301=MOO(c56,c56)
+1108=MOO(1300,1301)
+1109=MOO(1180,c56)
+988=MOO(1108,1109)
+z56=MOO(988,988)
+924=MOO(x56,y56)
+796=MOO(924,924)
+860=MOO(x56,c56)
+732=MOO(860,860)
+660=MOO(796,796)
+661=MOO(732,732)
+476=MOO(660,661)
+540=MOO(y56,c56)
+412=MOO(540,540)
+340=MOO(476,476)
+341=MOO(412,412)
+c57=MOO(340,341)
+1622=MOO(x57,x57)
+1623=MOO(y57,y57)
+1494=MOO(1622,1623)
+1495=MOO(x57,y57)
+1373=MOO(1494,1495)
+1181=MOO(1373,1373)
+1302=MOO(1181,1181)
+1303=MOO(c57,c57)
+1110=MOO(1302,1303)
+1111=MOO(1181,c57)
+989=MOO(1110,1111)
+z57=MOO(989,989)
+925=MOO(x57,y57)
+797=MOO(925,925)
+861=MOO(x57,c57)
+733=MOO(861,861)
+662=MOO(797,797)
+663=MOO(733,733)
+477=MOO(662,663)
+541=MOO(y57,c57)
+413=MOO(541,541)
+342=MOO(477,477)
+343=MOO(413,413)
+c58=MOO(342,343)
+1624=MOO(x58,x58)
+1625=MOO(y58,y58)
+1496=MOO(1624,1625)
+1497=MOO(x58,y58)
+1374=MOO(1496,1497)
+1182=MOO(1374,1374)
+1304=MOO(1182,1182)
+1305=MOO(c58,c58)
+1112=MOO(1304,1305)
+1113=MOO(1182,c58)
+990=MOO(1112,1113)
+z58=MOO(990,990)
+926=MOO(x58,y58)
+798=MOO(926,926)
+862=MOO(x58,c58)
+734=MOO(862,862)
+664=MOO(798,798)
+665=MOO(734,734)
+478=MOO(664,665)
+542=MOO(y58,c58)
+414=MOO(542,542)
+344=MOO(478,478)
+345=MOO(414,414)
+c59=MOO(344,345)
+1626=MOO(x59,x59)
+1627=MOO(y59,y59)
+1498=MOO(1626,1627)
+1499=MOO(x59,y59)
+1375=MOO(1498,1499)
+1183=MOO(1375,1375)
+1306=MOO(1183,1183)
+1307=MOO(c59,c59)
+1114=MOO(1306,1307)
+1115=MOO(1183,c59)
+991=MOO(1114,1115)
+z59=MOO(991,991)
+927=MOO(x59,y59)
+799=MOO(927,927)
+863=MOO(x59,c59)
+735=MOO(863,863)
+666=MOO(799,799)
+667=MOO(735,735)
+479=MOO(666,667)
+543=MOO(y59,c59)
+415=MOO(543,543)
+346=MOO(479,479)
+347=MOO(415,415)
+c60=MOO(346,347)
+1628=MOO(x60,x60)
+1629=MOO(y60,y60)
+1500=MOO(1628,1629)
+1501=MOO(x60,y60)
+1376=MOO(1500,1501)
+1184=MOO(1376,1376)
+1308=MOO(1184,1184)
+1309=MOO(c60,c60)
+1116=MOO(1308,1309)
+1117=MOO(1184,c60)
+992=MOO(1116,1117)
+z60=MOO(992,992)
+928=MOO(x60,y60)
+800=MOO(928,928)
+864=MOO(x60,c60)
+736=MOO(864,864)
+668=MOO(800,800)
+669=MOO(736,736)
+480=MOO(668,669)
+544=MOO(y60,c60)
+416=MOO(544,544)
+348=MOO(480,480)
+349=MOO(416,416)
+c61=MOO(348,349)
+1630=MOO(x61,x61)
+1631=MOO(y61,y61)
+1502=MOO(1630,1631)
+1503=MOO(x61,y61)
+1377=MOO(1502,1503)
+1185=MOO(1377,1377)
+1310=MOO(1185,1185)
+1311=MOO(c61,c61)
+1118=MOO(1310,1311)
+1119=MOO(1185,c61)
+993=MOO(1118,1119)
+z61=MOO(993,993)
+929=MOO(x61,y61)
+801=MOO(929,929)
+865=MOO(x61,c61)
+737=MOO(865,865)
+670=MOO(801,801)
+671=MOO(737,737)
+481=MOO(670,671)
+545=MOO(y61,c61)
+417=MOO(545,545)
+350=MOO(481,481)
+351=MOO(417,417)
+c62=MOO(350,351)
+1632=MOO(x62,x62)
+1633=MOO(y62,y62)
+1504=MOO(1632,1633)
+1505=MOO(x62,y62)
+1378=MOO(1504,1505)
+1186=MOO(1378,1378)
+1312=MOO(1186,1186)
+1313=MOO(c62,c62)
+1120=MOO(1312,1313)
+1121=MOO(1186,c62)
+994=MOO(1120,1121)
+z62=MOO(994,994)
+930=MOO(x62,y62)
+802=MOO(930,930)
+866=MOO(x62,c62)
+738=MOO(866,866)
+672=MOO(802,802)
+673=MOO(738,738)
+482=MOO(672,673)
+546=MOO(y62,c62)
+418=MOO(546,546)
+352=MOO(482,482)
+353=MOO(418,418)
+c63=MOO(352,353)
+1634=MOO(x63,x63)
+1635=MOO(y63,y63)
+1506=MOO(1634,1635)
+1507=MOO(x63,y63)
+1379=MOO(1506,1507)
+1187=MOO(1379,1379)
+1314=MOO(1187,1187)
+1315=MOO(c63,c63)
+1122=MOO(1314,1315)
+1123=MOO(1187,c63)
+995=MOO(1122,1123)
+z63=MOO(995,995)
+931=MOO(x63,y63)
+803=MOO(931,931)
+867=MOO(x63,c63)
+739=MOO(867,867)
+674=MOO(803,803)
+675=MOO(739,739)
+483=MOO(674,675)
+547=MOO(y63,c63)
+419=MOO(547,547)
+354=MOO(483,483)
+355=MOO(419,419)
+z64=MOO(354,355)
+MULTIPLY(x0,x1,x2,x3,x4,x5,x6,x7,y0,y1,y2,y3,y4,y5,y6,y7)->z0,z1,z2,z3,z4,z5,z6,z7,z8,z9,z10,z11,z12,z13,z14,z15: