Brainf*ck による言語処理系 第6回 〜配列, 多次元配列〜

今回解説する配列および多次元配列は、この言語処理系の目玉の機能です。今回は配列の実現方法について解説します。

いずれの命令も、スタックトップに積まれたインデックスを用いて要素を指定し、一つずつロードやストアを行います。ストア命令では、「書き込む値」「インデックス」の順でスタックに積みます。

- 一次元配列
  - ロード: `load_address <pos>`
  - ストア: `store_address <pos>`
- 多次元配列 (インデックスは C での右から順にスタックに積む)
  - ロード: `multi_dim_load <pos> <shape>`
  - ストア: `multi_dim_store <pos> <shape>`
  
各命令の実装は長いので、今回はコンセプトやメモリレイアウトのみ解説します。

# 多次元配列を用いたプログラムの例 (数独ソルバー)

まずは多次元配列の実装によって実現できるようになるコードを示します。

以下は二次元配列を用いた数独ソルバーです。数独のデータを入力する `arr grid[9][9]` と未確定のセルを管理する `arr emptycells[2][9 * 9]` に二次元配列を用いています。

```c
arr grid[9][9];

// 問題入力
for (var i = 0; i < 9; i += 1) {
    for (var j = 0; j < 9; j += 1) {
        var c = getchar();
        if (c == '.') {
            grid[i][j] = 0;
        } else {
            grid[i][j] = c - '0';
        }
    }
}

// 問題表示
for (var i = 0; i < 9; i += 1) {
    if (i % 3 == 0) {
        putchar('+');
        for (var j = 0; j < 3; j += 1) {
            putchar('-');
            for (var k = 0; k < 3; k += 1) {
                putchar('-');
                putchar('-');
            }
            putchar('+');
        }
        putchar('\n');
    }
    for (var j = 0; j < 9; j += 1) {
        if (j % 3 == 0) {
            putchar('|');
            putchar(' ');
        }
        if (grid[i][j] == 0) {
            putchar(' ');
        } else {
            putint(grid[i][j]);
        }
        putchar(' ');
    }
    putchar('|');
    putchar('\n');
}
putchar('+');
for (var i = 0; i < 3; i += 1) {
    putchar('-');
    for (var j = 0; j < 3; j += 1) {
        putchar('-');
        putchar('-');
    }
    putchar('+');
}
putchar('\n');

// 前処理
arr emptycells[2][9 * 9];
var numempty = 0;
for (var row = 0; row < 9; row += 1) {
    for (var col = 0; col < 9; col += 1) {
        if (grid[row][col] == 0) {
            emptycells[0][numempty] = row;
            emptycells[1][numempty] = col;
            numempty += 1;
        }
    }
}

// メイン処理
arr triednumbers[9 * 9];
var k = 0;
while (k != 255 & k < numempty) {
    var row = emptycells[0][k];
    var col = emptycells[1][k];
    var found = 0;
    var num = triednumbers[k] + 1;
    while (num <= 9 & !found) {
        var safe = 1;
        var x = 0;
        while (x < 9 & safe) {
            if (grid[row][x] == num) {
                safe = 0;
            }
            x += 1;
        }
        x = 0;
        while (x < 9 & safe) {
            if (grid[x][col] == num) {
                safe = 0;
            }
            x += 1;
        }
        if (safe) {
            var startrow = row - row % 3;
            var startcol = col - col % 3;
            var i = 0;
            while (i < 3 & safe) {
                var j = 0;
                while (j < 3 & safe) {
                    if (grid[startrow + i][startcol + j] == num) {
                        safe = 0;
                    }
                    j += 1;
                }
                i += 1;
            }
        }
        if (safe) {
            grid[row][col] = num;
            triednumbers[k] = num;
            found = 1;
            k += 1;
        } else {
            num += 1;
        }
    }
    if (!found) {
        grid[row][col] = 0;
        triednumbers[k] = 0;
        k -= 1;
    }
}
// メイン処理ここまで

if (k == numempty) { // 解を発見
    // 解を表示
    for (var i = 0; i < 9; i += 1) {
        if (i % 3 == 0) {
            putchar('+');
            for (var j = 0; j < 3; j += 1) {
                putchar('-');
                for (var k = 0; k < 3; k += 1) {
                    putchar('-');
                    putchar('-');
                }
                putchar('+');
            }
            putchar('\n');
        }
        for (var j = 0; j < 9; j += 1) {
            if (j % 3 == 0) {
                putchar('|');
                putchar(' ');
            }
            if (grid[i][j] == 0) {
                putchar(' ');
            } else {
                putint(grid[i][j]);
            }
            putchar(' ');
        }
        putchar('|');
        putchar('\n');
    }
    putchar('+');
    for (var i = 0; i < 3; i += 1) {
        putchar('-');
        for (var j = 0; j < 3; j += 1) {
            putchar('-'); putchar('-');
        }
        putchar('+');
    }
    putchar('\n');
} else { // 解なし
    putchar('n');
    putchar('o');
    putchar(' ');
    putchar('s');
    putchar('o');
    putchar('l');
    putchar('u');
    putchar('t');
    putchar('i');
    putchar('o');
    putchar('n');
    putchar('\n');
}
```

