# @param input 一個list, 每個list element 都是一個vector
# @return list 列出input[[1]], input[[2]], ..., input[[n]] 中所有可能的組合
#              ex: list(c(input[[1]][1], input[[2]][1], ..., input[[n]][1]),
#                       ...
#                       c(input[[1]][length(input[[1]])], ..., input[[n]][length(input[[n]])])
combination <- function(input) {
  if (length(input) == 1) {
    return(lapply(input[[1]], function(a) a))
  }
  n <- length(input)
  temp <- combination(input[1:(n-1)])
  retval <- rep(temp, length(input[[n]]))
  index <- 1
  for(i in 1:length(input[[n]])) {
    for(j in 1:length(temp)) {
      retval[[index]] <- c(retval[[index]], input[[n]][i])
      index <- index + 1
    }
  }
  return(retval)
}

combination(list(1:3,4:6,7:8))