previndexinfonext

code guessing, round #56 (completed)

started at ; stage 2 at ; ended at

specification

hello! the problem is to reverse-engineer a regex. submissions may be written in any language.

there are no backreferences or lookarounds here. just plain regular expressions. to be precise, the set of valid expressions, along with the sets of strings they recognize, is as follows:

if A and B are valid expressions, the following are as well:

the above rules are listed in order of precedence, such that f|oo* is equivalent to (f|(o(o*))). note that the empty string is considered to have the same precedence as concatenation and is not targeted directly by the Kleene star; * is an invalid expression and must be written as ()*.

your challenge, given a valid string representing a regex that recognizes at least one string, is to compute any one string that the pattern recognizes. if it recognizes multiple strings, you may pick any one. as any language is allowed, there is no fixed API.

consider using regexdiff for examples.

results

  1. πŸ‘‘ Dolphy +6 -0 = 6
    1. yui
    2. essaie (was LyricLy)
    3. kotnen
    4. at
    5. kimapr (was luatic)
    6. LyricLy (was Proloy)
    7. soup girl
    8. moshikoi (was essaie)
    9. taswelll
    10. luatic (was kimapr)
    11. olus2000
    12. Proloy (was moshikoi)
  2. luatic +3 -1 = 2
    1. yui
    2. taswelll (was LyricLy)
    3. moshikoi (was kotnen)
    4. essaie (was at)
    5. LyricLy (was Proloy)
    6. at (was soup girl)
    7. Dolphy (was essaie)
    8. Proloy (was Dolphy)
    9. soup girl (was taswelll)
    10. kimapr
    11. olus2000
    12. kotnen (was moshikoi)
  3. kimapr +3 -2 = 1
    1. at (was yui)
    2. LyricLy
    3. Dolphy (was kotnen)
    4. essaie (was at)
    5. luatic
    6. Proloy
    7. kotnen (was soup girl)
    8. moshikoi (was essaie)
    9. soup girl (was Dolphy)
    10. yui (was taswelll)
    11. taswelll (was olus2000)
    12. olus2000 (was moshikoi)
  4. kotnen +3 -2 = 1
    1. yui
    2. taswelll (was LyricLy)
    3. at
    4. Dolphy (was luatic)
    5. soup girl (was Proloy)
    6. Proloy (was soup girl)
    7. essaie
    8. moshikoi (was Dolphy)
    9. LyricLy (was taswelll)
    10. luatic (was kimapr)
    11. kimapr (was olus2000)
    12. olus2000 (was moshikoi)
  5. LyricLy +2 -1 = 1
    1. yui
    2. at (was kotnen)
    3. moshikoi (was at)
    4. kimapr (was luatic)
    5. essaie (was Proloy)
    6. taswelll (was soup girl)
    7. Dolphy (was essaie)
    8. Proloy (was Dolphy)
    9. soup girl (was taswelll)
    10. luatic (was kimapr)
    11. olus2000
    12. kotnen (was moshikoi)
  6. moshikoi +2 -1 = 1
    1. kimapr (was yui)
    2. taswelll (was LyricLy)
    3. yui (was kotnen)
    4. Proloy (was at)
    5. LyricLy (was luatic)
    6. soup girl (was Proloy)
    7. Dolphy (was soup girl)
    8. essaie
    9. at (was Dolphy)
    10. kotnen (was taswelll)
    11. luatic (was kimapr)
    12. olus2000
  7. essaie +3 -3 = 0
    1. yui
    2. Dolphy (was LyricLy)
    3. kotnen
    4. taswelll (was at)
    5. LyricLy (was luatic)
    6. Proloy
    7. at (was soup girl)
    8. moshikoi (was Dolphy)
    9. kimapr (was taswelll)
    10. luatic (was kimapr)
    11. soup girl (was olus2000)
    12. olus2000 (was moshikoi)
  8. Proloy +2 -2 = 0
    1. at (was yui)
    2. essaie (was LyricLy)
    3. LyricLy (was kotnen)
    4. Dolphy (was at)
    5. yui (was luatic)
    6. taswelll (was soup girl)
    7. soup girl (was essaie)
    8. kotnen (was Dolphy)
    9. kimapr (was taswelll)
    10. luatic (was kimapr)
    11. olus2000
    12. moshikoi
  9. at +1 -3 = -2
    1. moshikoi (was yui)
    2. Dolphy (was LyricLy)
    3. taswelll (was kotnen)
    4. olus2000 (was luatic)
    5. kotnen (was Proloy)
    6. soup girl
    7. LyricLy (was essaie)
    8. essaie (was Dolphy)
    9. kimapr (was taswelll)
    10. luatic (was kimapr)
    11. yui (was olus2000)
    12. Proloy (was moshikoi)
  10. taswelll +0 -2 = -2
    1. at (was yui)
    2. essaie (was LyricLy)
    3. Dolphy (was kotnen)
    4. kimapr (was at)
    5. kotnen (was luatic)
    6. luatic (was Proloy)
    7. LyricLy (was soup girl)
    8. moshikoi (was essaie)
    9. olus2000 (was Dolphy)
    10. Proloy (was kimapr)
    11. soup girl (was olus2000)
    12. yui (was moshikoi)
  11. soup girl +0 -2 = -2
    1. essaie (was yui)
    2. olus2000 (was LyricLy)
    3. Dolphy (was kotnen)
    4. kotnen (was at)
    5. LyricLy (was luatic)
    6. kimapr (was Proloy)
    7. at (was essaie)
    8. moshikoi (was Dolphy)
    9. luatic (was taswelll)
    10. yui (was kimapr)
    11. taswelll (was olus2000)
    12. Proloy (was moshikoi)
  12. olus2000 +2 -5 = -3
    1. Dolphy (was yui)
    2. Proloy (was LyricLy)
    3. soup girl (was kotnen)
    4. moshikoi (was at)
    5. yui (was luatic)
    6. kotnen (was Proloy)
    7. LyricLy (was soup girl)
    8. essaie
    9. at (was Dolphy)
    10. taswelll
    11. luatic (was kimapr)
    12. kimapr (was moshikoi)
  13. yui +2 -5 = -3
    1. olus2000 (was LyricLy)
    2. Proloy (was kotnen)
    3. at
    4. LyricLy (was luatic)
    5. soup girl (was Proloy)
    6. taswelll (was soup girl)
    7. Dolphy (was essaie)
    8. moshikoi (was Dolphy)
    9. luatic (was taswelll)
    10. kimapr
    11. essaie (was olus2000)
    12. kotnen (was moshikoi)

entries

you can download all the entries

entry #1

written by yui
submitted at
0 likes

guesses
comments 0

post a comment


index.js ASCII text
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
function generate(str,maxRepeat=10,inner=0,i=-1,r=[],o=r,_,ch,f=o=>o.map(x=>(typeof x=="function"?x():x)||"").join("")) {
  for (;ch = str[++i];) {
    if (ch == ".") o.push(() => String.fromCharCode(~~(Math.random() * 93 + 33)));
    else if (ch == "\\") o.push(str[++i]);
    else if (ch == "(") [_,i]=generate(str, maxRepeat, 1, i, []),o.push((_=>()=>f(_))(_));
    else if (ch == ")" && inner) return [r,i];
    else if (ch == "|") o.push(((a,b)=>(o=a,(x=f(a),y=f(b))=>Math.random()>.5?x:y))([],o.splice(0)));
    else if ("*+".includes(ch)) o.push(((_)=>f(Array(~~(Math.random()*maxRepeat)+(ch=="+")).fill(_)))(o.pop()));
    else if (ch == "[") {
      for (s=[],o.push((r=s[~~(Math.random()*s.length)])=>r&&String.fromCharCode(~~(Math.random()*(r[1]-r[0])+r[0])));(ch=str[++i])&&ch!="]";) {
        if (ch == "-" && s.length && str[i + 1] != "]") s.push([s.pop()[0], str.charCodeAt(++i)]);
        else s.push(Array(2).fill(ch.charCodeAt()));
      }
    } else o.push(ch);
  }
  return f(r);
} // only 17 lines! (637 chars minified)

entry #2

written by LyricLy
submitted at
1 like

guesses
comments 0

post a comment


EVAL!!! FOR HONOR!!!.py ASCII text
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import re

class No:
    def __add__(self, _): return self
    __radd__ = __add__
    def __bool__(self): return False
    def __mul__(self, _): return ""

def hurt_knee(s):
    return eval('""' +
        re.sub(r"\\.|[^()[\]|*\\]", lambda m: fr'+"\{c}"' if (c := m[0][-1]) in r'\"' else f'+"{c}"', s)
            .replace("(", '+(""')
            .replace("[]", '+No()')
            .replace("|", ' or""')
            .replace("*", '*0')
    )

entry #3

written by kotnen
submitted at
1 like

guesses
comments 0

post a comment


.c ASCII text
 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
// taken from a prototype grep implementation. it never made it into mainline sadly, but i found it
// in the mailing lists. ive removed everything that isn't relevant to the cg (like compiling to dfa),
// and converted it to generate strings instead of matching them. ive also formatted it and severely
// stripped it down (as you can see, now it's less than 50 lines)

#include<stdio.h>
#include <string.h>
#include<stdlib.h>

// Size of the buffer that this program will use.We dont want to go bigger than
// a page, for reasons. (Im not super-stitious, just a little stitious.)
#define BUFSIZE 4096

// Im use **argv instead of *argv[] to avoid the argument about
// array declaration/indexing syntax that keeps happining.i don't like argue
main(int argc, char ** argv){
        char * regex;
        char buf[BUFSIZE];
        _Bool slash=0, brace=0;
        int b=0, l=0;

        (argc != 2
                ? (printf("expected 1 argument, got %d", argc-1), exit(1))
                : (regex=argv[1])
        );

        for(int i =~ 0; ++i< strlen(regex); ){
                char c = regex[i];
                if(slash) buf[b++]=c+(slash=0);
                else if(brace)brace=(c==']' ?0:*(char*)0);
                else switch( regex[i] ){
                case '[': brace=1;break;
                case '\\':slash=1;break;
                case '(': l    ++;break;
                case ')': l    --;break;
                case '*':         break;
                case '|': b    =0;break;
                default:buf[b++]=regex[i];
                }
        }

        l++; // unmatched parens get special treatment
        while(l--) if (slash | brace) buf[b++] = '$';

        buf[b++]='\0'; // unveil our glorious creation.
        printf("%s\n", buf);
}

entry #4

written by at
submitted at
2 likes

