aboutsummaryrefslogtreecommitdiff
path: root/docs/bqn.js
blob: 20b76b0c9af6380c09720dab00630d6bd4142e52 (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
#! /usr/bin/env node

"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 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 (!v.sh) throw Error("← or ↩: Multiple targets but atomic value");
    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]));
  }
  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(e){let s=L.map(p=>p[l]);s.sh=[1,2];let m=[s,e.message];m.loc=true;m.sh=[2];e.message=m;throw e;}":"";
  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 14:         { rD--;                                                                                                break; }
      case 15:         { r+= rP("D["+num()+"](e)");                                                                           break; }
      case 21:case 31: { r+= rP("getv("+ge(num())+","+num()+")");                                                             break; }
      case 22:         { r+= rP("{e:"+ge(num())+",p:"+num()+"}");                                                             break; }
      case 25:         { if(rD!==1) throw Error("Internal compiler error: Wrong stack size"); r+= "return v0;";               break loop; }
    }
  }
  return "let "+new Array(szM).fill().map((_,i)=>rV(i)).join(',')+";"+r+fin;
}
let run = (B,O,S,L) => { // Bytecode, Objects, Sections/blocks
  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 D = S.map(([type,imm,pos,varam],i) => {
    let I = imm? 0 : 3; // Operand start
    let def = new Array(I + (type==0?0:type+1) + varam).fill(null);
    let c = genjs(B, pos, L);
    let repdf = ["","4,f,mod","5,f,mod,g"].map(s=>s?"fn.repr=()=>["+s+"];":s);
    if (imm) c =               "const e=[...e2];e.p=oe;"+c;
    else c = "const fn=(x, w)=>{const e=[...e2];e.p=oe;e[0]=fn;e[1]=x;e[2]=w;"+c+"};"+repdf[type]+"return fn;";

    if (type===0) c = "let e2=def;"+c;
    if (type===1) c = "const mod=(f  ) => {let e2=[...def]; e2["+I+"]=mod;e2["+(I+1)+"]=f;"                +c+"}; mod.m=1;return mod;";
    if (type===2) c = "const mod=(f,g) => {let e2=[...def]; 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,O,L,def) => D => oe => {"+c+"};")()
                                          (chkM,has,call,getv,get,set,llst,train2,train3,O,L,def);
  });
  D.forEach((d,i) => {D[i]=d(D)});
  return D[0]([]);
}

