aboutsummaryrefslogtreecommitdiff
path: root/docs/bqn.js
blob: e8edb2bd1816ac5df6d3a943d219aa9b1a154891 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
"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 findkey = (ns, names, i) => {
  let nn=ns.names, ni;
  if (nn===names) {
    return ns[i];
  } else {
    if (!has(nn.rev)) { let m=nn.rev={}; nn.forEach((s,i)=>m[s]=i); }
    return ns[nn.rev[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,w) => {
  let s=x.ns, k=Object.keys(s).filter(n=>!isNaN(n));
  return list(k.map(n=>s.names[+n]).sort().map(str));
}

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 (!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 3: case  4: { let n=num(); rD-= n;      r+=rP("llst(["+(new Array(n).fill().map((_,i)=>rV(rD+i)).join(","))+"])"); break; }
      case 5: case 16: { let        f=rG(),x=rG(); r+=rP("call("+f+","+x      +")");                                          break; }
      case 6: case 17: { let w=rG(),f=rG(),x=rG(); r+=rP("call("+f+","+x+","+w+")");                                          break; }
      case 7:          { let f=rG(),m=rG();        r+="chkM(1,"+m+");"+rP(m+"("+f      +")");                                 break; }
      case 8:          { let f=rG(),m=rG(),g=rG(); r+="chkM(2,"+m+");"+rP(m+"("+f+","+g+")");                                 break; }
      case 9:          { let        g=rG(),h=rG(); r+=rP("train2("      +g+","+h+")");                                        break; }
      case 10:case 19: { let f=rG(),g=rG(),h=rG(); r+=rP("train3("+f+","+g+","+h+")");                                        break; }
      case 11:         { let i=rG(),       v=rG(); r+=rP("set(1,"+i+","+v                       +")");                        break; }
      case 12:         { let i=rG(),       v=rG(); r+=rP("set(0,"+i+","+v                       +")");                        break; }
      case 13:         { let i=rG(),f=rG(),x=rG(); r+=rP("set(0,"+i+",call("+f+","+x+",get("+i+")))");                        break; }
      case 23:         { let m=rG(); r+=rP("{match:1,v:"+m+"}");                                                              break; }
      case 24:         { let i=rG(),       v=rG(); r+="try{set(1,"+i+","+v+");}catch(e){break;}";                             break; }
      case 14:         { rD--;                                                                                                break; }
      case 15:         { r+= rP("D["+num()+"](e)");                                                                           break; }
      case 18:         { r+= "if(undefined==="+rV(rD-1)+")throw Error('Left argument required');";                            break; }
      case 21:case 31: { r+= rP("getv("+ge(num())+","+num()+")");                                                             break; }
      case 22:         { r+= rP("{e:"+ge(num())+",p:"+num()+"}");                                                             break; }
      case 28:         { let m=rG(); r+=rP("{vid:e.vid,m:"+m+",a:"+num()+"}");                                                break; }
      case 26:         { let v=rG(); r+=rP("readns("+v+",e.vid,"+num()+")");                                                  break; }
      case 25:         { if(rD!==1) throw Error("Internal compiler error: Wrong stack size"); r+= "return v0;";               break loop; }
      case 29:         { r+= "e.ns=e.vid.ns;return e;";                                                                       break loop; }
    }
  }
  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);
      if (useenv)   c =          "const e=env;"+c;
      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;";
      c="do {"+c+"} while (0);\n";
      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
      let l=0;
      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"
      }
      let [mon,dy] = ind.map(js => {
        let e = js.length?"No matching case":"Left argument required";
        return js.map(g).concat(["throw Error('"+e+"');\n"]).join("");
      });
      def = "new Array("+sp+").fill(null)";
      c = "const fn=(x, w)=>{const e1=[...e2];e1[0]=fn;e1[1]=x;e1[2]=w;\n"
        + "if (w===undefined) {\n"+mon+"} else {\n"+dy+"}\n"
        + "};"+repdf[type]+"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:w}; 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;
  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,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 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([].concat.apply([],w.map(d=>x.map(e=>call(f,e,d)))),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<s.length;i++)c*=s[i];
    let i=0;
    if (!has(w)) { for(;i<c;i++) r[i]=x[i]; }
    else         { for(;i<c;i++) r[i]=call(f,x[i],w[i]); }
    for(;i<l;i++) r[i]=call(f,x[i],r[i-c]);
  }
  return arr(r,s,x.fill);
});
let cases = m2((f,g) => (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)) {
    try {
      let wf = !has(w) ? w
             : !w.sh ? a2fill(w)
             : has(w.fill) ? w.fill : runtime[42];
      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<k;i++)c*=s[i];t=t.concat(s.slice(1));}
  let r=Array(w.length*c);
  let j=0;
  w.forEach(i=>{for(let k=0;k<c;k++)r[j++]=x[i*c+k];});
  return arr(r,t,f);
}
let fold = f => (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)=>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] = run(
  [0,96,22,0,0,11,14,15,1,22,0,1,11,14,15,2,22,0,2,11,14,15,3,22,0,3,11,14,0,0,0,12,0,45,10,22,0,4,11,14,0,0,0,13,0,46,10,22,0,5,11,14,0,45,0,12,0,41,0,11,8,3,2,0,43,0,0,0,12,0,46,10,8,22,0,6,11,14,0,45,0,12,0,41,0,11,0,39,0,19,8,8,3,2,0,43,0,0,0,12,0,46,10,8,22,0,7,11,14,21,0,5,0,44,0,20,8,22,0,8,11,14,0,30,21,0,5,7,0,35,0,8,7,0,46,10,22,0,9,11,14,15,4,0,15,3,2,0,43,21,0,4,8,22,0,10,11,14,15,5,0,37,15,6,8,22,0,11,11,14,0,14,0,42,0,28,8,22,0,12,11,14,0,34,0,12,7,0,35,0,8,7,0,46,10,22,0,13,11,14,0,4,0,41,0,30,0,46,7,8,22,0,14,11,14,15,7,22,0,15,11,14,15,8,22,0,16,11,14,15,9,22,0,17,11,14,21,0,17,0,55,7,22,0,18,11,14,15,10,22,0,19,11,14,15,11,22,0,20,11,14,0,56,0,45,0,57,0,45,0,58,0,46,0,59,0,46,0,60,0,46,0,61,0,46,0,62,0,48,0,63,0,49,0,64,0,45,0,65,0,46,0,66,0,45,0,67,0,46,0,68,0,45,0,69,0,46,3,28,21,0,20,0,32,0,45,7,0,5,0,97,10,8,15,12,9,22,0,21,11,14,15,13,22,0,22,11,14,15,14,22,0,23,11,14,15,15,22,0,24,11,14,0,13,0,13,0,24,0,33,0,12,7,9,0,13,0,48,0,42,0,13,8,10,10,22,0,25,11,14,21,0,25,0,7,0,33,21,0,25,7,10,22,0,26,11,14,0,46,0,15,0,16,0,45,10,0,42,0,13,0,8,0,47,10,0,7,0,46,10,15,16,3,2,0,43,0,24,0,39,21,0,4,8,8,8,3,2,0,43,0,24,0,39,0,14,8,0,35,0,8,7,0,46,10,0,20,0,45,10,8,22,0,27,11,14,15,17,22,0,28,11,14,15,18,22,0,29,11,14,21,0,26,21,0,27,0,33,21,0,27,7,0,7,9,3,2,0,43,0,25,0,39,21,0,4,8,8,15,19,3,3,0,43,21,0,4,0,40,0,6,8,8,22,0,30,11,14,15,20,22,0,31,11,14,21,0,31,0,45,7,22,0,32,11,14,31,0,31,0,46,7,22,0,33,11,14,15,21,22,0,34,11,14,15,22,22,0,35,11,14,21,0,8,0,40,15,23,8,22,0,36,11,14,15,24,22,0,37,11,14,0,29,0,41,21,0,37,8,22,0,38,11,14,15,25,22,0,39,11,14,15,26,22,0,40,11,14,21,0,35,0,24,0,31,0,6,7,0,50,10,0,33,0,29,7,0,33,21,0,38,0,39,21,0,32,0,39,21,0,14,8,8,7,10,7,22,0,41,11,14,21,0,35,0,34,0,8,7,0,31,0,18,7,9,0,34,0,7,7,0,25,10,0,41,0,22,0,39,0,17,8,8,7,22,0,42,11,14,21,0,8,0,24,0,36,15,27,8,3,2,0,43,0,12,0,20,0,45,10,8,22,0,43,11,14,15,28,0,44,0,24,0,36,15,29,8,8,22,0,44,11,14,15,30,22,0,45,11,14,15,31,22,0,46,11,14,21,0,6,0,5,0,113,10,0,114,3,2,0,12,0,41,0,11,8,0,5,0,115,10,0,116,3,2,3,2,0,30,15,32,7,5,22,0,47,22,0,48,4,2,11,14,15,33,22,0,49,11,14,21,0,8,0,42,15,34,8,22,0,50,11,14,15,35,31,0,50,3,2,0,43,0,25,0,39,0,15,8,21,0,9,9,8,22,0,51,11,14,31,0,49,21,0,51,3,2,0,43,0,25,0,39,21,0,4,8,8,22,0,52,11,14,15,36,22,0,53,11,14,15,37,22,0,54,11,14,21,0,8,0,40,21,0,53,0,128,0,15,0,30,0,0,0,12,0,46,10,7,9,0,35,0,8,7,0,46,10,0,46,0,45,0,24,0,29,15,38,10,15,39,3,6,7,8,22,0,55,11,14,0,24,0,15,0,32,0,45,7,0,5,0,129,10,0,16,0,41,0,45,8,3,2,0,43,0,22,0,20,0,45,10,8,9,3,2,0,43,21,0,4,8,22,0,56,11,14,15,40,22,0,57,11,14,15,41,22,0,58,11,14,0,27,0,26,0,28,10,22,0,59,11,14,0,24,0,29,0,22,0,17,9,0,42,21,0,59,8,10,21,0,59,3,2,0,43,0,24,0,39,0,12,8,0,12,0,46,10,8,22,0,60,11,14,0,24,0,36,21,0,8,0,42,21,0,53,0,133,31,0,5,0,45,0,45,0,24,0,39,0,22,8,0,20,0,45,10,0,44,0,24,31,0,60,0,22,0,42,21,0,58,8,10,8,0,24,0,17,9,31,0,59,31,0,58,10,3,6,7,8,8,22,0,61,11,14,15,42,15,43,15,44,3,3,0,43,0,25,0,39,0,12,8,0,11,0,47,10,8,22,0,62,11,14,0,24,0,36,21,0,8,0,40,31,0,53,0,137,0,15,0,39,0,30,0,0,0,12,0,46,10,7,0,35,0,8,7,0,22,0,20,0,45,10,10,8,0,46,0,46,0,24,0,29,0,22,0,42,21,0,62,8,10,31,0,62,3,6,7,8,8,22,0,63,11,14,15,45,22,0,64,11,14,0,24,15,46,3,2,0,30,15,47,7,0,26,0,24,10,5,0,30,15,48,7,5,22,0,65,11,14,15,49,0,41,31,0,65,0,29,0,46,0,46,0,47,0,51,0,45,3,5,6,21,0,16,0,138,8,8,22,0,66,11,14,15,50,22,0,67,11,14,15,51,22,0,68,11,14,15,52,22,0,69,11,14,15,53,22,0,70,11,14,0,45,0,12,0,41,0,32,21,0,70,7,8,3,2,0,43,0,0,0,12,0,51,10,8,22,0,71,11,14,0,24,21,0,4,9,0,12,0,40,0,12,8,0,14,0,40,21,0,13,8,3,3,0,35,15,54,7,5,22,0,72,11,14,15,55,22,0,73,11,14,21,0,4,0,40,0,12,8,0,45,3,2,0,24,0,39,21,0,4,8,0,12,3,2,0,12,0,40,0,12,8,0,45,3,2,0,14,0,40,21,0,13,8,0,45,3,2,15,56,3,5,0,35,15,57,7,5,22,0,74,11,14,0,45,15,58,3,2,0,43,21,0,4,8,22,0,75,11,14,21,0,74,0,37,21,0,75,8,22,0,76,11,14,21,0,74,0,7,0,46,10,0,37,0,45,0,17,5,0,14,3,2,0,43,21,0,4,8,8,22,0,77,11,14,21,0,76,0,39,0,5,8,0,25,0,24,10,22,0,78,11,14,0,15,0,39,0,1,0,36,0,24,8,0,35,21,0,78,0,36,0,24,8,7,3,2,0,43,0,22,0,20,0,45,10,8,8,22,0,79,11,14,15,59,22,0,80,11,14,21,0,4,0,44,0,26,21,0,80,15,60,8,8,22,0,81,11,14,21,0,78,0,36,21,0,8,0,40,0,15,0,40,0,26,8,15,61,3,2,0,43,0,12,0,40,0,18,8,0,20,0,46,10,8,8,8,22,0,82,11,14,15,62,22,0,83,11,14,15,63,22,0,84,11,14,21,0,4,0,5,0,149,10,0,25,15,64,31,0,80,21,0,81,21,0,84,21,0,83,3,2,0,43,0,30,0,12,0,12,0,46,10,7,0,35,0,8,7,0,46,10,8,31,0,84,3,3,0,43,0,12,0,11,0,47,10,8,8,10,22,0,85,11,14,0,24,0,24,0,24,0,35,15,65,7,9,15,66,15,67,15,68,3,6,0,43,0,25,8,22,0,86,11,14,15,69,22,0,87,11,14,15,70,22,0,88,11,14,21,0,88,0,45,7,22,0,89,11,14,31,0,88,0,46,7,22,0,90,11,14,15,71,22,0,91,11,14,21,0,78,0,37,0,24,8,0,36,15,72,8,22,0,92,11,14,21,0,78,0,37,0,24,8,0,36,15,73,8,22,0,93,11,14,21,0,7,0,5,0,165,10,22,0,94,11,14,21,0,94,0,25,0,17,10,15,74,3,2,0,43,21,0,4,8,22,0,95,11,14,15,75,22,0,96,11,14,15,76,22,0,97,11,14,15,77,22,0,98,11,14,15,78,22,0,99,11,14,0,53,0,17,5,21,0,16,0,174,8,22,0,100,11,14,15,79,22,0,101,11,14,15,80,22,0,102,11,14,15,81,22,0,103,11,14,21,0,8,0,40,15,82,8,22,0,104,11,14,15,83,22,0,105,11,14,15,84,22,0,106,11,14,15,85,22,0,107,11,14,15,86,22,0,108,11,14,15,87,22,0,109,11,14,15,88,22,0,110,11,14,21,0,24,0,9,7,22,0,111,11,14,21,0,24,0,10,7,22,0,112,11,14,0,33,21,0,111,0,42,21,0,112,8,7,0,37,0,47,21,0,111,5,0,42,21,0,112,8,8,22,0,113,11,14,21,0,24,15,89,0,21,0,41,0,45,8,0,20,0,41,0,45,8,3,2,0,43,0,45,0,42,0,20,8,8,0,44,0,6,8,3,2,0,43,0,19,0,40,0,21,8,8,0,37,0,19,8,7,22,0,114,11,14,21,0,24,0,20,0,44,0,25,8,0,37,0,11,8,7,22,0,115,11,14,21,0,24,0,21,0,44,0,25,8,0,37,0,7,0,39,21,0,115,0,39,0,7,8,8,8,7,22,0,116,11,14,21,0,24,0,8,7,0,37,0,29,0,41,21,0,32,8,8,22,0,117,11,14,21,0,24,0,8,0,7,0,6,10,7,0,37,0,29,0,41,21,0,33,8,8,22,0,118,11,14,21,0,24,0,8,0,37,0,21,0,7,0,20,10,0,41,0,45,8,8,7,22,0,119,11,14,21,0,24,0,23,0,7,0,46,10,7,0,37,0,20,8,22,0,120,11,14,21,0,24,0,13,0,7,0,46,10,7,0,37,21,0,81,8,22,0,121,11,14,21,0,24,0,12,0,7,0,46,10,7,0,37,0,22,8,22,0,122,11,14,21,0,24,0,12,7,0,37,0,12,8,22,0,123,11,14,21,0,24,0,23,7,0,37,0,32,0,45,7,0,5,0,191,10,8,22,0,124,11,14,21,0,24,0,13,7,0,37,0,32,0,45,7,0,5,0,192,10,8,22,0,125,11,14,21,0,24,0,6,7,22,0,126,11,14,21,0,24,0,7,7,22,0,127,11,14,21,0,127,21,0,126,0,46,10,22,0,128,11,14,0,15,0,37,21,0,10,8,22,0,129,11,14,31,0,96,0,37,21,0,95,8,22,0,130,11,14,31,0,61,0,37,21,0,57,8,22,0,131,11,14,31,0,63,0,37,31,0,39,8,22,0,132,11,14,31,0,92,22,0,133,11,14,31,0,93,22,0,134,11,14,15,90,22,0,135,11,14,31,0,89,0,37,31,0,45,8,22,0,136,11,14,31,0,90,0,37,31,0,46,8,22,0,137,11,14,31,0,105,0,37,31,0,103,8,22,0,138,11,14,21,0,34,0,46,7,0,37,31,0,41,8,22,0,139,11,14,0,33,31,0,34,0,45,7,7,0,37,31,0,35,0,24,7,8,22,0,140,11,14,15,91,0,1,0,45,10,22,0,141,11,14,15,92,22,0,142,11,14,0,24,0,36,15,93,8,22,0,143,11,14,15,94,22,0,144,11,14,15,95,22,0,145,11,14,15,96,22,0,146,11,14,15,97,22,0,147,11,14,0,46,0,16,0,41,0,32,0,47,7,21,0,127,21,0,122,10,8,21,0,77,0,32,21,0,147,7,10,3,2,0,43,0,16,0,41,0,45,8,21,0,123,0,53,10,8,22,0,148,11,14,15,98,22,0,149,11,14,0,46,0,24,15,99,0,39,0,45,0,16,0,41,0,32,0,46,7,21,0,127,21,0,122,10,8,31,0,17,0,71,7,9,3,2,0,43,0,16,0,41,0,45,8,21,0,123,0,54,10,8,8,9,3,2,0,43,0,0,21,0,125,0,51,10,8,22,0,150,11,14,15,100,0,40,15,101,8,22,0,151,11,14,15,102,22,0,152,11,14,15,103,0,24,0,16,0,41,0,46,8,15,104,9,0,32,0,32,0,45,7,0,5,0,201,10,7,0,16,0,41,0,47,8,21,0,151,0,16,0,41,0,46,8,10,31,0,152,0,16,0,41,0,47,8,15,105,0,42,15,106,8,0,16,0,41,0,46,8,10,0,16,0,41,0,47,8,15,107,0,42,15,108,8,0,29,0,41,0,46,0,51,3,2,8,10,3,6,0,43,0,25,8,0,16,0,41,0,45,8,10,9,22,0,153,11,14,15,109,31,0,153,0,32,0,45,7,0,5,0,202,10,3,3,21,0,132,0,51,0,46,0,47,3,3,6,0,43,0,0,8,22,0,154,11,14,31,0,82,0,37,21,0,85,8,22,0,155,11,14,0,5,0,41,0,203,8,22,0,156,11,14,0,5,0,41,0,204,8,22,0,157,11,14,0,32,0,45,7,0,5,0,205,10,22,0,158,11,14,15,110,22,0,159,11,14,15,111,22,0,160,11,14,15,112,22,0,161,11,14,0,24,0,36,31,0,55,0,37,31,0,54,8,8,22,0,162,11,14,0,56,0,33,21,0,127,7,0,37,21,0,126,8,0,57,21,0,127,0,58,0,33,21,0,111,7,0,37,21,0,119,21,0,159,0,24,8,8,0,59,21,0,111,0,60,21,0,24,0,2,7,0,72,0,33,21,0,112,7,0,37,0,33,21,0,119,7,8,0,65,0,33,21,0,111,7,0,37,21,0,117,21,0,159,0,24,8,8,0,64,0,25,21,0,127,0,46,10,21,0,111,0,33,21,0,127,7,10,0,37,21,0,118,21,0,159,0,24,8,8,0,61,21,0,128,0,73,0,45,0,39,21,0,156,8,0,37,15,113,8,0,74,0,24,0,75,21,0,76,0,39,21,0,157,8,0,25,0,24,10,0,37,0,24,8,0,55,15,114,0,37,0,45,0,39,21,0,156,8,8,0,76,15,115,0,37,15,116,8,0,77,0,45,0,39,21,0,156,8,0,37,21,0,136,21,0,159,0,16,0,41,0,50,8,8,8,0,78,0,45,0,39,21,0,156,8,0,37,21,0,137,21,0,159,0,16,0,41,0,45,8,8,8,0,79,0,45,0,39,21,0,156,8,0,37,21,0,130,21,0,159,21,0,77,8,8,0,80,21,0,131,0,41,21,0,127,8,0,37,21,0,131,8,0,81,31,0,145,0,37,31,0,44,8,0,82,0,45,0,39,21,0,156,8,0,37,31,0,40,8,0,83,31,0,161,0,37,31,0,160,8,3,42,21,0,20,21,0,158,8,22,0,163,11,14,0,56,0,33,21,0,127,7,0,37,0,47,0,42,21,0,111,8,8,0,57,21,0,126,0,37,0,45,0,39,21,0,156,8,8,0,58,0,33,21,0,111,7,0,37,21,0,113,8,0,59,21,0,119,0,37,0,45,0,39,21,0,156,8,8,0,60,21,0,113,0,37,0,45,0,39,21,0,156,8,8,0,72,0,2,21,0,111,9,0,37,0,45,0,39,21,0,156,8,8,0,65,0,33,21,0,111,7,0,37,21,0,113,8,0,64,0,25,21,0,127,0,46,10,21,0,111,0,33,21,0,127,7,10,0,37,21,0,128,0,39,21,0,113,8,21,0,128,9,8,0,61,0,32,0,46,7,21,0,127,21,0,126,10,0,37,0,45,0,39,21,0,156,8,8,3,18,21,0,20,21,0,158,8,22,0,164,11,14,31,0,69,22,0,165,11,14,21,0,68,22,0,166,11,14,0,84,21,0,164,0,85,15,117,0,86,15,118,0,87,15,119,0,88,15,120,0,39,15,121,8,3,10,21,0,20,0,32,21,0,158,7,8,22,0,167,11,14,31,0,110,22,0,168,11,14,31,0,73,22,0,169,11,14,15,122,0,89,31,0,151,0,90,15,123,0,91,15,124,0,92,0,32,0,45,0,39,21,0,156,8,7,15,125,15,126,3,2,0,43,21,0,125,0,41,0,45,8,8,3,2,0,43,0,24,0,39,21,0,6,8,8,0,93,15,127,0,94,15,128,15,129,0,24,3,2,0,43,0,25,8,0,25,0,39,21,0,150,8,10,0,95,15,130,3,14,31,0,20,0,32,21,0,158,7,8,7,22,0,170,11,14,31,0,22,22,0,171,11,14,31,0,99,22,0,172,11,14,31,0,149,22,0,173,11,14,31,0,98,22,0,174,11,14,21,0,52,0,37,31,0,56,8,22,0,175,11,14,15,131,22,0,176,11,14,31,0,108,22,0,177,11,14,31,0,109,22,0,178,11,14,21,0,101,0,37,21,0,10,8,22,0,179,11,14,31,0,78,0,37,0,24,8,0,36,21,0,11,0,39,21,0,121,8,8,22,0,180,11,14,31,0,144,0,37,31,0,43,8,22,0,181,11,14,31,0,141,0,37,21,0,42,8,22,0,182,11,14,31,0,36,0,37,21,0,132,0,41,21,0,140,8,8,22,0,183,11,14,21,0,126,21,0,127,21,0,119,21,0,111,31,0,112,31,0,113,21,0,115,31,0,116,31,0,114,21,0,128,21,0,117,31,0,118,21,0,120,21,0,121,21,0,122,21,0,123,21,0,125,21,0,124,21,0,76,21,0,77,0,25,0,24,31,0,179,21,0,155,31,0,180,21,0,136,21,0,137,21,0,130,31,0,134,21,0,133,21,0,131,31,0,181,21,0,132,21,0,32,21,0,33,21,0,162,21,0,175,21,0,139,31,0,182,21,0,140,31,0,183,21,0,138,0,5,0,32,0,33,21,0,174,21,0,166,21,0,165,31,0,173,31,0,171,31,0,172,0,31,0,39,0,40,0,41,0,42,21,0,169,0,37,31,0,176,31,0,178,31,0,177,21,0,168,0,38,3,63,15,132,5,25,0,45,31,0,1,3,2,25,31,0,1,25,31,0,1,22,1,1,22,1,2,4,2,12,25,21,0,1,3,1,0,1,31,0,1,6,25,31,0,2,31,0,1,3,2,25,31,0,1,3,1,25,0,20,0,30,0,12,0,7,0,46,10,7,31,0,1,10,0,31,0,8,7,9,0,35,0,6,7,9,25,0,32,21,1,0,0,30,21,1,15,31,0,1,7,0,33,0,16,7,31,0,2,10,7,5,7,0,16,15,133,10,25,15,134,0,12,31,0,1,21,1,15,21,1,0,7,5,10,25,0,47,0,9,21,0,1,0,22,5,6,0,17,5,0,30,0,8,0,41,0,47,8,7,5,22,0,3,11,14,21,0,1,0,29,21,0,3,6,31,0,1,0,29,31,0,3,0,30,0,6,0,41,0,46,8,7,5,6,3,2,25,31,0,2,21,1,19,5,22,0,3,22,0,4,4,2,11,14,31,0,1,3,1,0,26,31,0,4,6,21,1,16,31,0,3,8,25,0,45,31,0,1,5,25,21,0,1,0,12,5,0,12,0,46,6,0,5,0,98,6,14,31,0,1,0,32,21,0,4,7,21,1,21,9,0,35,31,0,4,7,3,2,0,43,0,46,0,37,0,22,0,20,0,45,10,8,8,31,0,2,17,25,15,135,22,0,2,11,14,15,136,22,0,3,11,14,21,0,3,21,0,1,7,0,33,31,0,3,0,33,21,0,1,7,7,7,3,2,0,43,0,12,0,40,0,21,8,8,31,0,2,31,0,1,7,3,2,0,43,0,12,0,40,0,12,8,8,25,31,0,1,15,137,0,36,15,138,15,139,3,2,0,43,21,1,4,0,40,0,21,8,8,0,37,15,140,8,8,15,141,0,36,15,142,8,3,3,0,43,21,1,4,0,40,0,6,8,8,22,0,2,11,25,31,0,1,21,1,27,31,0,2,17,25,21,0,1,0,30,0,20,0,41,0,45,8,7,0,35,0,8,7,0,46,10,0,40,0,7,8,21,0,2,17,22,0,3,11,14,31,0,1,21,0,3,0,45,3,2,15,143,3,2,0,43,0,45,0,12,31,0,3,6,8,31,0,2,17,25,31,0,4,22,0,5,11,14,0,45,0,25,21,0,2,17,22,0,6,11,14,31,0,1,22,0,7,11,14,15,144,22,0,8,11,14,31,0,8,21,0,7,0,12,0,46,6,0,44,0,32,21,0,5,7,15,145,0,37,0,24,8,31,0,2,19,8,5,25,21,0,1,0,14,0,40,21,1,28,8,21,0,2,6,22,0,3,11,14,31,0,3,0,35,21,1,29,31,0,1,0,15,5,0,42,0,16,8,0,42,21,1,30,0,41,31,0,2,0,15,16,0,42,0,16,8,8,8,7,7,5,22,0,4,11,14,0,45,0,33,31,0,4,7,5,25,21,0,1,22,0,2,11,14,21,1,30,21,1,26,0,32,0,45,7,0,13,21,1,30,10,21,1,25,3,4,31,0,1,0,44,0,30,15,146,7,8,5,22,0,3,11,14,15,147,22,0,4,11,14,15,148,0,37,15,149,8,0,1,0,45,10,25,21,0,1,22,0,2,11,14,0,35,0,8,7,0,7,0,46,10,0,31,0,8,7,0,35,0,6,7,9,3,2,0,16,31,0,1,6,22,0,3,11,14,21,1,8,0,42,15,150,8,0,1,0,45,10,25,21,0,1,0,12,5,0,13,0,46,6,0,5,0,107,6,14,21,0,1,21,1,32,5,22,0,5,11,14,21,0,1,21,1,12,0,46,6,0,35,0,8,7,0,46,6,22,0,6,11,14,21,0,6,21,1,29,21,0,1,0,15,5,0,42,0,16,8,0,40,21,1,74,0,7,0,46,10,8,7,5,22,0,7,11,14,31,0,1,0,22,5,0,17,5,0,30,0,46,0,24,21,0,5,0,30,0,8,0,41,31,0,6,8,7,5,0,42,0,16,8,0,40,31,0,7,8,0,46,0,42,0,7,8,10,3,2,0,43,0,20,0,41,0,45,8,8,7,5,31,0,4,21,0,5,6,0,29,31,0,5,21,1,14,5,6,0,1,0,45,6,25,21,0,2,0,12,5,22,0,3,11,14,31,0,3,0,7,21,0,1,0,12,5,6,22,0,4,11,14,21,0,4,0,13,0,45,6,0,5,0,108,6,14,0,45,0,20,5,22,0,5,11,14,21,0,1,0,14,5,22,0,6,11,0,27,21,0,4,6,0,24,0,35,0,8,7,0,46,10,0,17,9,0,42,0,15,8,5,22,0,7,11,14,31,0,6,0,28,31,0,4,6,0,34,15,151,7,21,0,2,0,14,16,6,14,21,0,7,0,30,0,20,0,30,0,6,7,21,0,5,10,0,33,0,29,7,31,0,1,0,15,5,10,21,1,74,31,0,2,19,7,5,0,1,0,45,6,25,31,0,1,0,31,0,6,7,5,0,3,5,0,27,0,41,0,32,0,46,7,0,7,0,22,10,0,18,0,45,10,8,5,0,31,0,6,7,5,0,1,0,45,6,25,21,0,1,0,12,5,0,12,0,46,6,0,5,0,109,6,14,21,0,1,0,30,21,1,7,7,5,0,35,0,8,7,0,46,6,0,5,0,110,6,14,31,0,1,21,1,37,5,25,21,0,1,0,12,5,0,12,0,46,6,21,1,156,5,14,21,0,1,0,30,21,1,7,7,5,0,35,0,8,7,0,46,6,21,1,156,5,14,21,0,1,0,22,5,0,33,0,7,7,5,0,46,0,17,0,39,0,30,0,6,0,41,0,46,8,21,0,1,0,42,0,16,8,0,40,0,13,8,0,24,10,7,8,0,35,0,8,7,0,46,10,3,2,0,43,0,13,0,41,0,45,8,8,5,21,1,157,5,14,31,0,1,0,3,5,25,21,0,1,0,22,5,22,0,3,11,14,21,0,1,21,1,12,0,46,6,22,0,4,11,0,35,0,8,7,0,46,6,22,0,5,11,14,31,0,3,0,17,5,0,30,0,8,0,41,21,0,5,8,0,42,0,6,8,7,31,0,5,0,17,5,0,15,31,0,4,6,6,0,33,0,29,7,31,0,1,0,15,5,6,25,21,0,1,21,1,4,5,21,1,157,5,14,31,0,1,0,12,5,0,20,0,45,6,25,21,0,1,0,12,5,0,33,0,7,7,0,46,6,22,0,3,11,14,21,0,1,0,14,5,22,0,4,11,14,21,0,4,0,16,21,0,3,6,22,0,5,11,14,31,0,4,0,27,31,0,3,6,22,0,6,11,14,21,0,6,0,35,0,8,7,0,46,6,0,17,5,0,15,31,0,6,6,0,30,0,8,0,41,21,0,5,8,0,42,0,6,8,7,31,0,5,0,17,5,6,0,33,0,29,7,31,0,1,0,15,5,6,25,21,0,1,0,12,5,0,13,0,46,6,0,5,0,111,6,14,21,0,1,0,22,5,0,6,0,46,6,0,17,5,0,30,31,0,1,0,42,0,29,0,41,0,17,8,8,7,5,0,1,0,41,0,16,0,41,0,45,8,8,5,25,21,0,1,0,12,5,0,13,0,46,6,0,5,0,112,6,14,21,0,1,0,22,5,22,0,3,11,14,21,0,3,0,6,0,46,6,0,17,5,0,30,31,0,1,0,42,0,29,0,41,15,152,8,8,7,5,0,1,0,41,0,16,0,41,21,0,3,8,8,5,25,31,0,1,22,0,3,22,0,4,4,2,11,14,15,153,22,0,5,11,14,0,24,0,39,31,0,3,8,0,25,0,6,21,0,5,0,13,0,41,0,45,8,7,9,31,0,5,0,21,7,3,2,0,43,0,13,0,41,0,45,8,8,10,25,21,0,1,0,12,5,0,12,0,46,6,0,5,0,117,6,14,31,0,2,21,1,47,21,0,1,0,22,5,6,0,33,0,16,7,31,0,1,6,25,21,0,2,0,12,16,0,12,0,46,17,0,5,0,118,17,14,21,0,1,0,14,5,22,0,3,11,0,22,0,40,0,12,8,21,0,2,17,0,5,0,119,6,14,0,45,22,0,4,11,14,31,0,3,0,34,15,154,7,31,0,2,17,14,31,0,1,0,15,5,0,16,21,0,4,6,25,31,0,2,0,30,31,0,1,0,42,21,1,51,8,7,5,25,31,0,1,22,0,2,22,0,3,22,0,4,22,0,5,22,0,6,22,0,7,4,6,11,14,0,121,0,26,31,0,2,6,0,26,0,120,6,22,0,8,11,14,0,122,0,26,21,0,8,6,22,0,9,11,14,0,123,0,26,21,0,8,6,22,0,10,11,14,0,124,0,26,21,0,8,6,22,0,11,11,14,0,125,0,26,31,0,8,6,22,0,12,11,14,0,24,0,30,31,0,5,0,30,0,0,0,12,0,46,10,7,0,15,9,0,35,0,8,7,0,46,10,3,2,0,43,21,1,4,8,7,0,15,9,0,35,0,8,7,0,46,10,0,5,31,0,12,10,3,2,0,16,31,0,4,6,22,0,13,11,14,15,155,15,156,3,2,0,43,0,25,0,39,31,0,3,8,8,25,21,0,1,0,12,5,0,13,0,46,6,0,5,0,126,6,14,21,0,1,0,22,5,0,20,0,45,6,0,5,0,127,6,14,31,0,1,0,29,0,45,0,20,5,6,25,31,0,2,0,30,21,1,48,0,41,31,0,1,0,22,5,8,7,5,25,31,0,2,0,30,21,1,48,0,41,31,0,1,8,7,5,25,21,0,1,0,12,5,0,13,0,46,6,0,5,0,130,6,14,21,0,1,0,22,5,22,0,3,11,14,31,0,1,0,29,21,0,3,0,17,5,0,30,0,7,0,41,0,46,0,7,31,0,3,6,8,7,5,6,25,21,0,2,21,1,6,16,0,5,0,131,17,14,21,0,1,0,12,0,45,6,0,6,22,0,1,13,14,21,0,1,0,9,21,0,2,17,0,11,5,0,8,21,0,1,6,0,7,31,0,2,17,22,0,3,11,14,31,0,1,0,20,21,0,3,6,0,5,0,132,6,14,31,0,3,25,21,0,2,21,1,4,0,44,0,15,0,16,0,45,10,8,5,22,0,2,12,14,21,0,2,21,1,7,5,0,5,0,134,6,14,31,0,2,22,0,3,11,22,0,4,11,14,31,0,1,0,8,21,0,3,6,0,17,5,0,31,0,33,15,157,0,44,15,158,8,7,7,5,25,21,0,2,0,22,5,0,12,31,0,1,6,0,5,0,135,6,14,21,0,2,0,30,0,12,0,41,0,11,0,39,0,19,8,8,7,5,0,35,0,8,7,0,46,6,0,5,0,134,6,14,31,0,2,21,1,37,5,25,0,32,0,45,7,0,5,0,136,10,25,31,0,1,21,1,1,5,22,0,3,11,14,21,0,3,0,16,0,45,6,0,45,0,42,0,13,8,0,32,31,0,3,7,0,46,0,24,0,28,0,46,10,0,30,31,0,0,7,9,0,35,0,8,7,0,46,10,3,2,0,43,21,1,148,8,9,3,2,0,43,0,13,0,41,0,47,8,8,5,25,31,0,1,15,159,31,0,2,10,25,0,33,31,0,1,7,25,15,160,0,24,3,2,0,35,31,0,1,7,5,25,31,0,1,31,0,2,5,25,31,0,1,15,161,0,25,21,1,64,9,0,44,15,162,8,3,2,0,43,0,25,0,39,0,0,8,0,13,0,51,10,8,31,0,2,6,25,31,0,1,21,1,8,0,40,21,0,4,21,1,67,21,1,23,21,0,4,7,0,37,0,30,31,0,4,7,8,8,8,31,0,2,17,25,31,0,1,21,1,8,0,40,21,0,4,21,1,67,0,30,31,0,4,7,8,8,31,0,2,17,25,31,0,1,25,0,45,31,0,1,3,2,0,43,31,0,2,8,25,21,0,1,21,0,5,0,40,31,0,4,8,31,0,2,17,22,0,6,11,14,21,1,57,0,35,0,24,21,1,4,9,0,44,0,15,0,42,0,16,8,8,7,21,0,1,10,0,45,0,14,0,39,0,24,0,35,0,8,7,0,46,10,0,17,9,0,42,0,15,8,8,0,1,0,70,10,3,2,0,43,21,1,4,8,9,22,0,7,11,14,15,163,22,0,8,11,14,21,1,1,0,45,0,16,0,41,0,47,8,0,12,0,32,21,0,8,7,10,3,2,0,43,0,16,0,41,0,45,8,0,12,0,53,10,8,9,22,0,9,11,14,21,0,5,21,1,87,21,0,9,6,22,0,10,11,14,0,45,21,0,8,0,50,8,22,0,11,11,14,31,0,11,31,0,10,5,0,45,21,1,70,3,2,21,1,1,0,29,0,46,0,51,3,2,10,3,2,0,43,31,0,9,8,5,22,0,12,22,0,13,4,2,11,14,0,24,0,39,21,1,71,8,0,7,0,46,10,0,44,15,164,8,22,0,14,11,14,0,24,0,36,15,165,8,22,0,15,11,14,31,0,13,31,0,14,21,0,6,6,0,32,31,0,1,7,0,42,31,0,15,8,0,32,31,0,5,7,21,1,154,9,15,166,9,3,2,0,43,21,1,71,8,5,25,31,0,1,0,34,21,1,74,7,31,0,2,17,0,15,5,0,35,0,8,7,0,46,6,25,21,0,2,0,16,0,46,17,31,0,1,3,2,0,43,31,0,2,0,16,0,45,17,8,25,31,0,1,0,15,5,0,30,21,1,75,7,5,0,35,0,18,7,0,45,6,0,6,0,46,6,25,0,1,0,42,0,24,0,36,0,32,3,0,7,0,15,21,1,77,0,40,31,0,2,8,10,8,8,21,1,79,0,24,0,36,0,25,8,31,0,1,10,3,2,0,43,0,15,0,39,0,22,8,0,20,0,45,10,8,25,21,0,1,0,15,5,0,16,0,45,6,21,1,77,5,22,0,3,11,14,21,0,1,0,15,5,0,30,21,1,77,0,45,21,1,13,3,2,0,43,0,22,0,40,0,12,8,8,21,0,3,10,0,5,0,141,10,7,5,14,21,0,3,0,35,0,8,7,0,46,6,0,17,5,0,15,31,0,3,6,0,30,0,33,0,16,7,7,31,0,1,0,30,21,1,10,7,5,6,25,21,0,1,0,12,0,40,0,18,8,21,0,2,17,0,33,0,7,7,0,46,6,22,0,3,11,14,21,0,1,21,1,77,0,40,21,1,11,8,21,0,2,17,22,0,4,11,14,21,0,4,0,30,0,22,0,13,21,0,3,10,7,5,0,35,0,8,7,0,46,6,0,5,0,142,6,14,21,0,4,0,30,0,28,0,41,0,32,21,0,3,7,0,7,0,22,10,8,7,5,22,0,5,11,14,21,0,5,0,35,21,1,13,7,5,0,5,0,143,6,14,31,0,4,0,30,0,46,0,24,0,16,0,45,10,3,2,0,43,0,22,0,20,31,0,3,10,8,7,5,0,35,0,6,7,0,45,6,22,0,6,11,14,31,0,1,0,15,0,40,0,26,8,31,0,2,17,0,15,31,0,5,0,16,0,45,6,0,26,31,0,6,3,1,6,6,25,0,50,22,0,3,11,22,0,4,11,14,3,0,22,0,5,11,14,21,0,1,22,0,6,11,14,31,0,1,0,30,0,22,7,5,21,1,37,5,0,30,15,167,7,5,25,21,0,1,0,15,5,22,0,3,11,0,22,5,22,0,4,11,14,21,0,3,0,30,21,1,77,7,5,22,0,5,11,14,21,0,5,0,16,0,45,6,0,22,5,22,0,6,11,14,21,0,1,0,12,5,22,0,7,11,14,21,0,5,0,30,0,22,0,12,21,0,6,10,7,5,0,35,0,8,7,0,46,6,0,5,0,144,6,14,21,0,7,0,23,21,0,6,6,0,5,0,145,6,14,15,168,22,0,8,11,14,31,0,1,21,1,77,5,22,0,9,11,14,0,46,22,0,10,11,14,0,45,0,20,5,22,0,11,11,22,0,12,11,14,21,0,7,0,17,5,0,34,15,169,7,21,0,9,21,1,57,5,21,0,8,0,8,7,0,46,6,21,1,57,5,6,14,0,34,15,170,31,0,3,0,30,0,15,7,5,7,7,22,0,13,11,14,21,0,11,21,0,13,15,171,3,2,0,43,31,0,6,0,20,21,0,7,6,8,21,0,12,6,25,21,0,2,0,22,5,22,0,3,11,14,21,0,1,0,22,5,22,0,4,11,14,21,0,3,0,23,21,0,4,6,0,5,0,148,6,14,31,0,1,0,34,0,8,0,41,31,0,2,0,42,0,16,8,8,0,24,3,2,0,43,0,25,0,13,31,0,3,10,8,7,31,0,4,0,17,5,6,25,31,0,1,31,0,2,9,25,31,0,1,22,0,3,22,0,4,22,0,5,4,3,11,14,31,0,5,31,0,4,31,0,3,10,25,31,0,1,22,0,3,22,0,4,4,2,11,14,31,0,4,31,0,3,7,25,31,0,1,22,0,3,22,0,4,22,0,5,4,3,11,14,31,0,5,31,0,4,31,0,3,8,25,0,32,21,1,70,7,22,0,0,11,14,15,172,22,0,1,11,14,0,0,0,23,0,51,10,0,44,21,0,1,21,1,71,7,8,22,0,2,11,14,15,173,22,0,3,11,14,15,174,22,0,4,11,14,15,175,22,0,5,11,14,0,150,0,24,0,151,0,45,21,0,3,0,46,8,21,0,4,9,0,152,0,46,21,0,3,0,45,8,21,0,4,9,0,153,0,46,21,0,3,0,46,8,31,0,4,9,0,154,0,46,21,0,3,0,46,8,31,0,5,9,0,155,0,46,31,0,3,0,46,8,3,12,21,1,19,5,22,0,6,22,0,7,4,2,11,14,15,176,3,1,0,26,31,0,7,21,1,38,0,41,0,30,0,22,7,8,21,0,6,6,6,21,1,16,31,0,6,21,1,83,5,8,22,0,8,11,14,15,177,22,0,9,11,14,21,1,86,0,32,21,0,0,7,3,2,0,43,0,16,0,41,0,51,0,42,0,23,8,8,0,12,0,32,21,0,0,7,10,8,22,0,10,11,14,15,178,0,42,0,24,0,16,0,46,10,31,0,9,0,25,10,21,0,2,9,0,32,21,0,0,7,15,179,31,0,10,0,16,0,41,0,45,8,10,0,24,0,16,0,46,10,31,0,2,9,3,4,0,43,0,24,0,16,0,45,10,0,39,0,51,0,24,0,47,3,2,0,43,0,13,0,41,0,47,8,8,3,2,0,43,0,13,0,41,0,45,8,8,8,8,8,25,21,0,1,0,7,0,46,6,22,0,2,11,14,0,156,0,157,3,2,0,16,21,0,1,6,22,0,3,11,14,0,19,0,42,0,12,8,0,7,0,46,10,0,12,0,41,0,45,8,0,7,0,46,10,3,2,0,16,21,0,1,6,22,0,4,11,14,15,180,15,181,3,2,0,16,31,0,1,6,22,0,5,11,14,0,158,0,26,31,0,3,6,0,26,0,120,6,22,0,6,11,14,0,159,0,26,21,0,6,6,22,0,7,11,14,0,160,0,26,31,0,6,6,22,0,8,11,14,21,1,8,0,42,0,24,0,36,15,182,15,183,3,2,0,43,0,25,0,39,21,1,4,8,8,8,8,25,21,0,1,0,12,5,0,13,0,46,6,0,5,0,161,6,14,21,0,1,21,1,12,0,46,6,22,0,3,11,14,21,0,2,0,12,0,40,0,7,8,21,0,1,17,15,184,21,0,2,17,14,21,0,3,0,35,0,8,7,31,0,1,15,185,0,37,0,46,8,31,0,2,17,6,25,21,0,1,21,1,91,21,0,2,17,22,0,3,11,14,21,0,1,0,15,5,22,0,4,11,0,22,5,22,0,5,11,0,11,31,0,3,6,22,0,6,11,14,31,0,4,0,27,21,0,6,0,7,21,0,5,6,6,0,26,31,0,6,0,33,21,1,10,0,42,0,27,8,7,0,37,21,0,1,0,42,31,0,5,0,20,0,45,6,0,44,15,186,8,8,8,31,0,2,17,6,0,15,31,0,1,21,1,77,5,6,25,21,0,1,21,1,91,21,0,2,17,22,0,3,11,14,21,0,1,0,15,5,22,0,4,11,0,22,5,22,0,5,11,0,11,21,0,3,6,22,0,6,11,14,21,0,6,0,33,21,1,10,0,42,0,28,0,41,0,7,0,41,31,0,3,8,8,8,7,0,37,21,0,1,0,42,31,0,5,0,20,0,45,6,0,44,15,187,8,8,8,31,0,2,17,0,26,31,0,4,0,28,31,0,6,6,6,0,15,31,0,1,21,1,77,5,6,25,21,0,1,0,12,5,0,12,0,46,6,0,5,0,166,6,14,21,0,1,0,30,21,1,94,7,5,14,21,0,1,3,0,0,42,0,15,8,0,30,0,17,7,0,35,0,30,0,26,0,41,21,1,11,8,7,7,3,0,0,20,5,10,3,2,0,43,0,24,0,35,0,8,7,0,46,10,0,20,0,45,10,8,5,0,30,0,1,0,41,0,45,8,7,5,0,1,31,0,1,0,30,0,45,7,5,6,25,21,0,2,0,12,5,0,23,0,46,6,0,5,0,167,6,14,21,0,2,21,1,10,5,22,0,2,12,0,22,5,22,0,3,11,14,31,0,1,21,0,3,0,20,0,45,6,0,44,0,24,0,36,15,188,8,8,31,0,2,6,25,21,0,1,21,1,77,5,0,27,21,0,2,17,22,0,3,11,14,21,0,1,21,1,12,31,0,2,17,22,0,4,11,0,35,0,8,7,0,46,6,22,0,5,11,14,21,0,1,0,15,5,22,0,6,11,14,21,0,5,0,17,5,0,15,31,0,4,6,22,0,7,11,14,31,0,1,15,189,0,36,0,32,21,0,3,0,35,0,8,7,0,46,6,0,17,5,0,30,15,190,7,5,0,15,31,0,3,6,7,8,5,25,31,0,4,22,0,5,11,14,15,191,22,0,6,11,14,15,192,22,0,7,11,14,31,0,1,21,0,5,0,20,9,15,193,15,194,31,0,7,3,4,0,43,0,12,0,20,0,45,10,0,40,0,6,0,41,0,8,0,41,0,47,8,8,8,8,31,0,2,17,21,1,81,5,25,21,0,1,0,12,5,0,13,0,46,6,0,5,0,172,6,14,31,0,4,22,0,5,11,14,15,195,22,0,6,11,14,31,0,1,31,0,6,15,196,3,2,0,43,0,46,0,37,0,22,0,20,0,45,10,8,8,31,0,2,17,25,21,0,2,0,12,5,0,23,0,46,6,0,5,0,175,6,14,31,0,2,21,1,10,5,22,0,3,11,14,21,0,3,0,30,21,1,7,0,7,0,46,10,7,5,22,0,4,11,0,35,0,6,7,0,45,6,22,0,5,11,14,21,0,5,0,23,0,46,6,0,5,0,176,6,14,31,0,1,21,1,10,5,22,0,6,11,0,22,5,22,0,7,11,14,21,0,3,0,24,0,35,0,8,7,0,46,10,15,197,3,2,0,43,31,0,5,8,5,22,0,8,11,14,21,0,6,21,0,7,0,12,21,0,8,6,0,7,0,46,6,0,44,0,24,0,36,15,198,8,8,5,0,15,21,0,3,6,25,21,0,1,0,30,21,1,6,7,5,0,35,0,8,7,0,46,6,0,5,0,181,6,14,21,0,1,0,30,0,13,0,41,0,50,8,7,5,0,35,0,8,7,0,46,6,0,5,0,182,6,14,0,3,22,0,5,11,14,21,0,1,0,25,0,37,0,45,8,0,44,0,24,15,199,0,22,0,42,0,33,0,7,7,8,10,8,31,0,2,17,22,0,1,12,14,21,0,1,0,4,31,0,1,21,0,5,5,22,0,6,11,6,22,0,7,11,14,0,45,22,0,8,11,14,31,0,6,0,30,15,200,0,33,0,29,7,31,0,7,10,31,0,4,9,7,5,25,21,0,1,0,12,5,0,12,0,46,6,0,5,0,183,6,14,21,1,102,0,24,7,22,0,3,11,14,31,0,1,21,0,3,0,1,0,45,0,39,0,17,8,10,0,30,21,1,8,0,39,15,201,8,7,0,35,0,30,0,30,0,26,7,7,7,3,0,0,20,5,0,20,5,10,0,1,0,30,0,45,7,3,0,0,42,0,15,8,0,1,0,24,10,9,10,3,2,0,43,21,1,76,0,20,0,46,10,8,5,25,21,0,2,0,12,5,22,0,3,11,14,21,0,1,0,12,5,0,13,21,0,3,6,0,5,0,184,6,14,21,0,1,21,1,77,5,22,0,4,11,0,27,21,0,3,6,0,34,0,7,7,21,0,2,21,1,77,16,6,22,0,5,11,14,21,0,5,0,45,0,16,0,41,0,45,8,0,12,0,46,10,3,2,0,43,21,0,3,0,12,0,46,6,8,5,22,0,6,11,14,31,0,5,0,30,0,12,0,41,0,45,8,7,0,35,0,8,7,0,46,10,0,46,3,2,0,43,21,0,6,8,5,0,5,0,185,6,14,21,0,1,0,42,0,24,0,36,0,25,0,39,21,0,1,0,15,5,15,202,15,203,3,2,0,43,31,0,1,0,12,5,0,12,21,0,3,6,8,5,8,8,8,22,0,7,11,14,31,0,2,0,15,5,21,1,102,21,0,7,7,31,0,6,6,0,1,3,0,31,0,7,5,6,25,21,0,1,21,1,4,5,0,5,0,186,6,14,31,0,1,21,1,104,21,1,135,3,2,0,43,21,0,2,21,1,76,16,0,13,0,47,17,8,31,0,2,6,25,21,0,1,0,12,5,0,23,0,46,6,0,5,0,187,6,14,21,0,1,21,1,10,5,22,0,1,12,14,21,0,1,0,22,5,0,51,0,42,0,13,8,0,8,0,13,0,41,0,46,8,10,5,0,5,0,188,6,14,21,0,1,0,30,21,1,6,7,5,0,35,0,8,7,0,46,6,0,5,0,189,6,14,31,0,2,0,30,0,25,0,8,0,33,0,9,0,39,0,11,8,7,10,0,33,0,7,7,0,46,10,0,6,0,7,10,0,41,21,0,1,0,22,5,8,7,5,0,33,0,29,7,31,0,1,6,25,31,0,1,21,1,106,0,46,0,45,3,2,0,37,0,47,3,1,8,10,25,21,0,1,21,1,107,31,0,5,7,21,0,2,17,22,0,6,11,0,30,0,21,0,41,0,45,8,7,5,22,0,7,11,14,21,0,4,22,0,8,11,14,15,204,0,37,15,205,8,22,0,9,11,14,15,206,15,207,3,2,0,16,31,0,4,0,46,21,1,64,3,2,0,43,0,0,0,13,0,51,10,8,5,6,22,0,10,11,14,15,208,22,0,11,11,14,15,209,22,0,12,11,14,15,210,22,0,13,11,14,31,0,1,21,0,13,31,0,6,7,31,0,2,17,25,0,24,0,25,3,2,0,43,0,20,8,22,0,6,11,14,21,0,1,21,1,107,31,0,5,7,0,34,0,7,0,42,21,0,6,8,31,0,6,0,7,0,25,10,3,2,0,43,0,24,0,13,0,45,10,8,7,0,12,0,40,21,1,11,8,10,21,0,2,17,22,0,7,11,14,0,24,0,20,9,21,1,97,0,24,0,20,0,36,0,30,0,20,7,8,9,3,3,0,43,0,12,0,42,0,23,8,0,6,0,46,10,0,8,0,45,0,42,0,21,8,10,8,22,0,8,11,14,31,0,1,21,0,8,21,0,7,0,16,0,41,0,22,0,33,0,7,7,0,46,10,8,5,6,21,1,68,31,0,4,7,31,0,2,31,0,8,31,0,7,0,16,0,45,6,17,17,21,1,81,5,25,31,0,4,22,0,6,11,14,0,45,15,211,0,37,0,32,15,212,7,8,21,0,2,17,22,0,7,11,14,21,0,1,31,0,5,31,0,2,17,22,0,8,11,14,15,213,22,0,9,11,14,31,0,1,31,0,9,15,214,3,2,0,43,21,0,8,21,1,7,5,8,5,25,21,0,2,21,1,111,21,0,1,6,0,11,5,0,8,31,0,2,6,0,7,31,0,1,6,25,21,0,2,21,1,123,5,21,1,123,0,46,6,0,5,0,193,6,14,21,0,2,0,30,21,1,123,7,5,22,0,3,11,0,35,21,1,126,7,0,45,6,22,0,4,11,14,21,0,1,21,1,123,5,21,1,125,21,0,4,6,0,5,0,194,6,14,21,0,1,21,1,77,5,0,27,21,0,4,6,21,1,127,21,0,2,0,30,21,1,77,7,16,21,1,85,16,6,22,0,5,11,14,21,0,5,21,0,3,21,1,123,0,46,6,21,1,132,21,0,3,6,0,42,21,1,125,8,21,1,117,21,1,125,0,41,0,45,8,10,5,0,35,21,1,117,7,0,46,6,0,5,0,185,6,14,0,45,3,1,0,26,31,0,5,6,0,29,21,0,3,0,31,21,1,126,7,5,21,1,133,0,45,6,6,21,1,115,31,0,3,6,22,0,6,11,14,21,0,2,0,30,21,1,129,7,5,22,0,2,12,0,30,21,1,122,7,5,0,33,21,1,127,7,21,0,6,6,22,0,7,11,14,0,32,21,0,1,7,21,1,101,31,0,1,21,1,12,31,0,4,6,0,42,0,26,8,10,22,0,8,11,14,21,0,7,0,35,21,1,119,7,0,46,6,3,1,21,0,8,5,0,42,0,29,8,22,0,9,11,14,21,0,2,0,16,0,41,0,45,8,0,40,21,1,102,21,0,9,7,8,0,34,21,1,102,0,24,7,7,21,1,119,31,0,7,21,1,131,5,21,1,133,0,46,6,0,31,21,1,119,7,5,21,1,131,5,10,0,35,0,30,0,30,21,1,126,7,7,7,9,0,30,31,0,9,7,9,3,2,0,43,0,24,0,39,21,1,122,8,21,1,122,0,46,10,8,31,0,6,6,0,1,31,0,2,0,30,0,45,7,16,31,0,8,16,6,25,21,0,2,21,1,123,5,0,33,21,1,127,7,0,46,6,22,0,3,11,14,21,0,3,21,1,125,0,45,6,0,5,0,195,6,14,21,0,1,21,1,123,5,21,1,125,31,0,3,6,0,5,0,196,6,14,31,0,1,21,1,139,0,41,21,0,2,8,21,1,129,0,39,21,1,42,8,21,1,129,21,1,77,10,0,42,0,34,21,1,11,7,8,9,0,40,21,1,139,8,31,0,2,6,25,21,0,2,21,1,123,5,21,1,124,0,46,6,0,5,0,197,6,14,31,0,1,21,1,77,5,21,1,122,0,40,21,1,125,8,21,0,2,6,0,5,0,198,6,14,31,0,2,21,1,129,5,0,30,21,1,7,7,5,0,35,21,1,117,7,0,46,6,0,5,0,199,6,25,21,0,1,21,1,77,5,21,1,138,21,0,2,6,0,30,0,35,21,1,115,7,7,5,21,1,130,5,0,30,0,32,31,0,1,7,21,1,52,0,29,0,41,31,0,2,8,10,7,5,25,21,0,1,21,1,142,21,0,2,6,14,21,0,2,21,1,129,5,22,0,2,12,14,21,0,2,21,1,140,5,21,1,128,5,0,35,21,1,126,7,0,45,6,21,1,127,21,0,1,21,1,123,5,6,22,0,3,11,14,21,0,3,21,1,120,21,0,2,6,0,35,21,1,117,7,0,46,6,0,5,0,200,6,14,31,0,1,21,1,143,31,0,3,21,1,130,5,0,24,21,1,132,0,33,21,1,140,0,39,21,1,128,8,7,10,21,0,2,17,0,26,31,0,2,17,6,25,21,0,1,21,1,142,21,0,2,6,14,21,0,2,21,1,129,5,22,0,2,12,14,21,0,1,21,1,123,5,22,0,3,11,14,21,0,2,21,0,3,0,42,21,1,120,8,21,1,117,21,1,140,10,5,0,35,21,1,117,7,0,46,6,21,1,156,5,14,31,0,1,21,1,143,31,0,3,21,1,130,5,0,24,21,1,132,0,33,21,1,140,0,39,21,1,128,8,7,10,21,0,2,17,0,26,31,0,2,17,21,1,14,5,6,25,31,0,1,21,1,154,5,25,31,0,5,14,31,0,1,31,0,4,31,0,2,17,25,21,0,1,21,1,154,5,0,24,15,215,3,2,0,43,0,45,0,24,21,1,1,0,39,21,1,148,8,9,3,2,0,43,21,1,77,0,41,0,32,21,1,158,7,8,21,1,117,21,1,77,10,8,8,31,0,1,6,25,31,0,1,21,1,1,5,25,31,0,1,21,1,154,5,25,21,0,2,0,42,21,0,1,8,0,37,31,0,2,31,0,1,9,8,25,31,0,1,22,0,3,22,0,4,22,0,5,22,0,6,4,4,11,14,21,1,150,21,1,128,9,22,0,7,11,14,31,0,6,15,216,15,217,0,32,21,1,158,7,3,2,0,43,0,24,0,39,21,0,7,8,8,3,2,0,43,0,25,0,39,31,0,7,8,8,31,0,4,6,25,31,0,1,21,1,1,5,25,31,0,1,21,1,163,5,25,31,0,1,21,1,167,5,25,31,0,2,31,0,1,5,25,31,0,1,21,1,170,5,25,31,0,2,0,35,31,0,1,7,5,25,0,24,21,1,76,0,39,21,1,157,8,31,0,1,10,0,25,0,24,10,25,21,0,1,31,0,4,21,0,2,17,22,0,6,11,14,21,0,6,31,0,5,31,0,2,17,21,1,76,31,0,1,6,21,1,157,5,14,31,0,6,25,21,0,1,21,1,76,5,21,1,123,0,47,6,21,1,156,5,14,21,0,1,0,30,21,1,123,7,5,21,1,123,0,46,6,0,35,21,1,117,7,0,46,6,21,1,157,5,14,21,0,1,21,1,155,5,22,0,3,11,14,21,0,3,0,30,21,1,7,7,5,0,35,21,1,117,7,0,46,6,21,1,157,5,14,21,0,1,0,30,21,1,133,0,41,0,50,8,7,5,21,1,155,5,21,1,121,21,0,3,6,0,35,21,1,117,7,0,46,6,21,1,157,5,14,21,0,3,0,3,5,22,0,4,11,14,0,46,21,1,125,21,0,4,6,0,35,21,1,117,7,0,46,6,21,1,157,5,14,31,0,4,21,1,128,5,21,1,132,5,22,0,5,11,14,21,0,5,0,30,0,50,7,5,21,1,155,31,0,1,0,30,21,1,122,7,5,21,1,132,5,6,0,29,31,0,5,21,1,155,31,0,3,6,21,1,32,5,6,25,21,0,2,21,1,123,5,21,1,123,0,46,6,21,1,156,5,14,21,0,2,0,30,21,1,7,7,5,0,35,21,1,117,7,0,46,6,21,1,156,5,14,31,0,2,21,1,138,5,22,0,3,11,14,21,0,1,0,30,21,1,122,7,0,40,21,1,76,8,21,0,3,6,21,1,157,5,14,31,0,1,21,1,155,0,40,0,29,0,41,21,1,32,8,8,31,0,3,6,25,21,0,1,21,1,4,5,21,1,157,5,14,21,0,1,21,1,123,5,21,1,123,0,45,6,21,1,157,5,14,31,0,1,21,1,129,5,0,16,0,45,6,25,21,0,2,21,1,123,0,40,21,1,127,8,21,0,1,6,22,0,3,11,14,21,0,3,0,46,0,42,21,1,125,8,21,1,117,21,1,125,0,41,0,45,8,10,5,21,1,157,5,14,21,0,2,0,46,21,1,122,3,2,0,43,21,0,3,8,5,22,0,4,11,14,21,0,1,21,1,122,5,21,1,125,21,0,4,6,21,1,157,5,14,21,0,1,21,1,162,21,1,136,0,41,21,0,4,8,3,2,0,43,31,0,3,8,5,21,1,76,31,0,2,6,21,1,157,5,14,31,0,1,21,1,137,31,0,4,6,25,21,0,1,21,1,122,5,21,1,123,0,47,6,21,1,157,5,14,21,0,1,21,1,162,5,21,1,76,31,0,2,17,21,1,157,5,14,31,0,1,21,1,162,0,46,6,25,21,0,1,21,1,122,5,21,1,123,0,46,6,21,1,157,5,14,31,0,1,21,1,162,5,25,0,24,0,39,21,1,76,8,21,1,120,0,45,10,21,1,157,9,0,25,21,1,166,21,1,146,31,0,1,7,7,10,25,0,24,0,39,21,1,76,8,21,1,120,0,45,10,21,1,157,9,0,25,0,45,0,39,21,1,156,8,0,37,21,1,165,21,1,146,31,0,1,7,7,8,10,25,0,24,0,39,21,1,123,8,21,1,120,0,45,10,21,1,157,9,0,25,21,1,174,21,1,146,31,0,1,7,0,24,0,41,21,1,4,0,39,21,1,157,8,8,9,7,10,25,21,1,166,21,1,146,31,0,1,7,7,25,0,24,0,39,21,1,123,8,21,1,120,0,45,10,21,1,157,9,0,25,0,24,21,0,1,21,1,133,10,0,37,21,1,122,21,1,120,0,46,10,0,44,21,1,137,0,41,0,46,8,31,0,1,21,1,137,0,41,0,50,8,10,21,1,155,21,1,162,10,8,8,10,25,31,0,1,0,32,15,218,7,3,2,0,43,21,1,123,0,41,0,32,21,1,147,7,8,8,25,21,1,146,31,0,2,7,22,0,3,11,14,21,0,3,0,41,21,0,1,8,0,37,31,0,3,8,21,1,146,31,0,1,7,9,25,31,0,1,21,1,169,21,1,146,31,0,2,7,8,25,21,0,1,21,1,168,21,0,2,8,21,1,159,31,0,1,21,1,127,5,21,1,168,31,0,2,8,8,25,31,0,1,21,1,127,5,21,1,168,31,0,2,8,25,21,1,146,31,0,1,7,0,37,21,1,146,31,0,2,7,8,25,21,1,146,31,0,1,7,0,41,31,0,2,8,25,31,0,1,0,37,21,1,158,8,25,21,1,146,21,0,2,7,21,1,146,21,0,1,7,9,0,37,31,0,1,0,32,0,45,0,39,21,1,156,8,7,15,219,3,2,0,43,0,24,0,39,21,1,150,8,8,31,0,2,17,8,25,21,0,1,15,220,31,0,5,21,1,175,31,0,1,31,0,4,21,0,2,17,6,7,31,0,2,17,25,21,1,120,21,1,139,21,0,1,10,21,1,175,9,22,1,2,12,14,31,0,1,21,1,3,3,2,25,31,0,1,21,2,2,5,25,31,0,1,21,2,2,5,25,21,0,1,0,14,0,40,21,2,13,8,21,0,2,17,0,5,0,99,6,14,31,0,1,0,34,31,0,4,7,31,0,2,17,25,21,0,2,0,14,5,22,0,5,11,14,21,0,2,0,12,5,22,0,6,11,14,21,0,1,0,14,5,22,0,7,11,14,21,0,7,0,27,21,0,6,6,21,2,13,31,0,5,6,0,5,0,100,6,14,21,0,7,0,28,31,0,6,6,0,35,0,8,7,0,46,6,22,0,8,11,14,31,0,2,0,15,5,22,0,9,11,0,22,5,22,0,10,11,14,31,0,1,0,15,5,22,0,11,11,14,0,45,0,21,21,0,10,6,0,8,21,0,8,6,0,17,0,40,0,30,0,32,31,0,11,7,0,16,0,6,0,41,0,8,0,41,31,0,8,8,8,10,31,0,4,31,0,9,0,42,0,16,8,10,7,8,31,0,10,6,0,15,31,0,7,6,25,31,0,1,21,1,2,31,0,2,17,25,31,0,1,0,30,21,1,2,0,41,0,32,31,0,2,7,8,7,5,25,31,0,2,0,30,0,32,31,0,1,7,0,42,21,1,2,8,7,5,25,31,0,1,0,30,21,1,2,7,5,25,31,0,1,21,1,2,31,0,2,17,25,31,0,1,21,2,23,21,1,2,7,31,0,2,17,25,21,2,11,0,16,0,23,10,21,2,11,21,2,26,10,22,0,3,11,14,21,0,1,0,22,0,40,21,0,3,8,21,0,2,17,22,0,4,22,0,5,4,2,11,14,31,0,1,15,221,0,40,15,222,8,31,0,2,17,22,0,6,11,14,21,0,4,31,0,6,3,2,25,31,0,2,22,0,3,11,14,31,0,1,22,0,4,11,14,15,223,21,1,6,3,2,0,43,0,12,0,41,21,1,7,8,8,22,0,5,11,14,0,45,21,0,5,5,25,31,0,1,0,12,0,41,0,45,8,0,44,31,0,2,8,9,25,0,33,31,0,1,7,25,21,1,3,0,16,21,0,1,6,31,0,4,5,0,46,0,13,31,0,1,6,0,44,15,224,31,0,5,7,8,31,0,2,17,25,21,0,2,0,12,5,0,33,0,7,7,0,46,6,22,0,3,11,0,7,21,0,1,0,12,5,6,22,0,4,11,14,31,0,3,0,13,0,45,6,0,5,0,102,6,14,21,0,4,0,13,0,45,6,0,5,0,103,6,14,21,0,2,21,2,12,0,46,6,22,0,5,11,14,21,0,2,0,22,5,22,0,6,11,14,21,0,1,21,2,8,5,22,0,1,12,14,21,0,1,21,2,12,21,0,4,6,22,0,7,11,14,21,0,1,0,14,5,0,27,31,0,4,6,22,0,8,11,0,35,0,8,7,0,46,6,22,0,9,11,14,31,0,1,0,15,0,40,15,225,15,226,3,2,0,43,21,0,6,0,20,0,45,6,8,8,31,0,2,6,0,15,31,0,8,6,25,21,0,1,0,12,5,0,13,0,46,6,0,5,0,101,6,14,21,0,1,0,22,5,22,0,3,11,14,31,0,1,21,0,3,0,39,0,17,8,15,227,3,2,0,43,21,0,3,0,13,0,47,6,8,5,25,21,0,2,0,12,5,0,33,0,7,7,0,46,6,22,0,3,11,14,21,0,3,0,13,0,45,6,0,5,0,105,6,14,21,0,1,0,12,5,0,13,21,0,3,6,0,5,0,106,6,14,21,0,2,0,22,5,22,0,4,11,14,21,0,2,21,2,12,0,46,6,22,0,5,11,0,35,0,8,7,0,46,6,22,0,6,11,14,21,0,1,0,12,5,0,33,0,7,7,31,0,3,6,22,0,7,11,14,21,0,1,0,14,5,0,27,21,0,7,6,22,0,8,11,0,35,0,8,7,0,46,6,22,0,9,11,14,31,0,1,15,228,15,229,3,2,0,43,0,45,21,2,12,0,41,31,0,7,8,21,2,13,31,0,5,10,3,2,0,43,21,0,6,0,8,21,0,4,6,0,20,0,45,6,22,0,10,11,8,8,31,0,2,6,0,15,31,0,8,6,25,0,17,0,42,0,30,0,6,7,0,41,0,30,21,0,1,0,42,0,8,8,7,8,8,22,0,3,11,14,21,0,2,21,0,3,22,1,5,13,14,31,0,2,0,7,31,0,1,6,0,6,0,46,6,0,18,0,45,6,31,0,3,22,1,7,13,25,21,0,1,0,7,21,1,3,6,0,17,5,0,30,0,6,0,41,31,0,1,8,7,5,25,31,0,1,0,5,21,1,4,10,0,25,0,24,10,25,21,1,4,0,8,21,0,1,6,0,6,31,0,2,21,2,47,31,0,1,17,17,22,1,4,12,25,21,0,2,0,12,5,0,23,0,46,6,0,5,21,1,10,6,14,21,0,2,21,1,13,5,14,21,0,2,0,15,5,22,0,2,12,0,22,5,22,0,3,11,14,21,0,1,0,12,5,0,13,21,0,3,6,0,5,21,1,11,6,14,0,45,0,20,5,22,0,4,11,14,21,0,1,0,14,5,22,0,5,11,0,27,21,0,3,6,22,0,6,11,0,34,15,230,7,31,0,2,6,14,31,0,1,0,15,31,0,5,0,28,31,0,3,6,0,26,31,0,6,0,35,0,8,7,0,46,6,3,1,6,6,0,29,21,0,4,6,25,21,0,1,0,12,5,0,13,0,46,6,0,5,21,1,9,6,14,31,0,1,21,1,6,31,0,2,17,25,31,0,2,0,12,21,1,4,6,25,21,1,3,0,6,22,1,4,13,14,31,0,1,0,6,0,46,6,25,31,0,1,0,37,31,0,2,8,25,31,0,1,0,1,0,45,10,25,31,0,1,0,1,31,0,2,19,25,21,0,2,0,36,31,0,1,21,2,66,31,0,2,17,8,25,31,0,4,22,0,6,11,14,31,0,1,22,0,7,22,0,8,22,0,9,4,3,11,14,31,0,5,21,2,4,0,21,31,0,8,10,0,44,15,231,0,39,21,1,7,8,8,5,31,0,7,31,0,2,17,22,0,10,11,14,31,0,10,31,0,9,0,44,15,232,8,5,25,0,46,22,0,3,11,14,0,45,15,233,0,35,0,18,7,0,45,10,0,6,0,46,10,3,2,0,43,21,2,4,8,22,0,4,11,14,21,0,1,21,0,4,5,22,0,5,11,14,31,0,2,21,2,11,0,40,21,2,11,8,0,32,21,2,70,7,0,15,0,40,21,2,11,8,3,2,0,43,21,2,72,8,15,234,3,3,0,43,31,0,5,0,11,0,47,6,8,31,0,1,6,25,21,0,2,22,0,3,22,0,4,4,2,11,14,15,235,0,41,31,0,2,8,22,0,5,11,14,15,236,22,0,6,11,14,15,237,0,41,0,45,8,22,0,7,11,14,31,0,1,0,32,21,0,4,7,0,16,0,45,10,31,0,7,3,2,0,43,21,1,12,0,39,21,2,4,8,8,5,25,21,1,6,31,0,1,5,25,31,0,1,0,12,0,41,21,1,4,8,0,7,0,46,10,0,44,15,238,8,5,14,21,1,5,0,16,0,46,0,6,21,1,3,6,22,1,3,12,6,25,31,0,2,22,0,5,11,14,31,0,4,22,0,6,11,14,31,0,1,0,30,15,239,7,5,25,31,0,2,22,0,3,11,14,21,1,9,0,16,21,0,1,6,22,0,4,11,14,21,1,5,0,30,0,16,0,41,31,0,1,8,7,5,22,0,5,11,14,21,0,4,0,17,5,0,30,0,8,0,41,21,0,3,8,7,5,0,33,0,29,7,21,0,5,6,22,0,6,11,14,31,0,3,0,17,5,0,30,0,25,7,21,0,6,6,0,30,0,24,7,21,1,10,0,17,5,6,0,15,5,21,2,13,31,0,5,6,0,5,0,146,6,14,21,0,6,21,2,37,5,22,0,7,11,14,21,0,6,21,1,8,0,6,7,0,45,6,0,29,21,0,7,6,0,34,0,7,7,21,0,7,0,22,5,0,17,5,6,22,0,8,11,14,31,0,8,0,30,0,24,7,21,1,12,6,0,34,0,6,7,31,0,6,0,29,21,0,7,6,0,30,0,8,7,21,1,12,6,6,22,1,12,12,14,31,0,7,0,30,0,6,0,41,21,0,4,0,42,0,8,8,8,7,21,1,11,6,22,1,11,12,14,31,0,4,0,8,22,1,10,13,25,31,0,4,0,16,31,0,1,6,0,16,31,0,2,17,25,21,1,5,0,16,0,45,6,0,28,21,1,7,6,22,0,3,11,14,21,1,5,0,30,0,28,0,41,21,1,7,8,21,2,13,21,0,3,10,7,5,0,35,0,8,7,0,46,6,0,5,0,147,6,14,21,0,3,0,35,0,8,7,5,22,0,4,11,0,17,5,0,15,31,0,3,6,22,0,5,11,14,21,0,5,0,30,0,25,7,31,0,1,6,21,1,13,31,0,5,0,30,0,6,0,41,0,8,0,41,31,0,4,8,8,7,31,0,2,17,6,25,0,32,21,2,70,7,31,0,1,3,2,0,43,31,0,4,0,7,0,46,10,0,40,0,8,0,37,0,24,8,8,8,25,21,0,1,15,240,31,0,1,31,0,4,31,0,5,3,3,7,3,2,0,43,0,24,31,0,2,9,8,25,21,1,0,0,37,31,0,1,8,25,31,0,1,0,37,21,1,0,8,25,21,1,1,31,0,2,7,22,0,3,11,14,31,0,1,21,0,3,15,241,15,242,3,3,0,43,0,32,0,51,7,0,7,0,0,10,8,5,25,21,0,1,21,1,8,5,22,0,3,11,14,31,0,1,31,0,3,31,0,2,17,25,31,0,1,21,2,1,5,25,31,0,1,0,28,0,46,6,0,30,21,2,87,0,41,0,32,31,0,2,7,8,7,5,25,21,0,1,0,19,5,22,0,5,11,0,20,0,41,21,0,2,8,0,44,31,0,4,8,5,14,31,0,5,0,17,5,0,30,21,0,1,0,6,21,0,2,17,0,42,0,6,8,7,0,30,0,45,0,42,0,20,8,0,44,0,49,8,7,9,0,30,0,13,0,41,31,0,2,8,0,44,0,49,8,7,3,2,0,43,31,0,1,0,20,0,45,6,8,5,25,31,0,1,14,0,6,0,18,0,45,10,0,17,9,0,7,0,18,0,45,10,0,17,9,0,30,0,6,7,0,24,0,39,0,20,8,10,3,2,0,43,0,20,0,41,0,45,8,8,25,21,0,2,21,2,6,5,0,5,21,1,8,6,14,21,0,2,0,13,0,45,6,22,0,3,11,14,21,0,1,0,22,5,0,6,0,18,0,45,10,0,11,3,2,0,43,21,0,3,8,21,0,2,6,22,0,4,11,14,15,243,21,0,1,7,22,0,5,11,14,0,46,22,0,6,11,14,0,24,22,0,7,11,14,21,0,1,0,12,0,20,0,46,10,0,44,15,244,0,41,21,0,2,8,8,5,14,31,0,1,0,15,5,0,28,0,27,3,2,0,43,21,0,3,0,12,21,1,2,6,8,21,0,6,0,8,31,0,4,6,6,21,1,2,0,44,0,24,0,45,0,42,0,21,8,0,44,15,245,8,0,22,0,7,31,0,2,0,39,0,19,8,10,10,8,5,21,0,7,5,25,21,0,2,0,12,5,0,23,0,46,6,0,5,21,1,7,6,14,21,0,2,0,15,5,22,0,2,12,14,21,0,2,0,30,21,2,6,7,5,0,35,0,8,7,0,46,6,0,5,21,1,8,6,14,21,0,2,0,22,5,22,0,3,11,14,21,0,1,21,2,77,5,0,22,0,42,0,21,8,0,44,15,246,8,21,0,3,6,22,0,4,11,14,15,247,22,0,5,11,14,0,45,0,20,5,22,0,6,11,14,0,46,22,0,7,11,14,15,248,22,0,8,11,14,0,45,22,0,9,11,14,31,0,2,0,34,15,249,21,1,5,15,250,7,31,0,8,0,25,10,3,2,0,43,21,1,4,8,7,21,0,4,0,27,21,0,3,6,6,22,0,10,11,14,31,0,1,0,15,0,41,21,0,4,8,15,251,3,2,0,43,21,0,6,0,12,5,0,20,0,45,6,8,5,25,21,0,1,0,13,0,45,6,0,5,0,162,6,14,21,0,1,0,23,0,46,6,0,5,0,163,6,14,31,0,2,21,2,77,5,0,28,31,0,1,0,7,0,46,6,6,21,2,13,21,1,3,6,0,5,0,164,6,25,31,0,2,0,46,0,22,3,2,0,43,0,24,0,12,0,40,0,13,8,31,0,1,10,8,5,25,31,0,2,0,17,5,0,30,31,0,1,0,1,5,7,5,25,31,0,2,0,17,5,0,30,31,0,1,0,1,5,7,5,25,21,0,1,0,12,5,0,13,21,1,3,6,0,5,0,168,6,14,21,0,2,0,30,21,2,7,7,5,0,35,0,8,7,5,0,5,0,169,6,14,21,0,1,21,2,77,5,22,0,3,11,14,21,0,2,0,34,0,7,0,6,0,46,10,7,21,0,3,0,27,21,1,3,6,6,22,0,4,11,14,21,0,4,0,30,0,13,0,41,0,45,8,7,5,0,35,0,8,7,5,0,5,0,170,6,14,21,0,3,0,28,21,1,3,6,22,0,5,11,0,35,0,8,7,0,46,6,22,0,6,11,14,15,252,22,0,7,11,14,31,0,1,15,253,31,0,7,3,2,0,43,0,25,0,35,0,8,7,21,0,4,0,35,0,8,7,21,0,6,6,10,0,20,0,45,10,8,31,0,2,6,25,21,1,7,0,30,0,32,31,0,1,7,7,5,25,21,1,7,0,30,0,6,0,41,31,0,1,0,8,21,1,5,6,8,7,5,0,33,0,29,7,21,1,6,6,25,21,2,97,0,41,0,46,8,0,40,21,0,1,21,2,67,0,34,21,0,1,7,0,37,0,30,31,0,1,7,8,8,8,25,21,0,2,0,22,0,40,0,12,8,21,0,1,17,0,5,0,171,17,14,31,0,1,21,1,6,21,1,5,7,31,0,2,17,25,31,0,1,21,1,6,21,1,5,0,41,0,32,31,0,2,7,8,7,5,25,31,0,2,21,1,6,0,32,31,0,1,7,0,42,21,1,5,8,7,5,25,21,0,1,21,2,77,5,0,28,0,46,6,22,0,3,11,14,15,254,22,0,4,11,14,21,1,5,0,32,31,0,1,7,0,15,31,0,4,10,21,2,21,0,42,21,2,101,8,3,2,0,43,0,24,0,39,21,2,18,8,0,7,0,46,10,8,31,0,3,6,25,31,0,1,21,2,97,0,46,6,0,35,21,1,5,7,31,0,2,17,25,31,0,1,0,34,0,24,0,46,3,2,0,43,0,25,8,7,21,1,4,6,0,35,0,8,7,0,46,6,22,0,3,11,14,21,0,3,0,20,0,45,6,0,5,0,177,6,14,21,1,4,0,22,5,0,17,5,0,34,0,8,7,21,1,4,6,0,35,0,6,7,0,45,6,22,0,4,11,14,21,1,3,0,16,31,0,4,6,21,2,100,5,22,0,5,11,14,0,54,0,20,21,0,5,6,0,5,0,178,6,14,0,12,0,41,0,11,8,0,5,0,179,10,0,25,0,24,10,22,0,6,11,14,21,0,3,0,9,21,1,7,6,31,0,6,0,11,0,18,3,3,0,43,21,0,5,0,11,0,47,6,8,5,22,0,7,11,14,21,1,3,0,34,0,24,21,0,7,3,2,0,43,0,25,8,7,21,1,4,6,22,1,3,12,14,31,0,7,0,8,31,0,3,6,31,0,5,0,12,0,51,6,0,44,0,20,0,41,21,1,7,8,0,44,15,255,8,8,5,25,21,1,7,0,20,0,45,6,0,5,0,180,6,14,31,0,1,0,27,15,256,0,41,0,47,0,42,0,9,8,8,0,24,0,27,0,22,0,42,0,7,8,10,0,26,0,24,10,0,25,10,3,2,0,43,0,22,0,42,0,21,8,8,21,1,8,6,25,0,24,21,1,5,21,0,1,0,16,21,0,2,17,10,22,1,5,12,14,31,0,1,0,27,31,0,2,17,25,21,0,1,0,17,5,0,30,0,6,0,41,21,1,8,8,7,5,0,24,31,0,1,0,6,22,1,8,13,6,25,21,0,1,0,15,5,21,1,3,5,0,30,31,0,1,21,2,77,5,21,2,95,5,0,15,5,0,42,0,29,8,7,5,25,21,1,4,0,28,21,1,3,6,22,0,3,11,0,35,0,8,7,0,46,6,22,0,4,11,14,21,0,4,0,17,5,0,15,31,0,3,6,0,42,0,30,0,6,0,41,0,8,0,41,31,0,4,8,8,7,8,0,33,0,29,7,31,0,1,10,25,31,0,1,0,42,0,29,8,25,31,0,1,0,41,0,32,31,0,2,7,8,25,31,0,1,25,31,0,2,14,31,0,1,25,31,0,2,0,36,31,0,1,8,25,21,0,1,21,1,10,0,30,31,0,1,7,8,25,21,0,1,21,1,10,21,2,23,31,0,1,7,8,25,0,45,22,0,2,11,14,15,257,21,0,1,7,22,0,3,11,14,31,0,1,0,34,15,258,7,21,1,7,6,0,22,0,21,0,47,10,0,44,0,26,0,41,0,45,3,1,8,8,5,22,0,4,22,0,5,4,2,11,14,21,1,8,15,259,15,260,15,261,3,4,0,43,31,0,5,0,42,0,6,0,41,31,0,4,0,8,0,47,10,8,8,8,25,15,262,0,32,31,0,2,7,7,25,0,25,31,0,1,9,25,0,45,22,0,3,11,22,0,4,11,14,21,1,8,21,2,24,15,263,7,5,14,31,0,1,3,1,22,0,5,11,14,15,264,0,41,21,1,7,8,22,0,6,11,14,21,0,3,21,0,6,21,1,6,6,22,0,7,11,14,21,0,4,0,7,5,21,0,5,31,0,6,0,41,21,2,154,8,3,2,0,43,0,20,0,41,0,45,8,8,21,1,6,6,22,0,8,11,14,21,1,8,21,2,24,0,32,31,0,7,31,0,8,3,2,7,0,16,0,45,0,42,0,20,8,10,0,16,0,19,10,7,5,25,21,1,8,0,17,5,0,35,0,24,0,39,21,1,6,21,1,7,5,8,7,31,0,1,6,25,21,0,1,21,2,159,31,0,2,8,21,2,147,31,0,1,8,25,0,24,21,2,146,21,1,5,7,31,0,2,19,15,265,21,2,146,31,0,1,7,8,25,0,24,15,266,21,1,5,7,31,0,1,10,21,2,146,31,0,2,7,9,25,31,0,2,21,2,147,31,0,1,8,25,0,24,15,267,31,0,2,7,31,0,1,10,25,31,0,1,25,21,1,5,0,17,5,0,30,0,7,0,41,21,0,1,0,22,5,0,6,0,50,6,8,7,5,0,33,0,29,7,31,0,1,6,25,21,0,1,0,34,0,12,7,21,0,2,6,0,31,0,8,7,5,0,35,0,6,7,0,45,6,22,0,3,11,14,21,0,2,0,29,0,41,0,17,8,21,0,3,6,0,35,0,8,7,0,46,6,22,0,4,11,14,31,0,3,0,21,0,41,21,1,5,8,0,44,0,32,31,0,2,31,0,1,3,2,7,0,30,0,16,7,0,20,10,0,39,15,268,8,8,5,14,21,0,4,25,21,1,4,0,6,0,41,21,0,1,8,0,40,21,2,5,8,21,1,3,6,0,12,0,41,0,45,8,0,44,31,0,1,0,6,0,46,6,0,39,21,1,5,8,8,5,25,0,32,0,45,7,0,13,31,0,4,21,3,29,31,0,1,7,31,0,2,17,10,25,31,0,1,14,21,1,9,0,17,5,0,30,0,45,7,5,25,21,0,2,21,3,9,5,22,0,3,11,14,31,0,2,0,42,0,16,8,22,0,4,11,14,21,1,5,0,35,0,8,7,0,46,6,22,0,5,11,14,21,0,5,0,12,0,46,6,0,8,0,47,6,0,6,21,0,3,6,21,0,5,21,2,4,15,269,8,5,22,0,6,11,14,0,46,0,7,21,1,6,6,0,17,5,0,30,0,8,0,41,21,0,5,8,0,39,0,6,0,41,21,0,5,8,0,42,31,0,6,8,8,7,5,0,35,0,8,7,0,46,6,0,5,0,104,6,14,31,0,3,0,24,0,44,0,8,0,41,21,0,1,0,39,21,3,9,8,8,8,5,22,0,7,11,14,31,0,1,0,42,0,16,8,22,0,8,11,14,21,1,7,21,3,28,21,1,5,6,22,0,9,22,0,10,4,2,11,14,21,0,10,0,12,0,46,6,0,8,0,47,6,0,6,31,0,7,6,31,0,10,21,2,4,15,270,8,31,0,9,6,22,0,11,11,14,31,0,11,0,41,0,8,0,41,31,0,5,8,8,22,0,12,11,14,15,271,22,0,13,11,14,21,1,9,0,17,5,0,30,0,8,0,41,21,1,7,0,35,0,8,7,0,46,6,8,31,0,13,9,7,5,25,21,0,1,21,3,12,0,46,6,0,35,0,8,7,0,46,6,22,0,3,11,0,12,0,46,6,22,0,4,11,14,21,0,1,0,15,5,22,0,1,12,14,0,46,22,0,5,11,14,0,45,22,0,6,11,14,21,0,1,0,30,0,0,0,39,15,272,8,7,5,14,21,0,4,0,8,0,47,6,0,6,21,0,5,6,22,0,7,11,14,15,273,22,0,8,11,14,0,45,22,0,9,11,22,0,10,11,14,15,274,22,0,11,11,14,21,0,1,0,45,0,45,15,275,3,2,0,43,0,30,0,12,0,41,0,11,8,7,0,35,0,8,7,0,46,10,8,3,2,0,43,21,1,3,0,12,21,0,6,6,0,8,21,0,7,0,12,0,51,6,6,8,5,22,0,12,11,14,31,0,1,31,0,8,31,0,11,3,2,0,43,31,0,12,8,5,25,31,0,1,14,21,1,9,0,17,5,0,30,21,1,10,0,8,21,1,4,6,0,21,0,41,21,1,4,8,0,24,3,2,0,43,21,2,2,8,5,7,5,25,21,1,6,21,3,29,21,0,1,0,15,5,0,42,0,16,8,0,42,21,3,74,0,7,0,46,10,0,41,21,0,2,0,15,16,0,42,0,16,8,8,8,7,5,22,0,3,11,14,31,0,1,15,276,15,277,3,2,0,43,0,15,0,39,0,22,8,0,20,0,52,10,0,40,0,8,8,8,31,0,2,6,25,21,0,1,21,2,7,31,0,2,17,0,30,0,6,7,21,1,4,0,30,31,0,1,0,42,0,8,8,7,5,6,22,1,4,12,25,31,0,1,3,1,3,0,0,26,3,2,0,43,0,25,21,3,4,9,8,21,1,6,6,22,1,6,12,25,31,0,1,21,2,8,21,1,6,8,25,31,0,1,0,15,5,22,0,3,11,0,22,5,0,6,0,50,6,0,6,22,1,3,13,14,31,0,3,0,30,21,1,4,7,5,25,15,278,22,0,3,11,14,21,3,11,21,0,3,15,279,3,2,0,43,0,24,0,39,0,35,21,3,72,7,8,8,3,2,0,43,0,24,0,16,0,45,10,21,3,4,9,8,22,0,4,11,14,31,0,2,31,0,1,3,2,21,0,4,0,45,6,22,0,5,11,14,21,1,3,0,17,5,0,30,15,280,7,5,22,0,6,11,14,31,0,6,0,30,0,16,0,41,0,46,8,7,21,3,11,0,30,0,16,0,41,0,45,8,7,10,0,32,21,3,70,7,3,2,0,43,31,0,3,0,12,21,0,5,6,8,5,25,21,0,1,21,3,8,5,22,0,1,12,14,21,0,1,0,14,5,22,0,3,11,14,31,0,1,0,15,5,22,0,4,11,0,22,5,22,0,5,11,14,21,1,3,0,30,0,21,0,41,0,70,8,7,5,0,35,21,3,117,7,0,46,6,0,5,0,139,6,14,21,1,3,0,3,21,0,5,6,22,0,6,11,14,21,1,3,0,4,21,0,6,6,0,33,0,29,7,22,1,4,13,14,0,45,22,0,7,11,14,0,32,21,1,4,7,0,16,15,281,10,22,0,8,11,14,21,3,74,0,5,0,140,10,22,0,9,11,14,31,0,6,0,34,31,0,4,0,42,0,16,8,21,0,8,0,24,15,282,31,0,8,10,3,3,0,43,0,11,0,41,0,47,8,8,7,31,0,5,0,17,5,6,0,15,31,0,3,6,25,21,0,1,0,34,0,25,0,12,21,0,1,31,0,5,5,10,0,44,31,0,4,8,7,31,0,1,0,22,5,0,17,5,6,25,31,0,1,0,15,0,39,0,32,21,2,12,7,0,16,21,0,2,19,21,1,6,31,0,0,0,41,21,0,2,0,6,0,46,17,8,8,8,0,15,0,14,10,21,1,5,3,2,0,43,21,2,12,0,22,5,0,23,31,0,2,17,8,5,25,31,0,1,22,2,4,12,0,33,0,16,7,21,2,6,6,22,2,5,12,14,0,50,22,2,3,12,25,21,1,5,22,0,3,11,14,31,0,1,21,1,6,22,1,5,13,14,31,0,3,25,31,0,4,31,0,1,31,0,2,17,25,31,0,1,22,0,3,11,14,15,283,25,31,0,1,22,0,3,11,14,15,284,25,31,0,1,0,17,5,0,30,0,32,31,0,4,0,1,5,7,7,5,25,21,0,1,21,3,12,0,46,6,22,0,3,11,0,35,0,8,7,22,1,6,13,14,0,15,0,41,31,0,3,0,26,31,0,2,0,19,16,21,2,2,0,7,0,46,6,0,44,0,24,0,7,31,0,1,0,22,5,10,0,18,0,45,10,8,16,3,1,6,8,22,1,7,12,25,21,1,6,0,8,31,0,2,17,21,1,5,5,0,33,0,26,7,0,26,3,2,0,43,21,1,3,8,31,0,1,6,25,21,0,1,0,26,31,0,1,0,22,5,0,7,31,0,2,17,0,17,0,39,0,30,0,46,7,8,5,6,25,31,0,1,0,30,0,6,7,31,0,2,0,30,31,0,4,0,42,0,8,8,7,16,17,25,21,0,1,0,46,0,42,0,12,8,0,7,0,46,10,0,44,21,1,5,21,0,2,7,0,41,0,17,8,8,21,1,7,6,21,1,5,31,0,2,0,8,21,1,7,17,7,22,1,6,13,14,0,46,22,1,7,12,14,31,0,1,0,22,5,25,21,0,2,0,8,22,1,7,13,14,31,0,2,25,31,0,1,14,0,46,22,1,9,12,25,21,1,4,0,28,21,1,3,6,22,0,3,11,0,26,22,1,10,13,14,31,0,3,0,35,0,8,7,21,1,7,6,0,12,0,41,0,46,8,0,7,0,46,10,0,44,15,285,8,5,14,21,0,1,0,15,5,0,42,0,16,8,22,0,4,11,14,21,1,9,0,24,0,44,15,286,8,31,0,1,6,14,21,1,6,0,15,21,1,10,6,0,30,21,0,4,7,5,25,0,46,0,7,21,2,3,6,15,287,5,0,33,0,29,7,21,1,3,6,0,26,21,1,6,3,1,6,0,31,0,8,7,5,21,3,57,5,22,0,3,11,14,31,0,2,0,24,0,34,15,288,7,31,0,3,10,0,35,0,30,0,6,7,7,9,0,40,0,30,0,6,7,8,21,1,4,6,0,46,0,42,0,12,8,0,7,0,46,10,0,44,0,33,0,17,0,15,21,1,5,10,0,42,0,30,0,6,7,8,7,8,21,1,6,6,0,33,0,29,7,31,0,1,0,15,5,6,25,21,1,5,0,26,31,0,2,17,0,26,21,1,4,6,0,33,0,15,7,3,0,6,25,21,0,2,0,22,5,0,20,0,45,6,0,5,0,173,6,14,21,0,2,0,22,5,0,17,5,0,34,0,20,0,41,0,45,8,0,42,0,8,8,7,31,0,2,6,25,21,2,7,0,7,31,0,1,6,0,17,5,0,30,21,2,6,0,1,5,7,5,0,26,22,2,6,13,14,21,2,7,25,31,0,1,0,22,0,42,0,21,8,0,44,0,33,0,26,7,0,42,31,0,0,8,8,31,0,2,17,25,31,0,1,14,0,45,22,1,3,12,14,21,2,13,21,2,7,0,34,0,6,7,31,0,4,6,7,22,1,2,12,25,21,3,76,0,20,21,0,1,0,18,0,45,6,10,0,45,3,2,0,16,31,0,1,0,13,0,45,6,0,8,31,0,2,17,6,25,0,45,21,1,3,5,14,31,0,1,21,2,11,21,1,2,21,2,9,31,0,2,17,7,5,25,0,45,21,1,3,5,14,31,0,2,21,2,11,0,32,31,0,1,7,0,42,21,1,2,8,7,5,25,0,45,21,1,3,5,14,31,0,1,21,2,12,21,1,2,7,31,0,2,17,25,0,25,31,0,1,31,0,4,10,25,21,0,1,21,3,6,5,0,5,0,190,6,14,21,0,1,0,11,22,1,4,13,14,31,0,1,0,18,22,1,3,13,25,31,0,1,0,17,5,0,26,21,1,5,6,0,31,31,0,2,7,5,25,31,0,1,31,0,5,5,31,0,4,31,0,2,17,25,31,0,1,21,3,164,5,25,31,0,1,21,3,164,5,25,31,0,1,0,35,21,2,3,7,5,22,0,3,22,0,4,4,2,11,14,31,0,3,22,2,4,12,14,31,0,4,0,8,22,1,4,13,25,21,1,4,0,40,31,0,1,8,25,21,1,8,0,42,31,0,1,0,41,21,1,4,8,8,25,31,0,1,0,42,21,1,12,8,22,0,3,11,14,0,46,0,42,0,21,8,0,44,15,289,8,22,0,4,11,14,0,50,21,0,4,0,46,0,6,21,2,6,6,6,0,6,0,46,6,25,21,0,1,0,13,0,46,6,0,8,22,1,5,13,14,31,0,1,0,6,22,1,6,13,25,21,1,7,21,1,3,21,3,4,15,290,31,0,1,7,8,5,22,0,3,11,14,0,24,21,2,3,3,2,0,43,0,13,0,41,21,2,3,8,8,22,0,4,11,14,0,45,0,12,21,2,3,6,0,6,21,2,3,6,0,2,0,47,6,0,18,5,22,0,5,11,0,17,5,0,30,0,24,0,6,0,46,10,0,7,31,0,5,10,0,10,0,47,10,7,5,0,35,15,291,7,21,2,3,0,17,5,6,25,31,0,1,0,30,21,1,10,0,42,0,7,8,0,7,0,41,21,1,9,8,3,2,0,16,21,3,2,6,7,5,0,4,0,41,0,3,8,5,25,21,2,3,0,8,0,47,6,0,13,21,0,1,0,35,0,11,7,5,22,1,10,12,0,7,31,0,1,0,35,0,18,7,5,22,1,9,12,6,6,25,31,0,1,14,21,2,4,21,2,9,3,2,0,30,0,17,0,30,0,8,0,41,21,2,6,8,7,9,7,5,22,0,3,22,0,4,4,2,11,14,31,0,4,0,30,15,292,7,5,25,21,0,2,21,4,33,5,21,4,57,5,22,0,3,11,14,31,0,1,21,4,32,31,0,2,0,29,21,0,3,17,6,0,15,5,0,30,0,46,0,42,0,7,8,0,18,0,45,10,7,5,0,33,0,29,7,31,0,3,6,22,0,4,11,14,0,7,0,41,0,46,8,0,8,0,41,21,2,4,0,42,0,7,8,8,0,7,0,25,10,3,2,0,16,21,3,2,6,22,0,5,11,14,21,2,9,0,17,5,0,34,0,8,0,41,21,2,6,8,0,40,21,1,3,8,31,0,5,0,25,10,7,31,0,4,6,25,31,0,0,0,45,3,2,25,31,0,2,22,0,3,11,14,31,0,1,0,30,0,15,7,5,22,0,4,11,0,16,0,45,6,0,22,5,22,0,5,11,14,0,50,22,0,6,11,14,15,293,0,42,21,1,4,8,22,0,7,11,14,15,294,25,31,0,1,21,1,5,5,22,0,3,22,0,4,4,2,11,14,31,0,3,22,1,5,12,14,31,0,4,25,0,46,0,7,31,0,1,0,6,22,1,7,13,6,25,0,46,0,7,21,0,1,6,0,17,5,0,30,0,32,21,2,4,7,0,16,0,6,0,41,31,0,1,0,7,21,1,7,6,8,10,21,1,9,21,0,2,19,7,5,14,31,0,2,25,0,45,0,32,21,1,3,31,0,1,7,7,5,21,2,3,5,25,0,45,0,32,31,0,2,21,1,3,31,0,1,8,7,5,21,2,3,5,25,21,0,1,0,17,5,21,2,5,31,0,1,7,22,2,6,13,25,0,32,31,0,2,0,1,16,7,21,1,4,3,2,0,43,0,13,0,41,0,45,8,8,22,1,4,12,25,21,0,1,0,17,5,0,30,0,7,0,41,31,0,1,8,7,5,25,31,0,1,0,17,5,0,30,0,8,0,41,31,0,2,8,7,5,25,0,47,0,9,21,0,2,17,0,11,5,22,0,3,11,0,6,21,0,1,6,22,0,4,11,21,1,3,5,22,0,5,11,14,31,0,1,31,0,4,3,2,0,16,21,0,5,6,21,1,4,21,0,3,0,8,0,47,6,0,7,31,0,2,17,0,8,31,0,5,6,0,6,31,0,3,6,6,25,31,0,4,0,42,0,16,8,0,40,31,0,1,8,25,31,0,2,22,0,3,11,0,7,5,22,0,4,11,14,0,45,22,0,5,11,22,0,6,11,22,0,7,11,14,0,51,22,0,8,11,14,21,0,1,21,2,4,0,7,0,46,6,0,44,0,30,0,8,0,41,21,2,3,8,7,8,5,0,42,0,16,8,0,40,21,1,3,8,22,0,9,11,14,21,0,9,0,7,0,46,10,0,45,0,46,0,47,3,4,22,0,10,11,14,0,6,15,295,3,2,0,16,21,0,3,0,13,0,52,6,6,22,0,11,11,14,15,296,22,0,12,11,14,15,297,15,298,31,0,12,3,3,0,43,15,299,8,22,0,13,11,14,21,0,1,0,30,31,0,1,0,42,15,300,8,7,5,25,21,1,3,0,30,31,0,1,0,42,21,2,3,8,7,5,21,4,3,5,25,21,1,4,0,30,0,16,0,41,31,0,1,8,7,5,25,0,46,0,6,22,1,6,13,14,21,1,6,21,1,7,0,41,0,32,31,0,0,7,8,0,32,21,1,3,7,3,2,0,43,0,13,0,41,21,1,5,8,8,5,22,0,3,11,14,0,45,31,0,3,5,25,21,0,1,21,1,8,0,7,0,46,6,0,44,21,1,9,0,44,15,301,8,8,0,46,0,7,31,0,1,6,6,25,31,0,2,0,6,21,1,3,6,22,1,4,12,14,31,0,1,0,6,21,1,3,6,22,1,7,12,21,2,4,5,22,1,6,12,0,6,21,1,3,6,21,2,4,5,22,1,5,12,14,21,1,7,0,13,21,4,3,6,22,1,8,12,14,21,1,6,21,1,11,5,14,21,1,7,21,1,13,21,1,4,6,25,21,0,2,0,6,0,46,6,22,1,4,12,0,12,21,1,6,6,0,8,0,47,6,0,6,22,1,8,13,14,31,0,2,25,21,0,1,0,6,0,46,6,22,1,7,12,0,12,21,1,5,6,0,6,22,1,8,13,14,31,0,1,25,31,0,1,21,1,10,0,43,21,1,8,8,31,0,2,17,25,31,0,1,0,16,21,1,7,21,1,13,21,1,4,6,6,25,0,47,22,2,8,12,14,21,2,4,22,2,7,12,14,31,0,1,22,2,4,12,25]
 ,[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],provide[18],provide[19],runtime_0[13],runtime_0[14],runtime_0[15],runtime_0[16],provide[20],provide[21],provide[22],runtime_0[17],runtime_0[18],runtime_0[19],runtime_0[20],runtime_0[21],runtime_0[22],0,1,2,Infinity,-Infinity,-1,3,8,5,4,'∾','+','-','×','÷','⋆','¬','⌊','⌈','∨','∧','≠','=','>','≥','\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("∾𝕩: Elements of 𝕩 must all have the same rank"),str("∾𝕩: 𝕩 element rank must be at least argument rank"),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("𝕩: 𝕨 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]]],[0,0,6],[1,1,7],[2,1,8],[1,1,9],[0,0,10],[2,1,11],[0,0,12],[1,0,13],[1,1,14],[1,1,15],[0,0,16],[0,0,17],[1,0,18],[0,0,[[],[19]]],[1,1,20],[1,1,21],[1,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],[0,0,[[],[35]]],[1,1,36],[0,0,37],[0,0,[[],[38]]],[0,0,[[],[39]]],[0,0,40],[0,0,41],[0,0,[[],[42]]],[0,0,[[],[43]]],[0,1,44],[0,0,45],[0,0,[[],[46]]],[0,0,47],[0,0,48],[0,0,[[],[49]]],[2,1,50],[1,0,51],[1,0,52],[0,0,53],[0,0,[[],[54]]],[2,0,55],[0,0,56],[0,0,[[],[57]]],[0,0,58],[2,1,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,0,68],[0,1,69],[1,1,70],[0,0,71],[0,0,72],[0,0,73],[0,0,74],[0,0,[[],[75]]],[0,0,76],[1,0,77],[1,0,78],[0,0,[[],[79]]],[1,0,80],[0,0,81],[0,0,[[],[82]]],[0,0,[[],[83]]],[0,0,[[],[84]]],[1,1,85],[2,0,86],[2,0,87],[2,0,88],[0,0,[[],[89]]],[0,0,[[],[90]]],[0,0,[[],[91]]],[0,0,[[],[92]]],[0,0,[[],[93]]],[0,0,[[],[94]]],[0,0,[[],[95]]],[1,1,96],[2,0,97],[1,1,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]]],[0,0,107],[0,0,[[],[108]]],[0,0,109],[2,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],[1,1,122],[0,0,[[],[123]]],[0,0,[[],[124]]],[0,0,[[],[125]]],[0,0,[[],[126]]],[0,0,[[],[127]]],[0,0,[[],[128]]],[0,0,129],[0,0,[[],[130]]],[2,0,131],[0,0,132],[0,0,133],[0,0,134],[1,0,135],[1,0,[[],[136]]],[0,0,137],[0,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],[2,0,147],[0,0,[[],[148]]],[0,0,149],[0,0,[[],[150]]],[0,0,[[],[151]]],[0,0,152],[1,1,153],[0,0,154],[0,0,[[],[155]]],[0,0,156],[0,0,[[],[157]]],[0,0,158],[0,0,[[],[159]]],[0,0,160],[0,0,161],[0,0,[[],[162]]],[2,0,163],[0,0,[[],[164]]],[0,0,[[],[165]]],[0,0,166],[0,0,167],[1,0,[[],[168]]],[0,0,[[],[169]]],[1,0,170],[0,0,171],[1,0,172],[2,0,[[],[173]]],[0,0,174],[0,0,175],[0,0,[[],[176]]],[0,0,177],[0,0,178],[0,0,[[],[179]]],[1,0,[[],[180]]],[1,1,181],[0,0,[[],[182]]],[0,0,[[],[183]]],[0,0,[[],[184]]],[0,0,[[],[185]]],[0,0,[[],[186]]],[0,0,[[],[187]]],[0,0,[[],[188]]],[0,0,189],[0,0,190],[1,1,191],[0,0,192],[0,0,[[],[193]]],[0,0,[[],[194]]],[0,0,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],[2,1,206],[2,1,207],[1,1,208],[1,1,209],[1,1,210],[0,0,[[],[211]]],[0,0,212],[0,0,213],[0,0,214],[0,0,[[],[215]]],[0,0,216],[0,0,[[],[217]]],[0,0,[[],[218]]],[0,0,[[],[219]]],[1,1,220],[0,0,221],[0,0,[[],[222]]],[0,0,223],[1,0,224],[0,0,225],[0,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],[2,0,236],[0,0,[[],[237]]],[0,0,238],[0,0,239],[1,0,240],[0,0,241],[0,0,242],[1,0,243],[0,0,[[],[244]]],[0,0,245],[0,0,246],[1,0,247],[0,0,[[],[248]]],[0,0,[[],[249]]],[0,0,250],[0,0,251],[0,0,[[],[252]]],[0,0,253],[0,0,[[],[254]]],[0,0,255],[0,0,256],[1,0,257],[0,0,258],[0,0,259],[0,0,[[],[260]]],[0,0,261],[1,0,262],[0,0,263],[0,0,[[],[264]]],[2,0,265],[1,1,266],[1,1,267],[0,0,268],[0,0,269],[0,0,270],[0,0,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]]],[1,1,283],[2,1,284],[0,0,285],[0,0,[[],[286]]],[0,0,287],[0,0,[[],[288]]],[0,0,289],[1,0,290],[0,0,[[],[291]]],[0,0,292],[0,0,293],[0,0,294],[0,0,295],[0,0,[[],[296]]],[0,0,[[],[297]]],[0,0,298],[0,0,299],[0,0,300],[0,0,301]]
 ,[[0,184],[4073,3],[4081,3],[4085,3],[4098,3],[4110,3],[4119,3],[4125,2],[4154,3],[4186,2],[4203,4],[4265,5],[4301,3],[4308,5],[4366,4],[4432,3],[4487,3],[4498,4],[4563,9],[4632,5],[4709,5],[4776,4],[4832,8],[5004,8],[5161,3],[5206,3],[5255,3],[5372,6],[5457,3],[5481,7],[5595,3],[5657,4],[5728,6],[5792,3],[5832,5],[5909,3],[5926,14],[6106,3],[6152,3],[6172,3],[6189,4],[6247,4],[6323,5],[6397,3],[6456,0],[6467,4],[6547,3],[6557,3],[6564,3],[6578,3],[6586,3],[6624,5],[6661,5],[6688,3],[6692,3],[6706,16],[7001,3],[7026,3],[7051,3],[7078,3],[7137,4],[7237,7],[7434,7],[7480,14],[7704,5],[7783,3],[7791,6],[7818,5],[7839,6],[7866,11],[8199,9],[8356,4],[8432,7],[8544,7],[8661,3],[8769,4],[8831,8],[8943,8],[9017,7],[9079,9],[9237,9],[9385,4],[9496,8],[9710,3],[9754,3],[9891,2],[9912,14],[10037,9],[10219,10],[10292,3],[10318,10],[10726,4],[10831,3],[10905,3],[10956,4],[11083,4],[11199,2],[11207,6],[11222,2],[11281,3],[11289,3],[11297,3],[11317,8],[11392,3],[11400,3],[11408,3],[11416,3],[11424,3],[11432,3],[11443,3],[11464,7],[11505,6],[11724,4],[11824,3],[11867,5],[12005,3],[12052,3],[12078,3],[12111,3],[12155,3],[12203,3],[12215,3],[12288,2],[12314,4],[12350,3],[12365,3],[12394,3],[12409,3],[12427,3],[12441,3],[12451,3],[12503,6],[12531,3],[12559,3],[12567,3],[12575,5],[12610,12],[12783,3],[12794,3],[12814,3],[12834,3],[12845,3],[12856,3],[12871,7],[12944,6],[12990,3],[13008,3],[13015,6],[13050,10],[13227,4],[13283,11],[13484,4],[13551,3],[13576,2],[13591,3],[13618,7],[13759,3],[13788,3],[13798,3],[13817,3],[13827,3],[13836,3],[13846,3],[13863,11],[13936,6],[14039,8],[14117,3],[14125,3],[14167,7],[14193,9],[14439,5],[14455,6],[14577,5],[14610,6],[14639,3],[14649,3],[14659,4],[14698,4],[14721,3],[14729,3],[14754,6],[14850,2],[14900,8],[15081,11],[15286,3],[15345,3],[15372,3],[15389,3],[15406,8],[15588,3],[15602,3],[15633,2],[15667,3],[15702,3],[15723,3],[15744,5],[15815,3],[15835,8],[16065,3],[16133,3],[16163,3],[16194,3],[16228,5],[16295,3],[16304,3],[16317,3],[16321,3],[16329,3],[16339,2],[16353,2],[16368,6],[16462,3],[16472,3],[16479,9],[16613,3],[16639,3],[16657,3],[16681,3],[16702,3],[16713,3],[16726,2],[16730,3],[16766,5],[16868,3],[16915,5],[16938,3],[16955,14],[17239,13],[17436,3],[17479,4],[17562,3],[17598,3],[17627,3],[17638,4],[17674,7],[17811,10],[18001,6],[18036,3],[18101,3],[18129,4],[18152,5],[18163,4],[18174,4],[18185,5],[18205,4],[18280,3],[18313,3],[18343,5],[18368,3],[18434,3],[18448,3],[18459,5],[18558,4],[18687,3],[18711,3],[18757,3],[18790,3],[18819,5],[18851,3],[18887,3],[18913,3],[18941,3],[18963,5],[18973,3],[19006,3],[19026,6],[19041,2],[19049,2],[19057,5],[19095,3],[19105,3],[19121,5],[19172,3],[19197,6],[19306,3],[19346,3],[19387,5],[19437,6],[19574,3],[19582,8],[19639,5],[19668,3],[19683,3],[19733,2],[19751,3],[19772,3],[19790,3],[19819,3],[19838,3],[19857,6],[19936,5],[19951,14],[20115,3],[20136,3],[20152,4],[20208,3],[20240,3],[20323,3],[20357,3],[20386,3],[20403,3],[20420,3]]
);

