ll@h,@w,@m++,z=-1; string@s[h]; DijkstraHeapq; q.malloc(h*w*m,1); rep(y,h)rep(x,w)if(s[y][x]=='S')q.change((y*w+x)*m+(m-1),0); while(q.size){ ll a=q.pop(); ll k=a%m; ll b=a/m; if(s[b/w][b%w]=='G'){ if((ull)z>q.val[a])z=q.val[a]; } rep(i,4){ ll y=(i==0)-(i==2)+b/w; ll x=(i==1)-(i==3)+b%w; if(y>=0&&y=0&&x='a'&&c<='i'?c-'a'==k:true)){ q.change((y*w+x)*m+(c>='1'&&c<='9'?c-'1':k),q.val[a]+1); } } } } wt(z);