import random

maxc = 30
maxl = 200

def gen(strs, name):
    out = open(name, "w")
    if len(strs) <= 0 or len(strs) > maxc:
        raise ValuError("bad number of cases")

    print(len(strs), file=out)
    for s in strs:
        if len(s) <= 0 or len(s) > maxl:
            raise ValueError("bad string length")
        if s[0] == ' ' or s[-1] == ' ':
            raise ValueError("cannot start or end with space")
        if not s.isprintable():
            raise ValueError("characters of string not printable")
        print(s, file=out)
    out.close()


def sample(name):
    gen(["d", "abba", "rollover ahead", "ogopogo spotted!"], name)

def rand_strs(name):
    chars = "abcdefghijklmnopqrstuvwxyz"
    strs = []
    for t in range(maxc):
        s = ""
        sub = chars[0:(maxc%26)+1]
        for j in range(maxl):
            s += random.choice(sub)
        strs.append(s)
    gen(strs, name)

def genpal(ln, ch):
    chars = "abcdefghijklmnopqrstuvwxyz"
    p = ""
    for i in range(ln//2):
        c = random.choice(chars[0:ch])
        p = c+p+c
    return p

def careful(name):
    chars = "abcdefghijklmnopqrstuvwxyz"
    strs = ["a"*maxl, "ab"*(maxl//2), "abba"*(maxl//4), "hi!", "#",
            "hello world", ". . . . . . . . . .",
            "she sells seashells by the seashore"]
    strs.append(genpal(maxl, 2))
    strs.append(genpal(maxl, 3))
    strs.append(genpal(maxl, 26))

    p1 = genpal(maxl//3, 2)
    strs.append(p1+p1)
    strs.append(p1*3)

    p2 = genpal(maxl//5, 10)
    p3 = genpal(maxl//5, 10)
    p4 = genpal(maxl//5, 2)

    strs.append(p2+p3+p4+p3+p2)
    strs.append(p2+p3+p3+p3+p4)
    strs.append(p2+p3)

    gen(strs, name)





if __name__ == "__main__":
    sample("stack-01.in")
    rand_strs("stack-02.in")
    careful("stack-03.in")