// Runtime
let assertFn = pre => (x,w) => {
  if (x!==1) throw {src: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 setrepr = (r,f) => {f.repr=r; return f;}
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 floor = (x,w) => {
  if (isnum(x)) return Math.floor(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");
  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)=>e===b[i]);
}
let table = f => setrepr(()=>[4,f,table], (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 = f => setrepr(()=>[4,f,scan], (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 = (f,g) => setrepr(()=>[5,f,cases,g],
  (x,w)=>has(w)?call(g,x,w):call(f,x,w));
let catches = (f,g) => setrepr(()=>[5,f,catches,g],
  (x,w)=>{try{return call(f,x,w);}catch(e){return call(g,x,w);}});
table.m=scan.m=1; cases.m=catches.m=2;
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 : 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){}
  }
  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 [runtime,setPrims] = run(
  [0,82,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,15,4,22,0,4,11,14,15,5,22,0,5,11,14,15,6,0,21,15,7,8,22,0,6,11,14,15,8,22,0,7,11,14,15,9,22,0,8,11,14,15,10,22,0,9,11,14,15,11,22,0,10,11,14,15,12,22,0,11,11,14,15,13,22,0,12,11,14,15,14,22,0,13,11,14,0,0,0,12,0,23,19,22,0,14,11,14,0,23,0,12,21,0,11,0,11,8,3,2,21,0,4,0,0,0,12,0,24,19,8,22,0,15,11,14,0,23,0,12,21,0,11,0,11,8,0,8,0,13,21,0,11,0,23,8,19,3,2,21,0,4,0,0,0,12,0,24,19,8,22,0,16,11,14,15,15,0,15,3,2,21,0,4,21,0,14,8,22,0,17,11,14,15,16,0,21,15,17,8,22,0,18,11,14,15,18,22,0,19,11,14,21,0,14,0,7,0,24,19,21,0,13,21,0,19,8,22,0,20,11,14,21,0,8,0,13,7,22,0,21,11,14,21,0,21,0,7,0,24,19,0,21,21,0,19,8,22,0,22,11,14,0,13,0,7,0,24,19,22,0,23,11,14,15,19,0,16,21,0,23,19,0,21,0,11,8,22,0,24,11,14,15,20,0,16,21,0,22,19,0,21,0,7,21,0,9,21,0,24,21,0,9,0,7,8,8,8,22,0,25,11,14,0,7,21,0,5,3,2,21,0,4,0,13,21,0,11,0,23,8,8,22,0,26,11,14,0,24,0,14,0,16,0,23,19,3,2,21,0,4,0,12,21,0,22,0,23,19,8,22,0,27,11,14,15,21,22,0,28,11,14,31,0,28,22,0,29,11,14,15,22,22,0,30,11,14,15,23,22,0,31,11,14,15,24,22,0,32,11,14,21,0,32,0,35,7,22,0,33,11,14,0,14,21,0,12,15,25,8,22,0,34,11,14,15,26,22,0,35,11,14,21,0,5,0,20,15,27,15,28,3,2,21,0,4,21,0,5,21,0,9,0,12,8,0,12,0,24,19,8,8,22,0,36,11,14,21,0,36,22,0,37,11,14,15,29,22,0,38,11,14,15,30,22,0,39,11,14,0,13,0,7,21,0,21,19,22,0,40,11,14,0,24,0,15,0,16,0,23,19,21,0,12,0,13,0,8,0,25,19,0,7,0,24,19,15,31,3,2,21,0,4,21,0,5,21,0,9,21,0,14,8,8,8,3,2,21,0,4,21,0,5,21,0,9,0,14,8,21,0,29,0,8,7,0,24,19,21,0,22,0,23,19,8,22,0,41,11,14,21,0,40,21,0,41,21,0,8,21,0,41,7,0,7,9,3,2,21,0,4,21,0,6,21,0,9,21,0,14,8,8,15,32,3,3,21,0,4,21,0,14,21,0,10,0,6,8,8,22,0,42,11,14,15,33,22,0,43,11,14,15,34,22,0,44,11,14,21,0,20,21,0,5,0,20,15,35,8,3,2,21,0,4,0,12,21,0,22,0,23,19,8,22,0,45,11,14,15,36,21,0,13,21,0,5,0,20,15,37,8,8,22,0,46,11,14,15,38,22,0,47,11,14,15,39,22,0,48,11,14,15,40,22,0,49,11,14,15,41,22,0,50,11,14,15,42,22,0,51,11,14,15,43,22,0,52,11,14,15,44,22,0,53,11,14,21,0,17,0,1,0,16,21,0,11,0,23,8,3,2,21,0,4,21,0,27,21,0,22,0,23,19,8,9,22,0,54,11,14,15,45,22,0,55,11,14,15,46,22,0,56,11,14,15,47,22,0,57,11,14,15,48,22,0,58,11,14,0,23,0,12,21,0,11,21,0,7,21,0,58,7,8,3,2,21,0,4,0,0,0,12,0,27,19,8,22,0,59,11,14,15,49,22,0,60,11,14,21,0,5,21,0,5,21,0,5,21,0,29,15,50,7,9,15,51,15,52,15,53,3,6,21,0,4,21,0,6,8,22,0,61,11,14,15,54,22,0,62,11,14,21,0,14,21,0,10,0,12,8,0,23,3,2,21,0,5,21,0,9,21,0,14,8,0,12,3,2,0,12,21,0,10,0,12,8,0,23,3,2,0,14,21,0,10,21,0,57,0,12,7,8,21,0,29,0,8,7,0,24,19,0,23,3,2,15,55,3,5,21,0,29,15,56,7,16,22,0,63,11,14,0,23,15,57,3,2,21,0,4,21,0,14,8,22,0,64,11,14,21,0,63,0,21,21,0,64,8,22,0,65,11,14,21,0,63,0,7,0,24,19,0,21,3,0,0,14,3,2,21,0,4,21,0,14,8,8,22,0,66,11,14,21,0,65,21,0,9,0,5,8,21,0,6,21,0,5,19,22,0,67,11,14,0,15,21,0,9,0,1,0,20,21,0,5,8,21,0,29,21,0,67,0,20,21,0,5,8,7,3,2,21,0,4,21,0,27,21,0,22,0,23,19,8,8,22,0,68,11,14,15,58,22,0,69,11,14,21,0,14,21,0,13,21,0,35,21,0,69,15,59,8,8,22,0,70,11,14,15,60,22,0,71,11,14,15,61,22,0,72,11,14,21,0,14,0,5,0,105,19,21,0,6,15,62,31,0,69,21,0,70,21,0,72,31,0,71,3,2,21,0,4,0,18,0,12,0,12,0,24,19,7,21,0,29,0,8,7,0,24,19,8,31,0,72,3,3,21,0,4,0,12,21,0,24,0,25,19,8,8,19,22,0,73,11,14,15,63,22,0,74,11,14,21,0,74,0,110,21,0,26,21,0,12,0,12,8,0,7,0,24,19,15,64,3,3,7,22,0,75,11,14,31,0,74,0,111,0,12,21,0,11,0,23,8,0,7,0,24,19,15,65,3,3,7,22,0,76,11,14,15,66,22,0,77,11,14,15,67,22,0,78,11,14,15,68,22,0,79,11,14,15,69,22,0,80,11,14,15,70,22,0,81,11,14,15,71,22,0,82,11,14,15,72,22,0,83,11,14,21,0,39,0,9,7,22,0,84,11,14,21,0,39,0,10,7,22,0,85,11,14,21,0,8,21,0,84,21,0,12,21,0,85,8,7,0,21,0,25,21,0,84,16,21,0,12,21,0,85,8,8,22,0,86,11,14,21,0,39,15,73,0,21,21,0,26,8,7,22,0,87,11,14,21,0,39,15,74,0,21,21,0,24,8,7,22,0,88,11,14,21,0,39,15,75,0,21,0,7,21,0,9,21,0,88,21,0,9,0,7,8,8,8,7,22,0,89,11,14,21,0,39,0,8,7,0,21,21,0,51,0,23,7,8,22,0,90,11,14,21,0,39,0,8,0,7,0,6,19,7,0,21,31,0,51,0,24,7,8,22,0,91,11,14,21,0,39,0,8,0,21,21,0,23,0,7,21,0,22,19,21,0,11,0,23,8,8,7,22,0,92,11,14,21,0,39,21,0,21,0,7,0,24,19,7,0,21,31,0,19,8,22,0,93,11,14,21,0,39,0,13,0,7,0,24,19,7,0,21,31,0,70,8,22,0,94,11,14,21,0,39,0,12,0,7,0,24,19,7,0,21,21,0,27,8,22,0,95,11,14,21,0,39,0,12,7,0,21,0,12,8,22,0,96,11,14,21,0,39,21,0,21,7,0,21,21,0,7,0,23,7,0,5,0,123,19,8,22,0,97,11,14,21,0,39,0,13,7,0,21,21,0,7,0,23,7,0,5,0,124,19,8,22,0,98,11,14,21,0,39,0,6,7,22,0,99,11,14,21,0,39,0,7,7,22,0,100,11,14,21,0,100,21,0,99,0,24,19,22,0,101,11,14,21,0,6,21,0,96,21,0,96,21,0,95,21,0,65,21,0,66,3,4,19,21,0,29,21,0,99,7,9,21,0,13,15,76,8,22,0,102,11,14,0,30,0,17,16,21,0,31,0,125,8,22,0,103,11,14,15,77,22,0,104,11,14,0,15,0,21,21,0,17,8,22,0,105,11,14,15,78,22,0,106,11,14,15,79,22,0,107,11,14,15,80,22,0,108,11,14,15,81,22,0,109,11,14,15,82,22,0,110,11,14,15,83,22,0,111,11,14,31,0,111,22,0,112,11,14,21,0,67,0,20,21,0,105,21,0,10,21,0,35,8,15,84,3,2,21,0,4,21,0,96,21,0,93,0,24,19,21,0,10,21,0,91,8,8,8,22,0,113,11,14,21,0,37,21,0,11,21,0,44,8,22,0,114,11,14,21,0,5,0,20,21,0,95,21,0,96,0,23,19,21,0,100,0,24,19,21,0,83,15,85,15,86,3,2,21,0,4,21,0,6,21,0,9,21,0,96,8,21,0,93,0,23,19,8,8,8,22,0,115,11,14,31,0,75,0,21,31,0,49,8,22,0,116,11,14,21,0,76,0,21,31,0,50,8,22,0,117,11,14,31,0,81,0,21,31,0,106,8,22,0,118,11,14,0,23,21,0,83,31,0,48,8,0,21,21,0,47,8,22,0,119,11,14,31,0,115,0,21,21,0,44,8,22,0,120,11,14,21,0,67,0,21,21,0,5,8,0,20,21,0,78,0,21,31,0,78,21,0,11,21,0,80,8,8,8,22,0,121,11,14,21,0,67,0,21,21,0,5,8,0,20,21,0,79,0,21,31,0,79,21,0,11,31,0,80,8,8,8,22,0,122,11,14,15,87,22,0,123,11,14,15,88,22,0,124,11,14,15,89,22,0,125,11,14,15,90,22,0,126,11,14,31,0,126,15,91,3,2,21,0,4,21,0,6,21,0,9,21,0,105,21,0,9,0,18,21,0,14,7,8,8,21,0,29,21,0,91,7,0,23,19,8,22,0,127,11,14,21,0,127,21,0,11,21,0,105,21,0,5,3,2,21,0,4,21,0,14,8,8,22,0,128,11,14,15,92,22,0,129,11,14,15,93,22,0,130,11,14,15,94,22,0,131,11,14,15,95,22,0,132,11,14,31,0,109,22,0,133,11,14,21,0,110,22,0,134,11,14,21,0,132,21,0,42,7,0,21,0,23,21,0,43,21,0,42,8,8,22,0,135,11,14,31,0,132,21,0,8,21,0,42,7,7,0,21,0,24,21,0,43,21,0,8,21,0,42,7,8,8,22,0,136,11,14,15,96,22,0,137,11,14,0,4,21,0,11,21,0,57,0,24,7,8,22,0,138,11,14,15,97,22,0,139,11,14,21,0,139,21,0,5,21,0,9,0,19,21,0,99,7,8,21,0,8,21,0,100,7,0,24,19,21,0,8,21,0,37,7,21,0,8,21,0,120,21,0,9,21,0,135,21,0,9,21,0,138,8,8,7,19,7,22,0,140,11,14,21,0,20,21,0,10,15,98,8,22,0,141,11,14,31,0,67,0,21,21,0,5,8,0,20,21,0,18,21,0,9,21,0,94,8,8,22,0,142,11,14,31,0,113,0,21,21,0,73,8,22,0,143,11,14,31,0,125,0,21,31,0,124,8,22,0,144,11,14,21,0,137,0,24,7,0,21,31,0,140,8,22,0,145,11,14,21,0,8,31,0,137,0,23,7,7,0,21,31,0,139,21,0,5,7,8,22,0,146,11,14,15,99,22,0,147,11,14,21,0,5,0,20,15,100,8,22,0,148,11,14,15,101,22,0,149,11,14,15,102,22,0,150,11,14,31,0,149,0,21,31,0,45,8,22,0,151,11,14,21,0,135,21,0,9,21,0,135,8,21,0,37,21,0,100,21,0,5,19,21,0,8,21,0,145,7,19,0,1,0,23,19,22,0,152,11,14,15,103,0,1,0,23,19,22,0,153,11,14,21,0,5,0,20,0,24,31,0,83,31,0,53,8,21,0,11,21,0,20,8,0,21,31,0,52,8,8,22,0,154,11,14,21,0,128,0,21,31,0,54,8,22,0,155,11,14,15,104,22,0,156,11,14,15,105,22,0,157,11,14,15,106,22,0,158,11,14,31,0,158,22,0,159,11,14,21,0,104,0,21,21,0,17,8,22,0,160,11,14,31,0,60,22,0,161,11,14,31,0,153,0,21,21,0,152,8,22,0,162,11,14,31,0,141,0,21,21,0,120,21,0,11,21,0,146,8,8,22,0,163,11,14,15,107,22,0,164,11,14,0,36,0,23,0,37,0,23,0,38,0,24,0,39,0,24,0,40,0,24,0,41,0,24,0,42,0,33,0,43,0,31,0,44,0,23,0,45,0,24,0,46,0,23,0,47,0,24,0,48,0,23,0,49,0,24,3,28,21,0,164,21,0,7,0,23,7,0,5,0,166,19,8,15,108,9,22,0,165,11,14,0,5,21,0,11,0,167,8,22,0,166,11,14,0,5,21,0,11,0,168,8,22,0,167,11,14,21,0,7,0,23,7,0,5,0,169,19,22,0,168,11,14,15,109,22,0,169,11,14,15,110,22,0,170,11,14,15,111,22,0,171,11,14,0,36,21,0,8,21,0,100,7,0,21,21,0,99,8,0,37,21,0,100,0,38,21,0,8,21,0,84,7,0,21,21,0,5,8,0,39,21,0,84,0,40,21,0,39,0,2,7,0,50,21,0,8,21,0,85,7,0,21,21,0,8,21,0,92,7,8,0,45,21,0,8,21,0,84,7,0,21,21,0,90,21,0,169,21,0,5,8,8,0,44,21,0,6,21,0,100,0,24,19,21,0,84,21,0,8,21,0,100,7,19,0,21,21,0,91,21,0,169,21,0,5,8,8,0,41,21,0,101,0,51,0,23,21,0,9,21,0,166,8,0,21,15,112,8,0,52,21,0,5,0,53,21,0,65,21,0,9,21,0,167,8,21,0,6,21,0,5,19,0,21,21,0,5,8,0,35,15,113,0,21,0,23,21,0,9,21,0,166,8,8,0,54,15,114,0,21,15,115,8,0,55,0,23,21,0,9,21,0,166,8,0,21,21,0,116,21,0,169,21,0,155,21,0,11,0,29,8,8,8,0,56,0,23,21,0,9,21,0,166,8,0,21,21,0,117,21,0,169,21,0,155,8,8,0,57,0,23,21,0,9,21,0,166,8,0,21,21,0,118,21,0,169,21,0,66,8,8,0,58,21,0,119,21,0,11,21,0,100,8,0,21,21,0,119,8,0,59,31,0,150,0,21,31,0,46,8,0,60,0,23,21,0,9,21,0,166,8,0,21,15,116,8,0,61,31,0,171,0,21,31,0,170,8,3,42,21,0,164,21,0,168,8,22,0,172,11,14,15,117,22,0,173,11,14,15,118,22,0,174,11,14,15,119,21,0,10,15,120,8,22,0,175,11,14,0,36,21,0,8,21,0,100,7,0,21,0,25,21,0,12,21,0,84,8,8,0,37,21,0,99,0,21,0,23,21,0,9,21,0,166,8,8,0,38,21,0,8,21,0,84,7,0,21,21,0,86,8,0,39,21,0,92,0,21,0,23,21,0,9,21,0,166,8,8,0,40,21,0,86,0,21,0,23,21,0,9,21,0,166,8,8,0,50,0,2,21,0,84,9,0,21,0,23,21,0,9,21,0,166,8,8,0,45,21,0,8,21,0,84,7,0,21,21,0,86,8,0,44,21,0,6,21,0,100,0,24,19,21,0,84,21,0,8,21,0,100,7,19,0,21,21,0,101,21,0,9,21,0,86,8,21,0,101,9,8,0,41,21,0,7,0,24,7,21,0,100,21,0,99,19,0,21,0,23,21,0,9,21,0,166,8,8,3,18,21,0,164,21,0,168,8,22,0,176,11,14,15,121,0,62,21,0,176,0,63,15,122,0,64,15,123,0,65,15,124,0,66,15,125,21,0,9,15,126,8,3,10,21,0,164,21,0,7,21,0,168,7,8,7,22,0,177,11,14,0,24,15,127,21,0,154,0,23,0,29,3,2,19,21,0,57,15,128,7,21,0,65,21,0,11,0,32,8,31,0,32,0,67,7,3,2,19,21,0,29,21,0,90,7,9,3,2,21,0,156,0,0,21,0,98,0,27,19,8,22,0,178,11,14,15,129,15,130,0,68,21,0,175,0,69,15,131,0,70,15,132,0,71,21,0,7,0,23,21,0,9,21,0,166,8,7,15,133,15,134,3,2,21,0,156,21,0,98,21,0,11,0,23,8,8,3,2,21,0,156,21,0,5,21,0,9,21,0,15,8,8,0,72,15,135,0,73,15,136,15,137,21,0,5,3,2,21,0,156,21,0,6,8,21,0,6,21,0,9,21,0,178,8,19,0,74,15,138,3,14,31,0,164,21,0,7,21,0,168,7,8,7,7,22,0,179,11,14,15,139,22,0,180,11,14,15,140,21,0,117,21,0,11,0,24,8,21,0,5,21,0,155,21,0,9,31,0,172,8,9,21,0,7,21,0,7,0,23,7,0,5,0,170,19,7,21,0,5,21,0,29,31,0,175,7,9,31,0,180,31,0,177,31,0,179,3,6,21,0,156,21,0,6,8,21,0,155,19,9,22,0,181,11,14,15,141,31,0,181,21,0,7,0,23,7,0,5,0,171,19,3,3,21,0,120,0,27,0,24,0,25,3,3,17,21,0,156,0,0,8,22,0,182,11,14,15,142,22,0,183,11,14,0,52,0,53,0,62,0,68,0,69,0,73,0,74,0,72,0,75,3,9,0,47,0,46,0,76,3,3,0,51,0,54,0,57,0,60,0,77,0,78,0,61,3,5,0,79,0,55,0,56,0,58,0,59,0,80,0,81,3,7,3,6,21,0,57,21,0,160,7,16,15,143,16,22,0,184,11,14,21,0,99,21,0,100,21,0,92,21,0,84,31,0,85,31,0,86,21,0,88,21,0,89,21,0,87,21,0,101,21,0,90,21,0,91,21,0,93,21,0,94,21,0,95,21,0,96,21,0,98,21,0,97,21,0,65,21,0,66,21,0,6,21,0,5,31,0,160,21,0,143,21,0,142,21,0,116,21,0,117,21,0,118,31,0,122,21,0,121,21,0,119,31,0,151,21,0,120,21,0,135,21,0,136,21,0,154,21,0,155,21,0,145,31,0,162,21,0,146,31,0,163,21,0,144,0,5,21,0,7,21,0,8,21,0,82,21,0,57,21,0,173,31,0,183,21,0,29,21,0,112,0,19,21,0,9,21,0,10,21,0,11,21,0,12,21,0,161,0,21,21,0,156,21,0,134,21,0,133,21,0,159,0,22,3,63,15,144,16,25,0,23,21,0,1,3,2,25,21,0,1,25,21,0,1,22,1,1,22,1,2,4,2,12,25,21,0,1,15,145,21,0,5,0,16,21,0,1,21,0,4,21,0,2,17,17,7,21,0,2,17,25,21,0,1,25,21,0,2,25,21,0,1,25,21,0,1,14,21,0,4,25,21,0,1,21,1,6,21,0,2,17,21,0,4,21,0,1,17,25,21,0,1,21,0,5,21,0,2,17,21,0,4,16,25,21,0,1,21,0,5,16,21,0,4,21,0,2,21,0,5,16,17,25,21,0,1,21,0,5,21,0,1,21,1,6,21,0,2,17,21,0,4,16,17,25,21,0,1,21,0,5,16,21,0,4,21,0,1,21,1,6,21,0,2,17,17,25,21,0,1,15,146,21,1,5,21,0,4,3,2,0,16,21,0,1,21,0,5,21,0,2,17,17,7,21,0,2,17,25,21,0,1,3,1,0,1,21,0,1,17,25,21,0,2,21,0,1,3,2,25,21,0,1,3,1,25,21,0,1,3,1,0,15,3,0,17,0,1,21,0,1,17,25,21,0,2,21,0,1,3,2,25,21,0,2,21,0,1,3,2,25,21,0,1,0,12,16,0,12,0,24,17,0,5,0,83,17,14,21,0,1,22,0,5,11,21,1,27,16,22,0,6,11,14,21,0,4,22,0,7,11,14,21,0,1,21,1,6,0,21,15,147,15,148,3,2,21,1,4,21,0,6,21,1,22,0,23,17,8,8,21,0,2,17,22,0,8,11,14,21,0,6,0,17,16,0,18,0,7,21,1,11,0,24,0,7,21,0,6,17,8,7,16,0,18,15,149,7,16,14,21,0,8,25,21,1,22,0,18,0,12,0,7,0,24,19,7,21,0,1,19,0,19,0,8,7,9,21,1,29,0,6,7,9,25,21,1,7,21,1,0,0,18,21,1,30,21,0,1,7,21,1,8,0,16,7,21,0,2,19,7,16,7,0,16,15,150,19,25,15,151,0,12,21,0,1,21,1,30,21,1,0,7,16,19,25,21,0,2,0,7,21,0,1,21,1,27,16,17,0,17,16,0,18,21,1,7,21,0,1,7,0,16,0,6,21,1,11,21,0,2,8,19,7,16,25,21,0,2,21,1,27,16,22,0,3,11,14,21,0,1,21,1,27,16,0,6,21,0,3,17,0,17,16,0,18,21,0,2,21,1,12,0,16,8,21,1,8,21,0,1,7,0,16,21,0,3,21,1,12,0,7,8,19,3,2,21,1,4,0,13,21,1,11,31,0,3,8,8,7,16,25,21,0,1,21,1,34,0,24,17,22,0,3,11,21,1,29,0,8,7,0,24,17,22,0,4,11,14,21,0,4,0,17,16,0,15,31,0,3,17,0,18,0,6,21,1,11,0,8,21,1,11,31,0,4,8,8,21,1,8,0,16,7,21,0,1,0,15,16,19,7,21,0,2,17,25,21,0,2,0,18,21,0,1,21,1,12,0,16,8,7,16,25,15,152,22,0,2,11,14,15,153,22,0,3,11,14,21,0,3,21,0,1,7,21,1,8,31,0,3,21,1,8,21,0,1,7,7,7,3,2,21,1,4,0,12,21,1,10,21,1,23,8,8,31,0,2,21,0,1,7,3,2,21,1,4,0,12,21,1,10,0,12,8,8,25,15,154,21,0,1,7,22,0,2,11,14,21,0,1,21,0,2,0,20,15,155,15,156,3,2,21,1,4,21,1,14,21,1,10,21,1,23,8,8,0,21,0,18,21,0,2,7,8,8,21,0,2,0,20,21,1,38,21,0,2,7,8,3,3,21,1,4,21,1,14,21,1,10,0,6,8,8,25,21,0,1,21,1,41,21,0,2,17,25,21,0,1,0,14,21,1,10,21,1,129,8,21,0,2,17,22,0,3,11,14,31,0,3,21,1,29,21,1,130,21,0,1,0,15,16,21,1,12,0,16,8,21,1,12,21,1,42,21,1,11,21,0,2,0,15,16,21,1,12,0,16,8,8,8,7,7,16,22,0,4,11,14,0,23,21,1,8,31,0,4,7,16,25,21,0,1,0,12,16,0,13,0,24,17,0,5,0,86,17,14,21,0,1,21,1,27,16,22,0,6,11,14,21,0,1,21,1,34,0,24,17,21,1,29,0,8,7,0,24,17,22,0,7,11,14,21,0,1,0,15,16,22,0,8,11,14,0,23,22,0,9,11,22,0,10,11,14,21,0,8,0,23,0,18,21,1,15,7,21,1,29,0,8,7,0,24,19,3,2,21,1,4,21,0,6,21,1,22,0,26,17,0,8,0,24,0,12,21,0,7,17,17,8,16,21,1,5,21,1,13,21,0,1,21,1,12,15,157,8,8,16,0,7,0,24,17,22,0,11,11,14,21,0,1,0,18,21,0,10,21,1,12,0,7,8,0,7,21,1,11,21,0,9,8,3,2,0,16,21,0,5,17,7,0,4,21,1,11,0,3,8,9,15,158,21,0,4,7,3,2,21,1,4,31,0,11,8,16,0,1,0,23,17,25,21,0,1,0,12,16,0,12,0,24,17,0,5,0,87,17,14,21,0,1,21,1,27,16,22,0,3,11,14,21,0,1,21,0,3,21,1,22,0,23,17,21,1,13,15,159,8,16,0,1,0,23,17,25,21,0,1,21,1,27,16,22,0,3,11,14,21,0,1,21,1,34,0,24,17,22,0,4,11,21,1,29,0,8,7,0,24,17,22,0,5,11,14,31,0,3,0,17,16,0,18,21,1,7,21,0,1,0,15,16,7,0,16,0,8,21,1,11,21,0,5,8,21,1,12,0,6,8,19,7,31,0,5,0,17,16,0,15,31,0,4,17,17,25,21,0,1,21,1,14,16,21,1,167,16,14,21,0,1,0,12,16,21,1,22,0,23,17,25,21,0,1,0,12,16,21,1,8,0,7,7,0,24,17,22,0,3,11,14,21,0,1,0,14,16,22,0,4,11,14,21,0,4,0,16,21,0,3,17,22,0,5,11,14,31,0,3,0,17,16,0,18,31,0,4,21,1,12,0,16,8,7,16,22,0,6,11,14,21,0,6,21,1,29,0,8,7,0,24,17,0,17,16,0,15,31,0,6,17,0,18,21,1,7,21,0,1,0,15,16,7,0,16,0,8,21,1,11,21,0,5,8,21,1,12,0,6,8,19,7,31,0,5,0,17,16,17,25,21,0,1,0,12,16,0,13,0,24,17,0,5,0,89,17,14,21,0,1,21,1,27,16,22,0,3,11,14,21,0,1,21,1,37,21,0,3,0,17,16,0,18,0,7,21,1,11,0,24,0,7,31,0,3,17,8,7,16,17,25,21,0,2,21,1,15,16,0,5,0,90,17,14,21,0,1,21,1,27,16,22,0,3,11,14,0,23,0,12,21,0,3,17,0,6,21,0,3,17,0,9,21,0,2,17,21,1,24,16,0,8,21,0,3,17,0,7,22,0,2,13,14,21,0,1,21,1,37,21,0,3,0,17,16,0,18,21,1,5,0,13,21,0,2,0,7,21,0,3,17,19,0,8,31,0,3,19,0,7,21,1,5,19,0,6,21,0,2,19,7,16,17,25,21,0,1,0,12,16,0,13,0,24,17,0,5,0,91,17,14,21,0,1,21,1,27,16,0,6,0,24,17,0,17,16,0,18,21,0,1,21,1,12,21,1,37,21,1,11,0,17,8,8,7,16,0,1,21,1,11,0,16,21,1,11,0,23,8,8,16,25,21,0,1,0,12,16,0,13,0,24,17,0,5,0,92,17,14,21,0,1,21,1,27,16,22,0,3,11,14,21,0,3,0,6,0,24,17,0,17,16,0,18,21,0,1,21,1,12,21,1,37,21,1,11,15,160,8,8,7,16,0,1,21,1,11,0,16,21,1,11,21,0,3,8,8,16,25,21,1,37,21,1,11,21,0,1,21,1,43,21,1,42,21,1,8,21,1,42,7,3,2,0,16,21,0,1,17,8,8,25,21,0,1,0,12,16,0,13,0,24,17,0,5,0,93,17,14,21,0,1,21,1,27,16,21,1,22,0,23,17,0,5,0,94,17,14,21,0,1,21,1,36,0,23,21,1,22,16,17,25,21,0,2,21,1,14,16,0,5,0,95,17,14,21,0,2,0,18,21,1,15,7,16,0,15,16,21,1,29,0,8,7,0,24,17,0,5,0,96,17,14,21,0,1,21,1,27,16,22,0,3,11,14,21,0,2,0,18,21,1,23,21,1,11,21,0,3,8,0,8,0,13,21,1,11,21,0,3,0,7,16,8,19,7,16,0,15,16,21,1,29,0,8,7,0,24,17,0,5,0,97,17,14,21,0,1,21,1,37,21,1,11,0,18,21,1,5,21,1,23,0,23,19,0,8,31,0,3,19,0,6,21,1,5,19,7,8,21,0,2,17,25,21,0,1,21,1,1,16,22,0,3,11,14,21,0,3,0,16,0,23,17,0,23,21,1,12,0,13,8,21,0,3,21,1,9,21,1,27,8,21,1,8,0,7,7,0,24,19,0,17,9,21,1,29,0,8,21,1,11,0,6,21,1,11,0,24,8,21,1,8,0,16,7,31,0,3,19,21,0,0,9,8,7,0,24,19,3,2,21,1,4,0,13,21,1,11,0,25,8,8,16,25,21,0,1,15,161,21,1,6,21,1,55,9,21,1,13,15,162,8,3,2,21,1,4,21,1,6,21,1,9,0,0,8,0,13,0,27,19,8,21,0,2,17,25,21,0,1,21,1,20,21,1,10,21,0,4,21,1,56,21,1,38,21,0,4,7,0,21,0,18,21,0,4,7,8,8,8,21,0,2,17,25,21,0,1,25,21,0,1,21,0,5,21,1,10,21,0,4,8,21,0,2,17,22,0,6,11,14,21,0,1,21,1,62,21,0,5,7,16,22,0,7,22,0,8,4,2,11,14,21,1,5,21,1,9,21,1,59,8,0,7,0,24,19,21,1,13,15,163,8,22,0,9,11,14,21,1,5,0,20,15,164,8,22,0,10,11,14,31,0,8,31,0,9,21,0,6,17,21,1,7,21,0,1,7,21,1,12,31,0,10,8,21,1,7,21,0,5,7,21,1,182,9,15,165,9,3,2,21,1,4,21,1,59,8,16,25,21,0,1,21,0,2,9,25,21,0,1,22,0,3,22,0,4,22,0,5,4,3,11,14,31,0,5,31,0,4,31,0,3,19,25,21,0,1,22,0,3,22,0,4,4,2,11,14,31,0,4,31,0,3,7,25,21,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,21,1,7,21,1,58,7,22,0,5,11,14,21,1,47,21,1,29,21,1,5,21,1,14,9,21,1,13,0,15,21,1,12,0,16,8,8,7,21,0,1,19,0,23,0,14,21,1,5,21,1,29,0,8,7,0,24,19,0,17,9,21,1,12,0,15,8,9,3,2,21,1,4,21,1,14,8,9,22,0,6,11,14,15,166,22,0,7,11,14,21,1,1,0,23,0,16,21,1,11,0,25,8,0,12,21,1,7,21,0,7,7,19,3,2,21,1,4,0,16,21,1,11,0,23,8,0,12,0,30,19,8,9,22,0,8,11,14,15,167,22,0,9,11,14,21,0,9,0,24,7,22,0,10,11,14,31,0,9,0,23,7,22,0,11,11,14,15,168,22,0,12,11,14,15,169,22,0,13,11,14,15,170,22,0,14,11,14,0,0,21,1,21,0,27,19,21,1,13,21,0,14,21,1,59,7,8,22,0,15,11,14,31,0,14,21,0,8,7,22,0,16,11,14,21,1,7,21,1,5,31,0,11,21,1,11,0,24,8,21,0,12,9,21,0,10,21,1,11,0,23,8,21,0,12,9,21,0,10,21,1,11,0,24,8,31,0,12,9,21,0,10,21,1,11,0,24,8,31,0,13,9,31,0,10,21,1,11,0,24,8,21,0,16,15,171,15,172,3,3,21,1,4,21,1,7,0,27,7,0,7,0,0,19,8,3,7,7,0,16,21,1,184,19,15,173,21,1,5,19,22,0,17,11,14,21,1,1,21,1,76,21,1,11,0,24,8,21,1,5,0,16,0,23,19,31,0,17,9,21,0,15,9,21,1,7,21,0,5,7,15,174,21,1,12,21,1,61,8,21,1,5,0,16,0,23,19,31,0,15,9,3,4,21,1,4,21,1,6,21,1,9,0,27,21,1,5,0,25,3,2,21,1,4,0,13,21,1,11,0,25,8,8,3,2,21,1,4,0,13,21,1,11,0,23,8,8,8,8,0,16,21,1,11,0,23,8,19,9,22,0,18,11,14,21,0,4,21,0,18,16,0,23,21,0,7,0,29,8,3,2,21,1,29,15,175,7,16,0,23,21,1,58,3,2,21,1,1,21,1,37,0,24,0,27,3,2,19,3,2,21,1,4,21,0,8,8,16,25,21,0,1,21,1,57,21,1,63,7,21,0,2,17,0,15,16,21,1,29,0,8,7,0,24,17,25,21,0,2,0,16,0,24,17,21,0,1,3,2,21,1,4,21,0,2,0,16,0,23,17,8,25,21,0,1,0,15,16,0,18,21,1,64,7,16,21,1,29,0,7,0,8,0,13,19,0,7,21,1,6,19,7,0,23,17,0,6,0,24,17,25,0,1,21,1,12,21,1,5,0,20,21,1,7,3,0,7,0,15,21,1,66,21,1,10,21,0,2,8,19,8,8,21,1,68,21,1,5,0,20,21,1,6,8,21,0,1,19,3,2,21,1,4,0,15,21,1,9,21,1,27,8,21,1,22,0,23,19,8,25,21,0,1,0,15,16,0,16,0,23,17,21,1,66,16,22,0,3,11,14,21,0,1,0,15,16,0,18,21,1,66,21,1,65,21,0,3,19,7,16,21,1,29,0,8,7,0,24,17,0,5,0,99,17,14,21,0,3,21,1,29,0,8,7,0,24,17,0,17,16,0,15,31,0,3,17,0,18,21,1,8,21,1,17,21,1,12,0,16,8,7,7,21,0,1,17,25,0,29,22,0,3,11,22,0,4,11,14,3,0,22,0,5,11,14,21,0,1,22,0,6,11,14,21,0,1,0,18,21,1,27,7,16,21,1,44,16,0,18,15,176,7,16,25,21,0,1,0,15,16,22,0,3,11,21,1,27,16,22,0,4,11,14,21,0,3,0,18,21,1,66,7,16,22,0,5,11,14,21,0,5,0,16,0,23,17,21,1,27,16,22,0,6,11,14,21,0,1,0,12,16,22,0,7,11,14,21,0,5,0,18,21,1,27,0,12,21,0,6,19,7,16,21,1,29,0,8,7,0,24,17,0,5,0,100,17,14,21,0,7,21,1,21,21,0,6,17,0,5,0,101,17,14,15,177,22,0,8,11,14,21,0,1,21,1,66,16,22,0,9,11,14,0,24,22,0,10,11,14,0,23,21,1,22,16,22,0,11,11,22,0,12,11,14,21,0,7,0,17,16,21,1,57,15,178,7,21,0,9,21,1,47,16,21,0,8,0,8,7,0,24,17,21,1,47,16,17,14,21,1,57,15,179,31,0,3,0,18,0,15,7,16,7,7,22,0,13,11,14,21,0,11,21,0,13,15,180,3,2,21,1,4,21,0,6,21,1,22,21,0,7,17,8,21,0,12,17,25,21,0,2,21,1,27,16,22,0,3,11,14,21,0,1,21,1,27,16,22,0,4,11,14,21,0,3,21,1,21,21,0,4,17,0,5,0,104,17,14,31,0,4,0,17,16,0,18,21,0,1,21,1,12,0,16,8,21,1,12,0,8,21,1,11,21,0,2,21,1,12,0,16,8,8,21,1,5,3,2,21,1,4,21,1,6,0,13,31,0,3,19,8,8,7,16,25,21,0,1,22,0,2,22,0,3,22,0,4,4,3,11,14,0,107,21,1,35,31,0,2,17,21,1,35,0,106,17,22,0,5,11,14,0,108,22,0,6,11,14,0,109,22,0,7,11,14,15,181,25,21,0,1,21,1,26,16,22,0,5,11,21,1,22,21,1,11,21,0,2,8,21,1,13,21,0,4,8,16,14,31,0,5,0,17,16,0,18,21,0,1,0,6,21,0,2,17,21,1,12,0,6,8,7,0,18,0,23,21,1,12,21,1,22,8,21,1,13,0,31,8,7,9,0,18,0,13,21,1,11,21,0,2,8,21,1,13,0,31,8,7,3,2,21,1,4,21,0,1,21,1,22,0,23,17,8,16,25,21,0,1,14,0,6,21,1,25,0,23,19,0,17,9,0,7,21,1,25,0,23,19,0,17,9,0,18,0,6,7,21,1,5,21,1,9,21,1,22,8,19,3,2,21,1,4,21,1,22,21,1,11,0,23,8,8,25,21,0,1,0,12,16,0,13,0,24,17,0,5,0,112,17,14,21,0,2,0,12,21,1,10,0,7,8,21,0,1,17,22,0,3,11,14,21,0,3,0,13,0,23,17,0,5,0,113,17,14,21,0,3,21,1,21,0,24,17,0,5,0,114,17,14,21,0,1,21,1,34,0,24,17,22,0,4,11,14,21,0,4,21,1,27,16,0,17,16,0,18,21,1,7,21,0,2,21,1,66,16,7,0,16,31,0,3,0,7,0,24,17,21,1,12,0,6,8,19,0,12,21,0,4,21,1,12,0,16,8,19,7,16,21,1,29,0,8,7,0,24,17,0,5,0,115,17,14,31,0,4,21,1,29,0,8,7,0,24,17,25,21,0,1,21,1,77,21,0,2,17,22,0,3,11,14,21,0,2,0,24,21,1,27,3,2,21,1,4,21,1,5,0,12,21,1,10,0,13,8,21,0,1,19,8,16,0,8,21,0,3,17,22,0,4,11,14,21,0,1,21,1,27,16,0,8,31,0,3,17,0,17,16,0,18,21,0,2,21,1,17,16,21,1,12,0,16,8,21,1,7,21,0,1,0,15,16,7,0,16,21,0,4,21,1,12,0,7,8,19,3,2,21,1,4,0,13,21,1,11,31,0,4,8,8,7,16,0,15,21,0,1,21,1,66,16,17,25,21,0,1,21,1,77,21,0,2,17,22,0,3,11,14,21,0,1,21,1,27,16,0,8,21,0,3,17,22,0,4,11,14,21,0,2,0,24,21,1,27,3,2,21,1,4,21,1,5,0,12,21,1,10,0,13,8,21,0,1,19,8,16,0,8,31,0,3,17,22,0,5,11,14,21,0,5,0,7,21,0,4,17,22,0,6,11,14,31,0,4,0,17,16,0,18,21,1,7,21,0,1,0,15,16,7,0,16,31,0,5,21,1,12,0,6,8,19,21,1,7,21,0,2,21,1,17,16,7,0,16,21,0,6,21,1,12,0,7,8,19,3,2,21,1,4,0,13,21,1,11,31,0,6,8,8,7,16,0,15,21,0,1,21,1,66,16,17,25,21,0,1,0,12,16,0,13,0,24,17,0,5,0,112,17,14,21,0,1,21,1,34,0,24,17,21,1,5,21,1,29,0,8,7,0,24,19,0,17,9,21,1,12,0,15,8,16,0,18,21,0,1,0,1,16,7,16,25,21,0,2,0,12,16,21,1,21,0,24,17,0,5,0,116,17,14,21,0,2,21,1,17,16,22,0,2,12,21,1,27,16,22,0,3,11,14,21,0,1,21,0,3,21,1,22,0,23,17,21,1,13,21,1,5,0,20,15,182,8,8,21,0,2,17,25,21,0,1,0,29,21,1,110,21,0,4,8,21,0,2,17,25,21,0,1,22,0,3,11,14,21,1,20,21,1,12,15,183,15,184,3,2,21,1,4,21,1,6,21,1,9,21,1,65,21,1,22,21,0,2,19,8,8,8,25,21,0,2,21,1,84,21,0,1,17,21,1,24,16,0,8,21,0,2,17,0,7,21,0,1,17,25,21,0,2,21,0,1,3,2,0,16,21,0,1,21,1,23,21,0,2,17,17,25,21,0,2,21,0,1,3,2,0,16,21,0,1,21,1,22,21,0,2,17,17,25,21,0,1,0,21,21,0,1,0,1,0,23,21,0,2,16,19,8,25,21,0,2,21,1,96,16,21,1,97,0,24,17,0,5,0,126,17,14,21,0,2,21,1,17,16,22,0,3,11,14,21,0,3,0,18,21,1,16,7,16,21,1,101,16,22,0,4,11,21,1,29,21,1,99,7,0,23,17,22,0,5,11,14,21,0,5,21,1,97,0,24,17,0,5,0,127,17,14,21,0,1,21,1,17,16,22,0,6,11,21,1,95,16,22,0,7,11,14,21,0,3,21,1,5,21,1,29,21,1,92,7,0,24,19,15,185,3,2,21,1,4,31,0,5,8,16,22,0,8,11,14,21,0,6,21,0,7,21,1,95,21,0,8,17,21,1,13,21,1,5,0,20,15,186,8,8,16,0,15,21,0,3,17,25,15,187,22,0,3,11,14,15,188,22,0,4,11,14,21,0,1,21,0,3,31,0,4,3,2,21,1,4,21,1,14,8,16,25,21,0,1,21,1,96,16,21,1,97,0,24,17,0,5,0,133,17,14,21,0,1,21,1,105,16,22,0,1,12,14,21,0,1,21,1,95,16,0,27,21,1,12,21,1,98,8,21,1,90,21,1,98,21,1,11,0,24,8,19,16,0,5,0,134,17,14,21,0,1,0,18,21,1,15,7,16,21,1,29,21,1,90,7,0,24,17,0,5,0,135,17,14,21,0,1,25,21,0,1,21,1,9,21,1,107,8,21,1,5,21,1,9,21,1,93,8,21,1,57,0,16,7,21,1,95,21,1,12,21,1,8,21,1,87,21,1,99,0,24,19,21,1,100,21,1,6,19,7,8,19,0,24,0,23,3,2,0,21,0,25,3,1,8,19,25,21,0,1,21,1,108,21,0,5,7,21,0,2,17,22,0,6,11,21,1,94,0,23,17,22,0,7,11,14,21,0,4,22,0,8,11,14,15,189,22,0,9,11,14,21,0,1,21,0,9,31,0,6,7,21,0,2,17,25,21,0,1,21,1,108,21,0,5,7,21,1,57,21,1,100,21,1,12,21,1,88,8,21,1,100,21,1,89,0,23,19,3,2,21,1,4,21,1,5,21,1,98,0,23,19,8,7,21,1,96,21,1,10,21,1,18,8,19,21,0,2,17,22,0,6,11,14,15,190,22,0,7,11,14,21,1,5,21,1,93,9,21,0,7,21,1,5,0,18,21,1,93,7,9,3,3,21,1,4,21,1,96,21,1,12,21,1,97,8,21,1,99,0,24,19,21,1,92,0,23,21,1,12,21,1,94,8,19,8,22,0,7,12,14,21,0,1,21,0,7,21,0,6,0,16,21,1,11,21,1,95,21,1,8,21,1,100,7,0,24,19,8,16,17,21,1,57,21,0,4,7,21,0,2,31,0,7,31,0,6,0,16,0,23,17,17,17,21,1,94,16,25,21,0,1,21,1,96,16,21,1,98,0,24,17,0,5,0,136,17,14,21,0,4,22,0,5,11,14,15,191,22,0,6,11,14,21,0,1,31,0,6,15,192,3,2,21,1,4,0,24,0,21,21,1,95,21,1,93,0,23,19,8,8,21,0,2,17,25,21,0,1,21,1,66,21,1,10,21,1,18,8,21,0,2,17,22,0,3,11,14,21,0,3,0,18,21,1,95,7,16,22,0,4,11,21,1,29,21,1,89,7,0,24,17,22,0,5,11,14,21,0,4,21,1,100,21,0,5,17,21,1,97,0,24,17,21,1,29,21,1,90,7,0,24,17,0,5,0,138,17,14,21,0,3,21,1,57,21,1,37,21,1,11,0,24,21,1,100,21,0,5,17,0,17,16,21,1,12,21,1,99,8,8,7,21,0,5,21,1,101,21,0,4,17,17,22,0,6,11,14,21,0,6,21,1,29,21,1,65,7,16,0,5,0,139,17,14,31,0,3,21,1,57,0,24,21,1,5,0,16,0,23,19,3,2,21,1,4,21,1,6,8,7,31,0,4,21,1,96,31,0,5,17,17,21,1,29,21,1,99,7,0,23,17,22,0,7,11,14,21,0,1,21,1,105,21,1,10,21,1,35,8,21,0,2,17,21,1,105,31,0,6,0,16,0,23,17,21,1,35,31,0,7,3,1,17,17,25,21,0,2,21,1,14,21,1,13,21,1,105,0,16,0,23,19,8,16,22,0,2,12,14,21,0,2,21,1,16,16,0,5,0,88,17,14,21,0,2,22,0,3,11,22,0,4,11,14,21,0,1,21,1,37,21,0,1,21,1,95,16,21,1,92,21,0,3,17,0,17,16,0,19,21,1,8,15,193,21,1,13,15,194,8,7,7,16,17,25,21,0,1,21,1,95,21,1,10,21,1,96,8,21,0,2,17,0,5,0,140,17,14,21,0,1,21,1,114,21,0,2,17,25,21,0,1,0,18,21,1,15,7,16,21,1,29,21,1,90,7,0,24,17,0,5,0,141,17,14,21,0,1,21,1,98,0,29,17,21,1,29,21,1,90,7,0,24,17,0,5,0,142,17,14,0,3,22,0,5,11,14,21,0,1,21,1,6,0,21,0,23,8,21,1,13,21,1,5,15,195,21,1,95,21,1,12,21,1,8,21,1,100,7,8,19,8,21,0,2,17,22,0,1,12,14,21,0,1,0,4,21,0,1,21,0,5,16,22,0,6,11,17,22,0,7,11,14,0,23,22,0,8,11,14,31,0,6,0,18,21,1,118,21,1,9,0,18,15,196,7,8,21,0,4,9,7,16,25,21,0,1,21,1,96,16,21,1,96,0,24,17,0,5,0,143,17,14,21,1,123,21,1,5,7,22,0,3,11,14,21,0,1,21,0,3,0,1,0,23,21,1,9,21,1,118,8,19,0,18,15,197,7,21,1,29,0,18,0,18,21,1,35,7,7,7,3,0,21,1,93,16,21,1,93,16,19,0,1,0,18,0,23,7,3,0,21,1,12,21,1,105,8,0,1,21,1,5,19,9,19,3,2,21,1,4,21,1,65,21,1,93,0,24,19,8,16,25,21,0,1,21,1,14,16,0,5,0,144,17,14,21,0,2,21,1,65,21,1,94,0,25,19,21,1,13,21,1,20,21,1,9,21,1,18,8,8,16,22,0,2,12,14,21,0,2,21,1,96,16,21,1,96,0,24,17,0,5,0,145,17,14,21,0,2,0,18,21,1,96,7,16,22,0,3,11,21,1,29,21,1,99,7,0,23,17,22,0,4,11,14,21,0,1,21,1,96,16,21,1,98,21,0,4,17,0,5,0,146,17,14,21,0,1,21,1,66,16,21,1,116,21,0,4,17,21,1,100,21,0,2,0,18,21,1,66,7,16,21,1,73,16,17,22,0,5,11,14,21,0,5,21,0,3,21,1,96,0,24,17,21,1,120,21,0,3,17,21,1,12,21,1,98,8,21,1,90,21,1,98,21,1,11,0,23,8,19,16,21,1,29,21,1,90,7,0,24,17,0,5,0,147,17,14,0,23,3,1,21,1,35,31,0,5,17,21,1,37,21,0,3,0,19,21,1,99,7,16,21,1,121,0,23,17,17,21,1,88,31,0,3,17,22,0,6,11,14,21,0,2,0,18,21,1,105,7,16,22,0,2,12,0,18,21,1,95,7,16,22,0,7,11,14,21,1,7,21,0,1,7,21,1,104,21,0,1,21,1,34,31,0,4,17,21,1,12,21,1,35,8,19,22,0,8,11,14,21,0,7,21,1,29,21,1,92,7,0,24,17,3,1,21,0,8,16,21,1,12,21,1,37,8,22,0,9,11,14,21,0,2,0,16,21,1,11,0,23,8,21,1,10,21,1,123,21,0,9,7,8,21,1,57,21,1,123,21,1,5,7,7,21,1,92,31,0,7,21,1,119,16,21,1,121,0,24,17,0,19,21,1,92,7,16,21,1,119,16,19,21,1,29,0,18,0,18,21,1,99,7,7,7,9,0,18,31,0,9,7,9,3,2,21,1,4,21,1,5,21,1,9,21,1,95,8,21,1,95,0,24,19,8,31,0,6,17,0,1,21,0,2,0,18,0,23,7,16,31,0,8,16,17,25,21,0,2,21,1,96,16,21,1,96,0,24,17,0,5,0,148,17,14,21,0,1,21,1,66,16,22,0,3,11,21,1,95,21,1,10,21,1,96,8,21,0,2,17,0,5,0,149,17,14,21,0,2,0,18,21,1,15,7,16,21,1,29,21,1,90,7,0,24,17,0,5,0,150,17,14,21,0,3,21,1,93,21,1,90,21,1,100,21,1,12,21,1,97,8,19,21,0,2,17,21,1,29,21,1,90,7,0,24,17,0,5,0,151,17,14,0,23,21,1,93,21,0,2,17,21,1,92,21,0,3,17,21,1,99,21,0,2,17,22,0,2,12,14,21,0,2,21,1,95,16,21,1,101,21,1,11,21,1,118,8,16,21,1,100,16,21,1,29,21,1,5,21,1,92,31,0,3,21,1,12,0,16,8,19,21,1,99,21,0,2,21,1,12,0,16,8,19,7,0,23,17,21,1,8,0,16,7,21,0,1,21,1,105,16,17,25,21,0,2,0,18,21,0,1,21,1,12,21,1,127,8,7,16,25,21,0,1,21,1,96,21,1,11,0,23,8,21,1,29,21,1,91,7,0,23,19,21,1,10,21,1,8,21,1,100,7,8,21,0,2,17,22,0,3,11,14,21,0,1,0,23,21,0,3,3,2,15,198,3,2,21,1,4,0,23,21,1,96,31,0,3,17,8,21,0,2,17,25,21,0,4,22,0,5,11,14,21,0,2,22,0,6,11,14,21,0,1,22,0,7,11,14,15,199,22,0,8,11,14,21,0,4,21,1,96,21,1,11,0,23,8,21,1,13,21,0,1,8,9,31,0,8,3,2,0,16,21,0,6,21,1,95,0,24,17,17,25,21,0,1,22,0,2,11,14,21,1,93,21,1,11,0,23,8,21,1,13,15,200,8,25,21,0,2,21,1,96,16,21,1,8,21,1,100,7,0,24,17,22,0,5,11,14,21,0,5,21,1,98,0,23,17,0,5,0,152,17,14,21,0,1,21,1,96,16,21,1,98,21,0,5,17,0,5,0,153,17,14,21,0,2,21,1,34,0,24,17,22,0,6,11,21,1,29,21,1,92,7,0,24,17,22,0,7,11,14,0,23,21,1,130,21,0,2,21,1,105,16,21,1,12,0,16,8,21,1,10,21,0,4,8,7,21,0,7,17,22,0,8,11,14,21,0,2,21,1,95,16,0,24,0,24,21,1,12,21,1,100,21,1,9,21,1,118,8,8,21,1,92,21,0,7,19,0,18,21,1,99,21,1,11,31,0,7,8,21,1,12,31,0,8,8,7,9,21,1,8,21,1,98,7,0,23,19,21,1,29,21,1,90,7,0,24,19,3,2,21,1,4,21,1,93,21,1,11,0,23,8,8,16,0,5,0,154,17,14,21,0,1,21,1,96,16,21,1,8,21,1,100,7,31,0,5,17,22,0,9,11,14,21,0,1,21,1,20,16,21,1,34,21,0,9,17,22,0,10,11,14,21,0,10,21,1,129,21,0,6,17,22,0,11,11,14,31,0,11,21,1,29,21,1,130,21,0,1,21,1,105,16,21,1,12,0,16,8,21,1,12,21,0,4,21,1,11,21,0,2,21,1,105,16,21,1,12,0,16,8,8,8,7,7,16,22,0,12,11,14,21,1,8,0,23,7,21,1,98,31,0,12,21,1,11,21,1,92,21,1,11,31,0,6,21,1,29,21,1,92,7,0,24,17,8,8,19,22,0,13,11,14,31,0,9,21,1,118,16,0,18,21,0,1,21,1,66,16,21,1,12,0,16,8,7,16,21,1,5,21,1,29,21,1,92,7,0,24,19,21,1,118,9,21,1,12,21,1,105,8,16,21,1,92,31,0,10,21,1,29,21,1,92,7,0,24,17,17,0,18,15,201,21,1,11,21,0,2,21,1,95,16,8,7,16,0,1,0,23,17,25,21,0,1,22,0,2,11,14,21,1,112,21,1,90,7,21,1,101,9,0,19,21,1,90,7,21,1,112,21,1,99,7,9,3,2,0,16,21,0,1,17,22,0,3,11,14,15,202,0,1,0,23,19,25,21,0,1,21,1,96,16,21,1,98,0,24,17,0,5,0,157,17,14,21,0,1,21,1,135,16,22,0,5,11,14,21,0,1,21,1,95,16,21,1,118,16,0,18,0,24,21,1,5,21,0,1,21,1,96,21,1,93,0,24,19,21,1,13,21,1,82,21,1,93,7,8,16,21,1,37,21,0,5,17,21,1,12,0,16,8,21,1,10,21,1,66,8,0,24,21,1,12,21,1,100,8,19,3,2,21,1,4,21,1,93,21,1,11,0,23,8,8,7,16,21,0,4,21,0,5,17,21,1,37,31,0,5,21,1,138,16,17,0,1,0,23,17,25,21,0,2,21,1,96,16,22,0,3,11,14,21,0,1,21,1,96,16,21,1,98,21,0,3,17,0,5,0,158,17,14,21,0,1,21,0,3,21,1,134,21,1,118,21,1,11,21,0,2,21,1,66,16,21,1,88,21,0,1,21,1,66,16,21,1,116,21,1,11,21,1,100,8,21,0,3,17,21,1,99,0,24,17,17,8,8,16,31,0,3,21,1,134,21,1,65,8,21,0,2,17,0,1,0,23,17,25,21,0,2,21,1,96,16,21,1,97,0,24,17,0,5,0,159,17,14,21,0,1,21,1,66,16,21,1,95,21,1,10,21,1,98,8,21,0,2,17,0,5,0,160,17,14,21,0,2,21,1,105,16,0,18,21,1,16,7,16,21,1,29,21,1,90,7,0,24,17,0,5,0,161,17,25,21,0,1,21,1,66,16,21,1,144,21,0,2,17,0,18,21,1,29,21,1,88,7,7,16,21,1,118,16,0,18,21,1,7,21,0,1,7,21,1,128,21,1,37,21,1,11,21,0,2,8,19,7,16,25,21,0,1,21,1,147,21,0,2,17,14,21,0,2,21,1,105,16,22,0,2,12,14,21,0,2,21,1,146,16,21,1,101,16,21,1,29,21,1,99,7,0,23,17,21,1,100,21,0,1,21,1,96,16,17,22,0,3,11,14,21,0,3,21,1,93,21,0,2,17,21,1,29,21,1,90,7,0,24,17,0,5,0,162,17,14,21,0,1,21,1,148,31,0,3,21,1,118,16,21,1,5,21,1,120,21,1,8,21,1,146,21,1,9,21,1,101,8,7,19,21,0,2,17,21,1,143,21,0,2,17,17,25,21,0,1,21,1,147,21,0,2,17,14,21,0,2,21,1,105,16,22,0,2,12,14,21,0,1,21,1,96,16,22,0,3,11,14,21,0,2,21,0,3,21,1,12,21,1,93,8,21,1,90,21,1,146,19,16,21,1,29,21,1,90,7,0,24,17,21,1,166,16,14,21,0,1,21,1,148,31,0,3,21,1,118,16,21,1,5,21,1,120,21,1,8,21,1,146,21,1,9,21,1,101,8,7,19,21,0,2,17,21,1,143,21,0,2,17,21,1,138,16,17,25,21,0,2,21,1,96,16,21,1,8,21,1,100,7,0,24,17,22,0,3,11,14,21,0,3,21,1,98,0,23,17,0,5,0,163,17,14,21,0,1,21,1,96,16,21,1,98,31,0,3,17,0,5,0,164,17,14,21,0,1,21,1,145,21,1,11,21,0,2,8,21,1,105,21,1,9,21,1,95,21,1,93,0,23,19,21,1,13,21,1,152,21,1,12,21,1,82,21,1,142,7,8,8,8,21,1,105,21,1,7,0,25,7,21,1,143,21,1,66,19,19,9,21,1,10,21,1,145,8,21,0,2,17,25,21,0,1,15,203,21,0,5,21,1,155,21,0,1,21,0,4,21,0,2,17,17,7,21,0,2,17,25,21,0,1,21,1,182,16,25,21,0,1,21,0,5,21,0,2,17,22,0,6,11,14,0,23,22,0,7,11,22,0,8,11,14,21,0,6,0,23,21,1,133,15,204,8,16,14,0,23,15,205,0,21,21,1,7,15,206,7,8,21,0,2,17,22,0,9,11,14,21,0,1,3,1,22,0,10,11,14,15,207,21,1,11,31,0,9,8,22,0,11,11,14,21,0,7,21,0,11,21,0,4,17,22,0,12,11,14,21,0,8,21,1,100,16,21,0,10,31,0,11,21,1,11,21,1,182,8,3,2,21,1,156,21,1,93,21,1,11,0,23,8,8,21,0,4,17,22,0,13,11,14,31,0,6,0,23,21,1,133,21,1,7,31,0,12,31,0,13,3,2,7,21,1,155,0,23,21,1,12,21,1,93,8,19,21,1,155,21,1,87,19,8,16,25,0,25,21,1,84,21,0,2,21,1,95,16,17,21,1,118,16,21,1,92,0,25,17,22,0,3,11,14,21,0,1,21,1,93,16,21,1,143,21,0,2,21,1,154,21,0,3,21,1,99,0,24,17,17,17,21,1,31,21,0,2,21,1,154,31,0,3,17,8,25,0,23,21,0,1,16,25,21,0,1,21,0,4,21,0,2,17,22,0,6,11,14,21,0,6,21,0,5,21,0,2,17,21,1,65,21,0,1,17,21,1,167,16,14,31,0,6,25,21,0,1,21,1,65,16,21,1,96,0,25,17,21,1,166,16,14,21,0,1,0,18,21,1,96,7,16,21,1,96,0,24,17,21,1,29,21,1,90,7,0,24,17,21,1,167,16,14,21,0,1,21,1,143,16,22,0,3,11,14,21,0,3,0,18,21,1,16,7,16,21,1,29,21,1,90,7,0,24,17,21,1,167,16,14,21,0,1,21,1,57,21,1,121,7,0,29,17,21,1,143,16,21,1,94,21,0,3,17,21,1,29,21,1,90,7,0,24,17,21,1,167,16,14,21,0,3,0,3,16,22,0,4,11,14,0,24,21,1,98,21,0,4,17,21,1,29,21,1,90,7,0,24,17,21,1,167,16,14,31,0,4,21,1,101,16,21,1,120,16,22,0,5,11,14,21,0,5,21,1,57,0,29,7,16,21,1,143,21,0,1,21,1,57,21,1,95,7,16,21,1,120,16,17,21,1,154,31,0,5,21,1,143,31,0,3,17,21,1,135,16,17,25,21,0,2,21,1,96,16,21,1,96,0,24,17,21,1,166,16,14,21,0,2,0,18,21,1,16,7,16,21,1,29,21,1,90,7,0,24,17,21,1,166,16,14,21,0,2,21,1,144,16,22,0,3,11,14,21,0,1,21,1,57,21,1,95,7,21,1,10,21,1,65,8,21,0,3,17,21,1,167,16,14,21,0,1,21,1,143,21,1,10,21,1,154,21,1,11,21,1,135,8,8,31,0,3,17,25,21,0,1,21,1,14,16,21,1,167,16,14,21,0,1,21,1,96,16,21,1,96,0,23,17,21,1,167,16,14,21,0,1,21,1,155,16,25,21,0,2,21,1,96,21,1,10,21,1,100,8,21,0,1,17,22,0,3,11,14,21,0,3,0,24,21,1,12,21,1,98,8,21,1,90,21,1,98,21,1,11,0,23,8,19,16,21,1,167,16,14,21,0,2,0,24,21,1,95,3,2,21,1,156,21,0,3,8,16,22,0,4,11,14,21,0,1,21,1,95,16,21,1,98,21,0,4,17,21,1,167,16,14,21,0,1,21,1,154,21,1,116,21,1,11,21,0,4,8,3,2,21,1,156,31,0,3,8,16,21,1,65,21,0,2,17,21,1,167,16,14,21,0,1,21,1,117,31,0,4,17,25,21,0,1,21,1,95,16,21,1,96,0,25,17,21,1,167,16,14,21,0,1,21,1,154,16,21,1,65,21,0,2,17,21,1,167,16,14,21,0,1,21,1,154,0,24,17,25,21,0,1,21,1,95,16,21,1,96,0,24,17,21,1,167,16,14,21,0,1,21,1,154,16,25,21,0,1,21,1,96,16,21,1,96,0,24,17,21,1,166,16,14,21,0,1,0,18,21,1,16,7,16,21,1,29,21,1,90,7,0,24,17,21,1,166,16,14,21,0,1,21,1,117,21,1,11,0,24,8,21,1,98,21,1,117,21,1,11,0,29,8,19,21,1,29,21,1,90,7,0,24,19,16,21,1,167,16,14,21,0,1,0,3,16,25,21,0,1,21,1,20,21,1,10,21,0,4,21,1,56,0,18,21,0,4,7,8,8,21,0,2,17,25,21,0,5,14,21,0,1,21,0,4,21,0,2,17,25,21,0,1,21,1,182,16,25,21,0,2,21,1,12,21,0,1,8,0,21,21,0,2,21,0,1,9,8,25,21,1,155,21,1,11,0,24,8,21,0,1,21,1,12,15,208,8,21,1,155,21,1,11,0,23,8,19,25,21,1,5,21,1,9,21,1,65,8,21,1,93,0,23,19,21,1,167,9,21,1,6,21,1,57,21,1,157,21,0,1,7,7,19,25,21,1,5,21,1,9,21,1,65,8,21,1,93,0,23,19,21,1,167,9,21,1,6,0,23,21,1,9,21,1,166,8,0,21,21,1,173,21,1,157,21,0,1,7,7,8,19,25,21,1,5,21,1,9,21,1,96,8,21,1,93,0,23,19,21,1,167,9,21,1,6,21,1,82,21,1,157,21,0,1,7,21,1,5,21,1,11,21,1,14,21,1,9,21,1,167,8,8,9,7,19,25,21,1,57,21,1,157,21,0,1,7,7,25,21,1,5,21,1,9,21,1,96,8,21,1,93,0,23,19,21,1,167,9,21,1,6,21,1,5,21,0,1,21,1,121,19,0,21,21,1,95,21,1,93,0,24,19,21,1,159,21,1,117,21,1,11,0,24,8,21,0,1,21,1,117,21,1,11,0,29,8,19,21,1,143,21,1,154,19,8,8,19,25,21,0,1,21,1,1,16,25,21,0,1,21,0,2,16,25,21,1,155,21,1,11,0,24,8,21,0,1,21,1,12,15,209,8,21,1,154,21,1,11,0,23,0,25,3,2,8,19,25,21,0,1,21,1,7,15,210,7,3,2,21,1,156,21,1,96,21,1,11,21,1,7,21,1,174,7,8,8,25,21,1,157,21,0,2,7,22,0,3,11,14,21,0,3,21,1,11,21,0,1,8,0,21,31,0,3,8,21,1,157,21,0,1,7,9,25,21,0,1,21,1,161,21,1,157,21,0,2,7,8,25,21,0,1,21,1,159,21,0,2,8,21,1,169,21,0,1,21,1,100,16,21,1,159,21,0,2,8,8,25,21,0,1,21,1,100,16,21,1,159,21,0,2,8,25,21,1,157,21,0,1,7,0,21,21,1,157,21,0,2,7,8,25,21,1,157,21,0,1,7,21,1,11,21,0,2,8,25,21,0,1,0,21,21,1,168,8,25,21,1,157,21,0,2,7,21,1,157,21,0,1,7,9,0,21,21,0,1,21,1,7,0,23,21,1,9,21,1,166,8,7,15,211,3,2,21,1,156,21,1,5,21,1,9,21,1,178,8,8,21,0,2,17,8,25,21,0,1,22,0,3,22,0,4,22,0,5,4,3,11,14,21,1,178,21,1,101,9,22,0,6,11,14,31,0,5,15,212,15,213,21,1,7,21,1,168,7,3,2,21,1,156,21,1,5,21,1,9,21,0,6,8,8,3,2,21,1,156,21,1,6,21,1,9,31,0,6,8,8,31,0,3,17,25,21,0,1,21,1,1,16,25,21,1,5,21,1,65,21,1,9,21,1,167,8,21,0,1,19,21,1,6,21,1,5,19,25,21,0,1,21,1,182,16,21,1,5,15,214,3,2,21,1,156,0,23,21,1,5,21,1,9,21,1,1,8,21,1,154,0,23,0,34,3,2,19,21,1,66,0,30,21,1,174,3,2,19,3,2,21,1,156,21,1,66,21,1,11,21,1,7,21,1,168,7,8,21,1,90,21,1,66,19,8,8,21,0,1,17,25,21,0,1,21,1,57,21,1,95,7,16,21,1,95,21,1,143,21,1,120,19,16,21,1,31,21,0,1,21,1,143,16,8,25,21,1,93,21,1,145,21,0,1,19,21,1,155,9,22,1,2,12,14,21,0,1,21,1,3,3,2,25,21,0,1,25,21,0,1,25,21,0,1,14,21,1,7,21,2,165,16,25,0,24,0,7,21,1,6,17,22,1,6,12,14,21,0,1,0,16,21,1,6,17,25,21,1,8,21,1,7,21,1,5,0,16,21,0,1,17,17,22,1,8,12,25,21,0,1,21,2,2,16,25,21,0,1,21,2,2,16,25,21,0,2,0,14,16,22,0,5,11,14,21,0,2,0,12,16,0,17,16,21,2,29,0,8,21,2,11,21,0,1,0,14,16,21,2,12,0,16,8,0,12,21,0,5,21,2,12,0,16,8,19,8,7,0,24,17,0,5,0,84,17,14,21,0,5,21,2,29,0,8,7,0,24,17,0,17,16,0,18,21,0,1,0,15,16,21,2,12,0,16,8,21,0,4,21,0,2,0,15,16,21,2,12,0,16,8,19,7,16,0,15,31,0,5,17,25,21,0,2,0,14,16,22,0,5,11,14,21,0,2,0,12,16,22,0,6,11,14,21,0,1,0,14,16,22,0,7,11,14,21,0,6,0,17,16,21,2,29,0,8,21,2,11,21,0,7,21,2,12,0,16,8,0,12,31,0,5,21,2,12,0,16,8,19,8,7,0,24,17,0,5,0,85,17,14,21,0,6,0,7,21,0,1,0,12,16,17,0,17,16,21,2,29,0,8,21,2,11,0,6,21,2,11,31,0,6,8,21,2,8,0,16,7,21,0,7,19,8,7,0,24,17,22,0,8,11,14,21,0,2,0,15,16,22,0,9,11,14,21,0,1,0,15,16,22,0,10,11,14,21,0,8,0,17,21,2,10,0,18,21,2,7,31,0,10,7,0,16,0,6,21,2,11,0,8,21,2,11,31,0,8,8,8,19,21,0,4,21,0,9,21,2,12,0,16,8,19,7,8,31,0,9,21,2,27,16,17,0,15,16,0,15,31,0,7,17,25,21,0,1,21,2,39,21,0,4,7,21,0,2,17,25,21,0,1,0,18,15,215,21,0,2,7,7,16,25,21,0,2,0,18,15,216,21,0,1,7,7,16,25,21,1,6,0,8,0,25,17,0,13,21,0,1,21,2,29,21,2,24,7,16,22,1,10,12,0,7,21,0,1,21,2,29,21,2,25,7,16,22,1,9,12,17,17,25,21,0,1,14,21,2,8,0,23,7,21,2,23,0,23,21,2,130,21,1,8,21,2,12,0,16,8,21,2,10,21,0,4,8,7,21,1,7,17,19,22,0,5,11,14,21,2,5,21,1,6,3,2,21,2,4,0,13,21,2,11,21,1,6,8,8,22,0,6,11,14,0,23,0,12,21,1,6,17,0,6,21,1,6,17,0,2,0,25,17,21,2,25,16,22,0,7,11,0,17,16,0,18,21,2,5,0,6,0,24,19,0,7,31,0,7,19,0,10,0,25,19,7,16,21,2,29,15,217,7,21,1,6,0,17,16,17,25,21,0,1,0,18,21,2,16,7,16,21,2,29,0,8,7,0,24,17,0,5,0,88,17,14,0,24,0,7,21,1,3,17,22,0,3,11,14,21,2,5,0,7,21,0,3,19,21,2,8,0,16,7,21,1,3,0,17,16,0,18,0,7,21,2,11,21,0,3,8,7,16,0,19,21,2,5,21,2,8,0,16,7,21,0,1,19,0,12,0,23,19,0,8,0,7,19,0,6,21,2,5,19,7,16,19,22,0,4,11,14,21,0,1,0,19,0,6,7,16,21,2,12,0,16,8,22,0,5,11,14,0,23,21,0,4,16,22,0,6,11,21,0,5,16,22,0,7,11,14,31,0,3,21,0,5,16,0,17,16,0,18,15,218,7,16,25,21,0,1,0,7,21,1,3,17,0,17,16,0,18,0,6,21,2,11,21,0,1,8,7,16,25,21,0,1,0,1,21,0,2,19,25,21,0,2,0,20,21,0,1,21,2,102,21,0,2,17,8,25,21,2,5,21,2,14,9,0,12,21,2,10,0,12,8,0,14,21,2,10,21,2,57,0,12,7,8,21,2,29,0,8,7,0,24,19,3,3,21,2,29,15,219,7,16,22,0,3,11,14,15,220,22,0,4,11,14,21,2,18,21,0,4,15,221,3,2,21,2,4,21,2,5,21,2,9,21,2,29,31,0,3,7,8,8,3,2,21,2,4,21,2,5,0,16,0,23,19,21,2,14,9,8,22,0,5,11,14,0,23,22,0,6,11,14,21,0,1,15,222,16,14,21,0,1,21,0,2,3,2,21,0,5,0,23,17,22,0,7,11,14,21,0,6,0,17,16,0,18,15,223,7,16,22,0,8,11,14,31,0,8,31,0,4,0,12,21,0,7,17,21,2,13,21,2,7,21,2,58,7,8,16,25,15,224,21,2,11,21,0,2,8,22,0,3,11,14,15,225,22,0,4,11,14,15,226,21,2,11,0,23,8,22,0,5,11,14,21,0,1,21,2,7,21,0,2,7,0,16,0,23,19,0,16,0,24,19,31,0,5,3,2,21,2,4,21,1,7,21,2,9,21,2,14,8,8,16,25,21,1,6,21,0,1,16,25,21,0,4,22,0,6,11,14,21,0,1,22,0,7,22,0,8,22,0,9,4,3,11,14,21,0,5,21,2,14,21,2,23,31,0,8,19,21,2,13,15,227,21,2,9,21,1,6,8,8,16,31,0,7,21,0,2,17,22,0,10,11,14,31,0,10,31,0,9,21,2,13,15,228,8,16,25,21,0,1,15,229,21,0,1,21,0,2,21,0,4,3,3,7,3,2,21,2,4,21,2,5,21,1,8,9,8,25,21,1,5,0,21,21,0,1,8,25,21,0,1,0,21,21,1,5,8,25,21,1,5,21,0,1,3,2,21,2,4,21,0,4,0,7,0,24,19,21,2,10,0,8,0,21,21,2,5,8,8,8,25,21,0,1,22,0,3,11,14,15,230,25,21,0,1,22,0,3,11,14,15,231,25,21,0,2,21,0,1,16,25,21,0,1,21,2,57,21,1,18,7,16,25,21,0,1,21,0,2,16,25,21,0,1,0,12,21,2,11,21,1,4,8,0,7,0,24,19,21,2,13,15,232,8,16,14,21,1,5,0,16,0,24,0,6,21,1,3,17,22,1,3,12,17,25,21,0,2,22,0,5,11,14,21,0,4,22,0,6,11,14,21,0,1,0,18,15,233,7,16,25,21,0,2,22,0,3,11,14,21,1,9,0,16,21,0,1,17,22,0,4,11,14,21,1,5,0,18,0,16,21,2,11,21,0,1,8,7,16,22,0,5,11,14,21,0,4,0,17,16,0,18,21,2,7,21,0,5,7,0,16,0,8,21,2,11,21,0,3,8,19,7,16,22,0,6,11,14,31,0,3,0,17,16,0,18,21,2,6,7,21,0,6,17,0,18,21,2,5,7,21,1,10,0,17,16,17,0,15,16,21,2,57,0,12,7,31,0,5,17,21,2,29,0,8,7,0,24,17,0,5,0,102,17,14,21,0,6,21,2,44,16,22,0,7,11,14,21,0,7,21,2,27,16,0,17,16,0,18,21,0,6,21,1,8,0,6,7,0,23,17,21,2,37,21,0,7,17,21,2,12,0,16,8,21,2,12,0,7,8,7,16,22,0,8,11,14,31,0,8,0,18,21,2,5,7,21,1,12,17,21,2,57,0,6,7,21,0,7,0,18,31,0,6,21,2,12,0,16,8,21,2,12,0,8,8,7,21,1,12,17,17,22,1,12,12,14,31,0,7,0,18,0,6,21,2,11,21,0,4,21,2,12,0,8,8,8,7,21,1,11,17,22,1,11,12,14,31,0,4,0,8,22,1,10,13,25,21,0,4,0,16,21,0,1,17,0,16,21,0,2,17,25,21,2,37,21,2,11,21,1,7,0,7,21,1,6,17,0,17,16,0,18,0,6,21,2,11,21,1,7,8,7,16,8,22,0,3,11,14,21,1,5,0,16,0,23,17,21,0,3,16,22,0,4,11,14,21,1,5,0,18,31,0,3,21,2,57,0,12,7,21,0,4,19,21,2,29,0,8,7,9,7,16,21,2,29,0,8,7,0,24,17,0,5,0,103,17,14,21,0,4,21,2,29,0,8,7,16,22,0,5,11,0,17,16,0,15,31,0,4,17,22,0,6,11,14,21,0,6,0,18,21,2,6,7,21,0,1,17,21,1,13,31,0,6,0,18,0,6,21,2,11,0,8,21,2,11,31,0,5,8,8,7,21,0,2,17,17,25,21,0,2,0,12,16,21,2,21,0,24,17,0,5,21,1,6,17,14,21,0,2,21,2,17,16,22,0,2,12,14,21,0,2,0,18,21,2,15,7,16,21,2,29,0,8,7,0,24,17,0,5,21,1,7,17,14,21,0,2,21,2,27,16,22,0,3,11,14,21,0,1,21,2,66,16,21,2,27,21,2,12,21,2,23,8,21,2,13,15,234,8,21,0,3,17,22,0,4,11,14,15,235,22,0,5,11,14,0,23,21,2,22,16,22,0,6,11,14,0,24,22,0,7,11,14,15,236,22,0,8,11,14,0,23,22,0,9,11,14,21,0,3,0,17,16,0,18,21,0,2,21,2,12,0,16,8,15,237,21,1,4,15,238,7,31,0,8,21,2,6,19,3,2,21,2,4,21,1,3,8,21,0,4,21,2,12,0,16,8,19,7,16,22,0,10,11,14,21,0,1,21,2,20,16,21,2,5,0,20,0,15,21,2,11,21,0,4,8,15,239,3,2,21,2,4,21,0,6,0,12,16,21,2,22,0,23,17,8,8,16,25,21,0,1,0,12,16,0,13,21,1,3,17,0,5,0,117,17,14,21,0,2,0,18,21,2,16,7,16,21,2,29,0,8,7,16,0,5,0,118,17,14,21,0,1,21,2,66,16,22,0,3,11,14,21,1,3,0,17,16,0,18,21,0,2,21,2,12,0,16,8,0,7,21,0,3,21,2,12,0,16,8,19,0,6,0,24,19,7,16,22,0,4,11,14,21,0,4,0,18,0,13,21,2,11,0,23,8,7,16,21,2,29,0,8,7,16,0,5,0,119,17,14,21,0,3,21,2,37,21,1,3,0,7,21,2,11,21,2,27,8,21,0,3,17,0,17,16,0,18,0,6,21,2,11,21,1,3,8,7,16,17,22,0,5,11,21,2,29,0,8,7,0,24,17,22,0,6,11,14,0,24,0,7,21,1,3,17,15,240,16,21,2,35,21,0,6,3,1,17,0,19,0,8,7,16,21,2,47,16,22,0,7,11,14,21,0,2,21,2,5,21,2,57,15,241,7,31,0,7,19,21,2,29,0,18,0,6,7,7,9,21,2,10,0,18,0,6,7,8,31,0,4,17,0,24,21,2,12,0,12,8,0,7,0,24,19,21,2,13,21,2,8,0,17,0,15,31,0,5,19,21,2,12,0,18,0,6,7,8,7,8,31,0,6,17,0,18,21,0,1,0,15,16,21,2,12,0,16,8,7,16,25,21,0,1,0,12,16,0,13,0,24,17,0,5,0,120,17,14,21,0,1,21,1,3,21,0,2,17,25,21,0,2,0,12,16,21,2,21,0,24,17,0,5,0,121,17,14,21,0,1,21,2,66,16,21,2,27,21,2,10,0,13,8,21,0,2,17,0,5,0,122,17,14,21,0,2,21,2,27,16,22,0,3,11,14,21,0,2,0,15,16,21,2,12,0,16,8,22,0,4,11,14,21,0,1,21,0,3,21,2,22,0,23,17,21,2,13,15,242,8,0,23,17,25,21,0,1,21,2,57,21,2,5,0,24,3,2,21,2,4,21,2,6,8,7,21,1,4,17,21,2,29,21,2,92,7,0,24,17,22,0,3,11,14,21,0,3,21,2,93,0,23,17,0,5,0,128,17,14,21,1,4,21,2,95,16,0,17,16,21,2,92,21,1,4,17,21,2,29,21,2,99,7,0,23,17,22,0,4,11,14,21,1,3,0,16,31,0,4,17,21,2,103,16,22,0,5,11,14,0,32,21,2,93,21,0,5,17,0,5,0,129,17,14,21,2,96,21,2,11,21,2,88,8,0,5,0,130,19,21,2,6,21,2,5,19,22,0,6,11,14,21,0,3,21,2,84,21,1,7,17,31,0,6,21,2,88,21,2,89,3,3,21,2,4,21,0,5,21,2,88,0,25,17,8,16,22,0,7,11,14,21,1,3,21,2,57,21,2,5,21,0,7,3,2,21,2,4,21,2,6,8,7,21,1,4,17,22,1,3,12,14,31,0,7,21,2,92,31,0,3,17,31,0,5,21,2,96,0,27,17,21,2,13,21,2,93,21,2,11,21,1,7,8,21,2,13,15,243,8,8,16,25,21,1,8,0,17,16,0,18,21,2,6,7,21,2,11,0,1,21,2,9,21,2,93,8,8,15,244,3,2,21,2,4,21,1,7,21,2,93,0,23,17,8,21,0,1,17,25,21,0,1,21,2,16,16,0,5,0,131,17,14,21,0,1,0,17,16,25,21,0,1,21,2,96,16,21,2,96,0,24,17,0,5,0,132,17,14,21,0,1,0,18,21,1,3,7,16,21,2,29,0,18,21,2,35,21,2,11,21,2,105,8,7,7,3,0,21,2,93,16,17,0,1,21,0,1,0,18,0,23,7,16,17,25,21,1,9,21,1,7,21,2,99,21,0,4,17,7,22,0,5,11,14,21,0,1,21,2,57,21,0,5,7,21,2,6,21,2,9,0,18,21,0,1,21,2,12,21,0,5,8,7,8,21,2,5,21,2,9,0,18,21,2,5,31,0,5,21,0,2,19,7,8,21,1,8,3,4,21,2,4,21,2,65,21,2,10,21,2,18,8,21,2,97,21,0,4,21,2,89,0,23,17,19,21,2,91,0,23,21,2,97,21,0,4,17,21,2,90,21,1,7,17,19,21,2,104,0,25,19,21,2,29,21,2,99,21,2,11,0,25,21,2,12,21,2,92,8,8,7,9,8,21,0,2,17,25,21,0,1,21,2,66,16,21,2,37,21,0,2,0,17,16,17,22,0,3,11,14,21,0,1,21,2,34,21,0,2,17,22,0,4,11,21,2,29,21,2,92,7,0,24,17,22,0,5,11,14,21,0,5,0,17,16,21,2,105,31,0,4,17,22,0,6,11,14,21,0,1,15,245,0,20,21,2,7,21,0,3,21,2,29,21,2,92,7,0,24,17,0,17,16,0,18,21,2,5,21,2,92,31,0,5,19,21,2,99,21,0,6,19,21,2,8,21,2,37,7,21,0,1,21,2,105,16,19,7,16,21,2,105,31,0,3,17,7,8,16,25,21,0,1,21,2,66,16,21,2,76,0,24,17,22,0,3,11,14,15,246,22,0,4,11,14,21,1,5,21,2,7,21,0,1,7,21,2,105,31,0,4,19,21,2,165,21,2,12,21,2,104,8,3,2,21,2,4,21,2,5,21,2,9,21,2,33,21,2,9,21,2,101,8,8,8,31,0,3,17,25,21,0,1,21,2,82,21,2,93,7,16,21,2,29,21,1,5,7,21,0,2,17,25,21,0,2,21,2,96,21,1,4,17,25,21,1,3,21,2,99,22,1,4,13,14,21,0,1,21,2,99,0,24,17,25,21,2,5,21,1,5,21,0,1,0,16,21,0,2,17,19,22,1,5,12,14,21,0,1,21,2,116,21,0,2,17,25,21,0,1,14,21,1,7,0,16,21,1,8,17,21,2,5,0,24,21,2,99,21,1,8,17,22,1,8,12,17,25,21,0,1,21,2,105,16,21,1,3,16,0,18,21,0,1,21,2,66,16,21,2,118,16,21,2,105,16,21,2,12,21,2,37,8,7,16,25,21,0,1,21,2,95,21,2,10,21,2,100,8,21,0,2,17,21,2,92,16,22,0,3,11,14,21,0,1,21,2,95,21,2,10,21,2,88,8,21,0,2,17,22,0,4,11,14,21,0,1,15,247,21,2,11,21,2,95,21,2,99,21,0,4,21,2,118,16,21,2,99,0,24,17,21,2,100,16,19,8,21,2,10,15,248,8,21,0,2,17,22,0,5,11,14,31,0,5,21,0,3,3,2,25,21,0,2,22,0,3,11,14,21,0,1,22,0,4,11,14,15,249,21,1,7,3,2,21,2,4,21,2,96,21,2,11,21,1,6,8,8,22,0,5,11,14,0,23,21,0,5,16,25,15,250,22,0,3,11,14,0,29,21,0,3,0,24,21,2,99,21,0,1,17,17,21,2,99,0,24,17,25,21,0,2,21,2,131,21,0,1,21,2,12,21,1,13,8,7,16,25,21,0,2,21,2,96,16,21,2,8,21,2,100,7,0,24,17,22,0,3,11,14,21,0,3,21,2,98,0,23,17,0,5,0,155,17,14,21,0,1,21,2,96,16,21,2,98,21,0,3,17,0,5,0,156,17,14,21,0,1,21,2,20,16,21,2,5,21,2,9,21,0,3,21,2,134,0,23,8,8,21,2,5,21,0,3,21,2,134,21,2,93,8,3,2,21,2,4,21,0,3,21,2,93,0,23,17,8,21,2,10,0,18,21,2,66,7,8,21,1,3,9,3,2,21,2,4,21,0,2,21,2,95,16,21,2,93,0,23,17,8,15,251,3,2,21,2,4,21,2,105,21,2,9,21,2,95,8,21,2,93,0,28,19,21,2,10,21,2,90,8,8,21,0,2,17,25,21,0,1,25,21,0,1,21,2,15,16,0,5,0,165,17,14,21,0,1,21,2,88,21,1,8,17,22,1,8,12,14,21,0,1,21,2,89,21,1,7,17,22,1,7,12,25,15,252,21,2,7,21,0,2,7,7,25,21,2,6,21,0,1,9,25,21,0,1,21,2,118,16,21,2,143,21,1,10,17,0,19,21,0,2,7,16,25,21,0,2,21,0,1,16,25,21,0,2,21,2,29,21,0,1,7,16,25,21,0,2,21,2,174,21,0,1,8,25,21,2,5,15,253,21,0,2,7,21,0,1,19,25,21,2,5,21,2,157,21,1,4,7,21,0,2,19,15,254,21,2,157,21,0,1,7,8,25,21,2,5,15,255,21,1,4,7,21,0,1,19,21,2,157,21,0,2,7,9,25,21,0,1,21,2,169,21,0,2,8,21,2,174,21,0,1,8,25,21,0,1,21,2,2,21,0,4,17,25,21,0,4,21,2,2,21,0,1,17,25,21,0,2,22,0,3,11,0,7,16,22,0,4,11,14,0,23,22,0,5,11,22,0,6,11,22,0,7,11,14,0,27,22,0,8,11,14,21,0,1,0,24,0,12,21,2,7,17,0,7,0,24,17,21,3,13,0,18,0,8,21,3,11,21,2,7,8,7,8,16,21,3,12,0,16,8,21,3,10,21,1,5,8,22,0,9,11,14,21,0,9,0,23,0,24,0,25,3,4,22,0,10,11,14,0,6,15,256,3,2,0,16,21,0,3,0,13,0,28,17,17,22,0,11,11,14,15,257,22,0,12,11,14,15,258,15,259,31,0,12,3,3,21,3,4,15,260,8,22,0,13,11,14,21,0,1,0,18,21,0,1,21,3,12,15,261,8,7,16,25,21,1,6,21,1,7,0,12,21,0,1,17,21,3,13,15,262,8,16,25,0,23,21,0,1,3,2,21,3,4,21,0,2,8,25,21,0,0,0,23,3,2,25,21,0,2,22,0,3,11,14,21,0,1,21,3,57,0,15,7,16,22,0,4,11,0,16,0,23,17,21,3,27,16,22,0,5,11,14,0,29,22,0,6,11,14,31,0,4,21,3,12,21,3,57,0,16,7,8,21,3,12,21,1,5,8,22,0,7,11,14,15,263,25,21,0,1,15,264,0,18,21,0,0,7,3,2,21,3,4,21,3,14,8,16,25,21,0,1,21,1,7,16,22,0,3,22,0,4,4,2,11,14,31,0,3,22,1,7,12,14,31,0,4,25,21,0,1,21,3,14,0,7,0,24,19,21,3,13,21,3,22,8,16,22,0,1,12,14,21,0,1,0,14,16,22,0,3,11,21,3,29,0,8,7,0,24,17,22,0,4,11,14,21,0,2,0,18,0,16,21,3,11,0,23,8,7,16,22,0,5,11,14,21,0,5,0,23,21,3,43,21,3,40,8,16,22,0,6,11,14,21,0,6,0,18,21,0,2,21,3,12,0,16,8,0,16,0,24,19,7,16,22,0,7,11,14,21,3,7,31,0,5,7,0,16,21,0,6,21,3,12,0,16,8,19,21,0,4,3,2,21,3,4,0,13,21,3,11,31,0,6,21,3,27,16,8,8,22,0,8,11,14,0,23,22,0,9,11,21,0,8,16,22,0,10,11,14,31,0,4,0,17,16,0,18,21,0,1,0,15,16,21,3,12,0,16,8,15,265,3,2,21,3,4,15,266,8,7,16,0,15,31,0,3,17,25,21,0,1,21,3,57,21,3,6,0,12,21,0,1,21,0,5,16,19,21,3,13,21,0,4,8,7,21,0,1,21,3,27,16,0,17,16,17,25,21,0,1,0,15,21,3,9,21,3,7,21,2,7,7,0,16,21,0,2,19,21,1,4,21,0,0,21,3,11,21,0,2,0,6,0,24,17,8,8,8,0,15,0,14,19,21,1,3,3,2,21,3,4,21,2,7,21,3,27,16,21,3,21,21,0,2,17,8,16,25,21,0,1,3,1,3,0,21,3,35,3,2,21,3,4,21,3,6,21,3,14,9,8,21,1,6,17,22,1,6,12,25,21,0,1,21,2,7,21,1,6,8,25,21,0,4,21,0,1,21,0,2,17,25,0,23,21,3,7,21,1,3,21,0,1,7,7,16,21,2,16,16,25,0,23,21,3,7,21,0,2,21,1,3,21,0,1,8,7,16,21,2,16,16,25,21,0,1,22,2,4,12,21,3,8,0,16,7,21,2,6,17,22,2,5,12,14,0,29,22,2,3,12,25,21,1,5,22,0,3,11,14,21,0,1,21,1,6,22,1,5,13,14,31,0,3,25,21,0,1,21,3,35,21,0,1,21,3,27,16,0,7,21,0,2,17,0,17,21,3,9,0,18,0,24,7,8,16,17,25,21,0,1,0,18,0,6,7,21,0,2,0,18,21,0,4,21,3,12,0,8,8,7,16,17,25,21,0,1,0,24,21,3,12,0,12,8,0,7,0,24,19,21,3,13,21,1,5,21,0,2,7,21,3,11,0,17,8,8,21,1,7,17,21,1,5,21,0,2,0,8,21,1,7,17,7,22,1,6,13,14,0,24,22,1,7,12,14,21,0,1,21,3,27,16,25,21,0,2,0,8,22,1,7,13,14,21,0,2,25,21,0,1,14,0,24,22,1,9,12,25,21,1,3,0,7,21,1,4,21,3,27,16,17,0,17,16,0,18,0,6,21,3,11,21,1,3,8,21,3,8,0,16,7,21,1,4,19,7,16,22,0,3,11,21,3,35,22,1,10,13,14,31,0,3,21,3,29,0,8,7,21,1,7,17,0,12,21,3,11,0,24,8,0,7,0,24,19,21,3,13,15,267,8,16,14,21,0,1,0,15,16,21,3,12,0,16,8,22,0,4,11,14,21,1,9,21,3,5,21,3,13,15,268,8,21,0,1,17,14,21,1,6,0,15,21,1,10,17,0,18,21,0,4,7,16,25,21,0,1,0,17,16,0,18,0,7,21,3,11,21,0,1,8,21,3,8,0,16,7,21,1,3,19,7,16,25,21,0,1,0,17,16,0,18,0,8,21,3,11,21,0,2,8,7,16,25,21,0,1,0,24,0,7,21,1,3,17,21,3,22,21,0,2,17,21,3,13,21,3,82,21,0,0,21,3,11,21,0,2,0,6,0,24,17,8,7,8,16,21,2,3,21,0,2,21,1,4,16,17,25,21,2,7,21,3,100,21,0,1,17,0,17,16,0,18,21,2,6,0,1,16,7,16,21,3,35,22,2,6,13,14,21,2,7,25,21,0,1,21,3,87,21,2,7,17,0,18,21,2,6,21,3,12,0,16,8,7,16,25,21,1,6,0,18,21,0,1,21,3,93,16,7,16,25,21,0,2,21,3,95,16,21,3,93,0,23,17,0,5,0,137,17,14,21,0,2,21,3,95,16,0,17,16,21,3,93,0,23,17,21,3,92,21,0,2,17,25,21,0,2,0,18,21,0,1,21,3,12,0,16,8,7,16,25,21,0,1,21,3,96,21,0,2,17,0,19,21,3,90,7,16,21,3,29,21,3,99,7,0,23,17,22,0,3,11,14,21,0,3,21,3,118,16,0,18,21,0,2,21,3,12,0,16,8,7,16,21,3,29,21,3,92,7,0,24,17,22,0,4,11,14,31,0,3,21,3,94,21,3,11,21,1,4,8,21,3,13,21,0,2,21,0,1,3,2,21,3,12,21,3,57,0,16,7,8,21,3,9,15,269,8,8,16,14,21,0,4,25,21,1,4,21,3,99,21,3,11,21,0,1,8,21,3,10,21,2,5,8,21,1,3,17,21,3,96,21,3,11,0,23,8,21,3,13,21,0,1,21,3,99,0,24,17,21,3,9,21,1,5,8,8,16,25,21,0,1,0,24,21,3,12,21,3,94,8,21,3,13,15,270,8,21,0,2,17,25,21,0,2,21,3,136,16,21,3,119,16,22,0,3,11,14,21,0,1,21,3,135,21,0,2,21,3,37,21,0,3,17,17,21,3,8,21,3,100,7,0,24,17,21,3,89,0,23,17,21,3,8,21,3,37,7,31,0,3,17,22,0,4,11,14,21,0,1,21,1,3,21,3,134,21,3,65,8,21,0,2,21,3,37,21,0,4,17,17,21,2,2,21,3,13,21,3,92,21,3,11,21,3,100,21,3,11,31,0,4,8,8,21,3,99,21,3,6,19,8,21,0,2,21,3,95,16,17,25,21,3,6,21,0,1,21,0,4,19,25,21,0,1,21,3,176,16,25,21,0,1,21,0,5,16,21,0,4,21,0,2,17,25,21,0,1,21,3,176,16,25,21,0,1,21,1,8,0,7,0,24,17,21,4,13,21,1,9,0,7,0,24,19,21,4,13,15,271,8,8,0,24,0,7,21,0,1,17,17,25,21,0,2,0,6,21,1,3,17,22,1,4,12,14,21,0,1,0,6,21,1,3,17,22,1,7,12,21,2,6,16,22,1,6,12,0,6,21,1,3,17,21,2,6,16,22,1,5,12,14,21,1,7,0,13,21,3,6,17,22,1,8,12,14,21,1,6,21,1,11,16,14,21,1,7,21,1,13,21,1,4,17,25,21,0,2,0,6,0,24,17,22,1,4,12,0,12,21,1,6,17,0,8,0,25,17,0,6,22,1,8,13,14,21,0,2,25,21,0,1,0,6,0,24,17,22,1,7,12,0,12,21,1,5,17,0,6,22,1,8,13,14,21,0,1,25,21,0,1,21,1,10,21,4,4,21,1,8,8,21,0,2,17,25,21,0,1,0,16,21,1,7,21,1,13,21,1,4,17,17,25,0,24,0,6,21,0,1,17,21,2,4,16,22,2,6,12,21,2,5,16,22,2,7,12,14,21,2,6,25,0,24,0,6,22,1,6,13,14,21,1,6,21,1,7,21,4,11,21,4,7,21,0,0,7,8,21,4,7,21,1,3,7,3,2,21,4,4,0,13,21,4,11,21,1,5,8,8,16,22,0,3,11,14,0,23,31,0,3,16,25,21,0,1,14,0,24,0,6,22,2,6,13,25,21,0,1,14,21,1,7,0,16,21,1,9,17,22,0,3,11,14,0,23,15,272,16,22,1,10,12,14,21,0,3,25,21,0,1,0,12,21,1,10,17,25,21,0,1,0,17,16,21,2,5,21,0,1,7,22,2,6,13,25,21,4,7,21,0,2,0,1,16,7,21,1,4,3,2,21,4,4,0,13,21,4,11,0,23,8,8,22,1,4,12,25,21,0,1,21,4,29,21,4,100,7,16,21,4,92,16,22,2,3,12,14,21,0,1,21,4,29,21,4,88,7,16,21,4,92,21,1,4,17,22,1,4,12,25,0,25,21,4,84,21,0,2,17,21,4,88,16,22,0,3,11,21,4,99,21,0,1,17,22,0,4,11,21,3,2,16,22,0,5,11,14,21,0,1,31,0,4,3,2,0,16,21,0,5,17,21,2,3,21,0,2,21,4,87,0,25,17,21,4,92,31,0,5,17,21,4,99,31,0,3,17,17,25,21,0,1,14,0,25,22,2,8,12,14,21,2,4,22,2,7,12,14,21,0,1,22,2,4,12,25,21,2,9,0,6,0,24,17,22,2,9,12,21,2,8,16,21,5,5,0,12,21,2,10,19,21,5,13,15,273,21,5,9,21,0,0,8,8,16,25,21,0,1,14,21,3,7,0,16,21,3,9,17,21,6,63,21,2,3,17,0,5,0,98,17,25]
 ,provide.concat([0,1,2,32,3,8,-1,5,-Infinity,4,Infinity,-2,'∾','+','-','×','÷','⋆','¬','⌊','⌈','∨','∧','≠','=','>','≥','√','<','⊢','⊣','≍','↑','↓','↕','⌽','⍉','/','⊔','˜','¨','⌜','˘','`','˙','∘','○','⌾','⍟','⊘','⊸','⟜','◶','≢','»','«','⥊','⊏','⊑',str("+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕«»⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!˙˜˘¨⌜⁼´˝`∘○⊸⟜⌾⊘◶⎉⚇⍟⎊%"),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("/: Replication argument must have rank 1"),str("/: Amounts to replicate must be natural numbers"),str("⌽𝕩: 𝕩 must have rank at least 1"),str("𝕨⌽𝕩: 𝕨 must consist of integers"),str("↑𝕩: 𝕩 must have rank at least 1"),str("↓𝕩: 𝕩 must have rank at least 1"),str("⊏𝕩: 𝕩 must have rank at least 1"),str("⊏𝕩: 𝕩 cannot have length 0"),str("𝕨⊏𝕩: 𝕨 must be an array"),str("𝕨⊏𝕩: Indices in 𝕨 must be integers"),str("𝕨⊏𝕩: Indices out of range"),str("⌾: Incompatible result elements in structural Under"),str(">𝕩: Elements of 𝕩 must have matching shapes"),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("𝕩: 𝕨 must "),str("have rank at most 1"),str("consist of integers"),str("↑"),str("↓"),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 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("First-axis primitive: 𝕩 must have rank at least 1"),str("Multi-axis primitive: 𝕨 must have rank at most 1"),str("Multi-axis primitive: Length of 𝕨 must be at most rank of 𝕩"),str("≥: No monadic form"),str("≤: No monadic form"),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("↕𝕩: 𝕩 must consist of natural numbers"),str("↕𝕩: 𝕩 must be a number or list"),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 have rank at least 1"),str("˝: Identity does not exist"),str("𝕨∾𝕩: Rank of 𝕨 and 𝕩 must differ by at most 1"),str("𝕨∾𝕩: Cell shapes of 𝕨 and 𝕩 must match"),str("𝕨/𝕩: Lengths of components of 𝕨 must match 𝕩"),str("⊔: Grouping argument must consist of integers"),str("⊔: Grouping argument values cannot be less than ¯1"),str("⊔𝕩: 𝕩 must be a list"),str("𝕨⊔𝕩: 𝕩 must be an array"),str("𝕨⊔𝕩: Compound 𝕨 must be a list"),str("𝕨⊔𝕩: Total rank of 𝕨 must be at most rank of 𝕩"),str("𝕨⊔𝕩: Lengths of 𝕨 must equal to 𝕩, or one more only in a rank-1 component"),str("𝕨⊑𝕩: Indices in compound 𝕨 must be lists"),str("𝕨⊑𝕩: Index length in 𝕨 must match rank of 𝕩"),str("𝕨⊑𝕩: Indices in 𝕨 must consist of integers"),str("𝕨⊑𝕩: Index out of range"),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 at most 1"),str("𝕨⍉𝕩: Length of 𝕨 must not exceed rank of 𝕩"),str("𝕨⍉𝕩: 𝕨 must consist of natural numbers"),str("𝕨⍉𝕩: Skipped result axis"),str("⊒: Rank of 𝕨 must be at least 1"),str("⊒: Rank of 𝕩 must be at least cell rank of 𝕨"),str("⍟: Repetition numbers in 𝕨 must be integers"),str("´: Identity not found"),str("⁼: Inverse failed"),str("⁼: Inverse does not exist"),str("⁼: Inverse not found"),str("Cannot currently invert blocks"),str("Cannot invert modifier")])
 ,[[0,1,0,185],[0,0,4097,3],[0,0,4105,3],[0,0,4109,3],[2,0,4122,6],[0,0,4149,3],[0,0,4153,3],[0,0,4157,3],[1,0,4161,5],[1,0,4169,5],[2,0,4187,6],[2,0,4202,6],[2,0,4221,6],[2,0,4243,6],[2,0,4265,6],[0,0,4297,3],[0,0,4309,3],[0,0,4318,3],[0,0,4324,3],[0,0,4341,3],[0,0,4350,3],[1,0,4359,9],[1,1,4472,2],[2,1,4503,3],[1,1,4537,2],[0,0,4554,3],[0,0,4594,4],[0,0,4670,5],[0,0,4745,3],[1,1,4762,4],[1,1,4835,3],[0,0,4913,3],[0,0,4924,5],[2,0,5008,12],[0,0,5219,4],[0,0,5273,6],[0,0,5363,3],[0,0,5388,7],[0,0,5517,4],[0,0,5578,4],[0,0,5691,3],[0,0,5759,4],[1,1,5836,2],[0,0,5869,3],[0,0,5919,4],[0,0,6061,4],[2,1,6162,3],[1,0,6205,5],[0,0,6243,3],[2,0,6247,11],[0,0,6378,3],[0,0,6386,6],[0,0,6413,5],[0,0,6434,6],[1,0,6461,19],[0,0,6970,3],[0,0,6997,3],[0,0,7023,3],[2,1,7062,3],[0,0,7131,4],[0,0,7228,7],[0,0,7275,14],[0,0,7509,5],[1,1,7606,8],[1,0,7659,6],[1,1,7767,2],[0,0,7825,5],[0,0,7987,5],[0,0,8124,7],[0,0,8293,3],[0,0,8352,4],[1,0,8419,5],[2,1,8436,4],[0,0,8479,3],[0,0,8506,3],[0,0,8528,3],[0,0,8550,3],[0,0,8569,9],[0,0,8734,5],[0,0,8768,3],[1,1,8865,2],[2,0,8934,10],[2,0,8993,8],[1,0,9186,7],[0,0,9253,8],[0,0,9493,5],[0,0,9583,3],[1,0,9617,9],[0,0,9772,4],[0,0,9891,10],[0,0,10355,4],[0,0,10572,3],[0,0,10590,4],[1,0,10664,9],[1,1,10733,3],[1,0,10757,14],[1,1,11214,4],[1,0,11268,6],[0,0,11412,4],[0,0,11520,3],[0,0,11596,3],[0,0,11651,4],[0,0,11784,4],[0,0,11906,4],[2,0,12040,6],[1,1,12068,2],[2,0,12076,14],[2,1,12263,4],[0,0,12333,3],[2,0,12340,7],[0,0,12381,6],[0,0,12605,4],[0,0,12711,3],[0,0,12749,5],[0,0,12893,3],[0,0,12940,3],[0,0,12966,3],[1,0,13057,5],[2,0,13085,6],[0,0,13100,3],[0,0,13108,3],[1,1,13129,2],[0,0,13158,3],[0,0,13194,3],[0,0,13242,3],[0,0,13296,3],[0,0,13308,3],[0,0,13388,3],[0,0,13396,3],[1,1,13404,2],[1,1,13437,2],[0,0,13467,4],[0,0,13504,3],[0,0,13519,3],[0,0,13548,3],[0,0,13563,3],[0,0,13581,3],[0,0,13596,3],[0,0,13606,3],[0,0,13663,7],[0,0,13742,3],[0,0,13750,3],[1,1,13775,2],[0,0,13858,3],[0,0,13892,3],[1,1,13920,2],[1,1,13924,2],[0,0,13928,3],[0,0,13940,3],[0,0,13963,3],[0,0,13984,3],[0,0,13992,3],[1,0,14000,6],[1,0,14117,11],[1,0,14338,5],[0,0,14353,3],[0,0,14367,3],[0,0,14381,3],[1,0,14426,8],[0,0,14564,8],[0,0,14731,3],[0,0,14757,3],[0,0,14767,3],[0,0,14784,9],[0,0,14967,6],[0,0,15042,3],[2,0,15050,11],[1,0,15127,5],[0,0,15158,3],[0,0,15168,3],[1,0,15178,5],[0,0,15211,4],[0,0,15222,4],[0,0,15233,3],[0,0,15241,3],[0,0,15253,3],[0,0,15261,3],[1,0,15305,7],[0,0,15331,9],[1,0,15617,5],[0,0,15633,7],[0,0,15800,11],[0,0,16042,8],[0,0,16354,3],[0,0,16382,5],[0,0,16477,8],[0,0,16736,3],[0,0,16783,3],[0,0,16803,3],[1,0,16869,6],[0,0,17022,7],[0,0,17164,5],[0,0,17244,3],[0,0,17267,3],[0,0,17278,3],[0,0,17299,3],[0,0,17331,3],[0,0,17362,3],[0,0,17400,6],[0,0,17505,6],[0,0,17554,4],[0,0,17583,3],[0,0,17602,4],[1,1,17779,2],[0,0,17783,3],[0,0,17826,3],[0,0,17837,3],[0,0,17845,3],[0,0,17867,3],[0,0,17875,3],[0,0,17887,3],[0,0,17898,3],[0,0,17912,3],[0,0,17937,3],[0,0,17959,3],[1,0,17977,5],[1,0,17988,5],[0,0,17999,14],[0,0,18169,3],[0,0,18189,3],[0,0,18204,3],[0,0,18212,8],[0,0,18283,3],[0,0,18305,5],[0,0,18334,11],[2,0,18546,6],[0,0,18585,3],[0,0,18656,3],[0,0,18688,3],[1,0,18699,5],[1,1,18710,2],[2,1,18729,3],[0,0,18751,3],[0,0,18780,4],[0,0,18803,3],[1,0,18836,5],[0,0,18862,3],[0,0,18932,3],[0,0,18946,3],[0,0,18957,5],[0,0,19093,3],[0,0,19123,3],[0,0,19143,3],[0,0,19197,3],[0,0,19232,3],[0,0,19256,3],[0,0,19271,3],[0,0,19314,3],[0,0,19331,5],[0,0,19445,3],[0,0,19500,3],[0,0,19523,5],[1,0,19652,5],[1,1,19663,2],[2,0,19671,6],[1,1,19686,2],[0,0,19694,3],[0,0,19733,3],[0,0,19816,3],[0,0,19850,3],[0,0,19879,3],[0,0,19897,3],[0,0,19914,3],[0,0,19943,4],[0,0,20004,3],[0,0,20017,4],[0,0,20049,3],[0,0,20059,3],[0,0,20077,3],[0,0,20109,3],[0,0,20152,6],[0,0,20231,3],[0,0,20258,3],[0,0,20298,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 glyph = x => {
  let g = "+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕«»⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!˙˜˘¨⌜⁼´˝`∘○⊸⟜⌾⊘◶⎉⚇⍟⎊"[x.prim];
  if (!has(g)) throw Error("•Glyph 𝕩: 𝕩 must be a primitive");
  return g;
}

// Compiler
runtime[42] = assertFn("Compiler");
let compile = run(
  [0,58,0,0,0,82,17,22,0,0,11,14,0,88,0,89,0,90,21,0,0,0,21,0,91,17,0,92,0,93,0,94,0,95,0,96,0,20,0,58,0,50,3,2,17,0,43,0,33,7,0,59,17,0,58,0,25,16,0,0,0,83,17,0,97,0,60,22,0,1,11,0,25,16,0,45,0,0,7,0,99,17,0,20,16,0,42,0,21,7,0,98,17,0,61,0,0,0,82,17,0,21,0,102,17,0,21,0,101,0,24,0,59,17,17,0,21,0,100,17,0,103,3,14,0,44,0,13,7,0,11,0,51,0,22,8,0,21,19,16,22,0,2,22,0,3,4,2,11,14,21,0,3,0,27,0,49,0,0,7,9,0,53,0,42,0,44,0,22,7,7,8,16,22,0,4,22,0,5,22,0,6,22,0,7,22,0,8,22,0,9,22,0,10,22,0,11,22,0,12,22,0,13,22,0,14,22,0,15,22,0,16,22,0,17,4,14,11,14,0,34,0,53,0,1,8,0,12,0,9,0,15,0,52,0,63,8,19,0,34,0,52,0,62,8,19,22,0,18,11,14,21,0,7,0,34,16,22,0,19,11,14,0,13,0,11,0,62,19,0,42,0,30,7,0,104,19,0,53,0,21,8,22,0,20,11,14,15,1,22,0,21,11,14,15,2,21,0,2,7,22,0,22,11,14,21,0,13,0,34,16,22,0,23,11,14,0,62,0,64,0,65,0,59,0,66,0,59,0,63,3,2,0,67,0,63,0,64,0,25,16,0,28,16,0,30,0,68,17,3,9,0,41,31,0,3,7,0,23,0,13,19,0,53,0,42,0,44,0,20,7,7,8,16,0,21,16,22,0,24,11,14,0,2,0,49,0,6,7,9,22,0,25,11,14,21,0,25,0,52,0,13,0,50,0,25,8,8,22,0,26,11,14,21,0,25,0,52,0,13,0,50,0,25,8,0,0,0,62,19,8,22,0,27,11,14,15,3,22,0,28,11,14,15,4,22,0,29,11,14,15,5,22,0,30,11,14,15,6,22,0,31,11,25,21,0,1,0,11,16,0,44,15,7,7,21,0,4,17,0,21,16,25,21,1,21,21,1,20,0,52,0,105,8,0,106,0,19,3,3,7,0,42,0,40,7,0,63,19,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,19,0,50,31,0,2,8,8,8,0,18,0,19,19,22,0,3,11,14,21,0,1,0,31,16,22,0,4,11,14,0,19,0,31,21,0,1,0,33,21,0,4,17,19,0,6,0,62,19,0,42,0,1,7,0,62,19,0,42,0,33,7,31,0,4,19,31,0,3,0,19,19,25,0,84,0,14,21,0,1,17,22,0,3,11,14,0,85,0,14,21,0,1,17,22,0,4,11,0,9,0,52,0,26,0,52,0,63,0,63,3,2,8,8,16,0,30,16,22,0,5,11,14,0,86,0,14,21,0,1,17,22,0,6,11,0,30,16,22,0,7,11,14,21,0,5,21,0,7,0,24,0,59,17,21,0,3,0,30,16,3,3,0,21,16,22,0,8,11,0,31,16,22,0,9,11,14,21,0,8,0,33,21,0,9,17,22,0,8,12,14,31,0,5,0,0,0,64,17,31,0,7,0,24,0,62,17,0,62,0,21,21,1,0,0,14,21,0,1,17,17,0,30,16,0,30,0,52,21,0,3,0,49,0,0,7,16,0,21,0,63,17,0,53,0,33,0,50,0,27,0,53,0,1,8,8,8,8,16,3,3,0,21,16,0,33,31,0,9,17,22,0,10,11,14,0,19,0,34,0,59,19,0,14,0,63,19,0,57,15,8,8,22,0,11,11,14,0,30,0,52,21,0,10,0,31,21,0,8,17,0,44,0,63,7,0,21,0,62,19,21,0,11,0,13,0,53,0,21,8,19,0,23,0,13,19,16,8,0,46,0,30,7,9,0,23,21,0,1,0,13,16,19,22,0,12,11,14,31,0,8,21,0,12,16,22,0,13,11,14,31,0,10,31,0,12,16,22,0,14,11,14,21,0,14,0,10,21,0,13,17,22,0,15,11,0,49,0,13,7,0,62,17,22,0,16,11,14,21,0,16,0,11,31,0,14,17,0,9,21,0,6,0,10,21,0,4,17,17,0,47,0,10,7,0,57,15,9,8,16,14,0,87,0,14,21,0,1,17,0,9,21,0,16,17,22,0,17,11,14,31,0,4,0,9,21,0,13,17,0,27,16,0,10,21,0,17,17,0,30,16,22,0,18,11,14,21,0,18,31,0,17,0,53,0,33,8,0,2,0,82,0,1,0,87,17,19,0,1,21,0,1,0,53,0,33,8,19,16,22,0,19,11,14,21,0,6,0,9,22,0,13,13,0,26,16,0,9,21,0,6,17,22,0,20,11,0,12,22,0,16,13,14,31,0,15,0,9,31,0,6,17,0,49,0,13,7,16,0,11,0,62,0,53,0,21,8,0,51,0,2,0,52,0,49,0,0,7,8,8,0,18,19,31,0,20,0,27,16,0,12,31,0,13,17,22,0,21,11,17,0,42,0,1,7,0,62,17,0,42,0,39,7,21,0,1,17,22,0,22,11,14,21,0,16,0,30,16,22,0,23,11,14,21,0,16,0,27,0,62,17,0,30,16,0,23,0,52,0,13,8,21,0,23,17,22,0,24,11,14,15,10,22,0,25,11,14,21,0,23,31,0,3,0,53,0,33,8,0,2,0,1,19,21,0,24,17,0,1,22,0,24,13,14,21,0,1,0,33,21,0,23,17,21,1,22,16,22,0,26,11,14,21,1,16,0,34,0,51,0,42,0,1,7,0,22,0,18,19,8,21,1,13,17,21,1,18,21,0,26,17,22,0,27,11,0,11,0,52,0,27,8,16,22,0,28,11,14,21,1,15,0,47,0,0,7,16,0,0,0,59,17,0,14,21,0,26,17,22,0,29,11,14,21,1,16,0,34,16,0,14,21,0,26,17,22,0,30,11,14,21,0,26,0,30,21,0,28,17,0,42,0,1,7,21,1,15,0,34,16,17,0,42,0,3,0,50,0,5,8,7,21,1,1,17,22,0,31,11,14,21,1,15,0,34,16,0,0,21,1,1,17,0,16,21,0,26,17,0,9,21,0,27,17,0,2,21,1,1,17,0,1,22,0,26,13,14,21,0,27,0,26,16,0,12,21,0,30,17,0,47,0,10,7,0,57,15,11,8,16,14,21,0,30,0,10,0,52,0,27,8,16,0,13,22,0,28,13,14,31,0,30,0,30,21,0,28,17,0,19,0,0,0,8,0,53,0,2,8,19,0,63,0,16,21,0,31,17,0,2,0,64,17,17,22,0,32,11,0,11,0,63,17,22,0,33,11,14,21,0,33,0,8,16,0,21,0,63,17,0,33,21,0,28,0,49,0,0,7,16,17,0,9,21,0,27,17,22,0,34,11,0,12,21,0,27,17,22,0,35,11,14,21,0,27,0,2,21,0,26,17,0,21,0,52,0,63,8,0,30,21,0,34,0,21,0,63,17,0,26,0,53,0,10,8,16,0,11,21,0,29,0,21,0,63,17,17,19,0,51,21,1,29,8,21,0,24,17,22,0,36,11,14,31,0,31,0,30,21,0,33,17,0,14,0,52,0,64,8,0,53,0,9,8,0,0,0,19,19,21,0,35,0,11,0,52,0,26,8,16,0,42,0,30,7,21,0,29,17,17,22,0,37,11,14,21,0,32,0,30,31,0,33,17,0,14,0,62,17,22,0,38,11,14,31,0,34,0,12,21,0,28,17,0,49,0,0,7,16,0,2,31,0,29,0,12,31,0,35,17,17,0,42,0,1,7,0,62,17,22,0,39,11,14,21,0,39,0,11,0,52,0,49,0,6,7,0,27,0,59,19,8,16,0,30,16,21,0,26,0,53,0,33,8,0,12,21,1,15,0,34,16,19,0,11,21,0,38,19,0,53,0,19,0,47,0,10,7,9,0,57,15,12,8,8,16,14,21,0,26,0,39,31,0,39,17,0,30,0,11,0,51,0,22,8,0,30,0,52,0,8,8,19,31,0,38,17,22,0,40,11,14,31,0,16,0,27,16,0,49,0,0,7,16,0,33,31,0,21,0,30,16,0,21,31,0,18,17,17,0,21,21,0,28,0,30,16,0,33,0,52,0,32,8,31,0,32,17,17,22,0,41,11,14,31,0,36,31,0,19,31,0,22,3,3,0,21,31,0,40,17,22,0,42,11,14,21,0,42,0,44,0,35,7,16,22,0,43,11,0,42,0,44,0,30,0,52,0,49,0,6,7,0,27,0,59,19,0,12,0,19,19,8,7,7,22,0,42,13,14,21,0,42,0,34,0,52,0,62,8,0,54,0,44,21,1,2,0,53,0,33,8,7,21,0,2,9,8,16,22,0,42,12,14,21,1,16,21,1,18,21,0,26,17,0,10,21,0,27,17,0,8,16,22,0,44,11,14,31,0,27,0,26,0,53,0,12,8,16,0,10,21,0,44,17,0,42,0,30,7,22,0,23,13,14,21,0,26,0,33,0,52,31,0,41,8,0,54,21,0,42,0,44,0,13,7,16,22,0,45,11,0,27,21,1,23,17,0,49,0,0,7,16,0,0,31,0,43,17,0,21,16,8,16,21,0,25,31,0,44,0,10,31,0,28,17,17,22,0,26,12,14,21,1,7,0,34,0,53,0,1,8,0,2,21,1,18,19,21,0,26,17,0,1,22,0,26,13,14,21,1,19,0,14,21,0,26,17,0,42,0,21,7,0,13,0,21,19,0,62,17,0,30,16,0,24,0,62,17,0,24,0,59,17,22,0,46,11,0,44,0,62,7,16,0,49,0,13,7,16,22,0,47,11,14,21,1,9,0,34,16,0,0,0,65,0,68,3,2,17,0,37,21,0,26,0,33,21,0,47,0,1,21,0,46,17,17,0,0,21,0,47,17,17,0,26,0,53,0,10,8,16,0,12,31,0,47,17,0,42,0,30,7,31,0,46,17,22,0,48,11,14,21,1,19,0,13,21,0,26,17,0,33,0,52,31,0,48,8,0,54,0,44,0,62,7,8,16,0,42,15,13,7,22,0,26,13,14,0,63,0,21,21,1,24,17,0,33,21,0,26,0,5,21,1,23,17,17,0,30,0,52,31,0,45,0,23,0,64,17,0,47,0,0,7,16,0,22,21,1,23,17,21,1,18,21,0,26,17,8,0,54,31,0,37,8,16,22,0,49,11,14,21,1,12,0,34,16,0,68,3,2,21,1,18,21,0,26,17,0,2,0,68,17,0,0,22,0,26,13,14,31,0,26,31,0,49,31,0,42,21,0,24,21,0,23,3,5,25,15,14,22,0,3,11,14,21,1,21,21,1,20,0,52,0,110,8,0,111,21,1,2,0,53,0,33,8,0,112,3,4,7,22,0,4,11,14,21,1,14,0,47,0,25,0,53,0,0,8,7,16,0,21,0,113,0,47,0,1,7,16,0,0,21,1,15,0,34,16,17,17,0,44,21,0,1,0,53,0,14,8,7,16,22,0,5,22,0,6,22,0,7,22,0,8,22,0,9,4,5,11,14,21,1,15,0,34,16,0,11,21,0,1,17,0,10,21,0,5,17,0,8,16,21,0,2,21,0,3,21,0,1,0,53,0,30,8,0,50,31,0,4,8,8,16,14,21,0,1,0,14,0,63,17,22,0,10,11,0,10,21,0,5,17,22,0,11,11,0,10,21,0,9,17,22,0,12,11,14,21,0,11,0,10,21,0,8,17,0,8,16,22,0,13,11,14,21,0,11,0,27,16,0,12,21,0,8,17,21,0,2,21,0,3,0,114,8,16,14,21,0,12,0,10,21,0,8,17,0,9,21,0,12,0,26,0,62,17,17,21,0,2,21,0,3,0,115,8,16,14,21,0,1,0,30,21,0,12,17,0,11,0,52,0,27,8,0,10,0,14,0,52,0,63,8,19,16,0,8,16,21,0,2,0,30,31,0,12,19,21,0,3,0,116,8,16,14,21,0,5,0,27,16,0,12,21,0,8,17,0,10,21,0,10,17,0,26,0,10,31,0,5,0,26,16,0,9,21,0,6,17,19,0,9,0,27,19,0,62,17,0,12,21,0,7,0,10,31,0,6,17,17,21,0,2,31,0,3,0,117,8,16,14,21,0,13,0,9,0,52,0,8,21,1,27,0,51,0,12,8,21,1,13,0,34,16,0,13,21,0,1,17,0,11,21,0,9,17,19,0,15,0,26,19,8,16,0,9,0,52,0,49,0,0,7,21,1,25,0,1,0,19,19,0,8,19,0,16,0,69,19,8,16,22,0,14,11,14,21,1,13,0,34,16,0,42,0,1,7,0,62,17,0,1,21,0,1,17,0,2,21,0,14,17,0,30,21,0,9,0,8,16,17,0,42,0,33,7,0,58,0,25,16,0,42,0,21,7,0,70,0,62,3,2,17,0,21,0,59,17,17,22,0,15,11,14,21,0,15,0,49,0,0,0,52,0,58,0,53,0,2,8,8,0,2,0,15,0,52,0,63,8,19,7,0,63,17,0,30,31,0,15,0,15,0,63,17,0,26,0,53,0,12,8,16,17,22,0,16,11,14,31,0,8,0,27,16,0,30,31,0,13,0,27,0,53,0,12,8,16,22,0,17,11,17,0,42,0,33,7,0,62,0,59,3,2,17,0,2,22,0,16,13,14,31,0,10,0,30,31,0,11,17,22,0,18,11,14,31,0,14,0,26,0,53,0,12,8,16,0,30,16,0,0,0,62,17,0,63,0,21,31,0,9,17,21,1,27,16,0,53,0,33,8,0,53,0,1,0,2,0,11,0,52,0,27,8,19,8,16,0,30,21,0,18,17,22,0,19,11,14,21,0,18,0,8,16,0,2,21,0,16,17,0,26,16,0,30,21,0,18,17,0,42,0,1,7,31,0,19,17,22,0,20,11,0,7,16,0,4,0,58,17,22,0,21,11,14,0,62,0,71,3,2,0,33,31,0,7,0,30,31,0,17,17,17,0,2,31,0,16,17,0,30,31,0,18,17,0,30,0,52,21,0,20,0,11,0,63,17,8,0,54,0,2,8,21,0,21,17,0,30,0,52,31,0,20,0,12,0,63,17,8,0,54,0,42,0,3,7,8,31,0,21,17,25,21,0,2,22,0,3,22,0,4,22,0,5,22,0,6,4,4,11,14,31,0,4,0,13,16,22,0,7,11,14,15,15,22,0,8,11,14,15,16,22,0,9,11,14,21,0,1,0,13,16,0,11,0,63,17,0,40,0,122,17,14,21,1,9,21,1,18,21,0,1,17,0,2,21,0,3,0,2,0,64,17,0,1,0,59,17,17,22,0,10,11,0,49,0,0,7,16,22,0,11,11,0,31,16,22,0,12,11,14,0,59,0,14,21,0,3,17,0,33,21,0,12,17,22,0,13,11,14,21,0,1,0,33,21,0,12,17,22,0,14,11,0,30,0,52,0,63,0,53,0,11,8,8,0,42,0,1,7,0,62,19,0,17,0,57,31,0,8,8,0,30,0,52,0,63,0,53,0,12,8,8,19,21,0,10,0,33,21,0,12,17,17,14,31,0,11,0,34,21,0,12,0,34,16,17,0,15,0,63,17,0,40,0,123,17,14,21,0,14,0,30,21,0,13,17,0,14,0,52,21,1,19,8,0,9,0,52,0,27,8,0,14,0,52,21,1,9,0,34,16,8,19,16,21,0,12,0,30,21,0,13,19,21,0,9,0,124,8,16,14,31,0,13,0,21,0,62,17,0,9,0,52,0,26,0,52,0,62,8,8,16,15,17,16,14,21,0,10,0,0,21,0,3,17,0,15,0,63,17,0,26,16,22,0,15,11,0,12,21,1,8,0,34,16,0,14,21,0,1,17,17,0,1,22,0,3,13,14,21,0,3,0,15,0,63,17,0,27,16,0,9,31,0,15,17,0,12,21,0,3,0,67,0,53,0,15,8,0,9,0,11,0,52,0,73,8,19,16,17,0,13,0,50,0,25,8,21,0,9,0,126,8,16,14,0,67,0,14,21,0,3,17,0,10,0,52,0,26,8,16,22,0,16,11,0,33,0,52,21,0,12,8,0,54,0,27,8,16,22,0,17,11,14,21,0,17,0,10,21,0,16,17,0,8,16,22,0,18,11,14,21,1,9,0,34,16,0,0,0,62,17,0,14,21,0,1,17,22,0,19,11,14,21,1,11,0,34,16,0,14,21,0,1,17,0,33,21,0,19,0,8,16,21,1,26,16,17,22,0,20,11,14,21,0,20,0,11,21,0,18,17,0,13,0,50,0,25,8,21,0,9,0,127,8,16,14,21,1,9,0,34,16,0,0,0,65,17,0,14,21,0,1,17,0,26,0,62,17,0,9,21,0,20,17,0,13,0,50,0,25,8,21,0,9,0,128,8,16,14,21,0,16,0,33,21,0,12,17,0,31,16,0,42,0,33,7,22,0,12,13,14,0,59,0,14,21,0,3,17,0,10,21,0,16,17,0,33,21,0,12,17,0,21,0,62,17,0,0,0,52,0,49,0,0,7,8,16,0,31,16,0,42,0,33,7,0,8,0,31,0,53,0,42,0,33,7,8,19,0,33,0,52,0,31,8,0,18,19,21,0,12,0,21,0,59,17,17,0,24,0,59,17,0,49,0,0,7,16,0,31,16,22,0,21,11,14,21,1,9,0,34,16,0,0,0,64,17,0,64,3,2,21,1,18,21,0,1,17,0,2,21,0,10,17,0,33,21,0,21,17,22,0,22,11,0,49,0,0,7,16,22,0,23,11,0,31,16,22,0,24,11,14,21,0,24,0,42,0,33,7,22,0,21,13,14,21,0,24,0,42,0,33,7,22,0,23,13,14,21,0,24,0,42,0,33,7,22,0,22,13,14,21,0,21,0,42,0,33,7,22,0,1,13,14,21,0,21,0,42,0,33,7,22,0,10,13,14,21,0,21,0,42,0,33,7,22,0,5,13,14,21,0,21,0,42,0,33,7,22,0,6,13,14,0,63,0,12,21,0,22,17,22,0,25,11,0,49,0,0,7,16,22,0,26,11,14,0,63,0,11,21,0,22,17,0,30,16,22,0,27,11,14,0,18,0,30,0,10,19,0,42,0,21,7,0,30,0,21,19,0,62,19,22,0,28,11,14,0,14,21,0,28,0,50,0,8,8,21,0,25,19,22,0,29,11,14,21,0,1,0,31,21,1,12,0,34,16,0,0,0,68,17,0,0,0,63,0,65,0,72,0,68,3,4,17,17,22,0,30,11,14,21,1,12,21,1,18,21,0,1,17,0,30,16,22,0,31,11,14,21,0,30,21,0,29,0,62,17,22,0,32,11,14,31,0,30,21,0,29,0,52,0,65,8,0,2,0,64,19,0,6,21,0,29,0,52,0,64,8,19,16,22,0,33,11,0,0,0,52,0,11,0,52,0,63,8,0,10,21,0,32,19,8,16,22,0,34,11,14,21,0,34,0,34,16,0,11,0,63,17,21,0,1,0,50,15,18,8,0,30,9,21,0,9,0,129,8,16,14,21,0,1,31,0,29,21,1,8,0,34,16,17,22,0,35,11,14,0,63,0,14,21,0,34,17,0,12,21,0,35,17,0,47,0,10,7,16,21,0,1,0,50,15,19,8,0,30,9,21,0,9,0,130,8,16,14,21,0,32,0,2,0,65,17,0,0,0,63,0,64,0,65,3,3,0,33,21,0,33,17,17,22,0,36,11,14,21,0,3,0,33,0,52,21,0,21,0,33,21,0,27,17,8,0,54,21,0,34,0,24,0,62,17,8,16,0,2,21,0,18,17,0,42,0,1,7,21,0,16,17,22,0,3,12,14,31,0,18,0,9,31,0,19,17,22,0,37,11,14,0,63,0,11,21,0,3,17,0,33,0,52,21,0,12,8,0,54,0,27,0,52,0,62,8,8,16,22,0,38,11,0,27,16,0,9,21,0,37,17,22,0,39,11,14,21,0,3,0,33,21,0,39,0,8,16,21,1,26,16,17,0,2,21,0,39,17,0,0,21,0,3,17,0,19,0,15,0,64,19,0,11,21,0,38,19,0,1,0,19,19,0,6,0,19,0,14,0,65,19,0,2,31,0,38,0,0,0,62,17,19,0,33,0,52,21,0,12,8,0,54,0,27,8,9,19,16,22,0,40,11,14,21,0,40,0,33,0,0,0,6,0,62,19,0,5,0,19,19,31,0,39,0,8,16,0,49,0,0,7,16,0,53,0,19,0,1,0,33,19,8,19,0,63,0,14,21,0,40,17,0,9,21,0,37,17,0,8,16,21,1,26,16,17,0,6,22,0,40,13,14,21,0,40,0,27,16,0,2,31,0,37,17,0,0,22,0,3,13,14,31,0,20,0,19,0,1,0,8,0,53,0,2,8,19,22,0,40,13,14,21,1,23,0,1,21,0,1,17,22,0,41,11,21,0,7,0,53,0,11,8,0,9,0,15,0,52,0,63,8,19,16,22,0,42,11,0,30,16,22,0,43,11,0,42,0,33,7,21,0,1,17,22,0,44,11,14,21,0,22,0,1,22,0,10,13,14,21,0,10,0,49,0,0,7,16,0,31,16,22,0,12,12,14,21,0,21,0,33,21,0,12,17,22,0,45,11,14,21,0,16,0,1,21,0,17,17,0,33,21,0,45,17,0,12,0,30,0,51,0,1,8,0,11,19,0,63,17,0,42,0,3,7,0,64,17,0,0,0,62,17,22,0,46,11,14,21,1,9,0,34,16,0,0,0,68,17,0,14,21,0,1,17,0,33,21,0,12,17,0,30,16,22,0,47,11,14,31,0,10,0,33,21,0,12,17,0,12,21,0,12,0,53,0,30,8,0,11,9,0,51,0,22,8,0,11,19,0,63,17,0,44,0,21,7,21,0,25,0,30,16,21,0,27,3,2,17,22,0,48,11,14,31,0,48,0,47,15,20,7,16,14,21,0,16,0,33,21,0,45,17,0,31,16,22,0,49,11,0,42,0,33,7,22,0,12,13,14,21,0,21,0,33,21,0,12,17,22,0,45,12,14,21,0,12,0,31,16,22,0,50,11,14,21,0,12,0,42,0,33,7,22,0,1,13,14,21,0,45,0,42,0,33,7,22,0,3,13,14,21,0,45,0,42,0,33,7,22,0,40,13,14,31,0,16,0,12,21,0,17,17,0,33,31,0,45,17,0,30,16,0,21,31,0,49,0,31,16,0,33,21,0,47,17,17,22,0,47,12,14,21,0,50,0,33,21,0,27,17,22,0,51,11,0,30,31,0,35,0,24,0,62,17,17,0,0,0,62,17,22,0,52,11,14,21,0,52,0,13,0,11,0,63,19,0,57,0,19,0,45,0,0,7,0,65,0,25,16,19,0,42,0,33,7,0,52,0,59,0,62,3,2,0,53,0,21,8,8,21,0,3,19,0,13,0,66,0,63,0,59,3,3,19,0,48,0,10,7,9,0,50,21,0,12,0,33,21,0,52,19,21,0,9,0,131,8,8,8,16,14,21,0,12,0,33,0,62,0,0,21,0,52,17,17,0,41,31,0,17,7,0,33,31,0,21,0,53,0,33,8,19,0,12,21,0,42,0,53,0,33,8,19,16,21,0,12,0,33,21,0,52,19,21,0,9,0,132,8,16,14,0,66,0,15,21,0,3,17,22,0,53,11,14,0,63,0,11,21,0,3,17,0,11,21,0,53,17,22,0,54,11,14,21,0,54,0,27,16,21,1,26,16,0,42,0,33,7,21,0,40,17,22,0,55,11,0,15,0,62,17,22,0,56,11,14,0,63,0,11,21,0,40,17,22,0,57,11,14,0,63,0,11,21,0,55,17,22,0,58,11,14,21,0,58,0,9,21,0,53,17,21,0,12,21,0,9,0,133,8,16,14,0,64,0,16,21,0,3,17,0,9,0,64,0,11,21,0,55,17,17,22,0,59,11,0,30,16,0,28,16,22,0,60,11,14,0,65,0,14,21,0,3,17,22,0,61,11,0,9,21,0,59,17,0,26,16,0,10,21,0,59,17,22,0,62,11,14,0,64,0,25,16,0,37,21,0,3,17,0,10,21,0,62,17,0,11,21,0,61,17,0,11,21,0,57,17,0,27,0,15,31,0,61,19,0,9,0,26,19,16,0,12,21,0,59,17,21,0,12,21,0,9,0,134,8,16,14,0,63,0,14,21,0,3,17,0,11,0,52,0,10,0,52,0,27,8,8,21,0,62,17,0,26,0,53,0,9,8,16,21,0,12,21,0,9,0,135,8,16,14,0,62,0,16,31,0,40,17,0,26,16,0,9,21,1,8,0,34,16,0,0,0,64,17,0,14,21,0,1,17,17,0,11,21,0,56,17,22,0,63,11,14,21,0,63,0,10,21,0,62,17,0,8,16,0,28,0,54,21,1,25,0,1,0,18,19,0,52,0,13,0,50,0,25,8,8,8,16,22,0,64,11,14,31,0,53,0,30,16,22,0,65,11,0,0,0,52,21,0,64,0,53,0,33,8,8,16,0,0,0,62,17,22,0,66,11,14,21,0,3,0,33,21,0,65,17,0,13,0,73,17,22,0,67,11,14,21,0,3,0,33,21,0,66,17,22,0,68,11,0,13,21,0,55,0,33,21,0,66,17,0,6,0,63,17,17,21,0,12,0,33,21,0,66,19,21,0,9,0,136,8,16,14,21,1,23,0,1,21,0,1,17,21,0,7,0,53,0,11,8,0,9,0,15,0,52,0,74,8,19,16,22,0,69,11,14,21,0,69,0,33,21,0,66,17,0,10,0,63,0,14,31,0,68,17,17,0,8,16,21,0,12,0,33,21,0,66,19,21,0,9,0,137,8,16,14,21,0,1,0,33,21,0,65,17,0,42,0,1,7,21,1,8,0,34,16,17,0,2,0,64,17,0,0,31,0,52,0,37,21,0,65,17,17,0,0,21,0,67,17,0,0,0,62,17,22,0,70,11,14,21,0,1,0,44,0,63,7,16,0,33,0,52,21,0,66,8,0,54,31,0,70,8,16,0,1,0,52,0,26,8,16,0,33,31,0,50,17,0,49,0,0,7,16,0,27,16,22,0,71,11,0,33,21,0,12,17,0,2,16,22,0,72,11,14,21,0,55,0,16,0,63,17,0,9,21,0,72,17,0,11,21,1,9,21,1,18,21,0,1,17,0,10,21,0,54,17,0,10,0,63,0,15,21,0,3,17,0,9,31,0,69,17,17,0,11,21,1,9,0,34,16,0,0,0,65,17,0,14,21,0,1,17,17,17,21,0,12,21,0,9,0,138,8,16,14,21,0,72,0,12,0,52,0,27,8,16,0,9,21,0,3,0,15,0,63,17,17,0,9,21,0,55,0,11,0,63,17,17,21,0,12,21,0,9,0,139,8,16,14,21,0,71,0,33,21,0,43,17,22,0,73,11,14,0,64,0,72,3,2,21,1,18,21,0,73,17,22,0,74,11,14,21,0,73,0,7,0,9,0,11,19,0,64,17,22,0,75,11,0,42,0,30,7,21,0,43,17,22,0,76,11,0,44,0,63,7,16,22,0,77,11,14,21,0,43,0,50,0,30,0,52,21,0,75,8,0,53,0,21,8,8,22,0,78,11,14,0,63,0,11,31,0,22,17,0,49,0,0,7,16,0,33,21,0,76,17,22,0,79,11,14,21,0,25,0,13,0,21,0,30,19,16,0,33,21,0,79,17,22,0,80,11,14,21,0,26,0,33,21,0,43,17,0,42,21,0,24,0,33,31,0,27,17,0,21,21,0,1,0,13,16,17,7,0,33,0,30,0,52,21,0,74,8,0,21,31,0,79,19,19,0,21,31,0,24,0,30,21,0,25,17,0,21,0,59,17,0,53,0,33,8,0,0,21,0,73,0,14,0,62,17,19,19,16,22,0,81,11,14,21,0,77,0,21,22,0,74,13,14,21,0,44,0,30,31,0,75,17,0,21,22,0,44,13,14,21,0,81,0,31,16,0,33,0,52,21,0,44,0,30,0,52,21,0,74,8,0,53,0,21,8,16,22,0,82,11,0,53,0,33,8,0,31,9,8,16,22,0,83,11,14,21,0,83,0,30,0,52,0,15,0,52,21,0,74,0,13,16,8,8,16,15,21,16,14,21,0,83,0,33,0,52,21,0,74,0,42,0,30,7,16,0,1,16,0,21,21,0,74,17,0,53,0,33,0,50,0,49,0,0,7,8,8,0,31,9,8,16,0,30,0,52,21,0,74,0,13,16,0,53,0,11,8,8,16,22,0,83,12,14,21,0,83,0,42,0,33,7,22,0,74,13,14,21,0,83,0,42,0,33,7,22,0,44,13,14,21,0,78,0,33,21,0,83,19,22,0,78,12,14,31,0,44,0,13,0,52,0,27,8,16,0,11,21,0,74,17,21,0,78,21,0,9,0,30,21,1,20,0,141,19,8,16,14,31,0,76,0,44,0,64,7,16,0,21,0,62,0,65,3,2,21,1,18,21,0,73,17,17,0,33,21,0,83,17,15,22,16,14,21,0,80,0,21,21,0,43,17,0,33,0,52,21,0,83,8,0,54,0,33,0,52,21,0,74,21,1,26,16,8,8,16,22,0,84,11,14,0,64,0,72,3,2,21,1,18,21,0,71,17,0,9,31,0,42,17,0,49,0,0,7,16,21,1,25,0,1,0,19,19,21,0,25,17,22,0,85,11,0,30,31,0,25,0,26,0,62,17,17,22,0,86,11,14,21,0,31,0,44,0,63,7,16,0,21,21,0,77,17,0,21,21,0,84,0,23,0,52,0,13,8,21,0,43,17,31,0,23,0,53,0,33,8,0,51,0,1,8,21,0,43,17,17,22,0,87,11,14,31,0,41,0,33,21,0,31,17,0,0,0,64,17,0,15,0,52,0,63,8,0,53,0,0,8,16,0,0,21,0,32,0,2,0,65,17,0,33,21,0,26,0,33,21,0,31,17,17,17,0,21,0,62,0,1,31,0,85,17,0,0,21,0,36,0,33,21,0,26,17,17,0,33,31,0,84,17,17,22,0,88,11,14,21,0,87,0,33,0,52,31,0,83,8,0,54,0,19,0,11,0,63,19,31,0,28,0,33,0,52,0,49,0,0,7,8,0,18,19,21,0,74,19,0,9,0,18,0,14,0,63,19,0,9,21,0,74,0,26,0,62,17,19,19,8,21,0,77,0,21,21,0,73,17,17,22,0,89,11,14,31,0,71,0,33,21,0,31,17,0,21,31,0,77,17,0,21,31,0,73,17,0,11,0,63,17,0,0,0,75,17,0,0,31,0,89,0,2,0,58,17,17,31,0,87,31,0,88,3,3,22,0,90,11,14,21,0,80,0,11,0,52,0,27,0,52,0,59,8,8,16,0,30,16,22,0,91,11,14,31,0,31,0,21,21,0,80,17,0,21,31,0,43,17,0,30,0,65,17,21,0,80,0,33,21,0,91,17,3,2,0,30,0,62,0,65,3,2,17,0,28,0,59,17,0,21,16,22,0,92,11,14,31,0,90,0,12,16,0,29,16,0,20,16,21,0,91,0,44,0,65,7,16,21,0,91,0,19,0,1,0,26,19,0,52,0,13,8,31,0,80,17,31,0,91,0,44,0,76,7,16,3,4,0,28,0,59,17,22,0,93,11,14,21,0,62,0,8,16,0,49,0,0,7,16,21,1,25,0,1,0,19,19,21,0,54,17,0,7,0,10,0,12,19,0,64,17,0,9,21,0,56,17,22,0,94,11,14,31,0,59,0,27,16,0,10,0,62,0,14,21,0,3,17,17,22,0,95,11,0,11,21,0,72,0,11,21,0,54,17,0,10,0,52,0,26,8,16,0,10,21,0,62,17,0,10,31,0,94,17,22,0,96,11,17,0,30,16,22,0,97,11,14,31,0,95,0,10,31,0,96,17,0,12,21,0,56,17,21,0,12,21,0,9,0,143,8,16,14,0,63,0,14,21,0,3,17,0,11,21,0,62,17,0,10,0,63,0,16,21,0,3,17,0,9,31,0,56,17,17,0,11,31,0,57,17,0,26,16,0,33,21,0,97,17,22,0,98,11,14,21,1,19,0,11,21,0,1,17,0,30,16,22,0,99,11,0,42,0,33,7,21,0,1,17,22,0,100,11,0,9,16,0,38,16,22,0,101,11,0,27,0,1,0,19,19,0,59,17,0,30,16,0,33,31,0,100,17,22,0,102,11,14,31,0,7,0,0,21,1,23,17,22,0,103,11,0,16,21,0,1,17,0,30,16,22,0,104,11,0,21,31,0,99,17,22,0,105,11,14,21,0,1,0,33,31,0,104,17,0,0,21,0,101,0,13,16,0,42,0,1,7,31,0,103,17,17,0,21,22,0,102,13,14,21,1,19,0,14,21,0,1,17,22,0,106,11,14,21,1,9,0,34,16,0,0,0,64,17,0,14,21,0,1,17,22,0,107,11,14,21,1,9,0,34,16,0,0,0,72,17,0,14,21,0,1,17,22,0,108,11,21,1,26,0,51,0,11,8,21,0,107,17,0,9,21,0,106,17,22,0,109,11,14,21,0,58,0,9,21,0,109,0,10,21,0,108,17,0,27,16,17,21,0,12,21,0,9,0,144,8,16,14,0,63,0,21,21,0,109,17,0,49,0,0,7,16,0,30,0,62,0,21,21,0,108,17,17,0,24,0,62,17,0,27,0,53,0,1,8,16,0,0,31,0,54,0,26,0,62,17,0,30,31,0,108,17,0,8,16,17,0,42,0,21,7,31,0,46,17,22,0,110,11,14,31,0,106,0,11,31,0,109,17,0,11,21,0,58,17,0,30,16,22,0,111,11,14,31,0,107,0,30,16,22,0,112,11,14,21,0,98,0,0,21,0,97,17,0,0,0,52,21,0,64,0,53,0,33,8,0,2,21,0,98,19,8,16,22,0,113,11,14,21,0,113,0,30,31,0,58,0,33,21,0,97,17,22,0,114,11,0,2,21,0,98,0,0,0,62,17,17,17,0,21,22,0,111,13,14,21,0,114,0,8,16,22,0,114,12,14,21,0,114,0,42,0,30,7,22,0,97,13,14,21,0,114,0,42,0,30,7,22,0,98,13,14,31,0,114,0,42,0,30,7,22,0,113,13,14,21,0,105,21,0,105,21,0,51,21,0,51,21,0,47,0,30,0,64,17,21,0,111,21,0,66,0,30,21,0,67,17,31,0,64,0,33,21,0,60,17,0,6,0,62,17,0,0,21,0,60,17,31,0,113,21,0,112,3,10,0,21,16,0,42,0,33,7,21,0,12,17,0,21,31,0,92,17,22,0,115,11,0,31,16,22,0,116,11,14,31,0,105,0,44,0,63,7,16,31,0,102,21,0,51,0,44,0,77,7,16,31,0,51,0,13,16,0,25,16,0,0,0,62,17,31,0,110,0,22,31,0,72,0,33,31,0,47,17,0,0,0,65,17,17,0,29,16,0,20,16,31,0,111,0,44,0,76,7,16,21,0,1,0,0,21,0,63,17,0,33,31,0,65,0,30,21,0,67,17,17,0,0,21,1,8,0,34,16,0,0,0,62,17,0,1,0,78,17,17,0,6,0,78,17,31,0,3,0,33,21,0,60,17,0,0,0,68,17,31,0,55,0,33,21,0,97,17,0,2,0,80,17,0,1,31,0,98,17,0,0,0,79,17,0,14,0,52,0,58,8,0,2,0,61,19,0,0,0,19,19,16,21,0,112,0,44,0,81,7,16,3,10,0,21,31,0,93,17,0,21,16,0,33,21,0,116,17,22,0,117,11,14,0,19,0,42,0,33,7,21,0,12,19,0,21,0,13,0,53,0,42,0,24,0,52,0,1,8,7,8,19,22,0,118,11,14,31,0,66,0,30,31,0,67,17,0,42,0,1,7,0,62,17,31,0,60,21,0,97,3,3,0,21,16,21,0,118,21,0,5,0,13,16,0,42,0,1,7,0,62,17,0,5,31,0,115,17,0,28,0,52,0,13,0,50,0,1,8,8,21,0,112,17,17,22,0,119,11,14,21,0,5,21,0,6,3,2,0,44,0,33,0,52,0,28,0,52,21,0,112,0,13,16,8,0,33,21,0,116,19,0,42,0,21,7,0,59,19,8,7,21,0,119,31,0,63,0,10,31,0,62,17,0,8,16,0,27,16,21,1,26,16,0,33,31,0,97,17,31,0,118,31,0,119,17,3,2,17,22,0,120,11,14,0,81,0,21,21,0,117,17,31,0,101,31,0,33,31,0,32,0,8,16,31,0,112,0,13,0,51,0,1,8,31,0,117,17,0,16,31,0,116,17,0,21,0,62,17,0,30,16,31,0,36,0,0,31,0,86,17,3,4,31,0,120,3,4,25,21,0,2,0,13,0,13,0,64,19,0,57,15,23,8,16,22,0,3,22,0,4,4,2,11,14,21,0,1,21,1,28,31,0,4,17,22,0,5,11,22,0,6,22,0,7,22,0,8,22,0,9,22,0,10,4,5,11,14,31,0,6,21,1,30,31,0,7,21,0,8,0,34,16,31,0,9,31,0,10,3,4,17,22,0,11,22,0,12,22,0,13,22,0,14,4,4,11,14,31,0,11,31,0,8,0,24,0,62,17,0,21,31,0,3,0,33,31,0,12,17,3,1,17,0,21,16,31,0,13,0,12,16,0,29,16,0,43,0,11,7,16,31,0,14,31,0,5,3,5,25,21,0,1,21,0,2,16,25,21,0,1,0,33,0,52,21,0,2,0,30,21,0,1,17,8,0,54,0,44,0,62,7,8,16,21,1,11,21,0,2,0,42,0,33,7,16,17,25,0,63,0,40,21,0,1,0,30,16,0,34,16,0,107,3,2,17,25,21,0,2,0,42,0,30,7,22,1,24,13,14,21,0,1,0,30,21,0,2,17,25,0,63,0,40,21,1,24,0,30,21,0,1,17,0,108,3,2,17,25,0,63,0,40,21,0,2,0,30,21,0,1,17,0,42,0,33,7,21,1,24,17,0,109,3,2,17,25,21,0,2,0,42,0,30,7,22,1,23,13,14,21,0,1,21,1,25,21,0,2,17,25,0,47,0,10,7,0,57,21,0,1,0,11,0,51,0,22,8,21,0,2,0,53,0,30,8,19,0,42,0,40,7,0,63,19,8,25,0,63,0,28,0,53,0,45,0,14,7,8,0,48,15,24,7,0,19,0,50,0,44,0,63,7,8,19,0,34,0,59,19,3,2,0,55,0,13,0,11,0,63,19,0,51,0,9,8,8,22,0,3,11,14,15,25,22,0,4,11,14,0,63,21,0,4,0,119,8,0,42,0,62,31,0,4,0,120,8,7,3,2,0,55,0,13,0,51,0,12,8,8,22,0,5,11,14,21,0,1,31,0,5,0,121,3,2,0,55,0,13,0,51,0,5,8,0,11,31,0,3,19,8,21,0,2,17,0,42,0,40,7,0,63,17,25,0,14,0,57,0,47,0,10,7,8,0,57,21,0,1,0,11,0,51,0,22,8,21,0,2,0,53,0,30,8,0,42,0,62,0,56,0,33,8,7,21,1,6,0,22,21,1,5,17,19,0,29,0,50,0,9,8,9,19,0,42,0,40,7,0,63,19,8,25,21,1,14,0,21,0,63,17,0,30,21,0,1,17,0,13,21,2,9,0,34,16,0,0,0,72,17,17,21,1,12,0,21,0,63,19,0,30,21,0,1,19,21,1,9,0,125,8,16,25,21,2,12,21,2,18,21,0,1,17,0,9,21,1,26,0,14,0,63,17,17,25,21,2,8,0,34,16,0,14,21,0,1,17,0,9,21,1,34,0,13,0,63,17,0,33,21,1,26,17,17,25,21,1,5,0,33,0,52,21,0,1,8,0,54,21,1,5,0,33,21,0,2,17,8,16,22,1,5,12,14,21,1,6,0,33,0,52,21,0,2,8,0,54,21,1,6,0,33,21,0,1,17,8,16,22,1,6,12,25,21,1,81,0,33,0,52,21,0,1,8,0,13,0,52,0,27,8,9,0,51,0,10,8,21,1,82,17,0,8,16,21,1,78,0,30,0,52,21,1,74,8,0,53,0,21,8,9,0,33,21,0,1,19,21,1,9,0,140,8,16,25,21,0,1,0,30,21,0,1,0,2,16,0,10,21,1,74,17,22,0,3,11,17,0,27,0,53,0,1,8,16,0,15,0,64,17,21,1,78,0,30,31,0,3,19,21,1,9,0,142,8,16,25,21,0,1,0,44,0,44,0,41,0,63,7,0,40,0,145,19,7,7,3,2,25,21,0,1,0,27,16,0,0,21,0,2,17,0,49,0,6,7,16,0,6,21,0,1,17,25,0,36,0,14,0,18,0,50,0,13,8,19,0,42,0,30,7,0,19,19,0,0,21,0,2,19,0,42,0,33,7,21,3,2,19,0,21,0,102,19,0,21,21,0,1,19,0,21,0,118,19,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,26,9,1,0,2,3,-3,-2,5,17,3.141592653589793,Infinity,4,-4,-10,21,14,15,11,16,7,25,'\0','0','#','\'','\"','@',str("+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕«»⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!"),str("˙˜˘¨⌜⁼´˝`"),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("System dot with no name"),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("Can\'t strand Nothing (·)"),str("Can\'t return Nothing (·)"),str("Special name outside of any block"),str("Can\'t export from a non-immediate block"),str("Modules must be immediately assigned"),str("Modules must be destructured"),str("Nothing (·) cannot be assigned"),str("Missing operand"),str("Double subjects (missing ‿?)"),str("Role of the two sides in assignment must match"),str("Function or modifier assignment to a non-name"),str("Assignment target must be a name or list of targets"),str("Can\'t use result of function/modifier assignment without parentheses"),str("Redefinition"),str("Undefined identifier"),str("Imports must have been exported"),str("Second-level parts of a train must be functions"),str("Can\'t use Nothing (·) in lists"),str("System values not supported")]
 ,[[0,1,0,32],[1,0,464,5],[1,1,483,5],[0,0,607,50],[0,0,2393,22],[0,0,3200,121],[0,0,8198,15],[0,0,8349,3],[0,0,8357,3],[0,0,8397,3],[0,0,8416,3],[0,0,8439,3],[0,0,8458,3],[0,0,8486,3],[2,1,8510,3],[0,0,8546,6],[2,1,8683,3],[0,0,8752,3],[0,0,8802,3],[0,0,8824,3],[0,0,8854,3],[0,0,8912,3],[0,0,8974,4],[0,0,9026,3],[0,0,9048,3],[2,1,9073,3]]
);
runtime[42] = rtAssert;
let system = (x,w) => {
  let r = table(s=>sysvals[s.join("")])(x);
  if (r.some(v=>!has(v))) {
    let m = x.filter((_,i)=>!has(r[i])).map(s=>"•"+s.join("")).join(" ");
    throw Error("Unknown system values (see •listSys for available): "+m);
  }
  return table(v=>v.dynamic?v():v)(r);
}
let rt_sys = list([runtime, system]);
let bqn = src => run.apply(null,compile(str(src),rt_sys));

// Formatter
let fmtnum = x => str(x==Infinity ? "∞" : x==-Infinity ? "¯∞"
                    : (""+x).replace(/-/g,"¯"));
let fmt1 = run(
  [15,1,25,21,0,1,22,0,2,22,0,3,22,0,4,22,0,5,4,4,11,14,0,64,0,14,0,17,0,17,19,0,37,0,65,8,3,2,0,40,0,9,0,37,0,54,8,8,21,0,5,3,2,0,40,0,54,0,38,0,7,8,8,0,18,9,22,0,6,11,14,15,2,22,0,7,11,14,0,10,0,7,0,47,19,0,42,15,3,8,22,0,8,11,14,15,4,22,0,9,11,14,15,5,22,0,10,11,14,15,6,15,7,3,2,0,40,15,8,0,46,3,2,0,40,0,9,0,38,0,9,0,37,0,46,8,0,36,0,6,8,8,8,8,22,0,11,11,14,0,74,0,18,0,73,17,15,9,15,10,3,2,0,40,0,9,0,10,0,43,19,0,6,0,10,0,9,0,47,19,19,8,3,2,0,40,0,13,0,13,0,43,0,43,3,2,19,8,22,0,12,11,14,15,11,22,0,13,11,14,15,12,22,0,14,11,14,15,13,15,14,15,15,3,3,0,40,0,27,0,54,7,0,7,0,16,19,0,35,0,32,0,0,7,0,11,0,0,0,7,0,37,0,43,8,19,0,9,19,8,8,22,0,15,11,14,31,0,6,31,0,15,21,0,14,3,2,0,40,0,31,21,0,2,7,0,11,0,52,19,0,16,0,35,0,32,0,6,7,8,9,8,21,0,14,3,3,0,40,0,12,0,3,0,47,19,8,22,0,16,11,14,15,16,22,0,17,11,14,0,15,0,15,21,0,16,9,21,0,17,0,26,0,46,19,0,18,9,3,2,0,40,0,14,0,11,0,52,19,8,21,0,2,19,22,0,18,11,14,21,0,18,0,35,0,29,0,53,0,0,0,54,17,0,38,0,17,8,7,8,0,16,9,0,20,0,44,19,25,0,46,0,30,0,19,7,21,0,1,0,1,16,17,0,23,0,39,0,34,0,28,0,31,0,2,7,7,7,8,16,0,32,0,44,0,45,3,2,0,41,0,0,8,7,21,0,2,17,0,16,16,0,26,0,37,0,44,8,0,39,0,43,8,16,25,21,0,1,0,13,16,0,20,0,44,17,22,0,3,11,0,4,0,46,17,21,1,7,16,22,0,4,11,14,15,17,22,0,5,11,14,21,0,1,0,16,21,0,1,0,13,16,0,19,0,44,17,0,17,31,0,3,0,32,0,2,7,16,17,17,0,19,0,37,0,32,0,0,7,8,31,0,5,3,2,0,40,0,15,0,35,0,9,8,0,7,0,43,19,8,31,0,4,17,25,21,0,1,0,16,16,0,30,0,27,0,55,7,0,16,0,13,0,26,0,44,19,0,38,0,18,8,19,0,17,0,15,19,7,21,0,1,0,13,16,21,1,7,0,46,17,17,0,17,16,25,0,55,0,16,21,0,1,0,9,16,21,0,2,3,2,17,22,0,3,11,14,21,0,3,21,0,1,31,0,3,3,3,0,18,16,0,17,16,25,0,68,0,17,21,0,1,0,25,16,0,20,0,46,17,0,20,0,44,17,17,0,17,0,67,17,0,18,16,25,21,0,1,0,13,16,0,26,0,44,17,22,0,3,11,14,0,69,21,0,2,0,15,0,3,0,46,19,0,28,0,25,7,0,70,19,0,16,9,21,1,5,3,2,0,40,0,7,0,37,0,48,8,8,16,3,2,0,17,16,0,19,21,0,3,17,0,18,16,21,0,1,0,26,0,39,0,71,0,26,0,46,0,1,21,0,2,17,0,3,0,49,17,0,4,0,43,17,17,8,16,0,72,0,19,0,37,0,1,8,31,0,3,17,0,18,16,3,3,0,17,16,25,21,0,1,0,25,16,0,31,0,10,7,0,66,17,0,33,0,1,7,16,0,34,0,0,7,16,0,10,0,47,17,0,32,0,6,7,16,25,21,0,1,0,30,0,75,7,16,21,1,10,0,46,17,21,1,11,0,47,17,0,26,0,37,0,43,0,44,3,2,8,0,39,0,56,8,16,25,21,0,1,0,13,16,0,66,0,30,21,1,5,7,0,30,0,17,0,37,0,76,8,7,9,0,17,9,0,26,0,39,0,57,8,9,3,2,0,40,0,9,0,7,0,46,19,8,16,0,18,16,25,21,0,1,0,30,0,13,7,16,22,0,3,11,14,21,0,3,0,30,0,26,7,0,46,17,0,16,0,27,0,46,7,0,1,0,10,19,0,42,0,33,0,4,7,8,3,2,0,40,0,10,0,7,0,43,19,8,16,22,0,4,11,14,31,0,3,0,30,0,26,7,16,0,10,0,7,0,43,19,0,42,0,46,0,41,0,33,0,4,7,8,8,16,22,0,5,11,14,21,0,1,0,30,0,19,7,0,46,0,19,21,0,4,0,9,16,0,2,21,0,2,17,0,1,16,17,0,5,31,0,4,17,0,2,21,0,2,17,0,31,0,18,7,21,0,5,17,17,0,10,0,1,0,47,19,0,4,0,43,19,0,42,0,18,8,16,0,47,0,41,0,17,0,35,0,7,8,8,16,22,0,6,11,14,31,0,6,21,1,9,0,8,0,35,21,1,8,8,3,2,0,40,31,0,5,0,16,16,0,12,0,37,0,23,0,37,0,46,8,8,16,8,16,21,1,10,0,47,17,25,21,0,1,0,30,21,1,18,7,16,21,1,13,0,46,0,14,21,0,2,17,17,21,1,11,21,0,1,0,10,16,17,25,21,0,1,0,10,16,22,0,3,11,14,0,77,0,15,0,39,21,0,1,8,16,0,20,0,43,17,22,0,1,12,14,21,0,1,0,13,16,0,20,0,44,17,22,0,4,11,0,9,16,0,1,16,0,10,0,37,0,43,8,0,42,0,45,8,16,22,0,5,11,14,0,58,22,0,6,11,14,15,18,22,0,7,11,14,21,0,1,0,24,0,37,0,15,0,10,21,0,6,19,0,0,0,46,19,8,31,0,7,3,2,0,40,0,10,0,9,0,46,19,8,16,22,0,1,12,14,21,0,6,0,19,0,37,0,1,8,21,0,4,17,21,0,5,0,41,0,17,8,21,0,1,17,31,0,5,0,41,0,17,8,0,61,0,19,21,0,4,0,17,0,46,17,0,26,0,44,17,17,0,16,31,0,4,17,0,26,0,39,31,0,6,8,16,17,0,18,16,21,0,3,0,9,0,46,17,0,42,21,1,8,21,1,10,0,46,19,21,1,11,31,0,3,19,8,16,25,21,0,1,21,1,14,21,1,12,3,2,0,40,0,13,0,10,0,43,19,0,32,0,6,7,9,8,16,25,21,0,1,21,1,14,0,44,17,25,0,78,0,79,0,80,0,81,3,4,0,30,0,14,0,17,0,17,19,7,0,62,17,22,0,3,11,14,0,15,0,15,0,35,21,1,16,0,35,21,0,3,0,26,16,0,25,3,2,0,40,0,9,0,10,0,46,19,8,8,8,0,7,0,36,0,18,8,0,43,19,21,1,17,3,2,0,40,0,14,0,11,0,52,19,8,21,1,2,19,22,0,4,11,14,21,0,1,21,1,3,16,22,0,5,11,0,26,16,22,0,6,11,14,0,63,0,1,0,82,17,0,26,21,0,6,17,22,0,7,11,14,0,84,0,38,0,17,8,0,17,0,83,19,22,0,8,11,14,0,15,0,30,31,0,4,0,38,0,26,0,37,0,46,8,0,14,0,11,21,0,7,0,3,0,47,17,19,0,42,0,15,0,35,31,0,8,8,8,0,26,0,38,0,0,8,19,8,7,0,9,0,35,0,21,8,0,10,0,43,19,0,1,9,0,46,0,8,21,0,7,17,0,42,0,23,8,9,19,0,17,9,22,0,9,11,14,21,0,5,0,20,0,46,17,0,27,21,0,1,7,21,1,4,0,35,0,16,8,9,31,0,3,0,40,0,47,0,1,21,0,2,17,8,31,0,9,3,3,0,40,31,0,6,0,3,0,47,17,8,16,22,0,10,11,14,21,0,10,21,0,7,0,11,0,47,17,0,42,0,27,31,0,5,7,0,26,0,44,19,21,1,2,9,0,8,0,52,19,0,42,0,85,0,38,0,17,8,8,8,16,22,0,10,12,14,31,0,7,31,0,10,3,2,25,21,0,1,0,17,0,37,0,25,0,35,0,30,0,55,7,8,8,16,0,25,21,0,2,0,0,0,46,17,0,17,0,43,17,0,24,16,0,2,0,37,0,7,0,37,0,22,8,8,16,17,25,0,51,0,0,0,54,17,0,7,21,0,1,17,0,2,0,54,0,1,0,60,17,17,0,0,0,50,0,0,0,54,17,0,15,0,1,0,59,19,0,2,0,10,19,21,0,1,17,17,0,0,21,0,1,17,25]
 ,[runtime[0],runtime[1],runtime[2],runtime[6],runtime[7],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[29],runtime[30],runtime[32],runtime[35],runtime[36],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,10,'\0',' ','┐','↕','\"','␡','␀','·','*','0',str("@"),str("\'"),str("⟨⟩"),str("⟨"),str("⟩"),str("┌"),str("·─"),str("·╵╎┆┊"),str("┘"),str("┌┐"),str("└┘"),str(" "),str("‿"),str(""),str("array"),str("function"),str("1-modifier"),str("2-modifier"),str("00321111"),str("("),str(")"),str("{𝔽}")]
 ,[[0,1,0,0],[1,1,3,19],[0,0,399,3],[0,0,465,6],[0,0,565,3],[0,0,616,4],[0,0,655,3],[0,0,685,4],[0,0,808,3],[0,0,846,3],[0,0,885,3],[0,0,938,7],[0,0,1168,3],[0,0,1201,8],[0,0,1428,3],[0,0,1457,3],[0,0,1467,11],[0,0,1822,3],[0,0,1874,3]]
)(list([type, decompose, glyph, fmtnum]));
let fmt = x => fmt1(x).join("");

let fmtErr = (s,e) => {
  let r=e.src, w=e.message, loc=[];
  while (w&&w.loc||(r!=='!'&&w.sh&&w.sh[0]===2)) {
    let 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");
}
let dojs = (x,w) => {
  req1str("•JS",x,w);
  let r = Function("'use strict'; return ("+x.join("")+")")();
  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 sysvals = {
  bqn:(x,w)=>{req1str("•BQN",x,w);return bqn(x);}, js:dojs,
  type, glyph, decompose, fmt:fmt1, unixtime,
  listsys: () => list(Object.keys(sysvals).map(str).sort())
};
sysvals.listsys.dynamic = 1;

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;
  module.exports=bqn;

  let show = x => console.log(fmt(x));
  sysvals.show = (x,w) => { show(x); return x; };
  sysvals.out = (x,w) => { req1str("•Out",x,w);console.log(x.join("")); return x; };

  if (!module.parent) {
    let args = process.argv.slice(2);
    args.map(a=>{
      try {
        show(bqn(a));
      } catch(e) {
        console.error(''+fmtErr(Array.from(a),e)+'');
      }
    });
  }
}