#include <vector>
#include <array>
#include <numeric>
#include <iostream>
template<int ... I>
struct IndexSeq
{
};
template<int T, typename T> struct MakeIndexSeqImpl;
template<int T, int ... H>
struct MakeIndexSeqImpl<T, IndexSeq<H ...>>
{
typedef IndexSeq<H..., T> type;
};
template<int N, int Init, int Step>
struct MakeIndexSeq
{
typedef typename MakeIndexSeqImpl<(N - 1) * Step + Init, typename MakeIndexSeq<N - 1, Init, Step>::type>::type type;
};
template<int Init, int Step>
struct MakeIndexSeq<1, Init, Step>
{
typedef IndexSeq<Init> type;
};
template<int ... I>
constexpr std::array<int, sizeof ... (I)> MakeSeqImpl(IndexSeq<I ...> seq)
{
return std::array<int, sizeof ... (I)>{I ...};
}
template<int I, int Step = 1, int Init = 0>
constexpr std::array<int, I> MakeSeq()
{
return MakeSeqImpl(typename MakeIndexSeq<I, Init, Step>::type());
}
int main()
{
for (auto i : MakeSeq<20, 10, 10>())
{
std::cout << i << ' ';
}
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8aW50IC4uLiBJPgpzdHJ1Y3QgSW5kZXhTZXEKewp9OwoKdGVtcGxhdGU8aW50IFQsIHR5cGVuYW1lIFQ+IHN0cnVjdCBNYWtlSW5kZXhTZXFJbXBsOwp0ZW1wbGF0ZTxpbnQgVCwgaW50IC4uLiBIPgpzdHJ1Y3QgTWFrZUluZGV4U2VxSW1wbDxULCBJbmRleFNlcTxIIC4uLj4+CnsKCXR5cGVkZWYgSW5kZXhTZXE8SC4uLiwgVD4gdHlwZTsKfTsKCnRlbXBsYXRlPGludCBOLCBpbnQgSW5pdCwgaW50IFN0ZXA+CnN0cnVjdCBNYWtlSW5kZXhTZXEKewoJdHlwZWRlZiB0eXBlbmFtZSBNYWtlSW5kZXhTZXFJbXBsPChOIC0gMSkgKiBTdGVwICsgSW5pdCwgdHlwZW5hbWUgTWFrZUluZGV4U2VxPE4gLSAxLCBJbml0LCBTdGVwPjo6dHlwZT46OnR5cGUgdHlwZTsKfTsKCnRlbXBsYXRlPGludCBJbml0LCBpbnQgU3RlcD4Kc3RydWN0IE1ha2VJbmRleFNlcTwxLCBJbml0LCBTdGVwPgp7Cgl0eXBlZGVmIEluZGV4U2VxPEluaXQ+IHR5cGU7Cn07Cgp0ZW1wbGF0ZTxpbnQgLi4uIEk+CmNvbnN0ZXhwciBzdGQ6OmFycmF5PGludCwgc2l6ZW9mIC4uLiAoSSk+IE1ha2VTZXFJbXBsKEluZGV4U2VxPEkgLi4uPiBzZXEpCnsKCXJldHVybiBzdGQ6OmFycmF5PGludCwgc2l6ZW9mIC4uLiAoSSk+e0kgLi4ufTsKfQoKdGVtcGxhdGU8aW50IEksIGludCBTdGVwID0gMSwgaW50IEluaXQgPSAwPgpjb25zdGV4cHIgc3RkOjphcnJheTxpbnQsIEk+IE1ha2VTZXEoKQp7CglyZXR1cm4gTWFrZVNlcUltcGwodHlwZW5hbWUgTWFrZUluZGV4U2VxPEksIEluaXQsIFN0ZXA+Ojp0eXBlKCkpOwp9CgppbnQgbWFpbigpCnsKICAgZm9yIChhdXRvIGkgOiBNYWtlU2VxPDIwLCAxMCwgMTA+KCkpCiAgIHsKICAgICAgc3RkOjpjb3V0IDw8IGkgPDwgJyAnOwogICB9Cn0=