int main() {
  int arr[100];
  char array1[100];
  char array[100];
  scanf("%s", array);
  scanf("%s", array1);
  int target = atoi(array1);
  int m = 0;
  for (m = 0; array[m]; m++) {
    if (array[m] != ' ') {
      arr[m] = array[m] - '0';
    }
  }
  int sum = 0;
  int flag = 0;
  if (m == 2) {
    sum = arr[0] + arr[1];
    sum = arr[0] - arr[1];
    if (flag == 0) {
      printf("-1\n");
    }
  }
  if (m == 3) {
    sum = arr[0] + arr[1] + arr[2];
    if (sum == target) {
      printf("%d+%d+%d=%d\n", arr[0], arr[1], arr[2], sum);
      flag = 1;
    }
    sum = arr[0] - arr[1] + arr[2];
    if (sum == target) {
      printf("%d+%d+%d=%d\n", arr[0], arr[1], arr[2], sum);
      flag = 1;
    }
    sum = arr[0] + arr[1] - arr[2];
    if (sum == target) {
      printf("%d+%d-%d=%d\n", arr[0], arr[1], arr[2], sum);
      flag = 1;
    }
    sum = arr[0] - arr[1] - arr[2];
    if (sum == target) {
      printf("%d-%d-%d=%d\n", arr[0], arr[1], arr[2], sum);
      flag = 1;
    }
    if (flag == 0) {
      printf("-1\n");
    }
  }
  if (m == 4) {
    sum = arr[0] + arr[1] + arr[2] + arr[3];
    if (sum == target) {
      printf("%d+%d+%d+%d=%d\n", arr[0], arr[1], arr[2], arr[3], sum);
      flag = 1;
    }
    sum = arr[0] - arr[1] - arr[2] + arr[3];
    if (sum == target) {
      flag = 1;
      printf("%d-%d-%d+%d=%d\n", arr[0], arr[1], arr[2], arr[3], sum);
    }
    sum = arr[0] + arr[1] + arr[2] - arr[3];
    if (sum == target) {
      flag = 1;
      printf("%d+%d+%d-%d=%d\n", arr[0], arr[1], arr[2], arr[3], sum);
    }
    sum = arr[0] + arr[1] - arr[2] - arr[3];
    if (sum == target) {
      flag = 1;
      printf("%d+%d-%d-%d=%d\n", arr[0], arr[1], arr[2], arr[3], sum);
    }
    sum = arr[0] - arr[1] + arr[2] - arr[3];
    if (sum == target) {
      flag = 1;
      printf("%d-%d+%d-%d=%d\n", arr[0], arr[1], arr[2], arr[3], sum);
    }
    if (flag == 0) {
      printf("-1\n");
    }
  }
  if (m == 5) {
    sum = arr[0] + arr[1] + arr[2] + arr[3] + arr[4];
    if (sum == target) {
      flag = 1;
      printf("%d+%d+%d+%d+%d=%d\n", arr[0], arr[1], arr[2], arr[3], arr[4],
             sum);
    }
    sum = arr[0] + arr[1] - arr[2] + arr[3] + arr[4];
    if (sum == target) {
      flag = 1;
      printf("%d-%d-%d+%d+%d=%d\n", arr[0], arr[1], arr[2], arr[3], arr[4],
             sum);
    }
    sum = arr[0] + arr[1] + arr[2] + arr[3] - arr[4];
    if (sum == target) {
      flag = 1;
      printf("%d+%d+%d+%d-%d=%d\n", arr[0], arr[1], arr[2], arr[3], arr[4],
             sum);
    }
    sum = arr[0] - arr[1] - arr[2] + arr[3] + arr[4];
    if (sum == target) {
      flag = 1;
      printf("%d-%d-%d+%d+%d=%d\n", arr[0], arr[1], arr[2], arr[3], arr[4],
             sum);
    }
    sum = arr[0] - arr[1] + arr[2] - arr[3] + arr[4];
    if (sum == target) {
      flag = 1;
      printf("%d-%d+%d-%d+%d=%d\n", arr[0], arr[1], arr[2], arr[3], arr[4],
             sum);
    }
    if (flag == 0) {
      printf("-1\n");
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2a0,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x280(%rbp),%rsi
lea    0xeb0(%rip),%rdi
mov    $0x0,%al
call   1040 <scanf@plt>
lea    -0x210(%rbp),%rsi
lea    0xe9b(%rip),%rdi
mov    $0x0,%al
call   1040 <scanf@plt>
lea    -0x210(%rbp),%rdi
mov    $0x0,%al
call   1050 <atoi@plt>
mov    %eax,-0x284(%rbp)
movl   $0x0,-0x288(%rbp)
movl   $0x0,-0x288(%rbp)
movslq -0x288(%rbp),%rax
cmpb   $0x0,-0x280(%rbp,%rax,1)
je     11fa <main+0xca>
movslq -0x288(%rbp),%rax
movsbl -0x280(%rbp,%rax,1),%eax
ff
cmp    $0x20,%eax
je     11e1 <main+0xb1>
movslq -0x288(%rbp),%rax
movsbl -0x280(%rbp,%rax,1),%ecx
ff
sub    $0x30,%ecx
movslq -0x288(%rbp),%rax
mov    %ecx,-0x1a0(%rbp,%rax,4)
jmp    11e6 <main+0xb6>
mov    -0x288(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x288(%rbp)
jmp    1194 <main+0x64>
movl   $0x0,-0x28c(%rbp)
movl   $0x0,-0x290(%rbp)
cmpl   $0x2,-0x288(%rbp)
jne    125f <main+0x12f>
mov    -0x1a0(%rbp),%eax
add    -0x19c(%rbp),%eax
mov    %eax,-0x28c(%rbp)
mov    -0x1a0(%rbp),%eax
sub    -0x19c(%rbp),%eax
mov    %eax,-0x28c(%rbp)
cmpl   $0x0,-0x290(%rbp)
jne    125a <main+0x12a>
lea    0xdb0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    125f <main+0x12f>
cmpl   $0x3,-0x288(%rbp)
jne    13f8 <main+0x2c8>
mov    -0x1a0(%rbp),%eax
add    -0x19c(%rbp),%eax
add    -0x198(%rbp),%eax
mov    %eax,-0x28c(%rbp)
mov    -0x28c(%rbp),%eax
cmp    -0x284(%rbp),%eax
jne    12c7 <main+0x197>
mov    -0x1a0(%rbp),%esi
mov    -0x19c(%rbp),%edx
mov    -0x198(%rbp),%ecx
mov    -0x28c(%rbp),%r8d
lea    0xd87(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x290(%rbp)
mov    -0x1a0(%rbp),%eax
sub    -0x19c(%rbp),%eax
add    -0x198(%rbp),%eax
mov    %eax,-0x28c(%rbp)
mov    -0x28c(%rbp),%eax
cmp    -0x284(%rbp),%eax
jne    1322 <main+0x1f2>
mov    -0x1a0(%rbp),%esi
mov    -0x19c(%rbp),%edx
mov    -0x198(%rbp),%ecx
mov    -0x28c(%rbp),%r8d
lea    0xd2c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x290(%rbp)
mov    -0x1a0(%rbp),%eax
add    -0x19c(%rbp),%eax
sub    -0x198(%rbp),%eax
mov    %eax,-0x28c(%rbp)
mov    -0x28c(%rbp),%eax
cmp    -0x284(%rbp),%eax
jne    137d <main+0x24d>
mov    -0x1a0(%rbp),%esi
mov    -0x19c(%rbp),%edx
mov    -0x198(%rbp),%ecx
mov    -0x28c(%rbp),%r8d
lea    0xcf7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x290(%rbp)
mov    -0x1a0(%rbp),%eax
sub    -0x19c(%rbp),%eax
sub    -0x198(%rbp),%eax
mov    %eax,-0x28c(%rbp)
mov    -0x28c(%rbp),%eax
cmp    -0x284(%rbp),%eax
jne    13d8 <main+0x2a8>
mov    -0x1a0(%rbp),%esi
mov    -0x19c(%rbp),%edx
mov    -0x198(%rbp),%ecx
mov    -0x28c(%rbp),%r8d
lea    0xc53(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x290(%rbp)
cmpl   $0x0,-0x290(%rbp)
jne    13f3 <main+0x2c3>
lea    0xc17(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    13f8 <main+0x2c8>
cmpl   $0x4,-0x288(%rbp)
jne    162d <main+0x4fd>
mov    -0x1a0(%rbp),%eax
add    -0x19c(%rbp),%eax
add    -0x198(%rbp),%eax
add    -0x194(%rbp),%eax
mov    %eax,-0x28c(%rbp)
mov    -0x28c(%rbp),%eax
cmp    -0x284(%rbp),%eax
jne    146d <main+0x33d>
mov    -0x1a0(%rbp),%esi
mov    -0x19c(%rbp),%edx
mov    -0x198(%rbp),%ecx
mov    -0x194(%rbp),%r8d
mov    -0x28c(%rbp),%r9d
lea    0xbde(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x290(%rbp)
mov    -0x1a0(%rbp),%eax
sub    -0x19c(%rbp),%eax
sub    -0x198(%rbp),%eax
add    -0x194(%rbp),%eax
mov    %eax,-0x28c(%rbp)
mov    -0x28c(%rbp),%eax
cmp    -0x284(%rbp),%eax
jne    14d5 <main+0x3a5>
movl   $0x1,-0x290(%rbp)
mov    -0x1a0(%rbp),%esi
mov    -0x19c(%rbp),%edx
mov    -0x198(%rbp),%ecx
mov    -0x194(%rbp),%r8d
mov    -0x28c(%rbp),%r9d
lea    0xb39(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x1a0(%rbp),%eax
add    -0x19c(%rbp),%eax
add    -0x198(%rbp),%eax
sub    -0x194(%rbp),%eax
mov    %eax,-0x28c(%rbp)
mov    -0x28c(%rbp),%eax
cmp    -0x284(%rbp),%eax
jne    153d <main+0x40d>
movl   $0x1,-0x290(%rbp)
mov    -0x1a0(%rbp),%esi
mov    -0x19c(%rbp),%edx
mov    -0x198(%rbp),%ecx
mov    -0x194(%rbp),%r8d
mov    -0x28c(%rbp),%r9d
lea    0xb2a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x1a0(%rbp),%eax
add    -0x19c(%rbp),%eax
sub    -0x198(%rbp),%eax
sub    -0x194(%rbp),%eax
mov    %eax,-0x28c(%rbp)
mov    -0x28c(%rbp),%eax
cmp    -0x284(%rbp),%eax
jne    15a5 <main+0x475>
movl   $0x1,-0x290(%rbp)
mov    -0x1a0(%rbp),%esi
mov    -0x19c(%rbp),%edx
mov    -0x198(%rbp),%ecx
mov    -0x194(%rbp),%r8d
mov    -0x28c(%rbp),%r9d
lea    0xa79(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x1a0(%rbp),%eax
sub    -0x19c(%rbp),%eax
add    -0x198(%rbp),%eax
sub    -0x194(%rbp),%eax
mov    %eax,-0x28c(%rbp)
mov    -0x28c(%rbp),%eax
cmp    -0x284(%rbp),%eax
jne    160d <main+0x4dd>
movl   $0x1,-0x290(%rbp)
mov    -0x1a0(%rbp),%esi
mov    -0x19c(%rbp),%edx
mov    -0x198(%rbp),%ecx
mov    -0x194(%rbp),%r8d
mov    -0x28c(%rbp),%r9d
lea    0xa21(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
cmpl   $0x0,-0x290(%rbp)
jne    1628 <main+0x4f8>
lea    0x9e2(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    162d <main+0x4fd>
cmpl   $0x5,-0x288(%rbp)
jne    18ad <main+0x77d>
mov    -0x1a0(%rbp),%eax
add    -0x19c(%rbp),%eax
add    -0x198(%rbp),%eax
add    -0x194(%rbp),%eax
add    -0x190(%rbp),%eax
mov    %eax,-0x28c(%rbp)
mov    -0x28c(%rbp),%eax
cmp    -0x284(%rbp),%eax
jne    16b1 <main+0x581>
movl   $0x1,-0x290(%rbp)
mov    -0x1a0(%rbp),%esi
mov    -0x19c(%rbp),%edx
mov    -0x198(%rbp),%ecx
mov    -0x194(%rbp),%r8d
mov    -0x190(%rbp),%r9d
mov    -0x28c(%rbp),%eax
lea    0x990(%rip),%rdi
mov    %eax,(%rsp)
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x1a0(%rbp),%eax
add    -0x19c(%rbp),%eax
sub    -0x198(%rbp),%eax
add    -0x194(%rbp),%eax
add    -0x190(%rbp),%eax
mov    %eax,-0x28c(%rbp)
mov    -0x28c(%rbp),%eax
cmp    -0x284(%rbp),%eax
jne    1728 <main+0x5f8>
movl   $0x1,-0x290(%rbp)
mov    -0x1a0(%rbp),%esi
mov    -0x19c(%rbp),%edx
mov    -0x198(%rbp),%ecx
mov    -0x194(%rbp),%r8d
mov    -0x190(%rbp),%r9d
mov    -0x28c(%rbp),%eax
lea    0x92c(%rip),%rdi
mov    %eax,(%rsp)
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x1a0(%rbp),%eax
add    -0x19c(%rbp),%eax
add    -0x198(%rbp),%eax
add    -0x194(%rbp),%eax
sub    -0x190(%rbp),%eax
mov    %eax,-0x28c(%rbp)
mov    -0x28c(%rbp),%eax
cmp    -0x284(%rbp),%eax
jne    179f <main+0x66f>
movl   $0x1,-0x290(%rbp)
mov    -0x1a0(%rbp),%esi
mov    -0x19c(%rbp),%edx
mov    -0x198(%rbp),%ecx
mov    -0x194(%rbp),%r8d
mov    -0x190(%rbp),%r9d
mov    -0x28c(%rbp),%eax
lea    0x8c8(%rip),%rdi
mov    %eax,(%rsp)
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x1a0(%rbp),%eax
sub    -0x19c(%rbp),%eax
sub    -0x198(%rbp),%eax
add    -0x194(%rbp),%eax
add    -0x190(%rbp),%eax
mov    %eax,-0x28c(%rbp)
mov    -0x28c(%rbp),%eax
cmp    -0x284(%rbp),%eax
jne    1816 <main+0x6e6>
movl   $0x1,-0x290(%rbp)
mov    -0x1a0(%rbp),%esi
mov    -0x19c(%rbp),%edx
mov    -0x198(%rbp),%ecx
mov    -0x194(%rbp),%r8d
mov    -0x190(%rbp),%r9d
mov    -0x28c(%rbp),%eax
lea    0x83e(%rip),%rdi
mov    %eax,(%rsp)
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x1a0(%rbp),%eax
sub    -0x19c(%rbp),%eax
add    -0x198(%rbp),%eax
sub    -0x194(%rbp),%eax
add    -0x190(%rbp),%eax
mov    %eax,-0x28c(%rbp)
mov    -0x28c(%rbp),%eax
cmp    -0x284(%rbp),%eax
jne    188d <main+0x75d>
movl   $0x1,-0x290(%rbp)
mov    -0x1a0(%rbp),%esi
mov    -0x19c(%rbp),%edx
mov    -0x198(%rbp),%ecx
mov    -0x194(%rbp),%r8d
mov    -0x190(%rbp),%r9d
mov    -0x28c(%rbp),%eax
lea    0x7ed(%rip),%rdi
mov    %eax,(%rsp)
mov    $0x0,%al
call   1030 <printf@plt>
cmpl   $0x0,-0x290(%rbp)
jne    18a8 <main+0x778>
lea    0x762(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    18ad <main+0x77d>
xor    %eax,%eax
add    $0x2a0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x288,%rsp
lea    0xeb8(%rip),%r14
xor    %ebx,%ebx
lea    0x1b0(%rsp),%rsi
mov    %r14,%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
lea    0x220(%rsp),%rbp
mov    %r14,%rdi
mov    %rbp,%rsi
xor    %eax,%eax
call   1050 <scanf@plt>
mov    %rbp,%rdi
xor    %eax,%eax
call   1060 <atoi@plt>
mov    %eax,%r13d
jmp    1194 <main+0x54>
add    $0x1,%rbx
movsbl 0x1b0(%rsp,%rbx,1),%eax
cmp    $0x20,%eax
je     1190 <main+0x50>
test   %al,%al
je     11ae <main+0x6e>
add    $0xffffffd0,%eax
mov    %eax,0x20(%rsp,%rbx,4)
jmp    1190 <main+0x50>
add    $0xfffffffe,%ebx
cmp    $0x3,%ebx
ja     1514 <main+0x3d4>
lea    0xe3f(%rip),%rax
movslq (%rax,%rbx,4),%rcx
add    %rax,%rcx
jmp    *%rcx
mov    0x20(%rsp),%r15d
mov    0x24(%rsp),%r14d
lea    (%r14,%r15,1),%ebx
mov    0x28(%rsp),%ebp
lea    (%rbx,%rbp,1),%ecx
xor    %eax,%eax
cmp    %r13d,%ecx
jne    1204 <main+0xc4>
lea    0xe5c(%rip),%rdi
mov    %r15d,%esi
mov    %r14d,%edx
mov    %ebp,%ecx
mov    %r13d,%r8d
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%eax
mov    %r15d,%ecx
sub    %r14d,%ecx
add    %ebp,%ecx
cmp    %r13d,%ecx
jne    122f <main+0xef>
lea    0xe31(%rip),%rdi
mov    %r15d,%esi
mov    %r14d,%edx
mov    %ebp,%ecx
mov    %r13d,%r8d
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%eax
sub    %ebp,%ebx
cmp    %r13d,%ebx
jne    148e <main+0x34e>
lea    0xe2e(%rip),%rdi
mov    %r15d,%esi
mov    %r14d,%edx
mov    %ebp,%ecx
mov    %r13d,%r8d
xor    %eax,%eax
call   1040 <printf@plt>
mov    %r15d,%ecx
sub    %r14d,%ecx
sub    %ebp,%ecx
cmp    %r13d,%ecx
je     149b <main+0x35b>
jmp    1514 <main+0x3d4>
mov    0x20(%rsp),%r15d
mov    0x24(%rsp),%edx
lea    (%rdx,%r15,1),%ebx
mov    0x28(%rsp),%r12d
lea    (%rbx,%r12,1),%r14d
mov    0x2c(%rsp),%ebp
lea    (%r14,%rbp,1),%ecx
xor    %eax,%eax
cmp    %r13d,%ecx
mov    %rdx,0x8(%rsp)
jne    12b7 <main+0x177>
lea    0xdac(%rip),%rdi
mov    %r15d,%esi
mov    %r12d,%ecx
mov    %ebp,%r8d
mov    %r13d,%r9d
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x8(%rsp),%rdx
mov    $0x1,%eax
mov    %r15d,%esi
sub    %edx,%esi
sub    %r12d,%esi
add    %ebp,%esi
cmp    %r13d,%esi
jne    12ea <main+0x1aa>
lea    0xd46(%rip),%rdi
mov    %r15d,%esi
mov    %r12d,%ecx
mov    %ebp,%r8d
mov    %r13d,%r9d
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x8(%rsp),%rdx
mov    $0x1,%eax
sub    %ebp,%r14d
cmp    %r13d,%r14d
jne    1316 <main+0x1d6>
lea    0xd73(%rip),%rdi
mov    %r15d,%esi
mov    %r12d,%ecx
mov    %ebp,%r8d
mov    %r13d,%r9d
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x8(%rsp),%rdx
mov    $0x1,%eax
sub    %r12d,%ebx
sub    %ebp,%ebx
cmp    %r13d,%ebx
jne    14b6 <main+0x376>
lea    0xcf8(%rip),%rdi
mov    %r15d,%esi
mov    %r12d,%ecx
mov    %ebp,%r8d
mov    %r13d,%r9d
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x8(%rsp),%rdx
lea    (%r15,%r12,1),%eax
sub    %edx,%eax
sub    %ebp,%eax
cmp    %r13d,%eax
je     14c3 <main+0x383>
jmp    1514 <main+0x3d4>
mov    0x20(%rsp),%eax
mov    0x24(%rsp),%edx
mov    %rax,0x18(%rsp)
lea    (%rdx,%rax,1),%ebx
mov    0x28(%rsp),%r12d
lea    (%rbx,%r12,1),%r14d
mov    0x2c(%rsp),%r8d
add    %r8d,%r14d
mov    0x30(%rsp),%ebp
lea    (%r14,%rbp,1),%ecx
xor    %eax,%eax
cmp    %r13d,%ecx
mov    %rdx,0x10(%rsp)
mov    %r8,0x8(%rsp)
jne    13c4 <main+0x284>
mov    %r13d,(%rsp)
lea    0xca5(%rip),%rdi
mov    0x18(%rsp),%rsi
mov    %r12d,%ecx
mov    0x8(%rsp),%r8
mov    %ebp,%r9d
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x8(%rsp),%r8
mov    0x10(%rsp),%rdx
mov    $0x1,%eax
lea    (%r8,%rbp,1),%r15d
mov    %r15d,%ecx
sub    %r12d,%ecx
add    %ebx,%ecx
cmp    %r13d,%ecx
mov    0x18(%rsp),%rbx
jne    1408 <main+0x2c8>
mov    %r13d,(%rsp)
lea    0xc71(%rip),%rdi
mov    %ebx,%esi
mov    %r12d,%ecx
mov    0x8(%rsp),%r8
mov    %ebp,%r9d
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x8(%rsp),%r8
mov    0x10(%rsp),%rdx
mov    $0x1,%eax
sub    %ebp,%r14d
cmp    %r13d,%r14d
jne    143e <main+0x2fe>
mov    %r13d,(%rsp)
lea    0xc4e(%rip),%rdi
mov    %ebx,%esi
mov    %r12d,%ecx
mov    0x8(%rsp),%r8
mov    %ebp,%r9d
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x8(%rsp),%r8
mov    0x10(%rsp),%rdx
mov    $0x1,%eax
add    %ebx,%r15d
sub    %edx,%r15d
sub    %r12d,%r15d
cmp    %r13d,%r15d
jne    14d8 <main+0x398>
mov    %r13d,(%rsp)
lea    0xbfb(%rip),%rdi
mov    %ebx,%esi
mov    %r12d,%ecx
mov    0x8(%rsp),%r8
mov    %ebp,%r9d
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x8(%rsp),%r8
mov    0x10(%rsp),%rdx
lea    (%rbx,%r12,1),%eax
sub    %edx,%eax
sub    %r8d,%eax
add    %ebp,%eax
cmp    %r13d,%eax
je     14e8 <main+0x3a8>
jmp    1514 <main+0x3d4>
mov    %r15d,%edx
sub    %r14d,%edx
sub    %ebp,%edx
cmp    %r13d,%edx
jne    1504 <main+0x3c4>
lea    0xb84(%rip),%rdi
mov    %r15d,%esi
mov    %r14d,%edx
mov    %ebp,%ecx
mov    %r13d,%r8d
xor    %eax,%eax
call   1040 <printf@plt>
jmp    1514 <main+0x3d4>
lea    (%r15,%r12,1),%ecx
sub    %edx,%ecx
sub    %ebp,%ecx
cmp    %r13d,%ecx
jne    1504 <main+0x3c4>
lea    0xb69(%rip),%rdi
mov    %r15d,%esi
mov    %r12d,%ecx
mov    %ebp,%r8d
mov    %r13d,%r9d
jmp    14fb <main+0x3bb>
lea    (%rbx,%r12,1),%ecx
sub    %edx,%ecx
sub    %r8d,%ecx
add    %ebp,%ecx
cmp    %r13d,%ecx
jne    1504 <main+0x3c4>
mov    %r13d,(%rsp)
lea    0xb89(%rip),%rdi
mov    %ebx,%esi
mov    %r12d,%ecx
mov    %ebp,%r9d
xor    %eax,%eax
call   1040 <printf@plt>
jmp    1514 <main+0x3d4>
test   %eax,%eax
jne    1514 <main+0x3d4>
lea    0xb80(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
add    $0x288,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [3 x i8] c"%s\00"
@.str.1 = [4 x i8] c"-1\0A\00"
@.str.2 = [13 x i8] c"%d+%d+%d=%d\0A\00"
@.str.3 = [13 x i8] c"%d+%d-%d=%d\0A\00"
@.str.4 = [13 x i8] c"%d-%d-%d=%d\0A\00"
@.str.5 = [16 x i8] c"%d+%d+%d+%d=%d\0A\00"
@.str.6 = [16 x i8] c"%d-%d-%d+%d=%d\0A\00"
@.str.7 = [16 x i8] c"%d+%d+%d-%d=%d\0A\00"
@.str.8 = [16 x i8] c"%d+%d-%d-%d=%d\0A\00"
@.str.9 = [16 x i8] c"%d-%d+%d-%d=%d\0A\00"
@.str.10 = [19 x i8] c"%d+%d+%d+%d+%d=%d\0A\00"
@.str.11 = [19 x i8] c"%d-%d-%d+%d+%d=%d\0A\00"
@.str.12 = [19 x i8] c"%d+%d+%d+%d-%d=%d\0A\00"
@.str.13 = [19 x i8] c"%d-%d+%d-%d+%d=%d\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [100 x i32]
%3 = alloca [100 x i8]
%4 = alloca [100 x i8]
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
store i32 0, i32* %1
%9 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 0
%10 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8* %9)
%11 = getelementptr inbounds [100 x i8], [100 x i8]* %3, i64 0, i64 0
%12 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8* %11)
%13 = getelementptr inbounds [100 x i8], [100 x i8]* %3, i64 0, i64 0
%14 = call i32 (i8*, ...) bitcast (i32 (...)* @atoi to i32 (i8*, ...)*)(i8* %13)
store i32 %14, i32* %5
store i32 0, i32* %6
store i32 0, i32* %6
br label %15
15: ; preds = %39, %0
%16 = load i32, i32* %6
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %17
%19 = load i8, i8* %18
%20 = icmp ne i8 %19, 0
br i1 %20, label %21, label %42
21: ; preds = %15
%22 = load i32, i32* %6
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %23
%25 = load i8, i8* %24
%26 = sext i8 %25 to i32
%27 = icmp ne i32 %26, 32
br i1 %27, label %28, label %38
28: ; preds = %21
%29 = load i32, i32* %6
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds [100 x i8], [100 x i8]* %4, i64 0, i64 %30
%32 = load i8, i8* %31
%33 = sext i8 %32 to i32
%34 = sub nsw i32 %33, 48
%35 = load i32, i32* %6
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 %36
store i32 %34, i32* %37
br label %38
38: ; preds = %28, %21
br label %39
39: ; preds = %38
%40 = load i32, i32* %6
%41 = add nsw i32 %40, 1
store i32 %41, i32* %6
br label %15
42: ; preds = %15
store i32 0, i32* %7
store i32 0, i32* %8
%43 = load i32, i32* %6
%44 = icmp eq i32 %43, 2
br i1 %44, label %45, label %61
45: ; preds = %42
%46 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%47 = load i32, i32* %46
%48 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%49 = load i32, i32* %48
%50 = add nsw i32 %47, %49
store i32 %50, i32* %7
%51 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%52 = load i32, i32* %51
%53 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%54 = load i32, i32* %53
%55 = sub nsw i32 %52, %54
store i32 %55, i32* %7
%56 = load i32, i32* %8
%57 = icmp eq i32 %56, 0
br i1 %57, label %58, label %60
58: ; preds = %45
%59 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
br label %60
60: ; preds = %58, %45
br label %61
61: ; preds = %60, %42
%62 = load i32, i32* %6
%63 = icmp eq i32 %62, 3
br i1 %63, label %64, label %154
64: ; preds = %61
%65 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%66 = load i32, i32* %65
%67 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%68 = load i32, i32* %67
%69 = add nsw i32 %66, %68
%70 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%71 = load i32, i32* %70
%72 = add nsw i32 %69, %71
store i32 %72, i32* %7
%73 = load i32, i32* %7
%74 = load i32, i32* %5
%75 = icmp eq i32 %73, %74
br i1 %75, label %76, label %85
76: ; preds = %64
%77 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%78 = load i32, i32* %77
%79 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%80 = load i32, i32* %79
%81 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%82 = load i32, i32* %81
%83 = load i32, i32* %7
%84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.2, i64 0, i64 0), i32 %78, i32 %80, i32 %82, i32 %83)
store i32 1, i32* %8
br label %85
85: ; preds = %76, %64
%86 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%87 = load i32, i32* %86
%88 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%89 = load i32, i32* %88
%90 = sub nsw i32 %87, %89
%91 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%92 = load i32, i32* %91
%93 = add nsw i32 %90, %92
store i32 %93, i32* %7
%94 = load i32, i32* %7
%95 = load i32, i32* %5
%96 = icmp eq i32 %94, %95
br i1 %96, label %97, label %106
97: ; preds = %85
%98 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%99 = load i32, i32* %98
%100 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%101 = load i32, i32* %100
%102 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%103 = load i32, i32* %102
%104 = load i32, i32* %7
%105 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.2, i64 0, i64 0), i32 %99, i32 %101, i32 %103, i32 %104)
store i32 1, i32* %8
br label %106
106: ; preds = %97, %85
%107 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%108 = load i32, i32* %107
%109 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%110 = load i32, i32* %109
%111 = add nsw i32 %108, %110
%112 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%113 = load i32, i32* %112
%114 = sub nsw i32 %111, %113
store i32 %114, i32* %7
%115 = load i32, i32* %7
%116 = load i32, i32* %5
%117 = icmp eq i32 %115, %116
br i1 %117, label %118, label %127
118: ; preds = %106
%119 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%120 = load i32, i32* %119
%121 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%122 = load i32, i32* %121
%123 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%124 = load i32, i32* %123
%125 = load i32, i32* %7
%126 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.3, i64 0, i64 0), i32 %120, i32 %122, i32 %124, i32 %125)
store i32 1, i32* %8
br label %127
127: ; preds = %118, %106
%128 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%129 = load i32, i32* %128
%130 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%131 = load i32, i32* %130
%132 = sub nsw i32 %129, %131
%133 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%134 = load i32, i32* %133
%135 = sub nsw i32 %132, %134
store i32 %135, i32* %7
%136 = load i32, i32* %7
%137 = load i32, i32* %5
%138 = icmp eq i32 %136, %137
br i1 %138, label %139, label %148
139: ; preds = %127
%140 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%141 = load i32, i32* %140
%142 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%143 = load i32, i32* %142
%144 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%145 = load i32, i32* %144
%146 = load i32, i32* %7
%147 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.4, i64 0, i64 0), i32 %141, i32 %143, i32 %145, i32 %146)
store i32 1, i32* %8
br label %148
148: ; preds = %139, %127
%149 = load i32, i32* %8
%150 = icmp eq i32 %149, 0
br i1 %150, label %151, label %153
151: ; preds = %148
%152 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
br label %153
153: ; preds = %151, %148
br label %154
154: ; preds = %153, %61
%155 = load i32, i32* %6
%156 = icmp eq i32 %155, 4
br i1 %156, label %157, label %293
157: ; preds = %154
%158 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%159 = load i32, i32* %158
%160 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%161 = load i32, i32* %160
%162 = add nsw i32 %159, %161
%163 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%164 = load i32, i32* %163
%165 = add nsw i32 %162, %164
%166 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%167 = load i32, i32* %166
%168 = add nsw i32 %165, %167
store i32 %168, i32* %7
%169 = load i32, i32* %7
%170 = load i32, i32* %5
%171 = icmp eq i32 %169, %170
br i1 %171, label %172, label %183
172: ; preds = %157
%173 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%174 = load i32, i32* %173
%175 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%176 = load i32, i32* %175
%177 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%178 = load i32, i32* %177
%179 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%180 = load i32, i32* %179
%181 = load i32, i32* %7
%182 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.5, i64 0, i64 0), i32 %174, i32 %176, i32 %178, i32 %180, i32 %181)
store i32 1, i32* %8
br label %183
183: ; preds = %172, %157
%184 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%185 = load i32, i32* %184
%186 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%187 = load i32, i32* %186
%188 = sub nsw i32 %185, %187
%189 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%190 = load i32, i32* %189
%191 = sub nsw i32 %188, %190
%192 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%193 = load i32, i32* %192
%194 = add nsw i32 %191, %193
store i32 %194, i32* %7
%195 = load i32, i32* %7
%196 = load i32, i32* %5
%197 = icmp eq i32 %195, %196
br i1 %197, label %198, label %209
198: ; preds = %183
store i32 1, i32* %8
%199 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%200 = load i32, i32* %199
%201 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%202 = load i32, i32* %201
%203 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%204 = load i32, i32* %203
%205 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%206 = load i32, i32* %205
%207 = load i32, i32* %7
%208 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.6, i64 0, i64 0), i32 %200, i32 %202, i32 %204, i32 %206, i32 %207)
br label %209
209: ; preds = %198, %183
%210 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%211 = load i32, i32* %210
%212 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%213 = load i32, i32* %212
%214 = add nsw i32 %211, %213
%215 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%216 = load i32, i32* %215
%217 = add nsw i32 %214, %216
%218 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%219 = load i32, i32* %218
%220 = sub nsw i32 %217, %219
store i32 %220, i32* %7
%221 = load i32, i32* %7
%222 = load i32, i32* %5
%223 = icmp eq i32 %221, %222
br i1 %223, label %224, label %235
224: ; preds = %209
store i32 1, i32* %8
%225 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%226 = load i32, i32* %225
%227 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%228 = load i32, i32* %227
%229 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%230 = load i32, i32* %229
%231 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%232 = load i32, i32* %231
%233 = load i32, i32* %7
%234 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 %226, i32 %228, i32 %230, i32 %232, i32 %233)
br label %235
235: ; preds = %224, %209
%236 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%237 = load i32, i32* %236
%238 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%239 = load i32, i32* %238
%240 = add nsw i32 %237, %239
%241 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%242 = load i32, i32* %241
%243 = sub nsw i32 %240, %242
%244 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%245 = load i32, i32* %244
%246 = sub nsw i32 %243, %245
store i32 %246, i32* %7
%247 = load i32, i32* %7
%248 = load i32, i32* %5
%249 = icmp eq i32 %247, %248
br i1 %249, label %250, label %261
250: ; preds = %235
store i32 1, i32* %8
%251 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%252 = load i32, i32* %251
%253 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%254 = load i32, i32* %253
%255 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%256 = load i32, i32* %255
%257 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%258 = load i32, i32* %257
%259 = load i32, i32* %7
%260 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.8, i64 0, i64 0), i32 %252, i32 %254, i32 %256, i32 %258, i32 %259)
br label %261
261: ; preds = %250, %235
%262 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%263 = load i32, i32* %262
%264 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%265 = load i32, i32* %264
%266 = sub nsw i32 %263, %265
%267 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%268 = load i32, i32* %267
%269 = add nsw i32 %266, %268
%270 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%271 = load i32, i32* %270
%272 = sub nsw i32 %269, %271
store i32 %272, i32* %7
%273 = load i32, i32* %7
%274 = load i32, i32* %5
%275 = icmp eq i32 %273, %274
br i1 %275, label %276, label %287
276: ; preds = %261
store i32 1, i32* %8
%277 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%278 = load i32, i32* %277
%279 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%280 = load i32, i32* %279
%281 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%282 = load i32, i32* %281
%283 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%284 = load i32, i32* %283
%285 = load i32, i32* %7
%286 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.9, i64 0, i64 0), i32 %278, i32 %280, i32 %282, i32 %284, i32 %285)
br label %287
287: ; preds = %276, %261
%288 = load i32, i32* %8
%289 = icmp eq i32 %288, 0
br i1 %289, label %290, label %292
290: ; preds = %287
%291 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
br label %292
292: ; preds = %290, %287
br label %293
293: ; preds = %292, %154
%294 = load i32, i32* %6
%295 = icmp eq i32 %294, 5
br i1 %295, label %296, label %457
296: ; preds = %293
%297 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%298 = load i32, i32* %297
%299 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%300 = load i32, i32* %299
%301 = add nsw i32 %298, %300
%302 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%303 = load i32, i32* %302
%304 = add nsw i32 %301, %303
%305 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%306 = load i32, i32* %305
%307 = add nsw i32 %304, %306
%308 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 4
%309 = load i32, i32* %308
%310 = add nsw i32 %307, %309
store i32 %310, i32* %7
%311 = load i32, i32* %7
%312 = load i32, i32* %5
%313 = icmp eq i32 %311, %312
br i1 %313, label %314, label %327
314: ; preds = %296
store i32 1, i32* %8
%315 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%316 = load i32, i32* %315
%317 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%318 = load i32, i32* %317
%319 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%320 = load i32, i32* %319
%321 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%322 = load i32, i32* %321
%323 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 4
%324 = load i32, i32* %323
%325 = load i32, i32* %7
%326 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.10, i64 0, i64 0), i32 %316, i32 %318, i32 %320, i32 %322, i32 %324, i32 %325)
br label %327
327: ; preds = %314, %296
%328 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%329 = load i32, i32* %328
%330 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%331 = load i32, i32* %330
%332 = add nsw i32 %329, %331
%333 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%334 = load i32, i32* %333
%335 = sub nsw i32 %332, %334
%336 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%337 = load i32, i32* %336
%338 = add nsw i32 %335, %337
%339 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 4
%340 = load i32, i32* %339
%341 = add nsw i32 %338, %340
store i32 %341, i32* %7
%342 = load i32, i32* %7
%343 = load i32, i32* %5
%344 = icmp eq i32 %342, %343
br i1 %344, label %345, label %358
345: ; preds = %327
store i32 1, i32* %8
%346 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%347 = load i32, i32* %346
%348 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%349 = load i32, i32* %348
%350 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%351 = load i32, i32* %350
%352 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%353 = load i32, i32* %352
%354 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 4
%355 = load i32, i32* %354
%356 = load i32, i32* %7
%357 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.11, i64 0, i64 0), i32 %347, i32 %349, i32 %351, i32 %353, i32 %355, i32 %356)
br label %358
358: ; preds = %345, %327
%359 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%360 = load i32, i32* %359
%361 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%362 = load i32, i32* %361
%363 = add nsw i32 %360, %362
%364 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%365 = load i32, i32* %364
%366 = add nsw i32 %363, %365
%367 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%368 = load i32, i32* %367
%369 = add nsw i32 %366, %368
%370 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 4
%371 = load i32, i32* %370
%372 = sub nsw i32 %369, %371
store i32 %372, i32* %7
%373 = load i32, i32* %7
%374 = load i32, i32* %5
%375 = icmp eq i32 %373, %374
br i1 %375, label %376, label %389
376: ; preds = %358
store i32 1, i32* %8
%377 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%378 = load i32, i32* %377
%379 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%380 = load i32, i32* %379
%381 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%382 = load i32, i32* %381
%383 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%384 = load i32, i32* %383
%385 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 4
%386 = load i32, i32* %385
%387 = load i32, i32* %7
%388 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.12, i64 0, i64 0), i32 %378, i32 %380, i32 %382, i32 %384, i32 %386, i32 %387)
br label %389
389: ; preds = %376, %358
%390 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%391 = load i32, i32* %390
%392 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%393 = load i32, i32* %392
%394 = sub nsw i32 %391, %393
%395 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%396 = load i32, i32* %395
%397 = sub nsw i32 %394, %396
%398 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%399 = load i32, i32* %398
%400 = add nsw i32 %397, %399
%401 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 4
%402 = load i32, i32* %401
%403 = add nsw i32 %400, %402
store i32 %403, i32* %7
%404 = load i32, i32* %7
%405 = load i32, i32* %5
%406 = icmp eq i32 %404, %405
br i1 %406, label %407, label %420
407: ; preds = %389
store i32 1, i32* %8
%408 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%409 = load i32, i32* %408
%410 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%411 = load i32, i32* %410
%412 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%413 = load i32, i32* %412
%414 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%415 = load i32, i32* %414
%416 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 4
%417 = load i32, i32* %416
%418 = load i32, i32* %7
%419 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.11, i64 0, i64 0), i32 %409, i32 %411, i32 %413, i32 %415, i32 %417, i32 %418)
br label %420
420: ; preds = %407, %389
%421 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%422 = load i32, i32* %421
%423 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%424 = load i32, i32* %423
%425 = sub nsw i32 %422, %424
%426 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%427 = load i32, i32* %426
%428 = add nsw i32 %425, %427
%429 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%430 = load i32, i32* %429
%431 = sub nsw i32 %428, %430
%432 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 4
%433 = load i32, i32* %432
%434 = add nsw i32 %431, %433
store i32 %434, i32* %7
%435 = load i32, i32* %7
%436 = load i32, i32* %5
%437 = icmp eq i32 %435, %436
br i1 %437, label %438, label %451
438: ; preds = %420
store i32 1, i32* %8
%439 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 0
%440 = load i32, i32* %439
%441 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 1
%442 = load i32, i32* %441
%443 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 2
%444 = load i32, i32* %443
%445 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 3
%446 = load i32, i32* %445
%447 = getelementptr inbounds [100 x i32], [100 x i32]* %2, i64 0, i64 4
%448 = load i32, i32* %447
%449 = load i32, i32* %7
%450 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.13, i64 0, i64 0), i32 %440, i32 %442, i32 %444, i32 %446, i32 %448, i32 %449)
br label %451
451: ; preds = %438, %420
%452 = load i32, i32* %8
%453 = icmp eq i32 %452, 0
br i1 %453, label %454, label %456
454: ; preds = %451
%455 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
br label %456
456: ; preds = %454, %451
br label %457
457: ; preds = %456, %293
ret i32 0
}

