This is the most general input format. Variables are represented as strings containing letters, numbers, or underscore characters, mixed in any way. Boolean functions (including manipulators), and directives can be split over many lines of the input file (no continuation character is used). Boolean functions are assigned reference numbers in the order they appear in the file, beginning with the number 1. If, say, the 10th Boolean function is to be an argument to the 24th Boolean function, then the reference '$10' may be used as the argument instead of writing the entire 10th function again. Doing so wherever possible can considerably shorten input file length, but requires writing nested functions on separate lines. It follows that some way is needed to distinguish those functions from the top-level functions (those to be conjoined as specified in the given problem instance): the character '*' is used in the input file to mark a function as a top-level function and appears as the first character of the first line specifying such a function. A solution to the problem defined in a file is an assignment satisfying those functions (including manipulators) which are preceeded by '*' (values of all non-starred functions and non-starred manipulators do not matter). If no function is preceeded by a `*', all functions are considered top level functions.
Lines that get a $ number start with var, not, and, nand, or, nor, xor, equ, same, imp, nimp, ite, gcf, strengthen, prune, exist, universe, truth_table, minmax, safe, a single positive or negative variable, a function previously defined in a #define statement, or a single number with a $ in front of it. Lines that do not get a $ number start with initialbranch, print_tree, or pprint_tree, #define, print_xdd, or print_flat_xdd.