#!/usr/bin/python
#Copyright neil birkbeck.
import os,sys,math

#recursive helper.
def gen_all(v, mat):
    res = []
    for i in xrange(0,len(mat)):
        res.append(mat[i] + [v])
    return res

#generate recursively
def gen(values):
    if len(values)==1:
        res = []
        for i in range(0, len(values[0])):
            res = res + [[values[0][i]]]
        return res
    sub = gen(values[0:(len(values)-1)])
    res = []
    last = len(values)-1
    for i in xrange(0, len(values[last])):
        res = res + gen_all(values[last][i], sub)
    return res

#generate iteratively
def gen_it(values):
    top = 1
    for i in xrange(0, len(values)):
        top *= len(values[i])

    res = [[]]*top

    for i in xrange(0, top):
        res[i] = [[]]*len(values)
        num = i
        for j in xrange(0, len(values)):
            res[i][j] = values[j][num % len(values[j])]
            num = num/len(values[j])
    return res


if len(sys.argv)<3:
    print 'Need number of vars, and number of values: e.g., program 3 2'
    print 'Running default samples'

    print gen([[0,1],['a','b','c']]) #Two variables, each with different sets of variables, one integer, one 
    print gen([[0,1]]*3)  #The example you gave, three variables with values [0,1]

#print gen(['neil', 'aylon', 'birkbeck'])

    print gen_it([[0,1],['a','b','c']]) 
    print gen_it([[0,1]]*3)
    exit(1)

print gen([range(0,int(sys.argv[2]))] * int(sys.argv[1]))
print gen_it([range(0,int(sys.argv[2]))] * int(sys.argv[1]))
