#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
size_t scan(const char *s, int l, char *r) {
  const char *p = s;
  const char *q;
  while (1) {
    {
      char yych;
      if (((s + l) - p) < 2)
        ;
      yych = *(q = p);
      switch (yych) {
      case 0x00:
        goto yy5;
      case '?':
        goto yy3;
      default:
        goto yy7;
      }
    yy2 : {
      *r++ = '0';
      *r++ = '\0';
      return p - s;
    }
    yy3:
      yych = *++p;
      switch (yych) {
      case '!':
        goto yy12;
      case '0':
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9':
      case 'A':
      case 'B':
      case 'C':
      case 'D':
      case 'E':
      case 'F':
      case 'G':
      case 'H':
      case 'I':
      case 'J':
      case 'K':
      case 'L':
      case 'M':
      case 'N':
      case 'O':
      case 'P':
      case 'Q':
      case 'R':
      case 'S':
      case 'T':
      case 'U':
      case 'V':
      case 'W':
      case 'X':
      case 'Y':
      case 'Z':
      case 'a':
      case 'b':
      case 'c':
      case 'd':
      case 'e':
      case 'f':
      case 'g':
      case 'h':
      case 'i':
      case 'j':
      case 'k':
      case 'l':
      case 'm':
      case 'n':
      case 'o':
      case 'p':
      case 'q':
      case 'r':
      case 's':
      case 't':
      case 'u':
      case 'v':
      case 'w':
      case 'x':
      case 'y':
      case 'z':
        goto yy9;
      default:
        goto yy4;
      }
    yy4:
      p = q;
      goto yy2;
    yy5:
      ++p;
      {
        *r++ = '3';
        *r++ = '\0';
        return p - s;
      }
    yy7:
      ++p;
      if ((s + l) <= p)
        ;
      yych = *p;
      switch (yych) {
      case 0x00:
      case '?':
        goto yy2;
      default:
        goto yy7;
      }
    yy9:
      ++p;
      if ((s + l) <= p)
        ;
      yych = *p;
      switch (yych) {
      case '0':
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9':
      case 'A':
      case 'B':
      case 'C':
      case 'D':
      case 'E':
      case 'F':
      case 'G':
      case 'H':
      case 'I':
      case 'J':
      case 'K':
      case 'L':
      case 'M':
      case 'N':
      case 'O':
      case 'P':
      case 'Q':
      case 'R':
      case 'S':
      case 'T':
      case 'U':
      case 'V':
      case 'W':
      case 'X':
      case 'Y':
      case 'Z':
      case 'a':
      case 'b':
      case 'c':
      case 'd':
      case 'e':
      case 'f':
      case 'g':
      case 'h':
      case 'i':
      case 'j':
      case 'k':
      case 'l':
      case 'm':
      case 'n':
      case 'o':
      case 'p':
      case 'q':
      case 'r':
      case 's':
      case 't':
      case 'u':
      case 'v':
      case 'w':
      case 'x':
      case 'y':
      case 'z':
        goto yy9;
      default:
        goto yy11;
      }
    yy11 : {
      *r++ = '2';
      continue;
    }
    yy12:
      ++p;
      if ((s + l) <= p)
        ;
      yych = *p;
      switch (yych) {
      case '0':
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9':
      case 'A':
      case 'B':
      case 'C':
      case 'D':
      case 'E':
      case 'F':
      case 'G':
      case 'H':
      case 'I':
      case 'J':
      case 'K':
      case 'L':
      case 'M':
      case 'N':
      case 'O':
      case 'P':
      case 'Q':
      case 'R':
      case 'S':
      case 'T':
      case 'U':
      case 'V':
      case 'W':
      case 'X':
      case 'Y':
      case 'Z':
      case 'a':
      case 'b':
      case 'c':
      case 'd':
      case 'e':
      case 'f':
      case 'g':
      case 'h':
      case 'i':
      case 'j':
      case 'k':
      case 'l':
      case 'm':
      case 'n':
      case 'o':
      case 'p':
      case 'q':
      case 'r':
      case 's':
      case 't':
      case 'u':
      case 'v':
      case 'w':
      case 'x':
      case 'y':
      case 'z':
        goto yy12;
      default:
        goto yy14;
      }
    yy14 : {
      *r++ = '1';
      continue;
    }
    }
  }
}


