0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-02-28

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

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

  • 一次元配列
    • ロード: 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] に二次元配列を用いています。

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');
}
コンパイル結果 52594 bytes (改行込み)
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]++++++++
+>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-][-]>[-]
><<[-]>[-<+>][-]>>[-]<<<[->>+>+<<<]>>>[-<<<+>>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[
<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-],><<[-]>[-<+>]>[-]<<[->+>+<<
]>>[-<<+>>][-]++++++++++++++++++++++++++++++++++++++++++++++><[-<->][-]+<[[-]>-<
]>[-<+>]+<[[-]>->[-]>>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]>[-]<<<<<<
<<[->>>>>>>+>+<<<<<<<<]>>>>>>>>[-<<<<<<<<+>>>>>>>>]<[-<<<<<<<<<+>>>>>>>>>]<[-<<<
<<<<<<+>>>>>>>>>]<[-<<<<<<<<<+>>>>>>>>>]<<<<<<<[>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>
]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<
<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<+<-]<[<<<[->>>>+<<<<]>[-<+>]<+>>[-<+>]>-[-<+>]<]<
<<[-]>>[-<<+>>]<[->+<]>[->>>[-<<<<+>>>>]<<<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<
<<<<<<<]>>>>>>>>>>>>>>]>>>>>><<]>[->>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]++++
++++++++++++++++++++++++++++++++++++++++++++><[-<->]>[-]<<<<<<[->>>>>+>+<<<<<<]>
>>>>>[-<<<<<<+>>>>>>]>[-]<<<<<<<<[->>>>>>>+>+<<<<<<<<]>>>>>>>>[-<<<<<<<<+>>>>>>>
>]<[-<<<<<<<<<+>>>>>>>>>]<[-<<<<<<<<<+>>>>>>>>>]<[-<<<<<<<<<+>>>>>>>>>]<<<<<<<[>
[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<
<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<+<-]<[<<<[->>>>+<<
<<]>[-<+>]<+>>[-<+>]>-[-<+>]<]<<<[-]>>[-<<+>>]<[->+<]>[->>>[-<<<<+>>>>]<<<[->+<]
>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>]>>>>>><]<>[-]<<<[->>+>+<<<
]>>>[-<<<+>>>][-]+><[-<+>]<<<[-]>>[-<<+>>]>[-]<<<[->>+>+<<<]>>>[-<<<+>>>][-]++++
+++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-]<[
-]>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+
++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-
][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<
<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-]>[-]<<[->+>+<<]>>[-<<+>>][-]++
+><<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+<<<]>>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]
>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<
+>]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<
[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]<[-][-]><[-<->][-]+<[[-]>-<]>[-<+>]+<[
[-]>->[-]+++++++++++++++++++++++++++++++++++++++++++><.[-][-]>[-]><<[-]>[-<+>]>[
-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<
<+<+[-]>[[-]<+>]<[[-][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]
+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-][-]+++++++++++++
++++++++++++++++++++++++++++++++><.[-][-]+++++++++++++++++++++++++++++++++++++++
++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-
<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<
]<[-][-]+++++++++++++++++++++++++++++++++++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>
>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<
<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]++++++++++><.[-]<<]>[-><]<[
-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<
[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>
<<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+<<<]>>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>
>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<+>
]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-
]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]<[-][-]><[-<->][-]+<[[-]>-<]>[-<+>]+<[[-
]>->[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++><.[-]<<]>[-><]<>[-]<<[->+>+<
<]>>[-<<+>>]>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<[-<<<<<+>>>>>]<[-<<<<<+>>>>>]<
<<<[>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<
<<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<
[->+>>+<<<]>[-<+>]>[->>>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<
<<<<<<<<<]<<[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>+<<<<<]>
>>>>>[-]><[-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->[-]++++++++++++++++++++++++++++++++
><.[-]<<]>[->>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]>[-]<<<<<<[->>>>>+>+<<<<<<]>>>
>>>[-<<<<<<+>>>>>>]<[-<<<<<<<+>>>>>>>]<[-<<<<<<<+>>>>>>>]<<<<<<[>[-<<<<<<<<<<<<<
<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>
>>]<<<<<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<+>]>[
->>>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]<<[->>>>>>
>>>>>>>>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>>>+<<<<<<<]>>>>>>>>>[-]<<[->
+>+<<]>>[-<<+>>][-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<-
>>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]+<[[-]>->>[-]<<<<[->>>+>+<<<<]>>>>
[-<<<<+>>>>][-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<<<[->>>+>+<<
<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-
]<+>][-]+<[[-]>-<]>[-<+>]<[-<+<[-<->>>+>+<<<]>>[-<<+>>]<<<[->>>+>>+<<<<<]>>>>>[-
<<<<<+>>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-
]+<[[-]>-<]>[-<+>]<]<<[-]<[-]>>[-<<+>>]<[-]+++++++++++++++++++++++++++++++++++++
+++++++++++><[-<+>]<.[-]<<]>[-><]<>[-]<<[->+>+<<]>>[-<<+>>][-]++++++++++>[-]>[-]
+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]+
<[[-]>->>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><<[->>+>+<<
<]>>>[-<<<+>>>]<<[->>+>+<<<]>>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<
->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<+>]<<[->>+>>+
<<<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[
[-]<+>][-]+<[[-]>-<]>[-<+>]<]<[-][-]++++++++++><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<<
<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<
<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<[-<+<[-<->>>+>+<<<]>>[-<<+>>]<<<[->>>+>>+<<
<<<]>>>>>[-<<<<<+>>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]
>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]<<[-]<[-]>>[-<<+>>]<[-]++++++++++++++++++++++++++
++++++++++++++++++++++><[-<+>]<.[-]<<]>[-><]<>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++
+++><<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+<<<]>>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[
>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[
-<+>]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>
]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]<[-][-]+++++++++++++++++++++++++++++
+++++++++++++++++++><[-<+>]<.[-]<[-]<]<[-]++++++++++++++++++++++++++++++++><.[-]
>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++
++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][
-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++><.[-][-]++++++++++><.[-]>[-]<<[->
+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-
]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]+++++++
++++++++++++++++++++++++++++++++++++><.[-][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[
-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]
<[[-][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<
[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-][-]+++++++++++++++++++++++++++++
++++++++++++++++><.[-][-]+++++++++++++++++++++++++++++++++++++++++++++><.[-]>[-]
<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]
>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]++++++++
+++++++++++++++++++++++++++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<
[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-
<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]++++++++++><.[-][-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]><<[-]>[-<+>][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-
<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-
]<+>]<[[-][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]
+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-]>[-]<<[->+>+<<]>>[-<<
+>>]>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<<<<<<<+>
>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]
<<<<<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<+>]>[->>
>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]<<[->>>>>>>>>
>>>>>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>[-]><[-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->>[-]<<<<<[->>>>+>+<
<<<<]>>>>>[-<<<<<+>>>>>]>[-]<<<<<<<[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>][
-]><[-<<<<<<<<<+>>>>>>>>>]<[-<<<<<<<<<+>>>>>>>>>]<[-<<<<<<<<<+>>>>>>>>>]<<<<<<<[
>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+<-]<[<<<
[->>>>+<<<<]>[-<+>]<+>>[-<+>]>-[-<+>]<]<<<[-]>>[-<<+>>]<[->+<]>[->>>[-<<<<+>>>>]
<<<[->+<]>]>>>[-[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]>>>>>>>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>
>]>[-]<<<<<<<[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>][-]+><[-<<<<<<<<<+>>>>>
>>>>]<[-<<<<<<<<<+>>>>>>>>>]<[-<<<<<<<<<+>>>>>>>>>]<<<<<<<[>[-<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+<-]<[<<<[->>>>+<<<<]>[-<+>]<+
>>[-<+>]>-[-<+>]<]<<<[-]>>[-<<+>>]<[->+<]>[->>>[-<<<<+>>>>]<<<[->+<]>]>>>[-[->>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>]>>>>>>>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]+><[
-<+>]<<<<<<[-]>>>>>[-<<<<<+>>>>>]<<]>[-><]<>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]
<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[
->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<
<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[-
>]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]
>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]><<[-]>[-<+>
][-]>[-]>[-]>[-]>>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]+++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++><[-<->][-]<[[-]>+<]>[-<+>]>[-]<<<<<<<[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>
>>>>>]>[-]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]
>[[-]<+>][-]+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<[[-]>[-]<<<<
<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]><[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[
-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<
[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<
+>]>[->>>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]<<[->>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<[-]>>>>[-<<<<+>>>>
]>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]+><[-<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>
>+<<<]>[-<+>]>[->>>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]<<[->>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<[-]>>>[-<
<<+>>>][-]><<<[-]>>[-<<+>>]>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<[-<
<<<<<<+>>>>>>>]<<<<<<<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<+>]
>[->>>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>><<[->>>>>>>+<<<<<<<]>>>>>>>>[-]+><[-<+>]<<
[-]>[-<+>][-]>[-]>>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]+++++++++>[-]>[-]+>[-]
+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+[-]<+[[-]>+<]>[-<+>][-]+<[[-]>-<]>[-<+>]
>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]+<[[-]>-<]>[-<+>][-]+>[-]+<<
<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<[[-][-]+><<<[-]>>[-<<+>>][-]><<[
-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]
<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]+>[-]+<
<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<[[-]>[-]<<[->+>+<<]>>[-<<+>>]>[
-]<<<<<<<<[->>>>>>>+>+<<<<<<<<]>>>>>>>>[-<<<<<<<<+>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>
>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<<
+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<+>]>[->>>[-<<<<+>>>>
]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]<<[->>>>>>>>>>>>>>+<<<<<<
<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>
>]<[-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->[-]><<<<<[-]>>>>[-<<<<+>>>>]<<]>[-><]<>[-]
<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++
++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]>[-]<<<<[->
>>+>+<<<<]>>>>[-<<<<+>>>>][-]+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<-
>>]<<][-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<
<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>
>>][-]+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<[[-]>[-]<<<<<<[->>
>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]>[-]<<<[->>+>+<<<]>>>[-<<<+>>>]<[-<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<<<<<<<+>>>>>>
>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<<
<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<+>]>[->>>[-<<
<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]<<[->>>>>>>>>>>>>>
+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<[->>>>+>+<<<<<]>>>>>[-<<<
<<+>>>>>]<[-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->[-]><<<<<[-]>>>>[-<<<<+>>>>]<<]>[->
<]<>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]
+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]>[-]
<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>
[[-]<<->>]<<][-]>[-]>[-]>>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]+<[[-]
>->>[-]<<<<<<<<<<<<[->>>>>>>>>>>+>+<<<<<<<<<<<<]>>>>>>>>>>>>[-<<<<<<<<<<<<+>>>>>
>>>>>>>]>[-]<<<<<<<<<<<<<[->>>>>>>>>>>>+>+<<<<<<<<<<<<<]>>>>>>>>>>>>>[-<<<<<<<<<
<<<<+>>>>>>>>>>>>>][-]+++><<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+<<<]>>>[-<<<+>>>][-
]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-
<+>]<[-<[-<->>+>+<<]>[-<+>]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<
<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]<[-]<[-<->]<<<
<<<[-]>>>>>[-<<<<<+>>>>>]>[-]<<<<<<<<<<<[->>>>>>>>>>+>+<<<<<<<<<<<]>>>>>>>>>>>[-
<<<<<<<<<<<+>>>>>>>>>>>]>[-]<<<<<<<<<<<<[->>>>>>>>>>>+>+<<<<<<<<<<<<]>>>>>>>>>>>
>[-<<<<<<<<<<<<+>>>>>>>>>>>>][-]+++><<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+<<<]>>>[-
<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[
[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<+>]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]>[-]+>[-]
+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]<[-]
<[-<->]<<<<<[-]>>>>[-<<<<+>>>>][-]><<<<[-]>>>[-<<<+>>>][-]>>[-]<<<<<[->>>>+>+<<<
<<]>>>>>[-<<<<<+>>>>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<
+<+[-]>[[-]<+>]>[-]<<<<<<<<<<[->>>>>>>>>+>+<<<<<<<<<<]>>>>>>>>>>[-<<<<<<<<<<+>>>
>>>>>>>][-]+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<[[-][-]><<[-]
>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->
>>>]<[-]<<+<+[-]>[[-]<+>]>[-]<<<<<<<<<<[->>>>>>>>>+>+<<<<<<<<<<]>>>>>>>>>>[-<<<<
<<<<<<+>>>>>>>>>>][-]+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<[[-
]>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]>[-]<<<[->>+>+<<<]>>>[-<<<+>>>
]<[-<+>]>[-]<<<<<<<<[->>>>>>>+>+<<<<<<<<]>>>>>>>>[-<<<<<<<<+>>>>>>>>]>[-]<<<<<<<
[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>]<[-<+>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<
<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>
>>>>>>>>>]<<<<<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[
-<+>]>[->>>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]<<[
->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[-]<<<<<<<<<<<[->>>>>>>>>>+>+<<<<<<<<<<<]>>>>>>>>>>>[-<<<<<<<<<<<+>>>>>>>>>>>]<[
-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->[-]><<<<<<<<<<<[-]>>>>>>>>>>[-<<<<<<<<<<+>>>>>
>>>>>]<<]>[-><]<>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]
>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<
+>]>[-]<<<<<<<<<<[->>>>>>>>>+>+<<<<<<<<<<]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>][-]+
>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<]>[-]<<<<<[->>>>+>+<<<<<]
>>>>>[-<<<<<+>>>>>][-]+><[-<+>]<<<<<[-]>>>>[-<<<<+>>>>]>[-]<<<<<[->>>>+>+<<<<<]>
>>>>[-<<<<<+>>>>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[
-]>[[-]<+>]>[-]<<<<<<<<<<[->>>>>>>>>+>+<<<<<<<<<<]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>
>>>][-]+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<]<[-]<<]>[-><]<<[
-]<[-]<[-]>[-]<<<[->>+>+<<<]>>>[-<<<+>>>]+<[[-]>->>[-]<<<<<<[->>>>>+>+<<<<<<]>>>
>>>[-<<<<<<+>>>>>>]>[-]<<<<<<<<<[->>>>>>>>+>+<<<<<<<<<]>>>>>>>>>[-<<<<<<<<<+>>>>
>>>>>]>[-]<<<<<<<<<<<[->>>>>>>>>>+>+<<<<<<<<<<<]>>>>>>>>>>>[-<<<<<<<<<<<+>>>>>>>
>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<
<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+
>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<+<-]<[<<<[->>>>+<<<<]
>[-<+>]<+>>[-<+>]>-[-<+>]<]<<<[-]>>[-<<+>>]<[->+<]>[->>>[-<<<<+>>>>]<<<[->+<]>]>
>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]>[-]<<<<<<<<<<<[->>>>>>>>>>+>+<<
<<<<<<<<<]>>>>>>>>>>>[-<<<<<<<<<<<+>>>>>>>>>>>]<[-<<<<<<<<<<<<+>>>>>>>>>>>>]<[-<
<<<<<<<<<<<+>>>>>>>>>>>>]<<<<<<<<<<<[<<<[->>>>+<<<<]>[-<+>]<+>>[-<+>]>-[-<+>]<]<
<<[-]>>[-<<+>>]<[->+<]>[->>>[-<<<<+>>>>]<<<[->+<]>]>>>>>>>>>>>>[-]+><<<<<<<[-]>>
>>>>[-<<<<<<+>>>>>>]>[-]<<<<<<<<<<[->>>>>>>>>+>+<<<<<<<<<<]>>>>>>>>>>[-<<<<<<<<<
<+>>>>>>>>>>][-]+><[-<+>]<<<<<<<<<<[-]>>>>>>>>>[-<<<<<<<<<+>>>>>>>>>]<<]>[->>[-]
<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]+><[-<+>]<<<<<<[-]>>>>>[-<<<<<+>
>>>>]<]<>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<
<[>]>>>[->]<<<<-<->>>>]<[-]<<+[-]<+[[-]>+<]>[-<+>][-]+<[[-]>-<]>[-<+>]>[-]<<<<<<
[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]+<[[-]>-<]>[-<+>][-]+>[-]+<<<[[-]>>-<<
]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<]<[-]<[-]>[-]<<<[->>+>+<<<]>>>[-<<<+>>>][-
]+<[[-]>-<]>[-<+>]+<[[-]>->[-]>>[-]<<<<<<<[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>
>>>>>]>[-]<<<<<<<<<[->>>>>>>>+>+<<<<<<<<<]>>>>>>>>>[-<<<<<<<<<+>>>>>>>>>]<[-<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<<<<<<<+>>>>>>>>>>>>
>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<
<<<<<<+>>>>>>>>>>>>>>]<<<<<<<<<<<+<-]<[<<<[->>>>+<<<<]>[-<+>]<+>>[-<+>]>-[-<+>]<
]<<<[-]>>[-<<+>>]<[->+<]>[->>>[-<<<<+>>>>]<<<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<
<<<<<<<<<]>>>>>>>>>>>>>>]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]>>[-]<<<<<<<<<[->>>>>>>>+>
+<<<<<<<<<]>>>>>>>>>[-<<<<<<<<<+>>>>>>>>>]<[-<<<<<<<<<<+>>>>>>>>>>]<[-<<<<<<<<<<
+>>>>>>>>>>]<<<<<<<<<[<<<[->>>>+<<<<]>[-<+>]<+>>[-<+>]>-[-<+>]<]<<<[-]>>[-<<+>>]
<[->+<]>[->>>[-<<<<+>>>>]<<<[->+<]>]>>>>>>>>>>>[-]<<<<<<<<[->>>>>>>+>+<<<<<<<<]>
>>>>>>>[-<<<<<<<<+>>>>>>>>][-]+><[-<->]<<<<<<<<[-]>>>>>>>[-<<<<<<<+>>>>>>>]<<]>[
-><]<>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>][-]+++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><[-<->]
[-]<[[-]>+<]>[-<+>]>[-]<<<<<<<[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>]>[-]<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>+>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]
+>[-]+<<<[[-]>>-<<]>[[-]>>-<<]>>[-<+>]<<<+>>[[-]<<->>]<<]<[-]<[-]<[-]<[-]>[-]<<[
->+>+<<]>>[-<<+>>]>[-]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>]<[-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->[-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-
<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-
]<+>]<[[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+++><<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+<<<
]>>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]
[-]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<+>]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]>[-
]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]
<]<[-][-]><[-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->[-]+++++++++++++++++++++++++++++++
++++++++++++><.[-][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[
-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-][-]>[-]><<[-]>[-<+>
]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[
-]<<+<+[-]>[[-]<+>]<[[-][-]+++++++++++++++++++++++++++++++++++++++++++++><.[-][-
]+++++++++++++++++++++++++++++++++++++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>][-]
+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>
>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]++++++++++++++++++++++++++++++++
+++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<
]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]
<+>]<]<[-][-]++++++++++><.[-]<<]>[-><]<[-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<
+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<
+>]<[[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+++><<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+<<<]>
>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-
]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<+>]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]>[-]+
>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]
<[-][-]><[-<->][-]+<[[-]>-<]>[-<+>]+<[[-]>->[-]+++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++><.[-]<<]>[-><]<>[-]<<[->+>+<<]>>[-<<+>>]>[-]<<<<[->>>+>+<<<<]>>>>[-<
<<<+>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<
<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>
>>>>>>>]<<<<<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<
+>]>[->>>[-<<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]<<[->
>>>>>>>>>>>>>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]><[-<->][-]+<[[-]>-<]>[-
<+>]+<[[-]>->[-]++++++++++++++++++++++++++++++++><.[-]<<]>[->>[-]<<<<[->>>+>+<<<
<]>>>>[-<<<<+>>>>]>[-]<<<<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<[-<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[>[-<<<<<<<<<<<<<<+>>>>>
>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<[-<<<<<<<<<<<<<<+>>>>>>>>>>>>>>]<<<<
<<<<<<<<+<-]<[-<<<[->>>>+<<<<]>>[-<+>]<+>>[-<+>]<]<<<[->+>>+<<<]>[-<+>]>[->>>[-<
<<<+>>>>]<<[->+<]<[->+<]>]>>>[-[->>>>>>>>>>>>>>+<<<<<<<<<<<<<<]<<[->>>>>>>>>>>>>
>+<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>]><<<[->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<[->+>+<<]>>[-<<+>>][-]+++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+
>][-]+<[[-]>-<]>[-<+>]+<[[-]>->>[-]<<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]+++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>][-]>[
-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>
]<[-<+<[-<->>>+>+<<<]>>[-<<+>>]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>][-]>[-]+>[-]
+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<]<<[-
]<[-]>>[-<<+>>]<[-]++++++++++++++++++++++++++++++++++++++++++++++++><[-<+>]<.[-]
<<]>[-><]<>[-]<<[->+>+<<]>>[-<<+>>][-]++++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[-
>]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]+<[[-]>->>[-]<<<<[->>>+>+
<<<<]>>>>[-<<<<+>>>>][-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++><<[->>+>+<<<]>>>[-<<<+>>>]<<[->>+>+
<<<]>>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<
+>][-]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<+>]<<[->>+>>+<<<<]>>>>[-<<<<+>>>>][-]
>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<
+>]<]<[-][-]++++++++++><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<<<[->>>+>+<<<<]>>>>[-<<<<
+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-
]>-<]>[-<+>]<[-<+<[-<->>>+>+<<<]>>[-<<+>>]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>][
-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[
-<+>]<]<<[-]<[-]>>[-<<+>>]<[-]++++++++++++++++++++++++++++++++++++++++++++++++><
[-<+>]<.[-]<<]>[-><]<>[-]<<[->+>+<<]>>[-<<+>>][-]++++++++++><<[->>+>+<<<]>>>[-<<
<+>>>]<<[->>+>+<<<]>>>[-<<<+>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-
]<<+<+[-]>[[-]<+>][-]+<[[-]>-<]>[-<+>]<[-<[-<->>+>+<<]>[-<+>]<<[->>+>>+<<<<]>>>>
[-<<<<+>>>>][-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>][-
]+<[[-]>-<]>[-<+>]<]<[-][-]++++++++++++++++++++++++++++++++++++++++++++++++><[-<
+>]<.[-]<[-]<]<[-]++++++++++++++++++++++++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>
][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]
<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++><.[-][-]++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-
<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++++++++>[-]>[-]+>[-]+>[-]<[<<<<[>]
>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]+++++++++++++++++++++++++++++++
++++++++++++><.[-][-]>[-]><<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[
-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<[[-][-]>[-]><<[-]>[-<+>
]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[
-]<<+<+[-]>[[-]<+>]<[[-][-]+++++++++++++++++++++++++++++++++++++++++++++><.[-][-
]+++++++++++++++++++++++++++++++++++++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>][-]
+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>
>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]<+>]<]<[-][-]++++++++++++++++++++++++++++++++
+++++++++++><.[-]>[-]<<[->+>+<<]>>[-<<+>>][-]+><[-<+>]<<[-]>[-<+>]>[-]<<[->+>+<<
]>>[-<<+>>][-]+++>[-]>[-]+>[-]+>[-]<[<<<<[>]>>>[->]<<<<-<->>>>]<[-]<<+<+[-]>[[-]
<+>]<]<[-][-]++++++++++><.[-]<<]>[->[-]+++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><.[-][-]++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++><.[-][-]++++++++++++++++++++++++++++++++><.[-][-]+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++><.[-][-]+++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><.[-]
[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++><.[-][-]++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><.
[-][-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++><.[-][-]+++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><.[
-][-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++><.[-][-]+++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++><.[-
][-]++++++++++><.[-]<]<

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

$ 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
$

動的アドレッシング

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

+++        ; 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)

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

+++         ; 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_addressload_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$ で表されます。

まとめ

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

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

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

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

リポジトリ

記事リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?