import java.util.*; import java.io.*; import java.text.*; public class NickyEnMark{ public static void main(String[] args) throws IOException { Scanner scanner = new Scanner(System.in); String from = scanner.next(); String to = scanner.next(); double angleFrom = angle(from); double angleTo = angle(to); double distA = angleFrom - angleTo; double distB = angleTo - angleFrom; if (distA < 0) { distA += 360.0; } if (distB < 0) { distB += 360.0; } System.out.println(Math.min(distA, distB)); } public static double angle(String s) { if (s.length() == 1) { switch (s.charAt(0)) { case 'N': return 0; case 'E': return 90; case 'S': return 180; case 'W': return 270; } } double low = 0; double high = 0; boolean flip = false; String end = s.substring(s.length() - 2); if (end.equals("NE")) { low = 0; high = 90; } else if (end.equals("SE")) { low = 90; high = 180; flip = true; } else if (end.equals("SW")) { low = 180; high = 270; } else { low = 270; high = 360; flip = true; } for (int i = s.length() - 3; i >= 0; i--) { switch (s.charAt(i)) { case 'N': if (flip) { low = low + (high - low) / 2.0; } else { high = low + (high - low) / 2.0; } break; case 'E': if (flip) { high = low + (high - low) / 2.0; } else { low = low + (high - low) / 2.0; } break; case 'S': if (flip) { low = low + (high - low) / 2.0; } else { high = low + (high - low) / 2.0; } break; case 'W': if (flip) { high = low + (high - low) / 2.0; } else { low = low + (high - low) / 2.0; } break; } } return low + (high - low) / 2.0; } }