//m < 15, qq:997737609
void combs(std::vector<int>&v, std::vector<std::vector<int>> &P, int m)
{
//1*n
int n = v.size();
if(n == m)
{
P.push_back(v);
}
else if(m == 1)
{
P.resize(v.size());
for(int i =0; i < P.size(); i++)
{
P[i].push_back(v[i]);
}
}
else
{
P.resize(0);
if (m < n && m > 1)
{
for(int k = 0; k < n-m+1; k++)
{
std::vector<std::vector<int>> Q;
std::vector<int> vtemp(n-k-1);
std::copy(v.begin()+k+1, v.begin()+n, vtemp.begin());
combs(vtemp, Q, m-1);
std::vector<std::vector<int>> Qt(Q.size());
for(int i = 0; i < Q.size(); i++)//i rows
{
Qt[i].push_back(v[k]);
Qt[i].insert(Qt[i].end(), Q[i].begin(), Q[i].end());
}
if(P.size() == 0)
{
P = Qt;
}
else
{
P.insert(P.end(),Qt.begin(), Qt.end());
}
}
}
}
}
main()
{
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.push_back(6);
v.push_back(7);
v.push_back(8);
std::vector<std::vector<int >> re;
combs(v,re, 2);
}