#include #include #include #include std::map dirs = {{'N',0.}, {'E',90.}, {'S',180.}, {'W',270.}}; long double deg(std::string &A) { long double dir1 = dirs[A[A.size()-1]]; if(A.size()==1) return dir1; // else: dir = 90 or 270 long double prec = 90.; long double dir2 = 0.; // relative to vertical center char lead = A[A.size()-2]; int up = (lead=='N') ? 1 : -1; for(int i = A.size()-2; i>=0; i--) { prec /= 2; if(A[i] == lead) dir2 += prec * up; else dir2 -= prec*up; } if(A[A.size()-1] == 'W') return 270. + dir2; else return 90. - dir2; } int main() { std::string A,B; std::cin >> A >> B; auto degA = deg(A); auto degB = deg(B); if(degA > degB) std::swap(degA, degB); std::cout << std::setprecision(10) << std::min( degB-degA, 360.+degA-degB ) << std::endl; }