#!/opt/local/bin/python

from random import randint, seed

probname = "buyingjerseys"

tcount = {}

MAXN = 2000
MAXM = 5000

def gen(n, adj, s, intype = probname):

    if adj == []:
        return

    path = "../data"

    if intype not in tcount: tcount[intype] = 0
    tcount[intype] += 1

    if intype == "sample":
        filename = "{0}/sample/{1}.in".format(path, tcount[intype])
    else:
        filename = "{0}/secret/{1}-{2}.in".format(path, intype, str(tcount[intype]).zfill(2))

    print("Generating:", filename)

    out = open(filename, "w")

    # now print to file=out
    print(n, len(adj), file=out)
    for x in adj:
        print(*x, file=out)
    print(s, file=out)

def GenSample():
    gen(4, [[1, 2]], "0101", "sample")
    gen(4, [[1, 2], [3, 4], [1, 4], [2, 3]], "0101", "sample")
    gen(8, [[1, 2], [1, 3], [1, 4], [1, 5], [2, 6], [2, 7], [2, 8]], "01111000", "sample")

def GenCorner():
    gen(2, [[1, 2]], "01")
    gen(3, [[1, 3]], "110")
    gen(6, [[1, 5], [3, 6], [4, 6]], "111100")

def GenRandom(n1, n2, m):
    n = n1 + n2
    remedge = m
    adj = []
    for i in range(n1):
        remverts = n1 - i
        numedges = randint(0, 2 * (remedge // remverts))
        numedges = min(numedges, remedge)
        remedge -= numedges
        while numedges > 0:
            j = randint(1, n2)
            if (i+1, n1+j) not in adj:
                adj.append((i+1, n1+j))
            numedges -= 1
    gen(n, adj, "1"*n1 + "0"*n2)
    

def GenSmall():
    GenRandom(10, 10, 5)
    GenRandom(10, 10, 25)
    GenRandom(10, 10, 100)


if __name__ == "__main__":
    seed(1917)
    GenSample()
    GenCorner()
    
    GenSmall()

    sizes = [10, 100, 500, 1000]
    for n1 in sizes:
        for n2 in sizes:
            n2 = min(n2, MAXN - n1)
            maxedges = min(n1 * n2, MAXM)
            if maxedges >= 1000:
                GenRandom(n1, n2, maxedges // 1000)
            GenRandom(n1, n2, maxedges // 100)
            GenRandom(n1, n2, maxedges // 10)
            GenRandom(n1, n2, maxedges)

    
    #Genor3(100000)

    