int main() {
  int n1, n2, n3;
  int ***array;
  int i, j, k;
  printf("请输入所要创建的动态数组的第一维长度：");
  scanf("%d", &n1);
  printf("请输入所要创建的动态数组的第二维长度：");
  scanf("%d", &n2);
  printf("请输入所要创建的动态数组的第三维长度：");
  scanf("%d", &n3);
  array = (int ***)malloc(n1 * sizeof(int **));
  for (i = 0; i < n1; i++) {
    array[i] = (int **)malloc(n2 * sizeof(int *));
    for (j = 0; j < n2; j++) {
      array[i][j] = (int *)malloc(n3 * sizeof(int));
    }
  }
  for (i = 0; i < n1; i++) {
    for (j = 0; j < n2; j++) {
      for (k = 0; k < n3; k++) {
        array[i][j][k] = i + j + k + 1;
        printf("%d\t", array[i][j][k]);
      }
      printf("\n");
    }
    printf("\n");
  }
  for (i = 0; i < n1; i++) {
    for (j = 0; j < n2; j++) {
      free(array[i][j]);
    }
  }
  for (i = 0; i < n1; i++) {
    free(array[i]);
  }
  free(array);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xeaa(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xed6(%rip),%rdi
lea    -0x8(%rbp),%rsi
mov    $0x0,%al
call   1060 <scanf@plt>
lea    0xec7(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xeb6(%rip),%rdi
lea    -0xc(%rbp),%rsi
mov    $0x0,%al
call   1060 <scanf@plt>
lea    0xee1(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xe96(%rip),%rdi
lea    -0x10(%rbp),%rsi
mov    $0x0,%al
call   1060 <scanf@plt>
movslq -0x8(%rbp),%rdi
shl    $0x3,%rdi
call   1050 <malloc@plt>
mov    %rax,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1247 <main+0x107>
movslq -0xc(%rbp),%rdi
shl    $0x3,%rdi
call   1050 <malloc@plt>
mov    %rax,%rdx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1234 <main+0xf4>
movslq -0x10(%rbp),%rdi
shl    $0x2,%rdi
call   1050 <malloc@plt>
mov    %rax,%rdx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11f6 <main+0xb6>
jmp    1239 <main+0xf9>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11c7 <main+0x87>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1316 <main+0x1d6>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    12fa <main+0x1ba>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    12de <main+0x19e>
mov    -0x1c(%rbp),%edx
add    -0x20(%rbp),%edx
add    -0x24(%rbp),%edx
add    $0x1,%edx
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,4),%esi
lea    0xde8(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1274 <main+0x134>
lea    0xdd0(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1261 <main+0x121>
lea    0xdb4(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    124e <main+0x10e>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1376 <main+0x236>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1363 <main+0x223>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1330 <main+0x1f0>
jmp    1368 <main+0x228>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    131d <main+0x1dd>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    13a8 <main+0x268>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <free@plt>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    137d <main+0x23d>
mov    -0x18(%rbp),%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
lea    0xe9b(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xec7(%rip),%rbx
lea    0x8(%rsp),%rsi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <scanf@plt>
lea    0xeb4(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x4(%rsp),%rsi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <scanf@plt>
lea    0xed1(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xc(%rsp),%rsi
mov    %rbx,%rdi
xor    %eax,%eax
call   1070 <scanf@plt>
movslq 0x8(%rsp),%rbx
lea    0x0(,%rbx,8),%rdi
call   1060 <malloc@plt>
mov    %rax,%r15
test   %rbx,%rbx
jle    1387 <main+0x237>
mov    %r15,0x18(%rsp)
mov    %ebx,%eax
mov    %rax,0x10(%rsp)
mov    0x4(%rsp),%r14d
movslq %r14d,%r15
shl    $0x3,%r15
movslq 0xc(%rsp),%r12
shl    $0x2,%r12
xor    %r13d,%r13d
jmp    120b <main+0xbb>
add    $0x1,%r13
cmp    0x10(%rsp),%r13
je     1247 <main+0xf7>
mov    %r15,%rdi
call   1060 <malloc@plt>
mov    %rax,%rbx
mov    0x18(%rsp),%rax
mov    %rbx,(%rax,%r13,8)
test   %r14d,%r14d
jle    1200 <main+0xb0>
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
mov    %r12,%rdi
call   1060 <malloc@plt>
mov    %rax,(%rbx,%rbp,8)
add    $0x1,%rbp
cmp    %rbp,%r14
jne    1230 <main+0xe0>
jmp    1200 <main+0xb0>
cmpl   $0x0,0x10(%rsp)
mov    0x18(%rsp),%r15
jle    1387 <main+0x237>
mov    $0x1,%eax
mov    %rax,0x20(%rsp)
lea    0xe49(%rip),%rbx
xor    %r13d,%r13d
jmp    1292 <main+0x142>
nopl   (%rax)
mov    $0xa,%edi
call   1040 <putchar@plt>
movslq 0x8(%rsp),%rax
addq   $0x1,0x20(%rsp)
mov    0x10(%rsp),%rcx
mov    %rcx,%r13
cmp    %rax,%rcx
jge    1306 <main+0x1b6>
lea    0x1(%r13),%rax
mov    %rax,0x10(%rsp)
cmpl   $0x0,0x4(%rsp)
jle    1270 <main+0x120>
mov    0x20(%rsp),%rbp
xor    %r12d,%r12d
jmp    12cc <main+0x17c>
nopl   0x0(%rax)
mov    $0xa,%edi
call   1040 <putchar@plt>
add    $0x1,%r12
movslq 0x4(%rsp),%rax
add    $0x1,%rbp
cmp    %rax,%r12
jge    1270 <main+0x120>
cmpl   $0x0,0xc(%rsp)
jle    12b0 <main+0x160>
mov    0x18(%rsp),%rax
mov    (%rax,%r13,8),%r14
xor    %r15d,%r15d
nop
lea    (%r15,%rbp,1),%esi
mov    (%r14,%r12,8),%rax
mov    %esi,(%rax,%r15,4)
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
add    $0x1,%r15
movslq 0xc(%rsp),%rax
cmp    %rax,%r15
jl     12e0 <main+0x190>
jmp    12b0 <main+0x160>
test   %eax,%eax
mov    0x18(%rsp),%r15
jle    1387 <main+0x237>
mov    0x4(%rsp),%ecx
xor    %r14d,%r14d
jmp    132c <main+0x1dc>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r14
movslq %eax,%rdx
cmp    %rdx,%r14
jge    135e <main+0x20e>
test   %ecx,%ecx
jle    1320 <main+0x1d0>
mov    (%r15,%r14,8),%rbp
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
mov    0x0(%rbp,%rbx,8),%rdi
call   1030 <free@plt>
add    $0x1,%rbx
movslq 0x4(%rsp),%rcx
cmp    %rcx,%rbx
jl     1340 <main+0x1f0>
mov    0x8(%rsp),%eax
jmp    1320 <main+0x1d0>
test   %eax,%eax
jle    1387 <main+0x237>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%r15,%rbx,8),%rdi
call   1030 <free@plt>
add    $0x1,%rbx
movslq 0x8(%rsp),%rax
cmp    %rax,%rbx
jl     1370 <main+0x220>
mov    %r15,%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [58 x i8] c"\E8\AF\B7\E8\BE\93\E5\85\A5\E6\89\80\E8\A6\81\E5\88\9B\E5\BB\BA\E7\9A\84\E5\8A\A8\E6\80\81\E6\95\B0\E7\BB\84\E7\9A\84\E7\AC\AC\E4\B8\80\E7\BB\B4\E9\95\BF\E5\BA\A6\EF\BC\9A\00"
@.str.1 = [3 x i8] c"%d\00"
@.str.2 = [58 x i8] c"\E8\AF\B7\E8\BE\93\E5\85\A5\E6\89\80\E8\A6\81\E5\88\9B\E5\BB\BA\E7\9A\84\E5\8A\A8\E6\80\81\E6\95\B0\E7\BB\84\E7\9A\84\E7\AC\AC\E4\BA\8C\E7\BB\B4\E9\95\BF\E5\BA\A6\EF\BC\9A\00"
@.str.3 = [58 x i8] c"\E8\AF\B7\E8\BE\93\E5\85\A5\E6\89\80\E8\A6\81\E5\88\9B\E5\BB\BA\E7\9A\84\E5\8A\A8\E6\80\81\E6\95\B0\E7\BB\84\E7\9A\84\E7\AC\AC\E4\B8\89\E7\BB\B4\E9\95\BF\E5\BA\A6\EF\BC\9A\00"
@.str.4 = [4 x i8] c"%d\09\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = bitcast i32* %1 to i8*
%5 = bitcast i32* %2 to i8*
%6 = bitcast i32* %3 to i8*
%7 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([58 x i8], [58 x i8]* @.str, i64 0, i64 0))
%8 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %1)
%9 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([58 x i8], [58 x i8]* @.str.2, i64 0, i64 0))
%10 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %2)
%11 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([58 x i8], [58 x i8]* @.str.3, i64 0, i64 0))
%12 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %3)
%13 = load i32, i32* %1
%14 = sext i32 %13 to i64
%15 = shl nsw i64 %14, 3
%16 = call i8* @malloc(i64 %15)
%17 = bitcast i8* %16 to i32***
%18 = icmp sgt i32 %13, 0
br i1 %18, label %19, label %124
19: ; preds = %0
%20 = load i32, i32* %2
%21 = sext i32 %20 to i64
%22 = shl nsw i64 %21, 3
%23 = icmp sgt i32 %20, 0
%24 = load i32, i32* %3
%25 = sext i32 %24 to i64
%26 = shl nsw i64 %25, 2
%27 = zext i32 %13 to i64
%28 = zext i32 %20 to i64
br label %30
29: ; preds = %43
br i1 %18, label %46, label %124
30: ; preds = %19, %43
%31 = phi i64 [ 0, %19 ], [ %44, %43 ]
%32 = call i8* @malloc(i64 %22)
%33 = getelementptr inbounds i32**, i32*** %17, i64 %31
%34 = bitcast i32*** %33 to i8**
store i8* %32, i8** %34
%35 = bitcast i8* %32 to i32**
br i1 %23, label %36, label %43
36: ; preds = %30, %36
%37 = phi i64 [ %41, %36 ], [ 0, %30 ]
%38 = call i8* @malloc(i64 %26)
%39 = getelementptr inbounds i32*, i32** %35, i64 %37
%40 = bitcast i32** %39 to i8**
store i8* %38, i8** %40
%41 = add nuw nsw i64 %37, 1
%42 = icmp eq i64 %41, %28
br i1 %42, label %43, label %36
43: ; preds = %36, %30
%44 = add nuw nsw i64 %31, 1
%45 = icmp eq i64 %44, %27
br i1 %45, label %29, label %30
46: ; preds = %29, %83
%47 = phi i64 [ %50, %83 ], [ 0, %29 ]
%48 = load i32, i32* %2
%49 = icmp sgt i32 %48, 0
%50 = add nuw nsw i64 %47, 1
br i1 %49, label %51, label %83
51: ; preds = %46
%52 = getelementptr inbounds i32**, i32*** %17, i64 %47
br label %57
53: ; preds = %83
%54 = icmp sgt i32 %85, 0
br i1 %54, label %55, label %124
55: ; preds = %53
%56 = load i32, i32* %2
br label %88
57: ; preds = %51, %77
%58 = phi i64 [ 0, %51 ], [ %79, %77 ]
%59 = load i32, i32* %3
%60 = icmp sgt i32 %59, 0
br i1 %60, label %61, label %77
61: ; preds = %57
%62 = add nuw nsw i64 %50, %58
%63 = load i32**, i32*** %52
%64 = getelementptr inbounds i32*, i32** %63, i64 %58
%65 = trunc i64 %62 to i32
br label %66
66: ; preds = %61, %66
%67 = phi i64 [ 0, %61 ], [ %73, %66 ]
%68 = trunc i64 %67 to i32
%69 = add i32 %65, %68
%70 = load i32*, i32** %64
%71 = getelementptr inbounds i32, i32* %70, i64 %67
store i32 %69, i32* %71
%72 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %69)
%73 = add nuw nsw i64 %67, 1
%74 = load i32, i32* %3
%75 = sext i32 %74 to i64
%76 = icmp slt i64 %73, %75
br i1 %76, label %66, label %77
77: ; preds = %66, %57
%78 = call i32 @putchar(i32 10)
%79 = add nuw nsw i64 %58, 1
%80 = load i32, i32* %2
%81 = sext i32 %80 to i64
%82 = icmp slt i64 %79, %81
br i1 %82, label %57, label %83
83: ; preds = %77, %46
%84 = call i32 @putchar(i32 10)
%85 = load i32, i32* %1
%86 = sext i32 %85 to i64
%87 = icmp slt i64 %50, %86
br i1 %87, label %46, label %53
88: ; preds = %55, %109
%89 = phi i32 [ %85, %55 ], [ %110, %109 ]
%90 = phi i32 [ %56, %55 ], [ %111, %109 ]
%91 = phi i64 [ 0, %55 ], [ %112, %109 ]
%92 = icmp sgt i32 %90, 0
br i1 %92, label %93, label %109
93: ; preds = %88
%94 = getelementptr inbounds i32**, i32*** %17, i64 %91
%95 = load i32**, i32*** %94
br label %98
96: ; preds = %109
%97 = icmp sgt i32 %110, 0
br i1 %97, label %115, label %124
98: ; preds = %93, %98
%99 = phi i64 [ 0, %93 ], [ %103, %98 ]
%100 = getelementptr inbounds i32*, i32** %95, i64 %99
%101 = bitcast i32** %100 to i8**
%102 = load i8*, i8** %101
%103 = add nuw nsw i64 %99, 1
%104 = load i32, i32* %2
%105 = sext i32 %104 to i64
%106 = icmp slt i64 %103, %105
br i1 %106, label %98, label %107
107: ; preds = %98
%108 = load i32, i32* %1
br label %109
109: ; preds = %107, %88
%110 = phi i32 [ %108, %107 ], [ %89, %88 ]
%111 = phi i32 [ %104, %107 ], [ %90, %88 ]
%112 = add nuw nsw i64 %91, 1
%113 = sext i32 %110 to i64
%114 = icmp slt i64 %112, %113
br i1 %114, label %88, label %96
115: ; preds = %96, %115
%116 = phi i64 [ %120, %115 ], [ 0, %96 ]
%117 = getelementptr inbounds i32**, i32*** %17, i64 %116
%118 = bitcast i32*** %117 to i8**
%119 = load i8*, i8** %118
%120 = add nuw nsw i64 %116, 1
%121 = load i32, i32* %1
%122 = sext i32 %121 to i64
%123 = icmp slt i64 %120, %122
br i1 %123, label %115, label %124
124: ; preds = %115, %0, %29, %53, %96
ret i32 0
}