<details><summary>コンパイル結果 52594 bytes (改行込み) </summary>

```brainfuck
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]++++++++
+>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-][-]>[-]
><<[-]>[-<+>][-]>>[-]<<<[->>+>+<<<]>>>[-<<<+>>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[
<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-],><<[-]>[-<+>]>[-]<<[->+>+<<
]>>[-<<+>>][-]++++++++++++++++++++++++++++++++++++++++++++++><[-<->][-]+<[[-]>-<
]>[-<+>]+<[[-]>->[-]>>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]>[-]<<<<<<
<<[->>>>>>>+>+<<<<<<<<]>>>>>>>>[-<<<<<<<<+>>>>>>>>]<[-<<<<<<<<<+>>>>>>>>>]<[-<<<
<<<<<<+>>>>>>>>>]<[-<<<<<<<<<+>>>>>>>>>]<<<<<<<[>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>
]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<
<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<+<-]<[<<<[->>>>+<<<<]>[-<+>]<+>>[-<+>]>-[-<+>]<]<
<<[-]>>[-<<+>>]<[->+<]>[->>>[-<<<<+>>>>]<<<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<
<<<<<<<]>>>>>>>>>>>>>>]>>>>>><<]>[->>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]++++
++++++++++++++++++++++++++++++++++++++++++++><[-<->]>[-]<<<<<<[->>>>>+>+<<<<<<]>
>>>>>[-<<<<<<+>>>>>>]>[-]<<<<<<<<[->>>>>>>+>+<<<<<<<<]>>>>>>>>[-<<<<<<<<+>>>>>>>
>]<[-<<<<<<<<<+>>>>>>>>>]<[-<<<<<<<<<+>>>>>>>>>]<[-<<<<<<<<<+>>>>>>>>>]<<<<<<<[>
[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<
<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<+<-]<[<<<[->>>>+<<
<<]>[-<+>]<+>>[-<+>]>-[-<+>]<]<<<[-]>>[-<<+>>]<[->+<]>[->>>[-<<<<+>>>>]<<<[->+<]
>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>]>>>>>><]<>[-]<<<[->>+>+<<<
]>>>[-<<<+>>>][-]+><[-<+>]<<<[-]>>[-<<+>>]>[-]<<<[->>+>+<<<]>>>[-<<<+>>>][-]++++
+++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-]<[
-]>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+
++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-
][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<
<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-]>[-]<<[->+>+<<]>>[-<<+>>][-]++
+><<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+<<<]>>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]
>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<
+>]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<
[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]<[-][-]><[-<->][-]+<[[-]>-<]>[-<+>]+<[
[-]>->[-]+++++++++++++++++++++++++++++++++++++++++++><.[-][-]>[-]><<[-]>[-<+>]>[
-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<
<+<+[-]>[[-]<+>]<[[-][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]
+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-][-]+++++++++++++
++++++++++++++++++++++++++++++++><.[-][-]+++++++++++++++++++++++++++++++++++++++
++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-
<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<
]<[-][-]+++++++++++++++++++++++++++++++++++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>
>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<
<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]++++++++++><.[-]<<]>[-><]<[
-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<
[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>
<<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+<<<]>>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>
>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<+>
]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-
]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]<[-][-]><[-<->][-]+<[[-]>-<]>[-<+>]+<[[-
]>->[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++><.[-]<<]>[-><]<>[-]<<[->+>+<
<]>>[-<<+>>]>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<[-<<<<<+>>>>>]<[-<<<<<+>>>>>]<
<<<[>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<
<<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<
[->+>>+<<<]>[-<+>]>[->>>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<
<<<<<<<<<]<<[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>+<<<<<]>
>>>>>[-]><[-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->[-]++++++++++++++++++++++++++++++++
><.[-]<<]>[->>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]>[-]<<<<<<[->>>>>+>+<<<<<<]>>>
>>>[-<<<<<<+>>>>>>]<[-<<<<<<<+>>>>>>>]<[-<<<<<<<+>>>>>>>]<<<<<<[>[-<<<<<<<<<<<<<
<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>
>>]<<<<<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<+>]>[
->>>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]<<[->>>>>>
>>>>>>>>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>>>+<<<<<<<]>>>>>>>>>[-]<<[->
+>+<<]>>[-<<+>>][-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<-
>>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]+<[[-]>->>[-]<<<<[->>>+>+<<<<]>>>>
[-<<<<+>>>>][-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<<<[->>>+>+<<
<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-
]<+>][-]+<[[-]>-<]>[-<+>]<[-<+<[-<->>>+>+<<<]>>[-<<+>>]<<<[->>>+>>+<<<<<]>>>>>[-
<<<<<+>>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-
]+<[[-]>-<]>[-<+>]<]<<[-]<[-]>>[-<<+>>]<[-]+++++++++++++++++++++++++++++++++++++
+++++++++++><[-<+>]<.[-]<<]>[-><]<>[-]<<[->+>+<<]>>[-<<+>>][-]++++++++++>[-]>[-]
+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]+
<[[-]>->>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><<[->>+>+<<
<]>>>[-<<<+>>>]<<[->>+>+<<<]>>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<
->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<+>]<<[->>+>>+
<<<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[
[-]<+>][-]+<[[-]>-<]>[-<+>]<]<[-][-]++++++++++><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<<
<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<
<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<[-<+<[-<->>>+>+<<<]>>[-<<+>>]<<<[->>>+>>+<<
<<<]>>>>>[-<<<<<+>>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]
>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]<<[-]<[-]>>[-<<+>>]<[-]++++++++++++++++++++++++++
++++++++++++++++++++++><[-<+>]<.[-]<<]>[-><]<>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++
+++><<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+<<<]>>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[
>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[
-<+>]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>
]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]<[-][-]+++++++++++++++++++++++++++++
+++++++++++++++++++><[-<+>]<.[-]<[-]<]<[-]++++++++++++++++++++++++++++++++><.[-]
>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++
++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][
-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++><.[-][-]++++++++++><.[-]>[-]<<[->
+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-
]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]+++++++
++++++++++++++++++++++++++++++++++++><.[-][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[
-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]
<[[-][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<
[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-][-]+++++++++++++++++++++++++++++
++++++++++++++++><.[-][-]+++++++++++++++++++++++++++++++++++++++++++++><.[-]>[-]
<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]
>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]++++++++
+++++++++++++++++++++++++++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<
[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-
<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]++++++++++><.[-][-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]><<[-]>[-<+>][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-
<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-
]<+>]<[[-][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]
+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-]>[-]<<[->+>+<<]>>[-<<
+>>]>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<<<<<<<+>
>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]
<<<<<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<+>]>[->>
>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]<<[->>>>>>>>>
>>>>>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>[-]><[-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->>[-]<<<<<[->>>>+>+<
<<<<]>>>>>[-<<<<<+>>>>>]>[-]<<<<<<<[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>][
-]><[-<<<<<<<<<+>>>>>>>>>]<[-<<<<<<<<<+>>>>>>>>>]<[-<<<<<<<<<+>>>>>>>>>]<<<<<<<[
>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+<-]<[<<<
[->>>>+<<<<]>[-<+>]<+>>[-<+>]>-[-<+>]<]<<<[-]>>[-<<+>>]<[->+<]>[->>>[-<<<<+>>>>]
<<<[->+<]>]>>>[-[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]>>>>>>>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>
>]>[-]<<<<<<<[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>][-]+><[-<<<<<<<<<+>>>>>
>>>>]<[-<<<<<<<<<+>>>>>>>>>]<[-<<<<<<<<<+>>>>>>>>>]<<<<<<<[>[-<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+<-]<[<<<[->>>>+<<<<]>[-<+>]<+
>>[-<+>]>-[-<+>]<]<<<[-]>>[-<<+>>]<[->+<]>[->>>[-<<<<+>>>>]<<<[->+<]>]>>>[-[->>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>]>>>>>>>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]+><[
-<+>]<<<<<<[-]>>>>>[-<<<<<+>>>>>]<<]>[-><]<>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]
<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[
->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<
<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[-
>]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]><<[-]>[-<+>
][-]>[-]>[-]>[-]>>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]+++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++><[-<->][-]<[[-]>+<]>[-<+>]>[-]<<<<<<<[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>
>>>>>]>[-]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]
>[[-]<+>][-]+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<[[-]>[-]<<<<
<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]><[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[
-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<
[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<
+>]>[->>>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]<<[->>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<[-]>>>>[-<<<<+>>>>
]>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]+><[-<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>
>+<<<]>[-<+>]>[->>>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]<<[->>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<[-]>>>[-<
<<+>>>][-]><<<[-]>>[-<<+>>]>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<[-<
<<<<<<+>>>>>>>]<<<<<<<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<+>]
>[->>>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>><<[->>>>>>>+<<<<<<<]>>>>>>>>[-]+><[-<+>]<<
[-]>[-<+>][-]>[-]>>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]+++++++++>[-]>[-]+>[-]
+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+[-]<+[[-]>+<]>[-<+>][-]+<[[-]>-<]>[-<+>]
>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]+<[[-]>-<]>[-<+>][-]+>[-]+<<
<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<[[-][-]+><<<[-]>>[-<<+>>][-]><<[
-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]
<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]+>[-]+<
<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<[[-]>[-]<<[->+>+<<]>>[-<<+>>]>[
-]<<<<<<<<[->>>>>>>+>+<<<<<<<<]>>>>>>>>[-<<<<<<<<+>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>
>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<<
+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<+>]>[->>>[-<<<<+>>>>
]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]<<[->>>>>>>>>>>>>>+<<<<<<
<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>
>]<[-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->[-]><<<<<[-]>>>>[-<<<<+>>>>]<<]>[-><]<>[-]
<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++
++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]>[-]<<<<[->
>>+>+<<<<]>>>>[-<<<<+>>>>][-]+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<-
>>]<<][-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<
<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>
>>][-]+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<[[-]>[-]<<<<<<[->>
>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]>[-]<<<[->>+>+<<<]>>>[-<<<+>>>]<[-<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<<<<<<<+>>>>>>
>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<<
<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<+>]>[->>>[-<<
<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]<<[->>>>>>>>>>>>>>
+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<[->>>>+>+<<<<<]>>>>>[-<<<
<<+>>>>>]<[-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->[-]><<<<<[-]>>>>[-<<<<+>>>>]<<]>[->
<]<>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]
+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]>[-]
<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>
[[-]<<->>]<<][-]>[-]>[-]>>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]+<[[-]
>->>[-]<<<<<<<<<<<<[->>>>>>>>>>>+>+<<<<<<<<<<<<]>>>>>>>>>>>>[-<<<<<<<<<<<<+>>>>>
>>>>>>>]>[-]<<<<<<<<<<<<<[->>>>>>>>>>>>+>+<<<<<<<<<<<<<]>>>>>>>>>>>>>[-<<<<<<<<<
<<<<+>>>>>>>>>>>>>][-]+++><<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+<<<]>>>[-<<<+>>>][-
]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-
<+>]<[-<[-<->>+>+<<]>[-<+>]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<
<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]<[-]<[-<->]<<<
<<<[-]>>>>>[-<<<<<+>>>>>]>[-]<<<<<<<<<<<[->>>>>>>>>>+>+<<<<<<<<<<<]>>>>>>>>>>>[-
<<<<<<<<<<<+>>>>>>>>>>>]>[-]<<<<<<<<<<<<[->>>>>>>>>>>+>+<<<<<<<<<<<<]>>>>>>>>>>>
>[-<<<<<<<<<<<<+>>>>>>>>>>>>][-]+++><<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+<<<]>>>[-
<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[
[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<+>]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]
+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]<[-]
<[-<->]<<<<<[-]>>>>[-<<<<+>>>>][-]><<<<[-]>>>[-<<<+>>>][-]>>[-]<<<<<[->>>>+>+<<<
<<]>>>>>[-<<<<<+>>>>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<
+<+[-]>[[-]<+>]>[-]<<<<<<<<<<[->>>>>>>>>+>+<<<<<<<<<<]>>>>>>>>>>[-<<<<<<<<<<+>>>
>>>>>>>][-]+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<[[-][-]><<[-]
>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->
>>>]<[-]<<+<+[-]>[[-]<+>]>[-]<<<<<<<<<<[->>>>>>>>>+>+<<<<<<<<<<]>>>>>>>>>>[-<<<<
<<<<<<+>>>>>>>>>>][-]+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<[[-
]>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]>[-]<<<[->>+>+<<<]>>>[-<<<+>>>
]<[-<+>]>[-]<<<<<<<<[->>>>>>>+>+<<<<<<<<]>>>>>>>>[-<<<<<<<<+>>>>>>>>]>[-]<<<<<<<
[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>]<[-<+>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<
<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>
>>>>>>>>>]<<<<<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[
-<+>]>[->>>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]<<[
->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[-]<<<<<<<<<<<[->>>>>>>>>>+>+<<<<<<<<<<<]>>>>>>>>>>>[-<<<<<<<<<<<+>>>>>>>>>>>]<[
-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->[-]><<<<<<<<<<<[-]>>>>>>>>>>[-<<<<<<<<<<+>>>>>
>>>>>]<<]>[-><]<>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]
>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<
+>]>[-]<<<<<<<<<<[->>>>>>>>>+>+<<<<<<<<<<]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>][-]+
>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<]>[-]<<<<<[->>>>+>+<<<<<]
>>>>>[-<<<<<+>>>>>][-]+><[-<+>]<<<<<[-]>>>>[-<<<<+>>>>]>[-]<<<<<[->>>>+>+<<<<<]>
>>>>[-<<<<<+>>>>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[
-]>[[-]<+>]>[-]<<<<<<<<<<[->>>>>>>>>+>+<<<<<<<<<<]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>
>>>][-]+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<]<[-]<<]>[-><]<<[
-]<[-]<[-]>[-]<<<[->>+>+<<<]>>>[-<<<+>>>]+<[[-]>->>[-]<<<<<<[->>>>>+>+<<<<<<]>>>
>>>[-<<<<<<+>>>>>>]>[-]<<<<<<<<<[->>>>>>>>+>+<<<<<<<<<]>>>>>>>>>[-<<<<<<<<<+>>>>
>>>>>]>[-]<<<<<<<<<<<[->>>>>>>>>>+>+<<<<<<<<<<<]>>>>>>>>>>>[-<<<<<<<<<<<+>>>>>>>
>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<
<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+
>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<+<-]<[<<<[->>>>+<<<<]
>[-<+>]<+>>[-<+>]>-[-<+>]<]<<<[-]>>[-<<+>>]<[->+<]>[->>>[-<<<<+>>>>]<<<[->+<]>]>
>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]>[-]<<<<<<<<<<<[->>>>>>>>>>+>+<<
<<<<<<<<<]>>>>>>>>>>>[-<<<<<<<<<<<+>>>>>>>>>>>]<[-<<<<<<<<<<<<+>>>>>>>>>>>>]<[-<
<<<<<<<<<<<+>>>>>>>>>>>>]<<<<<<<<<<<[<<<[->>>>+<<<<]>[-<+>]<+>>[-<+>]>-[-<+>]<]<
<<[-]>>[-<<+>>]<[->+<]>[->>>[-<<<<+>>>>]<<<[->+<]>]>>>>>>>>>>>>[-]+><<<<<<<[-]>>
>>>>[-<<<<<<+>>>>>>]>[-]<<<<<<<<<<[->>>>>>>>>+>+<<<<<<<<<<]>>>>>>>>>>[-<<<<<<<<<
<+>>>>>>>>>>][-]+><[-<+>]<<<<<<<<<<[-]>>>>>>>>>[-<<<<<<<<<+>>>>>>>>>]<<]>[->>[-]
<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]+><[-<+>]<<<<<<[-]>>>>>[-<<<<<+>
>>>>]<]<>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<
<[>]>>>[->]<<<<-<->>>>]<[-]<<+[-]<+[[-]>+<]>[-<+>][-]+<[[-]>-<]>[-<+>]>[-]<<<<<<
[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]+<[[-]>-<]>[-<+>][-]+>[-]+<<<[[-]>>-<<
]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<]<[-]<[-]>[-]<<<[->>+>+<<<]>>>[-<<<+>>>][-
]+<[[-]>-<]>[-<+>]+<[[-]>->[-]>>[-]<<<<<<<[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>
>>>>>]>[-]<<<<<<<<<[->>>>>>>>+>+<<<<<<<<<]>>>>>>>>>[-<<<<<<<<<+>>>>>>>>>]<[-<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>
>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<
<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<+<-]<[<<<[->>>>+<<<<]>[-<+>]<+>>[-<+>]>-[-<+>]<
]<<<[-]>>[-<<+>>]<[->+<]>[->>>[-<<<<+>>>>]<<<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<
<<<<<<<<<]>>>>>>>>>>>>>>]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]>>[-]<<<<<<<<<[->>>>>>>>+>
+<<<<<<<<<]>>>>>>>>>[-<<<<<<<<<+>>>>>>>>>]<[-<<<<<<<<<<+>>>>>>>>>>]<[-<<<<<<<<<<
+>>>>>>>>>>]<<<<<<<<<[<<<[->>>>+<<<<]>[-<+>]<+>>[-<+>]>-[-<+>]<]<<<[-]>>[-<<+>>]
<[->+<]>[->>>[-<<<<+>>>>]<<<[->+<]>]>>>>>>>>>>>[-]<<<<<<<<[->>>>>>>+>+<<<<<<<<]>
>>>>>>>[-<<<<<<<<+>>>>>>>>][-]+><[-<->]<<<<<<<<[-]>>>>>>>[-<<<<<<<+>>>>>>>]<<]>[
-><]<>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]+++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><[-<->]
[-]<[[-]>+<]>[-<+>]>[-]<<<<<<<[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>]>[-]<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>+>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]
+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<]<[-]<[-]<[-]<[-]>[-]<<[
->+>+<<]>>[-<<+>>]>[-]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>]<[-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->[-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-
<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-
]<+>]<[[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+++><<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+<<<
]>>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]
[-]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<+>]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]>[-
]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]
<]<[-][-]><[-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->[-]+++++++++++++++++++++++++++++++
++++++++++++><.[-][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[
-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-][-]>[-]><<[-]>[-<+>
]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[
-]<<+<+[-]>[[-]<+>]<[[-][-]+++++++++++++++++++++++++++++++++++++++++++++><.[-][-
]+++++++++++++++++++++++++++++++++++++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>][-]
+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>
>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]++++++++++++++++++++++++++++++++
+++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<
]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]
<+>]<]<[-][-]++++++++++><.[-]<<]>[-><]<[-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<
+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<
+>]<[[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+++><<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+<<<]>
>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-
]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<+>]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]>[-]+
>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]
<[-][-]><[-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->[-]+++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++><.[-]<<]>[-><]<>[-]<<[->+>+<<]>>[-<<+>>]>[-]<<<<[->>>+>+<<<<]>>>>[-<
<<<+>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<
<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>
>>>>>>>]<<<<<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<
+>]>[->>>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]<<[->
>>>>>>>>>>>>>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]><[-<->][-]+<[[-]>-<]>[-
<+>]+<[[-]>->[-]++++++++++++++++++++++++++++++++><.[-]<<]>[->>[-]<<<<[->>>+>+<<<
<]>>>>[-<<<<+>>>>]>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<[-<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<<<<<<<+>>>>>
>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<
<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<+>]>[->>>[-<
<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]<<[->>>>>>>>>>>>>
>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<[->+>+<<]>>[-<<+>>][-]+++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+
>][-]+<[[-]>-<]>[-<+>]+<[[-]>->>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]+++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]>[
-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>
]<[-<+<[-<->>>+>+<<<]>>[-<<+>>]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>][-]>[-]+>[-]
+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]<<[-
]<[-]>>[-<<+>>]<[-]++++++++++++++++++++++++++++++++++++++++++++++++><[-<+>]<.[-]
<<]>[-><]<>[-]<<[->+>+<<]>>[-<<+>>][-]++++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[-
>]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]+<[[-]>->>[-]<<<<[->>>+>+
<<<<]>>>>[-<<<<+>>>>][-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++><<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+
<<<]>>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<
+>][-]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<+>]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]
>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<
+>]<]<[-][-]++++++++++><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<<<[->>>+>+<<<<]>>>>[-<<<<
+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-
]>-<]>[-<+>]<[-<+<[-<->>>+>+<<<]>>[-<<+>>]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>][
-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[
-<+>]<]<<[-]<[-]>>[-<<+>>]<[-]++++++++++++++++++++++++++++++++++++++++++++++++><
[-<+>]<.[-]<<]>[-><]<>[-]<<[->+>+<<]>>[-<<+>>][-]++++++++++><<[->>+>+<<<]>>>[-<<
<+>>>]<<[->>+>+<<<]>>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-
]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<+>]<<[->>+>>+<<<<]>>>>
[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-
]+<[[-]>-<]>[-<+>]<]<[-][-]++++++++++++++++++++++++++++++++++++++++++++++++><[-<
+>]<.[-]<[-]<]<[-]++++++++++++++++++++++++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>
][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]
<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++><.[-][-]++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-
<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]
>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]+++++++++++++++++++++++++++++++
++++++++++++><.[-][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[
-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-][-]>[-]><<[-]>[-<+>
]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[
-]<<+<+[-]>[[-]<+>]<[[-][-]+++++++++++++++++++++++++++++++++++++++++++++><.[-][-
]+++++++++++++++++++++++++++++++++++++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>][-]
+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>
>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]++++++++++++++++++++++++++++++++
+++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<
]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]
<+>]<]<[-][-]++++++++++><.[-]<<]>[->[-]+++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><.[-][-]++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++><.[-][-]++++++++++++++++++++++++++++++++><.[-][-]+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++><.[-][-]+++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><.[-]
[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++><.[-][-]++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><.
[-][-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++><.[-][-]+++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><.[
-][-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++><.[-][-]+++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><.[-
][-]++++++++++><.[-]<]<
```
</details>

