#include <iostream>
#include <vector>

typedef std::vector<std::vector<int>> PUD;

PUD MakeHoge(PUD& In){
	PUD Ret;
	for (std::size_t i = 0; i < In.size() - 1; i++){
		Ret.push_back(std::vector<int>());
		for (std::size_t j = 0; j < In[i].size();j++){
			Ret[i].push_back(In[i][j]);
		}
		for (std::size_t j = 0; j < In[i].size();j++){
			Ret[i].push_back(In[i+1][j]);
		}
	}
	return std::move(Ret);//why std::move dosnt work??? on vc2013ee. because move to Temp object?
}

int main(){
	PUD PU{ { 31 }, { 41 }, { 59 }, { 2 }, };
	while (PU.size() != 1){
		PU=MakeHoge(PU);
		for (auto& v : PU){
			std::cout << '(';
			for (auto& i : v){
				std::cout << i << ' ';
			}
			std::cout << ')';
		}
		std::cout << std::endl;
	}
	int Total = 0;
	for (auto& i : PU) {
		for (auto& j : i){
			Total += j;
		}
	}
	std::cout <<"Total="<< Total << std::endl;
	return 0;
}