def generate(seq): result = [] for i in range(len(seq)): result.append(i) return result def next(seq): for i in range(-1, -len(seq)-1, -1): seq[i] = (seq[i] + 1) % len(seq) if seq[i] > 0: break def duplicates(seq): hash = {} for i in seq: if hash.has_key(i): return True else: hash[i] = 1 return False def count(num): seq = [] for i in range(num): seq.append(0) for i in range(num ** num - 1): if not duplicates(seq): print seq next(seq) if not duplicates(seq): print seq