実行すると以下のようになります。

```shellsession
$ cat prob.txt
.2.71..6.......4.5.3..9..2.5....46..8.43..........7849..9.7...12.6.........2.....
$ time bf sudoku.bf < prob1.txt
+------+------+------+
|  2   |7 1   |  6   |
|      |      |4   5 |
|  3   |  9   |  2   |
+------+------+------+
|5     |    4 |6     |
|8   4 |3     |      |
|      |    7 |8 4 9 |
+------+------+------+
|    9 |  7   |    1 |
|2   6 |      |      |
|      |2     |      |
+------+------+------+
+------+------+------+
|4 2 5 |7 1 8 |9 6 3 |
|9 8 1 |6 3 2 |4 7 5 |
|6 3 7 |4 9 5 |1 2 8 |
+------+------+------+
|5 9 2 |1 8 4 |6 3 7 |
|8 7 4 |3 6 9 |5 1 2 |
|1 6 3 |5 2 7 |8 4 9 |
+------+------+------+
|3 4 9 |8 7 6 |2 5 1 |
|2 1 6 |9 5 3 |7 8 4 |
|7 5 8 |2 4 1 |3 9 6 |
+------+------+------+

________________________________________________________
Executed in  997.65 millis    fish           external
   usr time  989.43 millis    2.36 millis  987.07 millis
   sys time    8.49 millis    0.50 millis    7.99 millis
$
```

