#include #include #include #include #include #include #include #include using namespace std; long long n,m,a,b,x1,y1,x2,y2,used[2501],dist[2501]; vector > z[2501]; string s[501]; void dijkstra(long long s, long long f) { for(int i=0; i<=n*m-1; i++) {used[i]=0; dist[i]=2000000001;} dist[s]=0; for(int i=0; i<=n*m-1; i++) { long long max1=2000000001,minp=0; for(int j=0; j<=n*m-1; j++) if(dist[j]>n>>m>>a>>b; for(int i=1; i<=n; i++) cin>>s[i]; cin>>x1>>y1; cin>>x2>>y2; for(int i=1; i<=n; i++) { for(int j=0; j<=m-1; j++) { if(i-1>=1) {z[(i-1)*m+j].push_back(make_pair((i-2)*m+j,b+(s[i-1][j]==s[i][j]?0:a)));} if(i+1<=n) {z[(i-1)*m+j].push_back(make_pair((i)*m+j,b+(s[i+1][j]==s[i][j]?0:a)));} if(j-1>=0) {z[(i-1)*m+j].push_back(make_pair((i-1)*m+j-1,b+(s[i][j-1]==s[i][j]?0:a)));} if(j+1<=m-1) {z[(i-1)*m+j].push_back(make_pair((i-1)*m+j+1,b+(s[i][j+1]==s[i][j]?0:a)));} } } y1--; y2--; dijkstra((x1-1)*m+y1,(x2-1)*m+y2); cout<