# define tree_MAXARITY 10
# define tree_hash_init_from_label(label) ((label)+1)
# define tree_hash_finish(hash_value) ((hash_value))
# define tree_hash_add_1(old,child) ((old)+(child))
# define tree_hash_add_2(part) (((part)<<5)+((part)>>4))
typedef unsigned char LABEL;
typedef unsigned char COUNT;
typedef unsigned char ARITY;

typedef struct tree_struct {
	struct tree_struct ** kids;
        LABEL  label;
	COUNT reference_count;
 	} * TREE;

extern TREE  tree_new		( /* label (char) */);
extern TREE  tree_copy		( /* tree */);
extern TREE  tree_dup		( /* tree */);
extern UINT  tree_hash		( /* tree */);
extern UINT   tree_equal		( /* tree, tree */);
extern VOID   tree_set_arity	( /* label (char), i (char) */ );
extern VOID   tree_free		( /* tree */ );
extern VOID  tree_init		( /* number_of_labels (char) */ );
extern UINT   tree_arity         ( /* tree */ );
extern VOID   tree_print         ( /* fd, tree */ );
extern TREE  tree_read          ( /* fd */ );
# define KIDS(t) ((t) -> kids)
# define KID(t,i) (KIDS(t)[i])
# define LBL(t)  ((t) -> label)
extern ARITY *label_arities;
extern LABEL max_label;