# 動的アドレッシング

動的アドレッシングとは、セルの値に応じた場所からデータを読み込むことです。
以下のコードを実行すると、セルの値の分だけデータポインタを右に動かすことができます。

```brainfuck
+++        ; 3 番地を指定
[
    [->+<] ; 隣に値を移動
    >-     ; ポインタを 1 つ右に動かし、添字をデクリメント
]
```

このコードでは、添字をデクリメントしながら右に動かし、0 になったら停止します。

| addr  | 0   | 1   | 2   | 3   |
|-------|-----|-----|-----|-----|
| iter0 | (3) | 0   | 0   | 0   |
| iter1 | 0   | (2) | 0   | 0   |
| iter2 | 0   | 0   | (1) | 0   |
| iter3 | 0   | 0   | 0   | (0) |

このとき、帰りに使用する添字をインクリメントしながら同伴させます。
帰りにはこの添字をデクリメントしながら帰ります。

```brainfuck
+++         ; 3 番地を指定
[           ; 行き
    >
    +[->+<] ; 帰り用の変数をインクリメントしてコピー
    <
    -[->+<] ; 行き用の変数をデクリメントしてコピー
>
]
>
[           ; 帰り
    -[-<+>] ; 帰り用の変数をデクリメントしてコピー
    <
]
<
```

