code: public void addColumn(ColumnName name, boolean primary) {
      ColumnHeader<ColumnName> top = new ColumnHeader<ColumnName>(name, 0);
      top.up = top;
      top.down = top;
      if (primary) {
        Node<ColumnName> tail = head.left;
        tail.right = top;
        top.left = tail;
        top.right = head;
        head.left = top;
      } else {
        top.left = top;
        top.right = top;
      }
      columns.add(top);
    }
docs: Add a column to the table
  @param name The name of the column, which will be returned as part of
  solutions
  @param primary Is the column required for a solution?