let rtAssert = runtime[42] = 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[42] = assertFn("Compiler");
let compgen = run(
  [15,1,25,31,0,1,22,0,3,22,0,4,22,0,5,4,3,11,14,0,58,0,0,0,87,6,22,0,6,11,14,31,0,3,31,0,4,31,0,5,21,0,6,0,21,0,93,6,0,94,0,95,0,96,0,97,0,98,0,99,0,20,0,60,0,50,3,2,6,0,43,0,33,7,0,59,6,0,100,0,58,0,25,5,0,0,0,88,6,0,61,22,0,7,11,0,25,5,0,45,0,0,7,0,102,6,0,20,5,0,42,0,21,7,0,101,6,0,62,0,0,0,87,6,0,21,0,105,6,0,21,0,104,0,24,0,59,6,6,0,21,0,103,6,0,106,3,15,0,44,0,13,7,0,11,0,51,0,22,8,0,21,10,5,22,0,8,22,0,9,4,2,11,14,21,0,9,0,49,0,0,7,0,27,0,63,10,0,53,0,42,0,44,0,22,7,7,8,5,22,0,10,22,0,11,22,0,12,22,0,13,22,0,14,22,0,15,22,0,16,22,0,17,22,0,18,22,0,19,22,0,20,22,0,21,22,0,22,22,0,23,22,0,24,4,15,11,14,0,34,0,53,0,1,8,0,12,0,9,0,15,0,52,0,63,8,10,0,34,0,52,0,64,8,10,22,0,25,11,14,21,0,13,0,34,5,22,0,26,11,14,0,65,0,1,0,53,0,22,8,5,0,0,21,0,19,6,22,0,27,11,14,21,0,19,0,34,5,0,0,0,66,6,22,0,28,11,14,0,13,0,11,0,64,10,0,42,0,30,7,0,107,10,0,53,0,21,8,22,0,29,11,14,15,2,22,0,30,11,14,15,3,21,0,8,7,22,0,31,11,14,21,0,20,0,34,5,22,0,32,11,0,0,0,64,6,22,0,33,11,14,0,64,0,68,0,69,0,59,0,59,0,70,0,59,0,63,3,2,0,71,0,63,0,65,0,72,3,2,0,30,5,0,8,5,3,10,0,41,31,0,9,7,0,23,0,13,10,0,53,0,42,0,44,0,20,7,7,8,5,0,21,5,0,42,0,21,7,0,67,6,22,0,34,11,14,0,2,0,49,0,6,7,9,22,0,35,11,14,21,0,35,0,52,0,13,0,50,0,25,8,8,22,0,36,11,14,21,0,35,0,52,0,13,0,50,0,25,8,0,0,0,64,10,8,22,0,37,11,14,0,18,0,30,0,10,10,0,42,0,21,7,0,30,0,21,10,0,64,10,22,0,38,11,14,15,4,22,0,39,11,14,15,5,22,0,40,11,14,15,6,22,0,41,11,14,15,7,22,0,42,11,25,31,0,1,0,11,5,0,44,15,8,7,31,0,4,6,0,21,5,25,21,1,30,21,1,29,0,52,0,108,8,0,109,0,19,3,3,7,0,42,0,40,7,0,63,10,22,0,2,11,14,21,0,1,0,53,0,33,8,0,53,0,17,0,57,0,18,0,30,0,13,10,0,50,31,0,2,8,8,8,0,18,0,19,10,22,0,3,11,14,21,0,1,0,31,5,22,0,4,11,14,0,19,0,31,31,0,1,0,33,21,0,4,6,10,0,6,0,64,10,0,42,0,1,7,0,64,10,0,42,0,33,7,31,0,4,10,31,0,3,0,19,10,25,31,0,2,22,0,3,22,0,4,4,2,11,14,0,89,0,14,21,0,1,6,22,0,5,11,14,0,90,0,14,21,0,1,6,22,0,6,11,0,9,0,52,0,26,0,52,0,63,0,63,3,2,8,8,5,0,30,5,22,0,7,11,14,0,91,0,14,21,0,1,6,22,0,8,11,0,30,5,22,0,9,11,14,21,0,7,21,0,9,0,24,0,59,6,21,0,5,0,30,5,3,3,0,21,5,22,0,10,11,0,31,5,22,0,11,11,14,21,0,10,0,33,21,0,11,6,22,0,10,12,14,31,0,7,0,0,0,68,6,31,0,9,0,24,0,64,6,0,64,0,21,21,1,6,0,14,21,0,1,6,6,0,30,5,0,30,0,52,21,0,5,0,49,0,0,7,5,0,21,0,63,6,0,53,0,33,0,50,0,27,0,53,0,1,8,8,8,8,5,3,3,0,21,5,0,33,31,0,11,6,22,0,12,11,14,0,19,0,34,0,59,10,0,14,0,63,10,0,57,15,9,8,22,0,13,11,14,0,30,0,52,21,0,12,0,31,21,0,10,6,0,44,0,63,7,0,21,0,64,10,21,0,13,0,13,0,53,0,21,8,10,0,23,0,13,10,5,8,0,46,0,30,7,9,0,23,21,0,1,0,13,5,10,22,0,14,11,14,31,0,10,21,0,14,5,22,0,15,11,14,31,0,12,31,0,14,5,22,0,16,11,14,21,0,16,0,10,21,0,15,6,22,0,17,11,0,49,0,13,7,0,64,6,22,0,18,11,14,21,0,18,0,11,31,0,16,6,0,9,21,0,8,0,10,21,0,6,6,6,0,47,0,10,7,0,57,15,10,8,5,14,0,92,0,14,21,0,1,6,0,9,21,0,18,6,22,0,19,11,14,31,0,6,0,9,21,0,15,6,0,27,5,0,10,21,0,19,6,0,30,5,22,0,20,11,14,21,0,20,31,0,19,0,53,0,33,8,0,2,0,87,0,1,0,92,6,10,0,1,21,0,1,0,53,0,33,8,10,5,22,0,21,11,14,21,0,8,0,9,22,0,15,13,0,26,5,0,9,21,0,8,6,22,0,22,11,0,12,22,0,18,13,14,31,0,17,0,9,31,0,8,6,0,49,0,13,7,5,0,11,0,64,0,53,0,21,8,0,51,0,2,0,52,0,49,0,0,7,8,8,0,18,10,31,0,22,0,27,5,0,12,31,0,15,6,22,0,23,11,6,0,42,0,1,7,0,64,6,0,42,0,39,7,21,0,1,6,22,0,24,11,14,21,0,18,0,30,5,22,0,25,11,14,21,0,18,0,27,0,64,6,0,30,5,0,23,0,52,0,13,8,21,0,25,6,22,0,26,11,14,21,0,25,31,0,5,0,53,0,33,8,0,2,0,1,10,21,0,26,6,0,1,22,0,26,13,14,31,0,1,0,33,21,0,25,6,21,1,31,5,22,0,27,11,14,21,1,21,21,1,25,21,0,27,6,0,26,5,0,12,21,1,20,0,34,5,0,14,21,0,27,6,6,22,0,28,11,14,21,1,28,0,14,21,0,27,6,22,0,29,11,14,21,1,23,0,34,0,51,0,42,0,1,7,0,22,0,18,10,8,21,1,20,6,21,1,25,21,0,27,6,0,11,31,0,28,6,0,10,21,0,29,6,22,0,30,11,0,11,0,52,0,27,8,5,22,0,31,11,14,21,1,22,0,47,0,0,7,5,0,0,0,59,6,0,14,21,0,27,6,22,0,32,11,14,21,1,23,0,34,5,0,14,21,0,27,6,22,0,33,11,14,21,0,32,0,12,21,0,30,6,0,18,0,30,0,10,10,0,26,0,30,0,19,10,0,64,10,0,11,0,30,10,21,0,31,6,0,47,0,10,7,0,57,15,11,8,5,14,21,0,27,0,30,21,0,31,6,0,42,0,1,7,21,1,22,0,34,5,6,0,42,0,3,0,50,0,5,8,7,21,1,7,6,0,2,21,0,29,0,30,21,0,31,6,0,8,5,6,22,0,34,11,14,21,1,22,0,34,5,0,0,21,1,7,6,0,16,21,0,27,6,0,9,21,0,30,6,0,2,21,1,7,6,0,1,22,0,27,13,14,21,0,30,0,26,5,0,12,21,0,33,6,0,47,0,10,7,0,57,15,12,8,5,14,21,0,33,0,10,0,52,0,27,8,5,0,13,22,0,31,13,14,31,0,33,0,30,21,0,31,6,0,19,0,0,0,8,0,53,0,2,8,10,0,63,0,16,21,0,34,6,0,2,0,68,6,6,22,0,35,11,0,11,0,63,6,22,0,36,11,14,21,0,36,0,8,5,0,21,0,63,6,0,33,21,0,31,0,49,0,0,7,5,6,0,9,21,0,30,6,22,0,37,11,0,12,21,0,30,6,22,0,38,11,14,21,0,30,0,2,21,0,27,6,0,21,0,52,0,63,8,0,30,21,0,37,0,21,0,63,6,0,26,0,53,0,10,8,5,0,11,21,0,32,0,21,0,63,6,6,10,0,51,21,1,40,8,21,0,26,6,22,0,39,11,14,31,0,34,0,30,31,0,36,6,0,14,0,52,0,68,8,0,53,0,9,8,0,0,0,19,10,21,0,38,0,11,0,52,0,26,8,5,0,42,0,30,7,21,0,32,6,6,22,0,40,11,14,21,0,37,0,12,21,0,31,6,0,49,0,0,7,5,0,2,21,0,32,0,12,21,0,38,6,6,22,0,41,11,0,11,0,52,0,49,0,6,7,0,27,9,8,5,22,0,42,11,0,42,0,30,7,21,0,29,6,22,0,43,11,14,21,0,31,22,0,44,11,0,9,31,0,37,6,0,10,21,0,42,6,22,0,31,12,14,21,0,29,0,30,21,0,31,6,0,8,5,0,42,0,30,7,22,0,35,13,0,30,0,52,0,11,0,52,0,63,8,8,5,0,14,0,64,6,22,0,45,11,14,21,0,43,0,21,0,63,6,0,33,21,0,41,6,0,11,0,52,21,0,42,8,0,10,0,13,0,52,21,0,29,8,10,5,0,9,21,0,32,0,12,31,0,38,6,6,0,47,0,10,7,0,57,15,13,8,5,14,31,0,42,0,11,21,0,29,6,0,30,5,21,0,27,0,53,0,33,8,0,12,21,1,22,0,34,5,10,0,11,21,0,45,10,0,53,0,19,0,47,0,10,7,9,0,57,15,14,8,8,5,14,31,0,43,0,8,5,0,2,0,52,0,49,0,0,7,8,5,0,21,0,63,6,0,42,0,1,7,0,64,6,0,33,22,0,41,13,14,21,1,8,0,33,21,0,27,6,0,39,31,0,41,6,0,39,0,68,0,21,31,0,45,6,6,0,34,0,54,0,21,0,52,21,0,4,8,8,5,22,0,46,11,14,31,0,18,0,27,5,0,49,0,0,7,5,0,33,31,0,23,0,30,5,0,21,31,0,20,6,6,0,21,31,0,29,0,12,21,0,31,6,0,30,5,0,33,0,52,0,32,8,31,0,35,6,6,22,0,47,11,14,31,0,39,31,0,21,31,0,24,3,3,0,21,31,0,46,6,22,0,48,11,14,21,0,48,0,44,0,35,7,5,22,0,49,11,0,42,0,44,0,30,0,52,0,49,0,6,7,0,27,0,59,10,0,12,0,19,10,8,7,7,22,0,48,13,14,21,0,48,0,34,0,52,0,64,8,0,54,31,0,3,8,5,22,0,48,12,14,21,1,23,21,1,25,21,0,27,6,0,10,21,0,30,6,0,8,5,22,0,50,11,14,31,0,44,0,10,21,0,50,6,0,42,0,30,7,22,0,26,13,14,31,0,30,0,26,0,53,0,12,8,5,0,10,21,0,50,6,0,42,0,30,7,22,0,25,13,14,21,0,27,0,33,0,52,31,0,47,8,0,54,21,0,48,0,44,0,13,7,5,22,0,51,11,0,27,21,1,33,6,0,49,0,0,7,5,0,0,31,0,49,6,0,21,5,0,24,0,52,0,13,8,31,0,4,6,8,5,0,30,31,0,50,0,10,21,0,31,6,6,22,0,27,12,14,21,1,13,0,34,0,53,0,1,8,0,2,21,1,25,10,21,0,27,6,0,1,22,0,27,13,14,21,1,26,0,14,21,0,27,6,0,42,0,21,7,0,13,0,21,10,0,64,6,0,30,5,0,24,0,64,6,0,24,0,59,6,22,0,52,11,0,44,0,64,7,5,0,49,0,13,7,5,22,0,53,11,14,21,0,27,0,33,21,0,53,0,1,21,0,52,6,6,0,0,0,52,21,0,53,8,0,42,0,37,7,21,1,16,0,34,5,0,0,0,69,0,65,3,2,6,10,0,10,21,1,14,0,53,21,1,25,8,10,5,0,26,0,53,0,10,8,5,0,12,31,0,53,6,0,42,0,30,7,31,0,52,6,22,0,54,11,14,21,1,26,0,13,21,0,27,6,0,33,0,52,31,0,54,8,0,54,0,44,0,64,7,8,5,0,42,15,15,7,22,0,27,13,14,31,0,51,0,23,0,68,6,0,47,0,0,7,5,0,22,21,1,33,6,21,1,25,21,0,27,6,0,10,21,1,28,0,14,21,0,27,6,6,22,0,55,11,14,0,63,0,21,21,1,34,6,0,33,21,0,27,0,5,21,1,33,6,6,0,30,0,52,31,0,55,8,0,54,31,0,40,8,5,22,0,56,11,14,21,0,27,0,15,0,52,0,0,0,52,0,69,8,8,0,0,0,65,10,0,2,0,65,0,53,0,22,8,21,1,25,0,19,10,10,21,1,19,0,34,5,6,0,0,22,0,27,13,14,21,0,27,0,14,0,2,0,58,10,0,0,0,11,10,21,1,32,6,0,1,22,0,27,13,14,31,0,27,31,0,56,31,0,48,21,0,26,21,0,25,3,5,25,15,16,22,0,3,11,14,21,1,30,21,1,29,0,52,0,115,8,0,116,21,1,8,0,53,0,33,8,0,117,3,4,7,22,0,4,11,14,21,1,20,0,47,0,25,0,53,0,0,8,7,5,0,21,0,118,0,47,0,1,7,5,0,0,21,1,22,0,34,5,6,6,0,44,21,0,1,0,53,0,14,8,7,5,22,0,5,22,0,6,22,0,7,22,0,8,22,0,9,4,5,11,14,21,1,22,0,34,5,0,11,21,0,1,6,0,10,21,0,5,6,0,8,5,0,10,21,1,28,0,14,21,0,1,6,6,21,0,2,21,0,3,21,0,1,0,53,0,30,8,0,50,31,0,4,8,8,5,14,21,0,1,0,14,0,63,6,22,0,10,11,0,10,21,0,5,6,22,0,11,11,0,10,21,0,6,6,22,0,12,11,14,21,0,11,0,10,21,0,7,6,0,8,5,22,0,13,11,14,21,0,11,0,27,5,0,12,21,0,7,6,21,0,2,21,0,3,0,119,8,5,14,21,0,12,0,10,21,0,7,6,0,9,21,0,12,0,26,0,64,6,6,21,0,2,21,0,3,0,120,8,5,14,21,0,1,0,30,21,0,12,6,0,11,0,52,0,27,8,0,10,0,14,0,52,0,63,8,10,5,0,8,5,21,0,2,0,30,31,0,12,10,21,0,3,0,121,8,5,14,21,0,5,0,27,5,0,12,21,0,7,6,0,10,21,0,10,6,0,26,0,10,31,0,5,0,26,5,0,9,21,0,8,6,10,0,9,0,27,10,0,64,6,0,12,21,0,9,0,10,31,0,8,6,6,31,0,2,31,0,3,0,122,8,5,14,21,0,13,0,9,0,52,0,8,21,1,37,0,51,0,12,8,21,1,21,0,34,5,0,13,21,0,1,6,0,11,21,0,6,6,10,0,15,0,26,10,8,5,22,0,14,11,0,9,0,52,0,49,0,0,7,21,1,35,0,1,0,19,10,0,8,10,0,16,0,73,10,8,5,22,0,15,11,14,21,1,20,0,34,5,0,0,0,64,6,0,1,31,0,1,6,0,2,21,0,15,6,0,30,21,0,6,0,8,5,6,0,42,0,33,7,0,58,0,25,5,0,21,0,74,0,64,3,2,6,0,21,0,59,6,6,22,0,16,11,14,21,0,16,0,49,0,0,0,52,0,58,0,53,0,2,8,8,0,2,0,15,0,52,0,63,8,10,7,0,63,6,0,30,31,0,16,0,15,0,63,6,0,26,0,53,0,12,8,5,6,22,0,17,11,14,31,0,7,0,27,5,0,30,31,0,13,0,27,0,53,0,12,8,5,22,0,18,11,6,0,42,0,33,7,0,64,0,59,3,2,6,0,2,22,0,17,13,14,31,0,10,0,30,31,0,11,6,22,0,19,11,14,31,0,14,0,26,0,53,0,12,8,0,30,9,0,51,0,1,0,52,31,0,6,0,26,5,21,1,37,5,0,53,0,33,8,8,0,19,0,2,0,11,10,0,1,0,52,0,27,8,10,0,1,0,1,10,8,31,0,15,6,0,30,21,0,19,6,22,0,20,11,14,21,0,19,0,8,5,0,2,21,0,17,6,0,26,5,0,30,21,0,19,6,0,42,0,1,7,31,0,20,6,22,0,21,11,0,7,5,0,4,0,58,6,22,0,22,11,14,0,64,0,75,3,2,0,33,31,0,9,0,30,31,0,18,6,6,0,2,31,0,17,6,0,30,31,0,19,6,0,30,0,52,21,0,21,0,11,0,63,6,8,0,54,0,2,8,21,0,22,6,0,30,0,52,31,0,21,0,12,0,63,6,8,0,54,0,42,0,3,7,8,31,0,22,6,25,31,0,2,22,0,3,22,0,4,22,0,5,22,0,6,22,0,7,4,5,11,14,31,0,4,0,13,5,22,0,8,11,14,15,17,22,0,9,11,14,15,18,22,0,10,11,14,21,0,1,0,13,5,0,11,0,63,6,0,40,0,127,6,14,21,1,16,21,1,25,21,0,1,6,0,2,21,0,3,0,2,0,68,6,0,1,0,59,6,6,22,0,11,11,0,49,0,0,7,5,22,0,12,11,0,31,5,22,0,13,11,14,0,59,0,14,21,0,3,6,0,33,21,0,13,6,22,0,14,11,14,21,0,1,0,33,21,0,13,6,22,0,15,11,0,30,0,52,0,63,0,53,0,11,8,8,0,42,0,1,7,0,64,10,0,17,0,57,31,0,9,8,0,30,0,52,0,63,0,53,0,12,8,8,10,21,0,11,0,33,21,0,13,6,6,14,31,0,12,0,34,21,0,13,0,34,5,6,0,15,0,63,6,0,40,0,128,6,14,21,0,15,0,30,21,0,14,6,0,14,0,52,21,1,26,8,0,9,0,52,0,27,8,0,14,0,52,21,1,16,0,34,5,8,10,5,21,0,13,0,30,21,0,14,10,21,0,10,0,129,8,5,14,31,0,14,0,21,0,64,6,0,9,0,52,0,26,0,52,0,64,8,8,5,15,19,5,14,21,0,11,0,0,21,0,3,6,0,15,0,63,6,0,26,5,22,0,16,11,0,12,21,1,15,0,34,5,0,14,21,0,1,6,6,0,1,22,0,3,13,14,21,0,3,0,15,0,63,6,0,27,5,0,9,31,0,16,6,0,12,21,0,3,0,71,0,53,0,15,8,0,9,0,11,0,52,0,76,8,10,5,6,0,13,0,50,0,25,8,21,0,10,0,131,8,5,14,21,1,32,21,0,8,3,2,21,1,25,21,0,1,6,0,26,5,0,12,0,67,0,14,21,0,3,6,6,0,13,0,50,0,25,8,21,0,10,0,132,8,5,14,0,67,0,14,21,0,3,6,22,0,17,11,0,10,0,52,0,26,8,5,22,0,18,11,14,0,71,0,14,21,0,3,6,0,10,0,52,0,26,8,5,22,0,19,11,0,33,0,52,21,0,13,0,33,0,52,21,0,18,0,53,0,33,8,0,31,9,8,5,8,0,54,0,27,8,5,22,0,20,11,14,21,0,20,0,10,21,0,19,6,0,8,5,22,0,21,11,14,21,1,16,0,34,5,0,0,0,64,6,0,14,21,0,1,6,22,0,22,11,14,21,1,18,0,34,5,0,14,21,0,1,6,0,2,0,68,6,0,0,21,1,27,0,34,5,0,0,0,68,6,0,14,21,0,1,6,6,0,33,21,0,22,0,8,5,21,1,36,5,6,22,0,23,11,14,0,63,22,0,24,11,14,21,0,23,0,13,5,0,25,5,22,0,25,11,14,15,20,22,0,26,11,14,21,0,21,0,8,5,0,2,21,0,23,6,21,0,26,0,133,7,5,14,21,0,18,0,10,21,0,19,6,22,0,27,11,0,33,21,0,13,6,0,31,5,0,42,0,33,7,22,0,13,13,14,21,0,3,0,13,5,0,25,5,0,33,0,52,21,0,13,8,0,54,0,27,0,52,0,13,8,8,5,22,0,28,11,14,0,59,0,14,21,0,3,6,0,10,31,0,27,6,0,33,21,0,13,6,0,21,0,64,6,0,0,0,52,0,49,0,0,7,8,5,0,31,5,0,42,0,33,7,0,8,0,31,0,53,0,42,0,33,7,8,10,0,33,0,52,0,31,8,0,18,10,21,0,13,0,21,0,59,6,6,0,24,0,59,6,0,49,0,0,7,5,0,31,5,22,0,29,11,14,21,1,16,0,34,5,0,0,0,68,6,0,68,3,2,21,1,25,21,0,1,6,0,2,21,0,11,6,0,33,21,0,29,6,22,0,30,11,0,49,0,0,7,5,22,0,31,11,0,31,5,22,0,32,11,14,21,0,32,0,42,0,33,7,22,0,29,13,14,21,0,32,0,42,0,33,7,22,0,31,13,14,21,0,32,0,42,0,33,7,22,0,30,13,14,21,0,29,0,42,0,33,7,22,0,1,13,14,21,0,29,0,42,0,33,7,22,0,17,13,14,21,0,29,0,42,0,33,7,22,0,5,13,14,21,0,29,0,42,0,33,7,22,0,6,13,14,21,0,11,0,33,21,0,29,6,0,42,0,1,7,21,0,30,6,22,0,11,12,0,49,0,0,7,5,0,31,5,22,0,13,12,14,21,0,17,0,10,0,52,0,26,8,5,0,33,21,0,13,6,0,31,5,0,42,0,33,7,22,0,13,13,14,21,0,29,0,33,21,0,13,6,22,0,33,11,14,21,0,19,0,1,21,0,20,6,0,33,21,0,33,6,0,12,0,30,0,51,0,1,8,0,11,10,0,63,6,0,42,0,3,7,0,68,6,0,0,0,64,6,22,0,34,11,14,21,1,16,0,34,5,0,0,0,65,6,0,14,21,0,1,6,0,33,21,0,13,6,0,30,5,22,0,35,11,14,0,63,0,12,21,0,30,6,22,0,36,11,14,0,63,0,11,31,0,30,6,0,30,5,22,0,37,11,14,31,0,11,0,33,21,0,13,6,0,12,21,0,13,0,53,0,30,8,0,11,9,0,51,0,22,8,0,11,10,0,63,6,0,44,0,21,7,21,0,36,0,30,5,21,0,37,3,2,6,22,0,38,11,14,21,0,19,0,33,21,0,33,6,0,31,5,22,0,39,11,0,42,0,33,7,22,0,13,13,14,21,0,29,0,33,21,0,13,6,22,0,33,12,14,21,0,13,0,31,5,22,0,40,11,14,21,1,14,0,34,5,0,14,21,0,1,6,22,0,41,11,14,21,1,14,0,34,5,0,0,0,64,6,0,14,21,0,1,6,22,0,42,11,14,21,0,42,0,10,21,0,41,6,0,11,21,0,36,0,49,0,10,7,5,6,0,13,0,50,0,25,8,21,0,10,0,134,8,5,14,21,0,42,0,10,31,0,36,6,22,0,43,11,0,49,0,0,7,5,22,0,44,11,14,0,19,21,1,38,0,50,0,8,8,21,0,43,10,22,0,45,11,14,21,0,41,21,0,45,5,22,0,46,11,14,21,0,42,0,30,21,0,43,6,22,0,47,11,0,8,5,0,21,0,64,6,22,0,48,11,14,21,0,47,0,26,0,53,0,10,8,5,0,21,0,63,6,22,0,49,11,14,21,0,46,0,24,0,9,21,0,47,10,0,11,0,24,0,52,0,1,8,10,0,64,6,21,0,43,0,30,9,21,0,10,0,135,8,5,14,21,0,46,0,24,0,59,6,0,12,21,0,47,6,0,9,0,52,0,27,8,5,21,0,43,0,30,9,21,0,10,0,136,8,5,14,31,0,42,0,30,5,0,21,21,0,37,6,0,33,31,0,47,0,26,5,0,31,5,0,31,5,6,22,0,50,11,14,21,0,41,0,10,21,0,43,6,0,33,0,52,21,0,13,0,28,5,8,0,54,21,1,36,0,53,0,42,0,33,7,8,8,31,0,41,6,22,0,51,11,0,30,5,22,0,52,11,14,21,0,52,0,42,0,33,7,21,0,29,6,21,0,3,0,53,0,33,8,0,2,21,0,21,0,53,0,33,8,10,5,22,0,53,11,14,21,0,53,0,14,0,59,6,22,0,54,11,0,26,0,0,0,27,0,52,0,64,8,10,5,22,0,55,11,0,14,0,68,6,22,0,56,11,14,21,0,51,0,33,21,0,52,0,30,21,0,54,6,0,0,0,64,6,6,21,0,52,0,30,21,0,54,10,21,0,10,0,137,8,5,14,21,0,53,0,15,0,68,6,22,0,57,11,0,11,21,0,56,6,0,19,0,9,0,69,0,14,21,0,53,6,10,0,26,9,0,10,0,27,10,5,22,0,58,11,14,31,0,57,0,10,21,0,54,6,0,9,21,0,58,6,21,0,52,21,0,10,0,138,8,5,14,31,0,55,0,14,0,64,6,0,9,21,0,53,0,14,0,63,6,6,0,11,21,0,58,6,22,0,59,11,0,10,21,0,58,6,0,8,5,22,0,60,11,14,21,0,54,0,30,21,0,60,6,0,14,0,52,0,27,0,52,0,64,8,8,5,21,0,52,0,30,21,0,60,10,21,0,10,0,139,8,5,14,21,0,20,0,33,21,0,29,6,0,8,5,0,2,21,0,1,6,0,33,21,0,52,6,22,0,61,11,0,31,21,0,8,0,21,21,1,27,6,0,49,0,0,7,5,6,0,42,0,1,7,0,64,6,0,7,0,69,6,22,0,62,11,14,21,0,62,0,14,0,68,6,0,9,21,0,53,0,14,0,63,6,6,0,9,21,0,56,6,22,0,63,11,0,0,22,0,59,13,0,12,21,0,60,6,22,0,64,11,14,21,0,63,0,0,22,0,53,13,14,21,0,53,0,5,0,68,6,0,42,0,1,7,0,64,6,0,2,0,69,6,0,2,21,0,64,6,0,0,21,0,53,0,14,0,69,6,0,26,5,0,0,0,67,6,0,2,31,0,58,6,6,0,0,21,0,54,0,26,5,0,11,21,0,63,6,0,0,0,64,6,0,2,21,0,59,6,6,22,0,65,11,14,21,1,27,0,34,5,0,0,21,0,65,6,0,13,31,0,61,6,0,9,21,0,62,0,14,0,63,6,6,21,0,52,21,0,10,0,140,8,5,14,21,0,53,0,14,0,63,6,0,9,21,0,56,6,0,10,21,0,54,6,0,8,5,0,2,22,0,62,13,14,21,0,54,0,12,22,0,60,13,14,21,0,60,0,42,0,30,7,22,0,53,13,14,21,0,59,0,30,21,0,54,0,27,0,64,6,6,22,0,66,11,14,21,0,48,0,26,0,11,0,19,10,0,64,6,0,11,21,0,46,0,27,5,6,0,26,0,53,0,1,8,5,0,0,0,64,6,22,0,67,11,14,21,0,67,0,30,0,52,21,0,46,8,0,54,21,0,62,0,13,0,63,6,22,0,68,11,0,0,0,64,6,0,2,21,0,59,6,0,6,21,0,56,6,0,2,0,52,0,8,8,31,0,63,6,0,27,5,0,30,21,0,54,6,8,5,22,0,67,12,14,0,63,0,21,21,0,66,6,0,33,0,52,0,49,0,0,7,8,21,0,54,6,0,12,31,0,59,6,21,0,52,21,0,10,0,141,8,5,14,0,68,0,13,21,0,62,6,0,12,31,0,64,6,21,0,52,21,0,10,0,142,8,5,14,21,0,53,0,14,0,64,6,0,10,22,0,66,13,14,21,0,51,0,33,0,52,21,0,52,8,0,54,21,0,68,0,8,5,8,5,22,0,69,11,14,31,0,52,0,30,21,0,68,6,0,42,0,33,7,21,0,40,6,22,0,70,11,14,31,0,62,0,30,21,0,68,6,0,14,0,68,6,22,0,71,11,14,0,14,0,52,21,0,1,0,31,21,1,27,0,34,5,0,0,0,63,0,69,0,65,0,72,3,4,6,6,8,21,0,45,9,22,0,72,11,14,21,1,27,21,1,25,21,0,1,6,0,11,21,0,51,6,0,30,5,22,0,73,11,14,0,64,21,0,72,5,22,0,74,11,14,0,69,31,0,72,0,51,0,19,0,2,0,68,10,0,6,0,18,10,8,0,68,6,22,0,75,11,0,0,0,52,0,11,0,52,0,63,8,0,10,21,0,74,10,8,5,22,0,76,11,14,21,0,74,0,30,21,0,46,6,0,11,21,0,66,6,0,11,31,0,56,0,30,31,0,60,6,6,0,10,21,0,76,0,30,21,0,46,6,0,11,21,0,53,6,6,21,0,43,0,50,0,30,8,0,21,0,63,10,0,30,21,0,46,10,21,0,10,0,143,8,5,14,21,0,76,0,30,0,52,21,0,46,8,0,54,31,0,53,8,5,22,0,76,12,0,42,0,1,7,0,64,6,0,6,22,0,75,13,14,21,0,74,0,30,0,52,21,0,46,8,0,54,0,6,0,52,31,0,66,8,8,5,22,0,74,12,14,21,0,76,0,34,5,0,11,0,63,6,21,0,1,0,50,15,21,8,0,30,9,21,0,10,0,144,8,5,14,21,0,74,0,12,21,0,49,6,0,24,0,64,6,21,0,43,0,30,9,21,0,10,0,145,8,5,14,21,0,75,0,13,0,52,0,27,8,5,0,11,21,0,48,6,0,24,0,64,6,21,0,43,0,30,9,21,0,10,0,146,8,5,14,21,0,74,0,2,0,69,6,0,0,0,63,0,68,0,69,3,3,0,33,21,0,75,6,6,22,0,77,11,14,21,0,74,0,30,31,0,46,6,0,8,5,0,2,0,69,6,0,33,31,0,54,0,49,0,0,7,5,0,27,5,6,0,1,22,0,65,13,14,21,0,3,0,33,0,52,21,0,29,0,33,21,0,37,6,8,0,54,31,0,76,0,30,21,0,48,6,0,24,0,64,6,8,5,0,2,21,0,21,6,0,42,0,1,7,21,0,19,6,22,0,3,12,14,31,0,21,0,9,31,0,22,6,22,0,78,11,14,0,63,0,11,21,0,3,6,0,42,0,21,7,0,64,6,0,33,21,0,28,6,22,0,79,11,0,27,5,0,9,21,0,78,6,22,0,80,11,14,21,0,3,0,33,21,0,80,0,8,5,21,1,36,5,6,0,2,21,0,80,6,0,0,21,0,3,6,0,19,0,15,0,68,10,0,11,21,0,79,10,0,1,0,19,10,0,6,0,19,0,14,0,69,10,0,2,31,0,79,0,0,0,64,6,10,0,42,0,21,7,0,63,10,0,33,31,0,28,10,10,5,22,0,81,11,14,21,0,81,0,33,0,0,0,6,0,64,10,0,5,0,19,10,31,0,80,0,8,5,0,49,0,0,7,5,0,53,0,19,0,1,0,33,10,8,10,0,63,0,14,21,0,81,6,0,9,21,0,78,6,0,8,5,21,1,36,5,6,0,6,22,0,81,13,14,21,0,81,0,27,5,0,2,31,0,78,6,0,0,22,0,3,13,14,21,0,23,0,14,0,64,6,0,9,21,0,81,0,13,0,63,6,6,0,10,22,0,24,13,0,8,5,0,2,22,0,23,13,14,21,0,23,0,1,22,0,81,13,14,0,59,0,14,21,0,3,6,0,27,0,64,6,0,9,0,76,0,14,21,0,3,6,6,0,1,22,0,3,13,14,0,63,0,14,21,0,3,6,0,27,5,0,12,0,67,0,14,21,0,3,6,6,21,0,29,0,50,0,31,8,21,0,10,0,147,8,5,14,31,0,18,0,19,0,1,0,8,0,53,0,2,8,10,22,0,3,13,14,21,1,32,0,1,21,0,1,6,22,0,82,11,14,31,0,38,0,47,15,22,7,5,14,21,0,13,0,42,0,33,7,22,0,1,13,14,31,0,51,0,33,21,0,13,6,22,0,83,11,14,21,0,33,0,42,0,33,7,22,0,3,13,14,21,0,33,0,42,0,33,7,22,0,81,13,14,31,0,19,0,12,31,0,20,6,0,33,21,0,33,6,0,30,5,0,21,31,0,39,0,31,5,0,33,21,0,35,6,6,22,0,35,12,14,21,0,3,0,70,0,53,0,15,8,0,9,0,11,0,52,0,77,8,10,5,22,0,84,11,14,0,63,0,11,21,0,3,6,0,11,21,0,84,6,22,0,85,11,14,21,0,85,0,27,5,21,1,36,5,0,42,0,33,7,21,0,81,6,22,0,86,11,0,15,0,64,6,22,0,87,11,14,21,0,81,0,1,5,0,6,0,63,6,22,0,88,11,14,21,0,86,0,1,5,0,6,0,63,6,22,0,89,11,14,21,0,13,22,0,25,12,14,31,0,33,0,42,0,33,7,22,0,24,13,14,21,0,84,0,2,21,0,89,6,21,0,26,0,148,7,5,14,0,68,0,16,21,0,3,6,0,9,0,68,0,11,21,0,86,6,6,22,0,90,11,0,11,21,0,83,6,0,30,5,0,28,5,22,0,91,11,14,0,69,0,14,21,0,3,6,22,0,92,11,0,9,21,0,90,6,0,26,5,0,10,21,0,90,6,22,0,93,11,14,0,68,0,25,5,0,37,21,0,3,6,0,10,21,0,93,6,0,16,21,0,92,6,0,2,0,68,6,0,6,21,0,88,6,0,27,0,2,31,0,92,10,0,6,0,26,10,0,68,6,0,2,21,0,90,6,21,0,26,0,149,7,5,14,21,1,26,0,14,21,0,1,6,22,0,94,11,14,21,1,16,0,34,5,0,0,0,68,6,21,1,14,0,34,5,0,0,0,64,6,3,2,0,37,21,0,1,6,22,0,95,11,14,21,1,16,0,34,5,0,0,0,67,6,0,14,21,0,1,6,22,0,96,11,21,1,36,0,51,0,11,8,21,0,95,6,0,9,21,0,94,6,22,0,97,11,14,21,0,97,0,10,21,0,96,6,0,27,5,0,2,21,0,89,6,31,0,26,0,150,7,5,14,0,63,0,14,21,0,3,6,0,11,0,52,0,10,0,52,0,27,8,8,21,0,93,6,0,26,0,53,0,9,8,5,21,0,13,21,0,10,0,151,8,5,14,0,64,0,16,31,0,81,6,0,26,5,0,9,21,1,15,0,34,5,0,0,0,68,6,0,14,21,0,1,6,6,0,11,21,0,87,6,22,0,98,11,14,21,0,98,0,10,21,0,93,6,0,8,5,0,28,0,54,21,1,35,0,1,0,18,10,0,52,0,13,0,50,0,25,8,8,8,5,22,0,99,11,14,21,0,84,0,30,5,22,0,100,11,0,0,0,52,21,0,99,0,53,0,33,8,8,5,0,0,0,64,6,22,0,101,11,14,21,0,3,0,33,21,0,100,6,0,13,0,76,6,22,0,102,11,14,21,0,3,0,33,21,0,101,6,22,0,103,11,14,21,0,86,0,33,21,0,101,6,0,6,0,63,6,0,13,21,0,103,6,0,9,21,0,102,6,21,0,13,0,33,21,0,101,10,21,0,10,0,152,8,5,14,21,0,1,0,33,21,0,100,6,0,42,0,1,7,21,1,15,0,34,5,6,0,0,31,0,103,0,15,0,63,6,6,0,0,21,0,102,6,22,0,104,11,14,21,0,70,0,21,22,0,101,13,14,21,0,1,0,44,0,63,7,5,0,33,0,52,21,0,101,8,0,54,21,0,70,0,44,0,65,7,5,0,21,21,0,104,6,8,5,0,1,0,52,0,26,8,5,22,0,105,11,14,21,0,105,0,33,21,0,40,6,0,2,0,52,0,49,0,0,7,0,14,0,63,10,0,10,0,52,0,27,0,52,0,64,8,8,9,8,5,0,49,0,0,7,5,0,27,5,22,0,105,12,0,33,21,0,13,6,0,2,5,22,0,106,11,14,21,0,105,0,14,0,65,6,22,0,107,11,0,2,0,68,6,0,1,22,0,105,13,14,21,0,13,0,42,0,33,7,22,0,107,13,14,21,1,15,0,34,5,0,42,0,1,7,21,1,32,6,0,14,21,0,82,6,0,11,21,0,105,6,21,0,45,5,22,0,108,11,14,21,0,24,0,33,21,0,40,6,31,0,45,5,22,0,109,11,14,21,0,29,0,33,21,0,50,6,0,21,0,63,6,0,42,0,1,7,0,64,6,15,23,5,14,21,0,109,22,0,110,11,14,21,0,48,21,1,37,0,51,0,16,8,22,0,109,13,14,0,63,0,14,21,0,67,6,0,9,21,0,109,6,0,24,0,64,6,21,0,43,0,30,9,21,0,10,0,154,0,155,3,2,0,55,0,11,0,52,31,0,110,0,24,0,64,6,8,0,47,0,10,7,9,8,8,5,14,21,0,109,0,2,0,68,6,0,6,22,0,67,13,14,21,0,67,0,14,0,68,6,0,33,0,52,0,49,0,0,7,8,21,0,95,6,22,0,111,11,14,21,0,111,0,14,0,1,0,18,10,22,0,88,13,14,31,0,111,0,14,0,1,0,18,10,22,0,89,13,14,21,1,32,0,1,21,0,1,6,21,0,8,0,53,0,11,8,0,9,0,15,0,52,0,78,8,10,5,22,0,112,11,14,21,1,32,0,0,21,0,8,6,0,16,21,0,1,6,0,9,21,0,107,6,22,0,113,11,0,30,5,22,0,114,11,14,21,1,16,21,1,25,0,11,0,34,0,0,0,69,10,0,53,0,14,8,10,21,0,1,6,0,10,21,1,17,0,34,5,0,14,21,0,1,6,0,26,5,0,12,21,0,85,6,6,0,10,31,0,113,6,0,10,31,0,112,6,0,11,0,63,0,16,21,0,3,6,0,9,21,0,106,6,0,26,5,0,11,21,0,85,6,0,11,31,0,107,6,6,22,0,115,11,14,21,0,106,0,11,31,0,115,0,10,21,0,84,6,6,21,0,13,21,0,10,0,156,8,5,14,21,0,106,0,33,21,0,100,6,0,11,0,68,0,14,31,0,104,6,6,21,0,13,0,33,21,0,100,10,21,0,10,0,157,8,5,14,21,0,106,0,12,0,52,0,27,8,5,0,9,21,0,3,0,15,0,63,6,6,0,9,21,0,86,0,11,0,63,6,6,0,11,21,0,83,6,21,0,13,21,0,10,0,158,8,5,14,21,0,106,0,33,21,0,100,6,22,0,116,11,0,12,22,0,102,13,14,21,0,100,0,30,31,0,116,6,22,0,117,11,14,21,0,102,0,42,0,30,7,22,0,100,13,14,21,0,70,0,44,0,64,7,5,0,21,31,0,102,6,0,42,0,30,7,22,0,101,13,14,31,0,17,0,27,5,22,0,118,11,0,30,5,22,0,119,11,14,21,0,82,21,0,8,0,53,0,11,8,0,9,0,15,0,52,0,63,8,10,5,0,11,31,0,84,0,9,21,0,106,6,0,26,5,0,33,21,0,40,6,0,10,31,0,118,6,0,10,31,0,69,6,6,0,30,5,22,0,120,11,14,21,0,105,0,33,21,0,73,6,22,0,121,11,0,11,0,63,6,22,0,122,11,14,0,68,0,68,3,2,21,1,25,31,0,105,0,33,21,0,120,6,22,0,123,11,6,22,0,124,11,14,0,67,0,11,31,0,121,6,0,9,21,0,122,6,21,0,73,21,0,10,0,159,8,5,14,21,0,44,0,33,21,0,120,6,22,0,125,11,14,21,0,82,0,33,21,0,120,6,22,0,126,11,14,21,0,7,0,13,5,0,11,21,0,126,6,0,9,21,0,125,0,14,0,63,6,6,0,9,21,0,124,6,22,0,127,11,14,21,0,7,0,33,21,0,126,0,30,21,0,127,6,6,22,0,128,11,0,14,0,63,6,21,0,120,0,30,21,0,127,10,21,0,10,0,160,8,5,14,21,0,124,0,30,0,52,31,0,127,8,0,54,31,0,128,0,15,0,63,6,8,5,22,0,124,12,14,0,63,0,15,21,0,7,6,0,30,5,22,0,129,11,0,44,0,63,7,5,22,0,130,11,14,21,0,126,0,30,21,0,124,6,22,0,131,11,0,21,21,0,129,6,0,39,21,0,77,0,13,5,0,21,21,0,125,0,30,21,0,124,6,22,0,132,11,6,0,21,21,0,130,6,22,0,133,11,6,22,0,134,11,14,21,0,32,0,33,31,0,50,6,0,42,0,1,7,0,64,6,0,21,21,0,1,0,13,5,6,0,33,21,0,132,6,0,21,31,0,32,0,30,31,0,43,6,0,21,0,59,6,0,33,31,0,125,6,0,0,21,0,123,0,14,0,64,6,6,6,22,0,135,11,14,21,0,135,0,31,5,0,33,0,52,21,0,131,0,21,21,0,126,6,22,0,136,11,0,53,0,33,8,0,31,9,8,5,22,0,137,11,14,21,0,137,0,30,0,52,0,15,0,52,21,0,124,0,13,5,8,8,5,15,24,5,14,21,0,137,0,33,31,0,131,0,44,0,59,7,5,0,21,21,0,124,6,0,33,21,0,137,6,0,49,0,0,7,5,22,0,138,11,0,31,5,6,0,30,0,52,21,0,124,0,13,5,0,53,0,11,8,8,5,22,0,137,12,14,21,0,137,0,42,0,33,7,22,0,124,13,14,21,0,137,0,42,0,33,7,22,0,120,13,14,21,0,137,0,42,0,33,7,22,0,123,13,14,31,0,138,0,11,0,63,6,0,10,0,52,0,27,8,5,0,8,5,0,47,0,0,7,5,22,0,139,11,14,31,0,126,0,33,21,0,137,0,23,21,0,139,6,6,22,0,140,11,14,21,0,7,0,13,5,0,16,21,0,140,6,21,0,120,0,23,21,0,139,10,21,0,10,21,0,140,0,53,0,30,8,0,38,9,21,1,29,0,161,10,8,5,14,21,0,123,0,11,0,63,6,22,0,141,11,0,9,0,69,0,11,31,0,123,6,6,22,0,142,11,14,31,0,31,0,33,21,0,120,6,0,33,0,52,21,0,124,21,1,36,5,0,24,21,0,139,6,8,0,21,31,0,7,0,6,0,63,6,0,1,5,22,0,143,11,0,33,21,0,140,6,10,0,1,0,19,10,5,22,0,144,11,14,21,0,144,0,11,0,63,6,0,9,21,0,142,6,21,0,120,21,0,10,0,162,8,5,14,31,0,142,21,1,38,0,24,0,64,10,0,16,0,30,10,21,0,124,6,22,0,145,11,0,33,31,0,137,0,30,21,0,124,6,0,31,5,22,0,146,11,6,0,21,31,0,130,6,0,39,31,0,133,6,22,0,147,11,14,31,0,132,0,21,31,0,143,6,0,36,0,0,21,0,77,0,53,0,33,8,10,5,0,19,0,24,0,52,0,13,8,31,0,129,10,0,33,0,52,0,31,8,31,0,146,10,0,33,21,0,124,0,24,31,0,139,6,0,49,0,0,7,0,59,6,10,0,21,0,33,0,52,31,0,140,8,10,5,22,0,148,11,14,21,0,144,0,11,0,63,6,21,1,38,0,11,31,0,145,0,21,0,64,6,10,0,33,0,52,0,49,0,0,7,8,0,18,10,21,0,124,6,0,9,21,0,124,0,26,0,64,6,0,11,21,0,141,6,6,22,0,149,11,14,21,0,82,0,33,21,0,73,6,0,0,0,69,6,0,0,21,0,74,0,2,0,69,6,0,33,21,0,44,0,33,21,0,73,6,22,0,150,11,6,6,22,0,151,11,14,31,0,150,0,2,0,72,6,0,0,21,0,151,6,0,28,0,54,0,37,8,5,0,21,22,0,149,13,14,0,64,0,1,21,0,70,6,0,42,0,33,7,21,0,13,6,0,0,0,64,6,21,0,119,21,0,73,0,21,21,0,120,6,3,3,0,30,0,69,0,68,0,69,3,3,6,0,21,5,22,0,152,11,14,31,0,122,0,21,31,0,141,6,0,12,0,2,0,58,10,0,0,0,19,10,31,0,149,6,0,0,0,79,6,22,0,153,11,14,21,0,70,0,44,0,79,7,5,21,0,70,0,44,0,63,7,5,31,0,65,0,30,31,0,68,6,21,0,119,0,44,0,61,7,5,31,0,82,0,33,31,0,119,6,31,0,153,31,0,73,0,44,0,63,7,5,0,21,31,0,144,6,31,0,151,0,21,31,0,148,6,3,8,22,0,154,11,14,21,0,93,0,8,5,0,49,0,0,7,5,21,1,35,0,1,0,19,10,21,0,85,6,0,7,0,10,0,12,10,0,68,6,0,9,21,0,87,6,22,0,155,11,14,31,0,90,0,27,5,0,10,0,64,0,14,21,0,3,6,6,22,0,156,11,0,11,21,0,106,0,11,21,0,85,6,0,10,0,52,0,26,8,5,0,10,21,0,93,6,0,10,31,0,155,6,0,10,31,0,83,6,22,0,157,11,6,0,30,5,22,0,158,11,14,31,0,156,0,10,31,0,157,6,0,12,21,0,87,6,21,0,13,21,0,10,0,163,8,5,14,0,63,0,14,21,0,3,6,0,11,21,0,93,6,0,10,0,63,0,16,21,0,3,6,0,9,31,0,87,6,6,0,8,5,0,2,0,68,6,0,6,31,0,88,6,0,26,0,68,6,0,33,21,0,158,6,22,0,159,11,0,13,0,68,6,22,0,160,11,14,21,1,26,0,11,21,0,1,6,0,30,5,22,0,161,11,0,42,0,33,7,21,0,1,6,22,0,162,11,0,9,5,0,38,5,22,0,163,11,0,27,0,1,0,19,10,0,59,6,0,30,5,0,33,31,0,162,6,22,0,164,11,14,31,0,8,0,0,21,1,32,6,22,0,165,11,0,16,21,0,1,6,0,30,5,22,0,166,11,0,21,31,0,161,6,22,0,167,11,14,21,0,1,0,33,31,0,166,6,0,0,21,0,163,0,13,5,0,42,0,1,7,31,0,165,6,6,0,21,22,0,164,13,14,31,0,40,0,33,31,0,37,6,22,0,168,11,14,0,63,0,21,21,0,97,6,0,49,0,0,7,5,0,30,0,64,0,21,21,0,96,6,6,0,24,0,64,6,0,27,0,53,0,1,8,5,0,0,31,0,85,0,26,0,64,6,0,30,31,0,96,6,0,8,5,6,0,42,0,21,7,31,0,34,6,22,0,169,11,14,0,77,0,14,21,0,3,6,0,27,5,0,10,31,0,97,6,0,10,21,0,89,0,14,0,68,6,6,0,12,31,0,94,6,0,30,5,0,21,31,0,70,0,30,0,52,0,8,8,21,0,71,6,6,22,0,170,11,14,31,0,95,0,30,5,22,0,171,11,14,21,0,160,0,0,21,0,158,6,0,0,0,52,21,0,99,0,53,0,33,8,0,2,21,0,160,10,8,5,22,0,172,11,14,21,0,172,0,30,31,0,89,0,33,21,0,158,6,22,0,173,11,0,14,0,68,6,22,0,174,11,0,2,21,0,160,0,0,0,64,6,6,6,0,21,22,0,170,13,14,21,0,174,0,8,5,22,0,174,12,14,21,0,174,0,42,0,30,7,22,0,158,13,14,21,0,174,0,42,0,30,7,22,0,172,13,14,31,0,71,0,2,0,80,6,0,21,21,0,1,0,0,21,0,98,6,0,33,31,0,100,6,0,42,0,1,7,21,1,15,0,34,5,0,0,0,64,6,6,0,6,0,63,6,6,0,0,0,60,6,22,0,175,11,14,21,0,167,21,0,167,21,0,168,21,0,168,21,0,114,21,0,35,0,30,0,68,6,21,0,101,21,0,170,0,64,0,0,21,0,117,6,0,64,0,0,21,0,117,6,31,0,99,0,33,21,0,91,6,0,6,0,64,6,0,0,21,0,91,6,31,0,172,21,0,171,3,13,0,21,5,0,42,0,33,7,21,0,13,6,0,21,31,0,152,6,22,0,176,11,0,31,5,22,0,177,11,14,31,0,167,0,44,0,63,7,5,31,0,164,21,0,168,0,44,0,81,7,5,31,0,168,0,13,5,0,25,5,0,0,0,64,6,31,0,114,0,44,0,82,7,5,31,0,169,0,22,31,0,106,0,33,31,0,35,6,0,0,0,69,6,6,0,29,5,0,20,5,31,0,175,31,0,170,0,44,0,83,7,5,21,0,117,0,44,0,84,7,5,31,0,1,0,33,0,64,0,1,31,0,117,6,6,0,42,0,1,7,21,1,32,6,31,0,3,0,33,21,0,91,6,0,0,0,65,6,31,0,86,0,33,21,0,158,6,0,11,0,63,6,0,2,0,67,6,0,0,31,0,159,0,14,0,64,6,0,6,31,0,173,6,0,2,0,60,6,0,0,31,0,160,6,0,30,31,0,174,6,6,0,0,0,65,6,0,5,0,85,6,21,0,108,0,2,0,67,6,0,0,0,86,6,22,0,178,11,0,24,0,59,6,3,13,0,21,31,0,154,6,0,21,5,0,33,21,0,177,6,22,0,179,11,14,0,19,0,42,0,33,7,21,0,13,10,0,21,0,13,0,53,0,42,0,24,0,52,0,1,8,7,8,10,22,0,180,11,14,31,0,101,0,42,0,1,7,0,64,6,31,0,91,21,0,158,3,3,0,21,5,21,0,180,21,0,5,0,13,5,0,42,0,1,7,0,64,6,0,5,31,0,176,6,0,28,0,52,0,13,0,50,0,1,8,8,21,0,171,6,6,22,0,181,11,14,21,0,5,21,0,6,3,2,0,44,0,33,0,52,0,28,0,52,21,0,171,0,13,5,8,0,33,21,0,177,10,0,42,0,21,7,0,59,10,8,7,21,0,181,31,0,98,0,10,31,0,93,6,0,8,5,0,27,5,21,1,36,5,0,33,31,0,158,6,31,0,180,31,0,181,6,3,2,6,22,0,182,11,14,21,0,67,0,13,0,64,6,0,9,21,0,74,6,0,10,22,0,49,13,0,30,5,22,0,183,11,0,42,0,33,7,31,0,67,6,22,0,184,11,0,14,0,64,6,0,0,0,64,6,0,30,5,22,0,185,11,14,21,0,183,0,41,0,64,7,0,21,21,0,48,0,53,0,33,8,10,0,49,0,0,7,0,59,10,0,2,0,68,10,0,24,0,0,31,0,184,0,11,0,64,6,10,0,33,0,0,0,18,0,50,0,36,8,10,21,0,185,10,0,42,0,21,7,0,23,10,0,59,10,0,42,0,39,7,0,33,0,52,31,0,185,8,10,5,0,20,0,50,0,68,3,2,6,0,43,0,11,7,5,22,0,183,12,14,31,0,75,0,30,21,0,48,6,31,0,74,0,8,5,0,30,21,0,48,6,21,0,48,0,30,5,0,30,0,52,31,0,49,0,30,31,0,48,6,8,0,54,31,0,183,8,5,3,3,22,0,186,11,14,31,0,171,0,13,0,51,0,1,8,21,0,179,6,0,16,31,0,177,6,0,21,0,64,6,0,30,5,21,0,134,0,44,0,13,7,5,0,0,31,0,77,6,31,0,134,31,0,147,3,4,22,0,187,11,14,31,0,178,0,34,0,59,6,0,21,31,0,179,6,31,0,163,31,0,186,31,0,187,31,0,182,3,5,25,3,0,0,44,0,41,0,63,7,0,40,0,164,10,7,3,0,0,63,0,25,5,3,4,22,0,3,11,14,31,0,2,0,13,0,11,0,67,10,0,57,0,11,0,51,0,22,8,8,5,0,41,31,0,3,7,0,24,0,13,10,0,53,0,21,8,5,22,0,4,22,0,5,22,0,6,22,0,7,4,4,11,14,31,0,1,21,1,39,31,0,5,21,0,6,3,2,6,22,0,8,11,22,0,9,22,0,10,22,0,11,22,0,12,22,0,13,4,5,11,14,31,0,9,21,1,41,31,0,10,21,0,11,0,34,5,31,0,12,31,0,13,31,0,6,0,44,0,63,7,5,0,27,31,0,7,6,3,5,6,22,0,14,22,0,15,22,0,16,22,0,17,22,0,18,4,5,11,14,31,0,14,31,0,11,0,24,0,64,6,0,21,31,0,4,0,33,31,0,15,6,3,1,6,0,21,5,31,0,16,0,12,5,0,29,5,0,43,0,11,7,5,31,0,17,0,12,5,0,29,5,0,43,0,11,7,5,31,0,18,31,0,8,3,6,25,31,0,1,31,0,2,5,25,21,0,1,0,33,0,52,21,0,2,0,30,31,0,1,17,8,0,54,0,44,0,64,7,8,5,21,1,13,31,0,2,0,42,0,33,7,16,6,25,0,63,0,40,31,0,1,0,30,5,0,34,5,0,110,3,2,6,25,0,63,0,40,31,0,1,0,21,0,63,6,0,33,0,52,0,49,0,0,7,8,21,1,31,6,0,9,21,1,32,6,0,30,5,0,111,3,2,6,25,0,63,0,40,21,1,26,0,30,31,0,1,6,0,112,3,2,6,25,0,63,0,40,21,1,26,0,30,31,0,1,6,0,113,3,2,6,25,0,63,0,40,31,0,2,0,30,31,0,1,17,0,42,0,33,7,21,1,26,17,0,114,3,2,6,25,21,0,2,0,42,0,30,7,22,1,26,13,14,21,0,2,0,42,0,30,7,22,1,25,13,14,31,0,1,0,30,31,0,2,6,25,0,47,0,10,7,0,57,31,0,1,0,11,0,51,0,22,8,31,0,2,0,53,0,30,8,10,0,42,0,40,7,0,63,10,8,25,0,63,0,28,0,53,0,45,0,14,7,8,0,48,15,25,7,0,19,0,50,0,44,0,63,7,8,10,0,34,0,59,10,3,2,0,55,0,13,0,11,0,63,10,0,51,0,9,8,8,22,0,3,11,14,15,26,22,0,4,11,14,0,63,21,0,4,0,124,8,0,42,0,64,31,0,4,0,125,8,7,3,2,0,55,0,13,0,51,0,12,8,8,22,0,5,11,14,31,0,1,31,0,5,0,126,3,2,0,55,0,13,0,51,0,5,8,0,11,31,0,3,10,8,31,0,2,17,0,42,0,40,7,0,63,6,25,0,14,0,57,0,47,0,10,7,8,0,57,31,0,1,0,11,0,51,0,22,8,31,0,2,0,53,0,30,8,0,42,0,64,0,56,0,33,8,7,0,41,21,1,6,7,0,22,21,1,5,10,10,0,29,0,50,0,9,8,9,10,0,42,0,40,7,0,63,10,8,25,21,1,15,0,21,0,63,6,0,30,21,0,1,6,0,13,21,2,16,0,34,5,0,0,0,67,6,6,21,1,13,0,21,0,63,10,0,30,31,0,1,10,21,1,10,0,130,8,5,25,31,0,1,0,6,22,1,24,13,0,14,0,68,6,21,1,25,21,1,10,31,0,4,8,5,25,21,2,27,21,2,25,31,0,1,6,0,9,21,1,44,0,14,0,63,6,6,25,21,1,5,0,33,0,52,21,0,1,8,0,54,21,1,5,0,33,21,0,2,17,8,5,22,1,5,12,14,21,1,6,0,33,0,52,31,0,2,8,0,54,21,1,6,0,33,31,0,1,6,8,5,22,1,6,12,25,21,1,23,0,33,21,0,1,6,0,2,0,52,0,8,8,21,1,108,6,0,6,22,1,109,13,0,14,0,68,6,21,1,29,0,50,0,31,8,0,33,31,0,1,10,21,1,10,0,153,8,5,25,21,1,135,0,33,0,52,21,0,1,8,0,13,0,52,0,27,8,9,0,51,0,10,8,21,1,136,6,0,8,5,21,1,120,0,30,0,52,21,1,124,8,0,53,0,21,8,9,0,33,31,0,1,10,21,1,10,0,160,8,5,25,21,0,1,0,27,5,0,0,31,0,2,17,0,49,0,6,7,5,0,6,31,0,1,6,25,0,36,0,14,0,18,0,50,0,13,8,10,0,42,0,30,7,0,19,10,0,0,31,0,2,10,0,42,0,33,7,21,3,8,10,0,21,0,105,10,0,21,31,0,1,10,0,21,0,123,10,25]
 ,[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[58],runtime[59],runtime[61],10,-1,11,26,9,0,1,5,8,4,2,3,-3,-2,6,17,3.1415926535898,Infinity,-4,-5,-6,21,13,15,23,14,28,19,25,'\0','0','#','\'','\"','@',str("⋄,"),str(":;"),str("⇐←↩"),str("(){}⟨⟩"),str("‿"),str("·"),str("𝕊𝕏𝕎𝔽𝔾𝕤𝕩𝕨𝕣𝕗𝕘"),str(".¯π∞"),str("_"),str("aA"),str("•"),str("𝕨"),str(" "),str("#\'\"@"),str("s"),str("Unknown character"),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("Empty statement or expression"),str("Invalid assignment or stranding use"),str("Dot must be followed by a name"),str("Can\'t strand Nothing (·)"),str("Punctuation : and ; not allowed outside blocks"),str("Header-less bodies must come last"),str("At most two header-less bodies allowed"),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("Invalid special names for block header"),str("Special name outside of any block"),str("Only blocks with explicit arguments can have multiple bodies"),str("Block bodies must be of the same kind"),str("Dot must be preceded by a subject"),str("Nothing (·) cannot be assigned"),str("Missing operand"),str("Can\'t use Nothing (·) in lists"),str("Double subjects (missing ‿?)"),str("Role of the two sides in assignment must match"),str("Can\'t return Nothing (·)"),str("Invalid use of 𝕨 in monadic case"),str("Unreachable body"),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,43],[573,5],[592,5],[716,57],[2904,23],[3729,188],[11319,19],[11565,3],[11573,3],[11613,3],[11632,3],[11673,3],[11692,3],[11711,3],[11739,3],[11775,3],[11811,6],[11948,3],[12020,3],[12070,5],[12096,3],[12118,3],[12176,3],[12229,3],[12291,3],[12316,3]]
);
let compile = compgen(list(glyphs.map(str)));
runtime[42] = rtAssert;
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():v)(r);
}
let wrapcomp = comp => (src, rt) => {
  let s=str(src), c;
  try { c=comp(s,rt); } catch(e) { if (typeof e.message!=="string") e.message.src=s; throw e; }
  c.push(s); return c;
}
let bqngen = (comp, rt) => src => run.apply(null,wrapcomp(comp)(str(src),rt));
let rt_sys = list([runtime, system]);
let bqn = bqngen(compile, rt_sys);

