"use strict"; // Virtual machine let has = x => x!==undefined; let isnum = x => typeof x === "number" let isfunc = x => typeof x === "function" let call = (f,x,w) => { if (x===undefined) return x; if (!isfunc(f)) return f; if (f.m) throw Error("Runtime: Cannot call modifier as function"); return f(x, w); } let getrev = names => { let m=names.rev; if (m) return m; m={}; names.forEach((s,i)=>m[s]=i); return names.rev=m; } let nsget = x => { let rev = getrev(x.ns.names); return s => (i=>has(i)?x[x.ns[i]]:i)(rev[s]); } let findkey = (ns, names, i) => { let nn=ns.names; return ns[nn===names ? i : getrev(nn)[names[i]]]; } let readns_sub = (v, names, i) => { let ni = findkey(v.ns, names, i); if (!has(ni)) throw Error("Unknown namespace key: "+names[i]); return v[ni]; } let readns_assign = (v, vid, i) => readns_sub(v, vid.names, vid[i]); let readns = (v, vid, i) => { if (!v.ns) throw Error("Key lookup in non-namespace"); return readns_sub(v, vid.names, i); } let makens = (keys, vals) => { let n = Array(keys.length).fill().map((_,i)=>i); n.names=keys.map(k=>k.toLowerCase()); vals.ns=n; return vals; } let obj2ns = (obj, keys, f) => makens(keys, keys.map(k=>(f?f:(v=>v))(obj[k]))); let listkeys = x => { let s=x.ns, k=Object.keys(s).filter(n=>!isNaN(n)); return k.map(n=>s.names[+n]).sort(); } let getv= (a,i) => { let v=a[i]; if (v===null) throw Error("Runtime: Variable referenced before definition"); return v; } let get = x => x.e ? getv(x.e,x.p) : arr(x.map(c=>get(c)), x.sh); let set = (d, id, v) => { let eq = (a,b) => a.length===b.length && a.every((e,i)=>e===b[i]); if (id.e) { if (!d && id.e[id.p]===null) throw Error("↩: Variable modified before definition"); id.e[id.p] = v; } else if (id.match) { if (has(id.v) && !call(runtime[18],id.v,v)) throw Error(); } else { if (v.sh) { if (!eq(id.sh,v.sh)) throw Error("← or ↩: Target and value shapes don't match"); id.map((n,j)=>set(d,n,v[j])); } else if (v.ns) { id.map(n=>{ if (n.e) { let vid=n.e.vid; set(d,n,readns_assign(v, vid, n.p)); } else if (n.m) { set(d, n.m, readns(v, n.vid, n.a)); } else { throw Error("← or ↩: Cannot extract non-name from namespace"); } }); } else { throw Error("← or ↩: Multiple targets but atomic value"); } } return v; } let chkM = (v,m) => { if (m.m!==v) throw Error("Runtime: Only a "+v+"-modifier can be called as a "+v+"-modifier"); } let genjs = (B, p, L) => { // Bytecode -> Javascript compiler let rD = 0; let r = L?"let l=0;try{":""; let fin = L?"}catch(er){let s=L.map(p=>p[l]);s.sh=[1,2];let m=[s,er.message];m.loc=1;m.src=e.vid.src;m.sh=[2];er.message=m;throw er;}":""; let szM = 1; let rV = n => { szM=Math.max(szM,n+1); return 'v'+n; }; let rP = val => rV(rD++) + "="+val+";"; let rG = () => rV(--rD); let num = () => { return B[p++]; } let ge = n => "e"+".p".repeat(n); loop: while(true) { r+="\n"; if (p>B.length) throw Error("Internal compiler error: Unclosed function"); if (L) r+="l="+p+";"; switch(B[p++]) { case 0: { r+= rP("O["+num()+"]"); break; } case 1: { r+= rP("D["+num()+"](e)"); break; } case 6: { rD--; break; } case 7: { if(rD!==1) throw Error("Internal compiler error: Wrong stack size"); r+= "return v0;"; break loop; } case 8: { r+= "e.ns=e.vid.ns;return e;"; break loop; } case 11:case 12: { let n=num(); rD-= n; r+=rP("llst(["+(new Array(n).fill().map((_,i)=>rV(rD+i)).join(","))+"])"); break; } case 16:case 18: { let f=rG(),x=rG(); r+=rP("call("+f+","+x +")"); break; } case 17:case 19: { let w=rG(),f=rG(),x=rG(); r+=rP("call("+f+","+x+","+w+")"); break; } case 20: { let g=rG(),h=rG(); r+=rP("train2(" +g+","+h+")"); break; } case 21:case 23: { let f=rG(),g=rG(),h=rG(); r+=rP("train3("+f+","+g+","+h+")"); break; } case 26: { let f=rG(),m=rG(); r+="chkM(1,"+m+");"+rP(m+"("+f +")"); break; } case 27: { let f=rG(),m=rG(),g=rG(); r+="chkM(2,"+m+");"+rP(m+"("+f+","+g+")"); break; } case 22: { r+= "if(undefined==="+rV(rD-1)+")throw Error('Left argument required');"; break; } case 32:case 34: { r+= rP("getv("+ge(num())+","+num()+")"); break; } case 33: { r+= rP("{e:"+ge(num())+",p:"+num()+"}"); break; } case 42: { let p=rG(); r+="if(1!=="+p+"){if(0!=="+p+")throw Error('Predicate value must be 0 or 1');break;}"; break; } case 43: { let m=rG(); r+=rP("{match:1,v:"+m+"}"); break; } case 44: { r+=rP("{match:1}"); break; } case 47: { let i=rG(), v=rG(); r+="try{set(1,"+i+","+v+");}catch(e){break;}"; break; } case 48: { let i=rG(), v=rG(); r+=rP("set(1,"+i+","+v +")"); break; } case 49: { let i=rG(), v=rG(); r+=rP("set(0,"+i+","+v +")"); break; } case 50: { let i=rG(),f=rG(),x=rG(); r+=rP("set(0,"+i+",call("+f+","+x+",get("+i+")))"); break; } case 51: { let i=rG(),f=rG() ; r+=rP("set(0,"+i+",call("+f+ ",get("+i+")))"); break; } case 66: { let m=rG(); r+=rP("{vid:e.vid,m:"+m+",a:"+num()+"}"); break; } case 64: { let v=rG(); r+=rP("readns("+v+",e.vid,"+num()+")"); break; } } } return "let "+new Array(szM).fill().map((_,i)=>rV(i)).join(',')+";"+r+fin; } let run = (B,O,F,S,L,T,src,env) => { // Bytecode, Objects, Blocks, Bodies, Locations, Tokenization, source let train2=( g,h)=>{ let t=(x,w)=>call(g,call(h,x,w)); t.repr=()=>[2, g,h];return t;} let train3=(f,g,h)=>{if(!has(f))return train2(g,h);let t=(x,w)=>call(g,call(h,x,w),call(f,x,w));t.repr=()=>[3,f,g,h];return t;} let repdf = ["","4,f,mod","5,f,mod,g"].map(s=>s?"fn.repr=()=>["+s+"];":s); let D = F.map(([type,imm,ind],i) => { let I = imm ? 0 : 3; // Operand start let sp = (type===0?0:type+1) + I; let useenv = i===0 && env; let gen = j => { let [pos,varam,vid,vex] = S[j]; let ns = {}; if (vex) vex.forEach((e,j)=>{if(e)ns[vid[j]]=j+sp;}); vid = (new Array(sp).fill(null)).concat(vid); vid.src=src; vid.ns=ns; if (T) ns.names = vid.names = T[2][0].map(s=>s.join("")); return [genjs(B, pos, L), vid]; } let c,vid,def; if (isnum(ind)) { [c,vid] = gen(ind); c="do {"+c+"} while (0);\nthrow Error('No matching case');\n"; if (useenv) { c = "const e=env;"+c; env.vid=vid; } else if (imm) c = "const e=[...e2];e.vid=vid;e.p=oe;"+c; else c = "const fn=(x, w)=>{const e=[...e2];e.vid=vid;e.p=oe;e[0]=fn;e[1]=x;e[2]=w;"+c+"};"+repdf[type]+"return fn;"; def = useenv ? "env" : ("new Array("+vid.length+").fill(null)"); } else { if (imm !== +(ind.length<2)) throw "Internal error: malformed block info"; let cache=[]; // Avoid generating a shared case twice vid=[]; let g = j => { let [c,v] = cache[j] || (cache[j] = gen(j)); c = "const e=[...e1];e.vid=vid["+vid.length+"];e.p=oe;e.length="+v.length+";e.fill(null,"+sp+");"+c; vid.push(v); return "do {"+c+"} while (0);\n" } if (ind.length===3) ind[3]=[]; let cases = ind.map((js,i) => { let e = js.length?"No matching case":"Left argument "+(i?"not allowed":"required"); return js.map(g).concat(["throw Error('"+e+"');\n"]).join(""); }); let fn = b => "(x, w)=>{const e1=[...e2];e1[0]=fn;e1[1]=x;e1[2]=w;\n"+b+"\n};"; let combine = ([mon,dy]) => fn("if (w===undefined) {\n"+mon+"} else {\n"+dy+"}"); def = "new Array("+sp+").fill(null)"; if (imm) c = "const e1=[...e2];"+cases[0]; else { c = "const fn="+combine(cases)+repdf[type]; if (cases.length > 2) { c += "fn.inverse="+combine(cases.slice(2)); if (cases[4]) c += "fn.sinverse="+fn("if(!has(w))throw Error('No matching case');"+cases[4]); } c += "return fn;"; } } let de2 = "let e2="+def+";" if (type===0) c = de2+c; if (type===1) c = "const mod=(f ) => {"+de2+" e2["+I+"]=mod;e2["+(I+1)+"]=f;" +c+"}; mod.m=1;return mod;"; if (type===2) c = "const mod=(f,g) => {"+de2+" e2["+I+"]=mod;e2["+(I+1)+"]=f;e2["+(I+2)+"]=g;"+c+"}; mod.m=2;return mod;"; return Function("'use strict'; return (chkM,has,call,getv,get,set,llst,train2,train3,readns,O,L,env,vid) => D => oe => {"+c+"};")() (chkM,has,call,getv,get,set,llst,train2,train3,readns,O,L,env,vid); }); D.forEach((d,i) => {D[i]=d(D)}); return D[0]([]); } // Runtime let assertFn = pre => (x,w) => { if (x!==1) throw {kind:pre, message:has(w)?w:x}; return x; } let arr = (r,sh,fill) => {r.sh=sh;r.fill=fill;return r;} let list = (l,fill) => arr(l,[l.length],fill); let llst = l => list(l, l.length>0&&l.every(isnum)?0:undefined); let str = s => list(Array.from(s), ' '); let unstr = s => s.join(""); let setrepr = (r,f) => {f.repr=r; return f;} let m1 = m=>{let r= f =>setrepr(()=>[4,f,r ], m(f )); r.m=1; return r;} let m2 = m=>{let r=(f,g)=>setrepr(()=>[5,f,r,g], m(f,g)); r.m=2; return r;} let ctrans = (c,t) => String.fromCodePoint(c.codePointAt(0)+t); let plus = (x,w) => { if (!has(w)) return x; let s=typeof w, t=typeof x; if (s==="number" && t==="number") return w+x; if (s==="number" && t==="string") return ctrans(x,w); if (s==="string" && t==="number") return ctrans(w,x); if (s==="string" && t==="string") throw Error("+: Cannot add two characters"); throw Error("+: Cannot add non-data values"); } let minus = (x,w) => { if (!isnum(x)) { if (has(w)&&typeof w==="string") return w.codePointAt(0)-x.codePointAt(0); throw Error("-: Can only negate numbers"); } if (!has(w)) return -x; let s=typeof w; if (s==="number") return w-x; if (s==="string") return ctrans(w,-x); throw Error("-: Cannot subtract from non-data value"); } let times = (x,w) => { if (isnum(x)&&isnum(w)) return x*w; throw Error("×: Arguments must be numbers"); } let divide = (x,w) => { if (isnum(x)&&(!has(w)||isnum(w))) return (has(w)?w:1)/(x===0?0:x); throw Error("÷: Arguments must be numbers"); } let power = (x,w) => { if (isnum(x)) { if (!has(w)) return Math.exp(x); if (isnum(w)) return Math.pow(w===0?0:w,x); } throw Error("⋆: Arguments must be numbers"); } let log = (x,w) => { if (isnum(x)) { if (!has(w)) return Math.log(x); if (isnum(w)) return Math.log(x)/Math.log(w); } throw Error("⋆⁼: Arguments must be numbers"); } let fc = (dy,mon,gl) => (x,w) => { if (has(w)) return dy(w,x); if (isnum(x)) return mon(x); throw Error(gl+"𝕩: Argument must be a number"); } let floor = fc(Math.min,Math.floor,"⌊"); let ceil = fc(Math.max,Math.ceil ,"⌈"); let abs = (x,w) => { if (isnum(x)) return Math.abs(x); throw Error("|𝕩: Argument must be a number"); } let abs_mod = (x,w) => { if (!has(w)) return abs(x,w); if (isnum(x)&&isnum(w)) { let r = x%w; return ((x<0)!=(w<0) && r!=0) ? r+w : r; } throw Error("𝕨|𝕩: Arguments must be numbers"); } let lesseq = (x,w) => { let s=typeof w, t=typeof x; if (s==="function"||t==="function") throw Error("𝕨≤𝕩: Cannot compare operations"); if (w.ns||x.ns) throw Error("𝕨≤𝕩: Cannot compare namespaces"); return +(s!==t ? s<=t : w<=x); } let equals = (x,w) => { let a,b; if (typeof(w)!=="function" || !(a=w.repr)) return x===w; if (typeof(x)!=="function" || !(b=x.repr)) return false; b=b(); return a().every((e,i)=>call(runtime[18],e,b[i])); // ≡ } let table = m1(f => (x,w) => !has(w) ? arr(x.map(e=>call(f,e)),x.sh) : arr(w.map(d=>x.map(e=>call(f,e,d))).flat(),w.sh.concat(x.sh))); let scan = m1(f => (x,w) => { let s=x.sh; if (!s||s.length===0) throw Error("`: 𝕩 must have rank at least 1"); if (has(w)) { let r=w.sh, wr=r?r.length:0; if (1+wr!==s.length) throw Error("`: rank of 𝕨 must be cell rank of 𝕩"); if (!r) w=[w]; else if (!r.every((l,a)=>l===s[1+a])) throw Error("`: shape of 𝕨 must be cell shape of 𝕩"); } let l=x.length,r=Array(l); if (l>0) { let c=1;for(let i=1;i (x,w)=>has(w)?call(g,x,w):call(f,x,w)); let catches = m2((f,g) => (x,w)=>{try{return call(f,x,w);}catch(e){return call(g,x,w);}}); let group_len = (x,w) => { // ≠¨⊔ for a valid list argument let l=x.reduce((a,b)=>Math.max(a,b),(w||0)-1); let r=Array(l+1).fill(0); x.map(e=>{if(e>=0)r[e]+=1;}); return list(r,0); } let group_ord = (x,w) => { // ∾⊔x assuming w=group_len(x) let l=0,s=w.map(n=>{let l0=l;l+=n;return l0;}); let r=Array(l); x.map((e,i)=>{if(e>=0)r[s[e]++]=i;}); return list(r,x.fill); } let type = x => isfunc(x) ? 3+(x.m||0) : x.sh ? 0 : x.ns ? 6 : 2-isnum(x); let tofill = x => isfunc(x) ? undefined : x.sh ? arr(x.map(tofill),x.sh,x.fill) : isnum(x)?0 : ' '; let fill = (x,w) => { if (has(w)) { return arr(x.slice(),x.sh,tofill(w)); } else { let f = x.fill; if (!has(f)) throw Error("Fill does not exist"); return f; } } let fill_by = (f,g) => (x,w) => { let r = f(x,w); let a2fill = x => isfunc(x)?x:isnum(x)?0:' '; let xf=x.sh?x.fill:a2fill(x); if (r.sh&&has(xf)) { r = arr(r.slice(),r.sh); try { let wf = !has(w) ? w : !w.sh ? a2fill(w) : has(w.fill) ? w.fill : runtime[43]; r.fill=tofill(g(xf,wf)); } catch(e){ r.fill=undefined; } } return r; } fill_by.m=2; let provide = [ type // Type ,fill // Fill ,log // Log ,group_len // GroupLen ,group_ord // GroupOrd ,assertFn("") // ! ,plus // + ,minus // - ,times // × ,divide // ÷ ,power // ⋆ ,floor // ⌊ ,(x,w) => has(w)?+equals(x,w):x.sh?x.sh.length:0 // = ,lesseq // ≤ ,(x,w) => list(x.sh,0) // ≢ ,(x,w) => arr(x.slice(),has(w)?w:[x.length],x.fill) // ⥊ ,(x,w) => x[w] // ⊑ ,(x,w) => list(Array(x).fill().map((_,i)=>i),0) // ↕ ,table // ⌜ ,scan // ` ,fill_by // _fillBy_ ,cases // ⊘ ,catches // ⎊ ]; let select = (x,w) => { let s=x.sh, k=s.length, f=x.fill, t=w.sh, c=1; if (k!==1) {for(let i=1;i{for(let k=0;k (x,w) => { let l=x.sh[0]; let r=has(w)?w:x[l=l-1]; for (let i=l;i--;) r=call(f,r,x[i]); return r; } let runtime_0 = [ floor // ⌊ ,ceil // ⌈ ,abs // | ,(x,w)=>has(w)?1-lesseq(w,x):arr([x],[],tofill(x)) // < ,(x,w)=>1-lesseq(x,w) // > ,(x,w)=>x.sh&&x.sh.length?x.sh[0]:1 // ≠ ,(x,w)=> lesseq(w,x) // ≥ ,(x,w)=>x // ⊢ ,(x,w)=>has(w)?w:x // ⊣ ,(x,w)=>arr(w.concat(x),[w.sh[0]+x.sh[0]]) // ∾ ,(x,w)=>list(has(w)?[w,x]:[x]) // ⋈ ,(x,w)=>arr(x.slice(0,w),[w]) // ↑ ,(x,w)=>arr(x.slice(w),[x.sh[0]-w]) // ↓ ,select // ⊏ ,m1(f=>(x,w)=>f) // ˙ ,m1(f=>(x,w)=>call(f,has(w)?w:x,x)) // ˜ ,m1(f=>(x,w)=>arr(x.map((e,i)=>call(f,e,w[i])),x.sh)) // ¨ ,m1(fold) // ´ ,m2((f,g)=>(x,w)=>call(f,call(g,x,w))) // ∘ ,m2((f,g)=>(x,w)=>call(f,call(g,x),has(w)?call(g,w):w)) // ○ ,m2((f,g)=>(x,w)=>call(g,x,call(f,has(w)?w:x))) // ⊸ ,m2((f,g)=>(x,w)=>call(f,call(g,x),has(w)?w:x)) // ⟜ ,m2((f,g)=>(x,w)=>call(g[call(f,x,w)],x,w)) // ◶ ,m2((f,g)=>(x,w)=>call(g,x,w)?call(f,x,w):x) // ⍟ ]; let [runtime,setPrims,setInv] = run( [0,99,33,0,0,48,6,1,1,33,0,1,48,6,1,2,33,0,2,48,6,1,3,33,0,3,48,6,1,4,33,0,4,48,6,0,0,0,12,0,46,21,33,0,5,48,6,0,0,0,13,0,47,21,33,0,6,48,6,0,46,0,12,0,42,0,11,27,11,2,0,44,0,0,0,12,0,47,21,27,33,0,7,48,6,0,46,0,12,0,42,0,11,0,40,0,19,27,27,11,2,0,44,0,0,0,12,0,47,21,27,33,0,8,48,6,32,0,6,0,45,0,20,27,33,0,9,48,6,0,31,32,0,6,26,0,36,0,8,26,0,47,21,33,0,10,48,6,1,5,0,15,11,2,0,44,32,0,5,27,33,0,11,48,6,0,14,0,43,0,29,27,33,0,12,48,6,0,35,0,12,26,0,36,0,8,26,0,47,21,33,0,13,48,6,0,4,0,42,0,31,0,47,26,27,33,0,14,48,6,1,6,33,0,15,48,6,1,7,33,0,16,48,6,1,8,33,0,17,48,6,32,0,17,0,56,26,33,0,18,48,6,0,46,0,16,0,42,0,49,27,34,0,17,0,57,26,20,11,2,0,44,0,16,0,42,0,46,27,0,12,0,48,21,27,33,0,19,48,6,1,9,33,0,20,48,6,1,10,33,0,21,48,6,0,58,0,46,0,59,0,46,0,60,0,47,0,61,0,47,0,62,0,47,0,63,0,47,0,64,0,50,0,65,0,51,0,66,0,46,0,67,0,47,0,68,0,46,0,69,0,47,0,70,0,46,0,71,0,47,11,28,32,0,21,0,100,0,40,0,5,27,27,1,11,20,33,0,22,48,6,1,12,33,0,23,48,6,1,13,33,0,24,48,6,1,14,33,0,25,48,6,0,13,0,13,0,24,0,34,0,12,26,20,0,13,0,50,0,43,0,13,27,21,21,33,0,26,48,6,32,0,26,0,7,0,34,32,0,26,26,21,33,0,27,48,6,0,47,0,15,0,16,0,46,21,0,43,0,13,0,8,0,49,21,0,7,0,47,21,1,15,11,2,0,44,0,24,0,40,32,0,5,27,27,27,11,2,0,44,0,24,0,40,0,14,27,0,36,0,8,26,0,47,21,0,20,0,46,21,27,33,0,28,48,6,1,16,33,0,29,48,6,1,17,33,0,30,48,6,32,0,27,32,0,28,0,34,32,0,28,26,0,7,20,11,2,0,44,0,25,0,40,32,0,5,27,27,1,18,11,3,0,44,32,0,5,0,41,0,6,27,27,33,0,31,48,6,1,19,33,0,32,48,6,32,0,32,0,46,26,33,0,33,48,6,34,0,32,0,47,26,33,0,34,48,6,1,20,33,0,35,48,6,1,21,33,0,36,48,6,32,0,9,0,41,1,22,27,33,0,37,48,6,1,23,33,0,38,48,6,0,30,0,42,32,0,38,27,33,0,39,48,6,1,24,33,0,40,48,6,1,25,33,0,41,48,6,32,0,36,0,24,0,32,0,6,26,0,52,21,0,34,0,30,26,0,34,32,0,39,0,40,32,0,33,0,40,32,0,14,27,27,26,21,26,33,0,42,48,6,32,0,36,0,35,0,8,26,0,32,0,18,26,20,0,35,0,7,26,0,25,21,0,42,0,22,0,40,0,17,27,27,26,33,0,43,48,6,32,0,9,0,24,0,37,1,26,27,11,2,0,44,0,12,0,20,0,46,21,27,33,0,44,48,6,1,27,0,45,0,24,0,37,1,28,27,27,33,0,45,48,6,1,29,33,0,46,48,6,1,30,33,0,47,48,6,32,0,7,0,5,0,116,21,0,117,11,2,0,12,0,42,0,11,27,0,5,0,118,21,0,119,11,2,11,2,0,31,1,31,26,16,33,0,48,33,0,49,12,2,48,6,1,32,33,0,50,48,6,32,0,9,0,43,1,33,27,33,0,51,48,6,1,34,34,0,51,11,2,0,44,0,25,0,40,0,47,0,15,32,0,10,20,11,2,0,44,32,0,5,27,27,27,33,0,52,48,6,34,0,50,32,0,52,11,2,0,44,0,25,0,40,32,0,5,27,27,33,0,53,48,6,1,35,33,0,54,48,6,1,36,33,0,55,48,6,32,0,9,0,41,32,0,54,0,131,0,15,0,31,0,0,0,12,0,47,21,26,20,0,36,0,8,26,0,47,21,0,47,0,46,0,24,0,30,1,37,21,1,38,11,6,26,27,33,0,56,48,6,0,24,0,15,0,132,0,40,0,5,27,0,16,0,42,0,46,27,11,2,0,44,0,22,0,20,0,46,21,27,20,11,2,0,44,32,0,5,27,33,0,57,48,6,1,39,33,0,58,48,6,1,40,33,0,59,48,6,0,28,0,26,0,29,21,33,0,60,48,6,0,24,0,30,0,22,0,17,20,0,43,32,0,60,27,21,32,0,60,11,2,0,44,0,24,0,40,0,12,27,0,12,0,47,21,27,33,0,61,48,6,0,24,0,37,32,0,9,0,43,32,0,54,0,136,34,0,6,0,46,0,46,0,24,0,40,0,22,27,0,20,0,46,21,0,45,0,24,34,0,61,0,22,0,43,32,0,59,27,21,27,0,24,0,17,20,34,0,60,34,0,59,21,11,6,26,27,27,33,0,62,48,6,1,41,1,42,1,43,11,3,0,44,0,25,0,40,0,12,27,0,11,0,49,21,27,33,0,63,48,6,0,24,0,37,32,0,9,0,41,34,0,54,0,140,0,15,0,40,0,31,0,0,0,12,0,47,21,26,0,36,0,8,26,0,22,0,20,0,46,21,21,27,0,47,0,47,0,24,0,30,0,22,0,43,32,0,63,27,21,34,0,63,11,6,26,27,27,33,0,64,48,6,1,44,33,0,65,48,6,0,24,1,45,11,2,0,31,1,46,26,0,26,0,24,21,16,0,31,1,47,26,16,33,0,66,48,6,1,48,0,42,34,0,66,0,30,0,47,0,47,0,49,0,53,0,46,11,5,17,32,0,16,0,141,27,27,33,0,67,48,6,1,49,33,0,68,48,6,1,50,33,0,69,48,6,1,51,33,0,70,48,6,1,52,33,0,71,48,6,0,46,0,12,0,42,0,33,32,0,71,26,27,11,2,0,44,0,0,0,12,0,53,21,27,33,0,72,48,6,0,24,32,0,5,20,0,12,0,41,0,12,27,0,14,0,41,32,0,13,27,11,3,0,36,1,53,26,16,33,0,73,48,6,1,54,33,0,74,48,6,32,0,5,0,41,0,12,27,0,46,11,2,0,24,0,40,32,0,5,27,0,12,11,2,0,12,0,41,0,12,27,0,46,11,2,0,14,0,41,32,0,13,27,0,46,11,2,1,55,11,5,0,36,1,56,26,16,33,0,75,48,6,0,46,1,57,11,2,0,44,32,0,5,27,33,0,76,48,6,32,0,75,0,38,32,0,76,27,33,0,77,48,6,32,0,75,0,7,0,47,21,0,38,0,46,0,17,16,0,14,11,2,0,44,32,0,5,27,27,33,0,78,48,6,32,0,77,0,40,0,5,27,0,25,0,24,21,33,0,79,48,6,0,15,0,40,0,1,0,37,0,24,27,0,36,32,0,79,0,37,0,24,27,26,11,2,0,44,0,22,0,20,0,46,21,27,27,33,0,80,48,6,0,46,0,17,16,0,43,0,25,0,40,0,0,27,0,13,0,53,21,0,45,0,72,27,0,37,0,24,27,27,0,1,20,0,12,0,46,21,33,0,81,48,6,1,58,33,0,82,48,6,32,0,5,0,45,0,26,32,0,82,1,59,27,27,33,0,83,48,6,32,0,79,0,37,32,0,9,0,41,0,15,0,41,0,26,27,1,60,11,2,0,44,0,12,0,41,0,18,27,0,20,0,47,21,27,27,27,33,0,84,48,6,1,61,33,0,85,48,6,1,62,33,0,86,48,6,32,0,5,0,5,0,152,21,0,25,1,63,34,0,82,32,0,83,32,0,86,32,0,85,11,2,0,44,0,31,0,12,0,23,0,47,21,26,0,36,0,8,26,0,47,21,27,34,0,86,11,3,0,44,0,12,0,11,0,49,21,27,27,21,33,0,87,48,6,0,24,0,24,0,24,0,36,1,64,26,20,1,65,1,66,1,67,11,6,0,44,0,25,27,33,0,88,48,6,1,68,33,0,89,48,6,1,69,33,0,90,48,6,32,0,90,0,46,26,33,0,91,48,6,34,0,90,0,47,26,33,0,92,48,6,1,70,33,0,93,48,6,32,0,79,0,38,0,24,27,0,37,1,71,27,33,0,94,48,6,32,0,79,0,38,0,24,27,0,37,1,72,27,33,0,95,48,6,32,0,8,0,5,0,169,21,33,0,96,48,6,32,0,96,0,25,0,17,21,1,73,11,2,0,44,32,0,5,27,33,0,97,48,6,1,74,33,0,98,48,6,1,75,33,0,99,48,6,1,76,33,0,100,48,6,1,77,33,0,101,48,6,0,55,0,17,16,32,0,16,0,178,27,33,0,102,48,6,1,78,33,0,103,48,6,1,79,33,0,104,48,6,1,80,33,0,105,48,6,32,0,9,0,41,1,81,27,33,0,106,48,6,1,82,33,0,107,48,6,1,83,33,0,108,48,6,1,84,33,0,109,48,6,1,85,33,0,110,48,6,1,86,33,0,111,48,6,1,87,33,0,112,48,6,32,0,25,0,9,26,33,0,113,48,6,32,0,25,0,10,26,33,0,114,48,6,0,34,32,0,113,0,43,32,0,114,27,26,0,38,0,49,32,0,113,16,0,43,32,0,114,27,27,33,0,115,48,6,32,0,25,1,88,0,21,0,42,0,46,27,0,20,0,42,0,46,27,11,2,0,44,0,46,0,43,0,20,27,27,0,45,0,6,27,11,2,0,44,0,19,0,41,0,21,27,27,0,38,0,19,27,26,33,0,116,48,6,32,0,25,0,20,0,45,0,25,27,0,38,0,11,27,26,33,0,117,48,6,32,0,25,0,21,0,45,0,25,27,0,38,0,7,0,40,32,0,117,0,40,0,7,27,27,27,26,33,0,118,48,6,32,0,25,0,8,26,0,38,0,30,0,42,32,0,33,27,27,33,0,119,48,6,32,0,25,0,8,0,7,0,6,21,26,0,38,0,30,0,42,32,0,34,27,27,33,0,120,48,6,32,0,25,0,8,0,38,0,21,0,7,0,20,21,0,42,0,46,27,27,26,33,0,121,48,6,32,0,25,0,23,0,7,0,47,21,26,0,38,0,20,27,33,0,122,48,6,32,0,25,0,13,0,7,0,47,21,26,0,38,32,0,83,27,33,0,123,48,6,32,0,25,0,12,0,7,0,47,21,26,0,38,0,22,27,33,0,124,48,6,32,0,25,0,12,26,0,38,0,12,27,33,0,125,48,6,32,0,25,0,23,26,0,38,0,195,0,40,0,5,27,27,33,0,126,48,6,32,0,25,0,13,26,0,38,0,196,0,40,0,5,27,27,33,0,127,48,6,32,0,25,0,6,26,33,0,128,48,6,32,0,25,0,7,26,33,0,129,48,6,32,0,129,32,0,128,0,47,21,33,0,130,48,6,0,15,0,38,32,0,11,27,33,0,131,48,6,34,0,98,0,38,32,0,97,27,33,0,132,48,6,34,0,62,0,38,32,0,58,27,33,0,133,48,6,34,0,64,0,38,34,0,40,27,33,0,134,48,6,34,0,94,33,0,135,48,6,34,0,95,33,0,136,48,6,1,89,33,0,137,48,6,34,0,91,0,38,34,0,46,27,33,0,138,48,6,34,0,92,0,38,34,0,47,27,33,0,139,48,6,34,0,107,0,38,34,0,105,27,33,0,140,48,6,32,0,35,0,47,26,0,38,34,0,42,27,33,0,141,48,6,0,34,34,0,35,0,46,26,26,0,38,34,0,36,0,24,26,27,33,0,142,48,6,1,90,0,1,0,46,21,33,0,143,48,6,1,91,33,0,144,48,6,0,24,0,37,1,92,27,33,0,145,48,6,1,93,33,0,146,48,6,1,94,33,0,147,48,6,1,95,33,0,148,48,6,0,47,0,24,1,96,0,40,32,0,19,27,20,11,2,0,44,0,0,32,0,127,0,53,21,27,33,0,149,48,6,1,97,0,41,1,98,27,33,0,150,48,6,1,99,33,0,151,48,6,1,100,0,24,0,16,0,42,0,47,27,1,101,20,0,33,0,205,0,40,0,5,27,26,0,16,0,42,0,49,27,32,0,150,0,16,0,42,0,47,27,21,34,0,151,0,16,0,42,0,49,27,1,102,0,43,1,103,27,0,16,0,42,0,47,27,21,0,16,0,42,0,49,27,1,104,0,43,1,105,27,0,30,0,42,0,47,0,53,11,2,27,21,11,6,0,44,0,25,27,0,16,0,42,0,46,27,21,20,33,0,152,48,6,1,106,34,0,152,0,206,0,40,0,5,27,11,3,32,0,134,0,53,0,47,0,49,11,3,17,0,44,0,0,27,33,0,153,48,6,34,0,84,0,38,32,0,87,27,33,0,154,48,6,0,5,0,42,0,207,27,33,0,155,48,6,0,5,0,42,0,208,27,33,0,156,48,6,0,33,0,46,26,0,5,0,209,21,33,0,157,48,6,1,107,33,0,158,48,6,1,108,33,0,159,48,6,1,109,33,0,160,48,6,0,24,0,37,34,0,56,0,38,34,0,55,27,27,33,0,161,48,6,0,58,0,34,32,0,129,26,0,38,32,0,128,27,0,59,32,0,129,0,60,0,34,32,0,113,26,0,38,32,0,121,32,0,158,0,24,27,27,0,61,32,0,113,0,62,32,0,25,0,2,26,0,73,0,34,32,0,114,26,0,38,0,34,32,0,121,26,27,0,67,0,34,32,0,113,26,0,38,32,0,119,32,0,158,0,24,27,27,0,66,0,25,32,0,129,0,47,21,32,0,113,0,34,32,0,129,26,21,0,38,32,0,120,32,0,158,0,24,27,27,0,63,32,0,130,0,68,32,0,25,1,110,26,0,74,0,46,0,40,32,0,155,27,0,38,1,111,27,0,75,0,24,0,76,32,0,77,0,40,32,0,156,27,0,25,0,24,21,0,38,0,24,27,0,56,1,112,0,38,0,46,0,40,32,0,155,27,27,0,77,1,113,0,38,1,114,27,0,78,1,115,0,38,1,116,27,0,79,0,46,0,40,32,0,155,27,0,38,32,0,138,32,0,158,0,16,0,42,0,52,27,27,27,0,80,0,46,0,40,32,0,155,27,0,38,32,0,139,32,0,158,0,16,0,42,0,46,27,27,27,0,81,0,46,0,40,32,0,155,27,0,38,32,0,132,34,0,158,32,0,78,27,27,0,82,32,0,133,0,42,32,0,129,27,0,38,32,0,133,27,0,83,34,0,147,0,38,34,0,45,27,0,84,0,46,0,40,32,0,155,27,0,38,34,0,41,27,0,85,34,0,160,0,38,34,0,159,27,11,46,32,0,21,32,0,157,27,33,0,162,48,6,0,58,0,34,32,0,129,26,0,38,0,49,0,43,32,0,113,27,27,0,59,32,0,128,0,38,0,46,0,40,32,0,155,27,27,0,60,0,34,32,0,113,26,0,38,32,0,115,27,0,61,32,0,121,0,38,0,46,0,40,32,0,155,27,27,0,62,32,0,115,0,38,0,46,0,40,32,0,155,27,27,0,73,0,2,32,0,113,20,0,38,0,46,0,40,32,0,155,27,27,0,67,0,34,32,0,113,26,0,38,32,0,115,27,0,66,0,25,32,0,129,0,47,21,32,0,113,0,34,32,0,129,26,21,0,38,32,0,130,0,40,32,0,115,27,32,0,130,20,27,0,63,0,33,0,47,26,32,0,129,32,0,128,21,0,38,0,46,0,40,32,0,155,27,27,11,18,32,0,21,32,0,157,27,33,0,163,48,6,34,0,70,33,0,164,48,6,32,0,69,33,0,165,48,6,0,86,0,24,0,87,1,117,0,88,1,118,0,89,1,119,0,90,1,120,0,91,1,121,0,40,1,122,27,11,12,32,0,21,0,33,32,0,157,26,27,33,0,166,48,6,34,0,112,33,0,167,48,6,34,0,74,33,0,168,48,6,0,92,34,0,150,0,93,1,123,0,94,1,124,0,95,0,33,0,46,0,40,32,0,155,27,26,1,125,11,2,0,44,0,24,0,40,32,0,7,27,27,0,96,1,126,0,97,1,127,1,128,0,24,11,2,0,44,0,25,27,0,25,0,40,32,0,149,27,21,0,98,1,129,11,14,34,0,21,0,33,32,0,157,26,27,33,0,169,48,6,34,0,23,33,0,170,48,6,34,0,101,33,0,171,48,6,1,130,33,0,172,48,6,34,0,100,33,0,173,48,6,32,0,53,0,38,34,0,57,27,33,0,174,48,6,1,131,33,0,175,48,6,34,0,110,33,0,176,48,6,34,0,111,33,0,177,48,6,32,0,103,0,38,32,0,11,27,33,0,178,48,6,32,0,79,0,38,0,24,27,0,37,0,27,0,40,32,0,123,27,27,33,0,179,48,6,32,0,122,0,41,34,0,79,0,37,32,0,174,0,41,0,27,27,27,27,0,38,1,132,27,33,0,180,48,6,34,0,146,0,38,34,0,44,27,33,0,181,48,6,34,0,143,0,38,32,0,43,27,33,0,182,48,6,34,0,37,0,38,32,0,134,0,42,32,0,142,27,27,33,0,183,48,6,32,0,128,32,0,129,32,0,121,32,0,113,34,0,114,34,0,115,32,0,117,34,0,118,34,0,116,32,0,130,32,0,119,32,0,120,32,0,122,32,0,123,32,0,124,32,0,125,32,0,127,32,0,126,32,0,77,32,0,78,0,25,0,24,34,0,178,32,0,154,34,0,179,34,0,180,32,0,138,32,0,139,32,0,132,34,0,136,32,0,135,32,0,133,34,0,181,32,0,134,32,0,33,32,0,34,32,0,161,32,0,174,32,0,141,34,0,182,32,0,142,34,0,183,32,0,140,0,5,0,33,0,34,32,0,173,32,0,165,32,0,164,34,0,172,34,0,170,34,0,171,0,32,0,40,0,41,0,42,0,43,32,0,168,0,38,34,0,175,34,0,177,34,0,176,32,0,167,0,39,11,64,1,133,16,7,0,46,34,0,1,11,2,7,34,0,1,7,34,0,1,33,1,1,33,1,2,12,2,49,7,34,0,2,1,134,18,6,34,0,1,33,1,153,51,7,32,0,1,11,1,0,1,34,0,1,17,7,0,20,0,31,0,12,0,7,0,47,21,26,34,0,1,21,0,32,0,8,26,20,0,36,0,6,26,20,7,0,33,32,1,0,0,31,32,1,15,34,0,1,26,0,34,0,16,26,34,0,2,21,26,16,26,0,16,1,135,21,7,1,136,0,12,34,0,1,32,1,15,32,1,0,26,16,21,7,0,49,0,9,32,0,1,0,22,16,17,0,17,16,0,31,0,8,0,42,0,49,27,26,16,33,0,3,48,6,32,0,1,0,30,32,0,3,17,34,0,1,0,30,34,0,3,0,31,0,6,0,42,0,47,27,26,16,17,11,2,7,34,0,2,32,1,20,16,33,0,3,33,0,4,12,2,48,6,34,0,1,11,1,0,26,34,0,4,17,32,1,16,34,0,3,27,7,0,46,34,0,1,16,7,32,0,1,0,12,16,0,12,0,47,17,0,5,0,101,17,6,34,0,1,0,33,32,0,4,26,32,1,22,20,0,36,34,0,4,26,11,2,0,44,0,47,0,38,0,22,0,20,0,46,21,27,27,34,0,2,19,7,1,137,33,0,2,48,6,1,138,33,0,3,48,6,32,0,3,32,0,1,26,0,34,34,0,3,0,34,32,0,1,26,26,26,11,2,0,44,0,12,0,41,0,21,27,27,34,0,2,34,0,1,26,11,2,0,44,0,12,0,41,0,12,27,27,7,34,0,1,1,139,0,37,1,140,1,141,11,2,0,44,32,1,5,0,41,0,21,27,27,0,38,1,142,27,27,1,143,0,37,1,144,27,11,3,0,44,32,1,5,0,41,0,6,27,27,33,0,2,48,7,34,0,1,32,1,28,34,0,2,19,7,32,0,1,0,31,0,20,0,42,0,46,27,26,0,36,0,8,26,0,47,21,0,41,0,7,27,32,0,2,19,33,0,3,48,6,34,0,1,32,0,3,0,46,11,2,1,145,11,2,0,44,0,46,0,12,34,0,3,17,27,34,0,2,19,7,34,0,4,33,0,5,48,6,0,46,0,25,32,0,2,19,33,0,6,48,6,34,0,1,33,0,7,48,6,1,146,33,0,8,48,6,34,0,8,32,0,7,0,12,0,47,17,0,45,0,33,32,0,5,26,1,147,0,38,0,24,27,34,0,2,23,27,16,7,32,0,1,0,14,0,41,32,1,29,27,32,0,2,17,33,0,3,48,6,34,0,3,0,36,32,1,30,34,0,1,0,15,16,0,43,0,16,27,0,43,32,1,31,0,42,34,0,2,0,15,16,0,43,0,16,27,27,27,26,26,16,33,0,4,48,6,0,46,0,34,34,0,4,26,16,7,32,0,1,33,0,2,48,6,32,1,31,32,1,27,0,33,0,46,26,0,13,32,1,31,21,32,1,26,11,4,34,0,1,0,45,0,31,1,148,26,27,16,33,0,3,48,6,1,149,33,0,4,48,6,1,150,0,38,1,151,27,0,1,0,46,21,7,32,0,1,33,0,2,48,6,0,36,0,8,26,0,7,0,47,21,0,32,0,8,26,0,36,0,6,26,20,11,2,0,16,34,0,1,17,33,0,3,48,6,32,1,9,0,43,1,152,27,0,1,0,46,21,7,32,0,1,0,12,16,0,13,0,47,17,0,5,0,110,17,6,32,0,1,32,1,33,16,33,0,5,48,6,32,0,1,32,1,12,0,47,17,0,36,0,8,26,0,47,17,33,0,6,48,6,32,0,6,32,1,30,32,0,1,0,15,16,0,43,0,16,27,0,41,32,1,75,0,7,0,47,21,27,26,16,33,0,7,48,6,34,0,1,0,22,16,0,17,16,0,31,0,47,0,24,32,0,5,0,31,0,8,0,42,34,0,6,27,26,16,0,43,0,16,27,0,41,34,0,7,27,0,47,0,43,0,7,27,21,11,2,0,44,0,20,0,42,0,46,27,27,26,16,34,0,4,32,0,5,17,0,30,34,0,5,32,1,14,16,17,0,1,0,46,17,7,32,0,2,0,12,16,33,0,3,48,6,34,0,3,0,7,32,0,1,0,12,16,17,33,0,4,48,6,32,0,4,0,13,0,46,17,0,5,0,111,17,6,0,46,0,20,16,33,0,5,48,6,32,0,1,0,14,16,33,0,6,48,0,28,32,0,4,17,0,24,0,36,0,8,26,0,47,21,0,17,20,0,43,0,15,27,16,33,0,7,48,6,34,0,6,0,29,34,0,4,17,0,35,1,153,26,32,0,2,0,14,16,17,6,32,0,7,0,31,0,20,0,31,0,6,26,32,0,5,21,0,34,0,30,26,34,0,1,0,15,16,21,32,1,75,34,0,2,21,26,16,0,1,0,46,17,7,34,0,1,0,32,0,6,26,16,0,3,16,0,28,0,42,0,33,0,47,26,0,7,0,22,21,0,18,0,46,21,27,16,0,32,0,6,26,16,0,1,0,46,17,7,32,0,1,0,12,16,0,12,0,47,17,0,5,0,112,17,6,32,0,1,0,31,32,1,8,26,16,0,36,0,8,26,0,47,17,0,5,0,113,17,6,34,0,1,32,1,38,16,7,32,0,1,0,12,16,0,12,0,47,17,32,1,155,16,6,32,0,1,0,31,32,1,8,26,16,0,36,0,8,26,0,47,17,32,1,155,16,6,34,0,1,0,3,16,7,32,0,1,0,22,16,33,0,3,48,6,32,0,1,32,1,12,0,47,17,33,0,4,48,0,36,0,8,26,0,47,17,33,0,5,48,6,34,0,3,0,17,16,0,31,0,8,0,42,32,0,5,27,0,43,0,6,27,26,34,0,5,0,17,16,0,15,34,0,4,17,17,0,34,0,30,26,34,0,1,0,15,16,17,7,32,0,1,32,1,5,16,32,1,156,16,6,34,0,1,0,12,16,0,20,0,46,17,7,32,0,1,0,12,16,0,34,0,7,26,0,47,17,33,0,3,48,6,32,0,1,0,14,16,33,0,4,48,6,32,0,4,0,16,32,0,3,17,33,0,5,48,6,34,0,4,0,28,34,0,3,17,33,0,6,48,6,32,0,6,0,36,0,8,26,0,47,17,0,17,16,0,15,34,0,6,17,0,31,0,8,0,42,32,0,5,27,0,43,0,6,27,26,34,0,5,0,17,16,17,0,34,0,30,26,34,0,1,0,15,16,17,7,32,0,1,0,12,16,0,13,0,47,17,0,5,0,114,17,6,32,0,1,0,22,16,0,6,0,47,17,0,17,16,0,31,34,0,1,0,43,0,30,0,42,0,17,27,27,26,16,0,1,0,42,0,16,0,42,0,46,27,27,16,7,32,0,1,0,12,16,0,13,0,47,17,0,5,0,115,17,6,32,0,1,0,22,16,33,0,3,48,6,32,0,3,0,6,0,47,17,0,17,16,0,31,34,0,1,0,43,0,30,0,42,1,154,27,27,26,16,0,1,0,42,0,16,0,42,32,0,3,27,27,16,7,34,0,1,33,0,3,33,0,4,12,2,48,6,1,155,33,0,5,48,6,0,24,0,40,34,0,3,27,0,25,0,6,32,0,5,0,13,0,42,0,46,27,26,20,34,0,5,0,21,26,11,2,0,44,0,13,0,42,0,46,27,27,21,7,32,0,1,0,12,16,0,12,0,47,17,0,5,0,120,17,6,34,0,2,32,1,48,32,0,1,0,22,16,17,0,34,0,16,26,34,0,1,17,7,32,0,2,0,12,18,0,12,0,47,19,0,5,0,121,19,6,32,0,1,0,14,16,33,0,3,48,0,22,0,41,0,12,27,32,0,2,19,0,5,0,122,17,6,0,46,33,0,4,48,6,34,0,3,0,35,1,156,26,34,0,2,19,6,34,0,1,0,15,16,0,16,32,0,4,17,7,34,0,2,0,31,34,0,1,0,43,32,1,52,27,26,16,7,34,0,1,33,0,2,33,0,3,33,0,4,33,0,5,33,0,6,33,0,7,12,6,48,6,0,124,0,26,34,0,2,17,0,26,0,123,17,33,0,8,48,6,0,125,0,26,32,0,8,17,33,0,9,48,6,0,126,0,26,32,0,8,17,33,0,10,48,6,0,127,0,26,32,0,8,17,33,0,11,48,6,0,128,0,26,34,0,8,17,33,0,12,48,6,0,24,0,31,34,0,5,0,31,0,0,0,12,0,47,21,26,0,15,20,0,36,0,8,26,0,47,21,11,2,0,44,32,1,5,27,26,0,15,20,0,36,0,8,26,0,47,21,0,5,34,0,12,21,11,2,0,16,34,0,4,17,33,0,13,48,6,1,157,1,158,11,2,0,44,0,25,0,40,34,0,3,27,27,7,32,0,1,0,12,16,0,13,0,47,17,0,5,0,129,17,6,32,0,1,0,22,16,0,20,0,46,17,0,5,0,130,17,6,34,0,1,0,30,0,46,0,20,16,17,7,34,0,2,0,31,32,1,49,0,42,34,0,1,0,22,16,27,26,16,7,34,0,2,0,31,32,1,49,0,42,34,0,1,27,26,16,7,32,0,1,0,12,16,0,13,0,47,17,0,5,0,133,17,6,32,0,1,0,22,16,33,0,3,48,6,34,0,1,0,30,32,0,3,0,17,16,0,31,0,7,0,42,0,47,0,7,34,0,3,17,27,26,16,17,7,32,0,2,32,1,7,18,0,5,0,134,19,6,32,0,1,0,12,0,46,17,0,6,33,0,1,50,6,32,0,1,0,9,32,0,2,19,0,11,16,0,8,32,0,1,17,0,7,34,0,2,19,33,0,3,48,6,34,0,1,0,20,32,0,3,17,0,5,0,135,17,6,34,0,3,7,32,0,2,32,1,5,0,45,0,15,0,16,0,46,21,27,16,33,0,2,49,6,32,0,2,32,1,8,16,0,5,0,137,17,6,34,0,2,33,0,3,48,33,0,4,48,6,34,0,1,0,8,32,0,3,17,0,17,16,0,32,0,34,1,159,0,45,1,160,27,26,26,16,7,32,0,2,0,22,16,0,12,34,0,1,17,0,5,0,138,17,6,32,0,2,0,31,0,12,0,42,0,11,0,40,0,19,27,27,26,16,0,36,0,8,26,0,47,17,0,5,0,137,17,6,34,0,2,32,1,38,16,7,0,33,0,46,26,0,5,0,139,21,7,34,0,1,32,1,1,16,33,0,3,48,6,32,0,3,0,16,0,46,17,0,46,0,43,0,13,27,0,33,34,0,3,26,0,29,0,47,21,0,31,34,0,0,26,20,0,36,0,8,26,0,47,21,11,2,0,44,0,13,0,42,0,49,27,27,16,7,34,0,1,1,161,34,0,2,21,7,0,34,34,0,1,26,7,1,162,0,24,11,2,0,36,34,0,1,26,16,7,34,0,1,34,0,2,16,7,34,0,1,1,163,0,25,32,1,65,20,0,45,1,164,27,11,2,0,44,0,25,0,40,0,0,27,0,13,0,53,21,27,34,0,2,17,7,34,0,1,32,1,9,0,41,32,0,4,32,1,68,32,1,24,32,0,4,26,0,38,0,31,34,0,4,26,27,27,27,34,0,2,19,7,34,0,1,32,1,9,0,41,32,0,4,32,1,68,0,31,34,0,4,26,27,27,34,0,2,19,7,34,0,1,7,0,46,34,0,1,11,2,0,44,34,0,2,27,7,32,0,1,32,0,5,0,41,34,0,4,27,34,0,2,19,33,0,6,48,6,32,1,58,0,36,0,24,32,1,5,20,0,45,0,15,0,43,0,16,27,27,26,32,0,1,21,0,46,0,14,0,40,0,24,0,36,0,8,26,0,47,21,0,17,20,0,43,0,15,27,27,0,1,0,72,21,11,2,0,44,32,1,5,27,20,33,0,7,48,6,1,165,33,0,8,48,6,32,1,1,0,46,0,16,0,42,0,49,27,0,12,0,33,32,0,8,26,21,11,2,0,44,0,16,0,42,0,46,27,0,12,0,55,21,27,20,33,0,9,48,6,32,0,5,32,1,89,32,0,9,17,33,0,10,48,6,0,46,32,0,8,0,52,27,33,0,11,48,6,34,0,11,34,0,10,16,0,46,32,1,71,11,2,32,1,1,0,30,0,47,0,53,11,2,21,11,2,0,44,34,0,9,27,16,33,0,12,33,0,13,12,2,48,6,0,24,0,40,32,1,72,27,0,7,0,47,21,0,45,1,166,27,33,0,14,48,6,0,24,0,37,1,167,27,33,0,15,48,6,34,0,13,34,0,14,32,0,6,17,0,33,34,0,1,26,0,43,34,0,15,27,0,33,34,0,5,26,32,1,153,20,1,168,20,11,2,0,44,32,1,72,27,16,7,34,0,1,0,35,32,1,75,26,34,0,2,19,0,15,16,0,36,0,8,26,0,47,17,7,32,0,2,0,16,0,47,17,34,0,1,11,2,0,44,34,0,2,0,16,0,46,17,27,7,34,0,1,0,15,16,0,31,32,1,76,26,16,0,36,0,18,26,0,46,17,0,6,0,47,17,7,32,1,81,0,45,0,1,0,43,0,24,0,37,0,33,11,0,26,0,15,32,1,78,0,41,34,0,2,27,21,27,27,27,32,1,80,0,24,0,37,0,25,27,34,0,1,21,11,2,0,44,0,15,0,40,0,22,27,0,20,0,46,21,27,7,32,0,1,0,15,16,0,16,0,46,17,32,1,78,16,33,0,3,48,6,32,0,1,0,15,16,0,31,32,1,78,0,46,32,1,13,11,2,0,44,0,22,0,41,0,12,27,27,32,0,3,21,0,5,0,144,21,26,16,6,32,0,3,0,36,0,8,26,0,47,17,0,17,16,0,15,34,0,3,17,0,31,0,34,0,16,26,26,34,0,1,0,31,32,1,11,26,16,17,7,32,0,1,0,12,0,41,0,18,27,32,0,2,19,0,34,0,7,26,0,47,17,33,0,3,48,6,32,0,1,32,1,78,0,41,0,27,27,32,0,2,19,33,0,4,48,6,32,0,4,0,31,0,22,0,13,32,0,3,21,26,16,0,36,0,8,26,0,47,17,0,5,0,145,17,6,32,0,4,0,31,0,29,0,42,0,33,32,0,3,26,0,7,0,22,21,27,26,16,33,0,5,48,6,32,0,5,0,36,32,1,13,26,16,0,5,0,146,17,6,34,0,4,0,31,0,47,0,24,0,16,0,46,21,11,2,0,44,0,22,0,20,34,0,3,21,27,26,16,0,36,0,6,26,0,46,17,33,0,6,48,6,34,0,1,0,15,0,41,0,26,27,34,0,2,19,0,15,34,0,5,0,16,0,46,17,0,26,34,0,6,11,1,17,17,7,32,0,1,0,31,0,12,26,16,0,36,0,6,26,0,46,17,0,20,0,46,17,0,5,0,147,17,6,0,52,33,0,3,48,33,0,4,48,6,11,0,33,0,5,48,6,32,0,1,33,0,6,48,6,34,0,1,0,31,0,22,26,16,32,1,38,16,0,31,1,169,26,16,7,32,0,1,0,15,16,33,0,3,48,0,22,16,33,0,4,48,6,32,0,3,0,31,32,1,78,26,16,33,0,5,48,6,32,0,1,0,12,16,33,0,6,48,6,1,170,33,0,7,48,6,34,0,1,32,1,78,16,33,0,8,48,6,0,47,33,0,9,48,6,0,46,0,20,16,33,0,10,48,33,0,11,48,33,0,12,48,6,34,0,6,0,17,16,0,35,1,171,26,32,0,8,32,1,58,16,32,0,7,0,8,26,0,47,17,32,1,58,16,17,6,32,0,10,0,15,16,33,0,10,49,0,16,0,46,17,0,7,32,0,3,0,16,0,46,17,0,12,16,17,33,0,13,48,6,32,0,3,0,31,0,33,32,0,13,26,0,7,0,12,21,26,16,32,1,13,32,0,10,17,0,5,0,150,17,6,0,35,1,172,32,0,3,0,31,32,1,11,26,16,26,26,33,0,14,48,6,32,0,11,32,0,14,1,173,11,2,0,44,32,0,13,0,20,0,46,17,27,32,0,12,17,7,32,0,2,0,22,16,33,0,3,48,6,32,0,1,0,22,16,33,0,4,48,6,32,0,3,0,23,32,0,4,17,0,5,0,151,17,6,34,0,1,0,35,0,8,0,42,34,0,2,0,43,0,16,27,27,0,24,11,2,0,44,0,25,0,13,34,0,3,21,27,26,34,0,4,0,17,16,17,7,34,0,1,34,0,2,20,7,34,0,1,33,0,3,33,0,4,33,0,5,12,3,48,6,34,0,5,34,0,4,34,0,3,21,7,34,0,1,33,0,3,33,0,4,12,2,48,6,34,0,4,34,0,3,26,7,34,0,1,33,0,3,33,0,4,33,0,5,12,3,48,6,34,0,5,34,0,4,34,0,3,27,7,0,33,32,1,71,26,33,0,0,48,6,1,174,33,0,1,48,6,0,0,0,23,0,53,21,0,45,32,0,1,32,1,72,26,27,33,0,2,48,6,1,175,33,0,3,48,6,1,176,33,0,4,48,6,1,177,33,0,5,48,6,0,153,0,24,0,154,1,178,0,155,0,46,32,0,3,0,47,27,32,0,4,20,0,156,0,47,32,0,3,0,46,27,32,0,4,20,0,157,0,47,32,0,3,0,47,27,34,0,4,20,0,158,0,47,32,0,3,0,47,27,34,0,5,20,0,159,0,47,34,0,3,0,47,27,11,14,32,1,20,16,33,0,6,33,0,7,12,2,48,6,1,179,11,1,0,26,34,0,7,32,1,39,0,42,0,31,0,22,26,27,32,0,6,17,17,32,1,16,34,0,6,32,1,85,16,27,33,0,8,48,6,1,180,33,0,9,48,6,32,1,88,0,33,32,0,0,26,11,2,0,44,0,16,0,42,0,53,0,43,0,23,27,27,0,12,0,33,32,0,0,26,21,27,33,0,10,48,6,1,181,0,43,0,24,0,16,0,47,21,34,0,9,0,25,21,32,0,2,20,0,33,32,0,0,26,1,182,34,0,10,0,16,0,42,0,46,27,21,1,183,32,0,2,20,11,2,0,44,0,24,0,40,32,1,19,27,27,0,24,0,16,0,47,21,34,0,2,20,11,4,0,44,0,24,0,16,0,46,21,0,40,0,53,0,24,0,49,11,2,0,44,0,13,0,42,0,49,27,27,11,2,0,44,0,13,0,42,0,46,27,27,27,27,27,7,32,0,1,0,7,0,47,17,33,0,2,48,6,0,160,0,161,11,2,0,16,32,0,1,17,33,0,3,48,6,0,19,0,43,0,12,27,0,7,0,47,21,0,12,0,42,0,46,27,0,7,0,47,21,11,2,0,16,32,0,1,17,33,0,4,48,6,1,184,1,185,11,2,0,16,34,0,1,17,33,0,5,48,6,0,162,0,26,34,0,3,17,0,26,0,123,17,33,0,6,48,6,0,163,0,26,32,0,6,17,33,0,7,48,6,0,164,0,26,34,0,6,17,33,0,8,48,6,32,1,9,0,43,0,24,0,37,1,186,1,187,11,2,0,44,0,25,0,40,32,1,5,27,27,27,27,7,32,0,1,0,12,16,0,13,0,47,17,0,5,0,165,17,6,32,0,1,32,1,12,0,47,17,33,0,3,48,6,32,0,2,0,12,0,41,0,7,27,32,0,1,19,1,188,32,0,2,19,6,32,0,3,0,36,0,8,26,34,0,1,1,189,0,38,0,47,27,34,0,2,19,17,7,32,0,1,32,1,93,32,0,2,19,33,0,3,48,6,32,0,1,0,15,16,33,0,4,48,0,22,16,33,0,5,48,0,11,34,0,3,17,33,0,6,48,6,34,0,4,0,28,32,0,6,0,7,32,0,5,17,17,0,26,34,0,6,0,34,32,1,11,0,43,0,28,27,26,0,38,32,0,1,0,43,34,0,5,0,20,0,46,17,0,45,1,190,27,27,27,34,0,2,19,17,0,15,34,0,1,32,1,78,16,17,7,32,0,1,32,1,93,32,0,2,19,33,0,3,48,6,32,0,1,0,15,16,33,0,4,48,0,22,16,33,0,5,48,0,11,32,0,3,17,33,0,6,48,6,32,0,6,0,34,32,1,11,0,43,0,29,0,42,0,7,0,42,34,0,3,27,27,27,26,0,38,32,0,1,0,43,34,0,5,0,20,0,46,17,0,45,1,191,27,27,27,34,0,2,19,0,26,34,0,4,0,29,34,0,6,17,17,0,15,34,0,1,32,1,78,16,17,7,32,0,1,0,12,16,0,12,0,47,17,0,5,0,170,17,6,32,0,1,0,31,32,1,96,26,16,6,32,0,1,11,0,0,43,0,15,27,0,31,0,17,26,0,36,0,31,0,26,0,42,0,27,27,26,26,11,0,0,20,16,21,11,2,0,44,0,24,0,36,0,8,26,0,47,21,0,20,0,46,21,27,16,0,31,0,1,0,42,0,46,27,26,16,0,1,34,0,1,0,31,0,46,26,16,17,7,32,0,2,0,12,16,0,23,0,47,17,0,5,0,171,17,6,32,0,2,32,1,11,16,33,0,2,49,0,22,16,33,0,3,48,6,34,0,1,32,0,3,0,20,0,46,17,0,45,0,24,0,37,1,192,27,27,34,0,2,17,7,32,0,1,32,1,78,16,0,28,32,0,2,19,33,0,3,48,6,32,0,1,32,1,12,34,0,2,19,33,0,4,48,0,36,0,8,26,0,47,17,33,0,5,48,6,34,0,1,0,15,16,33,0,6,48,6,32,0,5,0,17,16,0,15,34,0,4,17,33,0,7,48,6,1,193,33,0,8,48,6,32,0,3,0,36,0,8,26,0,47,17,0,17,16,0,31,1,194,26,16,0,22,0,12,0,46,21,0,45,34,0,8,27,16,0,15,34,0,3,17,7,34,0,4,33,0,5,48,6,1,195,33,0,6,48,6,1,196,33,0,7,48,6,34,0,1,32,0,5,0,20,20,1,197,1,198,34,0,7,11,4,0,44,0,12,0,20,0,46,21,0,41,0,6,0,42,0,8,0,42,0,49,27,27,27,27,34,0,2,19,32,1,83,16,7,32,0,1,0,12,16,0,13,0,47,17,0,5,0,176,17,6,34,0,4,33,0,5,48,6,1,199,33,0,6,48,6,34,0,1,34,0,6,1,200,11,2,0,44,0,47,0,38,0,22,0,20,0,46,21,27,27,34,0,2,19,7,32,0,2,0,12,16,0,23,0,47,17,0,5,0,179,17,6,34,0,2,32,1,11,16,33,0,3,48,6,32,0,3,0,31,32,1,8,0,7,0,47,21,26,16,33,0,4,48,0,36,0,6,26,0,46,17,33,0,5,48,6,32,0,5,0,23,0,47,17,0,5,0,180,17,6,34,0,1,32,1,11,16,33,0,6,48,0,22,16,33,0,7,48,6,32,0,3,0,24,0,36,0,8,26,0,47,21,1,201,11,2,0,44,34,0,5,27,16,33,0,8,48,6,32,0,6,32,0,7,0,12,32,0,8,17,0,7,0,47,17,0,45,0,24,0,37,1,202,27,27,16,0,15,32,0,3,17,7,32,0,1,0,31,32,1,7,26,16,0,36,0,8,26,0,47,17,0,5,0,185,17,6,32,0,1,0,31,0,13,0,42,0,52,27,26,16,0,36,0,8,26,0,47,17,0,5,0,186,17,6,0,3,33,0,5,48,6,32,0,1,0,25,0,38,0,46,27,0,45,0,24,1,203,0,22,0,43,0,34,0,7,26,27,21,27,34,0,2,19,33,0,1,49,6,32,0,1,0,4,34,0,1,32,0,5,16,33,0,6,48,17,33,0,7,48,6,0,46,33,0,8,48,6,34,0,6,0,31,1,204,0,34,0,30,26,34,0,7,21,34,0,4,20,26,16,7,32,0,1,0,12,16,0,12,0,47,17,0,5,0,187,17,6,32,1,104,0,24,26,33,0,3,48,6,34,0,1,32,0,3,0,1,0,46,0,40,0,17,27,21,0,31,32,1,9,0,40,1,205,27,26,0,36,0,31,0,31,0,26,26,26,26,11,0,0,20,16,0,20,16,21,0,1,0,31,0,46,26,11,0,0,43,0,15,27,0,1,0,24,21,20,21,11,2,0,44,32,1,77,0,20,0,47,21,27,16,7,32,0,2,0,12,16,33,0,3,48,6,32,0,1,0,12,16,0,13,32,0,3,17,0,5,0,188,17,6,32,0,1,32,1,78,16,33,0,4,48,0,28,32,0,3,17,0,35,0,7,26,32,0,2,32,1,78,16,17,33,0,5,48,6,32,0,5,0,46,0,16,0,42,0,46,27,0,12,0,47,21,11,2,0,44,32,0,3,0,12,0,47,17,27,16,33,0,6,48,6,34,0,5,0,31,0,12,0,42,0,46,27,26,0,36,0,8,26,0,47,21,0,47,11,2,0,44,32,0,6,27,16,0,5,0,189,17,6,32,0,1,0,43,0,24,0,37,0,25,0,40,32,0,1,0,15,16,1,206,1,207,11,2,0,44,34,0,1,0,12,16,0,12,32,0,3,17,27,16,27,27,27,33,0,7,48,6,34,0,2,0,15,16,32,1,104,32,0,7,26,34,0,6,17,0,1,11,0,34,0,7,16,17,7,32,0,1,32,1,5,16,0,5,0,190,17,6,34,0,1,32,1,106,32,1,137,11,2,0,44,32,0,2,32,1,77,16,0,13,0,49,17,27,34,0,2,17,7,32,0,1,0,12,16,0,23,0,47,17,0,5,0,191,17,6,32,0,1,32,1,11,16,33,0,1,49,6,32,0,1,0,22,16,0,53,0,43,0,13,27,0,8,0,13,0,42,0,47,27,21,16,0,5,0,192,17,6,32,0,1,0,31,32,1,7,26,16,0,36,0,8,26,0,47,17,0,5,0,193,17,6,34,0,2,0,31,0,25,0,8,0,34,0,9,0,40,0,11,27,26,21,0,34,0,7,26,0,47,21,0,6,0,7,21,0,42,32,0,1,0,22,16,27,26,16,0,34,0,30,26,34,0,1,17,7,34,0,1,32,1,108,0,47,0,46,11,2,0,38,0,49,11,1,27,21,7,32,0,1,32,1,109,34,0,5,26,32,0,2,19,33,0,6,48,0,31,0,21,0,42,0,46,27,26,16,33,0,7,48,6,32,0,4,33,0,8,48,6,1,208,0,38,1,209,27,33,0,9,48,6,1,210,1,211,11,2,0,16,34,0,4,0,47,32,1,65,11,2,0,44,0,0,0,13,0,53,21,27,16,17,33,0,10,48,6,1,212,33,0,11,48,6,1,213,33,0,12,48,6,1,214,33,0,13,48,6,34,0,1,32,0,13,34,0,6,26,34,0,2,19,7,0,24,0,25,11,2,0,44,0,20,27,33,0,6,48,6,32,0,1,32,1,109,34,0,5,26,0,35,0,7,0,43,32,0,6,27,34,0,6,0,7,0,25,21,11,2,0,44,0,24,0,13,0,46,21,27,26,0,12,0,41,0,27,27,21,32,0,2,19,33,0,7,48,6,0,24,0,20,20,32,1,99,0,24,0,20,0,37,0,31,0,20,26,27,20,11,3,0,44,0,12,0,43,0,23,27,0,6,0,47,21,0,8,0,46,0,43,0,21,27,21,27,33,0,8,48,6,34,0,1,32,0,8,32,0,7,0,16,0,42,0,22,0,34,0,7,26,0,47,21,27,16,17,32,1,69,34,0,4,26,34,0,2,34,0,8,34,0,7,0,16,0,46,17,19,19,32,1,83,16,7,34,0,4,33,0,6,48,6,0,46,1,215,0,38,0,33,1,216,26,27,32,0,2,19,33,0,7,48,6,32,0,1,34,0,5,34,0,2,19,33,0,8,48,6,1,217,33,0,9,48,6,34,0,1,34,0,9,1,218,11,2,0,44,32,0,8,32,1,8,16,27,16,7,32,0,2,32,1,113,32,0,1,17,0,11,16,0,8,34,0,2,17,0,7,34,0,1,17,7,32,0,2,32,1,125,16,32,1,125,0,47,17,0,5,0,197,17,6,32,0,2,0,31,32,1,125,26,16,33,0,3,48,0,36,32,1,128,26,0,46,17,33,0,4,48,6,32,0,1,32,1,125,16,32,1,127,32,0,4,17,0,5,0,198,17,6,32,0,1,32,1,78,16,0,28,32,0,4,17,32,1,129,32,0,2,0,31,32,1,78,26,16,32,1,87,16,17,33,0,5,48,6,32,0,5,32,0,3,32,1,125,0,47,17,32,1,134,32,0,3,17,0,43,32,1,127,27,32,1,119,32,1,127,0,42,0,46,27,21,16,0,36,32,1,119,26,0,47,17,0,5,0,189,17,6,0,46,11,1,0,26,34,0,5,17,0,30,32,0,3,0,32,32,1,128,26,16,32,1,135,0,46,17,17,32,1,117,34,0,3,17,33,0,6,48,6,32,0,2,0,31,32,1,131,26,16,33,0,2,49,0,31,32,1,124,26,16,0,34,32,1,129,26,32,0,6,17,33,0,7,48,6,0,33,32,0,1,26,32,1,103,34,0,1,32,1,12,34,0,4,17,0,43,0,26,27,21,33,0,8,48,6,32,0,7,0,36,32,1,121,26,0,47,17,11,1,32,0,8,16,0,43,0,30,27,33,0,9,48,6,32,0,2,0,16,0,42,0,46,27,0,41,32,1,104,32,0,9,26,27,0,35,32,1,104,0,24,26,26,32,1,121,34,0,7,32,1,133,16,32,1,135,0,47,17,0,32,32,1,121,26,16,32,1,133,16,21,0,36,0,31,0,31,32,1,128,26,26,26,20,0,31,34,0,9,26,20,11,2,0,44,0,24,0,40,32,1,124,27,32,1,124,0,47,21,27,34,0,6,17,0,1,34,0,2,0,31,0,46,26,16,34,0,8,16,17,7,32,0,2,32,1,125,16,0,34,32,1,129,26,0,47,17,33,0,3,48,6,32,0,3,32,1,127,0,46,17,0,5,0,199,17,6,32,0,1,32,1,125,16,32,1,127,34,0,3,17,0,5,0,200,17,6,34,0,1,32,1,141,0,42,32,0,2,27,32,1,131,0,40,32,1,43,27,32,1,131,32,1,78,21,0,43,0,35,0,27,26,27,20,0,41,32,1,141,27,34,0,2,17,7,32,0,2,32,1,125,16,32,1,126,0,47,17,0,5,0,201,17,6,34,0,1,32,1,78,16,32,1,124,0,41,32,1,127,27,32,0,2,17,0,5,0,202,17,6,34,0,2,32,1,131,16,0,31,32,1,8,26,16,0,36,32,1,119,26,0,47,17,0,5,0,203,17,7,32,0,1,32,1,78,16,32,1,140,32,0,2,17,0,31,0,36,32,1,117,26,26,16,32,1,132,16,0,31,0,33,34,0,1,26,32,1,53,0,30,0,42,34,0,2,27,21,26,16,7,32,0,1,32,1,144,32,0,2,17,6,32,0,2,32,1,131,16,33,0,2,49,6,32,0,2,32,1,142,16,32,1,130,16,0,36,32,1,128,26,0,46,17,32,1,129,32,0,1,32,1,125,16,17,33,0,3,48,6,32,0,3,32,1,122,32,0,2,17,0,36,32,1,119,26,0,47,17,0,5,0,204,17,6,34,0,1,32,1,145,34,0,3,32,1,132,16,0,24,32,1,134,0,34,32,1,142,0,40,32,1,130,27,26,21,32,0,2,17,0,26,34,0,2,17,17,7,32,0,1,32,1,144,32,0,2,17,6,32,0,2,32,1,131,16,33,0,2,49,6,32,0,1,32,1,125,16,33,0,3,48,6,32,0,2,32,0,3,0,43,32,1,122,27,32,1,119,32,1,142,21,16,0,36,32,1,119,26,0,47,17,32,1,155,16,6,34,0,1,32,1,145,34,0,3,32,1,132,16,0,24,32,1,134,0,34,32,1,142,0,40,32,1,130,27,26,21,32,0,2,17,0,26,34,0,2,17,32,1,14,16,17,7,34,0,1,32,1,153,16,7,34,0,1,32,1,1,16,7,34,0,1,32,1,153,16,7,32,0,2,0,43,32,0,1,27,0,38,34,0,2,34,0,1,20,27,7,34,0,1,33,0,3,33,0,4,33,0,5,33,0,6,12,4,48,6,32,1,149,32,1,130,20,33,0,7,48,6,34,0,6,1,219,1,220,0,33,32,1,157,26,11,2,0,44,0,24,0,40,32,0,7,27,27,11,2,0,44,0,25,0,40,34,0,7,27,27,34,0,4,17,7,34,0,1,32,1,1,16,7,34,0,1,32,1,162,16,7,34,0,1,32,1,166,16,7,34,0,2,34,0,1,16,7,34,0,1,32,1,169,16,7,34,0,2,0,36,34,0,1,26,16,7,0,24,32,1,77,0,40,32,1,156,27,34,0,1,21,0,25,0,24,21,7,32,0,1,34,0,4,32,0,2,19,33,0,6,48,6,32,0,6,34,0,5,34,0,2,19,32,1,77,34,0,1,17,32,1,156,16,6,34,0,6,7,32,0,1,32,1,77,16,32,1,125,0,49,17,32,1,155,16,6,32,0,1,0,31,32,1,125,26,16,32,1,125,0,47,17,0,36,32,1,119,26,0,47,17,32,1,156,16,6,32,0,1,32,1,154,16,33,0,3,48,6,32,0,3,0,31,32,1,8,26,16,0,36,32,1,119,26,0,47,17,32,1,156,16,6,32,0,1,0,31,32,1,135,0,42,0,52,27,26,16,32,1,154,16,32,1,123,32,0,3,17,0,36,32,1,119,26,0,47,17,32,1,156,16,6,32,0,3,0,3,16,33,0,4,48,6,0,47,32,1,127,32,0,4,17,0,36,32,1,119,26,0,47,17,32,1,156,16,6,34,0,4,32,1,130,16,32,1,134,16,33,0,5,48,6,32,0,5,0,31,0,52,26,16,32,1,154,34,0,1,0,31,32,1,124,26,16,32,1,134,16,17,0,30,34,0,5,32,1,154,34,0,3,17,32,1,33,16,17,7,32,0,2,32,1,125,16,32,1,125,0,47,17,32,1,155,16,6,32,0,2,0,31,32,1,8,26,16,0,36,32,1,119,26,0,47,17,32,1,155,16,6,34,0,2,32,1,140,16,33,0,3,48,6,32,0,1,0,31,32,1,124,26,0,41,32,1,77,27,32,0,3,17,32,1,156,16,6,34,0,1,32,1,154,0,41,0,30,0,42,32,1,33,27,27,34,0,3,17,7,32,1,125,0,42,0,47,27,32,1,120,32,1,125,0,42,0,46,27,21,33,0,3,48,6,32,0,1,32,0,3,16,32,1,156,16,6,32,0,2,34,0,3,16,32,1,155,16,6,34,0,2,32,1,124,34,0,1,17,7,32,0,1,32,1,5,16,32,1,156,16,6,32,0,1,32,1,125,16,32,1,125,0,46,17,32,1,156,16,6,34,0,1,32,1,131,16,0,16,0,46,17,7,32,0,2,32,1,125,0,41,32,1,129,27,32,0,1,17,33,0,3,48,6,32,0,3,0,47,0,43,32,1,127,27,32,1,119,32,1,127,0,42,0,46,27,21,16,32,1,156,16,6,32,0,2,0,47,32,1,124,11,2,0,44,32,0,3,27,16,33,0,4,48,6,32,0,1,32,1,124,16,32,1,127,32,0,4,17,32,1,156,16,6,32,0,1,32,1,161,32,1,138,0,42,32,0,4,27,11,2,0,44,34,0,3,27,16,32,1,77,34,0,2,17,32,1,156,16,6,34,0,1,32,1,139,34,0,4,17,7,32,0,1,32,1,124,16,32,1,125,0,49,17,32,1,156,16,6,32,0,1,32,1,161,16,32,1,77,34,0,2,19,32,1,156,16,6,34,0,1,32,1,161,0,47,17,7,32,0,1,32,1,124,16,32,1,125,0,47,17,32,1,156,16,6,34,0,1,32,1,161,16,7,32,0,1,32,1,78,16,32,1,77,0,49,11,1,17,32,1,156,16,6,32,0,1,0,16,0,46,17,32,1,77,34,0,2,19,32,1,156,16,6,34,0,1,0,16,0,47,17,7,32,0,1,32,1,78,16,32,1,77,0,47,11,1,17,32,1,156,16,6,34,0,1,0,16,0,46,17,7,34,0,1,32,1,163,16,7,0,24,0,40,32,1,77,27,32,1,122,0,46,21,32,1,156,20,0,25,32,1,165,32,1,148,34,0,1,26,26,21,7,0,24,0,40,32,1,77,27,32,1,122,0,46,21,32,1,156,20,0,25,0,46,0,40,32,1,155,27,0,38,32,1,164,32,1,148,34,0,1,26,26,27,21,7,0,24,0,40,32,1,125,27,32,1,122,0,46,21,32,1,156,20,0,25,32,1,173,32,1,148,34,0,1,26,0,24,0,42,32,1,5,0,40,32,1,156,27,27,20,26,21,7,32,1,165,32,1,148,34,0,1,26,26,7,0,24,0,40,32,1,125,27,32,1,122,0,46,21,32,1,156,20,0,25,0,24,32,0,1,32,1,135,21,0,38,32,1,124,32,1,122,0,47,21,0,45,32,1,139,0,42,0,47,27,34,0,1,32,1,139,0,42,0,52,27,21,32,1,154,32,1,161,21,27,27,21,7,32,1,148,34,0,2,26,33,0,3,48,6,32,0,3,0,42,32,0,1,27,0,38,34,0,3,27,32,1,148,34,0,1,26,20,7,34,0,1,32,1,168,32,1,148,34,0,2,26,27,7,34,0,1,32,1,129,16,32,1,167,34,0,2,27,7,32,1,148,34,0,1,26,0,38,32,1,148,34,0,2,26,27,7,32,1,148,34,0,1,26,0,42,34,0,2,27,7,34,0,1,0,38,32,1,157,27,7,32,1,148,32,0,2,26,32,1,148,32,0,1,26,20,0,38,34,0,1,0,33,0,46,0,40,32,1,155,27,26,1,221,11,2,0,44,0,24,0,40,32,1,149,27,27,34,0,2,17,27,7,34,0,4,32,1,153,16,33,0,5,48,6,34,0,1,34,0,5,34,0,2,19,7,32,0,1,1,222,34,0,5,32,1,174,34,0,1,34,0,4,32,0,2,19,17,26,34,0,2,19,7,32,0,1,11,1,0,1,34,0,1,17,7,32,1,122,32,1,141,32,0,1,21,32,1,174,20,33,1,2,49,6,34,0,1,32,1,3,32,1,4,11,3,7,34,0,1,33,2,163,51,7,34,0,1,32,2,2,16,7,34,0,1,32,2,2,16,7,32,0,1,0,14,0,41,32,2,13,27,32,0,2,19,0,5,0,102,17,6,34,0,1,0,35,34,0,4,26,34,0,2,19,7,32,0,2,0,14,16,33,0,5,48,6,32,0,2,0,12,16,33,0,6,48,6,32,0,1,0,14,16,33,0,7,48,6,32,0,7,0,28,32,0,6,17,32,2,13,34,0,5,17,0,5,0,103,17,6,32,0,7,0,29,34,0,6,17,0,36,0,8,26,0,47,17,33,0,8,48,6,34,0,2,0,15,16,33,0,9,48,0,22,16,33,0,10,48,6,34,0,1,0,15,16,33,0,11,48,6,0,46,0,21,32,0,10,17,0,8,32,0,8,17,0,17,0,41,0,31,0,33,34,0,11,26,0,16,0,6,0,42,0,8,0,42,34,0,8,27,27,21,34,0,4,34,0,9,0,43,0,16,27,21,26,27,34,0,10,17,0,15,34,0,7,17,7,34,0,1,32,1,2,34,0,2,19,7,34,0,1,0,31,32,1,2,0,42,0,33,34,0,2,26,27,26,16,7,34,0,2,0,31,0,33,34,0,1,26,0,43,32,1,2,27,26,16,7,34,0,1,0,31,32,1,2,26,16,7,34,0,1,32,1,2,34,0,2,19,7,34,0,1,32,2,24,32,1,2,26,34,0,2,19,7,0,27,0,16,0,23,21,0,27,32,2,27,21,33,0,3,48,6,32,0,1,0,22,0,41,32,0,3,27,32,0,2,19,33,0,4,33,0,5,12,2,48,6,34,0,1,1,223,0,41,1,224,27,34,0,2,19,33,0,6,48,6,32,0,4,34,0,6,11,2,7,34,0,2,33,0,3,48,6,34,0,1,33,0,4,48,6,1,225,32,1,6,11,2,0,44,0,12,0,42,32,1,7,27,27,33,0,5,48,6,0,46,32,0,5,16,7,34,0,1,0,12,0,42,0,46,27,0,45,34,0,2,27,20,7,0,34,34,0,1,26,7,32,1,3,0,16,32,0,1,17,34,0,4,16,0,47,0,13,34,0,1,17,0,45,1,226,34,0,5,26,27,34,0,2,19,7,32,0,2,0,12,16,0,34,0,7,26,0,47,17,33,0,3,48,0,7,32,0,1,0,12,16,17,33,0,4,48,6,34,0,3,0,13,0,46,17,0,5,0,105,17,6,32,0,4,0,13,0,46,17,0,5,0,106,17,6,32,0,2,32,2,12,0,47,17,33,0,5,48,6,32,0,2,0,22,16,33,0,6,48,6,32,0,1,32,2,9,16,33,0,1,49,6,32,0,1,32,2,12,32,0,4,17,33,0,7,48,6,32,0,1,0,14,16,0,28,34,0,4,17,33,0,8,48,0,36,0,8,26,0,47,17,33,0,9,48,6,34,0,1,0,15,0,41,1,227,1,228,11,2,0,44,32,0,6,0,20,0,46,17,27,27,34,0,2,17,0,15,34,0,8,17,7,32,0,1,0,12,16,0,13,0,47,17,0,5,0,104,17,6,32,0,1,0,22,16,33,0,3,48,6,34,0,1,32,0,3,0,40,0,17,27,1,229,11,2,0,44,32,0,3,0,13,0,49,17,27,16,7,32,0,2,0,12,16,0,34,0,7,26,0,47,17,33,0,3,48,6,32,0,3,0,13,0,46,17,0,5,0,108,17,6,32,0,1,0,12,16,0,13,32,0,3,17,0,5,0,109,17,6,32,0,2,0,22,16,33,0,4,48,6,32,0,2,32,2,12,0,47,17,33,0,5,48,0,36,0,8,26,0,47,17,33,0,6,48,6,32,0,1,0,12,16,0,34,0,7,26,34,0,3,17,33,0,7,48,6,32,0,1,0,14,16,0,28,32,0,7,17,33,0,8,48,0,36,0,8,26,0,47,17,33,0,9,48,6,34,0,1,1,230,1,231,11,2,0,44,0,46,32,2,12,0,42,34,0,7,27,32,2,13,34,0,5,21,11,2,0,44,32,0,6,0,8,32,0,4,17,0,20,0,46,17,33,0,10,48,27,27,34,0,2,17,0,15,34,0,8,17,7,0,17,0,43,0,31,0,6,26,0,42,0,31,32,0,1,0,43,0,8,27,26,27,27,33,0,3,48,6,32,0,2,32,0,3,33,1,5,50,6,34,0,2,0,7,34,0,1,17,0,6,0,47,17,0,18,0,46,17,34,0,3,33,1,7,50,7,32,0,1,0,7,32,1,3,17,0,17,16,0,31,0,6,0,42,34,0,1,27,26,16,7,34,0,1,0,5,32,1,4,21,0,25,0,24,21,7,32,1,4,0,8,32,0,1,17,0,6,34,0,2,32,2,48,34,0,1,19,19,33,1,4,49,7,32,0,2,0,12,16,0,23,0,47,17,0,5,32,1,10,17,6,32,0,2,32,1,13,16,6,32,0,2,0,15,16,33,0,2,49,0,22,16,33,0,3,48,6,32,0,1,0,12,16,0,13,32,0,3,17,0,5,32,1,11,17,6,0,46,0,20,16,33,0,4,48,6,32,0,1,0,14,16,33,0,5,48,0,28,32,0,3,17,33,0,6,48,0,35,1,232,26,34,0,2,17,6,34,0,1,0,15,34,0,5,0,29,34,0,3,17,0,26,34,0,6,0,36,0,8,26,0,47,17,11,1,17,17,0,30,32,0,4,17,7,32,0,1,0,12,16,0,13,0,47,17,0,5,32,1,9,17,6,34,0,1,32,1,6,34,0,2,19,7,34,0,2,0,12,32,1,4,17,7,32,1,3,0,6,33,1,4,50,6,34,0,1,0,6,0,47,17,7,34,0,1,0,38,34,0,2,27,7,34,0,1,0,1,0,46,21,7,34,0,1,0,1,34,0,2,23,7,32,0,2,0,37,34,0,1,32,2,67,34,0,2,17,27,7,34,0,4,33,0,6,48,6,34,0,1,33,0,7,33,0,8,33,0,9,12,3,48,6,34,0,5,32,2,5,0,21,34,0,8,21,0,45,1,233,0,40,32,1,7,27,27,16,34,0,7,34,0,2,19,33,0,10,48,6,34,0,10,34,0,9,0,45,1,234,27,16,7,0,47,33,0,3,48,6,0,46,1,235,0,36,0,18,26,0,46,21,0,6,0,47,21,11,2,0,44,32,2,5,27,33,0,4,48,6,32,0,1,32,0,4,16,33,0,5,48,6,34,0,2,0,27,0,41,0,27,27,0,33,32,2,71,26,0,15,0,41,0,27,27,11,2,0,44,32,2,73,27,1,236,11,3,0,44,34,0,5,0,11,0,49,17,27,34,0,1,17,7,32,0,2,33,0,3,33,0,4,12,2,48,6,1,237,0,42,34,0,2,27,33,0,5,48,6,1,238,33,0,6,48,6,1,239,0,42,0,46,27,33,0,7,48,6,34,0,1,0,33,32,0,4,26,0,16,0,46,21,34,0,7,11,2,0,44,32,1,12,0,40,32,2,5,27,27,16,7,32,1,6,34,0,1,16,7,34,0,1,0,12,0,42,32,1,4,27,0,7,0,47,21,0,45,1,240,27,16,6,32,1,5,0,16,0,47,0,6,32,1,3,17,33,1,3,49,17,7,34,0,2,33,0,5,48,6,34,0,4,33,0,6,48,6,34,0,1,0,31,1,241,26,16,7,34,0,2,33,0,3,48,6,32,1,8,0,16,34,0,1,17,33,0,4,48,6,32,0,4,0,17,16,0,31,0,8,0,42,32,0,3,27,26,16,0,34,0,30,26,32,1,3,17,0,31,0,12,26,16,33,0,5,48,0,31,34,0,5,0,36,0,18,26,0,46,17,0,34,0,7,26,0,47,17,0,43,0,7,27,26,16,33,0,6,48,6,32,0,6,0,31,0,13,0,42,0,46,27,26,16,0,36,0,8,26,0,47,17,0,5,0,148,17,6,32,0,6,32,2,38,16,0,31,0,8,0,42,32,0,3,27,26,16,33,0,7,48,0,22,16,33,0,8,48,6,32,0,3,0,17,16,0,31,0,6,26,34,0,7,17,0,31,0,6,26,32,1,9,0,17,16,0,31,0,8,0,42,32,0,3,0,8,32,0,4,17,27,26,16,17,0,15,16,0,34,0,30,26,32,1,5,17,33,0,9,48,6,32,0,3,0,8,32,0,8,17,0,17,16,0,31,0,25,26,32,1,10,17,0,15,16,33,0,10,48,6,32,0,9,0,35,0,22,0,43,0,20,27,26,32,0,10,17,0,36,0,8,26,0,47,17,0,5,0,148,17,6,34,0,9,0,35,0,16,26,34,0,10,17,33,0,11,48,6,34,0,8,0,17,16,0,31,0,8,0,42,32,0,3,27,26,16,0,34,0,30,26,32,0,11,17,33,0,12,48,6,34,0,3,0,17,16,0,31,0,25,26,32,0,12,17,0,31,0,24,26,32,1,9,0,17,16,17,0,15,16,32,2,13,34,0,11,17,0,5,0,149,17,6,1,242,33,0,13,48,32,2,38,16,33,0,14,48,6,32,0,13,32,1,7,0,6,26,0,46,17,0,30,32,0,14,17,0,35,0,7,26,32,0,14,0,22,16,0,17,16,17,33,0,15,48,6,32,0,6,0,31,0,6,26,32,1,10,17,33,1,10,49,6,34,0,15,0,31,0,24,26,32,1,12,17,0,35,0,6,26,34,0,13,0,30,32,0,14,17,0,31,0,8,26,32,1,12,17,17,33,1,12,49,6,34,0,14,0,31,0,6,0,42,32,0,4,0,43,0,8,27,27,26,32,1,11,17,33,1,11,49,6,34,0,4,0,8,33,1,9,50,7,34,0,4,0,16,34,0,1,17,0,16,34,0,2,19,7,0,29,0,42,0,33,32,1,13,26,0,7,0,22,21,27,33,0,3,48,6,32,1,5,0,16,0,46,17,32,0,3,16,33,0,4,48,6,32,1,5,0,31,34,0,3,32,2,13,32,0,4,21,26,16,0,36,0,8,26,0,47,17,0,5,0,150,17,6,32,0,4,0,36,0,8,26,16,33,0,5,48,0,17,16,0,15,34,0,4,17,33,0,6,48,6,32,0,6,0,31,0,25,26,34,0,1,17,32,1,14,34,0,6,0,31,0,6,0,42,0,8,0,42,34,0,5,27,27,26,34,0,2,19,17,7,0,33,32,2,71,26,34,0,1,11,2,0,44,34,0,4,0,7,0,47,21,0,41,0,8,0,38,0,24,27,27,27,7,32,0,1,1,243,34,0,1,34,0,4,34,0,5,11,3,26,11,2,0,44,0,24,34,0,2,20,27,7,32,1,0,0,38,34,0,1,27,7,34,0,1,0,38,32,1,0,27,7,34,0,1,33,0,3,48,6,1,244,7,32,1,1,34,0,2,26,33,0,3,48,6,34,0,1,32,0,3,1,245,1,246,11,3,0,44,0,33,0,53,26,0,7,0,0,21,27,16,7,32,0,1,32,1,8,16,33,0,3,48,6,34,0,1,34,0,3,34,0,2,19,7,34,0,1,32,2,1,16,7,34,0,1,0,29,0,47,17,0,31,32,2,89,0,42,0,33,34,0,2,26,27,26,16,7,0,33,34,0,1,0,16,0,47,17,26,7,32,0,1,0,19,16,33,0,5,48,0,20,0,42,32,0,2,27,0,45,34,0,4,27,16,6,34,0,5,0,17,16,0,31,32,0,1,0,6,32,0,2,17,0,43,0,6,27,26,0,31,0,46,0,43,0,20,27,0,45,0,51,27,26,20,0,31,0,13,0,42,34,0,2,27,0,45,0,51,27,26,11,2,0,44,34,0,1,0,20,0,46,17,27,16,7,34,0,1,6,0,6,0,18,0,46,21,0,17,20,0,7,0,18,0,46,21,0,17,20,0,31,0,6,26,0,24,0,40,0,20,27,21,11,2,0,44,0,20,0,42,0,46,27,27,7,32,0,2,32,2,7,16,0,5,32,1,8,17,6,32,0,2,0,13,0,46,17,33,0,3,48,6,32,0,1,0,22,16,0,6,0,18,0,46,21,0,11,11,2,0,44,32,0,3,27,32,0,2,17,33,0,4,48,6,1,247,32,0,1,26,33,0,5,48,6,0,47,33,0,6,48,6,0,24,33,0,7,48,6,32,0,1,0,12,0,20,0,47,21,0,45,1,248,0,42,32,0,2,27,27,16,6,32,0,1,0,15,16,0,29,0,28,11,2,0,44,32,0,3,0,12,32,1,2,17,27,32,0,6,0,8,34,0,4,17,17,32,1,2,0,45,0,24,0,46,0,43,0,21,27,0,45,1,249,27,34,0,1,0,40,0,22,27,0,7,34,0,2,0,40,0,19,27,21,21,27,16,32,0,7,16,7,32,0,2,0,12,16,0,23,0,47,17,0,5,32,1,7,17,6,32,0,2,0,15,16,33,0,2,49,6,32,0,2,0,31,32,2,7,26,16,0,36,0,8,26,0,47,17,0,5,32,1,8,17,6,32,0,2,0,22,16,33,0,3,48,6,32,0,1,32,2,78,16,0,22,0,43,0,21,27,0,45,1,250,27,32,0,3,17,33,0,4,48,6,1,251,33,0,5,48,6,0,46,0,20,16,33,0,6,48,6,0,47,33,0,7,48,6,1,252,33,0,8,48,6,0,46,33,0,9,48,6,34,0,2,0,35,1,253,32,1,5,1,254,26,34,0,8,0,25,21,11,2,0,44,32,1,4,27,26,32,0,4,0,28,32,0,3,17,17,33,0,10,48,6,34,0,1,0,15,0,42,32,0,4,27,1,255,11,2,0,44,32,0,6,0,12,16,0,20,0,46,17,27,16,7,32,0,1,0,13,0,46,17,0,5,0,166,17,6,32,0,1,0,23,0,47,17,0,5,0,167,17,6,34,0,2,32,2,78,16,0,29,34,0,1,0,7,0,47,17,17,32,2,13,32,1,3,17,0,5,0,168,17,7,34,0,2,0,47,0,22,11,2,0,44,0,24,0,12,0,41,0,13,27,34,0,1,21,27,16,7,34,0,2,0,17,16,0,31,34,0,1,0,1,16,26,16,7,34,0,2,0,17,16,0,31,34,0,1,0,1,16,26,16,7,32,0,1,0,12,16,0,13,32,1,3,17,0,5,0,172,17,6,32,0,2,0,31,32,2,8,26,16,0,36,0,8,26,16,0,5,0,173,17,6,32,0,1,32,2,78,16,33,0,3,48,6,32,0,2,0,35,0,7,0,6,0,47,21,26,32,0,3,0,28,32,1,3,17,17,33,0,4,48,6,32,0,4,0,31,0,13,0,42,0,46,27,26,16,0,36,0,8,26,16,0,5,0,174,17,6,32,0,3,0,29,32,1,3,17,33,0,5,48,0,36,0,8,26,0,47,17,33,0,6,48,6,1,256,33,0,7,48,6,34,0,1,1,257,34,0,7,11,2,0,44,0,25,0,36,0,8,26,32,0,4,0,36,0,8,26,32,0,6,17,21,0,20,0,46,21,27,34,0,2,17,7,0,46,0,17,16,0,25,0,0,0,13,0,53,21,0,45,0,46,27,20,0,37,0,24,27,32,1,6,17,0,1,16,33,0,3,48,6,34,0,1,0,1,32,1,7,0,31,0,33,34,0,3,26,26,16,0,34,0,24,0,37,0,25,27,26,32,1,6,17,17,7,32,1,7,0,31,0,6,0,42,34,0,1,0,8,32,1,5,17,27,26,16,0,34,0,30,26,32,1,6,17,7,32,2,99,0,42,0,47,27,0,41,32,0,1,32,2,68,0,35,32,0,1,26,0,38,0,31,34,0,1,26,27,27,27,7,32,0,2,0,22,0,41,0,12,27,32,0,1,19,0,5,0,175,19,6,34,0,1,32,1,6,32,1,5,26,34,0,2,19,7,34,0,1,32,1,6,32,1,5,0,42,0,33,34,0,2,26,27,26,16,7,34,0,2,32,1,6,0,33,34,0,1,26,0,43,32,1,5,27,26,16,7,32,0,1,32,2,78,16,0,29,0,47,17,33,0,3,48,6,1,258,33,0,4,48,6,32,1,5,0,33,34,0,1,26,0,15,34,0,4,21,32,2,22,0,43,32,2,103,27,11,2,0,44,0,24,0,40,32,2,18,27,0,7,0,47,21,27,34,0,3,17,7,34,0,1,32,2,99,0,47,17,0,36,32,1,5,26,34,0,2,19,7,34,0,1,0,35,0,24,0,47,11,2,0,44,0,25,27,26,32,1,4,17,0,36,0,8,26,0,47,17,33,0,3,48,6,32,0,3,0,20,0,46,17,0,5,0,181,17,6,32,1,4,0,22,16,0,17,16,0,35,0,8,26,32,1,4,17,0,36,0,6,26,0,46,17,33,0,4,48,6,32,1,3,0,16,34,0,4,17,32,2,102,16,33,0,5,48,6,0,48,0,20,32,0,5,17,0,5,0,182,17,6,0,12,0,42,0,11,27,0,5,0,183,21,0,25,0,24,21,33,0,6,48,6,32,0,3,0,9,32,1,7,17,34,0,6,0,11,0,18,11,3,0,44,32,0,5,0,11,0,49,17,27,16,33,0,7,48,6,32,1,3,0,35,0,24,32,0,7,11,2,0,44,0,25,27,26,32,1,4,17,33,1,3,49,6,34,0,7,0,8,34,0,3,17,34,0,5,0,12,0,53,17,0,45,0,20,0,42,32,1,7,27,0,45,1,259,27,27,16,7,32,1,7,0,20,0,46,17,0,5,0,184,17,6,34,0,1,0,28,1,260,0,42,0,49,0,43,0,9,27,27,0,24,0,28,0,22,0,43,0,7,27,21,0,26,0,24,21,0,25,21,11,2,0,44,0,22,0,43,0,21,27,27,32,1,8,17,7,0,24,32,1,5,32,0,1,0,16,32,0,2,19,21,33,1,5,49,6,34,0,1,0,28,34,0,2,19,7,32,0,1,0,17,16,0,31,0,6,0,42,32,1,8,27,26,16,0,24,34,0,1,0,6,33,1,8,50,17,7,32,0,1,0,15,16,32,1,3,16,0,31,34,0,1,32,2,78,16,32,2,97,16,0,15,16,0,43,0,30,27,26,16,7,32,1,4,0,29,32,1,3,17,33,0,3,48,0,36,0,8,26,0,47,17,33,0,4,48,6,32,0,4,0,17,16,0,15,34,0,3,17,0,43,0,31,0,6,0,42,0,8,0,42,34,0,4,27,27,26,27,0,34,0,30,26,34,0,1,21,7,34,0,1,0,43,0,30,27,7,34,0,1,0,42,0,33,34,0,2,26,27,7,34,0,1,7,34,0,2,6,34,0,1,7,34,0,2,0,37,34,0,1,27,7,32,0,1,32,1,10,0,31,34,0,1,26,27,7,32,0,1,32,1,10,32,2,24,34,0,1,26,27,7,0,46,33,0,2,48,6,1,261,32,0,1,26,33,0,3,48,6,34,0,1,0,35,1,262,26,32,1,7,17,0,22,0,21,0,49,21,0,45,0,26,0,42,0,46,11,1,27,27,16,33,0,4,33,0,5,12,2,48,6,32,1,8,1,263,1,264,1,265,11,4,0,44,34,0,5,0,43,0,6,0,42,34,0,4,0,8,0,49,21,27,27,27,7,1,266,0,33,34,0,2,26,26,7,0,25,34,0,1,20,7,0,46,33,0,3,48,33,0,4,48,6,32,1,8,32,2,25,1,267,26,16,6,34,0,1,11,1,33,0,5,48,6,1,268,0,42,32,1,7,27,33,0,6,48,6,32,0,3,32,0,6,32,1,6,17,33,0,7,48,6,32,0,4,0,7,16,32,0,5,34,0,6,0,42,32,2,153,27,11,2,0,44,0,20,0,42,0,46,27,27,32,1,6,17,33,0,8,48,6,32,1,8,32,2,25,0,33,34,0,7,34,0,8,11,2,26,0,16,0,46,0,43,0,20,27,21,0,16,0,19,21,26,16,7,32,1,8,0,17,16,0,36,0,24,0,40,32,1,6,32,1,7,16,27,26,34,0,1,17,7,0,24,32,2,148,32,1,5,26,34,0,2,23,1,269,32,2,148,34,0,1,26,27,7,0,24,1,270,32,1,5,26,34,0,1,21,32,2,148,34,0,2,26,20,7,0,24,1,271,34,0,2,26,34,0,1,21,7,34,0,1,7,32,1,5,0,17,16,0,31,0,7,0,42,32,0,1,0,22,16,0,6,0,52,17,27,26,16,0,34,0,30,26,34,0,1,17,7,32,0,1,0,35,0,12,26,32,0,2,17,0,32,0,8,26,16,0,36,0,6,26,0,46,17,33,0,3,48,6,32,0,2,0,30,0,42,0,17,27,32,0,3,17,0,36,0,8,26,0,47,17,33,0,4,48,6,34,0,3,0,21,0,42,32,1,5,27,0,45,0,33,34,0,2,34,0,1,11,2,26,0,31,0,16,26,0,20,21,0,40,1,272,27,27,16,6,32,0,4,7,32,1,4,0,6,0,42,32,0,1,27,0,41,32,2,5,27,32,1,3,17,0,12,0,42,0,46,27,0,45,34,0,1,0,6,0,47,17,0,40,32,1,5,27,27,16,7,0,33,0,46,26,0,13,34,0,4,32,3,30,34,0,1,26,34,0,2,19,21,7,34,0,1,6,32,1,9,0,17,16,0,31,0,46,26,16,7,32,0,2,32,3,10,16,33,0,3,48,6,34,0,2,0,43,0,16,27,33,0,4,48,6,32,1,5,0,36,0,8,26,0,47,17,33,0,5,48,6,32,0,5,0,12,0,47,17,0,8,0,49,17,0,6,32,0,3,17,32,0,5,32,2,4,1,273,27,16,33,0,6,48,6,0,47,0,7,32,1,6,17,0,17,16,0,31,0,8,0,42,32,0,5,27,0,40,0,6,0,42,32,0,5,27,0,43,34,0,6,27,27,26,16,0,36,0,8,26,0,47,17,0,5,0,107,17,6,34,0,3,0,24,0,45,0,8,0,42,32,0,1,0,40,32,3,10,27,27,27,16,33,0,7,48,6,34,0,1,0,43,0,16,27,33,0,8,48,6,32,1,7,32,3,29,32,1,5,17,33,0,9,33,0,10,12,2,48,6,32,0,10,0,12,0,47,17,0,8,0,49,17,0,6,34,0,7,17,34,0,10,32,2,4,1,274,27,34,0,9,17,33,0,11,48,6,34,0,11,0,42,0,8,0,42,34,0,5,27,27,33,0,12,48,6,1,275,33,0,13,48,6,32,1,9,0,17,16,0,31,0,8,0,42,32,1,7,0,36,0,8,26,0,47,17,27,34,0,13,20,26,16,7,32,0,1,32,3,12,0,47,17,0,36,0,8,26,0,47,17,33,0,3,48,0,12,0,47,17,33,0,4,48,6,32,0,1,0,15,16,33,0,1,49,6,0,47,33,0,5,48,6,0,46,33,0,6,48,6,32,0,1,0,31,0,0,0,40,1,276,27,26,16,6,32,0,4,0,8,0,49,17,0,6,32,0,5,17,33,0,7,48,6,1,277,33,0,8,48,6,0,46,33,0,9,48,33,0,10,48,6,1,278,33,0,11,48,6,32,0,1,0,46,0,46,1,279,11,2,0,44,0,31,0,12,0,42,0,11,27,26,0,36,0,8,26,0,47,21,27,11,2,0,44,32,1,3,0,12,32,0,6,17,0,8,32,0,7,0,12,0,53,17,17,27,16,33,0,12,48,6,34,0,1,34,0,8,34,0,11,11,2,0,44,34,0,12,27,16,7,34,0,1,6,32,1,9,0,17,16,0,31,32,1,10,0,8,32,1,4,17,0,21,0,42,32,1,4,27,0,24,11,2,0,44,32,2,2,27,16,26,16,7,32,1,6,32,3,30,32,0,1,0,15,16,0,43,0,16,27,0,43,32,3,75,0,7,0,47,21,0,42,32,0,2,0,15,16,0,43,0,16,27,27,27,26,16,33,0,3,48,6,34,0,1,1,280,1,281,11,2,0,44,0,15,0,40,0,22,27,0,20,0,54,21,0,41,0,8,27,27,34,0,2,17,7,32,0,1,32,2,7,34,0,2,19,0,31,0,6,26,32,1,4,0,31,34,0,1,0,43,0,8,27,26,16,17,33,1,4,49,7,34,0,1,11,1,11,0,0,26,11,2,0,44,0,25,32,3,5,20,27,32,1,6,17,33,1,6,49,7,34,0,1,32,2,8,32,1,6,27,7,34,0,1,0,15,16,33,0,3,48,0,22,16,0,6,0,52,17,0,6,33,1,3,50,6,34,0,3,0,31,32,1,4,26,16,7,1,282,33,0,3,48,6,0,27,32,0,3,1,283,11,2,0,44,0,24,0,40,0,36,32,3,73,26,27,27,11,2,0,44,0,24,0,16,0,46,21,32,3,5,20,27,33,0,4,48,6,34,0,2,34,0,1,11,2,32,0,4,0,46,17,33,0,5,48,6,32,1,3,0,17,16,0,31,1,284,26,16,33,0,6,48,6,34,0,6,0,31,0,16,0,42,0,47,27,26,0,27,0,31,0,16,0,42,0,46,27,26,21,0,33,32,3,71,26,11,2,0,44,34,0,3,0,12,32,0,5,17,27,16,7,32,0,1,32,3,9,16,33,0,1,49,6,32,0,1,0,14,16,33,0,3,48,6,34,0,1,0,15,16,33,0,4,48,0,22,16,33,0,5,48,6,32,1,3,0,31,0,21,0,42,0,72,27,26,16,0,36,32,3,119,26,0,47,17,0,5,0,142,17,6,32,1,3,0,3,32,0,5,17,33,0,6,48,6,32,1,3,0,4,32,0,6,17,0,34,0,30,26,33,1,4,50,6,0,46,33,0,7,48,6,0,33,32,1,4,26,0,16,1,285,21,33,0,8,48,6,32,3,75,0,5,0,143,21,33,0,9,48,6,34,0,6,0,35,34,0,4,0,43,0,16,27,32,0,8,0,24,1,286,34,0,8,21,11,3,0,44,0,11,0,42,0,49,27,27,26,34,0,5,0,17,16,17,0,15,34,0,3,17,7,32,0,1,0,35,0,25,0,12,32,0,1,34,0,5,16,21,0,45,34,0,4,27,26,34,0,1,0,22,16,0,17,16,17,7,34,0,1,0,15,0,40,0,33,32,2,12,26,0,16,32,0,2,21,32,1,6,34,0,0,0,42,32,0,2,0,6,0,47,17,27,27,27,0,15,0,14,21,32,1,5,11,2,0,44,32,2,12,0,22,16,0,23,34,0,2,17,27,16,7,34,0,1,33,2,4,49,0,34,0,16,26,32,2,6,17,32,3,11,16,33,2,5,49,6,0,52,33,2,3,49,7,32,1,5,33,0,3,48,6,34,0,1,32,1,6,33,1,5,50,6,34,0,3,7,0,52,33,0,0,48,6,32,1,6,0,31,0,47,1,287,11,2,0,44,0,24,27,26,16,7,34,0,4,34,0,1,34,0,2,19,7,32,2,0,32,1,3,34,0,1,26,11,2,0,44,0,24,0,40,32,3,5,27,27,7,34,0,1,33,0,3,48,6,1,288,7,34,0,1,33,0,3,48,6,1,289,7,34,0,1,0,17,16,0,31,0,33,34,0,4,0,1,16,26,26,16,7,32,0,1,32,3,12,0,47,17,33,0,3,48,0,36,0,8,26,33,1,6,50,6,0,15,0,42,34,0,3,0,26,34,0,2,0,19,16,32,2,2,0,7,0,47,17,0,45,0,24,0,7,34,0,1,0,22,16,21,0,18,0,46,21,27,16,11,1,17,27,33,1,7,49,7,32,1,6,0,8,34,0,2,19,32,1,5,16,0,34,0,26,26,0,26,11,2,0,44,32,1,3,27,34,0,1,17,7,32,0,1,0,26,34,0,1,0,22,16,0,7,34,0,2,19,0,17,0,40,0,31,0,47,26,27,16,17,7,34,0,1,0,31,0,6,26,34,0,2,0,31,34,0,4,0,43,0,8,27,26,18,19,7,32,0,1,0,47,0,43,0,12,27,0,7,0,47,21,0,45,32,1,5,32,0,2,26,0,42,0,17,27,27,32,1,7,17,32,1,5,34,0,2,0,8,32,1,7,17,26,33,1,6,50,6,0,47,33,1,7,49,6,34,0,1,0,22,16,7,32,0,2,0,8,33,1,7,50,6,34,0,2,7,34,0,1,6,0,47,33,1,9,49,7,32,1,4,0,29,32,1,3,17,33,0,3,48,0,26,33,1,10,50,6,34,0,3,0,36,0,8,26,32,1,7,17,0,12,0,42,0,47,27,0,7,0,47,21,0,45,1,290,27,16,6,32,0,1,0,15,16,0,43,0,16,27,33,0,4,48,6,32,1,9,0,24,0,45,1,291,27,34,0,1,17,6,32,1,6,0,15,32,1,10,17,0,31,32,0,4,26,16,7,0,47,0,7,32,2,3,17,1,292,16,0,34,0,30,26,32,1,3,17,0,26,32,1,6,11,1,17,0,32,0,8,26,16,32,3,58,16,33,0,3,48,6,34,0,2,0,24,0,35,1,293,26,34,0,3,21,0,36,0,31,0,6,26,26,20,0,41,0,31,0,6,26,27,32,1,4,17,0,47,0,43,0,12,27,0,7,0,47,21,0,45,0,34,0,17,0,15,32,1,5,21,0,43,0,31,0,6,26,27,26,27,32,1,6,17,0,34,0,30,26,34,0,1,0,15,16,17,7,32,1,5,0,26,34,0,2,19,0,26,32,1,4,17,0,34,0,15,26,11,0,17,7,32,0,2,0,22,16,0,20,0,46,17,0,5,0,177,17,6,32,0,2,0,22,16,0,17,16,0,35,0,20,0,42,0,46,27,0,43,0,8,27,26,34,0,2,17,7,32,2,7,0,7,34,0,1,17,0,17,16,0,31,32,2,6,0,1,16,26,16,0,26,33,2,6,50,6,32,2,7,7,34,0,1,0,22,0,43,0,21,27,0,45,0,34,0,26,26,0,43,34,0,0,27,27,34,0,2,19,7,34,0,1,6,0,46,33,1,3,49,6,32,2,13,32,2,7,0,35,0,6,26,34,0,4,17,26,33,1,2,49,7,32,3,77,0,20,32,0,1,0,18,0,46,17,21,0,46,11,2,0,16,34,0,1,0,13,0,46,17,0,8,34,0,2,19,17,7,0,46,32,1,3,16,6,34,0,1,32,2,11,32,1,2,32,2,9,34,0,2,19,26,16,7,0,46,32,1,3,16,6,34,0,2,32,2,11,0,33,34,0,1,26,0,43,32,1,2,27,26,16,7,0,46,32,1,3,16,6,34,0,1,32,2,12,32,1,2,26,34,0,2,19,7,0,25,34,0,1,34,0,4,21,7,32,0,1,32,3,7,16,0,5,0,194,17,6,32,0,1,0,11,33,1,4,50,6,34,0,1,0,18,33,1,3,50,7,34,0,1,0,17,16,0,26,32,1,5,17,0,32,34,0,2,26,16,7,34,0,1,34,0,5,16,34,0,4,34,0,2,19,7,34,0,1,32,3,163,16,7,34,0,1,32,3,163,16,7,34,0,1,0,36,32,2,3,26,16,33,0,3,33,0,4,12,2,48,6,34,0,3,33,2,4,49,6,34,0,4,0,8,33,1,4,50,7,32,1,4,0,41,34,0,1,27,7,32,1,8,0,43,34,0,1,0,42,32,1,4,27,27,7,34,0,1,0,43,32,1,12,27,33,0,3,48,6,0,47,0,43,0,21,27,0,45,1,294,27,33,0,4,48,6,0,52,32,0,4,0,47,0,6,32,2,6,17,17,0,6,0,47,17,7,32,0,1,0,13,0,47,17,0,8,33,1,5,50,6,34,0,1,0,6,33,1,6,50,7,32,1,7,32,1,3,32,3,4,1,295,34,0,1,26,27,16,33,0,3,48,6,0,24,32,2,3,11,2,0,44,0,13,0,42,32,2,3,27,27,33,0,4,48,6,0,46,0,12,32,2,3,17,0,6,32,2,3,17,0,2,0,49,17,0,18,16,33,0,5,48,0,17,16,0,31,0,24,0,6,0,47,21,0,7,34,0,5,21,0,10,0,49,21,26,16,0,36,1,296,26,32,2,3,0,17,16,17,7,34,0,1,0,31,32,1,10,0,43,0,7,27,0,7,0,42,32,1,9,27,11,2,0,16,32,3,2,17,26,16,0,4,0,42,0,3,27,16,7,32,2,3,0,8,0,49,17,0,13,32,0,1,0,36,0,11,26,16,33,1,10,49,0,7,34,0,1,0,36,0,18,26,16,33,1,9,49,17,17,7,34,0,1,6,32,2,4,32,2,9,11,2,0,31,0,17,0,31,0,8,0,42,32,2,6,27,26,20,26,16,33,0,3,33,0,4,12,2,48,6,34,0,4,0,31,1,297,26,16,7,32,0,2,32,4,34,16,32,4,58,16,33,0,3,48,6,34,0,1,32,4,33,34,0,2,0,30,32,0,3,17,17,0,15,16,0,31,0,47,0,43,0,7,27,0,18,0,46,21,26,16,0,34,0,30,26,34,0,3,17,33,0,4,48,6,0,7,0,42,0,47,27,0,8,0,42,32,2,4,0,43,0,7,27,27,0,7,0,25,21,11,2,0,16,32,3,2,17,33,0,5,48,6,32,2,9,0,17,16,0,35,0,8,0,42,32,2,6,27,0,41,32,1,3,27,34,0,5,0,25,21,26,34,0,4,17,7,34,0,0,0,46,11,2,7,34,0,2,33,0,3,48,6,34,0,1,0,31,0,15,26,16,33,0,4,48,0,16,0,46,17,0,22,16,33,0,5,48,6,0,52,33,0,6,48,6,1,298,0,43,32,1,4,27,33,0,7,48,6,1,299,7,34,0,1,32,1,5,16,33,0,3,33,0,4,12,2,48,6,34,0,3,33,1,5,49,6,34,0,4,7,0,47,0,7,34,0,1,0,6,33,1,7,50,17,7,0,47,0,7,32,0,1,17,0,17,16,0,31,0,33,32,2,4,26,0,16,0,6,0,42,34,0,1,0,7,32,1,7,17,27,21,32,1,9,32,0,2,21,26,16,6,34,0,2,7,32,2,12,0,16,34,0,1,0,6,33,1,0,50,17,7,0,46,0,33,32,1,3,34,0,1,26,26,16,32,2,3,16,7,0,46,0,33,34,0,2,32,1,3,34,0,1,27,26,16,32,2,3,16,7,32,0,1,0,17,16,32,2,5,34,0,1,26,33,2,6,50,7,0,33,34,0,2,0,1,16,26,32,1,4,11,2,0,44,0,13,0,42,0,46,27,27,33,1,4,49,7,32,0,1,0,17,16,0,31,0,7,0,42,34,0,1,27,26,16,7,34,0,1,0,17,16,0,31,0,8,0,42,34,0,2,27,26,16,7,0,49,0,9,32,0,2,19,0,11,16,33,0,3,48,0,6,32,0,1,17,33,0,4,48,32,1,3,16,33,0,5,48,6,34,0,1,34,0,4,11,2,0,16,32,0,5,17,32,1,4,32,0,3,0,8,0,49,17,0,7,34,0,2,19,0,8,34,0,5,17,0,6,34,0,3,17,17,7,34,0,4,0,43,0,16,27,0,41,34,0,1,27,7,34,0,2,33,0,3,48,0,7,16,33,0,4,48,6,0,46,33,0,5,48,33,0,6,48,33,0,7,48,6,0,53,33,0,8,48,6,32,0,1,32,2,4,0,7,0,47,17,0,45,0,31,0,8,0,42,32,2,3,27,26,27,16,0,43,0,16,27,0,41,32,1,3,27,33,0,9,48,6,32,0,9,0,7,0,47,21,0,46,0,47,0,49,11,4,33,0,10,48,6,0,6,1,300,11,2,0,16,32,0,3,0,13,0,54,17,17,33,0,11,48,6,1,301,33,0,12,48,6,1,302,1,303,34,0,12,11,3,0,44,1,304,27,33,0,13,48,6,32,0,1,0,31,34,0,1,0,43,1,305,27,26,16,7,32,1,3,0,31,34,0,1,0,43,32,2,3,27,26,16,32,4,3,16,7,32,1,4,0,31,0,16,0,42,34,0,1,27,26,16,7,0,47,0,6,33,1,6,50,6,32,1,6,32,1,7,0,42,0,33,34,0,0,26,27,0,33,32,1,3,26,11,2,0,44,0,13,0,42,32,1,5,27,27,16,33,0,3,48,6,0,46,34,0,3,16,7,32,0,1,32,1,8,0,7,0,47,17,0,45,32,1,9,0,45,1,306,27,27,0,47,0,7,34,0,1,17,17,7,34,0,2,0,6,32,1,3,17,33,1,4,49,6,34,0,1,0,6,32,1,3,17,33,1,7,49,32,2,4,16,33,1,6,49,0,6,32,1,3,17,32,2,4,16,33,1,5,49,6,32,1,7,0,13,32,4,3,17,33,1,8,49,6,32,1,6,32,1,11,16,6,32,1,7,32,1,13,32,1,4,17,7,32,0,2,0,6,0,47,17,33,1,4,49,0,12,32,1,6,17,0,8,0,49,17,0,6,33,1,8,50,6,34,0,2,7,32,0,1,0,6,0,47,17,33,1,7,49,0,12,32,1,5,17,0,6,33,1,8,50,6,34,0,1,7,34,0,1,32,1,10,0,44,32,1,8,27,34,0,2,19,7,34,0,1,0,16,32,1,7,32,1,13,32,1,4,17,17,7,0,49,33,2,8,49,6,32,2,4,33,2,7,49,6,34,0,1,33,2,4,49,7] ,[provide[0],provide[1],provide[2],provide[3],provide[4],provide[5],provide[6],provide[7],provide[8],provide[9],provide[10],runtime_0[0],provide[12],provide[13],provide[14],provide[15],provide[16],provide[17],runtime_0[1],runtime_0[2],runtime_0[3],runtime_0[4],runtime_0[5],runtime_0[6],runtime_0[7],runtime_0[8],runtime_0[9],runtime_0[10],runtime_0[11],runtime_0[12],runtime_0[13],provide[18],provide[19],runtime_0[14],runtime_0[15],runtime_0[16],runtime_0[17],provide[20],provide[21],provide[22],runtime_0[18],runtime_0[19],runtime_0[20],runtime_0[21],runtime_0[22],runtime_0[23],0,1,4,2,Infinity,-Infinity,-1,3,8,5,'∾','˙','+','-','×','÷','⋆','¬','⌊','⌈','∨','∧','≠','=','>','≥','\0','√','<','⊢','⊣','≍','⋈','↑','↓','↕','⌽','⍉','/','⊔','⁼','˜','¨','⌜','˘','`','∘','○','⌾','⍟','⊘','⊸','⟜',str("+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍⋈↑↓↕«»⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!˙˜˘¨⌜⁼´˝`∘○⊸⟜⌾⊘◶⎉⚇⍟⎊%"),str("´: Identity not found"),str("´: 𝕩 must be a list"),str("Mapping: Equal-rank argument shapes don\'t agree"),str("Mapping: Argument shape prefixes don\'t agree"),str("⍋𝕩: 𝕩 must have rank at least 1"),str("⍋ or ⍒: Rank of 𝕨 must be at least 1"),str("⍋ or ⍒: Rank of 𝕩 must be at least cell rank of 𝕨"),str("⍋ or ⍒: 𝕨 must be sorted"),str("p⊐𝕩 or 𝕨∊p: p must have rank at least 1"),str("p⊐n or n∊p: Rank of n must be at least cell rank of p"),str("∊𝕩 or ⊐𝕩: 𝕩 must have rank at least 1"),str("𝕨⍷𝕩: Rank of 𝕨 cannot exceed rank of 𝕩"),str("/𝕩: 𝕩 must have rank 1"),str("/𝕩: 𝕩 must consist of natural numbers"),str("↑𝕩: 𝕩 must have rank at least 1"),str("↓𝕩: 𝕩 must have rank at least 1"),str("𝕨⊑𝕩: Indices in 𝕨 must consist of integers"),str("𝕨⊑𝕩: Index out of range"),str("𝕨⊏𝕩: Indices in 𝕨 must be integers"),str("𝕨⊏𝕩: Indices out of range"),str("𝕨⊑𝕩: 𝕩 must be a list when 𝕨 is a number"),str("𝕨⊑𝕩: Indices in compound 𝕨 must be lists"),str("𝕨⊑𝕩: Index length in 𝕨 must match rank of 𝕩"),str("𝕨"),str("𝕩: "),str("𝕩 must have rank at least 1 for simple 𝕨"),str("Compound 𝕨 must have rank at most 1"),str("Length of compound 𝕨 must be at most rank of 𝕩"),str("𝕨 must be an array of numbers or list of such arrays"),str("⊏𝕩: 𝕩 must have rank at least 1"),str("⊏𝕩: 𝕩 cannot have length 0"),str("⊏"),str("⊑𝕩: 𝕩 can\'t be empty"),str("⌽𝕩: 𝕩 must have rank at least 1"),str("𝕨⌽𝕩: 𝕨 must consist of integers"),str("𝕨⌽𝕩: 𝕨 too large"),str("⌽"),str("𝕨/𝕩: 𝕨 must consist of natural numbers"),str("𝕨/𝕩: Lengths of components of 𝕨 must match 𝕩"),str("𝕨/𝕩: Components of 𝕨 must have rank 0 or 1"),str("/"),str("=≠≡≢"),str("Cannot modify fill with Structural Under"),str("⌾: Incompatible result elements in structural Under"),str(">𝕩: Elements of 𝕩 must have matching shapes"),str("𝕨∾𝕩: Rank of 𝕨 and 𝕩 must differ by at most 1"),str("𝕨∾𝕩: Cell shapes of 𝕨 and 𝕩 must match"),str("∾𝕩: 𝕩 must have an element with rank at least =𝕩"),str("∾𝕩: Incompatible element ranks"),str("∾𝕩: 𝕩 element shapes must be compatible"),str("∾𝕩: 𝕩 element trailing shapes must match"),str("∾𝕩: empty 𝕩 fill rank must be at least argument rank"),str("∾𝕩: 𝕩 must be an array"),str("⊢⊣˜∘○⊸⟜⊘◶"),str("´˝"),str("=≠≢"),str("<"),str("≍"),str("↕/»«⊔"),str("⥊↑↓⌽⍉⊏⊑"),str("↑"),str("↓"),str("𝕩: 𝕨 must "),str("have rank at most 1"),str("consist of integers"),str("« or »: 𝕩 must have rank at least 1"),str("« or »: 𝕨 must not have higher rank than 𝕩"),str("« or »: Rank of 𝕨 must be at least rank of 𝕩 minus 1"),str("« or »: 𝕨 must share 𝕩\'s major cell shape"),str("↕𝕩: 𝕩 must consist of natural numbers"),str("↕𝕩: 𝕩 must be a number or list"),str("𝕨↕𝕩: 𝕨 must have rank at most 1"),str("𝕨↕𝕩: Length of 𝕨 must be at most rank of 𝕩"),str("𝕨↕𝕩: 𝕨 must consist of natural numbers"),str("𝕨↕𝕩: Window length 𝕨 must be at most axis length plus one"),str("˘: Argument lengths don\'t agree"),str("˝: 𝕩 must have rank at least 1"),str("˝: Identity does not exist"),str("∘⌊⌽↑"),str("𝕨⥊𝕩: 𝕨 must have rank at most 1"),str("𝕨⥊𝕩: 𝕨 must consist of natural numbers"),str("𝕨⥊𝕩: Can\'t compute axis length when rest of shape is empty"),str("𝕨⥊𝕩: 𝕨 must consist of natural numbers or ∘ ⌊ ⌽ ↑"),str("𝕨⥊𝕩: Shape must be exact when reshaping with ∘"),str("𝕨⥊𝕩: Can\'t produce non-empty array from empty 𝕩"),str("⊔: Grouping argument must consist of integers"),str("⊔: Grouping argument values cannot be less than ¯1"),str("⊔𝕩: 𝕩 must be a list"),str("𝕨⊔𝕩: Rank of simple 𝕨 must be at most rank of 𝕩"),str("𝕨⊔𝕩: Lengths of 𝕨 must equal to 𝕩, or one more only in a rank-1 component"),str("𝕨⊔𝕩: 𝕩 must be an array"),str("⎉ or ⚇: 𝔾 result must have rank at most 1"),str("⎉ or ⚇: 𝔾 result must have 1 to 3 elements"),str("⎉ or ⚇: 𝔾 result must consist of integers"),str("⍟: 𝕨𝔾𝕩 must consist of integers"),str("≥: Needs two arguments"),str("≤: Needs two arguments"),str("𝕨⊔𝕩: Compound 𝕨 must be a list"),str("𝕨⊔𝕩: Total rank of 𝕨 must be at most rank of 𝕩"),str("⊒: Rank of 𝕨 must be at least 1"),str("⊒: Rank of 𝕩 must be at least cell rank of 𝕨"),str("𝕨⍉𝕩: 𝕨 must have rank at most 1"),str("𝕨⍉𝕩: Length of 𝕨 must not exceed rank of 𝕩"),str("𝕨⍉𝕩: 𝕨 must consist of natural numbers"),str("𝕨⍉𝕩: Skipped result axis"),str("Cannot currently invert blocks"),str("Cannot invert modifier"),str("⁼: Inverse failed"),str("⁼: Inverse does not exist"),str("⁼: Inverse not found")] ,[[0,1,0],[0,0,1],[0,0,2],[0,0,3],[0,0,4],[0,0,5],[1,1,6],[2,1,7],[1,1,8],[0,0,9],[2,1,10],[0,0,11],[1,0,12],[1,1,13],[1,1,14],[0,0,15],[0,0,16],[1,0,17],[0,0,[[],[18]]],[1,1,19],[1,1,20],[1,0,21],[0,0,[[],[22]]],[0,0,23],[0,0,24],[0,0,25],[0,0,26],[0,0,27],[0,0,28],[0,0,29],[0,0,30],[0,0,31],[0,0,[[],[32]]],[0,0,33],[0,0,[[],[34]]],[1,1,35],[0,0,36],[0,0,[[],[37]]],[0,0,[[],[38]]],[0,0,39],[0,0,40],[0,0,[[],[41]]],[0,0,[[],[42]]],[0,1,43],[0,0,44],[0,0,[[],[45]]],[0,0,46],[0,0,47],[0,0,[[],[48]]],[2,1,49],[1,0,50],[1,0,51],[0,0,52],[0,0,[[],[53]]],[2,0,54],[0,0,55],[0,0,[[],[56]]],[0,0,57],[2,1,58],[0,0,59],[0,0,60],[0,0,61],[0,0,62],[0,0,[[],[63]]],[0,0,[[],[64]]],[0,0,65],[0,0,66],[0,0,67],[0,1,68],[1,1,69],[0,0,70],[0,0,71],[0,0,72],[0,0,73],[0,0,[[],[74]]],[0,0,75],[1,0,76],[1,0,77],[0,0,[[],[78]]],[1,0,79],[0,0,80],[0,0,[[],[81]]],[0,0,[[],[82]]],[0,0,[[],[83]]],[1,1,84],[2,0,85],[2,0,86],[2,0,87],[0,0,[[],[88]]],[0,0,[[],[89]]],[0,0,[[],[90]]],[0,0,[[],[91]]],[0,0,[[],[92]]],[0,0,[[],[93]]],[0,0,[[],[94]]],[1,1,95],[0,0,96],[0,0,97],[0,0,[[],[98]]],[0,0,99],[0,0,100],[0,0,101],[0,0,102],[0,0,[[],[103]]],[0,0,104],[0,0,[[],[105]]],[0,0,106],[2,0,107],[0,0,108],[0,0,[[],[109]]],[0,0,[[],[110]]],[0,0,111],[0,0,[[],[112]]],[0,0,113],[0,0,114],[0,0,115],[0,0,116],[0,0,117],[0,0,118],[0,0,119],[0,0,120],[0,0,121],[0,0,122],[0,0,[[],[123]]],[0,0,[[],[124]]],[0,0,[[],[125]]],[0,0,[[],[126]]],[0,0,[[],[127]]],[0,0,128],[0,0,[[],[129]]],[1,0,130],[2,0,131],[0,0,132],[0,0,133],[0,0,134],[0,0,135],[0,0,136],[1,0,137],[1,0,[[],[138]]],[0,0,139],[0,0,[[],[140]]],[0,0,[[],[141]]],[0,0,142],[0,0,143],[0,0,144],[0,0,145],[0,0,[[],[146]]],[0,0,[[],[147]]],[0,0,148],[2,0,149],[0,0,[[],[150]]],[0,0,151],[0,0,[[],[152]]],[0,0,[[],[153]]],[0,0,154],[1,1,155],[0,0,156],[0,0,[[],[157]]],[0,0,158],[0,0,[[],[159]]],[0,0,160],[0,0,[[],[161]]],[0,0,162],[0,0,163],[0,0,[[],[164]]],[2,0,165],[0,0,[[],[166]]],[0,0,[[],[167]]],[0,0,168],[0,0,169],[1,0,[[],[170]]],[0,0,[[],[171]]],[1,0,172],[0,0,173],[1,0,174],[2,0,[[],[175]]],[0,0,176],[0,0,177],[0,0,178],[0,0,[[],[179]]],[0,0,180],[0,0,181],[0,0,[[],[182]]],[0,0,183],[1,0,[[],[184]]],[1,1,185],[0,0,[[],[186]]],[0,0,[[],[187]]],[0,0,[[],[188]]],[0,0,[[],[189]]],[0,0,[[],[190]]],[0,0,[[],[191]]],[0,0,[[],[192]]],[0,0,193],[0,0,194],[1,1,195],[0,0,196],[0,0,[[],[197]]],[0,0,[[],[198]]],[0,0,199],[0,0,200],[0,0,201],[0,0,202],[0,0,203],[0,0,204],[0,0,205],[0,0,206],[0,0,207],[0,0,[[],[208]]],[0,0,209],[2,1,210],[2,1,211],[1,1,212],[1,1,213],[1,1,214],[0,0,[[],[215]]],[0,0,216],[0,0,217],[0,0,218],[0,0,219],[0,0,[[],[220]]],[0,0,[[],[221]]],[1,1,222],[0,0,223],[0,0,[[],[224]]],[0,0,225],[1,0,226],[0,0,227],[0,0,[[],[228]]],[0,0,229],[0,0,230],[0,0,[[],[231]]],[0,0,232],[0,0,233],[0,0,234],[0,0,235],[0,0,[[],[236]]],[0,0,237],[2,0,238],[0,0,[[],[239]]],[0,0,240],[0,0,241],[0,1,242],[1,0,243],[1,1,244],[0,0,245],[0,0,246],[1,0,247],[0,0,[[],[248]]],[0,0,249],[0,0,250],[1,0,251],[0,0,[[],[252]]],[0,0,[[],[253]]],[0,0,254],[0,0,255],[0,0,[[],[256]]],[0,0,257],[0,0,[[],[258]]],[0,0,259],[0,0,260],[1,0,261],[0,0,262],[0,0,263],[0,0,[[],[264]]],[0,0,265],[1,0,266],[0,0,267],[0,0,[[],[268]]],[2,0,269],[1,1,270],[1,1,271],[0,0,272],[0,0,273],[0,0,274],[0,0,275],[0,0,276],[0,0,277],[0,0,278],[0,0,279],[0,0,280],[0,0,[[],[281]]],[0,0,282],[0,0,[[],[283]]],[0,0,284],[0,0,285],[0,0,[[],[286]]],[0,0,287],[1,1,288],[2,1,289],[0,0,290],[0,0,[[],[291]]],[0,0,292],[0,0,[[],[293]]],[0,0,294],[1,0,295],[0,0,[[],[296]]],[0,0,297],[0,0,298],[0,0,299],[0,0,300],[0,0,[[],[301]]],[0,0,[[],[302]]],[0,0,303],[0,0,304],[0,0,305],[0,0,306]] ,[[0,184],[4067,3],[4075,3],[4079,3],[4092,3],[4107,3],[4119,2],[4148,3],[4180,2],[4197,4],[4259,5],[4295,3],[4302,5],[4360,4],[4426,3],[4481,3],[4492,4],[4557,9],[4626,5],[4703,5],[4770,4],[4826,8],[4998,8],[5155,3],[5200,3],[5249,3],[5295,6],[5380,3],[5404,7],[5518,3],[5580,4],[5651,6],[5715,3],[5755,5],[5832,3],[5849,14],[6029,3],[6075,3],[6095,3],[6112,4],[6170,4],[6246,5],[6320,3],[6379,0],[6390,4],[6457,3],[6467,3],[6474,3],[6488,3],[6496,3],[6534,5],[6571,5],[6598,3],[6602,3],[6616,16],[6911,3],[6936,3],[6961,3],[6988,3],[7053,4],[7153,7],[7349,7],[7423,15],[7656,5],[7735,3],[7743,6],[7770,5],[7791,6],[7818,11],[8174,9],[8331,4],[8407,7],[8519,7],[8636,3],[8743,4],[8805,9],[8926,8],[9000,7],[9062,9],[9220,9],[9368,4],[9479,8],[9693,3],[9737,3],[9874,2],[9895,14],[10020,9],[10201,10],[10274,3],[10300,10],[10708,4],[10812,3],[10886,3],[10937,4],[11064,4],[11180,2],[11188,3],[11196,3],[11204,3],[11224,8],[11299,3],[11307,3],[11315,3],[11323,3],[11331,3],[11339,3],[11350,3],[11371,7],[11412,6],[11631,4],[11731,4],[11791,3],[11834,5],[11972,3],[12019,3],[12045,3],[12094,3],[12123,3],[12131,3],[12164,3],[12208,3],[12256,3],[12268,3],[12341,4],[12377,3],[12392,3],[12407,3],[12425,3],[12439,3],[12449,3],[12501,6],[12524,6],[12552,3],[12564,3],[12595,3],[12603,3],[12611,3],[12619,5],[12654,12],[12827,3],[12838,3],[12858,3],[12878,3],[12889,3],[12900,3],[12915,7],[12986,6],[13032,3],[13050,3],[13057,6],[13092,10],[13269,4],[13325,11],[13526,4],[13593,3],[13618,2],[13633,3],[13660,7],[13801,3],[13830,3],[13840,3],[13859,3],[13869,3],[13878,3],[13888,3],[13905,11],[13978,6],[14078,8],[14156,3],[14164,3],[14206,7],[14232,16],[14746,5],[14762,7],[14898,5],[14931,6],[14960,3],[14970,3],[14980,4],[14991,4],[15030,4],[15053,3],[15061,3],[15086,3],[15098,6],[15194,2],[15244,8],[15431,11],[15636,3],[15695,3],[15722,3],[15739,3],[15756,8],[15938,4],[16009,3],[16040,2],[16074,3],[16109,3],[16130,3],[16151,5],[16222,3],[16242,8],[16472,3],[16540,3],[16570,3],[16601,3],[16635,5],[16702,3],[16711,3],[16724,3],[16728,3],[16736,3],[16746,2],[16760,2],[16775,6],[16869,3],[16879,3],[16886,9],[17020,3],[17046,3],[17070,3],[17091,3],[17104,2],[17108,3],[17144,5],[17246,3],[17293,5],[17316,3],[17333,14],[17617,13],[17814,3],[17857,4],[17940,3],[17976,3],[18005,3],[18016,4],[18052,7],[18187,10],[18377,6],[18412,3],[18477,3],[18509,4],[18532,1],[18558,5],[18569,2],[18593,4],[18604,4],[18615,5],[18635,4],[18710,3],[18743,3],[18773,5],[18798,3],[18864,3],[18878,3],[18889,5],[18988,4],[19117,3],[19141,3],[19187,3],[19220,3],[19249,5],[19281,3],[19317,3],[19343,3],[19371,3],[19393,5],[19403,3],[19436,3],[19456,6],[19471,2],[19479,2],[19487,5],[19525,3],[19535,3],[19551,5],[19602,3],[19627,6],[19736,3],[19776,3],[19817,5],[19867,6],[20004,3],[20012,8],[20069,5],[20098,3],[20113,3],[20163,3],[20179,2],[20197,3],[20218,3],[20236,3],[20265,3],[20284,3],[20303,6],[20382,5],[20397,14],[20561,3],[20582,3],[20598,4],[20654,3],[20686,3],[20769,3],[20803,3],[20832,3],[20849,3],[20866,3]] ); // Use high-precision modulus (⚇0) abs_mod.prim=8; runtime[8] = runtime[61](abs_mod,0); // Cache inverse calls and handle block inverses setInv( inv => f => !isfunc(f) ? inv(f) : f.inverse || (f.inverse=inv(f)), snv => f => !isfunc(f) ? snv(f) : f.sinverse|| (f.sinverse=snv(f)) ); let rtAssert = runtime[43] = assertFn("!"); runtime.map((r,i) => { r.prim = i; }); let decompose = x => list(!isfunc(x) ? [-1,x] : has(x.prim) ? [0,x] : x.repr ? x.repr() : [1,x]); setPrims(list([decompose, x=>has(x.prim)?x.prim:runtime.length])); let glyphs = ["+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍⋈↑↓↕«»⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!", "˙˜˘¨⌜⁼´˝`", "∘○⊸⟜⌾⊘◶⎉⚇⍟⎊"]; let gl = glyphs.join(""); let glyph = x => { let g = gl[x.prim]; if (!has(g)) throw Error("•Glyph 𝕩: 𝕩 must be a primitive"); return g; } // Compiler runtime[43] = assertFn("Compiler"); let compgen_raw = run( [1,1,7,34,0,1,33,0,3,33,0,4,33,0,5,12,3,48,6,0,59,0,60,11,2,0,0,0,92,17,33,0,6,48,6,34,0,3,32,0,4,34,0,5,32,0,6,0,21,0,98,17,0,99,0,100,0,101,0,102,0,103,0,104,0,20,0,62,0,51,11,2,17,0,44,0,34,26,0,61,17,0,105,0,59,0,26,16,0,0,0,93,17,0,63,33,0,7,48,0,26,16,0,46,0,0,26,0,107,17,0,20,16,0,43,0,21,26,0,106,17,0,64,0,0,0,92,17,0,21,0,110,17,0,21,0,109,0,25,0,61,17,17,0,21,0,108,17,0,111,11,15,0,45,0,13,26,0,23,0,21,21,16,33,0,8,33,0,9,12,2,48,6,32,0,9,0,50,0,0,26,0,28,0,65,21,0,54,0,43,0,45,0,23,26,26,27,16,33,0,10,33,0,11,33,0,12,33,0,13,33,0,14,33,0,15,33,0,16,33,0,17,33,0,18,33,0,19,33,0,20,33,0,21,33,0,22,33,0,23,33,0,24,12,15,48,6,0,35,0,54,0,1,27,0,12,0,9,0,15,0,53,0,65,27,21,0,35,0,53,0,66,27,21,33,0,25,48,6,32,0,13,0,35,16,33,0,26,48,6,32,0,14,0,35,16,0,0,0,67,17,33,0,27,48,6,0,68,0,1,0,54,0,23,27,16,0,0,32,0,19,17,33,0,28,48,6,32,0,19,0,35,16,0,0,0,69,17,33,0,29,48,6,0,13,0,11,0,66,21,0,43,0,31,26,0,112,21,0,54,0,21,27,33,0,30,48,6,1,2,33,0,31,48,6,1,3,32,0,8,26,33,0,32,48,6,0,116,0,31,0,53,34,0,4,0,54,0,38,27,27,16,32,0,32,16,33,0,33,48,6,32,0,20,0,35,16,33,0,34,48,0,0,0,66,17,33,0,35,48,6,0,66,0,67,0,71,0,61,0,61,0,72,0,61,0,65,11,2,0,73,0,65,0,68,0,74,11,2,0,31,16,0,8,16,11,10,0,42,34,0,9,26,0,24,0,13,21,0,54,0,43,0,45,0,20,26,26,27,16,0,21,16,0,43,0,21,26,0,70,17,33,0,36,48,6,0,2,0,50,0,6,26,20,33,0,37,48,6,32,0,37,0,53,0,13,0,51,0,26,27,27,33,0,38,48,6,32,0,37,0,53,0,13,0,51,0,26,27,0,0,0,66,21,27,33,0,39,48,6,0,18,0,31,0,10,21,0,43,0,21,26,0,31,0,21,21,0,66,21,33,0,40,48,6,1,4,33,0,41,48,6,1,5,33,0,42,48,6,1,6,33,0,43,48,6,1,7,33,0,44,48,7,34,0,1,0,11,16,0,45,1,8,26,34,0,4,17,0,21,16,7,32,1,31,32,1,30,0,53,0,113,27,0,114,0,19,11,3,26,0,41,20,33,0,2,48,6,32,0,1,0,54,0,34,27,0,54,0,17,0,58,0,18,0,31,0,13,21,0,51,34,0,2,27,27,27,0,18,0,19,21,33,0,3,48,6,32,0,1,0,34,34,0,1,0,32,16,33,0,4,48,17,33,0,5,48,0,25,0,53,0,1,27,0,14,0,25,21,0,66,17,0,48,0,10,26,0,58,0,21,0,53,0,65,27,0,43,0,31,26,32,0,5,21,0,21,0,115,21,0,41,20,27,16,6,0,19,0,32,34,0,5,21,0,6,0,66,21,0,43,0,1,26,0,66,21,0,43,0,34,26,34,0,4,21,34,0,3,0,19,21,7,34,0,2,33,0,3,33,0,4,12,2,48,6,0,94,0,14,32,0,1,17,33,0,5,48,6,0,95,0,14,32,0,1,17,33,0,6,48,0,9,0,53,0,27,0,53,0,65,0,65,11,2,27,27,16,0,31,16,33,0,7,48,6,0,96,0,14,32,0,1,17,33,0,8,48,0,31,16,33,0,9,48,6,32,0,7,32,0,9,0,25,0,61,17,32,0,5,0,31,16,11,3,0,21,16,33,0,10,48,0,32,16,33,0,11,48,6,32,0,10,0,34,32,0,11,17,33,0,10,49,6,34,0,7,0,0,0,67,17,34,0,9,0,25,0,66,17,0,66,0,21,32,1,6,0,38,32,0,1,17,17,0,31,16,0,31,0,53,32,0,5,0,50,0,0,26,16,0,21,0,65,17,0,54,0,34,0,51,0,28,0,54,0,1,27,27,27,27,16,11,3,0,21,16,0,34,34,0,11,17,33,0,12,48,6,0,19,0,35,0,61,21,0,14,0,65,21,0,58,1,9,27,33,0,13,48,6,0,31,0,53,32,0,12,0,32,32,0,10,17,0,45,0,65,26,0,21,0,66,21,32,0,13,0,13,0,54,0,21,27,21,0,24,0,13,21,16,27,0,47,0,31,26,20,0,24,32,0,1,0,13,16,21,33,0,14,48,6,34,0,10,32,0,14,16,33,0,15,48,6,34,0,12,34,0,14,16,33,0,16,48,6,32,0,16,0,10,32,0,15,17,33,0,17,48,0,50,0,13,26,0,66,17,33,0,18,48,6,32,0,18,0,11,34,0,16,17,0,9,32,0,8,0,10,32,0,6,17,17,0,48,0,10,26,0,58,1,10,27,16,6,0,97,0,14,32,0,1,17,0,9,32,0,18,17,33,0,19,48,6,34,0,6,0,9,32,0,15,17,0,28,16,0,10,32,0,19,17,0,31,16,33,0,20,48,6,32,0,20,34,0,19,0,54,0,34,27,0,2,0,92,0,1,0,97,17,21,0,1,32,0,1,0,54,0,34,27,21,16,33,0,21,48,6,32,0,8,0,9,33,0,15,50,0,27,16,0,9,32,0,8,17,33,0,22,48,0,12,33,0,18,50,6,34,0,17,0,9,34,0,8,17,0,50,0,13,26,16,0,11,0,66,0,54,0,21,27,0,52,0,2,0,53,0,50,0,0,26,27,27,0,18,21,34,0,22,0,28,16,0,12,34,0,15,17,33,0,23,48,17,0,43,0,1,26,0,66,17,0,43,0,40,26,32,0,1,17,33,0,24,48,6,32,0,18,0,31,16,33,0,25,48,6,32,0,18,0,28,0,66,17,0,31,16,0,24,0,53,0,13,27,32,0,25,17,33,0,26,48,6,32,0,25,34,0,5,0,54,0,34,27,0,2,0,1,21,32,0,26,17,0,1,33,0,26,50,6,34,0,1,0,34,32,0,25,17,32,1,32,16,33,0,27,48,6,32,1,21,32,1,25,32,0,27,17,0,27,16,0,12,32,1,20,0,35,16,0,14,32,0,27,17,17,33,0,28,48,6,32,1,29,0,14,32,0,27,17,33,0,29,48,6,32,1,23,0,35,0,52,0,43,0,1,26,0,23,0,18,21,27,32,1,20,17,32,1,25,32,0,27,17,0,11,34,0,28,17,0,10,32,0,29,17,33,0,30,48,0,11,0,53,0,28,27,16,33,0,31,48,6,32,1,22,0,48,0,0,26,16,0,0,0,61,17,0,14,32,0,27,17,33,0,32,48,6,32,1,23,0,35,16,0,14,32,0,27,17,33,0,33,48,6,32,0,32,0,12,32,0,30,17,0,18,0,31,0,10,21,0,27,0,31,0,19,21,0,66,21,0,11,0,31,21,32,0,31,17,0,48,0,10,26,0,58,1,11,27,16,6,32,0,27,0,31,32,0,31,17,0,43,0,1,26,32,1,22,0,35,16,17,0,43,0,3,0,51,0,5,27,26,32,1,7,17,0,2,32,0,29,0,31,32,0,31,17,0,8,16,17,33,0,34,48,6,32,1,22,0,35,16,0,0,32,1,7,17,0,16,32,0,27,17,0,9,32,0,30,17,0,2,32,1,7,17,0,1,33,0,27,50,6,32,0,30,0,27,16,0,12,32,0,33,17,0,48,0,10,26,0,58,1,12,27,16,6,32,0,33,0,10,0,53,0,28,27,16,0,13,33,0,31,50,6,34,0,33,0,31,32,0,31,17,0,19,0,0,0,8,0,54,0,2,27,21,0,65,0,16,32,0,34,17,0,2,0,67,17,17,33,0,35,48,0,11,0,65,17,33,0,36,48,6,32,0,36,0,8,16,0,21,0,65,17,0,34,32,0,31,0,50,0,0,26,16,17,0,9,32,0,30,17,33,0,37,48,0,12,32,0,30,17,33,0,38,48,6,32,0,30,0,2,32,0,27,17,0,21,0,53,0,65,27,0,31,32,0,37,0,21,0,65,17,0,27,0,54,0,10,27,16,0,11,32,0,32,0,21,0,65,17,17,21,0,52,32,1,42,27,32,0,26,17,33,0,39,48,6,34,0,34,0,31,32,0,36,17,0,14,0,53,0,67,27,0,54,0,9,27,0,0,0,19,21,32,0,38,0,11,0,53,0,27,27,16,0,43,0,31,26,32,0,32,17,17,33,0,40,48,6,32,0,37,0,12,32,0,31,17,0,50,0,0,26,16,0,2,32,0,32,0,12,32,0,38,17,17,33,0,41,48,0,11,0,53,0,50,0,6,26,0,28,20,27,16,33,0,42,48,6,32,0,29,0,31,32,0,42,17,0,11,32,0,35,0,31,34,0,36,17,0,14,0,66,17,17,33,0,43,48,6,32,0,31,33,0,44,48,0,9,34,0,37,17,0,10,32,0,42,17,33,0,31,49,6,32,0,29,0,31,32,0,31,17,0,8,16,0,43,0,31,26,33,0,35,50,0,31,0,53,0,11,0,53,0,65,27,27,16,0,14,0,66,17,33,0,45,48,6,32,0,43,0,21,0,65,17,0,34,32,0,41,17,0,11,0,53,32,0,42,27,0,10,0,13,0,53,32,0,29,27,21,16,0,9,32,0,32,0,12,34,0,38,17,17,0,48,0,10,26,0,58,1,13,27,16,6,34,0,42,0,11,32,0,29,17,0,31,16,32,0,27,0,54,0,34,27,0,12,32,1,22,0,35,16,21,0,11,32,0,45,21,0,54,0,19,0,48,0,10,26,20,0,58,1,14,27,27,16,6,34,0,43,0,8,16,0,2,0,53,0,50,0,0,26,27,16,0,21,0,65,17,0,43,0,1,26,0,66,17,0,34,33,0,41,50,6,32,1,8,0,34,32,0,27,17,0,40,34,0,41,17,0,40,0,67,0,21,34,0,45,17,17,0,35,0,55,0,21,0,53,32,0,4,27,27,16,33,0,46,48,6,34,0,18,0,28,16,0,50,0,0,26,16,0,34,34,0,23,0,31,16,0,21,34,0,20,17,17,0,21,34,0,29,0,12,32,0,31,17,0,31,16,0,34,0,53,0,33,27,34,0,35,17,17,33,0,47,48,6,34,0,39,34,0,21,34,0,24,11,3,0,21,34,0,46,17,33,0,48,48,6,32,0,48,0,45,0,36,26,16,33,0,49,48,0,43,0,45,0,31,0,53,0,50,0,6,26,0,28,0,61,21,0,12,0,19,21,27,26,26,33,0,48,50,6,32,0,48,0,35,0,53,0,66,27,0,55,34,0,3,27,16,33,0,48,49,6,32,1,23,32,1,25,32,0,27,17,0,10,32,0,30,17,0,8,16,33,0,50,48,6,34,0,44,0,10,32,0,50,17,0,43,0,31,26,33,0,26,50,6,34,0,30,0,27,0,54,0,12,27,16,0,10,32,0,50,17,0,43,0,31,26,33,0,25,50,6,32,0,27,0,34,0,53,34,0,47,27,0,55,32,0,48,0,45,0,13,26,16,33,0,51,48,0,28,32,1,35,17,0,50,0,0,26,16,0,0,34,0,49,17,0,21,16,0,25,0,53,0,13,27,34,0,4,17,27,16,0,31,34,0,50,0,10,32,0,31,17,17,33,0,27,49,6,32,1,13,0,35,0,54,0,1,27,0,2,32,1,25,21,32,0,27,17,0,1,33,0,27,50,6,32,1,26,0,14,32,0,27,17,0,43,0,21,26,0,13,0,21,21,0,66,17,0,31,16,0,25,0,66,17,0,25,0,61,17,33,0,52,48,0,45,0,66,26,16,0,50,0,13,26,16,33,0,53,48,6,32,0,27,0,34,32,0,53,0,1,32,0,52,17,17,0,0,0,53,32,0,53,27,0,43,0,38,26,32,1,16,0,35,16,0,0,0,71,0,68,11,2,17,21,0,10,32,1,14,0,54,32,1,25,27,21,16,0,27,0,54,0,10,27,16,0,12,34,0,53,17,0,43,0,31,26,34,0,52,17,33,0,54,48,6,32,1,26,0,13,32,0,27,17,0,34,0,53,34,0,54,27,0,55,0,45,0,66,26,27,16,0,43,1,15,26,33,0,27,50,6,34,0,51,0,24,0,67,17,0,48,0,0,26,16,0,23,32,1,35,17,32,1,25,32,0,27,17,0,10,32,1,29,0,14,32,0,27,17,17,33,0,55,48,6,0,65,0,21,32,1,36,17,0,34,32,0,27,0,5,32,1,35,17,17,0,31,0,53,34,0,55,27,0,55,34,0,40,27,16,33,0,56,48,6,32,0,27,0,15,0,53,0,0,0,53,0,71,27,27,0,0,0,68,21,0,2,0,68,0,54,0,23,27,32,1,25,0,19,21,21,32,1,19,0,35,16,17,0,0,33,0,27,50,6,32,0,27,0,14,0,2,0,59,21,0,0,0,11,21,32,1,34,17,0,1,33,0,27,50,6,34,0,27,34,0,56,34,0,48,32,0,26,32,0,25,11,5,7,1,16,33,0,3,48,6,32,1,31,32,1,30,0,53,0,122,27,0,123,32,1,8,0,54,0,34,27,0,124,11,4,26,33,0,4,48,6,32,1,20,0,48,0,26,0,54,0,0,27,26,16,0,21,0,125,0,48,0,1,26,16,0,0,32,1,22,0,35,16,17,17,0,45,32,0,1,0,54,0,14,27,26,16,33,0,5,33,0,6,33,0,7,33,0,8,33,0,9,12,5,48,6,32,1,22,0,35,16,0,11,32,0,1,17,0,10,32,0,5,17,0,8,16,0,10,32,1,29,0,14,32,0,1,17,17,32,0,2,32,0,3,32,0,1,0,54,0,31,27,0,51,34,0,4,27,27,16,6,32,0,1,0,14,0,65,17,33,0,10,48,0,10,32,0,5,17,33,0,11,48,0,10,32,0,6,17,33,0,12,48,6,32,0,11,0,10,32,0,7,17,0,8,16,33,0,13,48,6,32,0,11,0,28,16,0,12,32,0,7,17,32,0,2,32,0,3,0,126,27,16,6,32,0,12,0,10,32,0,7,17,0,9,32,0,12,0,27,0,66,17,17,32,0,2,32,0,3,0,127,27,16,6,32,0,1,0,31,32,0,12,17,0,11,0,53,0,28,27,0,10,0,14,0,53,0,65,27,21,16,0,8,16,32,0,2,0,31,34,0,12,21,32,0,3,0,128,27,16,6,32,0,5,0,28,16,0,12,32,0,7,17,0,10,32,0,10,17,0,27,0,10,34,0,5,0,27,16,0,9,32,0,8,17,21,0,9,0,28,21,0,66,17,0,12,32,0,9,0,10,34,0,8,17,17,34,0,2,34,0,3,0,129,27,16,6,32,0,13,0,9,0,53,0,8,32,1,39,0,52,0,12,27,32,1,21,0,35,16,0,13,32,0,1,17,0,11,32,0,6,17,21,0,15,0,27,21,27,16,33,0,14,48,0,9,0,53,0,50,0,0,26,32,1,37,0,1,0,19,21,0,8,21,0,16,0,75,21,27,16,33,0,15,48,6,32,1,20,0,35,16,0,0,0,66,17,0,1,34,0,1,17,0,2,32,0,15,17,0,31,32,0,6,0,8,16,17,0,43,0,34,26,0,59,0,26,16,0,21,0,76,0,66,11,2,17,0,21,0,61,17,17,33,0,16,48,6,32,0,16,0,50,0,0,0,53,0,59,0,54,0,2,27,27,0,2,0,15,0,53,0,65,27,21,26,0,65,17,0,31,34,0,16,0,15,0,65,17,0,27,0,54,0,12,27,16,17,33,0,17,48,6,34,0,7,0,28,16,0,31,34,0,13,0,28,0,54,0,12,27,16,33,0,18,48,17,0,43,0,34,26,0,66,0,61,11,2,17,0,2,33,0,17,50,6,34,0,10,0,31,34,0,11,17,33,0,19,48,6,34,0,14,0,27,0,54,0,12,27,0,31,20,0,52,0,1,0,53,34,0,6,0,27,16,32,1,39,16,0,54,0,34,27,27,0,19,0,2,0,11,21,0,1,0,53,0,28,27,21,0,1,0,1,21,27,34,0,15,17,0,31,32,0,19,17,33,0,20,48,6,32,0,19,0,8,16,0,2,32,0,17,17,0,27,16,0,31,32,0,19,17,0,43,0,1,26,34,0,20,17,33,0,21,48,0,7,16,0,4,0,59,17,33,0,22,48,6,0,66,0,77,11,2,0,34,34,0,9,0,31,34,0,18,17,17,0,2,34,0,17,17,0,31,34,0,19,17,0,31,0,53,32,0,21,0,11,0,65,17,27,0,55,0,2,27,32,0,22,17,0,31,0,53,34,0,21,0,12,0,65,17,27,0,55,0,43,0,3,26,27,34,0,22,17,7,34,0,2,33,0,3,33,0,4,33,0,5,33,0,6,33,0,7,12,5,48,6,34,0,4,0,13,16,33,0,8,48,6,1,17,33,0,9,48,6,1,18,33,0,10,48,6,32,0,1,0,13,16,0,11,0,65,17,0,41,0,134,17,6,32,1,16,32,1,25,32,0,1,17,0,2,32,0,3,0,2,0,67,17,0,1,0,61,17,17,33,0,11,48,0,50,0,0,26,16,33,0,12,48,0,32,16,33,0,13,48,6,0,61,0,14,32,0,3,17,0,34,32,0,13,17,33,0,14,48,6,32,0,1,0,34,32,0,13,17,33,0,15,48,0,31,0,53,0,65,0,54,0,11,27,27,0,43,0,1,26,0,66,21,0,17,0,58,34,0,9,27,0,31,0,53,0,65,0,54,0,12,27,27,21,32,0,11,0,34,32,0,13,17,17,6,34,0,12,0,35,32,0,13,0,35,16,17,0,15,0,65,17,0,41,0,135,17,6,32,0,15,0,31,32,0,14,17,33,0,16,48,0,14,0,53,32,1,26,27,0,10,0,14,0,53,32,1,27,27,21,0,9,0,53,0,28,27,0,14,0,53,32,1,16,0,35,16,27,21,16,32,0,13,0,31,32,0,14,21,32,0,10,0,136,27,16,6,32,0,16,0,31,0,53,0,13,0,53,32,1,26,27,27,16,0,14,0,53,32,1,27,27,0,9,0,53,0,28,27,0,14,0,53,32,1,16,0,35,16,0,0,0,70,17,27,21,16,32,0,13,0,31,32,0,14,21,0,31,34,0,16,0,13,32,1,26,21,21,32,0,10,0,137,27,16,6,34,0,14,0,21,0,66,17,0,9,0,53,0,27,0,53,0,66,27,27,16,1,19,16,6,0,70,0,14,32,0,3,17,33,0,17,48,0,10,0,53,0,27,27,16,33,0,18,48,6,32,0,11,0,0,32,0,3,17,0,15,0,65,17,0,11,32,0,17,17,0,27,16,33,0,19,48,0,12,32,1,15,0,35,16,0,14,32,0,1,17,17,0,1,33,0,3,50,6,32,0,3,0,15,0,65,17,0,11,32,0,17,17,0,28,16,0,9,32,1,15,0,35,16,0,0,0,67,17,0,14,32,0,1,17,0,10,34,0,19,17,17,0,12,32,0,3,0,73,0,54,0,15,27,0,9,0,11,0,53,0,78,27,21,16,17,0,13,0,26,20,32,0,10,0,139,27,16,6,32,1,27,0,14,32,0,1,17,0,9,32,0,3,0,14,0,78,17,0,28,16,17,0,13,0,26,20,32,0,10,0,140,27,16,6,32,1,34,32,0,8,11,2,32,1,25,32,0,1,17,0,27,16,0,12,32,0,17,17,0,13,0,26,20,32,0,10,0,141,27,16,6,0,73,0,14,32,0,3,17,0,10,0,53,0,27,27,16,33,0,20,48,0,34,0,53,32,0,13,0,34,0,53,32,0,18,0,54,0,34,27,0,32,20,27,16,27,0,55,0,28,27,16,33,0,21,48,6,32,0,21,0,10,32,0,20,17,0,8,16,33,0,22,48,6,32,1,16,0,35,16,0,0,0,66,17,0,14,32,0,1,17,33,0,23,48,6,32,1,18,0,35,16,0,14,32,0,1,17,0,2,0,67,17,0,0,32,1,28,0,35,16,0,0,0,67,17,0,14,32,0,1,17,17,0,34,32,0,23,0,8,16,32,1,38,16,17,33,0,24,48,6,0,65,33,0,25,48,6,32,0,24,0,13,16,0,26,16,33,0,26,48,6,1,20,33,0,27,48,6,32,0,18,0,10,32,0,20,17,33,0,28,48,0,34,32,0,13,17,0,32,16,0,43,0,34,26,33,0,13,50,6,32,0,3,0,13,16,0,26,16,0,34,0,53,32,0,13,27,0,55,0,28,0,53,0,13,27,27,16,33,0,29,48,6,0,61,0,14,32,0,3,17,0,10,34,0,28,17,0,34,32,0,13,17,0,21,0,66,17,0,0,0,53,0,50,0,0,26,27,16,0,32,16,0,43,0,34,26,0,8,0,32,0,54,0,43,0,34,26,27,21,0,34,0,53,0,32,27,0,18,21,32,0,13,0,21,0,61,17,17,0,25,0,61,17,0,50,0,0,26,16,0,32,16,33,0,30,48,6,32,1,16,0,35,16,0,0,0,67,17,0,67,11,2,32,1,25,32,0,1,17,0,2,32,0,11,17,0,34,32,0,30,17,33,0,31,48,0,50,0,0,26,16,33,0,32,48,0,32,16,33,0,33,48,6,32,0,33,0,43,0,34,26,33,0,30,50,6,32,0,33,0,43,0,34,26,33,0,32,50,6,32,0,33,0,43,0,34,26,33,0,31,50,6,32,0,30,0,43,0,34,26,33,0,1,50,6,32,0,30,0,43,0,34,26,33,0,17,50,6,32,0,30,0,43,0,34,26,33,0,5,50,6,32,0,30,0,43,0,34,26,33,0,6,50,6,32,0,11,0,34,32,0,30,17,0,43,0,1,26,32,0,31,17,33,0,11,49,0,50,0,0,26,16,0,32,16,33,0,13,49,6,32,0,17,0,10,0,53,0,27,27,16,0,34,32,0,13,17,0,32,16,0,43,0,34,26,33,0,13,50,6,32,0,30,0,34,32,0,13,17,33,0,34,48,6,32,0,20,0,1,32,0,21,17,0,34,32,0,34,17,0,12,0,31,0,52,0,1,27,0,11,21,0,65,17,0,43,0,3,26,0,67,17,0,0,0,66,17,33,0,35,48,6,32,1,16,0,35,16,0,0,0,68,17,0,14,32,0,1,17,0,34,32,0,13,17,0,31,16,33,0,36,48,6,0,65,0,12,32,0,31,17,33,0,37,48,6,0,65,0,11,34,0,31,17,0,31,16,33,0,38,48,6,34,0,11,0,34,32,0,13,17,0,12,32,0,13,0,54,0,31,27,0,11,20,0,52,0,22,27,0,11,21,0,65,17,0,45,0,21,26,32,0,37,0,31,16,32,0,38,11,2,17,33,0,39,48,6,32,0,20,0,34,32,0,34,17,0,32,16,33,0,40,48,0,43,0,34,26,33,0,13,50,6,32,0,30,0,34,32,0,13,17,33,0,34,49,6,32,0,13,0,32,16,33,0,41,48,6,32,1,14,0,35,16,0,14,32,0,1,17,33,0,42,48,6,32,1,14,0,35,16,0,0,0,66,17,0,14,32,0,1,17,33,0,43,48,6,32,1,27,0,14,32,0,1,17,33,0,44,48,6,32,0,44,0,10,32,0,43,17,0,10,32,0,42,17,0,11,32,0,37,0,50,0,10,26,16,17,0,13,0,26,20,32,0,10,0,142,27,16,6,32,0,43,0,10,32,0,37,17,33,0,45,48,0,50,0,0,26,16,33,0,46,48,6,0,19,32,1,40,0,51,0,8,27,32,0,45,21,33,0,47,48,6,32,0,42,32,0,47,16,33,0,48,48,0,10,34,0,44,32,0,47,16,17,33,0,49,48,6,32,0,43,0,31,32,0,45,17,33,0,50,48,0,8,16,0,21,0,66,17,33,0,51,48,6,32,0,50,0,27,0,54,0,10,27,16,0,21,0,65,17,33,0,52,48,6,32,0,49,0,25,0,9,32,0,50,21,0,11,0,25,0,53,0,1,27,21,0,66,17,32,0,45,0,31,20,32,0,10,0,143,27,16,6,32,0,49,0,25,0,61,17,0,12,32,0,50,17,0,9,0,53,0,28,27,16,32,0,45,0,31,20,32,0,10,0,144,27,16,6,34,0,43,0,31,16,0,21,32,0,38,17,0,34,34,0,50,0,27,16,0,32,16,0,32,16,17,33,0,53,48,6,32,0,42,0,10,32,0,45,17,0,34,0,53,32,0,13,0,29,16,27,0,55,32,1,38,0,54,0,43,0,34,26,27,27,34,0,42,17,33,0,54,48,0,31,16,33,0,55,48,6,32,0,1,0,34,32,0,55,17,0,36,0,1,0,18,0,51,0,13,27,21,32,1,33,17,33,0,56,48,0,14,0,65,17,33,0,57,48,6,32,0,56,0,14,0,53,0,67,27,0,9,32,0,57,0,28,0,66,17,21,0,10,0,16,0,53,0,28,27,21,16,0,11,32,0,57,17,32,0,55,32,0,10,0,145,27,16,6,32,0,56,0,28,16,0,31,34,0,57,17,33,0,58,48,6,34,0,56,0,14,0,65,17,0,43,0,31,26,33,0,55,50,6,32,0,55,0,43,0,34,26,32,0,30,17,32,0,3,0,54,0,34,27,0,2,32,0,22,0,54,0,34,27,21,16,33,0,59,48,6,32,0,59,0,14,0,61,17,33,0,60,48,0,27,0,0,0,28,0,53,0,66,27,21,16,33,0,61,48,0,14,0,67,17,33,0,62,48,6,32,0,54,0,34,32,0,55,0,31,32,0,60,17,0,0,0,66,17,17,32,0,55,0,31,32,0,60,21,32,0,10,0,146,27,16,6,32,0,59,0,15,0,67,17,33,0,63,48,0,11,32,0,62,17,0,19,0,9,0,71,0,14,32,0,59,17,21,0,27,20,0,10,0,28,21,16,33,0,64,48,6,34,0,63,0,10,32,0,60,17,0,9,32,0,64,17,0,10,0,71,0,14,32,0,59,17,0,9,32,0,58,17,17,32,0,55,32,0,10,0,147,27,16,6,34,0,61,0,14,0,66,17,0,9,32,0,59,0,14,0,65,17,17,0,11,32,0,64,17,33,0,65,48,0,10,32,0,64,17,0,8,16,33,0,66,48,6,32,0,60,0,31,32,0,66,17,0,14,0,53,0,28,0,53,0,66,27,27,16,32,0,55,0,31,32,0,66,21,32,0,10,0,148,27,16,6,32,0,21,0,34,32,0,30,17,0,8,16,0,2,32,0,1,17,0,34,32,0,55,17,33,0,67,48,0,32,32,0,8,0,21,32,1,28,17,0,50,0,0,26,16,17,0,43,0,1,26,0,66,17,0,7,0,71,17,33,0,68,48,6,32,0,68,0,13,0,66,17,0,9,32,0,59,0,14,0,65,17,17,0,9,32,0,62,17,33,0,69,48,0,12,32,0,66,17,33,0,70,48,6,32,0,69,0,0,33,0,59,50,6,32,0,69,0,12,33,0,62,50,6,32,0,59,0,5,0,67,17,0,43,0,1,26,0,66,17,0,2,0,71,17,0,2,32,0,70,17,0,0,32,0,59,0,14,0,71,17,0,27,16,0,0,0,70,17,0,2,32,0,64,17,17,0,0,32,0,60,0,27,16,0,0,0,66,17,0,2,32,0,65,17,0,0,34,0,69,17,17,33,0,71,48,6,32,1,28,0,35,16,0,0,32,0,71,17,0,13,34,0,67,17,0,9,32,0,68,0,14,0,65,17,17,32,0,55,32,0,10,0,149,27,16,6,32,0,59,0,14,0,65,17,0,9,32,0,62,17,0,10,32,0,60,17,0,8,16,0,2,33,0,68,50,6,32,0,60,0,12,33,0,66,50,6,32,0,66,0,43,0,31,26,33,0,59,50,6,32,0,65,0,31,32,0,60,0,28,0,66,17,17,33,0,72,48,6,34,0,64,0,2,32,0,58,17,0,28,0,54,0,1,27,16,0,1,33,0,58,50,6,32,0,58,0,2,16,0,11,32,0,66,17,32,0,55,32,0,10,0,145,27,16,6,0,65,0,21,32,0,72,17,0,34,0,53,0,50,0,0,26,27,32,0,60,17,0,12,32,0,65,17,32,0,55,32,0,10,0,150,27,16,6,0,67,0,13,32,0,68,17,0,12,34,0,70,17,32,0,55,32,0,10,0,151,27,16,6,32,0,66,0,43,0,31,26,33,0,58,50,6,32,0,59,0,14,0,66,17,0,10,33,0,72,50,6,32,0,58,0,2,16,0,11,32,0,72,17,32,0,55,0,31,32,0,66,21,32,0,10,0,152,27,16,6,32,0,68,0,13,0,65,17,33,0,73,48,0,0,0,66,17,0,2,34,0,65,17,0,6,32,0,62,17,0,28,16,0,31,32,0,60,17,33,0,74,48,6,32,0,58,0,14,0,67,17,33,0,75,48,0,9,32,0,74,0,14,0,65,17,17,32,0,55,32,0,10,0,153,27,16,6,32,0,51,0,27,0,11,0,19,21,0,66,17,0,11,32,0,49,0,28,16,17,0,27,0,54,0,1,27,16,0,0,0,66,17,0,31,0,53,32,0,48,27,0,55,34,0,75,0,2,0,67,17,0,6,34,0,74,17,27,16,33,0,76,48,6,34,0,66,0,43,0,31,26,33,0,62,50,6,32,0,54,0,34,0,53,32,0,55,27,0,55,32,0,73,0,8,16,27,16,33,0,77,48,6,32,0,55,0,31,32,0,73,17,0,43,0,34,26,32,0,41,17,33,0,78,48,6,32,0,68,0,31,32,0,73,17,0,14,0,67,17,33,0,79,48,6,32,1,28,0,35,16,0,1,32,0,1,17,0,34,0,53,34,0,55,27,0,55,0,1,0,53,32,0,71,27,0,2,34,0,68,0,11,0,65,17,21,0,0,0,19,21,27,16,0,32,0,65,0,71,0,68,0,74,11,4,17,33,0,80,48,6,32,1,28,0,35,16,0,0,0,71,17,0,14,32,0,1,17,0,9,0,71,0,14,32,0,3,17,0,34,32,0,30,17,17,0,0,33,0,80,50,6,34,0,80,0,54,0,14,27,32,1,40,0,51,0,8,27,34,0,37,21,0,34,32,0,51,0,50,0,0,26,0,61,17,21,33,0,81,48,6,32,1,28,32,1,25,32,0,1,17,0,11,32,0,77,17,0,31,16,33,0,82,48,6,0,66,32,0,81,16,33,0,83,48,6,0,71,34,0,81,0,52,0,19,0,2,0,67,21,0,6,0,18,21,27,0,67,17,33,0,84,48,0,0,0,53,0,11,0,53,0,65,27,0,10,32,0,83,21,27,16,33,0,85,48,6,32,0,83,0,31,32,0,48,17,0,11,32,0,72,17,0,11,32,0,62,17,0,10,32,0,85,0,31,32,0,48,17,0,11,32,0,59,17,17,32,0,45,0,51,0,31,27,0,21,0,65,21,0,31,32,0,48,21,32,0,10,0,154,27,16,6,32,0,85,0,31,0,53,32,0,48,27,0,55,34,0,59,27,16,33,0,85,49,0,43,0,1,26,0,66,17,0,6,33,0,84,50,6,32,0,83,0,31,0,53,32,0,48,27,0,55,0,6,0,53,34,0,72,27,27,16,33,0,83,49,6,32,0,85,0,35,16,0,11,0,65,17,32,0,1,0,51,1,21,27,0,31,20,32,0,10,0,155,27,16,6,32,0,83,0,12,32,0,52,17,0,11,34,0,49,0,31,0,53,32,0,48,27,0,55,34,0,62,0,8,16,27,16,0,10,0,53,0,28,27,16,17,0,25,0,66,17,32,0,45,0,31,20,32,0,10,0,156,27,16,6,32,0,83,0,2,0,71,17,0,0,0,65,0,67,0,71,11,3,0,34,32,0,84,17,17,33,0,86,48,6,32,0,83,0,31,32,0,48,17,0,8,16,0,2,0,71,17,0,34,34,0,60,0,50,0,0,26,16,0,28,16,17,0,1,33,0,71,50,6,32,0,3,0,34,0,53,32,0,30,0,34,32,0,38,17,27,0,55,34,0,85,0,31,32,0,51,17,0,25,0,66,17,27,16,0,2,32,0,22,17,0,43,0,1,26,32,0,20,17,33,0,3,49,6,32,0,22,0,9,34,0,23,17,33,0,87,48,6,0,65,0,11,32,0,3,17,0,43,0,21,26,0,66,17,0,34,32,0,29,17,33,0,88,48,0,28,16,0,9,32,0,87,17,33,0,89,48,6,32,0,3,0,34,32,0,89,0,8,16,32,1,38,16,17,0,2,32,0,89,17,0,0,32,0,3,17,0,19,0,15,0,67,21,0,11,32,0,88,21,0,1,0,19,21,0,6,0,19,0,14,0,71,21,0,2,34,0,88,0,0,0,66,17,21,0,43,0,21,26,0,65,21,0,34,34,0,29,21,21,16,33,0,90,48,6,32,0,90,0,34,0,0,0,6,0,66,21,0,5,0,19,21,34,0,89,0,8,16,0,50,0,0,26,16,0,54,0,19,0,1,0,34,21,27,21,0,65,0,14,32,0,90,17,0,9,32,0,87,17,0,8,16,32,1,38,16,17,0,6,33,0,90,50,6,32,0,90,0,28,16,0,2,34,0,87,17,0,0,33,0,3,50,6,32,0,24,0,14,0,66,17,0,9,32,0,90,0,13,0,65,17,17,0,10,33,0,25,50,0,8,16,0,2,33,0,24,50,6,32,0,24,0,1,32,0,24,0,14,0,65,17,0,2,32,0,90,17,17,33,0,90,49,6,0,61,0,14,32,0,3,17,0,28,0,66,17,0,9,0,78,0,14,32,0,3,17,17,0,1,33,0,3,50,6,0,65,0,14,32,0,3,17,0,28,16,0,12,0,70,0,14,32,0,3,17,17,32,0,30,0,51,0,32,27,32,0,10,0,157,27,16,6,34,0,18,0,19,0,1,0,8,0,54,0,2,27,21,33,0,3,50,6,32,1,34,0,1,32,0,1,17,33,0,91,48,6,34,0,39,0,48,1,22,26,16,6,32,0,13,0,43,0,34,26,33,0,1,50,6,34,0,54,0,34,32,0,13,17,33,0,92,48,6,32,0,34,0,43,0,34,26,33,0,3,50,6,32,0,34,0,43,0,34,26,33,0,90,50,6,34,0,20,0,12,34,0,21,17,0,34,32,0,34,17,0,31,16,0,21,34,0,40,0,32,16,0,34,32,0,36,17,17,33,0,36,49,6,32,0,3,0,72,0,54,0,15,27,0,9,0,11,0,53,0,79,27,21,16,33,0,93,48,6,0,65,0,11,32,0,3,17,0,11,32,0,93,17,33,0,94,48,6,32,0,94,0,28,16,32,1,38,16,0,43,0,34,26,32,0,90,17,33,0,95,48,0,15,0,66,17,33,0,96,48,6,32,0,90,0,1,16,0,6,0,65,17,33,0,97,48,6,32,0,95,0,1,16,0,6,0,65,17,33,0,98,48,6,32,0,13,33,0,26,49,6,32,0,34,0,43,0,34,26,33,0,25,50,6,32,0,93,0,2,32,0,98,17,32,0,27,0,158,26,16,6,32,1,27,0,14,32,0,1,17,0,2,32,0,98,17,32,0,27,0,159,26,16,6,0,67,0,16,32,0,3,17,0,9,0,67,0,11,32,0,95,17,17,33,0,99,48,0,11,32,0,92,17,0,31,16,0,29,16,33,0,100,48,6,0,71,0,14,32,0,3,17,33,0,101,48,0,9,32,0,99,17,0,27,16,0,10,32,0,99,17,33,0,102,48,6,0,67,0,26,16,0,38,32,0,3,17,0,10,32,0,102,17,0,16,32,0,101,17,0,2,0,67,17,0,6,32,0,97,17,0,28,0,2,34,0,101,21,0,6,0,27,21,0,67,17,0,2,32,0,99,17,32,0,27,0,160,26,16,6,32,1,26,0,14,32,0,1,17,33,0,103,48,6,32,1,16,0,35,16,0,0,0,67,17,32,1,14,0,35,16,0,0,0,66,17,11,2,0,38,32,0,1,17,33,0,104,48,6,32,1,16,0,35,16,0,0,0,70,17,0,14,32,0,1,17,33,0,105,48,32,1,38,0,52,0,11,27,32,0,104,17,0,9,32,0,103,17,33,0,106,48,6,0,65,0,14,32,0,3,17,0,11,0,53,0,10,0,53,0,28,27,27,32,0,102,17,0,27,0,54,0,9,27,16,32,0,13,32,0,10,0,161,27,16,6,32,1,15,0,35,16,0,0,0,67,17,0,14,32,0,1,17,33,0,107,48,6,0,66,0,16,34,0,90,17,0,27,16,0,9,32,0,107,17,0,11,32,0,96,17,33,0,108,48,6,32,0,94,0,28,0,66,17,0,9,33,0,107,50,6,32,0,107,0,11,32,0,108,17,32,0,13,32,0,10,0,162,27,16,6,32,0,108,0,10,32,0,102,17,0,8,16,0,29,0,55,32,1,37,0,1,0,18,21,0,53,0,13,0,51,0,26,27,27,27,16,33,0,109,48,6,32,0,93,0,31,16,33,0,110,48,0,0,0,53,32,0,109,0,54,0,34,27,27,16,0,0,0,66,17,33,0,111,48,6,32,0,3,0,34,32,0,110,17,0,13,0,78,17,33,0,112,48,6,32,0,3,0,34,32,0,111,17,33,0,113,48,6,32,0,95,0,34,32,0,111,17,0,6,0,65,17,0,13,32,0,113,17,0,9,32,0,112,17,32,0,13,0,34,32,0,111,21,32,0,10,0,163,27,16,6,32,0,1,0,34,32,0,110,17,0,43,0,1,26,32,1,15,0,35,16,17,0,0,32,0,108,0,34,32,0,110,17,17,0,0,34,0,113,0,15,0,65,17,17,0,0,32,0,112,17,33,0,114,48,6,32,0,78,0,21,33,0,111,50,6,32,0,1,0,45,0,65,26,16,0,34,0,53,32,0,111,27,0,55,32,0,78,0,45,0,74,26,16,0,21,32,0,114,17,27,16,0,1,0,53,0,27,27,16,33,0,115,48,6,32,0,115,0,34,32,0,41,17,0,2,0,53,0,50,0,0,26,0,14,0,65,21,0,10,0,53,0,28,0,53,0,66,27,27,20,27,16,0,50,0,0,26,16,0,28,16,33,0,115,49,0,34,32,0,13,17,33,0,116,48,0,2,16,33,0,117,48,6,32,0,97,0,14,0,67,17,0,9,32,0,117,17,33,0,118,48,0,9,32,1,18,0,35,16,0,14,32,0,1,17,17,0,31,16,33,0,119,48,6,32,0,106,0,10,32,0,105,17,0,28,16,0,10,34,0,22,0,8,16,0,34,34,0,34,17,17,0,2,32,0,97,17,0,2,32,0,118,0,8,16,17,34,0,27,0,164,26,16,6,32,0,115,0,14,0,74,17,33,0,120,48,0,2,0,71,17,0,1,33,0,115,50,6,32,0,97,0,14,0,66,17,0,2,32,0,117,17,0,6,33,0,25,50,6,32,1,15,0,35,16,0,43,0,1,26,32,1,34,17,0,14,32,0,91,17,0,11,32,0,115,17,32,0,47,16,33,0,121,48,6,32,0,25,0,34,32,0,41,17,34,0,47,16,33,0,122,48,6,32,0,30,0,34,32,0,53,17,0,21,0,65,17,0,43,0,1,26,0,66,17,1,23,16,6,32,0,122,33,0,123,48,6,32,0,51,32,1,39,0,52,0,16,27,33,0,122,50,6,0,65,0,14,32,0,76,17,0,9,32,0,122,17,0,25,0,66,17,32,0,45,0,31,20,32,0,10,0,166,0,156,11,2,0,56,0,11,0,53,34,0,123,0,25,0,66,17,27,0,48,0,10,26,20,27,27,16,6,32,0,122,0,2,0,67,17,0,6,33,0,76,50,6,32,0,83,0,2,33,0,76,50,6,32,0,76,0,14,0,67,17,0,34,32,0,46,17,0,34,32,0,13,17,33,0,124,48,6,32,0,124,0,14,0,1,0,18,21,33,0,97,50,6,34,0,124,0,14,0,1,0,18,21,33,0,98,50,6,32,1,34,0,1,32,0,1,17,32,0,8,0,54,0,11,27,0,9,0,15,0,53,0,80,27,21,16,33,0,125,48,6,32,1,34,0,0,32,0,8,17,0,16,32,0,1,17,0,9,34,0,120,0,34,32,0,13,17,17,33,0,126,48,0,31,16,33,0,127,48,6,32,1,16,32,1,25,0,11,0,35,0,0,0,71,21,0,54,0,14,27,21,32,0,1,17,0,10,32,1,17,0,35,16,0,14,32,0,1,17,0,27,16,0,12,32,0,94,17,17,0,10,34,0,126,17,0,10,34,0,125,17,0,11,0,65,0,16,32,0,3,17,0,9,32,0,117,17,0,27,16,0,11,32,0,94,17,0,11,32,0,92,17,17,33,0,128,48,6,32,0,117,0,11,34,0,118,0,10,34,0,128,17,0,10,32,0,93,17,17,32,0,13,32,0,10,0,167,27,16,6,32,0,117,0,34,32,0,110,17,0,11,0,67,0,14,34,0,114,17,0,9,34,0,116,0,34,32,0,110,17,0,13,0,68,17,17,17,32,0,13,0,34,32,0,110,21,32,0,10,0,168,27,16,6,32,0,117,0,12,0,53,0,28,27,16,0,9,32,0,3,0,15,0,65,17,17,0,9,32,0,95,0,11,0,65,17,17,0,11,32,0,92,17,32,0,13,32,0,10,0,169,27,16,6,32,0,117,0,34,32,0,110,17,33,0,129,48,0,12,33,0,112,50,6,32,0,110,0,31,34,0,129,17,33,0,130,48,6,32,0,112,0,43,0,31,26,33,0,110,50,6,32,0,78,0,45,0,66,26,16,0,21,34,0,112,17,0,43,0,31,26,33,0,111,50,6,34,0,17,0,28,16,33,0,131,48,0,31,16,33,0,132,48,6,32,0,91,32,0,8,0,54,0,11,27,0,9,0,15,0,53,0,65,27,21,16,0,11,34,0,93,0,9,32,0,117,17,0,27,16,0,34,32,0,41,17,0,10,34,0,131,17,0,10,34,0,77,17,17,0,31,16,33,0,133,48,6,32,0,115,0,34,32,0,82,17,33,0,134,48,0,11,0,65,17,33,0,135,48,6,0,67,0,67,11,2,32,1,25,34,0,115,0,34,32,0,133,17,33,0,136,48,17,33,0,137,48,6,0,70,0,11,34,0,134,17,0,9,32,0,135,17,32,0,82,32,0,10,0,170,27,16,6,32,0,46,0,34,32,0,133,17,33,0,138,48,6,32,0,91,0,34,32,0,133,17,33,0,139,48,6,32,0,7,0,13,16,0,11,32,0,139,17,0,9,32,0,138,0,14,0,65,17,17,0,9,32,0,137,17,33,0,140,48,6,32,0,7,0,34,32,0,139,0,31,32,0,140,17,17,33,0,141,48,0,14,0,65,17,32,0,133,0,31,32,0,140,21,32,0,10,0,171,27,16,6,32,0,137,0,31,0,53,34,0,140,27,0,55,34,0,141,0,15,0,65,17,27,16,33,0,137,49,6,0,65,0,15,32,0,7,17,0,31,16,33,0,142,48,0,45,0,65,26,16,33,0,143,48,6,32,0,139,0,31,32,0,137,17,33,0,144,48,0,21,32,0,142,17,0,40,32,0,86,0,13,16,0,21,32,0,138,0,31,32,0,137,17,33,0,145,48,17,0,21,32,0,143,17,33,0,146,48,17,33,0,147,48,6,32,0,33,0,34,34,0,53,17,0,43,0,1,26,0,66,17,0,21,32,0,1,0,13,16,17,0,34,32,0,145,17,0,21,34,0,33,0,31,34,0,45,17,0,21,0,61,17,0,34,34,0,138,17,0,0,32,0,136,0,14,0,66,17,17,17,33,0,148,48,6,32,0,148,0,32,16,0,34,0,53,32,0,144,0,21,32,0,139,17,33,0,149,48,0,54,0,34,27,0,32,20,27,16,33,0,150,48,6,32,0,150,0,31,0,53,0,15,0,53,32,0,137,0,13,16,27,27,16,1,24,16,6,32,0,150,0,34,34,0,144,0,45,0,61,26,16,0,21,32,0,137,17,0,34,32,0,150,17,0,50,0,0,26,16,33,0,151,48,0,32,16,17,0,31,0,53,32,0,137,0,13,16,0,54,0,11,27,27,16,33,0,150,49,6,32,0,150,0,43,0,34,26,33,0,137,50,6,32,0,150,0,43,0,34,26,33,0,133,50,6,32,0,150,0,43,0,34,26,33,0,136,50,6,34,0,151,0,11,0,65,17,0,10,0,53,0,28,27,16,0,8,16,0,48,0,0,26,16,33,0,152,48,6,34,0,139,0,34,32,0,150,0,24,32,0,152,17,17,33,0,153,48,6,32,0,7,0,13,16,0,16,32,0,153,17,32,0,133,0,24,32,0,152,21,32,0,10,32,0,153,0,54,0,31,27,0,39,20,32,1,30,0,172,21,27,16,6,32,0,136,0,11,0,65,17,33,0,154,48,0,9,0,71,0,11,34,0,136,17,17,33,0,155,48,6,34,0,32,0,34,32,0,133,17,0,34,0,53,32,0,137,32,1,38,16,0,25,32,0,152,17,27,0,21,34,0,7,0,6,0,65,17,0,1,16,33,0,156,48,0,34,32,0,153,17,21,0,1,0,19,21,16,33,0,157,48,6,32,0,157,0,11,0,65,17,0,9,32,0,155,17,32,0,133,32,0,10,0,173,27,16,6,34,0,155,32,1,40,0,25,0,66,21,0,16,0,31,21,32,0,137,17,33,0,158,48,0,34,34,0,150,0,31,32,0,137,17,0,32,16,33,0,159,48,17,0,21,34,0,143,17,0,40,34,0,146,17,33,0,160,48,6,34,0,145,0,21,34,0,156,17,0,37,0,0,32,0,86,0,54,0,34,27,21,16,0,19,0,25,0,53,0,13,27,34,0,142,21,0,34,0,53,0,32,27,34,0,159,21,0,34,32,0,137,0,25,34,0,152,17,0,50,0,0,26,0,61,17,21,0,21,0,34,0,53,34,0,153,27,21,16,33,0,161,48,6,32,0,157,0,11,0,65,17,32,1,40,0,11,34,0,158,0,21,0,66,17,21,0,34,0,53,0,50,0,0,26,27,0,18,21,32,0,137,17,0,9,32,0,137,0,27,0,66,17,0,11,32,0,154,17,17,33,0,162,48,6,32,0,91,0,34,32,0,82,17,0,0,0,71,17,0,0,32,0,83,0,2,0,71,17,0,34,32,0,46,0,34,32,0,82,17,33,0,163,48,17,17,33,0,164,48,6,34,0,163,0,2,0,74,17,0,0,32,0,164,17,0,29,0,55,0,38,27,16,0,21,33,0,162,50,6,0,66,0,1,32,0,78,17,0,43,0,34,26,32,0,13,17,0,0,0,66,17,32,0,132,32,0,82,0,21,32,0,133,17,11,3,0,31,0,71,0,67,0,71,11,3,17,0,21,16,33,0,165,48,6,34,0,135,0,21,34,0,154,17,0,12,0,2,0,67,21,0,0,0,19,21,34,0,162,17,0,0,0,81,17,33,0,166,48,6,32,0,78,0,45,0,81,26,16,32,0,78,0,45,0,65,26,16,34,0,71,0,31,34,0,73,17,32,0,132,0,45,0,82,26,16,34,0,91,0,34,34,0,132,17,34,0,166,34,0,82,0,45,0,65,26,16,0,21,34,0,157,17,34,0,164,0,21,34,0,161,17,11,8,33,0,167,48,6,32,0,102,0,8,16,0,50,0,0,26,16,32,1,37,0,1,0,19,21,32,0,94,17,0,7,0,10,0,12,21,0,67,17,0,9,32,0,96,17,33,0,168,48,6,34,0,99,0,28,16,0,10,0,66,0,14,32,0,3,17,17,33,0,169,48,0,11,32,0,117,0,11,32,0,94,17,0,10,0,53,0,27,27,16,0,10,32,0,102,17,0,10,34,0,168,17,0,10,32,0,92,17,33,0,170,48,17,0,31,16,33,0,171,48,6,34,0,169,0,10,34,0,170,17,0,12,32,0,96,17,32,0,13,32,0,10,0,174,27,16,6,0,65,0,14,32,0,3,17,0,11,32,0,102,17,0,10,0,65,0,16,32,0,3,17,0,9,34,0,96,17,17,0,8,16,0,2,0,67,17,0,6,34,0,97,17,0,27,0,67,17,0,34,32,0,171,17,33,0,172,48,0,13,0,67,17,33,0,173,48,6,32,1,26,0,11,32,0,1,17,0,11,34,0,92,17,0,31,16,33,0,174,48,0,43,0,34,26,32,0,1,17,33,0,175,48,0,9,16,0,39,16,33,0,176,48,0,28,0,1,0,19,21,0,61,17,0,31,16,0,34,34,0,175,17,33,0,177,48,6,34,0,8,0,0,32,1,34,17,33,0,178,48,0,16,32,0,1,17,0,31,16,33,0,179,48,0,21,34,0,174,17,33,0,180,48,6,32,0,1,0,34,34,0,179,17,0,0,32,0,176,0,13,16,0,43,0,1,26,34,0,178,17,17,0,21,33,0,177,50,6,34,0,41,0,34,34,0,38,17,33,0,181,48,6,0,65,0,21,32,0,106,17,0,50,0,0,26,16,0,31,0,66,0,21,32,0,105,17,17,0,25,0,66,17,0,28,0,54,0,1,27,16,0,0,34,0,94,0,27,0,66,17,0,31,34,0,105,17,0,8,16,17,0,43,0,21,26,34,0,35,17,33,0,182,48,6,0,79,0,14,32,0,3,17,0,28,16,0,10,34,0,106,17,0,10,32,0,98,0,14,0,67,17,17,0,12,34,0,103,17,0,31,16,0,21,32,0,78,0,31,0,53,0,8,27,32,0,79,17,17,33,0,183,48,6,34,0,104,0,31,16,33,0,184,48,6,32,1,27,0,14,32,0,1,17,0,31,16,33,0,185,48,6,32,0,173,0,0,32,0,171,17,0,0,0,53,32,0,109,0,54,0,34,27,0,2,32,0,173,21,27,16,33,0,186,48,6,32,0,186,0,31,34,0,98,0,34,32,0,171,17,33,0,187,48,0,14,0,67,17,33,0,188,48,0,2,32,0,173,0,0,0,66,17,17,17,0,21,33,0,183,50,6,32,0,188,0,8,16,33,0,188,49,6,32,0,188,0,43,0,31,26,33,0,171,50,6,32,0,188,0,43,0,31,26,33,0,186,50,6,34,0,79,0,1,16,0,21,34,0,107,0,0,32,0,108,17,0,0,32,0,1,17,0,34,32,0,110,17,0,43,0,1,26,32,1,15,0,35,16,0,0,0,66,17,17,0,6,0,65,17,17,0,0,0,83,17,33,0,189,48,6,32,0,180,32,0,180,32,0,181,32,0,181,32,0,127,32,0,119,32,0,36,0,31,0,67,17,32,0,111,32,0,183,32,0,185,0,66,0,0,32,0,130,17,0,66,0,0,32,0,130,17,34,0,109,0,34,32,0,100,17,0,6,0,66,17,0,0,32,0,100,17,34,0,186,32,0,184,11,15,33,0,190,48,0,21,16,0,43,0,34,26,32,0,13,17,0,21,32,0,165,17,33,0,191,48,0,32,16,33,0,192,48,6,34,0,180,0,45,0,65,26,16,34,0,177,32,0,181,0,45,0,66,26,16,34,0,181,0,13,16,0,26,16,0,0,0,66,17,34,0,127,0,45,0,84,26,16,34,0,119,0,45,0,85,26,16,34,0,182,0,22,34,0,117,0,34,34,0,36,17,0,0,0,62,17,17,0,30,16,0,20,16,34,0,189,34,0,183,0,45,0,74,26,16,34,0,185,0,45,0,86,26,16,32,0,130,0,45,0,87,26,16,34,0,1,0,34,0,66,0,1,34,0,130,17,17,0,43,0,1,26,32,1,34,17,34,0,3,0,34,32,0,100,17,0,0,0,88,17,34,0,95,0,34,32,0,171,17,0,11,0,65,17,0,2,0,70,17,0,0,34,0,172,0,14,0,66,17,0,6,34,0,187,17,0,2,0,67,17,0,0,34,0,173,17,0,31,34,0,188,17,17,0,0,0,89,17,32,0,121,0,0,0,90,17,33,0,193,48,0,25,0,61,17,11,15,0,21,34,0,167,17,0,21,16,0,34,32,0,192,17,33,0,194,48,6,34,0,190,0,45,0,13,26,16,0,21,34,0,165,0,13,16,17,0,34,0,45,0,26,0,54,0,0,27,26,0,50,0,0,26,0,28,20,0,54,0,34,27,21,0,69,0,60,0,91,11,3,17,33,0,195,48,6,34,0,191,0,34,0,53,32,0,195,0,21,16,27,0,55,34,0,110,34,0,78,11,2,0,45,0,13,26,16,0,43,0,31,26,0,66,0,65,11,2,17,0,1,34,0,111,17,34,0,100,32,0,171,11,3,0,21,16,0,43,0,34,26,32,0,13,17,27,16,33,0,196,48,6,32,0,5,32,0,6,11,2,0,45,0,34,0,53,0,34,0,53,32,0,192,27,0,43,0,21,26,0,61,21,27,26,32,0,196,34,0,196,0,34,0,53,34,0,195,0,35,0,61,17,27,0,55,34,0,108,0,10,34,0,102,17,0,8,16,0,28,16,32,1,38,16,0,34,34,0,171,17,0,43,0,34,26,32,0,13,17,27,16,11,2,17,33,0,197,48,6,32,0,48,0,31,0,53,34,0,48,27,0,55,32,0,58,27,16,33,0,58,49,0,11,0,65,17,0,10,32,0,76,0,13,0,66,17,0,9,32,0,83,17,17,0,10,33,0,52,50,6,32,0,52,0,31,16,33,0,198,48,0,43,0,34,26,34,0,76,17,33,0,199,48,0,14,0,66,17,0,0,0,66,17,33,0,200,48,0,31,16,33,0,201,48,6,34,0,199,0,11,0,66,17,0,0,34,0,58,0,34,32,0,198,17,0,2,0,67,17,17,0,5,0,70,17,33,0,202,48,6,32,0,51,0,34,32,0,198,17,33,0,203,48,0,50,0,0,26,0,61,17,33,0,204,48,6,32,0,202,0,0,34,0,200,17,0,34,0,53,0,33,0,51,0,34,0,53,32,0,204,0,54,0,34,27,0,32,20,0,31,34,0,203,21,27,27,27,16,0,6,32,0,83,0,31,32,0,52,0,9,32,0,51,17,17,0,8,16,0,1,0,67,17,17,33,0,205,48,6,32,0,198,0,34,32,0,201,17,0,40,32,0,205,0,50,0,0,26,16,0,21,0,65,17,0,25,0,34,34,0,204,21,0,0,34,0,202,21,0,34,0,0,0,18,0,51,0,37,27,21,34,0,201,21,0,43,0,21,26,0,24,21,0,61,17,17,0,40,0,53,0,31,27,34,0,205,17,33,0,198,49,6,34,0,84,0,31,32,0,51,17,34,0,83,0,8,16,0,31,32,0,51,17,32,0,51,0,31,16,0,31,0,53,34,0,52,0,31,34,0,51,17,27,0,55,34,0,198,27,16,11,3,33,0,206,48,6,34,0,184,0,13,0,52,0,1,27,32,0,194,17,0,16,34,0,192,17,0,21,0,66,17,0,31,16,32,0,147,0,45,0,13,26,16,0,0,34,0,86,17,34,0,147,34,0,160,11,4,33,0,207,48,6,34,0,193,0,35,0,61,17,0,21,34,0,194,17,34,0,176,34,0,206,34,0,207,34,0,197,11,5,7,11,0,0,45,0,175,0,51,0,41,27,26,11,0,0,65,0,26,16,11,4,33,0,3,48,6,34,0,2,0,13,0,11,0,70,21,0,58,0,23,27,16,0,42,34,0,3,26,0,25,0,13,21,0,54,0,21,27,16,33,0,4,33,0,5,33,0,6,33,0,7,12,4,48,6,34,0,1,32,1,41,34,0,5,32,0,6,11,2,17,33,0,8,48,33,0,9,33,0,10,33,0,11,33,0,12,33,0,13,12,5,48,6,34,0,9,32,1,43,34,0,10,32,0,11,0,35,16,34,0,12,34,0,13,34,0,6,0,45,0,65,26,16,0,28,34,0,7,17,11,5,17,33,0,14,33,0,15,33,0,16,33,0,17,33,0,18,12,5,48,6,34,0,14,34,0,11,0,25,0,66,17,0,21,34,0,4,0,34,34,0,15,17,11,1,17,0,21,16,34,0,16,0,12,16,0,30,16,0,44,0,11,26,16,34,0,17,0,12,16,0,30,16,0,44,0,11,26,16,34,0,18,34,0,8,11,6,7,34,0,1,34,0,2,16,7,32,0,1,0,34,0,53,32,0,2,0,31,34,0,1,17,27,0,55,0,45,0,66,26,27,16,32,1,13,34,0,2,0,43,0,34,26,16,17,7,34,0,1,0,31,16,0,35,16,0,117,11,2,0,41,16,7,34,0,1,0,21,0,65,17,0,34,0,53,0,50,0,0,26,27,32,1,31,17,0,9,32,1,32,17,0,31,16,0,118,11,2,0,41,16,7,32,1,26,0,31,34,0,1,17,0,119,11,2,0,41,16,7,32,1,26,0,31,34,0,1,17,0,120,11,2,0,41,16,7,34,0,2,0,31,34,0,1,17,0,43,0,34,26,32,1,26,17,0,121,11,2,0,41,16,7,32,0,2,0,43,0,31,26,33,1,26,50,6,32,0,2,0,43,0,31,26,33,1,25,50,6,34,0,1,0,31,34,0,2,17,7,0,48,0,10,26,0,58,34,0,1,0,23,34,0,2,0,54,0,31,27,21,0,41,20,27,7,0,65,0,29,0,54,0,46,0,14,26,27,0,49,1,25,26,0,19,0,51,0,45,0,65,26,27,21,0,35,0,61,21,11,2,0,56,0,13,0,11,0,65,21,0,52,0,9,27,27,33,0,3,48,6,1,26,33,0,4,48,6,0,65,32,0,4,0,131,27,0,43,0,66,34,0,4,0,132,27,26,11,2,0,56,0,13,0,52,0,12,27,27,33,0,5,48,6,34,0,1,34,0,5,0,133,11,2,0,56,0,13,0,52,0,5,27,0,11,34,0,3,21,27,34,0,2,19,0,41,16,7,0,14,0,58,0,48,0,10,26,27,0,58,34,0,1,0,23,34,0,2,0,54,0,31,27,0,43,0,66,0,57,0,34,27,26,0,42,32,1,6,26,0,22,32,1,5,21,21,0,30,0,51,0,9,27,20,21,0,41,20,27,7,32,1,15,0,21,0,65,17,0,31,32,0,1,17,0,13,32,2,16,0,35,16,0,0,0,70,17,17,32,1,13,0,21,0,65,21,0,31,34,0,1,21,32,1,10,0,138,27,16,7,34,0,1,0,6,33,1,25,50,0,14,0,67,17,32,1,26,32,1,10,34,0,4,27,16,7,32,2,28,32,2,25,34,0,1,17,0,9,32,1,46,0,14,0,65,17,17,7,32,1,5,0,34,0,53,32,0,1,27,0,55,32,1,5,0,34,32,0,2,17,27,16,33,1,5,49,6,32,1,6,0,34,0,53,34,0,2,27,0,55,32,1,6,0,34,34,0,1,17,27,16,33,1,6,49,7,32,1,24,0,34,32,0,1,17,0,2,0,53,0,8,27,32,1,121,17,0,6,33,1,122,50,0,14,0,67,17,32,1,30,0,51,0,32,27,0,34,34,0,1,21,32,1,10,0,165,27,16,7,32,1,148,0,34,0,53,32,0,1,27,0,13,0,53,0,28,27,20,0,52,0,10,27,32,1,149,17,0,8,16,32,1,133,0,31,0,53,32,1,137,27,0,54,0,21,27,20,0,34,34,0,1,21,32,1,10,0,171,27,16,7,32,0,1,0,28,16,0,0,34,0,2,19,0,50,0,6,26,16,0,6,34,0,1,17,7,0,37,0,14,0,18,0,51,0,13,27,21,0,43,0,31,26,0,19,21,0,0,34,0,2,21,0,43,0,34,26,32,3,8,21,0,21,0,110,21,0,21,34,0,1,21,0,21,0,130,21,7] ,[runtime[0],runtime[1],runtime[2],runtime[3],runtime[4],runtime[6],runtime[7],runtime[8],runtime[9],runtime[10],runtime[11],runtime[12],runtime[13],runtime[14],runtime[15],runtime[16],runtime[17],runtime[19],runtime[20],runtime[21],runtime[22],runtime[23],runtime[24],runtime[25],runtime[26],runtime[27],runtime[28],runtime[29],runtime[30],runtime[31],runtime[32],runtime[33],runtime[34],runtime[35],runtime[36],runtime[37],runtime[38],runtime[39],runtime[40],runtime[41],runtime[42],runtime[43],runtime[44],runtime[45],runtime[46],runtime[47],runtime[48],runtime[49],runtime[50],runtime[51],runtime[52],runtime[53],runtime[54],runtime[55],runtime[56],runtime[57],runtime[59],runtime[60],runtime[62],10,13,-1,11,26,9,0,1,2,5,8,4,3,-3,-2,6,17,Math.PI,Infinity,-4,-5,-6,32,64,48,43,44,42,66,24,16,7,14,'\0','0','#','\'','\"','@',str("⋄,"),str(":;?"),str("⇐←↩"),str("(){}⟨⟩"),str("‿"),str("·"),str("𝕊𝕏𝕎𝔽𝔾𝕤𝕩𝕨𝕣𝕗𝕘"),str(".¯π∞"),str("_"),str("aA"),str("•"),str("𝕨"),str(" "),str("#\'\"@"),str("s"),str("Unknown character"),str(": "),str("Character set conflict: "),str("˜⁼"),str("Unclosed quote"),str("Words can\'t only have underscores"),str("System dot with no name"),str("𝕣 can\'t be used with other word characters"),str("Numbers can\'t start with underscores"),str("Letter"),str(" \""),str("\" not allowed in numbers"),str("ea"),str("Negative sign in the middle of a number"),str("Portion of a number is empty"),str("Ill-formed decimal or exponent use"),str("π and ∞ must occur alone"),str("Missing "),str("opening"),str("closing"),str("Malformed bracket nesting"),str("Empty program"),str("Swapped open and closed brackets"),str("Parentheses can\'t contain separators"),str("Predicates can\'t be placed inside lists"),str("Empty statement or expression"),str("Invalid assignment or stranding use"),str("Can\'t use export statement as predicate"),str("Dot must be followed by a name"),str("Punctuation : ; ? not allowed outside blocks"),str("Header-less bodies must come last"),str("At most two header-less bodies allowed"),str("Invalid Undo header syntax"),str("Only one header per body allowed"),str("Missing operand in header"),str("Invalid header structure"),str("Incorrect special name"),str("Header left argument without right"),str("Header operation must be a plain name"),str("Header with ⁼ must take arguments"),str("Header with ˜⁼ must have left argument"),str("Block header type conflict"),str("Special name outside of any block"),str("Unreachable body"),str("Dot must be preceded by a subject"),str("Nothing (·) cannot be assigned"),str("Can\'t use Nothing (·) as predicate"),str("Missing operand"),str("Double subjects (missing ‿?)"),str("No right-hand side in non-modified assignment"),str("Role of the two sides in assignment must match"),str("Can\'t use Nothing (·) in lists"),str("Can\'t return Nothing (·)"),str("Invalid use of 𝕨 in monadic case"),str("Assignment target must be a name or list of targets"),str("Can\'t nest assignments (write aliases with ⇐)"),str("Can\'t use result of function/modifier assignment without parentheses"),str("Can\'t define special name"),str("Redefinition"),str("Undefined identifier"),str("Can\'t export from surrounding scope"),str("Second-level parts of a train must be functions"),str("System values not supported")] ,[[0,1,0],[0,0,1],[1,0,2],[1,1,3],[0,0,[[],[4]]],[0,0,[[],[5]]],[0,0,[[],[6]]],[0,0,[[],[7]]],[0,0,[[],[8]]],[0,0,[[],[9]]],[0,0,10],[0,0,11],[0,0,12],[0,0,13],[0,0,[[],[14]]],[0,0,[[],[15]]],[2,1,16],[0,0,17],[2,1,18],[0,0,19],[1,0,20],[0,0,21],[0,0,[[],[22]]],[0,0,23],[0,0,24],[0,0,25],[2,1,26]] ,[[0,0],[3,45],[613,5],[632,6],[803,57],[3009,23],[3834,208],[12411,19],[12649,3],[12657,3],[12697,3],[12714,3],[12753,3],[12770,3],[12787,3],[12813,3],[12849,3],[12875,6],[13007,3],[13069,3],[13119,5],[13145,3],[13167,3],[13225,3],[13278,3],[13340,3],[13365,3]] ); let compgen = sys => { let gl = sys.glyphs, rt = sys.runtime; let comp = compgen_raw(list(gl)); return sys.comps = sysargs => { let system = (x,w) => { let r = table(s=>sysvals[unstr(s)])(x); if (r.some(v=>!has(v))) { let m = x.filter((_,i)=>!has(r[i])).map(s=>"•"+unstr(s)).join(" "); throw Error("Unknown system values (see •listSys for available): "+m); } return table(v=>v.dynamic?v(sysargs):v)(r); } let rts = list([rt, system].concat(sysargs.addrt||[])); return src => { let s=str(src), c; try { c=comp(s,rts); } catch(e) { if (typeof e.message!=="string") e.message.src=s; throw e; } c.push(s); return c; } } } let sysargs = {runtime, glyphs:glyphs.map(str)}; let compile = compgen(sysargs)(sysargs); let bqn = src => run(...compile(src)); runtime[43] = rtAssert; // Formatter let fmtnum = x => str(x==Infinity ? "∞" : x==-Infinity ? "¯∞" : (""+x).replace(/-/g,"¯").replace(/\+/g,"")); let placeholder = ["array","function","1-modifier","2-modifier"].map(s => str("*"+s+"*")); let repop = x => x.ns ? str("{"+listkeys(x).join("‿")+"⇐}") : gl[x.prim] || placeholder[type(x)-2]; let [fmt1,repr] = run( [1,1,7,34,0,1,33,0,3,33,0,4,33,0,5,33,0,6,12,4,48,6,0,68,0,15,0,18,0,18,21,0,41,0,69,27,11,2,0,44,0,10,0,41,0,59,27,27,32,0,6,11,2,0,44,0,59,0,42,0,8,27,27,33,0,7,48,6,1,2,33,0,8,48,6,0,11,0,8,0,51,21,0,46,1,3,27,33,0,9,48,6,1,4,33,0,10,48,6,1,5,33,0,11,48,6,1,6,1,7,11,2,0,44,1,8,0,50,11,2,0,44,0,10,0,42,0,10,0,41,0,50,27,0,40,0,7,27,27,27,27,33,0,12,48,6,0,78,0,19,0,77,17,1,9,1,10,11,2,0,44,0,10,0,11,0,47,21,0,7,0,11,0,10,0,51,21,21,27,11,2,0,44,0,14,0,14,0,47,0,47,11,2,21,27,33,0,13,48,6,1,11,33,0,14,48,6,1,12,33,0,15,48,6,1,13,1,14,1,15,11,3,0,44,0,31,0,59,26,0,8,0,17,21,0,39,0,36,0,0,26,0,12,0,0,0,8,0,41,0,47,27,21,0,10,21,27,27,33,0,16,48,6,32,0,7,0,19,20,34,0,16,32,0,15,11,2,0,44,0,35,32,0,3,26,0,12,0,56,21,0,17,0,39,0,36,0,7,26,27,20,27,32,0,15,11,3,0,44,0,13,0,3,0,51,21,27,33,0,17,48,6,1,16,33,0,18,48,6,0,86,33,0,19,48,6,0,16,0,39,0,29,27,32,0,5,20,32,0,19,11,2,0,44,0,51,0,42,0,11,27,27,32,0,18,32,0,17,0,39,34,0,19,0,28,11,2,0,44,0,10,0,11,0,50,21,27,27,27,0,29,0,50,21,0,19,20,33,0,20,48,6,0,16,0,16,34,0,17,20,34,0,20,11,2,0,44,0,15,0,12,0,56,21,27,32,0,3,21,33,0,21,48,6,1,17,33,0,22,48,6,0,70,0,16,0,15,0,18,0,16,0,27,0,11,0,0,0,50,21,21,21,0,18,0,15,21,0,67,21,0,34,32,0,7,0,18,0,79,21,26,0,18,0,24,0,72,21,0,18,0,71,21,0,18,0,22,0,50,21,11,2,0,44,0,10,0,8,0,50,21,27,20,0,34,32,0,22,0,18,0,87,21,26,0,18,20,0,24,0,72,21,0,18,0,71,21,11,3,0,44,0,35,32,0,3,26,0,32,0,28,26,0,51,0,17,0,57,17,0,25,0,51,0,50,0,47,11,3,17,21,0,36,0,4,26,20,27,11,2,0,44,0,10,0,8,0,47,21,27,33,0,23,48,6,0,29,0,39,32,0,22,27,0,18,0,88,21,32,0,23,0,17,34,0,23,0,40,0,18,0,41,0,89,0,42,0,18,27,27,27,0,14,21,11,3,0,44,0,11,0,3,0,51,21,27,33,0,24,48,6,34,0,7,34,0,24,11,2,0,44,32,0,3,0,11,0,47,21,27,33,0,25,48,6,0,31,0,47,26,0,30,0,90,21,34,0,18,34,0,22,27,0,29,0,50,21,33,0,26,48,6,0,16,0,16,34,0,25,20,34,0,26,11,2,0,44,0,15,0,12,0,56,21,27,32,0,3,21,33,0,27,48,6,32,0,21,0,39,0,33,0,58,0,0,0,59,17,0,42,0,18,27,26,27,0,17,20,0,22,0,48,21,32,0,27,11,2,7,0,50,0,34,0,21,26,34,0,1,0,1,16,17,0,26,0,43,0,38,0,32,0,35,0,2,26,26,26,27,16,0,36,0,48,0,49,11,2,0,45,0,0,27,26,34,0,2,19,0,17,16,0,29,0,41,0,48,27,0,43,0,47,27,16,7,32,0,1,0,14,16,0,22,0,48,17,33,0,3,48,0,4,0,50,17,32,1,8,16,33,0,4,48,6,1,18,33,0,5,48,6,32,0,1,0,17,34,0,1,0,14,16,0,21,0,48,17,0,18,34,0,3,0,36,0,2,26,16,17,17,0,21,0,41,0,36,0,0,26,27,34,0,5,11,2,0,44,0,16,0,39,0,10,27,0,8,0,47,21,27,34,0,4,17,7,32,0,1,0,17,16,0,34,0,31,0,60,26,0,17,0,14,0,29,0,48,21,0,42,0,19,27,21,0,18,0,16,21,26,34,0,1,0,14,16,32,1,8,0,50,17,17,0,18,16,7,0,60,0,17,32,0,1,0,10,16,34,0,2,11,2,17,33,0,3,48,6,32,0,3,34,0,1,34,0,3,11,3,0,19,16,0,18,16,7,0,72,0,18,34,0,1,0,28,16,0,22,0,50,17,0,22,0,48,17,17,0,18,0,71,17,0,19,16,7,32,0,1,0,14,16,0,29,0,48,17,33,0,3,48,6,0,73,32,0,2,0,16,0,3,0,50,21,0,32,0,28,26,0,74,21,0,17,20,32,1,6,11,2,0,44,0,8,0,41,0,52,27,27,16,11,2,0,18,16,0,21,32,0,3,17,0,19,16,34,0,1,0,29,0,43,0,75,0,29,0,50,0,1,34,0,2,17,0,3,0,53,17,0,4,0,47,17,17,27,16,0,76,0,21,0,41,0,1,27,34,0,3,17,0,19,16,11,3,0,18,16,7,34,0,1,0,28,16,0,35,0,11,26,0,70,17,0,37,0,1,26,16,0,38,0,0,26,16,0,11,0,51,17,0,36,0,7,26,16,7,34,0,1,0,34,0,60,26,16,32,1,11,0,50,17,32,1,12,0,51,17,0,29,0,41,0,47,0,48,11,2,27,0,43,0,61,27,16,7,34,0,1,0,14,16,0,70,0,34,32,1,6,26,0,34,0,18,0,41,0,79,27,26,20,0,18,20,0,29,0,43,0,62,27,20,11,2,0,44,0,10,0,8,0,50,21,27,16,0,19,16,7,32,0,1,0,34,0,14,26,16,33,0,3,48,6,32,0,3,0,34,0,29,26,0,50,17,0,17,0,31,0,50,26,0,1,0,11,21,0,46,0,37,0,4,26,27,11,2,0,44,0,11,0,8,0,47,21,27,16,33,0,4,48,6,34,0,3,0,34,0,29,26,16,0,11,0,8,0,47,21,0,46,0,50,0,45,0,37,0,4,26,27,27,16,33,0,5,48,6,34,0,1,0,34,0,21,26,0,50,0,21,32,0,4,0,10,16,0,2,32,0,2,19,0,1,16,17,0,6,34,0,4,17,0,2,34,0,2,19,0,35,0,19,26,32,0,5,17,17,0,11,0,1,0,51,21,0,4,0,47,21,0,46,0,19,27,16,0,51,0,45,0,18,0,39,0,8,27,27,16,33,0,6,48,6,34,0,6,32,1,10,0,9,0,39,32,1,9,27,11,2,0,44,34,0,5,0,17,16,0,13,0,41,0,26,0,41,0,50,27,27,16,27,16,32,1,11,0,51,17,7,32,0,1,0,34,32,1,21,26,16,32,1,14,0,50,0,15,34,0,2,19,17,32,1,12,34,0,1,0,11,16,17,7,32,0,1,0,11,16,33,0,3,48,6,0,80,0,16,0,43,32,0,1,27,16,0,22,0,47,17,33,0,1,49,6,32,0,1,0,14,16,0,22,0,48,17,33,0,4,48,0,10,16,0,1,16,0,11,0,41,0,47,27,0,46,0,49,27,16,33,0,5,48,6,32,0,3,0,8,0,47,17,0,32,0,29,26,0,81,17,33,0,6,48,6,1,19,33,0,7,48,6,32,0,1,0,27,0,41,0,16,0,11,32,0,6,21,0,0,0,50,21,27,34,0,7,11,2,0,44,32,0,3,0,10,0,50,17,27,16,33,0,1,49,6,32,0,6,0,21,0,41,0,1,27,32,0,4,17,32,0,5,0,45,0,18,27,34,0,1,17,34,0,5,0,45,0,18,27,0,65,0,21,32,0,4,0,18,0,50,17,0,29,0,48,17,17,0,17,34,0,4,17,0,29,0,43,34,0,6,27,16,17,0,19,16,32,0,3,0,10,0,50,17,0,46,32,1,9,32,1,11,0,50,21,32,1,12,34,0,3,21,27,16,7,34,0,1,32,1,15,32,1,13,11,2,0,44,0,14,0,11,0,47,21,0,36,0,7,26,20,27,16,7,34,0,1,32,1,15,0,48,17,7,0,16,0,16,34,0,4,20,0,20,0,47,21,34,0,0,11,2,0,44,0,15,0,12,0,56,21,27,32,1,3,21,33,0,6,48,6,32,0,1,32,1,4,16,33,0,7,48,0,29,16,33,0,8,48,6,0,66,0,1,0,82,17,0,29,32,0,8,17,33,0,9,48,6,0,84,0,42,0,18,27,0,18,0,83,21,33,0,10,48,6,0,16,0,34,34,0,6,0,42,0,29,0,41,0,50,27,0,15,0,12,32,0,9,0,3,0,51,17,21,0,46,0,16,0,39,34,0,10,27,27,0,29,0,42,0,0,27,21,27,26,0,10,0,39,0,23,27,0,11,0,47,21,0,1,20,0,50,0,9,32,0,9,17,0,46,0,26,27,20,21,0,18,20,33,0,11,48,6,32,0,7,0,22,0,50,17,0,31,34,0,1,26,32,1,5,0,39,0,17,27,20,0,16,34,0,5,34,0,2,23,34,0,11,11,3,0,44,34,0,8,0,5,16,0,3,0,51,17,27,16,33,0,12,48,6,32,0,12,32,0,9,0,12,0,51,17,0,46,0,31,34,0,7,26,0,29,0,48,21,32,1,3,20,0,9,0,56,21,0,46,0,85,0,42,0,18,27,27,27,16,33,0,12,49,6,34,0,9,34,0,12,11,2,7,34,0,1,32,1,27,16,7,34,0,1,0,18,0,41,0,28,0,39,0,34,0,60,26,27,27,16,0,28,34,0,2,0,0,0,50,19,0,18,0,47,19,0,27,18,0,2,0,41,0,8,0,41,0,25,27,27,18,19,7,0,55,0,0,0,59,17,0,8,32,0,1,17,0,2,0,59,0,1,0,64,17,17,0,0,0,54,0,0,0,59,17,0,16,0,1,0,63,21,0,2,0,11,21,32,0,1,17,17,0,0,34,0,1,17,7] ,[runtime[0],runtime[1],runtime[2],runtime[6],runtime[7],runtime[8],runtime[9],runtime[11],runtime[12],runtime[13],runtime[14],runtime[15],runtime[16],runtime[18],runtime[19],runtime[20],runtime[21],runtime[22],runtime[23],runtime[24],runtime[25],runtime[26],runtime[27],runtime[28],runtime[29],runtime[30],runtime[31],runtime[33],runtime[36],runtime[37],runtime[43],runtime[44],runtime[45],runtime[46],runtime[47],runtime[48],runtime[50],runtime[51],runtime[52],runtime[53],runtime[54],runtime[55],runtime[56],runtime[57],runtime[59],runtime[60],runtime[62],0,-1,Infinity,1,2,5,4,127,32,3,7,10,'\0',' ','┐','↕','␡','␀','·','0','\"',str("@"),str("\'"),str("⟨⟩"),str("⟨"),str("⟩"),str("┌"),str("·─"),str("·╵╎┆┊"),str("┘"),str("┌┐"),str("└┘"),str("‿"),str(""),str("\'\""),str("00321111"),str("("),str(")"),str("{𝔽}"),str("*array*"),str(","),str("<"),str("⥊"),str("Can\'t represent block")] ,[[0,1,0],[0,0,1],[0,0,2],[0,0,3],[0,0,4],[0,0,[[],[5]]],[0,0,6],[0,0,[[],[7]]],[0,0,8],[0,0,9],[0,0,10],[0,0,11],[0,0,12],[0,0,13],[0,0,14],[0,0,15],[2,0,16],[0,0,17],[0,0,18],[0,0,19]] ,[[0,0],[3,28],[769,3],[835,6],[935,3],[986,4],[1025,3],[1055,4],[1178,3],[1216,3],[1255,3],[1308,7],[1538,3],[1571,8],[1813,3],[1842,3],[1852,13],[2147,3],[2155,3],[2207,3]] )(list([type, decompose, repop, fmtnum])); let fmt = x => unstr(fmt1(x)); let fmtErr = e => { let r=e.kind, w=e.message, loc=[]; while (w&&w.loc||(r!=='!'&&w.sh&&w.sh[0]===2)) { let s=w.src, is; [is,w]=w; let n=is.sh?is.sh[0]:0, i=n?is[0]:is; let pair=n&&is.sh.length>1; if (pair) n*=2; let to=i=>s.slice(0,i).join('').split('\n').map(l=>Array.from(l)); let ll=to(i), l=ll.length-1, j=ll[l].length, m=to()[l]; let k=1,o=i-j,cl=j; while (kt?'^':' ').join('')]; loc = add.concat(ol?['(and other lines)']:[], loc); } if (r==='!') w=w?fmt(w).replace(/^/gm,'! '):'! Error'; else w=w.sh?w.join(''):w; return [w].concat(loc).join('\n'); } let dynsys = f => { f.dynamic=1; return f; } let isstr = x => x.sh && x.sh.length==1 && x.every(c=>typeof c==="string"); let unixtime = (x,w) => Date.now()/1000; let req1str = (e,x,w) => { if (!isstr(x)) throw Error(e+": 𝕩 must be a string"); if (has(w)) throw Error(e+": 𝕨 not allowed"); return unstr(x); } let dojs = (x,w) => { let s = req1str("•JS",x,w); let r = Function("'use strict'; return ("+s+")")(); let toBQN = x => { if (isnum(x)) return x; if (typeof x==='string') { if (Array.from(x).length!==1) throw Error("•JS: JS strings are one character; use Array.from for BQN strings"); return x; } if (x instanceof Array) return arr(x.map(toBQN),x.sh||[x.length],toBQN(x.fill)); if (isfunc(x)) { let f=(a,b)=>toBQN(x(a,b)); f.m=x.m; return f; } throw Error("•JS: Unrecognized JS result"); } return toBQN(r); } let update_state = (st,w)=>w; // Modified by Node version to handle •state let push_state = st => st; let copy_state = st_old => { let st={...st_old}; st.addrt=[]; push_state(st); return st; } let makebqn = (proc,fn) => st => (x,w) => { let src = proc(x,w,update_state,st); return fn(st.comps(st)(src)); } let makebqnfn = (e,fn) => makebqn((x,w,u,s)=>req1str(e,x,u(s,w)), fn); let dynsys_copy = fn => dynsys(st => (x,w) => fn(copy_state(st))(x,w)); let rebqn = dynsys_copy(state => (x,w) => { let req = (r,s) => { if (!r) throw Error("•ReBQN: "+s) }; req(!has(w), "𝕨 not allowed"); req(x.ns, "𝕩 must be a namespace"); let [repl,primitives] = ["repl","primitives"].map(nsget(x)); if (has(primitives)) { addprimitives(state, primitives); } let cmp = makebqnfn("•ReBQN evaluation", r=>r)(state); repl = has(repl) ? ["none","loose","strict"].indexOf(unstr(repl)) : 0; req(repl>=0, "invalid value for 𝕩.repl"); return repl ? rerepl(repl,cmp,state) : ((x,w) => run(...cmp(x,w))); }); let addprimitives = (state, p) => { let req = (r,s) => { if (!r) throw Error("•ReBQN 𝕩.primitives: "+s) }; req(p.sh && p.sh.length===1, "Must be a list"); req(p.every(e=>e.sh&&e.sh.length===1&&e.sh[0]===2), "Must consist of glyph-primitive pairs"); let pr=glyphs.map(_=>[]), rt=pr.map(_=>[]); p.forEach(([gl,val])=>{ req(typeof gl==="string", "Glyphs must be characters"); req(isfunc(val), "Primitives must be operations"); let k=val.m||0; pr[k].push(gl); rt[k].push(val); }); state.glyphs = pr.map(str); state.runtime = list(rt.flat()); compgen(state); } let rerepl = (repl, cmp, state) => { let rd = repl>1 ? 0 : -1; let vars = [], names = [], redef = []; state.addrt = [names,redef]; return (x,w) => { names.sh=redef.sh=[names.length]; let c = cmp(x,w); let pnames = c[5][2][0]; let newv = c[3][0][2].slice(vars.length); names.push(...newv.map(i=>pnames[i])); redef.push(...newv.map(i=>rd)); vars .push(...newv.map(i=>null)); return run(...c, vars); } } let primitives = dynsys(state => { let gl=state.glyphs.flat(), rt=state.runtime; return list(gl.map((g,i) => list([g,rt[i]]))); }); let trig = "cos cosh sin sinh tan tanh".split(" "); let mathns = obj2ns(Math, trig.concat(trig.map(n=>"a"+n),"LN10 LN2 LOG10E LOG2E cbrt expm1 hypot log10 log1p log2 round trunc atan2".split(" ")), f=>typeof f==="function"?(f.prim=null,runtime[61](f,0)):f ); trig.map((_,i)=>{let f=mathns[i],g=mathns[i+trig.length]; f.inverse=g; g.inverse=f;}); let nsns = (() => { let keys = (x,w) => { if (has(w)||!x.ns) throw Error("•ns.Keys: Takes one namespace argument"); return list(listkeys(x).map(str)); } let req1name = (e,x,w) => req1str(e,x,w).replaceAll("_","").toLowerCase(); let getq = (e,x,w) => { if (!has(w)||!w.ns) throw Error(e+": 𝕨 must be a namespace"); return nsget(w)(req1name("•ns."+e,x)); } let hasq = (x,w) => +has(getq("Has",x,w)); let get = (x,w) => { let v = getq("Get",x,w); if (!has(v)) throw Error("•ns.Get: key not found"); return v; } let map = (x,w) => { if (has(w)||!x.ns) throw Error("•ns.Map: Takes one namespace argument"); let g=nsget(x), getq = (e,x,w)=>g(req1name("Namespace map."+e,x,w)); let hasq = (x,w) => +has(getq("Has",x,w)); let get = (x,w) => { let v = getq("Get",x); if (has(v)) return v; if (has(w)) return w; throw Error("Namespace map.Has: key not found"); } return makens(["has","get"], [hasq,get]); } return makens(["keys","has","get","map"], [keys,hasq,get,map]); })(); let rand = (() => { let reqnat = (e,x) => { if (!isnum(x) || x<0 || x!=Math.floor(x)) throw Error("•rand."+e+" must be a natural number"); }; let randnat = n => Math.floor(n*Math.random()); let range = (x,w) => { reqnat("Range: 𝕩", x); let r = x ? (()=>randnat(x)) : Math.random; if (!has(w)) return r(); let n = 1; if (!w.sh) reqnat("Range: 𝕨", n=w); else { if (w.sh.length>1) throw Error("Range: array 𝕨 must have rank at most 1"); w.map(m => {reqnat("Range: 𝕨 element", m); n*=m;}); } return arr(Array(n).fill().map(r), w.sh?w:[n], 0); }; let iota = x => Array(x).fill().map((_,i)=>i); let deal_err = e => (x,w) => { reqnat(e+": 𝕩", x); if (!has(w)) w=x; else { reqnat(e+": 𝕨", w); if (w>x) throw Error("•rand."+e+": 𝕨 must be less than or equal to 𝕩"); } let r = iota(x); for (let i=0; i { reqnat("Subset: 𝕩", x); if (!has(w)) return list(iota(x).filter(_=>Math.random()<0.5)); return deal_err("Subset")(x,w).sort(); }; return makens(["range", "deal", "subset"], [range, deal, subset]); })(); let sysvals = { bqn:dynsys_copy(makebqnfn("•BQN",r=>run(...r))), rebqn, primitives, type, glyph, decompose, fmt:fmt1, repr, unixtime, js:dojs, math:mathns, ns:nsns, rand, listsys: dynsys(_ => list(Object.keys(sysvals).sort().map(str))) }; let make_timed = tfn => { let timed = f => (x,w) => { let n=has(w)?w:1; if (!isnum(n) || n!==Math.floor(n) || n<1) throw Error("•_timed: 𝕨 must be an integer above 1"); return tfn(() => { for (let i=0;i t[0]+t[1]/1e9; sysvals.monotime = (x,w) => sec(process.hrtime()); sysvals.timed = make_timed(f => { let t0=process.hrtime(); f(); return sec(process.hrtime(t0)); }); } else if (typeof performance!=='undefined') { sysvals.monotime = (x,w) => performance.now()/1000; sysvals.timed = make_timed(f => { let t0=performance.now(); f(); return (performance.now()-t0)/1000; }); } if (typeof module!=='undefined') { // Node.js bqn.fmt=fmt; bqn.fmtErr=fmtErr; bqn.compile=compile; bqn.run=run; bqn.sysargs=sysargs; bqn.sysvals=sysvals; bqn.makebqn=fn=>makebqn(fn,r=>run(...r)); bqn.makerepl=(st,repl)=>rerepl(repl, makebqn(x=>x,r=>r)(st), st); bqn.util={has,list,str,unstr,dynsys,req1str,makens}; bqn.setexec = (u,p) => { update_state=u; push_state=p; } module.exports=bqn; }