#include <boost/preprocessor.hpp>
#include <iostream>
#define COMBINE(index, data, elem) (BOOST_PP_STRINGIZE(elem))(".")
#define API_METHOD(args) BOOST_PP_SEQ_CAT(args)
#define INSERT_SEPARATOR(args, sep) BOOST_PP_SEQ_REVERSE(BOOST_PP_SEQ_TAIL(BOOST_PP_SEQ_REVERSE(BOOST_PP_SEQ_FOR_EACH(COMBINE, sep, args))))
#define FLATTEN_SEQ_HELPER(index, data, elem) elem
#define FLATTEN_SEQ(args) BOOST_PP_SEQ_FOR_EACH(FLATTEN_SEQ_HELPER, _, args)
#define JOIN(args, sep) FLATTEN_SEQ(INSERT_SEPARATOR(args, sep))
int main()
{
std::cout << JOIN((a)(b)(c), ".") << std::endl;
}
I2luY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci5ocHA+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCiNkZWZpbmUgQ09NQklORShpbmRleCwgZGF0YSwgZWxlbSkgKEJPT1NUX1BQX1NUUklOR0laRShlbGVtKSkoIi4iKQoKI2RlZmluZSBBUElfTUVUSE9EKGFyZ3MpIEJPT1NUX1BQX1NFUV9DQVQoYXJncykKI2RlZmluZSBJTlNFUlRfU0VQQVJBVE9SKGFyZ3MsIHNlcCkgQk9PU1RfUFBfU0VRX1JFVkVSU0UoQk9PU1RfUFBfU0VRX1RBSUwoQk9PU1RfUFBfU0VRX1JFVkVSU0UoQk9PU1RfUFBfU0VRX0ZPUl9FQUNIKENPTUJJTkUsIHNlcCwgYXJncykpKSkKCiNkZWZpbmUgRkxBVFRFTl9TRVFfSEVMUEVSKGluZGV4LCBkYXRhLCBlbGVtKSBlbGVtCiNkZWZpbmUgRkxBVFRFTl9TRVEoYXJncykgQk9PU1RfUFBfU0VRX0ZPUl9FQUNIKEZMQVRURU5fU0VRX0hFTFBFUiwgXywgYXJncykKCiNkZWZpbmUgSk9JTihhcmdzLCBzZXApIEZMQVRURU5fU0VRKElOU0VSVF9TRVBBUkFUT1IoYXJncywgc2VwKSkKCgppbnQgbWFpbigpCnsKICAgIHN0ZDo6Y291dCA8PCBKT0lOKChhKShiKShjKSwgIi4iKSA8PCBzdGQ6OmVuZGw7Cn0=