#define BITS_PER_BYTE 8
#define BITS_PER_TARLONG 42
#if BITS_PER_BYTE * SIZEOF_UNSIGNED_LONG >= BITS_PER_TARLONG
# define SUPERDIGIT 0
# define TARLONG_FORMAT "%lu"
typedef unsigned long tarlong;
#else
# if BITS_PER_BYTE * SIZEOF_LONG_LONG >= BITS_PER_TARLONG + 1
# define SUPERDIGIT 0
# define TARLONG_FORMAT "%llu"
typedef unsigned long long tarlong;
# else
# if BITS_PER_BYTE * SIZEOF_UNSIGNED_LONG >= 64
# define SUPERDIGIT 1000000000L
# define BITS_PER_SUPERDIGIT 29
# define TARLONG_FORMAT "%09uld"
# else
# if BITS_PER_BYTE * SIZEOF_UNSIGNED_LONG >= 32
# define SUPERDIGIT 10000L
# define BITS_PER_SUPERDIGIT 14
# define TARLONG_FORMAT "%04uld"
# endif
# endif
# endif
#endif
#if SUPERDIGIT
# define LONGS_PER_TARLONG \
((BITS_PER_TARLONG + BITS_PER_SUPERDIGIT - 1) / BITS_PER_SUPERDIGIT)
# define SIZEOF_TARLONG (LONGS_PER_TARLONG * sizeof (unsigned long))
struct tarlong
{
unsigned long digit[LONGS_PER_TARLONG];
};
typedef struct tarlong tarlong;
int zerop_tarlong_helper PARAMS ((unsigned long *));
int lessp_tarlong_helper PARAMS ((unsigned long *, unsigned long *));
void clear_tarlong_helper PARAMS ((unsigned long *));
void add_to_tarlong_helper PARAMS ((unsigned long *, unsigned long));
void mult_tarlong_helper PARAMS ((unsigned long *, unsigned long));
void print_tarlong_helper PARAMS ((unsigned long *, FILE *));
# define zerop_tarlong(Accumulator) \
zerop_tarlong_helper (&(Accumulator).digit[0])
# define lessp_tarlong(First, Second) \
lessp_tarlong_helper (&(First).digit[0], &(Second).digit[0])
# define clear_tarlong(Accumulator) \
clear_tarlong_helper (&(Accumulator).digit[0])
# define add_to_tarlong(Accumulator, Value) \
add_to_tarlong_helper (&(Accumulator).digit[0], (unsigned long) (Value))
# define mult_tarlong(Accumulator, Value) \
mult_tarlong_helper (&(Accumulator).digit[0], (unsigned long) (Value))
# define print_tarlong(Accumulator, File) \
print_tarlong_helper (&(Accumulator).digit[0], (File))
#else
# define zerop_tarlong(Accumulator) \
((Accumulator) == 0)
# define lessp_tarlong(First, Second) \
((First) < (Second))
# define clear_tarlong(Accumulator) \
((Accumulator) = 0)
# define add_to_tarlong(Accumulator, Value) \
((Accumulator) += (Value))
# define mult_tarlong(Accumulator, Value) \
((Accumulator) *= (Value))
# define print_tarlong(Accumulator, File) \
(fprintf ((File), TARLONG_FORMAT, (Accumulator)))
#endif