#!/bin/sh cat >/tmp/c.cpp <<'CPP' #include #include #include #include #include using namespace std@using ull=unsigned long long@ struct N{ull k@int par@unsigned char move,dep@}@ string P[6]={"DABCEFGHLIJKMNOPQRST","EBCAHFGDQJKLTNOPMRSI","BFCDAEGHIRKLMQOPJNST","ABCDFGHEIJKLNOPMQRST","ACGDEBFHIJSLMNRPQKOT","ABDHEFCGIJKTMNOSQRLP"}@ int O[6][20]={{},{2,0,0,1,1,0,0,2},{1,2,0,0,2,1,0,0,0,1,0,0,0,1,0,0,1,1},{},{0,1,2,0,0,2,1},{0,0,1,2,0,0,2,1,0,0,0,1,0,0,0,1,0,0,1,1}}@ int E[18][24],C[18][24]@ ull turn(ull k,int m){ull r=0@for(int i=0@i<6@i++)r|=ull(E[m][(k>>(5*i))&31])<<(5*i)@for(int i=6@i<8@i++)r|=ull(C[m][(k>>(5*i))&31])<<(5*i)@return r@} int inv(int m){return m/3*3+(2-m%3)@} string fmt(int m){string r(1,"URFDLB"[m/3])@if(m%3==1)r+="2"@if(m%3==2)r+="'"@return r@} int main(){ for(int m=0@m<18@m++)for(int v=0@v<24@v++){int f=m/3,pow=m%3+1,x=v,y=v@for(int t=0@t ans@int aa=-1,bb=-1@ for(int a=0@a<4@a++)for(int b=a+1@b<4@b++){ ull start=0,goal=0@int ids[6]={0,1,2,3,8+a,8+b}@for(int i=0@i<6@i++){start|=ull(ei[ids[i]])<<(5*i)@goal|=ull(2*ids[i])<<(5*i)@}start|=ull(ci[a])<<30@start|=ull(ci[b])<<35@goal|=ull(3*a)<<30@goal|=ull(3*b)<<35@ vector B@B.reserve(50000)@unordered_map H@H.reserve(60000)@B.push_back({goal,-1,255,0})@H.emplace(goal,0)@ for(int i=0@i<(int)B.size()@i++){auto n=B[i]@if(n.dep==4)continue@for(int m=0@m<18@m++){ull v=turn(n.k,m)@if(H.emplace(v,B.size()).second)B.push_back({v,i,(unsigned char)m,(unsigned char)(n.dep+1)})@}} vector F@F.reserve(50000)@unordered_map HF@HF.reserve(60000)@F.push_back({start,-1,255,0})@HF.emplace(start,0)@int best=100,fi=-1,bi=-1@ for(int i=0@i<(int)F.size()@i++){auto n=F[i]@auto it=H.find(n.k)@if(it!=H.end()){int d=n.dep+B[it->second].dep@if(dsecond@}}if(n.dep==4)continue@for(int m=0@m<18@m++){ull v=turn(n.k,m)@if(HF.emplace(v,F.size()).second)F.push_back({v,i,(unsigned char)m,(unsigned char)(n.dep+1)})@}} cerr< v@for(int i=fi@F[i].par>=0@i=F[i].par)v.push_back(F[i].move)@reverse(v.begin(),v.end())@for(int i=bi@B[i].par>=0@i=B[i].par)v.push_back(inv(B[i].move))@ans=v@} } cerr<<"TOTAL "</tmp/c2.cpp c++ -O2 -std=c++17 /tmp/c2.cpp -o /tmp/c && /tmp/c