
from itertools import product

Alphabet = [1, 2, 3, 4]
Forbidden = set([(1,3),(3,1),(2,4),(4,2)])

def valid(p, discard):
    p_L = list(p)
    p_shift = set(zip(p_L, p_L[1:]+p_L[:1]))
    return len(p_shift & discard) == 0

def L_n(n):
    if n < 0: 
        return []
    else:
        return [ list(p) for p in product(Alphabet, repeat=n)
                 if valid(p, Forbidden) ]

for item in L_n(3): print(item, end='\t')
print()

