#!/usr/bin/python
import sys

class edge:
    a = 0
    b = 0
    def __init__(self,a,b):
        self.a = a
        self.b = b

    def __str__(self):
        return str(self.a) + ' ' + str(self.b)

class Clique:
    repNode = 0
    numnodes = 0
    numedges = 0
    edges = []

    def __init__(self):
        self.repNode = 0
        self.numnodes = 0
        self.numedges = 0
        self.edges = []

    def __str__(self):
        #s = 'repNode: ' + str(self.repNode) + '\n'
        #s += 'nodes: ' + str(self.numnodes)
        #s += ' edges: ' + str(self.numedges)
        s = str(self.numnodes) + ' ' + str(self.numedges)
        for x in self.edges:
            s += '\n' + str(x)
        return s

def cliq(n,start,level):
    if (level == 1):
        #print "base case"
        A = Clique()
        A.repNode = start
        A.numnodes = n
        for i in range(start,start+n):
            for j in range(i+1,start+n):
                #print i,j
                A.edges.append(edge(i,j))
                A.numedges += 1
        return A
    else:
        #print "higher level"
        C = []
        for i in range(0,n):
            C.append(cliq(n,start+i*(n**(level-1)),level-1))
        A = Clique()
        A.numnodes = n**level
        A.repNode = start
        for i in range(0,n):
            A.edges.extend(C[i].edges)
            A.numedges += C[i].numedges

        for i in range(0,n):
            for j in range(i+1,n):
                A.edges.append(edge(C[i].repNode,C[j].repNode))
                A.numedges += 1

        return A

if (len(sys.argv) != 3):
    print 'usage: genDT <base number> <number of levels>'
    sys.exit(0)

G = cliq(int(sys.argv[1]),0,int(sys.argv[2]))

print G