x86 assembly (clang, -O0):
<scan>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
add    %rcx,%rax
mov    -0x28(%rbp),%rcx
sub    %rcx,%rax
cmp    $0x2,%rax
jge    1138 <scan+0x38>
jmp    1138 <scan+0x38>
mov    -0x28(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl -0x31(%rbp),%eax
mov    %eax,-0x38(%rbp)
test   %eax,%eax
je     116a <scan+0x6a>
jmp    1159 <scan+0x59>
mov    -0x38(%rbp),%eax
sub    $0x3f,%eax
je     116f <scan+0x6f>
jmp    1174 <scan+0x74>
jmp    120c <scan+0x10c>
jmp    11b1 <scan+0xb1>
jmp    1250 <scan+0x150>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movb   $0x30,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movb   $0x0,(%rax)
mov    -0x28(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
mov    %rax,-0x8(%rbp)
jmp    13ce <scan+0x2ce>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    0x1(%rax),%al
mov    %al,-0x31(%rbp)
movsbl -0x31(%rbp),%eax
add    $0xffffffdf,%eax
mov    %eax,%ecx
mov    %rcx,-0x40(%rbp)
sub    $0x59,%eax
ja     11fa <scan+0xfa>
mov    -0x40(%rbp),%rax
lea    0xe19(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
jmp    133e <scan+0x23e>
jmp    12ae <scan+0x1ae>
jmp    11ff <scan+0xff>
mov    -0x30(%rbp),%rax
mov    %rax,-0x28(%rbp)
jmp    1179 <scan+0x79>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movb   $0x33,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movb   $0x0,(%rax)
mov    -0x28(%rbp),%rax
mov    -0x10(%rbp),%rcx
sub    %rcx,%rax
mov    %rax,-0x8(%rbp)
jmp    13ce <scan+0x2ce>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
add    %rcx,%rax
cmp    -0x28(%rbp),%rax
ja     1276 <scan+0x176>
jmp    1276 <scan+0x176>
mov    -0x28(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl -0x31(%rbp),%eax
mov    %eax,-0x44(%rbp)
test   %eax,%eax
je     12a4 <scan+0x1a4>
jmp    1293 <scan+0x193>
mov    -0x44(%rbp),%eax
sub    $0x3f,%eax
jne    12a9 <scan+0x1a9>
jmp    12a4 <scan+0x1a4>
jmp    1179 <scan+0x79>
jmp    1250 <scan+0x150>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
add    %rcx,%rax
cmp    -0x28(%rbp),%rax
ja     12d4 <scan+0x1d4>
jmp    12d4 <scan+0x1d4>
mov    -0x28(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl -0x31(%rbp),%eax
mov    %eax,-0x48(%rbp)
add    $0xffffffd0,%eax
sub    $0xa,%eax
jb     131d <scan+0x21d>
jmp    12f5 <scan+0x1f5>
mov    -0x48(%rbp),%eax
add    $0xffffffbf,%eax
sub    $0x1a,%eax
jb     131d <scan+0x21d>
jmp    1309 <scan+0x209>
mov    -0x48(%rbp),%eax
add    $0xffffff9f,%eax
sub    $0x19,%eax
ja     1322 <scan+0x222>
jmp    131d <scan+0x21d>
jmp    12ae <scan+0x1ae>
jmp    1327 <scan+0x227>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movb   $0x32,(%rax)
jmp    1117 <scan+0x17>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
add    %rcx,%rax
cmp    -0x28(%rbp),%rax
ja     1364 <scan+0x264>
jmp    1364 <scan+0x264>
mov    -0x28(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl -0x31(%rbp),%eax
mov    %eax,-0x4c(%rbp)
add    $0xffffffd0,%eax
sub    $0xa,%eax
jb     13ad <scan+0x2ad>
jmp    1385 <scan+0x285>
mov    -0x4c(%rbp),%eax
add    $0xffffffbf,%eax
sub    $0x1a,%eax
jb     13ad <scan+0x2ad>
jmp    1399 <scan+0x299>
mov    -0x4c(%rbp),%eax
add    $0xffffff9f,%eax
sub    $0x19,%eax
ja     13b2 <scan+0x2b2>
jmp    13ad <scan+0x2ad>
jmp    133e <scan+0x23e>
jmp    13b7 <scan+0x2b7>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movb   $0x31,(%rax)
jmp    1117 <scan+0x17>
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<scan>:
lea    0xef9(%rip),%r8
movabs $0x3ffffff03ffffff,%r9
ff ff 03
mov    %rdi,%rax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsbl (%rax),%ecx
cmp    $0x3f,%ecx
jne    11a1 <scan+0xa1>
movsbl 0x1(%rax),%ecx
add    $0xffffffdf,%ecx
cmp    $0x59,%ecx
ja     11c1 <scan+0xc1>
movslq (%r8,%rcx,4),%rcx
add    %r8,%rcx
jmp    *%rcx
add    $0x2,%rax
jmp    115a <scan+0x5a>
nopw   0x0(%rax,%rax,1)
bt     %rsi,%r9
jae    1165 <scan+0x65>
add    $0x1,%rax
movsbl (%rax),%ecx
lea    -0x41(%rcx),%esi
cmp    $0x39,%esi
jbe    1150 <scan+0x50>
add    $0xffffffd0,%ecx
cmp    $0xa,%ecx
jb     1156 <scan+0x56>
mov    $0x32,%cl
mov    %cl,(%rdx)
add    $0x1,%rdx
jmp    1120 <scan+0x20>
add    $0x2,%rax
jmp    118a <scan+0x8a>
nopl   (%rax)
bt     %rsi,%r9
jae    1195 <scan+0x95>
add    $0x1,%rax
movsbl (%rax),%ecx
lea    -0x41(%rcx),%esi
cmp    $0x39,%esi
jbe    1180 <scan+0x80>
add    $0xffffffd0,%ecx
cmp    $0xa,%ecx
jb     1186 <scan+0x86>
mov    $0x31,%cl
jmp    116f <scan+0x6f>
test   %ecx,%ecx
jne    11b0 <scan+0xb0>
add    $0x1,%rax
mov    $0x33,%cl
jmp    11c3 <scan+0xc3>
nopl   (%rax)
movsbl 0x1(%rax),%ecx
add    $0x1,%rax
test   %ecx,%ecx
je     11c1 <scan+0xc1>
cmp    $0x3f,%ecx
jne    11b0 <scan+0xb0>
mov    $0x30,%cl
mov    %cl,(%rdx)
movb   $0x0,0x1(%rdx)
sub    %rdi,%rax
ret

LLVM IR (-O0):
define i64 @scan(i8* %0, i32 %1, i8* %2) {
%4 = alloca i64
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca i8
store i8* %0, i8** %5
store i32 %1, i32* %6
store i8* %2, i8** %7
%11 = load i8*, i8** %5
store i8* %11, i8** %8
br label %12
12: ; preds = %3, %98, %118
%13 = load i8*, i8** %5
%14 = load i32, i32* %6
%15 = sext i32 %14 to i64
%16 = getelementptr inbounds i8, i8* %13, i64 %15
%17 = load i8*, i8** %8
%18 = ptrtoint i8* %16 to i64
%19 = ptrtoint i8* %17 to i64
%20 = sub i64 %18, %19
%21 = icmp slt i64 %20, 2
br i1 %21, label %22, label %23
22: ; preds = %12
br label %23
23: ; preds = %22, %12
%24 = load i8*, i8** %8
store i8* %24, i8** %9
%25 = load i8, i8* %24
store i8 %25, i8* %10
%26 = load i8, i8* %10
%27 = sext i8 %26 to i32
switch i32 %27, label %30 [
i32 0, label %28
i32 63, label %29
]
28: ; preds = %23
br label %52
29: ; preds = %23
br label %41
30: ; preds = %23
br label %64
31: ; preds = %79, %50
%32 = load i8*, i8** %7
%33 = getelementptr inbounds i8, i8* %32, i32 1
store i8* %33, i8** %7
store i8 48, i8* %32
%34 = load i8*, i8** %7
%35 = getelementptr inbounds i8, i8* %34, i32 1
store i8* %35, i8** %7
store i8 0, i8* %34
%36 = load i8*, i8** %8
%37 = load i8*, i8** %5
%38 = ptrtoint i8* %36 to i64
%39 = ptrtoint i8* %37 to i64
%40 = sub i64 %38, %39
store i64 %40, i64* %4
br label %121
41: ; preds = %29
%42 = load i8*, i8** %8
%43 = getelementptr inbounds i8, i8* %42, i32 1
store i8* %43, i8** %8
%44 = load i8, i8* %43
store i8 %44, i8* %10
%45 = load i8, i8* %10
%46 = sext i8 %45 to i32
switch i32 %46, label %49 [
i32 33, label %47
i32 48, label %48
i32 49, label %48
i32 50, label %48
i32 51, label %48
i32 52, label %48
i32 53, label %48
i32 54, label %48
i32 55, label %48
i32 56, label %48
i32 57, label %48
i32 65, label %48
i32 66, label %48
i32 67, label %48
i32 68, label %48
i32 69, label %48
i32 70, label %48
i32 71, label %48
i32 72, label %48
i32 73, label %48
i32 74, label %48
i32 75, label %48
i32 76, label %48
i32 77, label %48
i32 78, label %48
i32 79, label %48
i32 80, label %48
i32 81, label %48
i32 82, label %48
i32 83, label %48
i32 84, label %48
i32 85, label %48
i32 86, label %48
i32 87, label %48
i32 88, label %48
i32 89, label %48
i32 90, label %48
i32 97, label %48
i32 98, label %48
i32 99, label %48
i32 100, label %48
i32 101, label %48
i32 102, label %48
i32 103, label %48
i32 104, label %48
i32 105, label %48
i32 106, label %48
i32 107, label %48
i32 108, label %48
i32 109, label %48
i32 110, label %48
i32 111, label %48
i32 112, label %48
i32 113, label %48
i32 114, label %48
i32 115, label %48
i32 116, label %48
i32 117, label %48
i32 118, label %48
i32 119, label %48
i32 120, label %48
i32 121, label %48
i32 122, label %48
]
47: ; preds = %41
br label %101
48: ; preds = %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41, %41
br label %81
49: ; preds = %41
br label %50
50: ; preds = %49
%51 = load i8*, i8** %9
store i8* %51, i8** %8
br label %31
52: ; preds = %28
%53 = load i8*, i8** %8
%54 = getelementptr inbounds i8, i8* %53, i32 1
store i8* %54, i8** %8
%55 = load i8*, i8** %7
%56 = getelementptr inbounds i8, i8* %55, i32 1
store i8* %56, i8** %7
store i8 51, i8* %55
%57 = load i8*, i8** %7
%58 = getelementptr inbounds i8, i8* %57, i32 1
store i8* %58, i8** %7
store i8 0, i8* %57
%59 = load i8*, i8** %8
%60 = load i8*, i8** %5
%61 = ptrtoint i8* %59 to i64
%62 = ptrtoint i8* %60 to i64
%63 = sub i64 %61, %62
store i64 %63, i64* %4
br label %121
64: ; preds = %80, %30
%65 = load i8*, i8** %8
%66 = getelementptr inbounds i8, i8* %65, i32 1
store i8* %66, i8** %8
%67 = load i8*, i8** %5
%68 = load i32, i32* %6
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds i8, i8* %67, i64 %69
%71 = load i8*, i8** %8
%72 = icmp ule i8* %70, %71
br i1 %72, label %73, label %74
73: ; preds = %64
br label %74
74: ; preds = %73, %64
%75 = load i8*, i8** %8
%76 = load i8, i8* %75
store i8 %76, i8* %10
%77 = load i8, i8* %10
%78 = sext i8 %77 to i32
switch i32 %78, label %80 [
i32 0, label %79
i32 63, label %79
]
79: ; preds = %74, %74
br label %31
80: ; preds = %74
br label %64
81: ; preds = %96, %48
%82 = load i8*, i8** %8
%83 = getelementptr inbounds i8, i8* %82, i32 1
store i8* %83, i8** %8
%84 = load i8*, i8** %5
%85 = load i32, i32* %6
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds i8, i8* %84, i64 %86
%88 = load i8*, i8** %8
%89 = icmp ule i8* %87, %88
br i1 %89, label %90, label %91
90: ; preds = %81
br label %91
91: ; preds = %90, %81
%92 = load i8*, i8** %8
%93 = load i8, i8* %92
store i8 %93, i8* %10
%94 = load i8, i8* %10
%95 = sext i8 %94 to i32
switch i32 %95, label %97 [
i32 48, label %96
i32 49, label %96
i32 50, label %96
i32 51, label %96
i32 52, label %96
i32 53, label %96
i32 54, label %96
i32 55, label %96
i32 56, label %96
i32 57, label %96
i32 65, label %96
i32 66, label %96
i32 67, label %96
i32 68, label %96
i32 69, label %96
i32 70, label %96
i32 71, label %96
i32 72, label %96
i32 73, label %96
i32 74, label %96
i32 75, label %96
i32 76, label %96
i32 77, label %96
i32 78, label %96
i32 79, label %96
i32 80, label %96
i32 81, label %96
i32 82, label %96
i32 83, label %96
i32 84, label %96
i32 85, label %96
i32 86, label %96
i32 87, label %96
i32 88, label %96
i32 89, label %96
i32 90, label %96
i32 97, label %96
i32 98, label %96
i32 99, label %96
i32 100, label %96
i32 101, label %96
i32 102, label %96
i32 103, label %96
i32 104, label %96
i32 105, label %96
i32 106, label %96
i32 107, label %96
i32 108, label %96
i32 109, label %96
i32 110, label %96
i32 111, label %96
i32 112, label %96
i32 113, label %96
i32 114, label %96
i32 115, label %96
i32 116, label %96
i32 117, label %96
i32 118, label %96
i32 119, label %96
i32 120, label %96
i32 121, label %96
i32 122, label %96
]
96: ; preds = %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91, %91
br label %81
97: ; preds = %91
br label %98
98: ; preds = %97
%99 = load i8*, i8** %7
%100 = getelementptr inbounds i8, i8* %99, i32 1
store i8* %100, i8** %7
store i8 50, i8* %99
br label %12
101: ; preds = %116, %47
%102 = load i8*, i8** %8
%103 = getelementptr inbounds i8, i8* %102, i32 1
store i8* %103, i8** %8
%104 = load i8*, i8** %5
%105 = load i32, i32* %6
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds i8, i8* %104, i64 %106
%108 = load i8*, i8** %8
%109 = icmp ule i8* %107, %108
br i1 %109, label %110, label %111
110: ; preds = %101
br label %111
111: ; preds = %110, %101
%112 = load i8*, i8** %8
%113 = load i8, i8* %112
store i8 %113, i8* %10
%114 = load i8, i8* %10
%115 = sext i8 %114 to i32
switch i32 %115, label %117 [
i32 48, label %116
i32 49, label %116
i32 50, label %116
i32 51, label %116
i32 52, label %116
i32 53, label %116
i32 54, label %116
i32 55, label %116
i32 56, label %116
i32 57, label %116
i32 65, label %116
i32 66, label %116
i32 67, label %116
i32 68, label %116
i32 69, label %116
i32 70, label %116
i32 71, label %116
i32 72, label %116
i32 73, label %116
i32 74, label %116
i32 75, label %116
i32 76, label %116
i32 77, label %116
i32 78, label %116
i32 79, label %116
i32 80, label %116
i32 81, label %116
i32 82, label %116
i32 83, label %116
i32 84, label %116
i32 85, label %116
i32 86, label %116
i32 87, label %116
i32 88, label %116
i32 89, label %116
i32 90, label %116
i32 97, label %116
i32 98, label %116
i32 99, label %116
i32 100, label %116
i32 101, label %116
i32 102, label %116
i32 103, label %116
i32 104, label %116
i32 105, label %116
i32 106, label %116
i32 107, label %116
i32 108, label %116
i32 109, label %116
i32 110, label %116
i32 111, label %116
i32 112, label %116
i32 113, label %116
i32 114, label %116
i32 115, label %116
i32 116, label %116
i32 117, label %116
i32 118, label %116
i32 119, label %116
i32 120, label %116
i32 121, label %116
i32 122, label %116
]
116: ; preds = %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111, %111
br label %101
117: ; preds = %111
br label %118
118: ; preds = %117
%119 = load i8*, i8** %7
%120 = getelementptr inbounds i8, i8* %119, i32 1
store i8* %120, i8** %7
store i8 49, i8* %119
br label %12
121: ; preds = %52, %31
%122 = load i64, i64* %4
ret i64 %122
}

LLVM IR (-O2):
define i64 @scan(i8* %0, i32 %1, i8* nocapture writeonly %2) {
br label %4
4: ; preds = %33, %3
%5 = phi i8* [ %2, %3 ], [ %36, %33 ]
%6 = phi i8* [ %0, %3 ], [ %35, %33 ]
%7 = load i8, i8* %6
%8 = sext i8 %7 to i32
switch i32 %8, label %16 [
i32 0, label %14
i32 63, label %9
]
9: ; preds = %4
%10 = getelementptr inbounds i8, i8* %6, i64 1
%11 = load i8, i8* %10
%12 = sext i8 %11 to i32
switch i32 %12, label %37 [
i32 33, label %27
i32 48, label %13
i32 49, label %13
i32 50, label %13
i32 51, label %13
i32 52, label %13
i32 53, label %13
i32 54, label %13
i32 55, label %13
i32 56, label %13
i32 57, label %13
i32 65, label %13
i32 66, label %13
i32 67, label %13
i32 68, label %13
i32 69, label %13
i32 70, label %13
i32 71, label %13
i32 72, label %13
i32 73, label %13
i32 74, label %13
i32 75, label %13
i32 76, label %13
i32 77, label %13
i32 78, label %13
i32 79, label %13
i32 80, label %13
i32 81, label %13
i32 82, label %13
i32 83, label %13
i32 84, label %13
i32 85, label %13
i32 86, label %13
i32 87, label %13
i32 88, label %13
i32 89, label %13
i32 90, label %13
i32 97, label %13
i32 98, label %13
i32 99, label %13
i32 100, label %13
i32 101, label %13
i32 102, label %13
i32 103, label %13
i32 104, label %13
i32 105, label %13
i32 106, label %13
i32 107, label %13
i32 108, label %13
i32 109, label %13
i32 110, label %13
i32 111, label %13
i32 112, label %13
i32 113, label %13
i32 114, label %13
i32 115, label %13
i32 116, label %13
i32 117, label %13
i32 118, label %13
i32 119, label %13
i32 120, label %13
i32 121, label %13
i32 122, label %13
]
13: ; preds = %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9
br label %21
14: ; preds = %4
%15 = getelementptr inbounds i8, i8* %6, i64 1
br label %37
16: ; preds = %4, %16
%17 = phi i8* [ %18, %16 ], [ %6, %4 ]
%18 = getelementptr inbounds i8, i8* %17, i64 1
%19 = load i8, i8* %18
%20 = sext i8 %19 to i32
switch i32 %20, label %16 [
i32 0, label %37
i32 63, label %37
]
21: ; preds = %26, %13
%22 = phi i8* [ %10, %13 ], [ %23, %26 ]
%23 = getelementptr inbounds i8, i8* %22, i64 1
%24 = load i8, i8* %23
%25 = sext i8 %24 to i32
switch i32 %25, label %33 [
i32 48, label %26
i32 49, label %26
i32 50, label %26
i32 51, label %26
i32 52, label %26
i32 53, label %26
i32 54, label %26
i32 55, label %26
i32 56, label %26
i32 57, label %26
i32 65, label %26
i32 66, label %26
i32 67, label %26
i32 68, label %26
i32 69, label %26
i32 70, label %26
i32 71, label %26
i32 72, label %26
i32 73, label %26
i32 74, label %26
i32 75, label %26
i32 76, label %26
i32 77, label %26
i32 78, label %26
i32 79, label %26
i32 80, label %26
i32 81, label %26
i32 82, label %26
i32 83, label %26
i32 84, label %26
i32 85, label %26
i32 86, label %26
i32 87, label %26
i32 88, label %26
i32 89, label %26
i32 90, label %26
i32 97, label %26
i32 98, label %26
i32 99, label %26
i32 100, label %26
i32 101, label %26
i32 102, label %26
i32 103, label %26
i32 104, label %26
i32 105, label %26
i32 106, label %26
i32 107, label %26
i32 108, label %26
i32 109, label %26
i32 110, label %26
i32 111, label %26
i32 112, label %26
i32 113, label %26
i32 114, label %26
i32 115, label %26
i32 116, label %26
i32 117, label %26
i32 118, label %26
i32 119, label %26
i32 120, label %26
i32 121, label %26
i32 122, label %26
]
26: ; preds = %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21, %21
br label %21
27: ; preds = %9, %32
%28 = phi i8* [ %29, %32 ], [ %10, %9 ]
%29 = getelementptr inbounds i8, i8* %28, i64 1
%30 = load i8, i8* %29
%31 = sext i8 %30 to i32
switch i32 %31, label %33 [
i32 48, label %32
i32 49, label %32
i32 50, label %32
i32 51, label %32
i32 52, label %32
i32 53, label %32
i32 54, label %32
i32 55, label %32
i32 56, label %32
i32 57, label %32
i32 65, label %32
i32 66, label %32
i32 67, label %32
i32 68, label %32
i32 69, label %32
i32 70, label %32
i32 71, label %32
i32 72, label %32
i32 73, label %32
i32 74, label %32
i32 75, label %32
i32 76, label %32
i32 77, label %32
i32 78, label %32
i32 79, label %32
i32 80, label %32
i32 81, label %32
i32 82, label %32
i32 83, label %32
i32 84, label %32
i32 85, label %32
i32 86, label %32
i32 87, label %32
i32 88, label %32
i32 89, label %32
i32 90, label %32
i32 97, label %32
i32 98, label %32
i32 99, label %32
i32 100, label %32
i32 101, label %32
i32 102, label %32
i32 103, label %32
i32 104, label %32
i32 105, label %32
i32 106, label %32
i32 107, label %32
i32 108, label %32
i32 109, label %32
i32 110, label %32
i32 111, label %32
i32 112, label %32
i32 113, label %32
i32 114, label %32
i32 115, label %32
i32 116, label %32
i32 117, label %32
i32 118, label %32
i32 119, label %32
i32 120, label %32
i32 121, label %32
i32 122, label %32
]
32: ; preds = %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27, %27
br label %27
33: ; preds = %21, %27
%34 = phi i8 [ 49, %27 ], [ 50, %21 ]
%35 = phi i8* [ %29, %27 ], [ %23, %21 ]
%36 = getelementptr inbounds i8, i8* %5, i64 1
store i8 %34, i8* %5
br label %4
37: ; preds = %9, %16, %16, %14
%38 = phi i8 [ 51, %14 ], [ 48, %16 ], [ 48, %16 ], [ 48, %9 ]
%39 = phi i8* [ %15, %14 ], [ %18, %16 ], [ %18, %16 ], [ %6, %9 ]
store i8 %38, i8* %5
%40 = getelementptr inbounds i8, i8* %5, i64 1
store i8 0, i8* %40
%41 = ptrtoint i8* %39 to i64
%42 = ptrtoint i8* %0 to i64
%43 = sub i64 %41, %42
ret i64 %43
}