| addr      | 0   | 1   | 2   | 3   | 4   |
|-----------|-----|-----|-----|-----|-----|
| forward0  | (3) | 0   | 0   | 0   | 0   |
| forward1  | 0   | (2) | 1   | 0   | 0   |
| forward2  | 0   | 0   | (1) | 2   | 0   |
| forward3  | 0   | 0   | 0   | (0) | 3   |
| backward0 | 0   | 0   | 0   | 0   | (3) |
| backward0 | 0   | 0   | 0   | (2) | 0   |
| backward0 | 0   | 0   | (1) | 0   | 0   |
| backward0 | 0   | (0) | 0   | 0   | 0   |
| halt      | (0) | 0   | 0   | 0   | 0   |

このように、行き用の添字と帰り用の添字を管理することにより、もと来た場所に戻ってくることができます。データポインタは一時的に動的な振る舞いをしますが、命令の前後では静的に管理することができます。

# 一次元配列
## メモリレイアウト

以下は 5 要素の一次元配列のメモリレイアウトです。

配列本体は 4 番地から負の方向に伸び、5 6 7 8 番地は一時領域として使うために 0 で初期化しておきます。各一時領域を A B C D という名前にしておきます。

| addr | 0   | 1   | 2   | 3   | 4   | 5 | 6 | 7 | 8 |
|------|-----|-----|-----|-----|-----|---|---|---|---|
| data | [4] | [3] | [2] | [1] | [0] | A | B | C | D |

