#include <cstddef>
#include <iostream>
#include <stdexcept>
#include <vector>
void verify(std::size_t n,std::size_t threads) {
    if(threads==0) throw std::invalid_argument("threads");
    std::vector<int> visits(n,0);
    for(std::size_t t=0;t<threads;++t) for(std::size_t i=t;i<n;) {
        ++visits[i];if(n-i<=threads) break;i+=threads;
    }
    for(int count:visits) if(count!=1) throw std::runtime_error("grid stride");
}
int main() {
    for(std::size_t n=0;n<=100;++n) for(std::size_t t=1;t<=20;++t) verify(n,t);
    verify(17,6);std::cout<<"thread0=0,6,12 coverage=17\n";
}
