#include <cstdio>
#define ch(x, y) \
u = u < px ? u : px; \
d = d > px ? d : px; \
l = l < py ? l : py; \
lmap[px] = lmap[px] > py ? lmap[px] : py;
using namespace std;
const int MAXN = 15;
const int MAXS = 500;
char chs[MAXS][MAXS];
int lmap[MAXS];
char opt[1 << MAXN];
int main() {
// freopen("data.out.txt", "w", stdout);
int n;
while (scanf("%d", &n), n) {
int u = 0x7fffffff, d = 0, l = 0x7fffffff;
int px = 249, py = 249;
opt[0] = 0;
py++;
chs[px][py] = '_';
ch(px, py)
py++;
for (int i = 1; i <= n; i++) {
for (int j = 1 << i - 1; j < 1 << i; j++) {
opt[j] = (opt[(1 << i) - 1 - j] + 1) % 4;
if (opt[j] == 0) {
py++;
chs[px][py] = '_';
ch(px, py)
py++;
}
if (opt[j] == 1) {
chs[px][py] = '|';
ch(px, py);
px--;
}
if (opt[j] == 2) {
py--;
chs[px][py] = '_';
ch(px, py);
py--;
}
if (opt[j] == 3) {
px++;
chs[px][py] = '|';
ch(px, py);
}
}
}
for (int i = u; i <= d; i++) {
for (int j = l; j <= lmap[i]; j++) {
putchar(chs[i][j] == 0 ? ' ' : chs[i][j]);
chs[i][j] = 0;
}
puts("");
}
puts("^");
}
return 0;
}
上了 uDebug 和讨论区无果