## 動作例

ここでは、`load_address` 命令を例に、一次元配列の読み書きを行います。
なお、`store_address` も `load_address` とほぼ同じことを行っています。

`load_address <pos>` は `<pos>` 番地に A を持つ配列にアクセスし、スタックトップの値インデックスとして配列のその要素をロード (コピー) します。


| addr | 0   | 1   | 2   | 3   | 4   | 5 | 6 | 7 | 8 | 9 | (10) |
|------|-----|-----|-----|-----|-----|---|---|---|---|---|------|
| data | [4] | [3] | [2] | [1] | [0] | A | B | C | D | 3 | 0    |

上記の状態から `load_address 5` を実行することを考えます。最終的に 9 番地に 1 番地の [3] が持ってこられれば OK です。

### 前処理

スタックトップから A にインデックスを移動

| addr | 0   | 1   | 2   | 3   | 4   | 5   | 6   | 7 | 8 | 9 | 10 |
|------|-----|-----|-----|-----|-----|-----|-----|---|---|---|----|
| data | [4] | [3] | [2] | [1] | [0] | 3 A | 0 B | C | D | 0 | 0  |


### 行きの処理

A に行き用のインデックス、B に帰り用のインデックスを配置し、一時領域 ABCD を 1 つずつ移動させて目的の場所まで移動します。

