#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 */
scalar_t__ gets(char *);
int /*<<< orphan*/ putchar(char);
short strlen(char *);
void main() {
  char a[251], b[251], m[502], ra[502];
  short la, lb, i, j, max, ml, ad, carry, lt, dif;
  while (gets(a)) {
    gets(b);
    la = strlen(a);
    lb = strlen(b);
    for (i = 0; i < la + lb; i++) {
      m[i] = 0;
      ra[i] = 0;
    }
    lt = 0;
    for (i = lb - 1; i >= 0; i--) {
      carry = 0;
      lt = 0;
      for (j = la - 1; j >= 0; j--) {
        ml = (b[i] - '0') * (a[j] - '0') + carry;
        if (ml == 10) {
          m[lt] = 0;
          carry = 1;
        } else {
          m[lt] = ml % 10;
          carry = ml / 10;
        }
        lt++;
      }
      if (carry) {
        m[lt++] = carry;
        carry = 0;
      }
      dif = lb - i - 1;
      for (j = dif; j < lt + dif; j++) {
        ad = ra[j] + m[j - dif] + carry;
        if (ad > 9) {
          ra[j] = ad - 10;
          carry = 1;
        } else {
          ra[j] = ad;
          carry = 0;
        }
      }
      if (carry)
        ra[j++] = carry;
    }
    lt = 0;
    for (i = j - 1; i >= 0; i--) {
      if (ra[i] != 0)
        lt = 1;
      if (lt)
        putchar(ra[i] + '0');
    }
    if (!lt)
      putchar('0');
    putchar('\n');
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x620,%rsp
lea    -0x100(%rbp),%rdi
call   1050 <gets@plt>
cmp    $0x0,%rax
je     154a <main+0x41a>
lea    -0x200(%rbp),%rdi
call   1050 <gets@plt>
lea    -0x100(%rbp),%rdi
call   1040 <strlen@plt>
mov    %ax,-0x602(%rbp)
lea    -0x200(%rbp),%rdi
call   1040 <strlen@plt>
mov    %ax,-0x604(%rbp)
movw   $0x0,-0x606(%rbp)
movswl -0x606(%rbp),%eax
movswl -0x602(%rbp),%ecx
movswl -0x604(%rbp),%edx
add    %edx,%ecx
cmp    %ecx,%eax
jge    11e2 <main+0xb2>
movswq -0x606(%rbp),%rax
ff
movb   $0x0,-0x400(%rbp,%rax,1)
movswq -0x606(%rbp),%rax
ff
movb   $0x0,-0x600(%rbp,%rax,1)
mov    -0x606(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x606(%rbp)
jmp    118c <main+0x5c>
movw   $0x0,-0x612(%rbp)
movswl -0x604(%rbp),%eax
sub    $0x1,%eax
mov    %ax,-0x606(%rbp)
movswl -0x606(%rbp),%eax
cmp    $0x0,%eax
jl     1492 <main+0x362>
movw   $0x0,-0x610(%rbp)
movw   $0x0,-0x612(%rbp)
movswl -0x602(%rbp),%eax
sub    $0x1,%eax
mov    %ax,-0x608(%rbp)
movswl -0x608(%rbp),%eax
cmp    $0x0,%eax
jl     1305 <main+0x1d5>
movswq -0x606(%rbp),%rax
ff
movsbl -0x200(%rbp,%rax,1),%eax
ff
sub    $0x30,%eax
movswq -0x608(%rbp),%rcx
ff
movsbl -0x100(%rbp,%rcx,1),%ecx
ff
sub    $0x30,%ecx
imul   %ecx,%eax
movswl -0x610(%rbp),%ecx
add    %ecx,%eax
mov    %ax,-0x60c(%rbp)
movswl -0x60c(%rbp),%eax
cmp    $0xa,%eax
jne    12a6 <main+0x176>
movswq -0x612(%rbp),%rax
ff
movb   $0x0,-0x400(%rbp,%rax,1)
movw   $0x1,-0x610(%rbp)
jmp    12dc <main+0x1ac>
movswl -0x60c(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %dl,%cl
movswq -0x612(%rbp),%rax
ff
mov    %cl,-0x400(%rbp,%rax,1)
movswl -0x60c(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %ax,-0x610(%rbp)
mov    -0x612(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x612(%rbp)
mov    -0x608(%rbp),%ax
add    $0xffff,%ax
mov    %ax,-0x608(%rbp)
jmp    122f <main+0xff>
cmpw   $0x0,-0x610(%rbp)
je     1345 <main+0x215>
mov    -0x610(%rbp),%ax
mov    %al,%cl
mov    -0x612(%rbp),%ax
mov    %ax,%dx
add    $0x1,%dx
mov    %dx,-0x612(%rbp)
movswq %ax,%rax
mov    %cl,-0x400(%rbp,%rax,1)
movw   $0x0,-0x610(%rbp)
movswl -0x604(%rbp),%eax
movswl -0x606(%rbp),%ecx
sub    %ecx,%eax
sub    $0x1,%eax
mov    %ax,-0x614(%rbp)
mov    -0x614(%rbp),%ax
mov    %ax,-0x608(%rbp)
movswl -0x608(%rbp),%eax
movswl -0x612(%rbp),%ecx
movswl -0x614(%rbp),%edx
add    %edx,%ecx
cmp    %ecx,%eax
jge    143f <main+0x30f>
movswq -0x608(%rbp),%rax
ff
movsbl -0x600(%rbp,%rax,1),%eax
ff
movswl -0x608(%rbp),%ecx
movswl -0x614(%rbp),%edx
sub    %edx,%ecx
movslq %ecx,%rcx
movsbl -0x400(%rbp,%rcx,1),%ecx
ff
add    %ecx,%eax
movswl -0x610(%rbp),%ecx
add    %ecx,%eax
mov    %ax,-0x60e(%rbp)
movswl -0x60e(%rbp),%eax
cmp    $0x9,%eax
jle    1402 <main+0x2d2>
movswl -0x60e(%rbp),%eax
sub    $0xa,%eax
mov    %al,%cl
movswq -0x608(%rbp),%rax
ff
mov    %cl,-0x600(%rbp,%rax,1)
movw   $0x1,-0x610(%rbp)
jmp    1423 <main+0x2f3>
mov    -0x60e(%rbp),%ax
mov    %al,%cl
movswq -0x608(%rbp),%rax
ff
mov    %cl,-0x600(%rbp,%rax,1)
movw   $0x0,-0x610(%rbp)
jmp    1428 <main+0x2f8>
mov    -0x608(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x608(%rbp)
jmp    136d <main+0x23d>
cmpw   $0x0,-0x610(%rbp)
je     1476 <main+0x346>
mov    -0x610(%rbp),%ax
mov    %al,%cl
mov    -0x608(%rbp),%ax
mov    %ax,%dx
add    $0x1,%dx
mov    %dx,-0x608(%rbp)
movswq %ax,%rax
mov    %cl,-0x600(%rbp,%rax,1)
jmp    147b <main+0x34b>
mov    -0x606(%rbp),%ax
add    $0xffff,%ax
mov    %ax,-0x606(%rbp)
jmp    11fc <main+0xcc>
movw   $0x0,-0x612(%rbp)
movswl -0x608(%rbp),%eax
sub    $0x1,%eax
mov    %ax,-0x606(%rbp)
movswl -0x606(%rbp),%eax
cmp    $0x0,%eax
jl     1523 <main+0x3f3>
movswq -0x606(%rbp),%rax
ff
movsbl -0x600(%rbp,%rax,1),%eax
ff
cmp    $0x0,%eax
je     14de <main+0x3ae>
movw   $0x1,-0x612(%rbp)
cmpw   $0x0,-0x612(%rbp)
je     1507 <main+0x3d7>
movswq -0x606(%rbp),%rax
ff
movsbl -0x600(%rbp,%rax,1),%eax
ff
add    $0x30,%eax
movsbl %al,%edi
call   1030 <putchar@plt>
jmp    150c <main+0x3dc>
mov    -0x606(%rbp),%ax
add    $0xffff,%ax
mov    %ax,-0x606(%rbp)
jmp    14ac <main+0x37c>
cmpw   $0x0,-0x612(%rbp)
jne    153b <main+0x40b>
mov    $0x30,%edi
call   1030 <putchar@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
jmp    113b <main+0xb>
add    $0x620,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x608,%rsp
lea    0x400(%rsp),%rdi
call   1050 <gets@plt>
test   %rax,%rax
je     1509 <main+0x3d9>
lea    0x400(%rsp),%r15
jmp    1195 <main+0x65>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    $0x30,%edi
call   1030 <putchar@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r15,%rdi
call   1050 <gets@plt>
test   %rax,%rax
je     1509 <main+0x3d9>
lea    0x500(%rsp),%rbx
mov    %rbx,%rdi
call   1050 <gets@plt>
mov    %r15,%rdi
call   1040 <strlen@plt>
mov    %eax,%r12d
mov    %rbx,%rdi
call   1040 <strlen@plt>
mov    %eax,%r13d
movswl %r12w,%edx
movswl %ax,%esi
mov    %esi,%r9d
add    %edx,%r9d
jle    11fb <main+0xcb>
cmp    $0x8,%r9d
jae    13b0 <main+0x280>
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
movswq %si,%rcx
movb   $0x0,0x200(%rsp,%rcx,1)
movb   $0x0,(%rsp,%rcx,1)
add    $0x1,%esi
movswl %si,%ecx
cmp    %ecx,%r9d
jg     11e0 <main+0xb0>
mov    %r13d,%ecx
add    $0xffff,%cx
js     1350 <main+0x220>
lea    -0x1(%r12),%r10d
movzwl %cx,%r11d
lea    0x1(%r12),%r8d
movswq %r12w,%r9
mov    %r13d,%eax
jmp    123c <main+0x10c>
nop
mov    %r13d,%r14d
sub    %eax,%r14d
mov    %r11d,%eax
lea    -0x1(%r11),%rcx
mov    %rcx,%r11
test   $0x8000,%ecx
jne    1350 <main+0x220>
test   %r10w,%r10w
js     1220 <main+0xf0>
movsbl 0x500(%rsp,%r11,1),%esi
add    $0xffffffd0,%esi
xor    %edi,%edi
lea    0x200(%rsp),%rbx
mov    %r10d,%ecx
jmp    128b <main+0x15b>
nopl   (%rax)
movswl %di,%edx
imul   $0x6667,%edx,%edx
mov    %edx,%ebp
shr    $0x1f,%ebp
sar    $0x12,%edx
add    %ebp,%edx
lea    (%rdx,%rdx,1),%ebp
lea    0x0(%rbp,%rbp,4),%ebp
sub    %ebp,%edi
mov    %dil,(%rbx)
mov    %edx,%edi
add    $0x1,%rbx
add    $0xffff,%cx
jae    12b0 <main+0x180>
movzwl %cx,%edx
movsbl 0x400(%rsp,%rdx,1),%edx
add    $0xffffffd0,%edx
movswl %si,%ebp
imul   %edx,%ebp
add    %ebp,%edi
cmp    $0xa,%di
jne    1260 <main+0x130>
movb   $0x0,(%rbx)
mov    $0x1,%di
jmp    1281 <main+0x151>
mov    %r12d,%ecx
test   %di,%di
je     12c3 <main+0x193>
mov    %dil,0x200(%rsp,%r9,1)
mov    %r8d,%ecx
mov    %r13d,%r14d
sub    %eax,%r14d
test   %cx,%cx
jle    1226 <main+0xf6>
movswl %cx,%esi
movswl %r14w,%edi
add    %edi,%esi
xor    %ebp,%ebp
mov    %edi,%ecx
nop
mov    %ecx,%edx
movslq %ecx,%rax
movsbl (%rsp,%rax,1),%ecx
mov    %eax,%ebx
sub    %edi,%ebx
movslq %ebx,%rbx
movsbl 0x200(%rsp,%rbx,1),%ebx
add    %ecx,%ebp
add    %ebx,%ebp
mov    %ebp,%ebx
lea    -0xa(%rbp),%ecx
xor    %r15d,%r15d
cmp    $0xa,%bp
setge  %r15b
movzbl %cl,%ecx
cmovl  %ebp,%ecx
mov    %cl,(%rsp,%rax,1)
lea    0x1(%rax),%r14d
movswl %r14w,%ecx
mov    %r15d,%ebp
cmp    %ecx,%esi
jg     12e0 <main+0x1b0>
cmp    $0xa,%bx
jl     1226 <main+0xf6>
add    $0x2,%edx
movswq %r14w,%rax
movb   $0x1,(%rsp,%rax,1)
mov    %edx,%r14d
jmp    1226 <main+0xf6>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %r14d,%ebx
add    $0xffff,%bx
lea    0x400(%rsp),%r15
mov    $0x1,%r12d
js     1170 <main+0x40>
xor    %ebp,%ebp
jmp    1376 <main+0x246>
nop
add    $0xffff,%bx
js     13a0 <main+0x270>
movzwl %bx,%eax
movzbl (%rsp,%rax,1),%eax
test   %al,%al
cmovne %r12d,%ebp
test   %bp,%bp
je     1370 <main+0x240>
add    $0x30,%al
movsbl %al,%edi
call   1030 <putchar@plt>
jmp    1370 <main+0x240>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
test   %bp,%bp
jne    117a <main+0x4a>
jmp    1170 <main+0x40>
xchg   %ax,%ax
add    %esi,%edx
add    $0xffffffff,%edx
movzwl %dx,%edi
xor    %esi,%esi
cmp    $0x7ffe,%edi
ja     11e0 <main+0xb0>
cmp    $0x7fff,%edx
ja     11e0 <main+0xb0>
xor    %ecx,%ecx
cmp    $0x20,%r9d
jb     149e <main+0x36e>
mov    %r9d,%ecx
and    $0xffffffe0,%ecx
lea    -0x20(%rcx),%esi
mov    %esi,%r8d
shr    $0x5,%r8d
add    $0x1,%r8d
test   %esi,%esi
je     14f1 <main+0x3c1>
mov    %r8d,%esi
and    $0xfffffffe,%esi
xor    %ebp,%ebp
xor    %edi,%edi
xorps  %xmm0,%xmm0
movabs $0x20000000000000,%rax
movabs $0x40000000000000,%rdx
nopl   0x0(%rax,%rax,1)
mov    %rbp,%rbx
sar    $0x30,%rbx
movaps %xmm0,0x200(%rsp,%rbx,1)
movups %xmm0,0x210(%rsp,%rbx,1)
movaps %xmm0,(%rsp,%rbx,1)
movups %xmm0,0x10(%rsp,%rbx,1)
lea    (%rax,%rbp,1),%rbx
sar    $0x30,%rbx
movaps %xmm0,0x200(%rsp,%rbx,1)
movups %xmm0,0x210(%rsp,%rbx,1)
movaps %xmm0,(%rsp,%rbx,1)
movups %xmm0,0x10(%rsp,%rbx,1)
add    $0x40,%edi
add    %rdx,%rbp
add    $0xfffffffe,%esi
jne    1420 <main+0x2f0>
test   $0x1,%r8b
je     148f <main+0x35f>
movswq %di,%rsi
movaps %xmm0,0x200(%rsp,%rsi,1)
movups %xmm0,0x210(%rsp,%rsi,1)
movaps %xmm0,(%rsp,%rsi,1)
movups %xmm0,0x10(%rsp,%rsi,1)
cmp    %ecx,%r9d
je     11fb <main+0xcb>
test   $0x18,%r9b
je     1502 <main+0x3d2>
mov    %r9d,%esi
and    $0xfffffff8,%esi
mov    %rcx,%rdx
shl    $0x30,%rdx
sub    %esi,%ecx
movabs $0x8000000000000,%rax
nopw   0x0(%rax,%rax,1)
mov    %rdx,%rdi
sar    $0x30,%rdi
movq   $0x0,0x200(%rsp,%rdi,1)
movq   $0x0,(%rsp,%rdi,1)
add    %rax,%rdx
add    $0x8,%ecx
jne    14c0 <main+0x390>
cmp    %esi,%r9d
jne    11e0 <main+0xb0>
jmp    11fb <main+0xcb>
xor    %edi,%edi
xorps  %xmm0,%xmm0
test   $0x1,%r8b
jne    1472 <main+0x342>
jmp    148f <main+0x35f>
mov    %ecx,%esi
jmp    11e0 <main+0xb0>
add    $0x608,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @main() {
%1 = alloca [251 x i8]
%2 = alloca [251 x i8]
%3 = alloca [502 x i8]
%4 = alloca [502 x i8]
%5 = alloca i16
%6 = alloca i16
%7 = alloca i16
%8 = alloca i16
%9 = alloca i16
%10 = alloca i16
%11 = alloca i16
%12 = alloca i16
%13 = alloca i16
%14 = alloca i16
br label %15
15: ; preds = %227, %0
%16 = getelementptr inbounds [251 x i8], [251 x i8]* %1, i64 0, i64 0
%17 = call i64 @gets(i8* %16)
%18 = icmp ne i64 %17, 0
br i1 %18, label %19, label %229
19: ; preds = %15
%20 = getelementptr inbounds [251 x i8], [251 x i8]* %2, i64 0, i64 0
%21 = call i64 @gets(i8* %20)
%22 = getelementptr inbounds [251 x i8], [251 x i8]* %1, i64 0, i64 0
%23 = call signext i16 @strlen(i8* %22)
store i16 %23, i16* %5
%24 = getelementptr inbounds [251 x i8], [251 x i8]* %2, i64 0, i64 0
%25 = call signext i16 @strlen(i8* %24)
store i16 %25, i16* %6
store i16 0, i16* %7
br label %26
26: ; preds = %42, %19
%27 = load i16, i16* %7
%28 = sext i16 %27 to i32
%29 = load i16, i16* %5
%30 = sext i16 %29 to i32
%31 = load i16, i16* %6
%32 = sext i16 %31 to i32
%33 = add nsw i32 %30, %32
%34 = icmp slt i32 %28, %33
br i1 %34, label %35, label %45
35: ; preds = %26
%36 = load i16, i16* %7
%37 = sext i16 %36 to i64
%38 = getelementptr inbounds [502 x i8], [502 x i8]* %3, i64 0, i64 %37
store i8 0, i8* %38
%39 = load i16, i16* %7
%40 = sext i16 %39 to i64
%41 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 %40
store i8 0, i8* %41
br label %42
42: ; preds = %35
%43 = load i16, i16* %7
%44 = add i16 %43, 1
store i16 %44, i16* %7
br label %26
45: ; preds = %26
store i16 0, i16* %13
%46 = load i16, i16* %6
%47 = sext i16 %46 to i32
%48 = sub nsw i32 %47, 1
%49 = trunc i32 %48 to i16
store i16 %49, i16* %7
br label %50
50: ; preds = %186, %45
%51 = load i16, i16* %7
%52 = sext i16 %51 to i32
%53 = icmp sge i32 %52, 0
br i1 %53, label %54, label %189
54: ; preds = %50
store i16 0, i16* %12
store i16 0, i16* %13
%55 = load i16, i16* %5
%56 = sext i16 %55 to i32
%57 = sub nsw i32 %56, 1
%58 = trunc i32 %57 to i16
store i16 %58, i16* %8
br label %59
59: ; preds = %103, %54
%60 = load i16, i16* %8
%61 = sext i16 %60 to i32
%62 = icmp sge i32 %61, 0
br i1 %62, label %63, label %106
63: ; preds = %59
%64 = load i16, i16* %7
%65 = sext i16 %64 to i64
%66 = getelementptr inbounds [251 x i8], [251 x i8]* %2, i64 0, i64 %65
%67 = load i8, i8* %66
%68 = sext i8 %67 to i32
%69 = sub nsw i32 %68, 48
%70 = load i16, i16* %8
%71 = sext i16 %70 to i64
%72 = getelementptr inbounds [251 x i8], [251 x i8]* %1, i64 0, i64 %71
%73 = load i8, i8* %72
%74 = sext i8 %73 to i32
%75 = sub nsw i32 %74, 48
%76 = mul nsw i32 %69, %75
%77 = load i16, i16* %12
%78 = sext i16 %77 to i32
%79 = add nsw i32 %76, %78
%80 = trunc i32 %79 to i16
store i16 %80, i16* %10
%81 = load i16, i16* %10
%82 = sext i16 %81 to i32
%83 = icmp eq i32 %82, 10
br i1 %83, label %84, label %88
84: ; preds = %63
%85 = load i16, i16* %13
%86 = sext i16 %85 to i64
%87 = getelementptr inbounds [502 x i8], [502 x i8]* %3, i64 0, i64 %86
store i8 0, i8* %87
store i16 1, i16* %12
br label %100
88: ; preds = %63
%89 = load i16, i16* %10
%90 = sext i16 %89 to i32
%91 = srem i32 %90, 10
%92 = trunc i32 %91 to i8
%93 = load i16, i16* %13
%94 = sext i16 %93 to i64
%95 = getelementptr inbounds [502 x i8], [502 x i8]* %3, i64 0, i64 %94
store i8 %92, i8* %95
%96 = load i16, i16* %10
%97 = sext i16 %96 to i32
%98 = sdiv i32 %97, 10
%99 = trunc i32 %98 to i16
store i16 %99, i16* %12
br label %100
100: ; preds = %88, %84
%101 = load i16, i16* %13
%102 = add i16 %101, 1
store i16 %102, i16* %13
br label %103
103: ; preds = %100
%104 = load i16, i16* %8
%105 = add i16 %104, -1
store i16 %105, i16* %8
br label %59
106: ; preds = %59
%107 = load i16, i16* %12
%108 = icmp ne i16 %107, 0
br i1 %108, label %109, label %116
109: ; preds = %106
%110 = load i16, i16* %12
%111 = trunc i16 %110 to i8
%112 = load i16, i16* %13
%113 = add i16 %112, 1
store i16 %113, i16* %13
%114 = sext i16 %112 to i64
%115 = getelementptr inbounds [502 x i8], [502 x i8]* %3, i64 0, i64 %114
store i8 %111, i8* %115
store i16 0, i16* %12
br label %116
116: ; preds = %109, %106
%117 = load i16, i16* %6
%118 = sext i16 %117 to i32
%119 = load i16, i16* %7
%120 = sext i16 %119 to i32
%121 = sub nsw i32 %118, %120
%122 = sub nsw i32 %121, 1
%123 = trunc i32 %122 to i16
store i16 %123, i16* %14
%124 = load i16, i16* %14
store i16 %124, i16* %8
br label %125
125: ; preds = %172, %116
%126 = load i16, i16* %8
%127 = sext i16 %126 to i32
%128 = load i16, i16* %13
%129 = sext i16 %128 to i32
%130 = load i16, i16* %14
%131 = sext i16 %130 to i32
%132 = add nsw i32 %129, %131
%133 = icmp slt i32 %127, %132
br i1 %133, label %134, label %175
134: ; preds = %125
%135 = load i16, i16* %8
%136 = sext i16 %135 to i64
%137 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 %136
%138 = load i8, i8* %137
%139 = sext i8 %138 to i32
%140 = load i16, i16* %8
%141 = sext i16 %140 to i32
%142 = load i16, i16* %14
%143 = sext i16 %142 to i32
%144 = sub nsw i32 %141, %143
%145 = sext i32 %144 to i64
%146 = getelementptr inbounds [502 x i8], [502 x i8]* %3, i64 0, i64 %145
%147 = load i8, i8* %146
%148 = sext i8 %147 to i32
%149 = add nsw i32 %139, %148
%150 = load i16, i16* %12
%151 = sext i16 %150 to i32
%152 = add nsw i32 %149, %151
%153 = trunc i32 %152 to i16
store i16 %153, i16* %11
%154 = load i16, i16* %11
%155 = sext i16 %154 to i32
%156 = icmp sgt i32 %155, 9
br i1 %156, label %157, label %165
157: ; preds = %134
%158 = load i16, i16* %11
%159 = sext i16 %158 to i32
%160 = sub nsw i32 %159, 10
%161 = trunc i32 %160 to i8
%162 = load i16, i16* %8
%163 = sext i16 %162 to i64
%164 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 %163
store i8 %161, i8* %164
store i16 1, i16* %12
br label %171
165: ; preds = %134
%166 = load i16, i16* %11
%167 = trunc i16 %166 to i8
%168 = load i16, i16* %8
%169 = sext i16 %168 to i64
%170 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 %169
store i8 %167, i8* %170
store i16 0, i16* %12
br label %171
171: ; preds = %165, %157
br label %172
172: ; preds = %171
%173 = load i16, i16* %8
%174 = add i16 %173, 1
store i16 %174, i16* %8
br label %125
175: ; preds = %125
%176 = load i16, i16* %12
%177 = icmp ne i16 %176, 0
br i1 %177, label %178, label %185
178: ; preds = %175
%179 = load i16, i16* %12
%180 = trunc i16 %179 to i8
%181 = load i16, i16* %8
%182 = add i16 %181, 1
store i16 %182, i16* %8
%183 = sext i16 %181 to i64
%184 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 %183
store i8 %180, i8* %184
br label %185
185: ; preds = %178, %175
br label %186
186: ; preds = %185
%187 = load i16, i16* %7
%188 = add i16 %187, -1
store i16 %188, i16* %7
br label %50
189: ; preds = %50
store i16 0, i16* %13
%190 = load i16, i16* %8
%191 = sext i16 %190 to i32
%192 = sub nsw i32 %191, 1
%193 = trunc i32 %192 to i16
store i16 %193, i16* %7
br label %194
194: ; preds = %219, %189
%195 = load i16, i16* %7
%196 = sext i16 %195 to i32
%197 = icmp sge i32 %196, 0
br i1 %197, label %198, label %222
198: ; preds = %194
%199 = load i16, i16* %7
%200 = sext i16 %199 to i64
%201 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 %200
%202 = load i8, i8* %201
%203 = sext i8 %202 to i32
%204 = icmp ne i32 %203, 0
br i1 %204, label %205, label %206
205: ; preds = %198
store i16 1, i16* %13
br label %206
206: ; preds = %205, %198
%207 = load i16, i16* %13
%208 = icmp ne i16 %207, 0
br i1 %208, label %209, label %218
209: ; preds = %206
%210 = load i16, i16* %7
%211 = sext i16 %210 to i64
%212 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 %211
%213 = load i8, i8* %212
%214 = sext i8 %213 to i32
%215 = add nsw i32 %214, 48
%216 = trunc i32 %215 to i8
%217 = call i32 @putchar(i8 signext %216)
br label %218
218: ; preds = %209, %206
br label %219
219: ; preds = %218
%220 = load i16, i16* %7
%221 = add i16 %220, -1
store i16 %221, i16* %7
br label %194
222: ; preds = %194
%223 = load i16, i16* %13
%224 = icmp ne i16 %223, 0
br i1 %224, label %227, label %225
225: ; preds = %222
%226 = call i32 @putchar(i8 signext 48)
br label %227
227: ; preds = %225, %222
%228 = call i32 @putchar(i8 signext 10)
br label %15
229: ; preds = %15
ret void
}

LLVM IR (-O2):
define void @main() {
%1 = alloca [251 x i8]
%2 = alloca [251 x i8]
%3 = alloca [502 x i8]
%4 = alloca [502 x i8]
%5 = getelementptr inbounds [251 x i8], [251 x i8]* %1, i64 0, i64 0
%6 = getelementptr inbounds [251 x i8], [251 x i8]* %2, i64 0, i64 0
%7 = getelementptr inbounds [502 x i8], [502 x i8]* %3, i64 0, i64 0
%8 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 0
%9 = call i64 @gets(i8* %5)
%10 = icmp eq i64 %9, 0
br i1 %10, label %236, label %11
11: ; preds = %0, %232
%12 = phi i16 [ %128, %232 ], [ undef, %0 ]
%13 = call i64 @gets(i8* %6)
%14 = call signext i16 @strlen(i8* %5)
%15 = call signext i16 @strlen(i8* %6)
%16 = sext i16 %14 to i32
%17 = sext i16 %15 to i32
%18 = add nsw i32 %17, %16
%19 = icmp sgt i32 %18, 0
br i1 %19, label %20, label %109
20: ; preds = %11
%21 = icmp ult i32 %18, 8
br i1 %21, label %107, label %22
22: ; preds = %20
%23 = add nsw i32 %17, -1
%24 = add nsw i32 %23, %16
%25 = trunc i32 %24 to i16
%26 = icmp ugt i16 %25, 32766
%27 = icmp ugt i32 %24, 32767
%28 = or i1 %26, %27
br i1 %28, label %107, label %29
29: ; preds = %22
%30 = icmp ult i32 %18, 32
br i1 %30, label %90, label %31
31: ; preds = %29
%32 = and i32 %18, -32
%33 = add nsw i32 %32, -32
%34 = lshr exact i32 %33, 5
%35 = add nuw nsw i32 %34, 1
%36 = and i32 %35, 1
%37 = icmp eq i32 %33, 0
br i1 %37, label %69, label %38
38: ; preds = %31
%39 = and i32 %35, 268435454
br label %40
40: ; preds = %40, %38
%41 = phi i32 [ 0, %38 ], [ %66, %40 ]
%42 = phi i32 [ 0, %38 ], [ %67, %40 ]
%43 = zext i32 %41 to i64
%44 = shl i64 %43, 48
%45 = ashr exact i64 %44, 48
%46 = getelementptr inbounds [502 x i8], [502 x i8]* %3, i64 0, i64 %45
%47 = bitcast i8* %46 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %47
%48 = getelementptr inbounds i8, i8* %46, i64 16
%49 = bitcast i8* %48 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %49
%50 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 %45
%51 = bitcast i8* %50 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %51
%52 = getelementptr inbounds i8, i8* %50, i64 16
%53 = bitcast i8* %52 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %53
%54 = or i32 %41, 32
%55 = zext i32 %54 to i64
%56 = shl i64 %55, 48
%57 = ashr exact i64 %56, 48
%58 = getelementptr inbounds [502 x i8], [502 x i8]* %3, i64 0, i64 %57
%59 = bitcast i8* %58 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %59
%60 = getelementptr inbounds i8, i8* %58, i64 16
%61 = bitcast i8* %60 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %61
%62 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 %57
%63 = bitcast i8* %62 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %63
%64 = getelementptr inbounds i8, i8* %62, i64 16
%65 = bitcast i8* %64 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %65
%66 = add nuw i32 %41, 64
%67 = add i32 %42, 2
%68 = icmp eq i32 %67, %39
br i1 %68, label %69, label %40
69: ; preds = %40, %31
%70 = phi i32 [ 0, %31 ], [ %66, %40 ]
%71 = icmp eq i32 %36, 0
br i1 %71, label %84, label %72
72: ; preds = %69
%73 = zext i32 %70 to i64
%74 = shl i64 %73, 48
%75 = ashr exact i64 %74, 48
%76 = getelementptr inbounds [502 x i8], [502 x i8]* %3, i64 0, i64 %75
%77 = bitcast i8* %76 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %77
%78 = getelementptr inbounds i8, i8* %76, i64 16
%79 = bitcast i8* %78 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %79
%80 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 %75
%81 = bitcast i8* %80 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %81
%82 = getelementptr inbounds i8, i8* %80, i64 16
%83 = bitcast i8* %82 to <16 x i8>*
store <16 x i8> zeroinitializer, <16 x i8>* %83
br label %84
84: ; preds = %69, %72
%85 = icmp eq i32 %18, %32
br i1 %85, label %109, label %86
86: ; preds = %84
%87 = trunc i32 %32 to i16
%88 = and i32 %18, 24
%89 = icmp eq i32 %88, 0
br i1 %89, label %107, label %90
90: ; preds = %29, %86
%91 = phi i32 [ %32, %86 ], [ 0, %29 ]
%92 = and i32 %18, -8
%93 = trunc i32 %92 to i16
br label %94
94: ; preds = %94, %90
%95 = phi i32 [ %91, %90 ], [ %103, %94 ]
%96 = zext i32 %95 to i64
%97 = shl i64 %96, 48
%98 = ashr exact i64 %97, 48
%99 = getelementptr inbounds [502 x i8], [502 x i8]* %3, i64 0, i64 %98
%100 = bitcast i8* %99 to <8 x i8>*
store <8 x i8> zeroinitializer, <8 x i8>* %100
%101 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 %98
%102 = bitcast i8* %101 to <8 x i8>*
store <8 x i8> zeroinitializer, <8 x i8>* %102
%103 = add nuw i32 %95, 8
%104 = icmp eq i32 %103, %92
br i1 %104, label %105, label %94
105: ; preds = %94
%106 = icmp eq i32 %18, %92
br i1 %106, label %109, label %107
107: ; preds = %22, %20, %86, %105
%108 = phi i16 [ 0, %20 ], [ 0, %22 ], [ %87, %86 ], [ %93, %105 ]
br label %119
109: ; preds = %119, %84, %105, %11
%110 = add i16 %15, -1
%111 = icmp sgt i16 %110, -1
br i1 %111, label %112, label %127
112: ; preds = %109
%113 = add i16 %14, -1
%114 = icmp sgt i16 %113, -1
%115 = zext i16 %110 to i64
%116 = add i16 %14, 1
%117 = sext i16 %14 to i64
%118 = getelementptr inbounds [502 x i8], [502 x i8]* %3, i64 0, i64 %117
br label %131
119: ; preds = %107, %119
%120 = phi i16 [ %124, %119 ], [ %108, %107 ]
%121 = sext i16 %120 to i64
%122 = getelementptr inbounds [502 x i8], [502 x i8]* %3, i64 0, i64 %121
store i8 0, i8* %122
%123 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 %121
store i8 0, i8* %123
%124 = add i16 %120, 1
%125 = sext i16 %124 to i32
%126 = icmp sgt i32 %18, %125
br i1 %126, label %119, label %109
127: ; preds = %207, %109
%128 = phi i16 [ %12, %109 ], [ %208, %207 ]
%129 = add i16 %128, -1
%130 = icmp sgt i16 %129, -1
br i1 %130, label %213, label %230
131: ; preds = %112, %207
%132 = phi i64 [ %115, %112 ], [ %209, %207 ]
%133 = phi i16 [ %15, %112 ], [ %212, %207 ]
br i1 %114, label %136, label %134
134: ; preds = %131
%135 = sub i16 %15, %133
br label %207
136: ; preds = %131
%137 = getelementptr inbounds [251 x i8], [251 x i8]* %2, i64 0, i64 %132
%138 = load i8, i8* %137
%139 = sext i8 %138 to i16
%140 = add nsw i16 %139, -48
br label %141
141: ; preds = %136, %162
%142 = phi i16 [ %113, %136 ], [ %165, %162 ]
%143 = phi i16 [ 0, %136 ], [ %164, %162 ]
%144 = phi i16 [ 0, %136 ], [ %163, %162 ]
%145 = zext i16 %142 to i64
%146 = getelementptr inbounds [251 x i8], [251 x i8]* %1, i64 0, i64 %145
%147 = load i8, i8* %146
%148 = sext i8 %147 to i16
%149 = add nsw i16 %148, -48
%150 = mul nsw i16 %149, %140
%151 = add i16 %150, %144
%152 = icmp eq i16 %151, 10
br i1 %152, label %153, label %156
153: ; preds = %141
%154 = sext i16 %143 to i64
%155 = getelementptr inbounds [502 x i8], [502 x i8]* %3, i64 0, i64 %154
store i8 0, i8* %155
br label %162
156: ; preds = %141
%157 = srem i16 %151, 10
%158 = trunc i16 %157 to i8
%159 = sext i16 %143 to i64
%160 = getelementptr inbounds [502 x i8], [502 x i8]* %3, i64 0, i64 %159
store i8 %158, i8* %160
%161 = sdiv i16 %151, 10
br label %162
162: ; preds = %156, %153
%163 = phi i16 [ 1, %153 ], [ %161, %156 ]
%164 = add nuw i16 %143, 1
%165 = add i16 %142, -1
%166 = icmp eq i16 %164, %14
br i1 %166, label %167, label %141
167: ; preds = %162
%168 = icmp eq i16 %163, 0
br i1 %168, label %171, label %169
169: ; preds = %167
%170 = trunc i16 %163 to i8
store i8 %170, i8* %118
br label %171
171: ; preds = %169, %167
%172 = phi i16 [ %116, %169 ], [ %14, %167 ]
%173 = sub i16 %15, %133
%174 = sext i16 %172 to i32
%175 = sext i16 %173 to i32
%176 = add nsw i32 %174, %175
%177 = icmp sgt i16 %172, 0
br i1 %177, label %178, label %207
178: ; preds = %171, %178
%179 = phi i32 [ %199, %178 ], [ %175, %171 ]
%180 = phi i16 [ %197, %178 ], [ 0, %171 ]
%181 = trunc i32 %179 to i16
%182 = sext i32 %179 to i64
%183 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 %182
%184 = load i8, i8* %183
%185 = sext i8 %184 to i16
%186 = sub nsw i32 %179, %175
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds [502 x i8], [502 x i8]* %3, i64 0, i64 %187
%189 = load i8, i8* %188
%190 = sext i8 %189 to i16
%191 = add nsw i16 %180, %185
%192 = add nsw i16 %191, %190
%193 = icmp sgt i16 %192, 9
%194 = trunc i16 %192 to i8
%195 = add i8 %194, -10
%196 = select i1 %193, i8 %195, i8 %194
%197 = zext i1 %193 to i16
store i8 %196, i8* %183
%198 = add i16 %181, 1
%199 = sext i16 %198 to i32
%200 = icmp sgt i32 %176, %199
br i1 %200, label %178, label %201
201: ; preds = %178
%202 = trunc i32 %179 to i16
br i1 %193, label %203, label %207
203: ; preds = %201
%204 = add i16 %202, 2
%205 = sext i16 %198 to i64
%206 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 %205
store i8 1, i8* %206
br label %207
207: ; preds = %134, %171, %201, %203
%208 = phi i16 [ %204, %203 ], [ %198, %201 ], [ %135, %134 ], [ %173, %171 ]
%209 = add nsw i64 %132, -1
%210 = and i64 %209, 32768
%211 = icmp eq i64 %210, 0
%212 = trunc i64 %132 to i16
br i1 %211, label %131, label %127
213: ; preds = %127, %225
%214 = phi i16 [ %226, %225 ], [ %129, %127 ]
%215 = phi i16 [ %220, %225 ], [ 0, %127 ]
%216 = zext i16 %214 to i64
%217 = getelementptr inbounds [502 x i8], [502 x i8]* %4, i64 0, i64 %216
%218 = load i8, i8* %217
%219 = icmp eq i8 %218, 0
%220 = select i1 %219, i16 %215, i16 1
%221 = icmp eq i16 %220, 0
br i1 %221, label %225, label %222
222: ; preds = %213
%223 = add i8 %218, 48
%224 = call i32 @putchar(i8 signext %223)
br label %225
225: ; preds = %213, %222
%226 = add i16 %214, -1
%227 = icmp sgt i16 %226, -1
br i1 %227, label %213, label %228
228: ; preds = %225
%229 = icmp eq i16 %220, 0
br i1 %229, label %230, label %232
230: ; preds = %127, %228
%231 = call i32 @putchar(i8 signext 48)
br label %232
232: ; preds = %230, %228
%233 = call i32 @putchar(i8 signext 10)
%234 = call i64 @gets(i8* %5)
%235 = icmp eq i64 %234, 0
br i1 %235, label %236, label %11
236: ; preds = %232, %0
ret void
}