LLVM IR (-O2):
@.str = [3 x i8] c"%s\00"
@.str.2 = [13 x i8] c"%d+%d+%d=%d\0A\00"
@.str.3 = [13 x i8] c"%d+%d-%d=%d\0A\00"
@.str.4 = [13 x i8] c"%d-%d-%d=%d\0A\00"
@.str.5 = [16 x i8] c"%d+%d+%d+%d=%d\0A\00"
@.str.6 = [16 x i8] c"%d-%d-%d+%d=%d\0A\00"
@.str.7 = [16 x i8] c"%d+%d+%d-%d=%d\0A\00"
@.str.8 = [16 x i8] c"%d+%d-%d-%d=%d\0A\00"
@.str.9 = [16 x i8] c"%d-%d+%d-%d=%d\0A\00"
@.str.10 = [19 x i8] c"%d+%d+%d+%d+%d=%d\0A\00"
@.str.11 = [19 x i8] c"%d-%d-%d+%d+%d=%d\0A\00"
@.str.12 = [19 x i8] c"%d+%d+%d+%d-%d=%d\0A\00"
@.str.13 = [19 x i8] c"%d-%d+%d-%d+%d=%d\0A\00"
@str.16 = [3 x i8] c"-1\00"
define i32 @main() {
%1 = alloca [100 x i32]
%2 = alloca [100 x i8]
%3 = alloca [100 x i8]
%4 = bitcast [100 x i32]* %1 to i8*
%5 = getelementptr inbounds [100 x i8], [100 x i8]* %2, i64 0, i64 0
%6 = getelementptr inbounds [100 x i8], [100 x i8]* %3, i64 0, i64 0
%7 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8* %6)
%8 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8* %5)
%9 = call i32 (i8*, ...) bitcast (i32 (...)* @atoi to i32 (i8*, ...)*)(i8* %5)
br label %10
10: ; preds = %18, %0
%11 = phi i64 [ %19, %18 ], [ 0, %0 ]
%12 = getelementptr inbounds [100 x i8], [100 x i8]* %3, i64 0, i64 %11
%13 = load i8, i8* %12
switch i8 %13, label %14 [
i8 0, label %20
i8 32, label %18
]
14: ; preds = %10
%15 = sext i8 %13 to i32
%16 = add nsw i32 %15, -48
%17 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 %11
store i32 %16, i32* %17
br label %18
18: ; preds = %10, %14
%19 = add nuw i64 %11, 1
br label %10
20: ; preds = %10
%21 = trunc i64 %11 to i32
switch i32 %21, label %170 [
i32 2, label %22
i32 3, label %24
i32 4, label %62
i32 5, label %113
]
22: ; preds = %20
%23 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str.16, i64 0, i64 0))
br label %170
24: ; preds = %20
%25 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 0
%26 = load i32, i32* %25
%27 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 1
%28 = load i32, i32* %27
%29 = add nsw i32 %28, %26
%30 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 2
%31 = load i32, i32* %30
%32 = add nsw i32 %29, %31
%33 = icmp eq i32 %32, %9
br i1 %33, label %34, label %36
34: ; preds = %24
%35 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.2, i64 0, i64 0), i32 %26, i32 %28, i32 %31, i32 %9)
br label %36
36: ; preds = %34, %24
%37 = phi i32 [ 1, %34 ], [ 0, %24 ]
%38 = sub nsw i32 %26, %28
%39 = add nsw i32 %38, %31
%40 = icmp eq i32 %39, %9
br i1 %40, label %41, label %43
41: ; preds = %36
%42 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.2, i64 0, i64 0), i32 %26, i32 %28, i32 %31, i32 %9)
br label %43
43: ; preds = %41, %36
%44 = phi i32 [ 1, %41 ], [ %37, %36 ]
%45 = sub nsw i32 %29, %31
%46 = icmp eq i32 %45, %9
br i1 %46, label %51, label %47
47: ; preds = %43
%48 = add i32 %28, %31
%49 = sub i32 %26, %48
%50 = icmp eq i32 %49, %9
br i1 %50, label %56, label %58
51: ; preds = %43
%52 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.3, i64 0, i64 0), i32 %26, i32 %28, i32 %31, i32 %9)
%53 = add i32 %28, %31
%54 = sub i32 %26, %53
%55 = icmp eq i32 %54, %9
br i1 %55, label %56, label %170
56: ; preds = %51, %47
%57 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.4, i64 0, i64 0), i32 %26, i32 %28, i32 %31, i32 %9)
br label %170
58: ; preds = %47
%59 = icmp eq i32 %44, 0
br i1 %59, label %60, label %170
60: ; preds = %58
%61 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str.16, i64 0, i64 0))
br label %170
62: ; preds = %20
%63 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 0
%64 = load i32, i32* %63
%65 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 1
%66 = load i32, i32* %65
%67 = add nsw i32 %66, %64
%68 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 2
%69 = load i32, i32* %68
%70 = add nsw i32 %67, %69
%71 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 3
%72 = load i32, i32* %71
%73 = add nsw i32 %70, %72
%74 = icmp eq i32 %73, %9
br i1 %74, label %75, label %77
75: ; preds = %62
%76 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.5, i64 0, i64 0), i32 %64, i32 %66, i32 %69, i32 %72, i32 %9)
br label %77
77: ; preds = %75, %62
%78 = phi i32 [ 1, %75 ], [ 0, %62 ]
%79 = add i32 %66, %69
%80 = sub i32 %64, %79
%81 = add i32 %80, %72
%82 = icmp eq i32 %81, %9
br i1 %82, label %83, label %85
83: ; preds = %77
%84 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.6, i64 0, i64 0), i32 %64, i32 %66, i32 %69, i32 %72, i32 %9)
br label %85
85: ; preds = %83, %77
%86 = phi i32 [ 1, %83 ], [ %78, %77 ]
%87 = sub nsw i32 %70, %72
%88 = icmp eq i32 %87, %9
br i1 %88, label %89, label %91
89: ; preds = %85
%90 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 %64, i32 %66, i32 %69, i32 %72, i32 %9)
br label %91
91: ; preds = %89, %85
%92 = phi i32 [ 1, %89 ], [ %86, %85 ]
%93 = add i32 %69, %72
%94 = sub i32 %67, %93
%95 = icmp eq i32 %94, %9
br i1 %95, label %101, label %96
96: ; preds = %91
%97 = add i32 %64, %69
%98 = add i32 %66, %72
%99 = sub i32 %97, %98
%100 = icmp eq i32 %99, %9
br i1 %100, label %107, label %109
101: ; preds = %91
%102 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.8, i64 0, i64 0), i32 %64, i32 %66, i32 %69, i32 %72, i32 %9)
%103 = add i32 %64, %69
%104 = add i32 %66, %72
%105 = sub i32 %103, %104
%106 = icmp eq i32 %105, %9
br i1 %106, label %107, label %170
107: ; preds = %101, %96
%108 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.9, i64 0, i64 0), i32 %64, i32 %66, i32 %69, i32 %72, i32 %9)
br label %170
109: ; preds = %96
%110 = icmp eq i32 %92, 0
br i1 %110, label %111, label %170
111: ; preds = %109
%112 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str.16, i64 0, i64 0))
br label %170
113: ; preds = %20
%114 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 0
%115 = load i32, i32* %114
%116 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 1
%117 = load i32, i32* %116
%118 = add nsw i32 %117, %115
%119 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 2
%120 = load i32, i32* %119
%121 = add nsw i32 %118, %120
%122 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 3
%123 = load i32, i32* %122
%124 = add nsw i32 %121, %123
%125 = getelementptr inbounds [100 x i32], [100 x i32]* %1, i64 0, i64 4
%126 = load i32, i32* %125
%127 = add nsw i32 %124, %126
%128 = icmp eq i32 %127, %9
br i1 %128, label %129, label %131
129: ; preds = %113
%130 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.10, i64 0, i64 0), i32 %115, i32 %117, i32 %120, i32 %123, i32 %126, i32 %9)
br label %131
131: ; preds = %129, %113
%132 = phi i32 [ 1, %129 ], [ 0, %113 ]
%133 = add i32 %126, %123
%134 = sub i32 %133, %120
%135 = add i32 %134, %118
%136 = icmp eq i32 %135, %9
br i1 %136, label %137, label %139
137: ; preds = %131
%138 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.11, i64 0, i64 0), i32 %115, i32 %117, i32 %120, i32 %123, i32 %126, i32 %9)
br label %139
139: ; preds = %137, %131
%140 = phi i32 [ 1, %137 ], [ %132, %131 ]
%141 = sub nsw i32 %124, %126
%142 = icmp eq i32 %141, %9
br i1 %142, label %143, label %145
143: ; preds = %139
%144 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.12, i64 0, i64 0), i32 %115, i32 %117, i32 %120, i32 %123, i32 %126, i32 %9)
br label %145
145: ; preds = %143, %139
%146 = phi i32 [ 1, %143 ], [ %140, %139 ]
%147 = add i32 %133, %115
%148 = add i32 %117, %120
%149 = sub i32 %147, %148
%150 = icmp eq i32 %149, %9
br i1 %150, label %157, label %151
151: ; preds = %145
%152 = add i32 %115, %120
%153 = add i32 %117, %123
%154 = sub i32 %152, %153
%155 = add i32 %154, %126
%156 = icmp eq i32 %155, %9
br i1 %156, label %164, label %166
157: ; preds = %145
%158 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.11, i64 0, i64 0), i32 %115, i32 %117, i32 %120, i32 %123, i32 %126, i32 %9)
%159 = add i32 %115, %120
%160 = add i32 %117, %123
%161 = sub i32 %159, %160
%162 = add i32 %161, %126
%163 = icmp eq i32 %162, %9
br i1 %163, label %164, label %170
164: ; preds = %157, %151
%165 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.13, i64 0, i64 0), i32 %115, i32 %117, i32 %120, i32 %123, i32 %126, i32 %9)
br label %170
166: ; preds = %151
%167 = icmp eq i32 %146, 0
br i1 %167, label %168, label %170
168: ; preds = %166
%169 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str.16, i64 0, i64 0))
br label %170
170: ; preds = %157, %101, %51, %20, %60, %58, %22, %56, %111, %109, %107, %164, %166, %168
ret i32 0
}