| addr | 0   | 1   | 2   | 3   | 4   | 5   | 6   | 7 | 8 | 9 | 10 |
|------|-----|-----|-----|-----|-----|-----|-----|---|---|---|----|
| data | [4] | [3] | [2] | [1] | [0] | 3 A | 0 B | C | D | 0 | 0  |

| addr | 0   | 1   | 2   | 3   | 4   | 5   | 6 | 7 | 8   | 9 | 10 |
|------|-----|-----|-----|-----|-----|-----|---|---|-----|---|----|
| data | [4] | [3] | [2] | [1] | 2 A | 1 B | C | D | [0] | 0 | 0  |

| addr | 0   | 1   | 2   | 3   | 4   | 5 | 6 | 7   | 8   | 9 | 10 |
|------|-----|-----|-----|-----|-----|---|---|-----|-----|---|----|
| data | [4] | [3] | [2] | 1 A | 2 B | C | D | [1] | [0] | 0 | 0  |

| addr | 0   | 1   | 2   | 3   | 4 | 5 | 6   | 7   | 8   | 9 | 10 |
|------|-----|-----|-----|-----|---|---|-----|-----|-----|---|----|
| data | [4] | [3] | 0 A | 3 B | C | D | [2] | [1] | [0] | 0 | 0  |

### コピー処理

C に [3] をコピーします。

| addr | 0   | 1   | 2   | 3   | 4     | 5 | 6   | 7   | 8   | 9 | 10 |
|------|-----|-----|-----|-----|-------|---|-----|-----|-----|---|----|
| data | [4] | [3] | 0 A | 3 B | [3] C | D | [2] | [1] | [0] | 0 | 0  |


### 帰りの処理

B に配置されているの帰り用のインデックスを使用して、一時領域 ABCD を 1 つずつ移動させてもと来た場所に帰ります。

| addr | 0   | 1   | 2 | 3   | 4     | 5 | 6   | 7   | 8   | 9 | 10 |
|------|-----|-----|---|-----|-------|---|-----|-----|-----|---|----|
| data | [4] | [3] | A | 3 B | [3] C | D | [2] | [1] | [0] | 0 | 0  |

