#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 }, H, h, p, q, x, y; typedef struct { _ x, y, z; } b; b *C = NULL; FILE *f; void s() { h = C[x].x; C[x].x = C[y].x; C[y].x = h; h = C[x].y; C[x].y = C[y].y; C[y].y = h; h = C[x].z; C[x].z = C[y].z; C[y].z = h; } 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 && (C[i].y > C[o].y || (C[i].y == C[o].y && C[i].x > C[o].x))) ? o++ : i++, s(); for(y = p, x = H + p; y < q; x++, y++) s(); } } void A() { 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 ) C = (b*)realloc(C, (t *= 2) * 2 * sizeof(b)); C[H].x = x; C[H].y = y; C[H++].z = e; p = p > y ? y : p; q = q < y ? y : q; A(); } void P(_ p) { E[o = 0] = e = p; if( p > 127 ) { for(; p > 63 >> o; p >>= 6) E[o++] = (p & 63) | 128; E[o] = (1920 >> o & 240) | 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 *c) { return !(f = fopen(c, d)) ? perror(c), 1 : 0; } _ main(_ O, char **Z) { f = stdin; if( O > 1 && (*Z[1] - 45 || Z[1][1]) && r(Z[1]) ) goto X; *d |= 5; for(h = x = y = l = p = q = H = 0; (e = fgetc(f)) - EOF;) V += e, V += V << 10, V ^= V >> 6, h = h > 0 ? e - 91 ? e < 48 || e > 59 ? l = e % 4 < 2 ? -l : l, e > 64 && e < 67 ? y += l, 0 : e < 69 && (x += l) < 0 ? x = 0 : 0 : (l = l * 10 + e - 48, h) : h : h < 0 ? (e = l = l << 6 | (e & 63), !++h) ? a(), h : h : (e & 224) == 192 ? l = e & 31, -1 : (e & 240) == 224 ? l = e & 15, -2 : (e & 248) == 240 ? l = e & 7, -3 : e - 27 ? e == 10 ? y++, x = 0 : e - 32 ? e == 8 ? x = (x + 8) % 8 : e > 32 ? a(), h : h : x++, h : (l = 0, 1); fclose(f); f = stdout; if( C ) { if( O < 2 ) { m(0, H); C[H].x = -1; for(h = x = 0, y = p; h < H; h++) { for(; y < C[h].y; y++, x = 0) P(10); for(; x < C[h].x; x++) P(32); for(; C[h + 1].y == C[h].y && C[h + 1].x == C[h].x;) h++; P(C[h].z); A(); } if( x ) P(10); } else { srand(V); for(x = H; --x; s()) y = rand() % -~x; if( (O -= 2) ? r(Z[2]) : O++ ) goto X; for(t = h = 0, y = q + 1; h < H && t < O; fclose(f)) { if( t && r(Z[t + 2]) ) goto X; if( !t ) for(h = q - p + 2; --h;) P(10); for(V = 65; h < H * (t + 1) / O; y = C[h++].y) Q(C[h].y - y), Q(x - C[h].x), P(C[h].z), x = C[h].x, A(); Q(q - y); P(10); y = q + 1; x = !++t; } } } O = 0; X: return O; }