今回解説する配列および多次元配列は、この言語処理系の目玉の機能です。今回は配列の実現方法について解説します。
いずれの命令も、スタックトップに積まれたインデックスを用いて要素を指定し、一つずつロードやストアを行います。ストア命令では、「書き込む値」「インデックス」の順でスタックに積みます。
- 一次元配列
- ロード:
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_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$ で表されます。
まとめ
今回は動的なポインタ操作とそれを用いた配列について解説しました。
まず、行き用のインデックスを減らしながら進むことで動的にポインタ位置を指定できることを解説ました。さらに、同時に帰り用のインデックスを増やしながら移動した後、行きと同様の操作を逆向きに行うことにより、元の場所に帰還できることを示しました。
次に、一次元配列は、蠕動運動のように行き帰りのインデックスの領域を移動させることにより実現しました。最後に、多次元配列は、一つ次元の低い配列を並べることにより実現しました。
次回は本処理系 (スタックマシン) のコードを生成するコンパイラについて説明します。
リポジトリ
記事リンク
- 第 0 回: Brainf*ck による言語処理系
- 第 1 回: 値のロードとストア
- 第 2 回: 加算, 減算, 乗算
- 第 3 回: bool化, 等値比較
- 第 4 回: 非破壊分岐, 比較, 除算, 剰余算
- 第 5 回: while, if, スコープ内変数
- 第 6 回: 配列, 多次元配列
- 第 7 回: コンパイラと言語仕様