| addr | 0   | 1   | 2   | 3 | 4   | 5     | 6 | 7   | 8   | 9 | 10 |
|------|-----|-----|-----|---|-----|-------|---|-----|-----|---|----|
| data | [4] | [3] | [2] | A | 2 B | [3] C | D | [1] | [0] | 0 | 0  |

| addr | 0   | 1   | 2   | 3   | 4 | 5   | 6     | 7 | 8   | 9 | 10 |
|------|-----|-----|-----|-----|---|-----|-------|---|-----|---|----|
| data | [4] | [3] | [2] | [1] | A | 1 B | [3] C | D | [0] | 0 | 0  |

| addr | 0   | 1   | 2   | 3   | 4   | 5 | 6   | 7     | 8 | 9 | 10 |
|------|-----|-----|-----|-----|-----|---|-----|-------|---|---|----|
| data | [4] | [3] | [2] | [1] | [0] | A | 0 B | [3] C | D | 0 | 0  |

### 後処理

スタックトップに C の値を移動し、操作は完了です。9 番地にあったインデックスが消費され、狙った要素を持ってくることができています。

| addr | 0   | 1   | 2   | 3   | 4   | 5 | 6 | 7 | 8 | 9   | 10 |
|------|-----|-----|-----|-----|-----|---|---|---|---|-----|----|
| data | [4] | [3] | [2] | [1] | [0] | A | B | C | D | [3] | 0  |


# 多次元配列

今回作成した処理系の最大の特長は、任意次元の多次元配列をサポートしている点です。C の多次元配列はメモリ上に隙間なく配置されることが保証されるため、ある意味一次元の配列の糖衣構文と言えます。しかしこの処理系で考える多次元配列は一次元配列とは根本的に異なります。

想定する Brainf\*ck 処理系において、セルの値は 0 ~ 255 しかないため、長さ 256 以下の配列までしか全要素にアクセスできません。多次元配列では複数のセルの値を用いてアクセスを行うため、256 より多くの要素を持つ配列のランダムアクセスが可能です。多バイト整数を用いてアクセスを行えば、事実上無制限に長い配列にランダムアクセスできます。

## メモリレイアウト

$k$ 次元の配列が `[k次元配列]` としてレイアウトされているとき, $k+1$ 次元の配列は以下のように配置します。一次元配列を前述の方法で配置することにより、任意次元の多次元配列を実現することができます。

| `[k次元配列]` | 0 | `[k次元配列]` | 0 | ... | `[k次元配列]` | 0 |
|---------------|---|---------------|---|-----|---------------|---|

このレイアウトは、各配列の間に帰り用インデックスを格納する場所を配置したレイアウトになっています。$k$ 次元の配列の要素にアクセスするためには $k$ 個のインデックスが必要なため、次元が増えるごとに一時領域を 1 つずつ挿入していきます。

多次元配列の $k$ 次元目の長さが $D_k$ で表されるとします。$k$ 次元目までの配列が専有するメモリ長 $L_k$ は以下の漸化式で表せます。

$$
L_1 = D_1 + 4
$$$$
L_k = D_k(L_{k-1} + 1)
$$

この $n$ 次元配列が専有するメモリ長は $L_n$ で表されます。

# まとめ

今回は動的なポインタ操作とそれを用いた配列について解説しました。

まず、行き用のインデックスを減らしながら進むことで動的にポインタ位置を指定できることを解説ました。さらに、同時に帰り用のインデックスを増やしながら移動した後、行きと同様の操作を逆向きに行うことにより、元の場所に帰還できることを示しました。

次に、一次元配列は、蠕動運動のように行き帰りのインデックスの領域を移動させることにより実現しました。最後に、多次元配列は、一つ次元の低い配列を並べることにより実現しました。

次回は本処理系 (スタックマシン) のコードを生成するコンパイラについて説明します。

# リポジトリ
- https://github.com/void-hoge/brainfuck

# 記事リンク
- 第 0 回: [Brainf\*ck による言語処理系](https://qiita.com/voidhoge/items/672d56a512eaa4c0e7b9)
- 第 1 回: [値のロードとストア](https://qiita.com/voidhoge/items/d9b9fcc6efe1017a0a7b)
- 第 2 回: [加算, 減算, 乗算](https://qiita.com/voidhoge/items/e175a5b19793c6711ec2)
- 第 3 回: [bool化, 等値比較](https://qiita.com/voidhoge/items/c414a0791ed53da3db70)
- 第 4 回: [非破壊分岐, 比較, 除算, 剰余算](https://qiita.com/voidhoge/items/317ee453d0cbe0339939)
- 第 5 回: [while, if, スコープ内変数](https://qiita.com/voidhoge/items/ebf91788b953b900cfac)
- 第 6 回: [配列, 多次元配列](https://qiita.com/voidhoge/items/3374976e70976705b523)
- 第 7 回: [コンパイラと言語仕様](https://qiita.com/voidhoge/items/e553220edc255c7fb508)