generalized concatenation