
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Z(x, y) a !(x = malloc(y o ) { P "Out of memory\n"); exit(1); }
#define fn(x, y, k) h x = y; x < k; x++)
#define fl(x, y) h x = y; x; x = x->n)
#define f0(x, y) fn(x, 0, y)
#define M(x, y) memcpy(x, y, H)
#define P printf(
#define q "\n");
#define N !memcmp(
#define I m = 1;
#define J = 0;
#define K ) {
#define v * 6
#define O typedef
#define a if(
#define b else
#define h for(
#define o ))
#define r return
#define A while(
#define B break;
#define C char
#define S struct
#define H 72
#define T s[k
#define Q sizeof
#define ts O S {
#define na (L *) -1
#define R r na;
#define sd ((ss *) w->d)
#define cd ((c *) w->d)
#define U (y v + x)
#define W (cd->x + cd->y v )
O void V; O int j; O unsigned C uc; O unsigned int ui; const C *pc = " hsdtcu"; O S _L { V *d; S _L *n; } L; ts j x; j y; } c; ts ui e; C *s; } ss; uc E[H], s[H]; L *t = NULL; j i, x, y; V d(j k) { f0(y, 12) { f0(x, 6) { i = s[U]; a U == k) P "\x1b[7m"); P "%c", pc[i]); a U == k + 1) P "\x1b[0m"); } P q } } V f(j k, ui e, uc g, j p) { ui c; f0(c, e) { T ] = g | 0x80; k += p; } } V rd(j k) { ui e; j F[12], m; uc G[12]; a k > -1) { i = T ]; T ] = T + 1]; T + 1] = i; } A 1) { f0(x, 6 ) { h i = 66 + x; i > x && s[i] != 0; i -= 6); h k = i - 6; k >= x; k -= 6) { a T ] != 0) { s[i] = T ]; T ] J i -= 6; } } } m J f0(y, 12) G[y] = F[y] J f0(x, 6 ) { e = i J f0(y, 12) { k = s[U] & 0x7f; a k == i) { a i) e++; } b { a e > 2) { f((y - e) v + x, e, i, 6); I } e = 1; i = k; } a k == G[y]) { a G[y] != 0) F[y]++; } b { a F[y] > 2) { f(U - F[y], F[y], G[y], 1); I } F[y] = 1; G[y] = k; } } a e > 2) { f((12 - e) v + x, e, i, 6); I } } f0(y, 12) { a F[y] > 2) { f(6 - F[y] + y v , F[y], G[y], 1); I } } a !m) B f0(i, H) a s[i] & 0x80) s[i] J } } L *sv(ui e) { j X, Y; L *w, *z; ui tc[7]; uc st[H]; a N E, s, H o r NULL; a !e) R fl(w, t) a sd->e >= e) a N sd->s, s, H o R fn(i, 1, 7) tc[i] J f0(i, H) tc[s[i]]++; fn(i, 1, 7) a tc[i] > 0 && tc[i] < 3) R a e > 1) { Z(w, Q(L)); Z(w->d, Q(ss)); Z(sd->s, H); M(sd->s, s); sd->e = e; w->n = t; t = w; } M(st, s); f0(X, 5) { h Y = 11; Y > -1; Y--) { a st[Y v + X] | st[Y v + X + 1]) { M(s, st); rd(Y v + X); a (z = sv(e - 1)) != na) { Z(w, Q(L)); Z(w->d, Q(c)); w->n = z; cd->x = X; cd->y = Y; r w; } } } } R } j main(j ac, C *av[]) { uc D[H]; C *p, *l; L *u, *w; a ac - 3) r 1; b { memset(E, 0, H); M(s, E); p = av[1]; f0(x, 6) { h y = 11; y > -1; y--) { A *p == ' ' || *p == '\n' || *p == '\t') p++; a *p == '\0') { x = 6; B } a *p == '|') { p++; B } l = strchr(pc, *p); a !l) r 1; s[U] = l - pc; p++; } } d(-1); rd(-1); M(D, s); a (u = sv(atoi(av[2] o ) != na) { M(s, D); fl(w, u) { P "-------" q d(W); rd(W); } P "("); fl(w, u) P "(%d %d) ", cd->x, cd->y); P "\b)" q } b P "()" q } r 0; }