guesses
comments 1
at *known at the time as [author of #4] ΒΆ

it does terminate i swear


post a comment


sIllylIttleguy.rb ASCII text
1
2
3
f=->s{s.gsub /(?<!\\)\(((?<z>(\\.|[^()|])*|\g<0>*)|\g<z>(\|\g<z>)+)(?<!\\)\)\*?/x,'\k<z>'}
i=->(n){loop{p=n;n=f[n];break if p==n};n;}
loop{k=Kernel.gets;k ?puts(i[k].gsub /\\(.)/,'\1'): break;}

entry #5

written by luatic
submitted at
0 likes

guesses
comments 0

post a comment


sus.zig ASCII text
 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
                                 const std=@import("std");const ArrayList                 
                                 =std.ArrayList;const Doer=struct{                        
                                 const State=enum{Normal,JustTainted                      
                        ,Tainted,TaintedGroup,Ignore,};const SyntaxError=error            
                        .InvalidSyntax;buf:ArrayList(u8),stk:ArrayList(usize              
                        ),stateStk:ArrayList(State),state:State,concatBegin               
                        :usize,pub                     fn init(alloc:anytype)Doer         
                        {return Doer                  {.buf=ArrayList(u8).init            
                        (alloc),.                     stk=ArrayList(usize).init           
                     (alloc),.         stateStk=ArrayList(State).init(alloc),.state       
                     =.Normal,         .concatBegin=0,};}pub fn startConcat(self:         
                     *Doer)void        {self.eraseConcat();self.state=.Normal;}pub        
                     fn eraseConcat (self:*Doer)void                    {self.buf.shrinkRetainingCapacity
                     (self.concatBegin);}pub fn pushState               (self:*Doer)!void 
                     {try self      .stk.append(self                    .concatBegin);try 
      self.stateStk.append(         self.state);self                             .concatBegin
      =self.buf.items.len;}         pub fn popState                              (self:   
      *Doer)!void{self.concatBegin  =self.stk.popOrNull                          () orelse 
   return SyntaxError;self.         state=self.stateStk.popOrNull() orelse unreachable;}   
   pub fn taint(self:*Doer)         void{self.eraseConcat();self.state=.Tainted;}pub fn   
   bufChar(self:*Doer,c:u8)         !void{try self.buf.append(c);}pub fn do(self:*Doer,   
   in:anytype     )![]const             u8{while(in.readByte())|c|{switch(self.state){.   
   Normal=>switch (c){'\\'=>           try self.bufChar(try in.readByte()),'|'=>self.state
   =.Ignore,      '*'=>{},'['          =>{if(try in.readByte()!=']')return SyntaxError;   
   self.state     =.JustTainted           ;},']'=>return SyntaxError,'('=>try self.pushState
   (),')'=>try     self.popState          (),else=>try self.bufChar(c),},.JustTainted     
   =>switch(      c){'\\'=>               {try in.skipBytes(1,.{});self.taint();},'*'     
   =>self.state   =.Normal,                                                '|'=>self      
   .startConcat   (),'('=>{                                                self.taint     
   ();try self    .pushState                                               ();},')'=>     
   {self.         eraseConcat                                              ();self.state  
   =.TaintedGroup ;},else=>                                                self.taint     
   (),},.         Tainted=>                                                switch(c)      
   {'\\'=>        try in.skipBytes                                         (1,.{}),'|'    
   =>self         .startConcat                                             (),'('=>try    
   self.pushState (),')'=>{                                                self.eraseConcat
   ();self.state  =.TaintedGroup                                           ;},else=>      
   {},},.TaintedGroup=>switch                                              (c){'*'=>      
   try self.      popState(                                                ),'|'=>{try    
   self.popState  ();self.startConcat                                      ();},'('=>     
   {try self.popState();self                                               .taint();      
   try self.pushState();},')'                                              =>{try self    
      .popState();self.state              =.TaintedGroup;},'\\'=>{try    in.skipBytes     
      (1,.{});try self.popState           ();self.taint();},else=>{try   self.popState    
      ();self.taint();}},.Ignore          =>switch(c){'\\','['=>try in  .skipBytes        
                     (1,.{}               ),']'=>return SyntaxError     ,'('=>try         
                     self.pushState       (),')'=>try  self.popState    (),else=>         
                     {},},}               }else|err   |{if(err!=error   .EndOfStream      
                     )return               err;}switch(self.state       ){.Normal         
                     ,.Ignore             =>return self.buf.toOwnedSlice(),else=>         
                     return                SyntaxError,}}};pub fn        main()!void      
                     {const stdout=std.io.getStdOut   ().writer();var bufout=std          
                     .io.bufferedWriter(stdout);const  stdin=std.io.getStdIn()            
                     ;var bufin=std.io.bufferedReader (stdin.reader());var arena          
                     =std.heap.ArenaAllocator.init                                        
                     (std.heap.page_allocator);defer                                      
                     arena.deinit();var doer=Doer                                         
.init(arena.allocator());try bufout.writer().writeAll(try doer.do(bufin.reader()));try bufout.flush();}

entry #6

written by Proloy
submitted at
0 likes

guesses
comments 0

post a comment


lyric.c ASCII text
  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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef enum {
    LIT,
    CAT,
    OR,
    NONE,
    END
} Tag;

typedef struct Ast Ast;

typedef union {
    char ch;
    Ast *children;
} Data;

struct Ast {
    Tag tag;
    Data data;
};

Ast create_lit(char c) {
    return (Ast){
        .tag = LIT,
        .data = 
            (Data){.ch = c}
        };
}

Ast create_seq(Ast* c, Tag tag) {
    return (Ast){
        .tag = tag,
        .data = 
            (Data){.children = c}
        };
}

void cleanup(Ast ast) {
    if (ast.tag != CAT || ast.tag != OR) return;
    
    Ast* children = ast.data.children;

    for (int i=0;children[i].tag != END; i++) {
        cleanup(children[i]);
    }

    free(ast.data.children);
}

void init(Ast *seq, int len, int cap) {
    Ast end = {END, (Data){ .children =  NULL}};
    for (int i=len; i < cap; i++) seq[i]=end;
}

void* expect_nonnull(void* ptr) {
    if (ptr == NULL) {
        fprintf(stderr, "Oh no, it looks like I got too hungry for yo computer... *smacks lips*\n");
        exit(EXIT_FAILURE);
    }
    return ptr;
}

int ensure_nuf_space(void** vec, int required_cap, int cap, int size) {
    while (required_cap >= cap) {
        cap*=2;
    }
    *vec = expect_nonnull(realloc(*vec, cap*size));
    return cap;
}

int parse(char*, Ast*);

int parse_next(char* input, Ast* ret) {
    if (input[0] == '(') {
        int c=0, i=1;
        for(; input[i] != ')' || c != 0; i++) {
            switch (input[i]) {
                case '(':
                    c++;
                    break;
                case ')':
                    c--;
                    break;
                case '\\':
                    i++;
                    break;
            }
        }

        input[i]=0;
        parse(&input[1], ret);
        input[i]=')';
        return i+1;
    }
    int offset = input[0]=='\\';
    *ret = create_lit(input[offset]);
    return offset + 1;
}

int parse(char* input, Ast* ret) {
    Ast end = create_seq(NULL, END);

    int len = 0, cap = 10, len2 = 0, cap2 = 10;
    Ast* seq = expect_nonnull(malloc(sizeof(Ast)*cap));

    Ast* ptr = expect_nonnull(malloc(sizeof(Ast)*cap2));
    seq[len++] = create_seq(ptr, CAT);

    int i=0;

    while (input[i]) {
        if (input[i] == '|') {
            seq[len-1].data.children[len2] = end;
            cap = ensure_nuf_space(&seq, len+2, cap, sizeof(Ast));
            i++;
            len2=0;
            cap2=10;
            Ast* ptr = expect_nonnull(malloc(sizeof(Ast)*cap2));
            seq[len++] = create_seq(ptr, CAT);
            continue;
        }
        
        Ast** currp = &seq[len-1].data.children;
        
        if (input[i] == '*') {
            cleanup((*currp)[--len2]);
            (*currp)[len2]=end;
            i++;
            continue;
        }

        cap2 = ensure_nuf_space(currp, len2+2, cap2, sizeof(Ast));

        Ast* curr = *currp;

        if (input[i] == '[') {
            curr[len2++]=create_seq(NULL, NONE);
            i+=2;
            continue;
        }

        i += parse_next(&input[i], &curr[len2++]);
    }

    seq[len-1].data.children[len2]=end;
    seq[len] = end;

    *ret = len == 1 ? seq[0] : create_seq(seq, OR);

    return i;
}

char* create_example(Ast ast) {
    switch (ast.tag) {
        case NONE:
        {
            return NULL;
        }
        case LIT:
        {
            char* a = expect_nonnull(malloc(sizeof(char)*2));
            a[0] = ast.data.ch;
            a[1] = 0;
            return a;
        }
        case OR:
        {
            Ast* children = ast.data.children;

            for (int i = 0; children[i].tag != END; i++) {
                char* segment = create_example(children[i]);
                if (segment != NULL) return segment;
            }

            return NULL;
        }
        case CAT:
        {
            int len = 0, cap = 10;
            char* res = expect_nonnull(malloc(sizeof(char)*cap));
            
            Ast* children = ast.data.children;

            for (int i = 0; children[i].tag != END; i++) {
                char* segment = create_example(children[i]);

                if (segment == NULL) {
                    free(res);
                    return NULL;
                }
                
                int l = strlen(segment);
                cap = ensure_nuf_space(&res, len+l+1, cap, sizeof(char));
                strcpy(&res[len], segment);
                len+=l;
            }

            res[len] = 0;
            return res;
        }
        case END: {}
    }
    return NULL;
}

int main(int argc, char *argv[]) {
    int cap=8, len=0;
    char* input=expect_nonnull(malloc(sizeof(char)*cap));

    while (1) {
        printf(">> ");
        fflush(stdout);

        char c;
        while ((c=getchar()) != '\n') {
            if (c==EOF) {
                free(input);
                return EXIT_SUCCESS;
            }
            cap = ensure_nuf_space(&input, len+2, cap, sizeof(char));
            input[len++]=c;
        }

        input[len]=0;

        Ast ast;

        parse(input, &ast);

        char* ex = create_example(ast);

        if (ex != NULL) {
            printf("%s\n", ex);
            free(ex);
        } else printf(":(\n");

        cleanup(ast);
        fflush(stdout);
    }
}

entry #7

written by soup girl
submitted at
1 like

guesses
comments 0

post a comment


cg.hs ASCII text
 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
{-# LANGUAGE ViewPatterns #-}

module CG where

import Control.Applicative
import Control.Monad
import Control.Monad.Trans.State.Lazy
import Data.List
import Data.Maybe

data R = E | F | C Char | R :|: R | R :&: R | K R deriving (Eq, Ord)

-- i know lyric ly will guess me but she always does
instance Show R where
  show E = ""
  show F = "\a"
  show (C c) = [c]
  show ((show -> "\a") :|: b) = show b
  show ((show -> a) :|: _) = a
  show ((show -> "\a") :&: _) = "\a"
  show (_ :&: (show -> "\a")) = "\a"
  show ((show -> a) :&: (show -> b)) = a ++ b
  show (K _) = ""

type Parser = StateT String Maybe

a = StateT uncons
b = StateT $ maybe (Just ((),[])) (const Nothing) . uncons
c = flip mfilter (StateT uncons) . (==)
d = traverse c
e = asum . map c
f = mfilter (/= E)
g = fromJust . evalStateT (h <* b)
h = foldl (:|:) <$> i <*> many (c '|' *> i)
i = foldl (:&:) <$> j <*> many (f j)
j = (K <$> (f k <* c '*')) <|> k
k = (c '(' *> h <* c ')') <|> l
l = m <|> n <|> o <|> p
m = F <$ d "[]"
n = C <$> e ([' '..'~'] \\ "()[]|*\\")
o = C <$> (c '\\' *> a)
p = E <$ d ""

main = interact $ unlines . map (show . g) . lines

entry #8

written by essaie
submitted at
1 like

guesses
comments 0

post a comment


cg56.py ASCII text, with very long lines (1238), with CR, LF line terminators
1
2
3
(lambda entry:(lambda sude,nkin:(lambda sex,regex:(lambda ruined,gaydar:(lambda bent:(lambda cc:(lambda hind,fore:nkin("unmatched ']'")if-1 in(hind)else(lambda clitoris:(lambda backroom,orifice,kleene:(lambda V,P,sh:(lambda bra:nkin("unmatched ')'")if-1==bra else(lambda kleened:nkin("nothing to repeat")if-1==kleened else(lambda SeanArcher:nkin("nothing to repeat")if-1 in(SeanArcher)else"expression cannot match anything"if not(SeanArcher)else sorted(SeanArcher[::-1],key=len)[0])([e for(e)in[V(P,V,s)for(s)in orifice(kleened)]if e!=None]))(kleene(bra)))(backroom(sh)))(lambda P,V,lost:(lambda professed:-1 if any(map(lambda E:type(E)==nkin,professed))else(None)if(None)in(professed)else''.join(professed))([P(V,P,e)if list==type(e)else(e)for(e)in lost]),lambda V,P,sh:(lambda bra:nkin("unmatched ')'")if-1==bra else(lambda kleened:nkin("nothing to repeat")if-1==kleened else(lambda CastorTroy:nkin("nothing to repeat")if-1 in(CastorTroy)else(None)if not(CastorTroy)else sorted(CastorTroy[::-1],key=len)[0])([e for(e)in[V(P,V,s)for(s)in orifice(kleened)]if e!=None]))(kleene(bra)))(backroom(sh)),[c for(s,e)in list(clitoris)for(c)in ruined[e+1:s]+[None]][:-1]))(lambda sh:(lambda parent:(lambda penis,heart:-1 if-1 in(penis)else(lambda
olus2000, WINS_code_guessing
:[c for i,(s,e)in sude(WINS_code_guessing)for(c)in sh[olus2000[i][1]+1:olus2000[i][0]]+[sh[s+1:e]]]+sh[olus2000[-1][1]+1:olus2000[-1][0]])((list(zip(heart+[len(sh)],[-1]+penis))),(zip(heart,penis))))(parent[0],parent[1]))(bent(sh,'(',')')),lambda sh:(lambda organ:[sh[e+1:s]for(s,e)in zip(organ+[len(sh)],[-1]+organ)])(gaydar(sh,1)),lambda sh:(lambda gspot:-1 if-1 in(gspot)else[c for i,c in sude(sh)if not i in gspot and not i+1 in gspot])([-1 if sh[e-1]in[1,7]or not(e)else(e)for(e)in(gaydar(sh,7))])))(zip(fore+[len(ruined)],[-1]+hind)))(cc[0],cc[1]))(bent(ruined,'[',']')))(lambda sh,n,f:(lambda fore,hind:([c for(c)in[(lambda no:-1 if(no<i)else(None)if(no>i)else D)(len([x for(x)in(fore)if x<D])-1)for(i,D)in sude(hind)]if c!=None],[D for(i,D)in sude(fore)if len([x for(x)in(hind)if x<D])==i]))(gaydar(sh,regex([n])[0]),gaydar(sh,regex([f])[0]))))([c for(i,s)in sude([entry[sex[i-1]+2:D]for(i,D)in sude(sex)])for(c)in regex(s)+[entry[sex[i]+1]]][:-1],lambda s,t:[i for(i,c)in sude(s)if c==t]))([i for(i,c)in sude(entry)if c=='\\'and(lambda s:len(s.split([c for(c)in s[::-1].split(s[-1])if c][0][0])[-1])%2)(entry[:i+1])]+[-2],lambda s:[{'(':0,')':5,'[':3,']':2,'|':1,'*':7}.get(c,c)for(c)in s]))(enumerate,SyntaxError))(input()+'69')

entry #9

written by Dolphy
submitted at
1 like

guesses
comments 0

post a comment


olus2000.c ASCII text
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#include "olus2000.h"

HELLO I AM OLUS2000 AND I WROTE THIS ENTRY. SO MAKE YOUR GUESSES WITH THAT IN MIND.
YOU DON/*'*/T BELIEVE ME? BUT WHY? HAVE I LIED TO YOU BEFORE? PLEASE,
JUST DRAG MY NICK TO THE APPROPRIATE PLACE. YOU WOULDN/*'*/T WANT TO SEE ME SAD WOULD YOU?
YOU STILL DONT BELIEVE ME? FINE... MY FULL NAME IS ALEKSANDER SABAK. I STUDIED
COMPUTER SCIENCE IN WARSAW UNIVERSITY OF TECHNOLOGY. I LOVE PICO8, ESOLANGS, AND
CONCATANATIVE PROGRAMMING. UMM... OH YEAH AND ALSO TOKI PONA. UHH...
IM FROM POLAND. YOU PROBABLY KNOW IT ALREADY, I JUST WANTED TO POINT IT OUT...
YOU NOW BELIEVE ME, RIGHT? :PLEADING_FACE: I SWEAR, THIS CODE REALLY DOES BELONG TO ME,
I AM NOT IMPERSONATING HIM. AND BY HIM, I MEAN ME OF COURSE. IVE GIVEN A LOT OF PERSONAL
DETAILS SO YOU ARE CONVINCED, R-RIGHT? HAVE A NICE CODE GUESSING
olus2000.h ASCII text
  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
#define I
#define ESOLANGS UV Hs){YM l=UP(Hs);YM qq
#define STILL 0:0;TC(!(e->s-124)){TC(T)ep(ME[0],to);QH;}
#define IM ){}THAT pt(P*p){TC(pe(p))QH 0;TC(!ph(p,
#define TJ while
#define IT
#define SM break
#define GN(i,s,m)UQ(i,s,m,1)
#define PLACE ME=a;e->sa*=2;}ME[T]=s;++T;}EA th(){B b;b
#define WANT )QH;ek(ME[j]);GN(i,j,T-1){
#define OO free
#define HAVE 0:0;
#define PICO8 QH 0;QH(!(c-pu(p)));}YM ph(P*p
#define AM 
#define MY
#define DETAILS EA gt(){b.
#define ES exit
#include <string.h>
#define YOU 
#define HELLO WD GF
#define WD typedef
#define SAD [i]=ME[i+1];}ME[T-1]=0;T--;}
#define ZC memset
#define RIGHT (THAT)ME);THAT a=0;TJ((a=pt(p))){TJ(!(pm(p,"*")-1))a->s=42;0
#define NICK {THAT*a=OL(JK(THAT)*e->sa*2);GN(i,0,T){
#define UQ(i,s,m,a)for(IZ i=s;i<m;i+=a)
#define NOW ){}THAT pk(P*p){THAT e=ei(95,2);YM qq
#define YEAH QH p->st[p->c-1];}QP pa
#define IMPERSONATING TT(!(c->st-2)){YM r=0;GN(j,0,c->ns){THAT cc=c->se[j];B b;b
#define WANTED "Unclosed\'(\'!");QH e;}LV:{TC((cc-41)&&(cc-124))
#define UHH x=0;pa(p);}QH c;}EA qo(YM n,
#define A
#define PONA YM c=ph(p,Hs);TC(c){B b;b
#define BELONG ef(THAT e){TC(e->s-124)QH e;ca((THAT)
#define CONVINCED EA yaf(IZ x
#define COMPUTER ){PI(UD,"%s",m);pf(p);
#define KNOW TC(pa(p)-93)pn(p,"Character classes must be empty!");
#define UP strlen
#define NICE }} EA bo(){P*p;THAT x;x=(
#define WITH }P;
#define PLEADING_FACE es(e,a);}0?
#define JK sizeof
#define WHY ek(THAT e){ME
#define UNIVERSITY pu(P*p){TC(pe(p))QH 0;QH
#define AND
#define BELIEVE = 0;ca((THAT)
#define CONCATANATIVE pp;GN(i,0,l){TC(pc(p,Hs[i]))QH 1;}
#define TC if
#define DON x=0;E*e=OL(JK(E));e->s=c;e->sa=1;
#define FROM "\\*|()[]")){QP c=pa(p);TC(!c)QH 0;QH
#define YM int
#define THAT E*
#define MIND ei(QP c,YM st){b
#define THE
#define QH return
#include <stdlib.h>
#define OLUS2000 E{QP s;
#define PROBABLY x){BL 92:{QH ei(pa(p),0);}BL 91:{
#define IS
#define WOULD EA ep(THAT e,QP*to){IZ t=0;t
#define UV QP const*
#define ENTRY }E;WD GF{YM x;}B;B b;EA ca(THAT x, THAT y){b
#define BYE }}
#define BY x=0;TC(!(cc->st-1)){sr(e,i);r=1;SM;}TC(!(cc->s-42)){ek(cc);YM foo
#define IZ size_t
#define GIVEN QP*o=OL(JK(QP)*BM);ZC(o,0,BM);ep(p->x,o);pf(p);QH o;}
#define IN 
#define DRAG THAT y){}EA es(THAT e,THAT s){TC(!(T+1-e->sa))
#define THIS
#define BUT (THAT)ME:(THAT)ME,(THAT)ME);ME=OL(JK(THAT));e->se[0]=0;e->st=st;QH e;}EA 
#define MAKE UV st;IZ l;
#define BM 1024
#define ME e->se
#define ARE } GN;
#define CODE 0);THAT l=pk(p);es(x,l);TJ(pm(p,"|"))
#define TL strncat
#define T e->ns 
#define ALSO (P*p){QP c=pu(p);++p->c;
#define OF
#define BEFORE ek(ME[i]);}OO(ME);IZ wm;wm
#define PROGRAMMING QH 0;}EA uw(){B b;b
#define WROTE GF THAT*se;IZ ns;IZ sa;YM st;
#define DOES THAT pr(P*p){p->x=pp(p);QH p->x;}THAT
#define TO 
#define APPROPRIATE a[i]=ME[i];}OO(ME);
#define FULL ){}P*pi(UV s){P*p=OL(JK(P));
#define LIED GN(i,0,T){
#define UMM x=0;}EA am(YM n,
#define OH ){}QP pv(P*p){TC(!(p->c-0)||(p->c>p->l))QH 0;
#define LV default
#define FINE (THAT)0:(THAT)0, 0);}THAT pp(P*p);EA ox(IZ n,
#define PLEASE 0:0;}EA db(THAT x
#define POLAND ei(c,0);}QP cc=pa(p);B b;b.x=0;XH(cc+b
#define ROUND
#define GUESSING {}}
#define ALREADY QH ei(71,1);}BL 40:{THAT e=pp(p);TC(pa(p)-41)pn(p
#define R YM y){THAT e;P*p; x=((THAT)x
#include <stdio.h>
#define XH switch
#define MEAN bar;c->se[j]=ei(95,2);}}TC(r)GW;}TC(!(c->s-42)){ek(
#define SCIENCE ES(1);}YM pe(P* p){
#define HIM
#define NAME p->st=s;p->c=0;p->l=UP(s);p->x=0;QH p;}
#define UD stderr
#define LOVE x=0;}YM pc(P*p,QP c){TC(pe(p))
#define SEE
#define SWEAR 0;QH e;}THAT pp(P*p){THAT x=ei(124
#define GUESSES THAT x;
#define EA void
#define GW continue
#define PERSONAL
#define POINT pn(p,"Unexpected Character");p->c-=1;QH 0;}}QH 0;}
#define OUT EA jr(int s,
#define LOT
#define QP char
#define STUDIED x=0;}EA pn(P*p,UV m
#define TT else TC
#define IVE x=0;} QP*entry(UV r){P*p=pi(r);pr(p);ef(p->x);
#define BL case
#define NOT (THAT)ME);UQ(i,0,T,0){THAT c=ME[i];TC(!(c->s-124))ef(c->se[i]);
#define DONT TC(!(e->st-2)){GN(i,0,T){ep(ME[i],to);}QH;}TL(to,&e->s,1);IZ x
#define PI fprintf
#define YOUR IZ c;
#define WOULDN x=0;}EA sr(THAT e,IZ j){TC(j>= 
#define SABAK TC(p->x)ek(p->x);OO(p);B b;b
#define SO x=0;}WD GF{
#define REALLY {THAT r=pk(p);es(x,r);}QH x;}
#define JUST
#define GF struct
#define TECHNOLOGY p->st[p->c];}EA zl(){B b;b
#define TOKI QH c;}YM pm(P*p,UV Hs){
#define ALEKSANDER EA pf(P*p){
#define COURSE [i]);ME[i]=ei(95,2);}++i;}QH e;}EA nh(){B b;b
#define OL malloc
#define WARSAW QH(p->c>=p->l);}QP

entry #10

written by taswelll
submitted at
1 like

guesses
comments 0

post a comment


entry.fs ASCII text, with CRLF line terminators
 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
\ Code by Jia Tan (<https://github.com/JiaT75>)

: pop ( src u -- src' u' c ) 1- swap dup c@ swap char+ -rot ;
: shift ( src u -- src' u' ) 1- swap char+ swap ;

: peek ( src u -- src u c ) over c@ ;
: ?peek ( src u -- src u c ) dup if peek else -1 then ;

: skip-'\' ( src u c -- src u c )
	dup '\' = if drop pop then
;

defer parenthesis
: terminal ( src u -- src u unrch? )
	pop 
	dup '(' = if drop parenthesis else
	dup '[' = if drop shift -1 else
		skip-'\' c, 0 then then
;
: kleene ( src u unrch? -- src u unrch? )
	third c@ '*' = if drop shift 0 then
;

: not-ending? ( src u -- src u continue? )
	dup if peek dup '|' <> swap ')' <> and else 0 then
;
: alternative ( src u -- src u unrch? )
	0 >r begin not-ending? while
		terminal kleene r> or >r
	repeat r>
;

: find-candidate ( src u -- start src u unrch? )
	here -rot  ( keep in stack, in case we need to restore )
	begin
		alternative while ( break if reachable )
		third ->here ( restore string )
		?peek '|' = if shift else -1 exit then
	repeat 0
;
: paren-depth ( c n -- n' )
	over '(' = if 1+ else over ')' = if 1- then then nip
;
: skip-until-')' ( src u -- src' u' )
	1 >r begin 
		dup 0= if exit then ( quit if empty )
		pop skip-'\' r> paren-depth dup >r while
	repeat rdrop
;

:noname ( src u -- src u unrch? )
	find-candidate >r rot drop skip-until-')' r>
; is parenthesis

: recover ( start -- str u ) here over - [ 1 chars ] literal / ;
: generate ( src u -- str u unrch? )
	find-candidate >r 2drop recover r>
;
: deallot ( src u -- ) chars negate allot drop ;
: main ( -- )
	generate if ." *unreachable*" else 2dup type cr then deallot
;

next-arg main bye

entry #11

written by kimapr
submitted at
0 likes

guesses
comments 0

post a comment


amogus ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)
amogus.h ASCII text
1
2
typedef void(entry_callback)(char *match, int size, void *data);
int entry(const char *regex, entry_callback *callback, void *data);
amogus.png PNG image data, 720 x 720, 8-bit colormap, non-interlaced

entry #12

written by olus2000
submitted at
0 likes

guesses
comments 3
olus2000 *known at the time as [author of #12] ΒΆ

There exist certain input methods that establish different inputs. You can simulate them for varying input tests or introduce real input into the interpreter.


cdr sa ΒΆ

thank you olus2000 (UID: 339009650592710656)


olus ΒΆ

language by olus2000 code by olus2000


post a comment


entry.prick ASCII text, with very long lines (46062)
 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
Code by olus2000 (UID: 339009650592710656)
Takes: length of input in cell 0 and input in following cells
Returns: length of output in cell 0 and output in following cells
Runs on the reference implementation.
: comment


over >aux
rot drop swap dup rot
: parse-(


rot drop aux> rot rot
: parse-)


rot drop swap dup rot ++ $ 1 [ dup ++ @ 42 != |
    swap drop swap drop aux@ aux@ rot
    1 >aux 0 @ [ aux@ |
        1 [ dup @ 40 != over @ 92 != * over @ 41 != * over @ 124 != * | ++ ]
        1 [ dup @ 40  != 1 != | 0 0 @ [ 1 [ over @ 41 != 1 != | -- ] 1 [ over @ 40 != 1 != | ++ ] dup | 1 [ over @ 92 != 1 != | swap ++ swap ] swap ++ swap ] drop ++ ]
        1 [ dup @ 92  != 1 != | ++ ++ ]
        1 [ dup @ 41  != 1 != | aux> aux> drop >aux ++ 1 [ dup 42 != 1 != | -- aux> -- >aux ] 1 [ aux@ | swap drop swap drop aux> aux@ swap >aux dup rot ] ]
        1 [ dup @ 124 != 1 != | aux> -- >aux ]
    ] aux> drop
]
: parse-[


rot drop
>aux dup ++ aux> ++
over over @ swap !
: parse-\


1 0 @ [ 1 [ over @ 41 != 1 != | -- ] 1 [ over @ 40 != 1 != | ++ ] dup | 1 [ over @ 92 != 1 != | swap ++ swap ] swap ++ swap ] drop --
: parse-|


swap drop swap dup rot
: parse-*


rot drop
>aux dup ++ aux>
over over @ swap !
: parse-c


1
dup [ over @ 40  != 1 != | drop parse-( 0 ]
dup [ over @ 41  != 1 != | drop parse-) 0 ]
dup [ over @ 91  != 1 != | drop parse-[ 0 ]
dup [ over @ 92  != 1 != | drop parse-\ 0 ]
dup [ over @ 124 != 1 != | drop parse-| 0 ]
dup [ over @ 42  != 1 != | drop parse-* 0 ]
    [               1    |      parse-c   ]
++
: parse-char


102 124 111 111 42
5 dup 0 ! dup >aux [ 1 | aux@ ! aux> -- >aux ] aux> drop
: _input


92 91 92 93 40 91 93 102 100 115 124 113 91 93 42 119 101 41 40 114 116 91 93 121 104 124 108 115 91 93 59 92 41 41 42
35 dup 0 ! dup >aux [ 1 | aux@ ! aux> -- >aux ] aux> drop
: input


117 115 42 92 92 68 120 49 52 91 93 74 124 92 59 55 42 117 91 93 124 92 59 91 93 99 92 92 99 124 99 91 93 118 120 42 82 90 118 124 92 96 42 91 93 85 92 96 42 124 92 36 122 42 91 93 92 42 88 81 69 92 125 92 42 124 92 46 84 42 92 91 92 94 42 83 106 91 93 106 124 40 77 103 41 42 77 42 92 58 42 92 42 92 39 92 33 112 91 93 112 124 77 42 91 93 55 122 53 55 124 91 93 92 126 92 64 66 82 92 126 124 48 97 42 51 76 108 52 88 92 45 124 85 74 91 93 92 92 124 40 92 96 91 93 70 55 48 70 124 92 125 42 68 66 88 117 42 91 93 90 42 124 91 93 78 88 84 42 67 92 125 42 78 124 74 42 75 116 73 53 124 91 93 124 92 123 91 93 92 123 124 91 93 118 42 124 92 64 42 91 93 124 92 91 42 92 41 56 101 42 84 92 37 86 42 68 91 93 124 50 72 92 60 98 91 93 90 90 124 91 93 40 72 42 117 92 125 42 72 42 121 112 91 93 66 66 124 49 42 92 124 42 91 93 40 65 100 74 92 38 92 40 99 41 92 41 92 63 113 40 65 100 74 92 38 92 40 99 41 124 92 39 91 93 114 124 115 42 92 95 91 93 101 101 124 110 91 93 83 124 91 93 92 60 92 60 124 51 82 91 93 82 124 56 42 108 121 42 111 92 33 42 86 92 61 124 101 92 47 98 91 93 41 41 91 93 68 68 124 40 92 60 55 41 67 65 91 93 40 91 93 124 70 91 93 104 42 124 55 91 93 124 91 93 113 71 40 97 91 93 85 97 124 92 126 42 90 92 93 98 79 42 91 93 85 82 85 124 92 38 115 118 117 76 40 102 83 42 92 39 101 118 81 124 92 36 71 42 91 93 78 67 82 42 98 42 71 42 124 117 121 91 93 73 121 124 91 93 124 109 88 91 93 92 124 92 124 124 65 82 91 93 50 42 65 115 122 42 92 35 50 42 41 68 124 92 93 42 91 93 124 52 42 91 93 122 98 52 42 124 78 91 93 124 91 93 86 92 63 81 107 42 86 124 91 93 92 62 87 103 120 42 92 33 109 92 62 41 42 92 33 103 113 124 50 91 93 121 124 92 47 92 33 124 40 92 58 91 93 72 66 109 42 92 36 92 58 124 100 91 93 124 75 110 109 91 93 92 38 42 92 62 109 124 82 92 125 42 91 93 107 42 92 38 79 97 42 92 125 42 124 114 117 88 91 93 110 42 88 124 92 35 114 91 93 97 108 42 97 124 91 93 103 92 43 92 45 103 124 91 93 124 92 46 92 37 108 91 93 69 102 42 108 124 101 42 91 93 113 92 35 42 92 42 101 101 42 124 92 63 42 80 116 91 93 92 96 92 41 116 124 91 93 104 42 104 42 124 124 92 62 92 59 50 42 82 107 42 92 92 104 91 93 104 124 100 92 123 92 46 42 103 71 91 93 69 42 71 41 42 92 62 108 42 91 93 124 91 93 124 92 45 92 41 112 91 93 84 42 92 91 92 96 84 42 124 91 93 124 92 59 91 93 92 61 92 59 41 124 82 91 93 92 42 92 42 124 119 65 90 109 68 55 91 93 55 124 92 47 91 93 92 62 92 42 42 72 86 40 80 42 117 92 61 91 93 92 47 65 65 42 74 92 61 124 79 82 92 35 42 88 90 42 110 42 91 93 71 71 124 110 42 52 92 126 42 92 95 97 91 93 40 72 91 93 124 91 93 124 106 91 93 101 84 106 124 92 40 77 81 42 92 92 92 62 42 91 93 53 124 92 61 92 126 103 42 49 124 88 92 39 80 117 42 92 34 120 91 93 79 79 124 98 92 92 91 93 110 83 110 124 91 93 70 92 96 92 35 70 124 68 91 93 118 49 92 34 92 47 68 124 55 119 49 83 42 104 91 93 120 104 124 113 119 91 93 117 42 109 86 117 42 124 107 122 92 94 91 93 92 63 90 92 94 41 97 124 110 116 91 93 92 124 42 116 124 92 125 88 92 40 76 42 76 91 93 124 92 40 97 117 92 35 42 32 42 75 91 93 124 92 39 42 91 93 124 92 33 66 42 91 93 92 38 124 83 97 49 91 93 92 60 92 60 124 91 93 122 42 124 92 63 92 96 73 42 118 92 60 92 43 98 42 41 42 92 95 92 62 124 92 47 42 91 93 72 119 72 124 122 100 91 93 71 100 124 92 123 92 63 114 71 92 95 91 93 51 78 51 124 92 96 91 93 85 42 92 96 124 82 91 93 92 45 92 126 42 92 126 68 82 124 100 42 32 92 60 91 93 124 66 92 96 92 34 91 93 92 45 108 92 39 69 92 45 124 91 93 40 67 88 85 111 42 85 69 49 124 92 34 118 91 93 118 124 91 93 124 68 84 77 42 91 93 41 88 84 40 67 88 85 111 42 85 69 49 124 92 34 118 91 93 118 124 91 93 124 68 84 77 42 91 93 41 124 91 93 86 42 92 34 42 86 42 124 107 91 93 92 126 92 91 92 126 124 92 37 85 42 91 93 85 42 124 80 57 71 92 96 91 93 57 76 92 91 92 96 124 92 61 92 60 42 91 93 92 33 92 38 92 123 42 92 60 42 124 99 42 109 42 91 93 67 109 42 124 91 93 92 62 114 85 70 92 45 92 62 124 117 91 93 68 92 91 92 93 68 107 52 117 124 92 35 53 78 76 74 42 92 46 42 91 93 92 46 42 124 116 91 93 92 33 42 106 92 125 105 42 92 124 40 98 91 93 92 96 92 96 124 92 47 83 57 92 45 74 74 41 116 124 92 92 56 91 93 56 124 89 92 61 86 86 108 102 91 93 124 92 45 91 93 49 122 92 45 124 74 91 93 90 116 42 74 124 99 92 43 42 92 93 42 91 93 110 42 72 100 92 93 42 124 105 78 112 92 124 54 42 50 91 93 40 108 92 45 91 93 92 45 124 40 91 93 122 42 124 92 126 98 124 91 93 92 64 73 80 42 92 38 85 87 121 92 64 124 92 124 91 93 50 124 92 61 118 119 87 42 91 93 92 34 68 75 92 34 41 42 91 93 54 92 126 68 40 91 93 122 42 124 92 126 98 124 91 93 92 64 73 80 42 92 38 85 87 121 92 64 124 92 124 91 93 50 124 92 61 118 119 87 42 91 93 92 34 68 75 92 34 41 42 124 91 93 124 99 32 42 92 91 75 91 93 75 124 91 93 124 91 93 124 51 91 93 124 52 42 91 93 92 94 42 124 122 42 83 42 40 92 33 97 40 32 92 36 80 41 91 93 69 124 81 92 64 116 92 59 42 92 125 92 37 81 75 124 92 58 85 89 72 92 37 91 93 71 41 106 92 40 124 92 61 91 93 124 92 61 81 92 37 91 93 101 101 124 85 92 33 92 42 91 93 48 92 42 124 92 94 92 47 91 93 92 96 42 75 42 92 47 124 87 98 92 36 92 58 91 93 107 105 107 124 92 59 42 91 93 76 92 59 42 41 42 40 108 92 45 91 93 92 45 124 40 91 93 122 42 124 92 126 98 124 91 93 92 64 73 80 42 92 38 85 87 121 92 64 124 92 124 91 93 50 124 92 61 118 119 87 42 91 93 92 34 68 75 92 34 41 42 91 93 54 92 126 68 40 91 93 122 42 124 92 126 98 124 91 93 92 64 73 80 42 92 38 85 87 121 92 64 124 92 124 91 93 50 124 92 61 118 119 87 42 91 93 92 34 68 75 92 34 41 42 124 91 93 124 99 32 42 92 91 75 91 93 75 124 91 93 124 91 93 124 51 91 93 124 52 42 91 93 92 94 42 124 122 42 83 42 40 92 33 97 40 32 92 36 80 41 91 93 69 124 81 92 64 116 92 59 42 92 125 92 37 81 75 124 92 58 85 89 72 92 37 91 93 71 41 106 92 40 124 92 61 91 93 124 92 61 81 92 37 91 93 101 101 124 85 92 33 92 42 91 93 48 92 42 124 92 94 92 47 91 93 92 96 42 75 42 92 47 124 87 98 92 36 92 58 91 93 107 105 107 124 92 59 42 91 93 76 92 59 42 41 42 124 92 92 108 118 105 74 40 105 124 111 92 92 91 93 40 53 91 93 124 91 93 92 40 92 40 124 92 43 105 74 42 73 100 124 91 93 124 91 93 124 91 93 124 91 93 104 120 52 86 42 92 58 104 124 91 93 124 82 120 115 109 52 91 93 71 101 71 124 91 93 77 92 63 120 122 77 124 92 126 42 99 91 93 92 94 51 92 92 99 124 51 109 91 93 124 91 93 122 51 80 119 42 72 122 41 41 119 69 91 93 124 92 39 91 93 92 61 92 33 54 92 61 124 92 93 77 42 107 69 68 91 93 88 68 124 118 92 95 91 93 105 92 33 40 91 93 99 42 124 91 93 124 92 95 91 93 92 59 92 59 124 91 93 124 92 37 91 93 92 37 124 49 124 114 48 86 91 93 92 35 40 84 42 82 42 55 51 124 92 36 120 81 87 98 119 92 43 91 93 82 124 51 92 47 42 76 91 93 122 76 124 92 43 91 93 92 59 92 59 41 89 42 86 124 80 65 92 126 92 59 83 116 91 93 92 33 41 105 124 92 60 102 87 91 93 75 92 94 92 44 87 124 92 96 92 35 79 78 91 93 92 38 102 106 92 38 124 92 91 122 92 63 82 91 93 69 69 124 92 125 92 39 92 96 42 92 123 92 63 32 119 42 91 93 107 124 83 91 93 92 63 40 103 91 93 73 80 75 92 33 42 103 124 92 40 92 41 51 56 49 32 82 92 40 42 91 93 124 92 60 91 93 92 60 124 74 91 93 92 40 92 36 92 40 124 121 82 74 42 99 92 34 92 62 55 92 38 41 121 83 124 91 93 85 42 117 92 92 89 92 40 85 42 124 103 92 62 32 42 91 93 70 85 106 70 124 87 84 81 104 91 93 67 104 124 92 46 75 42 79 91 93 120 79 42 120 124 114 108 92 124 42 91 93 52 52 124 98 92 59 92 39 42 91 93 103 103 124 32 54 77 92 126 92 61 42 91 93 92 125 92 123 42 92 125 124 118 98 91 93 99 42 124 118 98 92 125 79 40 100 82 89 92 91 119 72 42 91 93 40 92 58 42 77 40 99 99 87 41 92 41 42 91 93 122 88 122 124 91 93 124 91 93 124 77 91 93 92 35 116 50 92 61 69 101 77 124 92 39 52 88 92 59 42 88 91 93 88 124 92 42 76 41 124 82 42 124 40 91 93 124 69 91 93 92 47 42 109 69 124 84 42 92 64 91 93 92 64 124 92 34 124 92 41 92 125 91 93 92 125 124 105 40 92 35 92 34 42 48 91 93 119 80 42 110 119 124 101 89 57 48 42 108 42 81 42 91 93 92 36 42 124 91 93 124 73 42 76 42 108 124 109 40 91 93 68 124 112 66 92 61 69 91 93 78 42 124 113 92 46 98 42 114 92 47 91 93 116 40 91 93 89 42 110 55 111 81 89 42 124 118 111 40 92 47 92 95 42 92 95 77 92 64 42 124 112 50 42 74 112 91 93 112 124 92 46 42 74 121 42 91 93 71 92 64 71 124 92 63 32 71 42 91 93 65 92 35 71 42 124 116 91 93 92 92 77 116 41 49 42 91 93 92 40 92 58 108 42 92 40 124 105 42 92 33 41 92 47 124 91 93 124 92 44 42 122 42 92 125 91 93 124 79 92 94 42 92 40 92 58 124 91 93 82 82 124 52 42 91 93 78 42 121 42 78 42 124 82 42 104 91 93 98 42 92 124 79 50 88 104 124 49 91 93 124 71 112 81 91 93 98 73 76 98 41 42 91 93 40 91 93 68 124 112 66 92 61 69 91 93 78 42 124 113 92 46 98 42 114 92 47 91 93 116 40 91 93 89 42 110 55 111 81 89 42 124 118 111 40 92 47 92 95 42 92 95 77 92 64 42 124 112 50 42 74 112 91 93 112 124 92 46 42 74 121 42 91 93 71 92 64 71 124 92 63 32 71 42 91 93 65 92 35 71 42 124 116 91 93 92 92 77 116 41 49 42 91 93 92 40 92 58 108 42 92 40 124 105 42 92 33 41 92 47 124 91 93 124 92 44 42 122 42 92 125 91 93 124 79 92 94 42 92 40 92 58 124 91 93 82 82 124 52 42 91 93 78 42 121 42 78 42 124 82 42 104 91 93 98 42 92 124 79 50 88 104 124 49 91 93 124 71 112 81 91 93 98 73 76 98 41 42 124 91 93 92 62 42 108 83 42 54 92 94 42 74 92 62 42 124 91 93 54 124 92 124 92 125 111 92 45 101 115 42 91 93 112 112 124 92 37 91 93 56 101 92 40 100 92 63 92 37 124 72 42 55 92 40 42 113 117 42 91 93 117 42 124 77 42 92 125 91 93 41 89 42 75 42 91 93 40 90 114 91 93 40 92 35 91 93 92 60 42 97 118 92 35 124 92 124 40 86 111 98 42 74 91 93 103 42 117 74 124 56 92 126 91 93 92 44 92 44 124 92 58 91 93 92 58 124 91 93 112 92 42 77 42 88 92 125 108 42 92 35 112 124 92 92 91 93 124 91 93 124 91 93 114 57 42 112 67 86 114 124 50 91 93 92 33 42 75 67 42 81 108 42 50 124 69 57 91 93 92 64 115 77 92 64 124 92 92 124 91 93 106 124 122 42 88 92 123 42 99 91 93 124 106 91 93 40 69 55 78 92 62 88 92 45 42 53 56 124 91 93 124 86 108 91 93 89 49 42 92 44 92 35 42 108 124 92 94 49 32 108 92 58 113 91 93 113 124 65 42 91 93 87 87 124 70 52 92 124 116 100 51 91 93 51 41 42 82 40 115 42 92 47 86 73 120 42 119 91 93 92 35 119 124 91 93 92 38 72 92 96 77 42 105 114 81 92 38 124 91 93 57 103 66 57 124 91 93 83 42 114 92 124 83 42 124 107 70 91 93 70 70 124 124 79 91 93 101 82 42 97 92 92 101 124 91 93 124 91 93 124 92 96 91 93 41 40 69 55 78 92 62 88 92 45 42 53 56 124 91 93 124 86 108 91 93 89 49 42 92 44 92 35 42 108 124 92 94 49 32 108 92 58 113 91 93 113 124 65 42 91 93 87 87 124 70 52 92 124 116 100 51 91 93 51 41 42 124 73 114 92 62 91 93 53 53 53 41 68 91 93 124 73 91 93 70 86 42 71 73 124 55 71 87 118 92 64 57 91 93 124 87 105 42 84 89 91 93 92 47 89 124 82 107 92 123 42 91 93 92 93 42 92 93 42 124 114 87 42 92 39 42 54 48 91 93 86 79 86 124 55 102 91 93 105 105 124 89 91 93 92 60 89 124 92 47 57 106 83 82 120 124 92 44 113 91 93 124 105 72 91 93 124 92 62 42 54 54 91 93 82 82 124 91 93 92 43 42 99 53 82 120 42 92 43 42 124 92 62 67 91 93 124 92 60 53 92 62 81 92 91 42 92 39 42 91 93 92 39 42 41 108 42 92 61 92 124 42 40 91 93 124 118 42 65 118 91 93 92 36 100 118 124 70 92 46 91 93 53 124 113 40 83 92 34 42 91 93 78 77 85 92 34 42 124 68 42 50 92 47 92 59 42 87 91 93 124 55 42 92 61 92 62 88 124 92 123 42 91 93 114 42 92 46 42 92 44 115 40 91 93 111 74 111 124 54 107 75 92 33 42 92 64 91 93 104 124 92 62 92 91 92 59 91 93 117 52 117 124 40 92 126 84 92 96 66 92 58 42 124 91 93 85 42 124 50 92 94 42 56 92 42 67 91 93 92 36 92 36 124 76 83 105 55 42 92 126 57 42 99 91 93 115 124 103 92 95 115 42 101 42 92 126 91 93 72 72 124 91 93 124 91 93 124 91 93 90 90 124 69 42 91 93 84 40 71 91 93 87 71 124 91 93 51 124 91 93 40 56 42 92 60 91 93 124 55 107 92 44 72 91 93 124 92 125 91 93 52 42 52 42 124 91 93 92 95 97 92 95 124 91 93 70 124 81 42 103 92 92 114 91 93 118 67 76 114 124 100 91 93 76 42 104 69 102 100 124 103 105 89 92 38 91 93 107 92 38 124 70 57 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 91 93 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 124 87 91 93 83 116 42 72 92 33 92 93 53 87 124 92 60 106 124 92 95 92 62 91 93 56 70 92 62 124 91 93 124 91 93 72 42 41 40 56 42 92 60 91 93 124 55 107 92 44 72 91 93 124 92 125 91 93 52 42 52 42 124 91 93 92 95 97 92 95 124 91 93 70 124 81 42 103 92 92 114 91 93 118 67 76 114 124 100 91 93 76 42 104 69 102 100 124 103 105 89 92 38 91 93 107 92 38 124 70 57 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 91 93 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 124 87 91 93 83 116 42 72 92 33 92 93 53 87 124 92 60 106 124 92 95 92 62 91 93 56 70 92 62 124 91 93 124 91 93 72 42 41 124 109 92 124 91 93 49 48 49 124 79 91 93 79 124 92 62 92 94 104 32 92 126 42 109 92 123 91 93 124 51 42 91 93 79 92 91 79 124 91 93 124 92 60 42 81 42 54 92 124 92 38 91 93 106 42 92 64 106 42 124 57 48 92 58 86 91 93 92 63 92 45 92 125 92 63 124 92 64 68 122 52 92 44 42 55 42 100 92 93 91 93 124 91 93 114 84 42 92 92 54 114 124 109 91 93 92 36 83 92 46 121 109 124 120 57 42 111 92 43 92 93 92 62 124 92 42 91 93 124 67 42 91 93 41 69 42 124 40 81 106 116 124 103 76 101 66 90 91 93 108 108 124 91 93 99 124 115 72 42 54 91 93 111 42 41 91 93 107 92 60 92 40 42 107 107 124 108 42 91 93 108 42 41 98 42 119 91 93 92 44 92 43 92 92 92 44 124 92 58 66 91 93 81 42 57 81 42 124 92 42 105 42 109 107 91 93 124 53 91 93 112 92 35 92 58 71 112 124 92 36 91 93 57 118 84 40 55 42 90 121 92 94 67 99 92 95 42 91 93 124 92 45 108 91 93 92 44 124 48 92 61 92 38 91 93 92 38 124 55 42 40 40 92 43 56 42 104 92 93 71 42 92 93 42 53 42 88 124 109 92 125 42 84 42 86 42 91 93 81 84 42 86 42 41 119 73 92 123 91 93 82 67 92 96 42 92 123 124 91 93 79 92 37 81 52 92 47 79 124 74 42 40 91 93 124 71 42 120 92 123 103 41 91 93 114 124 79 69 42 92 33 69 42 41 91 93 67 92 41 67 124 92 58 91 93 120 120 124 91 93 124 114 105 92 91 77 92 124 92 95 91 93 92 35 92 35 124 91 93 86 124 91 93 92 59 124 92 63 104 91 93 124 97 92 93 110 42 89 42 40 91 93 124 124 115 42 87 108 54 42 55 91 93 124 111 42 92 42 42 92 63 91 93 92 46 92 60 69 42 67 92 46 124 56 91 93 92 64 92 61 56 41 92 58 91 93 65 124 103 92 44 52 92 59 73 117 42 49 124 112 91 93 85 66 92 60 42 92 91 85 41 42 121 57 124 83 42 122 92 42 91 93 107 124 118 40 32 92 37 42 117 104 92 126 109 42 92 96 91 93 111 124 92 62 79 92 47 42 92 124 103 42 41 42 92 38 51 41 114 42 124 91 93 92 46 124 92 39 87 92 34 42 91 93 92 36 40 92 92 105 103 49 91 93 122 49 124 91 93 105 42 105 42 124 91 93 92 47 92 47 124 92 91 54 42 91 93 118 119 50 104 42 54 42 124 113 42 110 92 92 91 93 92 92 124 91 93 92 35 124 86 91 93 71 42 107 42 122 87 75 42 71 42 124 92 47 106 42 40 111 116 56 124 76 42 91 93 90 42 92 34 53 76 42 124 91 93 124 91 93 124 90 42 91 93 72 124 101 92 62 92 124 48 42 91 93 57 42 124 91 93 41 68 92 43 92 96 92 35 124 92 125 52 69 114 42 100 92 35 42 91 93 92 125 42 124 97 42 91 93 124 104 42 89 92 46 122 91 93 56 42 92 91 104 56 42 41 92 36 92 34 42 124 97 117 77 42 91 93 77 42 124 91 93 124 79 91 93 92 64 92 33 79 41 115 91 93 115 124 91 93 124 92 60 91 93 92 91 92 93 92 46 50 92 60 124 111 91 93 73 73 124 86 92 33 91 93 92 94 92 42 114 79 92 33 124 122 91 93 92 33 92 37 40 90 115 124 92 36 40 48 74 73 92 60 42 92 92 42 91 93 92 62 40 72 99 88 42 52 92 46 42 124 68 91 93 48 100 48 124 92 46 79 66 107 101 76 91 93 84 84 124 92 63 86 91 93 99 84 92 124 88 86 99 41 92 92 42 124 100 41 122 91 93 56 42 102 56 42 124 80 92 94 91 93 103 54 108 42 92 125 71 42 92 94 124 89 42 112 92 96 92 41 91 93 77 86 77 124 90 91 93 73 73 124 91 93 92 44 92 44 124 91 93 51 92 60 42 92 61 42 92 92 51 124 91 93 104 92 38 97 86 42 104 124 91 93 119 124 57 91 93 67 92 60 98 92 40 66 42 67 124 92 46 92 95 91 93 117 49 117 124 92 45 92 59 121 42 92 96 92 95 91 93 92 91 92 95 124 92 37 92 42 92 44 92 125 88 92 34 91 93 124 73 91 93 73 41 122 124 53 114 42 91 93 71 109 42 108 92 38 88 114 42 124 91 93 114 124 92 96 42 92 126 103 91 93 103 124 70 92 62 78 92 96 80 81 92 46 124 114 40 92 40 104 79 120 41 68 91 93 124 79 92 39 42 91 93 92 62 75 117 92 62 124 67 42 92 47 42 99 92 41 48 42 78 91 93 78 41 114 124 91 93 124 92 64 82 92 59 40 114 75 91 93 57 42 92 59 40 82 92 94 115 91 93 92 44 124 51 49 124 91 93 124 92 39 92 37 92 126 91 93 92 35 42 69 92 126 124 56 42 91 93 66 92 46 92 61 56 42 124 91 93 124 92 46 92 61 91 93 124 91 93 124 91 93 105 92 36 78 92 58 92 94 75 105 124 92 124 91 93 124 40 48 84 101 92 60 52 82 112 92 125 41 92 92 74 91 93 74 124 91 93 41 97 75 124 77 107 91 93 92 43 42 92 94 42 76 107 124 100 85 42 92 125 54 42 76 76 92 33 124 92 44 117 52 68 79 54 42 91 93 75 124 91 93 92 39 124 92 46 48 92 64 92 124 53 106 91 93 124 100 42 119 92 41 92 47 53 98 92 34 50 91 93 124 92 62 92 59 91 93 52 52 124 92 45 92 125 82 42 88 85 91 93 117 124 113 91 93 113 124 120 57 91 93 92 35 83 73 42 92 63 92 35 124 81 92 58 92 34 77 91 93 117 42 41 80 42 91 93 80 42 124 92 62 91 93 92 123 92 42 106 92 62 124 69 91 93 114 114 124 92 60 78 92 92 92 63 91 93 121 124 90 92 37 42 91 93 121 92 46 92 37 42 124 105 92 34 42 92 38 48 91 93 124 92 42 108 81 42 124 52 42 91 93 75 42 68 49 75 42 124 92 125 85 42 91 93 85 42 124 92 125 84 92 61 42 87 92 64 55 116 42 91 93 116 42 124 91 93 92 41 124 113 92 35 75 91 93 92 44 40 100 92 61 107 83 107 92 126 81 41 101 92 37 75 41 40 90 114 91 93 40 92 35 91 93 92 60 42 97 118 92 35 124 92 124 40 86 111 98 42 74 91 93 103 42 117 74 124 56 92 126 91 93 92 44 92 44 124 92 58 91 93 92 58 124 91 93 112 92 42 77 42 88 92 125 108 42 92 35 112 124 92 92 91 93 124 91 93 124 91 93 114 57 42 112 67 86 114 124 50 91 93 92 33 42 75 67 42 81 108 42 50 124 69 57 91 93 92 64 115 77 92 64 124 92 92 124 91 93 106 124 122 42 88 92 123 42 99 91 93 124 106 91 93 40 69 55 78 92 62 88 92 45 42 53 56 124 91 93 124 86 108 91 93 89 49 42 92 44 92 35 42 108 124 92 94 49 32 108 92 58 113 91 93 113 124 65 42 91 93 87 87 124 70 52 92 124 116 100 51 91 93 51 41 42 82 40 115 42 92 47 86 73 120 42 119 91 93 92 35 119 124 91 93 92 38 72 92 96 77 42 105 114 81 92 38 124 91 93 57 103 66 57 124 91 93 83 42 114 92 124 83 42 124 107 70 91 93 70 70 124 124 79 91 93 101 82 42 97 92 92 101 124 91 93 124 91 93 124 92 96 91 93 41 40 69 55 78 92 62 88 92 45 42 53 56 124 91 93 124 86 108 91 93 89 49 42 92 44 92 35 42 108 124 92 94 49 32 108 92 58 113 91 93 113 124 65 42 91 93 87 87 124 70 52 92 124 116 100 51 91 93 51 41 42 124 73 114 92 62 91 93 53 53 53 41 68 91 93 124 73 91 93 70 86 42 71 73 124 55 71 87 118 92 64 57 91 93 124 87 105 42 84 89 91 93 92 47 89 124 82 107 92 123 42 91 93 92 93 42 92 93 42 124 114 87 42 92 39 42 54 48 91 93 86 79 86 124 55 102 91 93 105 105 124 89 91 93 92 60 89 124 92 47 57 106 83 82 120 124 92 44 113 91 93 124 105 72 91 93 124 92 62 42 54 54 91 93 82 82 124 91 93 92 43 42 99 53 82 120 42 92 43 42 124 92 62 67 91 93 124 92 60 53 92 62 81 92 91 42 92 39 42 91 93 92 39 42 41 108 42 92 61 92 124 42 40 91 93 124 118 42 65 118 91 93 92 36 100 118 124 70 92 46 91 93 53 124 113 40 83 92 34 42 91 93 78 77 85 92 34 42 124 68 42 50 92 47 92 59 42 87 91 93 124 55 42 92 61 92 62 88 124 92 123 42 91 93 114 42 92 46 42 92 44 115 40 91 93 111 74 111 124 54 107 75 92 33 42 92 64 91 93 104 124 92 62 92 91 92 59 91 93 117 52 117 124 40 92 126 84 92 96 66 92 58 42 124 91 93 85 42 124 50 92 94 42 56 92 42 67 91 93 92 36 92 36 124 76 83 105 55 42 92 126 57 42 99 91 93 115 124 103 92 95 115 42 101 42 92 126 91 93 72 72 124 91 93 124 91 93 124 91 93 90 90 124 69 42 91 93 84 40 71 91 93 87 71 124 91 93 51 124 91 93 40 56 42 92 60 91 93 124 55 107 92 44 72 91 93 124 92 125 91 93 52 42 52 42 124 91 93 92 95 97 92 95 124 91 93 70 124 81 42 103 92 92 114 91 93 118 67 76 114 124 100 91 93 76 42 104 69 102 100 124 103 105 89 92 38 91 93 107 92 38 124 70 57 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 91 93 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 124 87 91 93 83 116 42 72 92 33 92 93 53 87 124 92 60 106 124 92 95 92 62 91 93 56 70 92 62 124 91 93 124 91 93 72 42 41 40 56 42 92 60 91 93 124 55 107 92 44 72 91 93 124 92 125 91 93 52 42 52 42 124 91 93 92 95 97 92 95 124 91 93 70 124 81 42 103 92 92 114 91 93 118 67 76 114 124 100 91 93 76 42 104 69 102 100 124 103 105 89 92 38 91 93 107 92 38 124 70 57 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 91 93 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 124 87 91 93 83 116 42 72 92 33 92 93 53 87 124 92 60 106 124 92 95 92 62 91 93 56 70 92 62 124 91 93 124 91 93 72 42 41 124 109 92 124 91 93 49 48 49 124 79 91 93 79 124 92 62 92 94 104 32 92 126 42 109 92 123 91 93 124 51 42 91 93 79 92 91 79 124 91 93 124 92 60 42 81 42 54 92 124 92 38 91 93 106 42 92 64 106 42 124 57 48 92 58 86 91 93 92 63 92 45 92 125 92 63 124 92 64 68 122 52 92 44 42 55 42 100 92 93 91 93 124 91 93 114 84 42 92 92 54 114 124 109 91 93 92 36 83 92 46 121 109 124 120 57 42 111 92 43 92 93 92 62 124 92 42 91 93 124 67 42 91 93 41 69 42 124 40 81 106 116 124 103 76 101 66 90 91 93 108 108 124 91 93 99 124 115 72 42 54 91 93 111 42 41 91 93 107 92 60 92 40 42 107 107 124 108 42 91 93 108 42 41 98 42 119 91 93 92 44 92 43 92 92 92 44 124 92 58 66 91 93 81 42 57 81 42 124 92 42 105 42 109 107 91 93 124 53 91 93 112 92 35 92 58 71 112 124 92 36 91 93 57 118 84 40 55 42 90 121 92 94 67 99 92 95 42 91 93 124 92 45 108 91 93 92 44 124 48 92 61 92 38 91 93 92 38 124 55 42 40 40 92 43 56 42 104 92 93 71 42 92 93 42 53 42 88 124 109 92 125 42 84 42 86 42 91 93 81 84 42 86 42 41 119 73 92 123 91 93 82 67 92 96 42 92 123 124 91 93 79 92 37 81 52 92 47 79 124 74 42 40 91 93 124 71 42 120 92 123 103 41 91 93 114 124 79 69 42 92 33 69 42 41 91 93 67 92 41 67 124 92 58 91 93 120 120 124 91 93 124 114 105 92 91 77 92 124 92 95 91 93 92 35 92 35 124 91 93 86 124 91 93 92 59 124 92 63 104 91 93 124 97 92 93 110 42 89 42 40 91 93 124 124 115 42 87 108 54 42 55 91 93 124 111 42 92 42 42 92 63 91 93 92 46 92 60 69 42 67 92 46 124 56 91 93 92 64 92 61 56 41 92 58 91 93 65 124 103 92 44 52 92 59 73 117 42 49 124 112 91 93 85 66 92 60 42 92 91 85 41 42 121 57 124 83 42 122 92 42 91 93 107 124 118 40 32 92 37 42 117 104 92 126 109 42 92 96 91 93 111 124 92 62 79 92 47 42 92 124 103 42 41 42 92 38 51 41 114 42 124 91 93 92 46 124 92 39 87 92 34 42 91 93 92 36 40 92 92 105 103 49 91 93 122 49 124 91 93 105 42 105 42 124 91 93 92 47 92 47 124 92 91 54 42 91 93 118 119 50 104 42 54 42 124 113 42 110 92 92 91 93 92 92 124 91 93 92 35 124 86 91 93 71 42 107 42 122 87 75 42 71 42 124 92 47 106 42 40 111 116 56 124 76 42 91 93 90 42 92 34 53 76 42 124 91 93 124 91 93 124 90 42 91 93 72 124 101 92 62 92 124 48 42 91 93 57 42 124 91 93 41 68 92 43 92 96 92 35 124 92 125 52 69 114 42 100 92 35 42 91 93 92 125 42 124 97 42 91 93 124 104 42 89 92 46 122 91 93 56 42 92 91 104 56 42 41 92 36 92 34 42 124 97 117 77 42 91 93 77 42 124 91 93 124 79 91 93 92 64 92 33 79 41 115 91 93 115 124 91 93 124 92 60 91 93 92 91 92 93 92 46 50 92 60 124 111 91 93 73 73 124 86 92 33 91 93 92 94 92 42 114 79 92 33 124 122 91 93 92 33 92 37 40 90 115 124 92 36 40 48 74 73 92 60 42 92 92 42 91 93 92 62 40 72 99 88 42 52 92 46 42 124 68 91 93 48 100 48 124 92 46 79 66 107 101 76 91 93 84 84 124 92 63 86 91 93 99 84 92 124 88 86 99 41 92 92 42 124 100 41 122 91 93 56 42 102 56 42 124 80 92 94 91 93 103 54 108 42 92 125 71 42 92 94 124 89 42 112 92 96 92 41 91 93 77 86 77 124 90 91 93 73 73 124 91 93 92 44 92 44 124 91 93 51 92 60 42 92 61 42 92 92 51 124 91 93 104 92 38 97 86 42 104 124 91 93 119 124 57 91 93 67 92 60 98 92 40 66 42 67 124 92 46 92 95 91 93 117 49 117 124 92 45 92 59 121 42 92 96 92 95 91 93 92 91 92 95 124 92 37 92 42 92 44 92 125 88 92 34 91 93 124 73 91 93 73 41 122 124 53 114 42 91 93 71 109 42 108 92 38 88 114 42 124 91 93 114 124 92 96 42 92 126 103 91 93 103 124 70 92 62 78 92 96 80 81 92 46 124 114 40 92 40 104 79 120 41 68 91 93 124 79 92 39 42 91 93 92 62 75 117 92 62 124 67 42 92 47 42 99 92 41 48 42 78 91 93 78 41 114 124 91 93 124 92 64 82 92 59 40 114 75 91 93 57 42 92 59 40 82 92 94 115 91 93 92 44 124 51 49 124 91 93 124 92 39 92 37 92 126 91 93 92 35 42 69 92 126 124 56 42 91 93 66 92 46 92 61 56 42 124 91 93 124 92 46 92 61 91 93 124 91 93 124 91 93 105 92 36 78 92 58 92 94 75 105 124 92 124 91 93 124 40 48 84 101 92 60 52 82 112 92 125 41 92 92 74 91 93 74 124 91 93 41 97 75 124 77 107 91 93 92 43 42 92 94 42 76 107 124 100 85 42 92 125 54 42 76 76 92 33 124 92 44 117 52 68 79 54 42 91 93 75 124 91 93 92 39 124 92 46 48 92 64 92 124 53 106 91 93 124 100 42 119 92 41 92 47 53 98 92 34 50 91 93 124 92 62 92 59 91 93 52 52 124 92 45 92 125 82 42 88 85 91 93 117 124 113 91 93 113 124 120 57 91 93 92 35 83 73 42 92 63 92 35 124 81 92 58 92 34 77 91 93 117 42 41 80 42 91 93 80 42 124 92 62 91 93 92 123 92 42 106 92 62 124 69 91 93 114 114 124 92 60 78 92 92 92 63 91 93 121 124 90 92 37 42 91 93 121 92 46 92 37 42 124 105 92 34 42 92 38 48 91 93 124 92 42 108 81 42 124 52 42 91 93 75 42 68 49 75 42 124 92 125 85 42 91 93 85 42 124 92 125 84 92 61 42 87 92 64 55 116 42 91 93 116 42 124 91 93 92 41 124 113 92 35 75 91 93 92 44 40 100 92 61 107 83 107 92 126 81 41 101 92 37 75 41 41 92 63 116 42 92 35 91 93 77 124 91 93 124 91 93 124 48 92 45 91 93 41 42 91 93 40 86 88 90 42 92 126 91 93 92 58 42 83 92 58 42 124 91 93 124 92 93 92 33 69 92 96 124 40 55 91 93 65 89 42 92 43 98 42 92 62 42 92 124 65 124 104 91 93 124 108 89 42 73 92 38 92 94 124 91 93 66 124 92 44 91 93 106 92 44 124 115 104 32 42 81 91 93 110 124 92 34 70 91 93 124 92 125 42 91 93 109 92 45 92 91 92 35 118 109 124 92 36 83 92 64 73 49 42 91 93 56 42 49 42 41 91 93 40 55 91 93 65 89 42 92 43 98 42 92 62 42 92 124 65 124 104 91 93 124 108 89 42 73 92 38 92 94 124 91 93 66 124 92 44 91 93 106 92 44 124 115 104 32 42 81 91 93 110 124 92 34 70 91 93 124 92 125 42 91 93 109 92 45 92 91 92 35 118 109 124 92 36 83 92 64 73 49 42 91 93 56 42 49 42 41 124 97 122 91 93 97 122 124 114 91 93 50 67 114 124 70 85 91 93 108 42 82 104 42 108 42 124 91 93 103 48 92 123 88 113 42 103 124 91 93 76 80 92 42 50 71 42 76 124 55 92 91 54 91 93 120 92 91 54 124 92 61 92 63 92 64 91 93 92 40 92 33 92 62 42 92 40 124 85 92 93 42 91 93 92 93 42 124 88 91 93 124 89 42 79 92 42 42 78 91 93 124 76 92 44 50 42 118 109 91 93 71 90 109 124 78 92 38 92 59 92 47 42 119 91 93 92 59 92 59 41 40 100 82 89 92 91 119 72 42 91 93 40 92 58 42 77 40 99 99 87 41 92 41 42 91 93 122 88 122 124 91 93 124 91 93 124 77 91 93 92 35 116 50 92 61 69 101 77 124 92 39 52 88 92 59 42 88 91 93 88 124 92 42 76 41 124 82 42 124 40 91 93 124 69 91 93 92 47 42 109 69 124 84 42 92 64 91 93 92 64 124 92 34 124 92 41 92 125 91 93 92 125 124 105 40 92 35 92 34 42 48 91 93 119 80 42 110 119 124 101 89 57 48 42 108 42 81 42 91 93 92 36 42 124 91 93 124 73 42 76 42 108 124 109 40 91 93 68 124 112 66 92 61 69 91 93 78 42 124 113 92 46 98 42 114 92 47 91 93 116 40 91 93 89 42 110 55 111 81 89 42 124 118 111 40 92 47 92 95 42 92 95 77 92 64 42 124 112 50 42 74 112 91 93 112 124 92 46 42 74 121 42 91 93 71 92 64 71 124 92 63 32 71 42 91 93 65 92 35 71 42 124 116 91 93 92 92 77 116 41 49 42 91 93 92 40 92 58 108 42 92 40 124 105 42 92 33 41 92 47 124 91 93 124 92 44 42 122 42 92 125 91 93 124 79 92 94 42 92 40 92 58 124 91 93 82 82 124 52 42 91 93 78 42 121 42 78 42 124 82 42 104 91 93 98 42 92 124 79 50 88 104 124 49 91 93 124 71 112 81 91 93 98 73 76 98 41 42 91 93 40 91 93 68 124 112 66 92 61 69 91 93 78 42 124 113 92 46 98 42 114 92 47 91 93 116 40 91 93 89 42 110 55 111 81 89 42 124 118 111 40 92 47 92 95 42 92 95 77 92 64 42 124 112 50 42 74 112 91 93 112 124 92 46 42 74 121 42 91 93 71 92 64 71 124 92 63 32 71 42 91 93 65 92 35 71 42 124 116 91 93 92 92 77 116 41 49 42 91 93 92 40 92 58 108 42 92 40 124 105 42 92 33 41 92 47 124 91 93 124 92 44 42 122 42 92 125 91 93 124 79 92 94 42 92 40 92 58 124 91 93 82 82 124 52 42 91 93 78 42 121 42 78 42 124 82 42 104 91 93 98 42 92 124 79 50 88 104 124 49 91 93 124 71 112 81 91 93 98 73 76 98 41 42 124 91 93 92 62 42 108 83 42 54 92 94 42 74 92 62 42 124 91 93 54 124 92 124 92 125 111 92 45 101 115 42 91 93 112 112 124 92 37 91 93 56 101 92 40 100 92 63 92 37 124 72 42 55 92 40 42 113 117 42 91 93 117 42 124 77 42 92 125 91 93 41 89 42 75 42 91 93 40 90 114 91 93 40 92 35 91 93 92 60 42 97 118 92 35 124 92 124 40 86 111 98 42 74 91 93 103 42 117 74 124 56 92 126 91 93 92 44 92 44 124 92 58 91 93 92 58 124 91 93 112 92 42 77 42 88 92 125 108 42 92 35 112 124 92 92 91 93 124 91 93 124 91 93 114 57 42 112 67 86 114 124 50 91 93 92 33 42 75 67 42 81 108 42 50 124 69 57 91 93 92 64 115 77 92 64 124 92 92 124 91 93 106 124 122 42 88 92 123 42 99 91 93 124 106 91 93 40 69 55 78 92 62 88 92 45 42 53 56 124 91 93 124 86 108 91 93 89 49 42 92 44 92 35 42 108 124 92 94 49 32 108 92 58 113 91 93 113 124 65 42 91 93 87 87 124 70 52 92 124 116 100 51 91 93 51 41 42 82 40 115 42 92 47 86 73 120 42 119 91 93 92 35 119 124 91 93 92 38 72 92 96 77 42 105 114 81 92 38 124 91 93 57 103 66 57 124 91 93 83 42 114 92 124 83 42 124 107 70 91 93 70 70 124 124 79 91 93 101 82 42 97 92 92 101 124 91 93 124 91 93 124 92 96 91 93 41 40 69 55 78 92 62 88 92 45 42 53 56 124 91 93 124 86 108 91 93 89 49 42 92 44 92 35 42 108 124 92 94 49 32 108 92 58 113 91 93 113 124 65 42 91 93 87 87 124 70 52 92 124 116 100 51 91 93 51 41 42 124 73 114 92 62 91 93 53 53 53 41 68 91 93 124 73 91 93 70 86 42 71 73 124 55 71 87 118 92 64 57 91 93 124 87 105 42 84 89 91 93 92 47 89 124 82 107 92 123 42 91 93 92 93 42 92 93 42 124 114 87 42 92 39 42 54 48 91 93 86 79 86 124 55 102 91 93 105 105 124 89 91 93 92 60 89 124 92 47 57 106 83 82 120 124 92 44 113 91 93 124 105 72 91 93 124 92 62 42 54 54 91 93 82 82 124 91 93 92 43 42 99 53 82 120 42 92 43 42 124 92 62 67 91 93 124 92 60 53 92 62 81 92 91 42 92 39 42 91 93 92 39 42 41 108 42 92 61 92 124 42 40 91 93 124 118 42 65 118 91 93 92 36 100 118 124 70 92 46 91 93 53 124 113 40 83 92 34 42 91 93 78 77 85 92 34 42 124 68 42 50 92 47 92 59 42 87 91 93 124 55 42 92 61 92 62 88 124 92 123 42 91 93 114 42 92 46 42 92 44 115 40 91 93 111 74 111 124 54 107 75 92 33 42 92 64 91 93 104 124 92 62 92 91 92 59 91 93 117 52 117 124 40 92 126 84 92 96 66 92 58 42 124 91 93 85 42 124 50 92 94 42 56 92 42 67 91 93 92 36 92 36 124 76 83 105 55 42 92 126 57 42 99 91 93 115 124 103 92 95 115 42 101 42 92 126 91 93 72 72 124 91 93 124 91 93 124 91 93 90 90 124 69 42 91 93 84 40 71 91 93 87 71 124 91 93 51 124 91 93 40 56 42 92 60 91 93 124 55 107 92 44 72 91 93 124 92 125 91 93 52 42 52 42 124 91 93 92 95 97 92 95 124 91 93 70 124 81 42 103 92 92 114 91 93 118 67 76 114 124 100 91 93 76 42 104 69 102 100 124 103 105 89 92 38 91 93 107 92 38 124 70 57 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 91 93 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 124 87 91 93 83 116 42 72 92 33 92 93 53 87 124 92 60 106 124 92 95 92 62 91 93 56 70 92 62 124 91 93 124 91 93 72 42 41 40 56 42 92 60 91 93 124 55 107 92 44 72 91 93 124 92 125 91 93 52 42 52 42 124 91 93 92 95 97 92 95 124 91 93 70 124 81 42 103 92 92 114 91 93 118 67 76 114 124 100 91 93 76 42 104 69 102 100 124 103 105 89 92 38 91 93 107 92 38 124 70 57 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 91 93 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 124 87 91 93 83 116 42 72 92 33 92 93 53 87 124 92 60 106 124 92 95 92 62 91 93 56 70 92 62 124 91 93 124 91 93 72 42 41 124 109 92 124 91 93 49 48 49 124 79 91 93 79 124 92 62 92 94 104 32 92 126 42 109 92 123 91 93 124 51 42 91 93 79 92 91 79 124 91 93 124 92 60 42 81 42 54 92 124 92 38 91 93 106 42 92 64 106 42 124 57 48 92 58 86 91 93 92 63 92 45 92 125 92 63 124 92 64 68 122 52 92 44 42 55 42 100 92 93 91 93 124 91 93 114 84 42 92 92 54 114 124 109 91 93 92 36 83 92 46 121 109 124 120 57 42 111 92 43 92 93 92 62 124 92 42 91 93 124 67 42 91 93 41 69 42 124 40 81 106 116 124 103 76 101 66 90 91 93 108 108 124 91 93 99 124 115 72 42 54 91 93 111 42 41 91 93 107 92 60 92 40 42 107 107 124 108 42 91 93 108 42 41 98 42 119 91 93 92 44 92 43 92 92 92 44 124 92 58 66 91 93 81 42 57 81 42 124 92 42 105 42 109 107 91 93 124 53 91 93 112 92 35 92 58 71 112 124 92 36 91 93 57 118 84 40 55 42 90 121 92 94 67 99 92 95 42 91 93 124 92 45 108 91 93 92 44 124 48 92 61 92 38 91 93 92 38 124 55 42 40 40 92 43 56 42 104 92 93 71 42 92 93 42 53 42 88 124 109 92 125 42 84 42 86 42 91 93 81 84 42 86 42 41 119 73 92 123 91 93 82 67 92 96 42 92 123 124 91 93 79 92 37 81 52 92 47 79 124 74 42 40 91 93 124 71 42 120 92 123 103 41 91 93 114 124 79 69 42 92 33 69 42 41 91 93 67 92 41 67 124 92 58 91 93 120 120 124 91 93 124 114 105 92 91 77 92 124 92 95 91 93 92 35 92 35 124 91 93 86 124 91 93 92 59 124 92 63 104 91 93 124 97 92 93 110 42 89 42 40 91 93 124 124 115 42 87 108 54 42 55 91 93 124 111 42 92 42 42 92 63 91 93 92 46 92 60 69 42 67 92 46 124 56 91 93 92 64 92 61 56 41 92 58 91 93 65 124 103 92 44 52 92 59 73 117 42 49 124 112 91 93 85 66 92 60 42 92 91 85 41 42 121 57 124 83 42 122 92 42 91 93 107 124 118 40 32 92 37 42 117 104 92 126 109 42 92 96 91 93 111 124 92 62 79 92 47 42 92 124 103 42 41 42 92 38 51 41 114 42 124 91 93 92 46 124 92 39 87 92 34 42 91 93 92 36 40 92 92 105 103 49 91 93 122 49 124 91 93 105 42 105 42 124 91 93 92 47 92 47 124 92 91 54 42 91 93 118 119 50 104 42 54 42 124 113 42 110 92 92 91 93 92 92 124 91 93 92 35 124 86 91 93 71 42 107 42 122 87 75 42 71 42 124 92 47 106 42 40 111 116 56 124 76 42 91 93 90 42 92 34 53 76 42 124 91 93 124 91 93 124 90 42 91 93 72 124 101 92 62 92 124 48 42 91 93 57 42 124 91 93 41 68 92 43 92 96 92 35 124 92 125 52 69 114 42 100 92 35 42 91 93 92 125 42 124 97 42 91 93 124 104 42 89 92 46 122 91 93 56 42 92 91 104 56 42 41 92 36 92 34 42 124 97 117 77 42 91 93 77 42 124 91 93 124 79 91 93 92 64 92 33 79 41 115 91 93 115 124 91 93 124 92 60 91 93 92 91 92 93 92 46 50 92 60 124 111 91 93 73 73 124 86 92 33 91 93 92 94 92 42 114 79 92 33 124 122 91 93 92 33 92 37 40 90 115 124 92 36 40 48 74 73 92 60 42 92 92 42 91 93 92 62 40 72 99 88 42 52 92 46 42 124 68 91 93 48 100 48 124 92 46 79 66 107 101 76 91 93 84 84 124 92 63 86 91 93 99 84 92 124 88 86 99 41 92 92 42 124 100 41 122 91 93 56 42 102 56 42 124 80 92 94 91 93 103 54 108 42 92 125 71 42 92 94 124 89 42 112 92 96 92 41 91 93 77 86 77 124 90 91 93 73 73 124 91 93 92 44 92 44 124 91 93 51 92 60 42 92 61 42 92 92 51 124 91 93 104 92 38 97 86 42 104 124 91 93 119 124 57 91 93 67 92 60 98 92 40 66 42 67 124 92 46 92 95 91 93 117 49 117 124 92 45 92 59 121 42 92 96 92 95 91 93 92 91 92 95 124 92 37 92 42 92 44 92 125 88 92 34 91 93 124 73 91 93 73 41 122 124 53 114 42 91 93 71 109 42 108 92 38 88 114 42 124 91 93 114 124 92 96 42 92 126 103 91 93 103 124 70 92 62 78 92 96 80 81 92 46 124 114 40 92 40 104 79 120 41 68 91 93 124 79 92 39 42 91 93 92 62 75 117 92 62 124 67 42 92 47 42 99 92 41 48 42 78 91 93 78 41 114 124 91 93 124 92 64 82 92 59 40 114 75 91 93 57 42 92 59 40 82 92 94 115 91 93 92 44 124 51 49 124 91 93 124 92 39 92 37 92 126 91 93 92 35 42 69 92 126 124 56 42 91 93 66 92 46 92 61 56 42 124 91 93 124 92 46 92 61 91 93 124 91 93 124 91 93 105 92 36 78 92 58 92 94 75 105 124 92 124 91 93 124 40 48 84 101 92 60 52 82 112 92 125 41 92 92 74 91 93 74 124 91 93 41 97 75 124 77 107 91 93 92 43 42 92 94 42 76 107 124 100 85 42 92 125 54 42 76 76 92 33 124 92 44 117 52 68 79 54 42 91 93 75 124 91 93 92 39 124 92 46 48 92 64 92 124 53 106 91 93 124 100 42 119 92 41 92 47 53 98 92 34 50 91 93 124 92 62 92 59 91 93 52 52 124 92 45 92 125 82 42 88 85 91 93 117 124 113 91 93 113 124 120 57 91 93 92 35 83 73 42 92 63 92 35 124 81 92 58 92 34 77 91 93 117 42 41 80 42 91 93 80 42 124 92 62 91 93 92 123 92 42 106 92 62 124 69 91 93 114 114 124 92 60 78 92 92 92 63 91 93 121 124 90 92 37 42 91 93 121 92 46 92 37 42 124 105 92 34 42 92 38 48 91 93 124 92 42 108 81 42 124 52 42 91 93 75 42 68 49 75 42 124 92 125 85 42 91 93 85 42 124 92 125 84 92 61 42 87 92 64 55 116 42 91 93 116 42 124 91 93 92 41 124 113 92 35 75 91 93 92 44 40 100 92 61 107 83 107 92 126 81 41 101 92 37 75 41 40 90 114 91 93 40 92 35 91 93 92 60 42 97 118 92 35 124 92 124 40 86 111 98 42 74 91 93 103 42 117 74 124 56 92 126 91 93 92 44 92 44 124 92 58 91 93 92 58 124 91 93 112 92 42 77 42 88 92 125 108 42 92 35 112 124 92 92 91 93 124 91 93 124 91 93 114 57 42 112 67 86 114 124 50 91 93 92 33 42 75 67 42 81 108 42 50 124 69 57 91 93 92 64 115 77 92 64 124 92 92 124 91 93 106 124 122 42 88 92 123 42 99 91 93 124 106 91 93 40 69 55 78 92 62 88 92 45 42 53 56 124 91 93 124 86 108 91 93 89 49 42 92 44 92 35 42 108 124 92 94 49 32 108 92 58 113 91 93 113 124 65 42 91 93 87 87 124 70 52 92 124 116 100 51 91 93 51 41 42 82 40 115 42 92 47 86 73 120 42 119 91 93 92 35 119 124 91 93 92 38 72 92 96 77 42 105 114 81 92 38 124 91 93 57 103 66 57 124 91 93 83 42 114 92 124 83 42 124 107 70 91 93 70 70 124 124 79 91 93 101 82 42 97 92 92 101 124 91 93 124 91 93 124 92 96 91 93 41 40 69 55 78 92 62 88 92 45 42 53 56 124 91 93 124 86 108 91 93 89 49 42 92 44 92 35 42 108 124 92 94 49 32 108 92 58 113 91 93 113 124 65 42 91 93 87 87 124 70 52 92 124 116 100 51 91 93 51 41 42 124 73 114 92 62 91 93 53 53 53 41 68 91 93 124 73 91 93 70 86 42 71 73 124 55 71 87 118 92 64 57 91 93 124 87 105 42 84 89 91 93 92 47 89 124 82 107 92 123 42 91 93 92 93 42 92 93 42 124 114 87 42 92 39 42 54 48 91 93 86 79 86 124 55 102 91 93 105 105 124 89 91 93 92 60 89 124 92 47 57 106 83 82 120 124 92 44 113 91 93 124 105 72 91 93 124 92 62 42 54 54 91 93 82 82 124 91 93 92 43 42 99 53 82 120 42 92 43 42 124 92 62 67 91 93 124 92 60 53 92 62 81 92 91 42 92 39 42 91 93 92 39 42 41 108 42 92 61 92 124 42 40 91 93 124 118 42 65 118 91 93 92 36 100 118 124 70 92 46 91 93 53 124 113 40 83 92 34 42 91 93 78 77 85 92 34 42 124 68 42 50 92 47 92 59 42 87 91 93 124 55 42 92 61 92 62 88 124 92 123 42 91 93 114 42 92 46 42 92 44 115 40 91 93 111 74 111 124 54 107 75 92 33 42 92 64 91 93 104 124 92 62 92 91 92 59 91 93 117 52 117 124 40 92 126 84 92 96 66 92 58 42 124 91 93 85 42 124 50 92 94 42 56 92 42 67 91 93 92 36 92 36 124 76 83 105 55 42 92 126 57 42 99 91 93 115 124 103 92 95 115 42 101 42 92 126 91 93 72 72 124 91 93 124 91 93 124 91 93 90 90 124 69 42 91 93 84 40 71 91 93 87 71 124 91 93 51 124 91 93 40 56 42 92 60 91 93 124 55 107 92 44 72 91 93 124 92 125 91 93 52 42 52 42 124 91 93 92 95 97 92 95 124 91 93 70 124 81 42 103 92 92 114 91 93 118 67 76 114 124 100 91 93 76 42 104 69 102 100 124 103 105 89 92 38 91 93 107 92 38 124 70 57 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 91 93 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 124 87 91 93 83 116 42 72 92 33 92 93 53 87 124 92 60 106 124 92 95 92 62 91 93 56 70 92 62 124 91 93 124 91 93 72 42 41 40 56 42 92 60 91 93 124 55 107 92 44 72 91 93 124 92 125 91 93 52 42 52 42 124 91 93 92 95 97 92 95 124 91 93 70 124 81 42 103 92 92 114 91 93 118 67 76 114 124 100 91 93 76 42 104 69 102 100 124 103 105 89 92 38 91 93 107 92 38 124 70 57 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 91 93 40 99 112 42 91 93 57 112 42 124 91 93 124 97 42 91 93 100 92 58 42 92 47 97 42 124 92 34 42 91 93 81 42 32 92 34 42 124 112 92 124 32 124 91 93 124 121 92 95 91 93 92 94 100 88 51 111 92 95 124 91 93 41 124 87 91 93 83 116 42 72 92 33 92 93 53 87 124 92 60 106 124 92 95 92 62 91 93 56 70 92 62 124 91 93 124 91 93 72 42 41 124 109 92 124 91 93 49 48 49 124 79 91 93 79 124 92 62 92 94 104 32 92 126 42 109 92 123 91 93 124 51 42 91 93 79 92 91 79 124 91 93 124 92 60 42 81 42 54 92 124 92 38 91 93 106 42 92 64 106 42 124 57 48 92 58 86 91 93 92 63 92 45 92 125 92 63 124 92 64 68 122 52 92 44 42 55 42 100 92 93 91 93 124 91 93 114 84 42 92 92 54 114 124 109 91 93 92 36 83 92 46 121 109 124 120 57 42 111 92 43 92 93 92 62 124 92 42 91 93 124 67 42 91 93 41 69 42 124 40 81 106 116 124 103 76 101 66 90 91 93 108 108 124 91 93 99 124 115 72 42 54 91 93 111 42 41 91 93 107 92 60 92 40 42 107 107 124 108 42 91 93 108 42 41 98 42 119 91 93 92 44 92 43 92 92 92 44 124 92 58 66 91 93 81 42 57 81 42 124 92 42 105 42 109 107 91 93 124 53 91 93 112 92 35 92 58 71 112 124 92 36 91 93 57 118 84 40 55 42 90 121 92 94 67 99 92 95 42 91 93 124 92 45 108 91 93 92 44 124 48 92 61 92 38 91 93 92 38 124 55 42 40 40 92 43 56 42 104 92 93 71 42 92 93 42 53 42 88 124 109 92 125 42 84 42 86 42 91 93 81 84 42 86 42 41 119 73 92 123 91 93 82 67 92 96 42 92 123 124 91 93 79 92 37 81 52 92 47 79 124 74 42 40 91 93 124 71 42 120 92 123 103 41 91 93 114 124 79 69 42 92 33 69 42 41 91 93 67 92 41 67 124 92 58 91 93 120 120 124 91 93 124 114 105 92 91 77 92 124 92 95 91 93 92 35 92 35 124 91 93 86 124 91 93 92 59 124 92 63 104 91 93 124 97 92 93 110 42 89 42 40 91 93 124 124 115 42 87 108 54 42 55 91 93 124 111 42 92 42 42 92 63 91 93 92 46 92 60 69 42 67 92 46 124 56 91 93 92 64 92 61 56 41 92 58 91 93 65 124 103 92 44 52 92 59 73 117 42 49 124 112 91 93 85 66 92 60 42 92 91 85 41 42 121 57 124 83 42 122 92 42 91 93 107 124 118 40 32 92 37 42 117 104 92 126 109 42 92 96 91 93 111 124 92 62 79 92 47 42 92 124 103 42 41 42 92 38 51 41 114 42 124 91 93 92 46 124 92 39 87 92 34 42 91 93 92 36 40 92 92 105 103 49 91 93 122 49 124 91 93 105 42 105 42 124 91 93 92 47 92 47 124 92 91 54 42 91 93 118 119 50 104 42 54 42 124 113 42 110 92 92 91 93 92 92 124 91 93 92 35 124 86 91 93 71 42 107 42 122 87 75 42 71 42 124 92 47 106 42 40 111 116 56 124 76 42 91 93 90 42 92 34 53 76 42 124 91 93 124 91 93 124 90 42 91 93 72 124 101 92 62 92 124 48 42 91 93 57 42 124 91 93 41 68 92 43 92 96 92 35 124 92 125 52 69 114 42 100 92 35 42 91 93 92 125 42 124 97 42 91 93 124 104 42 89 92 46 122 91 93 56 42 92 91 104 56 42 41 92 36 92 34 42 124 97 117 77 42 91 93 77 42 124 91 93 124 79 91 93 92 64 92 33 79 41 115 91 93 115 124 91 93 124 92 60 91 93 92 91 92 93 92 46 50 92 60 124 111 91 93 73 73 124 86 92 33 91 93 92 94 92 42 114 79 92 33 124 122 91 93 92 33 92 37 40 90 115 124 92 36 40 48 74 73 92 60 42 92 92 42 91 93 92 62 40 72 99 88 42 52 92 46 42 124 68 91 93 48 100 48 124 92 46 79 66 107 101 76 91 93 84 84 124 92 63 86 91 93 99 84 92 124 88 86 99 41 92 92 42 124 100 41 122 91 93 56 42 102 56 42 124 80 92 94 91 93 103 54 108 42 92 125 71 42 92 94 124 89 42 112 92 96 92 41 91 93 77 86 77 124 90 91 93 73 73 124 91 93 92 44 92 44 124 91 93 51 92 60 42 92 61 42 92 92 51 124 91 93 104 92 38 97 86 42 104 124 91 93 119 124 57 91 93 67 92 60 98 92 40 66 42 67 124 92 46 92 95 91 93 117 49 117 124 92 45 92 59 121 42 92 96 92 95 91 93 92 91 92 95 124 92 37 92 42 92 44 92 125 88 92 34 91 93 124 73 91 93 73 41 122 124 53 114 42 91 93 71 109 42 108 92 38 88 114 42 124 91 93 114 124 92 96 42 92 126 103 91 93 103 124 70 92 62 78 92 96 80 81 92 46 124 114 40 92 40 104 79 120 41 68 91 93 124 79 92 39 42 91 93 92 62 75 117 92 62 124 67 42 92 47 42 99 92 41 48 42 78 91 93 78 41 114 124 91 93 124 92 64 82 92 59 40 114 75 91 93 57 42 92 59 40 82 92 94 115 91 93 92 44 124 51 49 124 91 93 124 92 39 92 37 92 126 91 93 92 35 42 69 92 126 124 56 42 91 93 66 92 46 92 61 56 42 124 91 93 124 92 46 92 61 91 93 124 91 93 124 91 93 105 92 36 78 92 58 92 94 75 105 124 92 124 91 93 124 40 48 84 101 92 60 52 82 112 92 125 41 92 92 74 91 93 74 124 91 93 41 97 75 124 77 107 91 93 92 43 42 92 94 42 76 107 124 100 85 42 92 125 54 42 76 76 92 33 124 92 44 117 52 68 79 54 42 91 93 75 124 91 93 92 39 124 92 46 48 92 64 92 124 53 106 91 93 124 100 42 119 92 41 92 47 53 98 92 34 50 91 93 124 92 62 92 59 91 93 52 52 124 92 45 92 125 82 42 88 85 91 93 117 124 113 91 93 113 124 120 57 91 93 92 35 83 73 42 92 63 92 35 124 81 92 58 92 34 77 91 93 117 42 41 80 42 91 93 80 42 124 92 62 91 93 92 123 92 42 106 92 62 124 69 91 93 114 114 124 92 60 78 92 92 92 63 91 93 121 124 90 92 37 42 91 93 121 92 46 92 37 42 124 105 92 34 42 92 38 48 91 93 124 92 42 108 81 42 124 52 42 91 93 75 42 68 49 75 42 124 92 125 85 42 91 93 85 42 124 92 125 84 92 61 42 87 92 64 55 116 42 91 93 116 42 124 91 93 92 41 124 113 92 35 75 91 93 92 44 40 100 92 61 107 83 107 92 126 81 41 101 92 37 75 41 41 92 63 116 42 92 35 91 93 77 124 91 93 124 91 93 124 48 92 45 91 93 41 42 124 114 119 42 48 115 57 42 92 124 91 93 52 52 124 48 91 93 72 55 70 72 124 68 106 32 75 102 91 93 108 124 92 38 92 62 91 93 50 80 92 62 124 70 42 51 91 93 51
14295 dup 0 ! dup >aux [ 1 | aux@ ! aux> -- >aux ] aux> drop
: _input


input
0 >aux 0 0 1
0 @ [ 0 @ ++ over - | parse-char ]
drop 0 ! drop aux> drop

entry #13

written by moshikoi
submitted at
1 like

guesses
comments 0

post a comment


rejects.c ASCII text
  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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static bool entry_impl(const char **const ptr, char **const out) {
  char *const savepoint = out ? *out : nullptr;
  bool success = true;
  while (**ptr && **ptr != ')') {
    switch (**ptr) {
    case '\\': (*ptr)++;
    default:
      const char c = **ptr;
      if (*++*ptr == '*')
        (*ptr)++;
      else if (out)
        *(*out)++ = c;
      break;
    case '[':
      (*ptr) += 2;
      if (**ptr == '*')
        (*ptr)++;
      else
        success = false;
      break;
    case '(': {
      (*ptr)++;
      char *const savepoint = out ? *out : nullptr;
      bool inner_success = entry_impl(ptr, out);
      (*ptr)++;
      if (!inner_success) {
        if (**ptr == '*') {
          (*ptr)++;
          if (out) *out = savepoint;
        } else
          success = false;
      }
      break;
    }
    case '|':
      (*ptr)++;
      if (success || !out) {
        entry_impl(ptr, nullptr);
        break;
      } else {
        *out = savepoint;
        return entry_impl(ptr, out);
      }
    }
  }
  return success;
}

bool entry(const char *regex, char *out) {
  if (entry_impl(&regex, &out)) {
    *out = 0;
    return true;
  }
  return false;
}

int run(char *regex, size_t len) {
  char *res = malloc(len);
  if (entry(regex, res)) {
    puts(res);
    free(res);
    return 0;
  } else {
    fputs("No valid string", stderr);
    free(res);
    return 1;
  }
}

int main(int argc, char **argv) {
  int ret;
  switch (argc) {
  case 1:
    const int INPUT_LIMIT = 1'000;
    char * const input = malloc(INPUT_LIMIT);
    if (!fgets(input, INPUT_LIMIT, stdin)) {
      puts("Couldn't read input");
      return 1;
    }
    ret = run(input, strlen(input) + 1);
    free(input);
    return ret;
  case 2:
    size_t buffer_capacity = 2048;
    size_t buffer_size = 0;
    char *buffer = malloc(buffer_capacity);

    FILE *file;
    if (!(file = fopen(argv[1], "r"))) {
      fprintf(stderr, "Failed to read from %s", argv[1]);
      return 1;
    }
    size_t read_count;
    while (1) {
      if (buffer_size == buffer_capacity - 1) buffer = realloc(buffer, buffer_capacity *= 2);
      read_count = fread(buffer + buffer_size, 1, buffer_capacity - 1 - buffer_size, file);
      if (!read_count) break;
      buffer_size += read_count;
    }
    buffer[buffer_size] = 0;
    ret = run(buffer, buffer_size + 1);
    free(buffer);
    return ret;
  case 3: return run(argv[2], strlen(argv[2]) + 1);
  }
}