// 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).map(s=>s.join("")).join("‿")+"⇐}")
                      : gl[x.prim] || placeholder[type(x)-2];
let [fmt1,repr] = run(
  [15,1,25,31,0,1,22,0,3,22,0,4,22,0,5,22,0,6,4,4,11,14,0,67,0,15,0,18,0,18,10,0,40,0,68,8,3,2,0,43,0,10,0,40,0,58,8,8,21,0,6,3,2,0,43,0,58,0,41,0,8,8,8,22,0,7,11,14,15,2,22,0,8,11,14,0,11,0,8,0,50,10,0,45,15,3,8,22,0,9,11,14,15,4,22,0,10,11,14,15,5,22,0,11,11,14,15,6,15,7,3,2,0,43,15,8,0,49,3,2,0,43,0,10,0,41,0,10,0,40,0,49,8,0,39,0,7,8,8,8,8,22,0,12,11,14,0,77,0,19,0,76,6,15,9,15,10,3,2,0,43,0,10,0,11,0,46,10,0,7,0,11,0,10,0,50,10,10,8,3,2,0,43,0,14,0,14,0,46,0,46,3,2,10,8,22,0,13,11,14,15,11,22,0,14,11,14,15,12,22,0,15,11,14,15,13,15,14,15,15,3,3,0,43,0,30,0,58,7,0,8,0,17,10,0,38,0,35,0,0,7,0,12,0,0,0,8,0,40,0,46,8,10,0,10,10,8,8,22,0,16,11,14,21,0,7,0,19,9,31,0,16,21,0,15,3,2,0,43,0,34,21,0,3,7,0,12,0,55,10,0,17,0,38,0,35,0,7,7,8,9,8,21,0,15,3,3,0,43,0,13,0,3,0,50,10,8,22,0,17,11,14,15,16,22,0,18,11,14,0,85,22,0,19,11,14,0,16,0,38,0,28,8,21,0,5,9,21,0,19,3,2,0,43,0,50,0,41,0,11,8,8,21,0,18,21,0,17,0,38,31,0,19,0,27,3,2,0,43,0,10,0,11,0,49,10,8,8,8,0,28,0,49,10,0,19,9,22,0,20,11,14,0,16,0,16,31,0,17,9,31,0,20,3,2,0,43,0,15,0,12,0,55,10,8,21,0,3,10,22,0,21,11,14,15,17,22,0,22,11,14,0,69,0,16,0,15,0,18,0,16,0,26,0,11,0,0,0,49,10,10,10,0,18,0,15,10,0,66,10,0,33,21,0,7,0,18,0,78,10,7,0,18,9,0,21,0,49,10,0,33,21,0,22,0,18,0,86,10,7,0,18,9,0,23,0,71,10,0,18,0,70,10,3,3,0,43,0,34,21,0,3,7,0,31,0,27,7,0,50,0,17,0,56,6,0,24,0,50,0,49,0,46,3,3,6,10,0,35,0,4,7,9,8,3,2,0,43,0,10,0,8,0,46,10,8,22,0,23,11,14,0,28,0,38,21,0,22,8,0,18,0,87,10,21,0,23,0,17,31,0,23,0,39,0,18,0,40,0,88,0,41,0,18,8,8,8,0,14,10,3,3,0,43,0,11,0,3,0,50,10,8,22,0,24,11,14,31,0,7,31,0,24,3,2,0,43,21,0,3,0,11,0,46,10,8,22,0,25,11,14,0,30,0,46,7,0,29,0,89,10,31,0,18,31,0,22,8,0,28,0,49,10,22,0,26,11,14,0,16,0,16,31,0,25,9,31,0,26,3,2,0,43,0,15,0,12,0,55,10,8,21,0,3,10,22,0,27,11,14,21,0,21,0,38,0,32,0,57,0,0,0,58,6,0,41,0,18,8,7,8,0,17,9,0,21,0,47,10,21,0,27,3,2,25,0,49,0,33,0,20,7,31,0,1,0,1,5,6,0,25,0,42,0,37,0,31,0,34,0,2,7,7,7,8,5,0,35,0,47,0,48,3,2,0,44,0,0,8,7,31,0,2,17,0,17,5,0,28,0,40,0,47,8,0,42,0,46,8,5,25,21,0,1,0,14,5,0,21,0,47,6,22,0,3,11,0,4,0,49,6,21,1,8,5,22,0,4,11,14,15,18,22,0,5,11,14,21,0,1,0,17,31,0,1,0,14,5,0,20,0,47,6,0,18,31,0,3,0,35,0,2,7,5,6,6,0,20,0,40,0,35,0,0,7,8,31,0,5,3,2,0,43,0,16,0,38,0,10,8,0,8,0,46,10,8,31,0,4,6,25,21,0,1,0,17,5,0,33,0,30,0,59,7,0,17,0,14,0,28,0,47,10,0,41,0,19,8,10,0,18,0,16,10,7,31,0,1,0,14,5,21,1,8,0,49,6,6,0,18,5,25,0,59,0,17,21,0,1,0,10,5,31,0,2,3,2,6,22,0,3,11,14,21,0,3,31,0,1,31,0,3,3,3,0,19,5,0,18,5,25,0,71,0,18,31,0,1,0,27,5,0,21,0,49,6,0,21,0,47,6,6,0,18,0,70,6,0,19,5,25,21,0,1,0,14,5,0,28,0,47,6,22,0,3,11,14,0,72,21,0,2,0,16,0,3,0,49,10,0,31,0,27,7,0,73,10,0,17,9,21,1,6,3,2,0,43,0,8,0,40,0,51,8,8,16,3,2,0,18,5,0,20,21,0,3,6,0,19,5,31,0,1,0,28,0,42,0,74,0,28,0,49,0,1,31,0,2,17,0,3,0,52,6,0,4,0,46,6,6,8,5,0,75,0,20,0,40,0,1,8,31,0,3,6,0,19,5,3,3,0,18,5,25,31,0,1,0,27,5,0,34,0,11,7,0,69,6,0,36,0,1,7,5,0,37,0,0,7,5,0,11,0,50,6,0,35,0,7,7,5,25,31,0,1,0,33,0,59,7,5,21,1,11,0,49,6,21,1,12,0,50,6,0,28,0,40,0,46,0,47,3,2,8,0,42,0,60,8,5,25,31,0,1,0,14,5,0,69,0,33,21,1,6,7,0,33,0,18,0,40,0,78,8,7,9,0,18,9,0,28,0,42,0,61,8,9,3,2,0,43,0,10,0,8,0,49,10,8,5,0,19,5,25,21,0,1,0,33,0,14,7,5,22,0,3,11,14,21,0,3,0,33,0,28,7,0,49,6,0,17,0,30,0,49,7,0,1,0,11,10,0,45,0,36,0,4,7,8,3,2,0,43,0,11,0,8,0,46,10,8,5,22,0,4,11,14,31,0,3,0,33,0,28,7,5,0,11,0,8,0,46,10,0,45,0,49,0,44,0,36,0,4,7,8,8,5,22,0,5,11,14,31,0,1,0,33,0,20,7,0,49,0,20,21,0,4,0,10,5,0,2,21,0,2,17,0,1,5,6,0,6,31,0,4,6,0,2,31,0,2,17,0,34,0,19,7,21,0,5,6,6,0,11,0,1,0,50,10,0,4,0,46,10,0,45,0,19,8,5,0,50,0,44,0,18,0,38,0,8,8,8,5,22,0,6,11,14,31,0,6,21,1,10,0,9,0,38,21,1,9,8,3,2,0,43,31,0,5,0,17,5,0,13,0,40,0,25,0,40,0,49,8,8,5,8,5,21,1,11,0,50,6,25,21,0,1,0,33,21,1,21,7,5,21,1,14,0,49,0,15,31,0,2,17,6,21,1,12,31,0,1,0,11,5,6,25,21,0,1,0,11,5,22,0,3,11,14,0,79,0,16,0,42,21,0,1,8,5,0,21,0,46,6,22,0,1,12,14,21,0,1,0,14,5,0,21,0,47,6,22,0,4,11,0,10,5,0,1,5,0,11,0,40,0,46,8,0,45,0,48,8,5,22,0,5,11,14,21,0,3,0,8,0,46,6,0,31,0,28,7,0,80,6,22,0,6,11,14,15,19,22,0,7,11,14,21,0,1,0,26,0,40,0,16,0,11,21,0,6,10,0,0,0,49,10,8,31,0,7,3,2,0,43,21,0,3,0,10,0,49,6,8,5,22,0,1,12,14,21,0,6,0,20,0,40,0,1,8,21,0,4,6,21,0,5,0,44,0,18,8,31,0,1,6,31,0,5,0,44,0,18,8,0,64,0,20,21,0,4,0,18,0,49,6,0,28,0,47,6,6,0,17,31,0,4,6,0,28,0,42,31,0,6,8,5,6,0,19,5,21,0,3,0,10,0,49,6,0,45,21,1,9,21,1,11,0,49,10,21,1,12,31,0,3,10,8,5,25,31,0,1,21,1,15,21,1,13,3,2,0,43,0,14,0,11,0,46,10,0,35,0,7,7,9,8,5,25,31,0,1,21,1,15,0,47,6,25,0,16,0,16,31,0,4,9,0,8,0,39,0,19,8,0,46,10,31,0,0,3,2,0,43,0,15,0,12,0,55,10,8,21,1,3,10,22,0,6,11,14,21,0,1,21,1,4,5,22,0,7,11,0,28,5,22,0,8,11,14,0,65,0,1,0,81,6,0,28,21,0,8,6,22,0,9,11,14,0,83,0,41,0,18,8,0,18,0,82,10,22,0,10,11,14,0,16,0,33,31,0,6,0,41,0,28,0,40,0,49,8,0,15,0,12,21,0,9,0,3,0,50,6,10,0,45,0,16,0,38,31,0,10,8,8,0,28,0,41,0,0,8,10,8,7,0,10,0,38,0,22,8,0,11,0,46,10,0,1,9,0,49,0,9,21,0,9,6,0,45,0,25,8,9,10,0,18,9,22,0,11,11,14,21,0,7,0,21,0,49,6,0,30,31,0,1,7,21,1,5,0,38,0,17,8,9,0,16,31,0,5,31,0,2,19,31,0,11,3,3,0,43,31,0,8,0,5,5,0,3,0,50,6,8,5,22,0,12,11,14,21,0,12,21,0,9,0,12,0,50,6,0,45,0,30,31,0,7,7,0,28,0,47,10,21,1,3,9,0,9,0,55,10,0,45,0,84,0,41,0,18,8,8,8,5,22,0,12,12,14,31,0,9,31,0,12,3,2,25,31,0,1,21,1,27,5,25,31,0,1,0,18,0,40,0,27,0,38,0,33,0,59,7,8,8,5,0,27,31,0,2,0,0,0,49,17,0,18,0,46,17,0,26,16,0,2,0,40,0,8,0,40,0,24,8,8,16,17,25,0,54,0,0,0,58,6,0,8,21,0,1,6,0,2,0,58,0,1,0,63,6,6,0,0,0,53,0,0,0,58,6,0,16,0,1,0,62,10,0,2,0,11,10,21,0,1,6,6,0,0,31,0,1,6,25]
 ,[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[32],runtime[35],runtime[36],runtime[42],runtime[43],runtime[44],runtime[45],runtime[46],runtime[47],runtime[49],runtime[50],runtime[51],runtime[52],runtime[53],runtime[54],runtime[55],runtime[56],runtime[58],runtime[59],runtime[61],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],[745,3],[811,6],[911,3],[962,4],[1001,3],[1031,4],[1154,3],[1192,3],[1231,3],[1284,7],[1514,3],[1547,8],[1789,3],[1818,3],[1828,13],[2128,3],[2136,3],[2188,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 (k<n&&(cl=is[k]-o)<m.length) k++;
    let ol=k<n; if (pair) { if (k%2) cl=m.length; else { k--; cl++; } }
    let c=Array(cl).fill(0); c[j]=1;
    for (let h=1;h<k;h++) c[is[h]-o+(pair?h%2:0)]=1;
    if (pair) for (let h=1;h<cl;h++) c[h]^=c[h-1];
    let add = ['',m.join(''),c.map(t=>t?'^':' ').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 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 reqexec = req1str;  // Modified by Node version to handle •state
let extendedbqn = (x,w) => {
  let req = (r,s) => { if (!r) throw Error("•ExtendedBQN: "+s) };
  req(!has(w), "𝕨 not allowed");
  req(x.sh && x.sh.length===1, "𝕩 must be a list");
  req(x.every(e=>e.sh&&e.sh.length===1&&e.sh[0]===2), "𝕩 must contain glyph-primitive pairs");
  let pr = glyphs.map(str);
  let l=0, rt = pr.map(s=>runtime.slice(l,l+=s.length));
  x.forEach(([gl,val])=>{
    req(typeof gl==="string", "Primitive glyphs must be characters");
    req(isfunc(val), "Primitives must be operations");
    let k=val.m||0;
    pr[k].push(gl); rt[k].push(val);
  });
  pr.map(p=>p.sh=[p.length]);
  rt = list([].concat.apply([],rt));
  let bqn = bqngen(compgen(list(pr)),list([rt,system]));
  return (x,w)=>bqn(reqexec("•BQN extension",x,w));
}
let makerepl = (x,w) => {
  let vars = [], names = [], redef = [];
  let rtn = list(rt_sys.concat([names,redef]));
  let comp = wrapcomp(compile);
  let repl = (x,w) => {
    names.sh=redef.sh=[names.length];
    let c = comp(str(reqexec("Repl",x,w)), rtn);
    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=>-1));
    vars .push(...newv.map(i=>null));
    c.push(vars);
    return run.apply(null, c);
  }
  return repl;
}
let dynsys = f => { f.dynamic=1; return f; }
let sysvals = {
  bqn:(x,w)=> bqn(reqexec("•BQN",x,w)), makerepl, js:dojs, extendedbqn,
  type, glyph, decompose, fmt:fmt1, repr, unixtime, listkeys,
  listsys: dynsys(() => list(Object.keys(sysvals).sort().map(str))),
  math: obj2ns(Math,("LN10 LN2 LOG10E LOG2E cbrt expm1 hypot log10 log1p log2 round trunc atan2 cos cosh sin sinh tan tanh").split(" "), f=>typeof f==="function"?runtime[60](f,0):f)
};

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<n;i++) f(x); })/n;
  }
  timed.m=1;
  return timed;
}
if (typeof process!=='undefined') {
  let sec = t => 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.sysvals=sysvals; bqn.util={has,list,str,unstr,dynsys,req1str,makens};
  bqn.setreqexec = re => { reqexec=re; }
  module.exports=bqn;
}