/** maze solver
 */
import java.io.*;
import java.util.*;

public class SolveMaze{
  final int mazeX = 201;
  final int mazeY = 201;

  char[][] maze = new char[mazeX][mazeY];
  boolean[][] visited = new boolean[mazeX][mazeY];
  
  BufferedReader in;
  PrintStream out;

  public static void main(String[] argv){
    new SolveMaze(new BufferedReader(new InputStreamReader(System.in)), 
		  System.out);
  }

  public SolveMaze(BufferedReader in, PrintStream out){
    this.in = in;
    this.out = out;
    for(int i=0;i<mazeX;i++)
      for(int j=0;j<mazeY;j++){
	visited[i][j]=false;
	maze[i][j]='?';
      }

    makeMove(mazeX/2,mazeY/2);
  }

  void readSurroundings(int x, int y){
    try{
      for(int yOff=-1;yOff<2;yOff++){
	String line = in.readLine();
	for(int xOff=-1;xOff<2;xOff++)
	  if(xOff!=0 || yOff!=0)
	    maze[x+xOff][y+yOff]=line.charAt(xOff+1);
      }
    }
    catch(IOException e){
      System.err.println("problems with connection "+e);
      System.exit(1);
    }
  }

  void makeMove(int x, int y){
    visited[x][y] = true;
    if(maze[x][y]=='O')
      System.exit(0);
    readSurroundings(x, y);
    //printMaze(x,y);
    tryMove(x,y,-1,0,'W','E');
    tryMove(x,y,+1,0,'E','W');
    tryMove(x,y,0,-1,'N','S');
    tryMove(x,y,0,+1,'S','N');
  }

  final void tryMove(int x, int y, int xmove, int ymove, char dir, char back){
    x+=xmove;
    y+=ymove;
    if(maze[x][y]!='X' && 
       !visited[x][y]){
      out.println(dir);
      makeMove(x,y);
      // move failed, so reverse
      x-=xmove;
      y-=ymove;
      out.println(back);
      readSurroundings(x,y);
    }
  }

  void printMaze(int x, int y){
    for(int j=0;j<mazeY;j++){
      for(int i=0;i<mazeX;i++)
	if(i==x && j==y)
	  System.err.print('+');
	else
	  System.err.print(maze[i][j]);
      System.err.println();
    }
  }

}

