int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  char last[n + 1], encrypted[m + 1], plain[m + 1];
  plain[m] = 0;
  scanf("%s", last);
  scanf("%s", encrypted);
  for (int i = 0; i < n; i++)
    plain[m - 1 - i] = last[n - 1 - i];
  for (int i = m - n - 1; i >= 0; i--)
    plain[i] =
        (char)(((26 + (((encrypted[i + n]) - 'a') - ((plain[n + i]) - 'a'))) %
                26) +
               'a');
  printf("%s\n", plain);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xeca(%rip),%rdi
xor    %eax,%eax
lea    -0x8(%rbp),%rsi
lea    -0xc(%rbp),%rdx
call   1040 <scanf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %rsp,%rcx
mov    %rcx,-0x18(%rbp)
mov    %rax,%rcx
add    $0xf,%rcx
and    $0xfffffffffffffff0,%rcx
mov    %rsp,%rsi
sub    %rcx,%rsi
mov    %rsi,-0x50(%rbp)
mov    %rsi,%rsp
mov    %rax,-0x20(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %rax,%rdx
add    $0xf,%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x40(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x28(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,%ecx
mov    %rcx,%rdx
add    $0xf,%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rax
sub    %rdx,%rax
mov    %rax,-0x48(%rbp)
mov    %rax,%rsp
mov    %rcx,-0x30(%rbp)
movslq -0xc(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
lea    0xe43(%rip),%rdi
mov    $0x0,%al
call   1040 <scanf@plt>
mov    -0x40(%rbp),%rsi
lea    0xe31(%rip),%rdi
mov    $0x0,%al
call   1040 <scanf@plt>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1223 <main+0x103>
mov    -0x48(%rbp),%rax
mov    -0x50(%rbp),%rcx
mov    -0x8(%rbp),%edx
sub    $0x1,%edx
sub    -0x34(%rbp),%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,1),%dl
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
sub    -0x34(%rbp),%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11e3 <main+0xc3>
mov    -0xc(%rbp),%eax
sub    -0x8(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x0,-0x38(%rbp)
jl     128a <main+0x16a>
mov    -0x48(%rbp),%rcx
mov    -0x40(%rbp),%rax
mov    -0x38(%rbp),%edx
add    -0x8(%rbp),%edx
movslq %edx,%rdx
movsbl (%rax,%rdx,1),%eax
sub    $0x61,%eax
mov    -0x8(%rbp),%edx
add    -0x38(%rbp),%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    $0x61,%ecx
sub    %ecx,%eax
add    $0x1a,%eax
mov    $0x1a,%ecx
cltd
idiv   %ecx
mov    -0x48(%rbp),%rax
add    $0x61,%edx
movslq -0x38(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x38(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x38(%rbp)
jmp    122f <main+0x10f>
mov    -0x48(%rbp),%rsi
lea    0xd74(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,%rsp
mov    -0x4(%rbp),%eax
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
lea    0xf18(%rip),%rdi
lea    -0x30(%rbp),%rsi
lea    -0x2c(%rbp),%rdx
xor    %eax,%eax
call   1040 <scanf@plt>
mov    %rsp,%r13
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %rsp,%r15
add    $0xf,%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%r15
mov    %r15,%rsp
movslq -0x2c(%rbp),%rax
lea    0x1(%rax),%ecx
mov    %rsp,%rbx
add    $0xf,%rcx
and    $0xfffffffffffffff0,%rcx
sub    %rcx,%rbx
mov    %rbx,%rsp
mov    %rsp,%r14
sub    %rcx,%r14
mov    %r14,%rsp
movb   $0x0,(%r14,%rax,1)
lea    0xec8(%rip),%r12
mov    %r12,%rdi
mov    %r15,%rsi
xor    %eax,%eax
call   1040 <scanf@plt>
mov    %r12,%rdi
mov    %rbx,-0x40(%rbp)
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <scanf@plt>
movslq -0x30(%rbp),%r12
mov    %r12d,%r8d
mov    -0x2c(%rbp),%r10d
test   %r12,%r12
jle    1254 <main+0x134>
cmp    $0x8,%r8d
jae    1315 <main+0x1f5>
xor    %r11d,%r11d
mov    %r11,%rax
not    %rax
test   $0x1,%r8b
je     11f7 <main+0xd7>
mov    %r11d,%ecx
not    %ecx
lea    (%r8,%rcx,1),%edx
movslq %edx,%rdx
mov    (%r15,%rdx,1),%dl
add    %r10d,%ecx
movslq %ecx,%rcx
mov    %dl,(%r14,%rcx,1)
or     $0x1,%r11
add    %r8,%rax
je     1254 <main+0x134>
mov    %r11d,%ecx
mov    %r12d,%r9d
sub    %r11d,%r9d
add    $0xfffffffe,%r9d
mov    %r10d,%edi
sub    %r11d,%edi
add    $0xfffffffe,%edi
sub    %r8,%r11
not    %ecx
lea    (%rcx,%r12,1),%eax
add    %r10d,%ecx
xor    %esi,%esi
lea    (%rax,%rsi,1),%ebx
movslq %ebx,%rbx
movzbl (%r15,%rbx,1),%ebx
lea    (%rcx,%rsi,1),%edx
movslq %edx,%rdx
mov    %bl,(%r14,%rdx,1)
lea    (%r9,%rsi,1),%edx
movslq %edx,%rdx
movzbl (%r15,%rdx,1),%edx
lea    (%rdi,%rsi,1),%ebx
movslq %ebx,%rbx
mov    %dl,(%r14,%rbx,1)
add    $0xfffffffffffffffe,%rsi
cmp    %rsi,%r11
jne    1220 <main+0x100>
not    %r8d
add    %r8d,%r10d
mov    -0x40(%rbp),%rbx
js     12f9 <main+0x1d9>
mov    %r10d,%edi
cmp    $0x7,%r10d
jb     12a8 <main+0x188>
lea    (%r14,%rdi,1),%rax
cmp    %rax,%r14
ja     12a8 <main+0x188>
lea    (%r12,%rdi,1),%rcx
lea    (%r14,%rcx,1),%rdx
lea    (%r14,%r12,1),%rax
cmp    %rdx,%rax
ja     12a8 <main+0x188>
add    %r14,%rcx
add    $0x1,%rcx
cmp    %rcx,%r14
jae    1361 <main+0x241>
lea    (%rdi,%r14,1),%rcx
add    $0x1,%rcx
cmp    %rcx,%rax
jae    1361 <main+0x241>
mov    %rdi,%rdx
add    %r12,%rbx
add    %r14,%r12
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsbl (%rbx,%rdx,1),%eax
movsbl (%r12,%rdx,1),%ecx
sub    %ecx,%eax
add    $0x1a,%eax
movswl %ax,%ecx
imul   $0x4ec5,%ecx,%ecx
mov    %ecx,%esi
shr    $0x1f,%esi
shr    $0x13,%ecx
add    %esi,%ecx
lea    (%rcx,%rcx,4),%esi
lea    (%rsi,%rsi,4),%esi
add    %ecx,%esi
sub    %esi,%eax
add    $0x61,%al
mov    %edx,%ecx
mov    %al,(%r14,%rcx,1)
add    $0xffffffffffffffff,%rdx
jb     12c0 <main+0x1a0>
mov    %r14,%rdi
call   1030 <puts@plt>
mov    %r13,%rsp
xor    %eax,%eax
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
lea    -0x1(%r8),%rdi
lea    -0x1(%r12),%eax
mov    %eax,%ecx
sub    %edi,%ecx
xor    %r11d,%r11d
cmp    %eax,%ecx
jg     11cd <main+0xad>
mov    %rdi,%rax
shr    $0x20,%rax
jne    11cd <main+0xad>
lea    -0x1(%r10),%ecx
mov    %ecx,%edx
sub    %edi,%edx
cmp    %ecx,%edx
jg     11cd <main+0xad>
test   %rax,%rax
jne    11cd <main+0xad>
cmp    $0x10,%r12d
jae    1381 <main+0x261>
xor    %r11d,%r11d
jmp    142b <main+0x30b>
lea    0x1(%rdi),%r8
movabs $0x1fffffff0,%r9
cmp    $0xf,%r10d
jae    1479 <main+0x359>
xor    %r11d,%r11d
jmp    160c <main+0x4ec>
mov    %r8d,%r11d
and    $0xfffffff0,%r11d
lea    -0x10(%r11),%rax
mov    %rax,%r9
shr    $0x4,%r9
add    $0x1,%r9
test   %rax,%rax
je     170c <main+0x5ec>
mov    %r13,-0x38(%rbp)
mov    %r9,%rax
and    $0xfffffffffffffffe,%rax
mov    $0x1,%edx
movslq %edi,%rdi
movups -0xf(%r15,%rdi,1),%xmm0
movslq %ecx,%rcx
movups %xmm0,-0xf(%r14,%rcx,1)
lea    -0x1(%rdx),%esi
xor    $0xffffffef,%esi
lea    (%r12,%rsi,1),%r13d
movslq %r13d,%rbx
movdqu -0xf(%r15,%rbx,1),%xmm0
add    %r10d,%esi
movslq %esi,%rsi
movdqu %xmm0,-0xf(%r14,%rsi,1)
add    $0x20,%edx
add    $0xffffffe0,%ecx
add    $0xffffffe0,%edi
add    $0xfffffffffffffffe,%rax
jne    13b0 <main+0x290>
neg    %edx
mov    -0x38(%rbp),%r13
test   $0x1,%r9b
je     1418 <main+0x2f8>
lea    (%r8,%rdx,1),%eax
cltq
movdqu -0xf(%r15,%rax,1),%xmm0
add    %r10d,%edx
movslq %edx,%rax
movdqu %xmm0,-0xf(%r14,%rax,1)
cmp    %r8,%r11
je     1254 <main+0x134>
test   $0x8,%r8b
je     11cd <main+0xad>
mov    %r11,%rax
mov    %r8d,%r11d
and    $0xfffffff8,%r11d
mov    %rax,%rcx
sub    %r11,%rcx
not    %eax
lea    (%rax,%r10,1),%edx
add    %r8d,%eax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cltq
mov    -0x7(%r15,%rax,1),%rsi
movslq %edx,%rdx
mov    %rsi,-0x7(%r14,%rdx,1)
add    $0xfffffff8,%edx
add    $0xfffffff8,%eax
add    $0x8,%rcx
jne    1450 <main+0x330>
cmp    %r8,%r11
jne    11cd <main+0xad>
jmp    1254 <main+0x134>
mov    %r8,%r11
and    %r9,%r11
lea    (%r14,%r12,1),%r10
add    $0xfffffffffffffff1,%r10
lea    -0xf(%rbx,%r12,1),%rdx
pxor   %xmm0,%xmm0
movdqa 0xb68(%rip),%xmm1
movdqa 0xb70(%rip),%xmm2
movdqa 0xb78(%rip),%xmm3
movdqa 0xb7f(%rip),%xmm8
mov    %rdi,%rsi
mov    %r11,%rcx
nopw   0x0(%rax,%rax,1)
movdqu (%rdx,%rsi,1),%xmm5
movdqa %xmm5,%xmm6
punpcklbw %xmm0,%xmm6
pshufd $0x4e,%xmm6,%xmm6
pshuflw $0x1b,%xmm6,%xmm6
pshufhw $0x1b,%xmm6,%xmm6
punpckhbw %xmm0,%xmm5
pshufd $0x4e,%xmm5,%xmm5
pshuflw $0x1b,%xmm5,%xmm5
pshufhw $0x1b,%xmm5,%xmm7
packuswb %xmm6,%xmm7
punpcklbw %xmm7,%xmm5
psraw  $0x8,%xmm5
punpckhbw %xmm7,%xmm6
psraw  $0x8,%xmm6
movdqu (%r10,%rsi,1),%xmm4
movdqa %xmm4,%xmm7
punpcklbw %xmm0,%xmm7
pshufd $0x4e,%xmm7,%xmm7
pshuflw $0x1b,%xmm7,%xmm7
pshufhw $0x1b,%xmm7,%xmm7
punpckhbw %xmm0,%xmm4
pshufd $0x4e,%xmm4,%xmm4
pshuflw $0x1b,%xmm4,%xmm4
pshufhw $0x1b,%xmm4,%xmm4
packuswb %xmm7,%xmm4
punpcklbw %xmm4,%xmm7
psraw  $0x8,%xmm7
psubw  %xmm7,%xmm5
punpckhbw %xmm4,%xmm4
psraw  $0x8,%xmm4
psubw  %xmm4,%xmm6
paddw  %xmm1,%xmm6
paddw  %xmm1,%xmm5
movdqa %xmm5,%xmm4
pmulhw %xmm2,%xmm4
movdqa %xmm4,%xmm7
psrlw  $0xf,%xmm7
psrlw  $0x3,%xmm4
paddw  %xmm7,%xmm4
pmullw %xmm1,%xmm4
psubw  %xmm4,%xmm5
movdqa %xmm6,%xmm4
pmulhw %xmm2,%xmm4
movdqa %xmm4,%xmm7
psrlw  $0xf,%xmm7
psrlw  $0x3,%xmm4
paddw  %xmm7,%xmm4
pmullw %xmm1,%xmm4
psubw  %xmm4,%xmm6
pand   %xmm3,%xmm6
pand   %xmm3,%xmm5
packuswb %xmm6,%xmm5
paddb  %xmm8,%xmm5
mov    %esi,%eax
movdqa %xmm5,%xmm4
punpcklbw %xmm0,%xmm4
pshufd $0x4e,%xmm4,%xmm4
pshuflw $0x1b,%xmm4,%xmm4
pshufhw $0x1b,%xmm4,%xmm4
punpckhbw %xmm0,%xmm5
pshufd $0x4e,%xmm5,%xmm5
pshuflw $0x1b,%xmm5,%xmm5
pshufhw $0x1b,%xmm5,%xmm5
packuswb %xmm4,%xmm5
movdqu %xmm5,-0xf(%r14,%rax,1)
add    $0xfffffffffffffff0,%rsi
add    $0xfffffffffffffff0,%rcx
jne    14c0 <main+0x3a0>
cmp    %r11,%r8
je     12f9 <main+0x1d9>
test   $0x8,%r8b
jne    160c <main+0x4ec>
sub    %r11,%rdi
jmp    12a8 <main+0x188>
add    $0x8,%r9
and    %r8,%r9
mov    %rdi,%rdx
sub    %r9,%rdx
lea    (%r14,%r12,1),%rcx
add    $0xfffffffffffffff9,%rcx
sub    %r11,%rdi
sub    %r9,%r11
lea    (%rbx,%r12,1),%rsi
add    $0xfffffffffffffff9,%rsi
movdqa 0x9c9(%rip),%xmm0
movdqa 0x9d1(%rip),%xmm1
movdqa 0x9d9(%rip),%xmm2
movdqa 0x9f1(%rip),%xmm3
pxor   %xmm4,%xmm4
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movq   (%rsi,%rdi,1),%xmm5
punpcklbw %xmm5,%xmm5
pshufd $0x4e,%xmm5,%xmm5
pshuflw $0x1b,%xmm5,%xmm5
pshufhw $0x1b,%xmm5,%xmm5
psraw  $0x8,%xmm5
movq   (%rcx,%rdi,1),%xmm6
punpcklbw %xmm6,%xmm6
pshufd $0x4e,%xmm6,%xmm6
pshuflw $0x1b,%xmm6,%xmm6
pshufhw $0x1b,%xmm6,%xmm6
psraw  $0x8,%xmm6
psubw  %xmm6,%xmm5
paddw  %xmm0,%xmm5
movdqa %xmm5,%xmm6
pmulhw %xmm1,%xmm6
movdqa %xmm6,%xmm7
psrlw  $0xf,%xmm7
psrlw  $0x3,%xmm6
paddw  %xmm7,%xmm6
pmullw %xmm0,%xmm6
psubw  %xmm6,%xmm5
pand   %xmm2,%xmm5
packuswb %xmm5,%xmm5
paddb  %xmm3,%xmm5
punpcklbw %xmm4,%xmm5
mov    %edi,%eax
pshufd $0x4e,%xmm5,%xmm5
pshuflw $0x1b,%xmm5,%xmm5
pshufhw $0x1b,%xmm5,%xmm5
packuswb %xmm5,%xmm5
movq   %xmm5,-0x7(%r14,%rax,1)
add    $0xfffffffffffffff8,%rdi
add    $0x8,%r11
jne    1660 <main+0x540>
cmp    %r9,%r8
jne    12ab <main+0x18b>
jmp    12f9 <main+0x1d9>
mov    $0xffffffff,%edx
test   $0x1,%r9b
jne    13fe <main+0x2de>
jmp    1418 <main+0x2f8>

LLVM IR (-O0):
@.str = [6 x i8] c"%d %d\00"
@.str.1 = [3 x i8] c"%s\00"
@.str.2 = [4 x i8] c"%s\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i8*
%5 = alloca i64
%6 = alloca i64
%7 = alloca i64
%8 = alloca i32
%9 = alloca i32
store i32 0, i32* %1
%10 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0), i32* %2, i32* %3)
%11 = load i32, i32* %2
%12 = add nsw i32 %11, 1
%13 = zext i32 %12 to i64
%14 = call i8* @llvm.stacksave()
store i8* %14, i8** %4
%15 = alloca i8, i64 %13
store i64 %13, i64* %5
%16 = load i32, i32* %3
%17 = add nsw i32 %16, 1
%18 = zext i32 %17 to i64
%19 = alloca i8, i64 %18
store i64 %18, i64* %6
%20 = load i32, i32* %3
%21 = add nsw i32 %20, 1
%22 = zext i32 %21 to i64
%23 = alloca i8, i64 %22
store i64 %22, i64* %7
%24 = load i32, i32* %3
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds i8, i8* %23, i64 %25
store i8 0, i8* %26
%27 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* %15)
%28 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* %19)
store i32 0, i32* %8
br label %29
29: ; preds = %47, %0
%30 = load i32, i32* %8
%31 = load i32, i32* %2
%32 = icmp slt i32 %30, %31
br i1 %32, label %33, label %50
33: ; preds = %29
%34 = load i32, i32* %2
%35 = sub nsw i32 %34, 1
%36 = load i32, i32* %8
%37 = sub nsw i32 %35, %36
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i8, i8* %15, i64 %38
%40 = load i8, i8* %39
%41 = load i32, i32* %3
%42 = sub nsw i32 %41, 1
%43 = load i32, i32* %8
%44 = sub nsw i32 %42, %43
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds i8, i8* %23, i64 %45
store i8 %40, i8* %46
br label %47
47: ; preds = %33
%48 = load i32, i32* %8
%49 = add nsw i32 %48, 1
store i32 %49, i32* %8
br label %29
50: ; preds = %29
%51 = load i32, i32* %3
%52 = load i32, i32* %2
%53 = sub nsw i32 %51, %52
%54 = sub nsw i32 %53, 1
store i32 %54, i32* %9
br label %55
55: ; preds = %83, %50
%56 = load i32, i32* %9
%57 = icmp sge i32 %56, 0
br i1 %57, label %58, label %86
58: ; preds = %55
%59 = load i32, i32* %9
%60 = load i32, i32* %2
%61 = add nsw i32 %59, %60
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds i8, i8* %19, i64 %62
%64 = load i8, i8* %63
%65 = sext i8 %64 to i32
%66 = sub nsw i32 %65, 97
%67 = load i32, i32* %2
%68 = load i32, i32* %9
%69 = add nsw i32 %67, %68
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds i8, i8* %23, i64 %70
%72 = load i8, i8* %71
%73 = sext i8 %72 to i32
%74 = sub nsw i32 %73, 97
%75 = sub nsw i32 %66, %74
%76 = add nsw i32 26, %75
%77 = srem i32 %76, 26
%78 = add nsw i32 %77, 97
%79 = trunc i32 %78 to i8
%80 = load i32, i32* %9
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds i8, i8* %23, i64 %81
store i8 %79, i8* %82
br label %83
83: ; preds = %58
%84 = load i32, i32* %9
%85 = add nsw i32 %84, -1
store i32 %85, i32* %9
br label %55
86: ; preds = %55
%87 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0), i8* %23)
store i32 0, i32* %1
%88 = load i8*, i8** %4
%89 = load i32, i32* %1
ret i32 %89
}

