#! /usr/bin/env python3
import sys

def bit_is_on(bp, index):
    return (bp >> index) & 1

def print_truth_table(n, f):
    print(
        f'\n#  '
        + ' '.join([ f'x{n - 1 - k}' for k in range(n)])
        + ' | f'
    )

    for j in range(len(f)):
        xy = ' '.join([ f' {bit_is_on(j, n - 1 - k)}' for k in range(n) ])
        print(f'   {xy} | {f[j]}')

def print_all_truth_tables(n):
    rows = 2 ** n
    for i in range(2 ** rows):
        print_truth_table(n, [ bit_is_on(i, j) for j in range(rows) ])


if len(sys.argv) < 2:
    print('Usage: truthtables_generic.py [n]')
    exit(0)

print_all_truth_tables(int(sys.argv[1]))
