#include <stdio.h>

#define BASE 2
#define NUM_DIGITS 8
#define SEPARATOR "_"

#define PP_JOIN_REPEAT(str, separator, n)      PP_JOIN_REPEAT_IMPL(str, separator, n)
#define PP_JOIN_REPEAT_IMPL(str, separator, n) PP_JOIN_REPEAT_##n( str, separator)
#define PP_JOIN_REPEAT_1( str, separator) str
#define PP_JOIN_REPEAT_2( str, separator) PP_JOIN_REPEAT_1(str, separator) separator str
#define PP_JOIN_REPEAT_3( str, separator) PP_JOIN_REPEAT_2(str, separator) separator str
#define PP_JOIN_REPEAT_4( str, separator) PP_JOIN_REPEAT_3(str, separator) separator str
#define PP_JOIN_REPEAT_5( str, separator) PP_JOIN_REPEAT_4(str, separator) separator str
#define PP_JOIN_REPEAT_6( str, separator) PP_JOIN_REPEAT_5(str, separator) separator str
#define PP_JOIN_REPEAT_7( str, separator) PP_JOIN_REPEAT_6(str, separator) separator str
#define PP_JOIN_REPEAT_8( str, separator) PP_JOIN_REPEAT_7(str, separator) separator str
#define PP_JOIN_REPEAT_9( str, separator) PP_JOIN_REPEAT_8(str, separator) separator str
#define PP_JOIN_REPEAT_10(str, separator) PP_JOIN_REPEAT_9(str, separator) separator str

#define PP_POW(base, exp)      PP_POW_IMPL( base, exp)
#define PP_POW_IMPL(base, exp) PP_POW_##exp(base)
#define PP_POW_0(base) (1)
#define PP_POW_1(base) (PP_POW_0(base) * (base))
#define PP_POW_2(base) (PP_POW_1(base) * (base))
#define PP_POW_3(base) (PP_POW_2(base) * (base))
#define PP_POW_4(base) (PP_POW_3(base) * (base))
#define PP_POW_5(base) (PP_POW_4(base) * (base))
#define PP_POW_6(base) (PP_POW_5(base) * (base))
#define PP_POW_7(base) (PP_POW_6(base) * (base))
#define PP_POW_8(base) (PP_POW_7(base) * (base))
#define PP_POW_9(base) (PP_POW_8(base) * (base))

#define PP_GET_DIGIT_AT(index, value, base)      PP_GET_DIGIT_AT_IMPL(index, value, base)
#define PP_GET_DIGIT_AT_IMPL(index, value, base) PP_GET_DIGIT_AT_##index(value, base)
#define PP_GET_DIGIT_AT_0(value, base) (((value) / PP_POW(base, 0)) % (base))
#define PP_GET_DIGIT_AT_1(value, base) (((value) / PP_POW(base, 1)) % (base))
#define PP_GET_DIGIT_AT_2(value, base) (((value) / PP_POW(base, 2)) % (base))
#define PP_GET_DIGIT_AT_3(value, base) (((value) / PP_POW(base, 3)) % (base))
#define PP_GET_DIGIT_AT_4(value, base) (((value) / PP_POW(base, 4)) % (base))
#define PP_GET_DIGIT_AT_5(value, base) (((value) / PP_POW(base, 5)) % (base))
#define PP_GET_DIGIT_AT_6(value, base) (((value) / PP_POW(base, 6)) % (base))
#define PP_GET_DIGIT_AT_7(value, base) (((value) / PP_POW(base, 7)) % (base))
#define PP_GET_DIGIT_AT_8(value, base) (((value) / PP_POW(base, 8)) % (base))
#define PP_GET_DIGIT_AT_9(value, base) (((value) / PP_POW(base, 9)) % (base))

#define PP_EXPAND_DIGITS(value, base, digits)      PP_EXPAND_DIGITS_IMPL(value, base, digits)
#define PP_EXPAND_DIGITS_IMPL(value, base, digits) PP_EXPAND_DIGITS_##digits(value, base)
#define PP_EXPAND_DIGITS_1( value, base) PP_GET_DIGIT_AT(0, value, base)
#define PP_EXPAND_DIGITS_2( value, base) PP_GET_DIGIT_AT(1, value, base), PP_EXPAND_DIGITS_1(value, base)
#define PP_EXPAND_DIGITS_3( value, base) PP_GET_DIGIT_AT(2, value, base), PP_EXPAND_DIGITS_2(value, base)
#define PP_EXPAND_DIGITS_4( value, base) PP_GET_DIGIT_AT(3, value, base), PP_EXPAND_DIGITS_3(value, base)
#define PP_EXPAND_DIGITS_5( value, base) PP_GET_DIGIT_AT(4, value, base), PP_EXPAND_DIGITS_4(value, base)
#define PP_EXPAND_DIGITS_6( value, base) PP_GET_DIGIT_AT(5, value, base), PP_EXPAND_DIGITS_5(value, base)
#define PP_EXPAND_DIGITS_7( value, base) PP_GET_DIGIT_AT(6, value, base), PP_EXPAND_DIGITS_6(value, base)
#define PP_EXPAND_DIGITS_8( value, base) PP_GET_DIGIT_AT(7, value, base), PP_EXPAND_DIGITS_7(value, base)
#define PP_EXPAND_DIGITS_9( value, base) PP_GET_DIGIT_AT(8, value, base), PP_EXPAND_DIGITS_8(value, base)
#define PP_EXPAND_DIGITS_10(value, base) PP_GET_DIGIT_AT(9, value, base), PP_EXPAND_DIGITS_9(value, base)

int main() {
    printf(
        PP_JOIN_REPEAT("%d", SEPARATOR, NUM_DIGITS),
        PP_EXPAND_DIGITS(134, BASE, NUM_DIGITS)
    );
}
