Skier rides on a snowy field. Its movements can be described by a string of characters 'S', 'N', 'W', 'E' (which correspond to 1 meter movement in the south, north, west or east direction respectively).

It is known that if he moves along a previously unvisited segment of a path (i.e. this segment of the path is visited the first time), then the time of such movement is 5 seconds. If he rolls along previously visited segment of a path (i.e., this segment of the path has been covered by his path before), then it takes 1 second.

Find the skier's time to roll all the path.

Input

The first line contains an integer t (1 ≤ t ≤ 10^4) — the number of test cases in the input. Then t test cases follow.

Each set is given by one nonempty string of the characters 'S', 'N', 'W', 'E'. The length of the string does not exceed 10^5 characters.

The sum of the lengths of t given lines over all test cases in the input does not exceed 10^5.

Output

For each test case, print the desired path time in seconds.

Example

Input


5
NNN
NS
WWEN
WWEE
NWNWS


Output


15
6
16
12
25
//package codeforces.testing_14;

import java.io.*;
import java.util.HashSet;
import java.util.StringTokenizer;

public class _14_C {

    public static void main (String[] args) throws Exception {

        String s = "5\n" +
                "NNN\n" +
                "NS\n" +
                "WWEN\n" +
                "WWEE\n" +
                "NWNWS";

//        String s = "1\n" +
//                "NWES\n";


//        br = new BufferedReader(new StringReader(s));
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));

        rl(); int T = nin();
        for (int t=0; t<T; ++t) {
            rl(); char[] a=nca();

            long L=0;
            int x1=0, y1=0;
            int x2=0, y2=0;
            HashSet<String> set = new HashSet<>();
            for (char c:a) {
                switch (c) {
                    case 'S': ++y2; break;
                    case 'N': --y2; break;
                    case 'W': --x2; break;
                    case 'E': ++x2; break;
                }
                String step1 = x1+","+y1+","+x2+","+y2;
                String step2 = x2+","+y2+","+x1+","+y1;
                if (set.contains(step1) || set.contains(step2)) {
                    ++L;
                } else {
                    L+=5;
                }
                x1=x2; y1=y2;
                set.add(step1); set.add(step2);
            }

            bw.write(Long.toString(L));
            bw.newLine();
        }
        bw.flush();
    }


    static BufferedReader br;
    static BufferedWriter bw;
    static StringTokenizer st;
    static void rl() throws Exception{
        st = new StringTokenizer(br.readLine());
    }
    static long nlo(){
        return Long.parseLong(st.nextToken());
    }
    static int nin(){
        return Integer.parseInt(st.nextToken());
    }
    /*private static void te(){
      }*/
    static double ndo(){
        return Double.parseDouble(st.nextToken());
    }
    static char[] nca(){
        return st.nextToken().toCharArray();
    }
    static String nstr(){
        return st.nextToken();
    }
}