#include #include typedef int _; _ V, i, o, l, e, t = 1, E[4], I[22] = { 4352, 95, 4554, 1, 2902, 446, 2, 29839, 1841, 11171, 8541, 511, 785, 9, 23, 63, 145, 96, 128, 6, 61466, 135167 }, g = 240, H, h, p, q, x, y; typedef struct { _ x, y, z; } b; b *U, u; FILE *f; void s() { u = U[x], U[x] = U[y], U[y] = u; } void m(_ p, _ q) { _ d = (p + q) / 2; if( d - p ) { m(p, d); m(d, q); for(i = p, o = d, y = H + p; y < H + q; y++) x = i >= d || (o < q && (U[i].y > U[o].y || (U[i].y == U[o].y && U[i].x > U[o].x))) ? o++ : i++, s(); for(y = p, x = H + p; y < q; x++, y++) s(); } } void v() { for(i = l = 0; i < 22 && (o = l + I[i++], l = o + I[i], e < o || e > l); i++); x += 2 - i / 22; } void a() { if( H + 2 > t ) U = (b*)realloc(U, (t *= 2) * 2 * sizeof(b)); U[H].x = x; U[H].y = y; U[H++].z = e; p = p > y ? y : p; q = q < y ? y : q; v(); } void P(_ p) { E[o = 0] = e = p; if( p >> 7 ) { for(; p > 63 >> o; p >>= 6) E[o++] = (p & 63) | 128; E[o] = (g * 8 >> o & g) | p; } for(; o > -1;) fputc(E[o--], f); } void Q(_ O) { O ? fprintf(f, "\33[%d%c", abs(O), V + (O > 0)) : 0; V ^= 2; } char d[2] = "r"; _ r(char *u) { return !(f = fopen(u, d)) ? perror(u), 1 : 0; } _ main(_ O, char **Z) { f = stdin; if( --O && (**++Z - 45 || 1[*Z]) && r(*Z) ) goto X; for(*d |= 5; (e = fgetc(f)) > 0; h = h < 0 ? e - 91 ? e < 48 || e > 59 ? l *= (e & 2) - 1, e > 64 && e < 67 ? y += l, 0 : e < 69 && (x += l) < 0 ? x = 0 : 0 : ~(l = l * 10 + e - 48) : h : h ? (e = l = l << 6 | (e & 63), !--h) ? a(), h : h : (e & 224) == 192 ? l = e & 31, 1 : (e & g) == 224 ? l = e & 15, 2 : (248 & e) == g ? l = e & 7, 3 : e - 27 ? e == 10 ? y++, x = 0 : e - 32 ? e == 9 ? x = (x + 8) & ~7 : e > 32 ? a(), h : h : x++, h : ~(l = 0)) V += (V + e) << 10, V ^= V >> 6; fclose(f); f = stdout; if( U ) { if( O < 1 ) { m(0, U[H].x = H); for(h = x = 0, y = p; h < H; v()) { for(; y < U[h].y; y++, x = 0) P(10); for(; x < U[h].x; x++) P(32); for(; h < H && U[++h].y == y && U[h].x == x;); P(U[h - 1].z); } if( x ) P(10); } else { srand(V); for(x = H; --x; s()) y = rand() % -~x; if( --O ? r(*++Z) : O++ ) goto X; for(t = h = 0, y = q + 1; h < H && t < O; fclose(f)) { if( t && r(*++Z) ) goto X; if( !t ) for(h = q - p + 2; --h;) P(10); for(V = 65; h < H * -~t / O; y = U[h++].y) Q(U[h].y - y), Q(x - U[h].x), P(U[h].z), x = U[h].x, v(); Q(q - y); P(10); y = q + 1; x = !++t; } } } O = 0; X: return O; }