import sys
from itertools import product


def iter_lfsr(n):
    mask = (1 << n) - 1

    for coefficients in product([0, 1], repeat=n):
        def f(x):
            last_bit = 0
            for i, c in enumerate(coefficients):
                last_bit ^= c & (x >> (n - 1 - i)) & 0x01
            return ((x << 1) | last_bit) & mask

        yield coefficients, f


def is_max_len_lfsr(f, n):
    x = 1 # always a valid non-zero starting state for any n >= 2
    visited = set()

    while x not in visited and x != 0:
        visited.add(x)
        x = f(x)

    return len(visited) == (1 << n) - 1


def main():
    n = int(sys.argv[1]) if len(sys.argv) > 1 else 8

    for coefficients, f in iter_lfsr(n):
        if is_max_len_lfsr(f, n):
            print(coefficients)


if __name__ == "__main__":
    main()