LLVM IR (-O2):
@.str = [6 x i8] c"%d %d\00"
@.str.1 = [3 x i8] c"%s\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = bitcast i32* %1 to i8*
%4 = bitcast i32* %2 to i8*
%5 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0), i32* %1, i32* %2)
%6 = load i32, i32* %1
%7 = add nsw i32 %6, 1
%8 = zext i32 %7 to i64
%9 = call i8* @llvm.stacksave()
%10 = alloca i8, i64 %8
%11 = load i32, i32* %2
%12 = add nsw i32 %11, 1
%13 = zext i32 %12 to i64
%14 = alloca i8, i64 %13
%15 = alloca i8, i64 %13
%16 = sext i32 %11 to i64
%17 = getelementptr inbounds i8, i8* %15, i64 %16
store i8 0, i8* %17
%18 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* %10)
%19 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* %14)
%20 = load i32, i32* %1
%21 = icmp sgt i32 %20, 0
%22 = load i32, i32* %2
br i1 %21, label %23, label %149
23: ; preds = %0
%24 = zext i32 %20 to i64
%25 = icmp ult i32 %20, 8
br i1 %25, label %129, label %26
26: ; preds = %23
%27 = add nsw i64 %24, -1
%28 = add i32 %20, -1
%29 = trunc i64 %27 to i32
%30 = sub i32 %28, %29
%31 = icmp sgt i32 %30, %28
%32 = icmp ugt i64 %27, 4294967295
%33 = or i1 %31, %32
%34 = add i32 %22, -1
%35 = trunc i64 %27 to i32
%36 = sub i32 %34, %35
%37 = icmp sgt i32 %36, %34
%38 = icmp ugt i64 %27, 4294967295
%39 = or i1 %37, %38
%40 = or i1 %33, %39
br i1 %40, label %129, label %41
41: ; preds = %26
%42 = icmp ult i32 %20, 16
br i1 %42, label %107, label %43
43: ; preds = %41
%44 = and i64 %24, 4294967280
%45 = add nsw i64 %44, -16
%46 = lshr exact i64 %45, 4
%47 = add nuw nsw i64 %46, 1
%48 = and i64 %47, 1
%49 = icmp eq i64 %45, 0
br i1 %49, label %87, label %50
50: ; preds = %43
%51 = and i64 %47, 2305843009213693950
%52 = getelementptr inbounds i8, i8* %10, i64 -15
%53 = getelementptr inbounds i8, i8* %15, i64 -15
%54 = getelementptr inbounds i8, i8* %10, i64 -15
%55 = getelementptr inbounds i8, i8* %15, i64 -15
br label %56
56: ; preds = %56, %50
%57 = phi i64 [ 0, %50 ], [ %81, %56 ]
%58 = phi i64 [ 0, %50 ], [ %82, %56 ]
%59 = trunc i64 %57 to i32
%60 = xor i32 %59, -1
%61 = add i32 %20, %60
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds i8, i8* %52, i64 %62
%64 = bitcast i8* %63 to <16 x i8>*
%65 = load <16 x i8>, <16 x i8>* %64
%66 = add i32 %22, %60
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds i8, i8* %53, i64 %67
%69 = bitcast i8* %68 to <16 x i8>*
store <16 x i8> %65, <16 x i8>* %69
%70 = trunc i64 %57 to i32
%71 = xor i32 %70, -17
%72 = add i32 %20, %71
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds i8, i8* %54, i64 %73
%75 = bitcast i8* %74 to <16 x i8>*
%76 = load <16 x i8>, <16 x i8>* %75
%77 = add i32 %22, %71
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds i8, i8* %55, i64 %78
%80 = bitcast i8* %79 to <16 x i8>*
store <16 x i8> %76, <16 x i8>* %80
%81 = add nuw i64 %57, 32
%82 = add i64 %58, 2
%83 = icmp eq i64 %82, %51
br i1 %83, label %84, label %56
84: ; preds = %56
%85 = trunc i64 %81 to i32
%86 = xor i32 %85, -1
br label %87
87: ; preds = %84, %43
%88 = phi i32 [ -1, %43 ], [ %86, %84 ]
%89 = icmp eq i64 %48, 0
br i1 %89, label %102, label %90
90: ; preds = %87
%91 = add i32 %20, %88
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds i8, i8* %10, i64 -15
%94 = getelementptr inbounds i8, i8* %93, i64 %92
%95 = bitcast i8* %94 to <16 x i8>*
%96 = load <16 x i8>, <16 x i8>* %95
%97 = add i32 %22, %88
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds i8, i8* %15, i64 -15
%100 = getelementptr inbounds i8, i8* %99, i64 %98
%101 = bitcast i8* %100 to <16 x i8>*
store <16 x i8> %96, <16 x i8>* %101
br label %102
102: ; preds = %87, %90
%103 = icmp eq i64 %44, %24
br i1 %103, label %149, label %104
104: ; preds = %102
%105 = and i64 %24, 8
%106 = icmp eq i64 %105, 0
br i1 %106, label %129, label %107
107: ; preds = %41, %104
%108 = phi i64 [ %44, %104 ], [ 0, %41 ]
%109 = and i64 %24, 4294967288
%110 = getelementptr inbounds i8, i8* %10, i64 -7
%111 = getelementptr inbounds i8, i8* %15, i64 -7
br label %112
112: ; preds = %112, %107
%113 = phi i64 [ %108, %107 ], [ %125, %112 ]
%114 = trunc i64 %113 to i32
%115 = xor i32 %114, -1
%116 = add i32 %20, %115
%117 = sext i32 %116 to i64
%118 = getelementptr inbounds i8, i8* %110, i64 %117
%119 = bitcast i8* %118 to <8 x i8>*
%120 = load <8 x i8>, <8 x i8>* %119
%121 = add i32 %22, %115
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds i8, i8* %111, i64 %122
%124 = bitcast i8* %123 to <8 x i8>*
store <8 x i8> %120, <8 x i8>* %124
%125 = add nuw i64 %113, 8
%126 = icmp eq i64 %125, %109
br i1 %126, label %127, label %112
127: ; preds = %112
%128 = icmp eq i64 %109, %24
br i1 %128, label %149, label %129
129: ; preds = %26, %23, %104, %127
%130 = phi i64 [ 0, %23 ], [ 0, %26 ], [ %44, %104 ], [ %109, %127 ]
%131 = xor i64 %130, -1
%132 = and i64 %24, 1
%133 = icmp eq i64 %132, 0
br i1 %133, label %145, label %134
134: ; preds = %129
%135 = trunc i64 %130 to i32
%136 = xor i32 %135, -1
%137 = add i32 %20, %136
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds i8, i8* %10, i64 %138
%140 = load i8, i8* %139
%141 = add i32 %22, %136
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds i8, i8* %15, i64 %142
store i8 %140, i8* %143
%144 = or i64 %130, 1
br label %145
145: ; preds = %134, %129
%146 = phi i64 [ %130, %129 ], [ %144, %134 ]
%147 = sub nsw i64 0, %24
%148 = icmp eq i64 %131, %147
br i1 %148, label %149, label %251
149: ; preds = %145, %251, %102, %127, %0
%150 = xor i32 %20, -1
%151 = add i32 %22, %150
%152 = icmp sgt i32 %151, -1
br i1 %152, label %153, label %273
153: ; preds = %149
%154 = zext i32 %151 to i64
%155 = sext i32 %20 to i64
%156 = add nuw nsw i64 %154, 1
%157 = icmp ult i32 %151, 7
br i1 %157, label %249, label %158
158: ; preds = %153
%159 = getelementptr i8, i8* %15, i64 %154
%160 = icmp ugt i8* %15, %159
%161 = add nsw i64 %155, %154
%162 = getelementptr i8, i8* %15, i64 %161
%163 = getelementptr i8, i8* %15, i64 %155
%164 = icmp ugt i8* %163, %162
%165 = or i1 %160, %164
br i1 %165, label %249, label %166
166: ; preds = %158
%167 = add nuw nsw i64 %154, 1
%168 = getelementptr i8, i8* %15, i64 %167
%169 = getelementptr i8, i8* %15, i64 %155
%170 = add nsw i64 %155, %154
%171 = add nsw i64 %170, 1
%172 = getelementptr i8, i8* %15, i64 %171
%173 = icmp ult i8* %15, %172
%174 = icmp ult i8* %169, %168
%175 = and i1 %173, %174
br i1 %175, label %249, label %176
176: ; preds = %166
%177 = icmp ult i32 %151, 15
br i1 %177, label %214, label %178
178: ; preds = %176
%179 = and i64 %156, 8589934576
%180 = getelementptr inbounds i8, i8* %14, i64 -15
%181 = getelementptr inbounds i8, i8* %15, i64 -15
%182 = getelementptr inbounds i8, i8* %15, i64 -15
br label %183
183: ; preds = %183, %178
%184 = phi i64 [ 0, %178 ], [ %206, %183 ]
%185 = sub i64 %154, %184
%186 = add nsw i64 %185, %155
%187 = getelementptr inbounds i8, i8* %180, i64 %186
%188 = bitcast i8* %187 to <16 x i8>*
%189 = load <16 x i8>, <16 x i8>* %188
%190 = shufflevector <16 x i8> %189, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%191 = sext <16 x i8> %190 to <16 x i16>
%192 = getelementptr inbounds i8, i8* %181, i64 %186
%193 = bitcast i8* %192 to <16 x i8>*
%194 = load <16 x i8>, <16 x i8>* %193
%195 = shufflevector <16 x i8> %194, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%196 = sext <16 x i8> %195 to <16 x i16>
%197 = add nsw <16 x i16> %191, <i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26>
%198 = sub nsw <16 x i16> %197, %196
%199 = srem <16 x i16> %198, <i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26>
%200 = trunc <16 x i16> %199 to <16 x i8>
%201 = add nsw <16 x i8> %200, <i8 97, i8 97, i8 97, i8 97, i8 97, i8 97, i8 97, i8 97, i8 97, i8 97, i8 97, i8 97, i8 97, i8 97, i8 97, i8 97>
%202 = and i64 %185, 4294967295
%203 = shufflevector <16 x i8> %201, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%204 = getelementptr inbounds i8, i8* %182, i64 %202
%205 = bitcast i8* %204 to <16 x i8>*
store <16 x i8> %203, <16 x i8>* %205
%206 = add nuw i64 %184, 16
%207 = icmp eq i64 %206, %179
br i1 %207, label %208, label %183
208: ; preds = %183
%209 = icmp eq i64 %156, %179
br i1 %209, label %273, label %210
210: ; preds = %208
%211 = sub nsw i64 %154, %179
%212 = and i64 %156, 8
%213 = icmp eq i64 %212, 0
br i1 %213, label %249, label %214
214: ; preds = %176, %210
%215 = phi i64 [ %179, %210 ], [ 0, %176 ]
%216 = add nuw nsw i64 %154, 1
%217 = and i64 %216, 8589934584
%218 = sub nsw i64 %154, %217
%219 = getelementptr inbounds i8, i8* %14, i64 -7
%220 = getelementptr inbounds i8, i8* %15, i64 -7
%221 = getelementptr inbounds i8, i8* %15, i64 -7
br label %222
222: ; preds = %222, %214
%223 = phi i64 [ %215, %214 ], [ %245, %222 ]
%224 = sub i64 %154, %223
%225 = add nsw i64 %224, %155
%226 = getelementptr inbounds i8, i8* %219, i64 %225
%227 = bitcast i8* %226 to <8 x i8>*
%228 = load <8 x i8>, <8 x i8>* %227
%229 = shufflevector <8 x i8> %228, <8 x i8> poison, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%230 = sext <8 x i8> %229 to <8 x i16>
%231 = getelementptr inbounds i8, i8* %220, i64 %225
%232 = bitcast i8* %231 to <8 x i8>*
%233 = load <8 x i8>, <8 x i8>* %232
%234 = shufflevector <8 x i8> %233, <8 x i8> poison, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%235 = sext <8 x i8> %234 to <8 x i16>
%236 = add nsw <8 x i16> %230, <i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26>
%237 = sub nsw <8 x i16> %236, %235
%238 = srem <8 x i16> %237, <i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26, i16 26>
%239 = trunc <8 x i16> %238 to <8 x i8>
%240 = add nsw <8 x i8> %239, <i8 97, i8 97, i8 97, i8 97, i8 97, i8 97, i8 97, i8 97>
%241 = and i64 %224, 4294967295
%242 = shufflevector <8 x i8> %240, <8 x i8> poison, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%243 = getelementptr inbounds i8, i8* %221, i64 %241
%244 = bitcast i8* %243 to <8 x i8>*
store <8 x i8> %242, <8 x i8>* %244
%245 = add nuw i64 %223, 8
%246 = icmp eq i64 %245, %217
br i1 %246, label %247, label %222
247: ; preds = %222
%248 = icmp eq i64 %216, %217
br i1 %248, label %273, label %249
249: ; preds = %166, %158, %153, %210, %247
%250 = phi i64 [ %154, %153 ], [ %154, %166 ], [ %154, %158 ], [ %211, %210 ], [ %218, %247 ]
br label %275
251: ; preds = %145, %251
%252 = phi i64 [ %271, %251 ], [ %146, %145 ]
%253 = trunc i64 %252 to i32
%254 = xor i32 %253, -1
%255 = add i32 %20, %254
%256 = sext i32 %255 to i64
%257 = getelementptr inbounds i8, i8* %10, i64 %256
%258 = load i8, i8* %257
%259 = add i32 %22, %254
%260 = sext i32 %259 to i64
%261 = getelementptr inbounds i8, i8* %15, i64 %260
store i8 %258, i8* %261
%262 = trunc i64 %252 to i32
%263 = sub i32 -2, %262
%264 = add i32 %20, %263
%265 = sext i32 %264 to i64
%266 = getelementptr inbounds i8, i8* %10, i64 %265
%267 = load i8, i8* %266
%268 = add i32 %22, %263
%269 = sext i32 %268 to i64
%270 = getelementptr inbounds i8, i8* %15, i64 %269
store i8 %267, i8* %270
%271 = add nuw nsw i64 %252, 2
%272 = icmp eq i64 %271, %24
br i1 %272, label %149, label %251
273: ; preds = %275, %208, %247, %149
%274 = call i32 @puts(i8* %15)
ret i32 0
275: ; preds = %249, %275
%276 = phi i64 [ %291, %275 ], [ %250, %249 ]
%277 = add nsw i64 %276, %155
%278 = getelementptr inbounds i8, i8* %14, i64 %277
%279 = load i8, i8* %278
%280 = sext i8 %279 to i16
%281 = getelementptr inbounds i8, i8* %15, i64 %277
%282 = load i8, i8* %281
%283 = sext i8 %282 to i16
%284 = add nsw i16 %280, 26
%285 = sub nsw i16 %284, %283
%286 = srem i16 %285, 26
%287 = trunc i16 %286 to i8
%288 = add nsw i8 %287, 97
%289 = and i64 %276, 4294967295
%290 = getelementptr inbounds i8, i8* %15, i64 %289
store i8 %288, i8* %290
%291 = add nsw i64 %276, -1
%292 = icmp eq i64 %276, 0
br i1 %292, label %273, label %275
}