#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>

#define MIN(a, b) ((a) > (b)? (b) : (a))

typedef struct stack {
    size_t size;
    size_t sp;
    char s[];
} st;

st *init(size_t size)
{
    st *ns;
    ns = malloc(sizeof(*ns) + size);
    assert(ns != NULL);
    ns->size = size;
    ns->sp = 0;
    return ns;
}

void push(st **t, char c)
{
    assert(t != NULL);
    st *s = *t;
    if (s->sp == s->size) {
        assert(s->size < -1U / 2);
        *t = realloc(s, sizeof(*s) + s->size * 2);
        assert(*t != NULL);
        (*t)->size = s->size * 2;
    }
    (*t)->s[s->sp++] = c;
}

int main()
{
    int t;
    scanf("%d\n", &t);

    st *dump[t];

    for (int i = 0; i < t; i++) {
        int c;
        const int first = getchar();
        size_t lp = 0;
        st *tmp;

        if (first == '\n') {
            printf("true\n");
            return 0;
        }

        tmp = init(16);
        dump[i] = init(16);
        push(&dump[i], first);
        lp = dump[i]->sp;
        push(&tmp, first);

        while ((c = getchar()) != EOF) {
            if (c == '\n') {
                if (tmp->sp == lp) {
                    free(dump[i]);
                    dump[i] = tmp;
                } else {
                    free(tmp);
                }
                for (int j = 0; j < i; j++) {
                    if (dump[j]->sp == dump[i]->sp &&
                        !strncmp(dump[j]->s,
                             dump[i]->s,
                             dump[i]->sp)) {
                        printf("true\n");
                        return 0;
                    }
                }
                break;
            }
            push(&dump[i], c);
            if (c == first) {
                tmp->sp = 0;
            }
            if (tmp->sp == lp || dump[i]->s[tmp->sp] != c) {
                lp = dump[i]->sp;
                tmp->sp = 0;
            } else {
                push(&tmp, c);
            }
        }
        if (c == EOF) {
            return 1;
        }
    }
    printf("false\n");
}


https://pastebin.com/rRheDZU9

dump[t] 말고 바이너리트리에 넣으면 더 빠를텐데 거기까지하기는 너무 코드가길어져서 안함