Problem:
Score : 200 points

Problem Statement

Takahashi is participating in a programming contest called AXC002, and he has just submitted his code to Problem A.

The problem has N test cases.

For each test case i (1\leq i \leq N), you are given a string S_i representing the verdict for that test case. Find the numbers of test cases for which the verdict is AC, WA, TLE, and RE, respectively.

See the Output section for the output format.

Constraints

1 \leq N \leq 10^5

S_i is AC, WA, TLE, or RE.

Input

Input is given from Standard Input in the following format:

N
S_1
\vdots
S_N

Output

Let C_0, C_1, C_2, and C_3 be the numbers of test cases for which the verdict is AC, WA, TLE, and RE, respectively. Print the following:

AC x C_0
WA x C_1
TLE x C_2
RE x C_3

Sample Input 1

6
AC
TLE
AC
AC
WA
TLE

Sample Output 1

AC x 3
WA x 1
TLE x 2
RE x 0

We have 3, 1, 2, and 0 test case(s) for which the verdict is AC, WA, TLE, and RE, respectively.

Sample Input 2

10
AC
AC
AC
AC
AC
AC
AC
AC
AC
AC

Sample Output 2

AC x 10
WA x 0
TLE x 0
RE x 0

Solution in C# (.NET Core 3.1.201) (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

class Program
{
    #region library
    static int n = 0;
    static int m = 0;
    static int r = 0;
    static int c = 0;
    static int x = 0;
    static int y = 0;
    static string s = "";
    static string[] ss;
    static long sum = 0;
    static long cnt = 0;
    static long max = -1;
    static long min = 2147483647;
    static bool flg = false;
    static bool flg2 = false;
    static string alpha = "abcdefghijklmnopqrstuvwxyz";
    static long mod = 1000000007;
    static long[] arr;
    static char[,] map;
    static long[,] imap;
    public class Input
    {
        static readonly char[] separator = { ' ', '\r', '\n' };
        readonly StreamReader sr;
        readonly Queue<string> queue;

        public Input(string path = "")
        {
            queue = new Queue<string>();

            if (string.IsNullOrEmpty(path))
            {
                sr = new StreamReader(Console.OpenStandardInput());
            }
            else
            {
                sr = new StreamReader(path);
            }
        }

        public void SetText(IEnumerable<string> items)
        {
            foreach (var item in items)
            {
                SetText(item);
            }
        }

        public bool SetText(string s)
        {
            if (s == null) return false;

            foreach (var elem in s.Trim()
                .Split(separator, StringSplitOptions.RemoveEmptyEntries))
            {
                queue.Enqueue(elem);
            }

            return true;
        }

        public bool Any()
        {
            return queue.Any() || Read();
        }

        bool Read()
        {
            if (!SetText(sr.ReadLine())) return false;

            if (!queue.Any()) return Read();

            return queue.Any();
        }

        public string Next()
        {
            if (!queue.Any() && !Read())
            {
                return "";
            }

            return queue.Dequeue();
        }

        bool Accumulate(int n)
        {
            while (queue.Count() < n)
            {
                if (!Read()) return false;
            }

            return true;
        }

        public int NextInt()
        {
            return int.Parse(Next());
        }
        public long NextLong()
        {
            return long.Parse(Next());
        }
        public double NextDouble()
        {
            return double.Parse(Next());
        }

        T[] NextT<T>(int n, T offset, Func<string, T> parse, Func<T, T, T> add)
        {
            if (!Accumulate(n)) return null;

            var a = new T[n];

            for (int i = 0; i < n; i++)
                a[i] = add(parse(queue.Dequeue()), offset);

            return a;
        }

        public string[] Next(int n)
        {
            return NextT(n, "", x => x, (x, y) => x);
        }
        public int[] NextInt(int n, int offset = 0)
        {
            return NextT(n, offset, int.Parse, (x, y) => x + y);
        }
        public long[] NextLong(int n, long offset = 0)
        {
            return NextT(n, offset, long.Parse, (x, y) => x + y);
        }
        public double[] NextDouble(int n, double offset = 0.0)
        {
            return NextT(n, offset, double.Parse, (x, y) => x + y);
        }
    }
    static Input input;
    static int Int()
    {
        return input.NextInt();
    }
    static long Long()
    {
        return input.NextLong();
    }
    static double Double()
    {
        return input.NextDouble();
    }
    static string Text()
    {
        return input.Next();
    }
    static void wl(object obj = null)
    {
        Console.WriteLine(obj);
    }
    static void w(object obj)
    {
        Console.Write(obj);
    }
    static void Yes()
    {
        wl("YES");
    }
    static void No()
    {
        wl("NO");
    }
    static void Sum()
    {
        wl(sum);
    }
    static void Cnt()
    {
        wl(cnt);
    }
    static void SetArray(long num = -1)
    {
        if (n == 0)
        {
            n = Int();
        }
        arr = new long[n];
        for (int i = 0; i < n; i++)
        {
            if (num == -1)
                arr[i] = Int();
            else
                arr[i] = num;
        }
    }
    static void ShowArray()
    {
        for (int i = 0; i < arr.Length; i++)
        {
            if (i > 0) w(" ");
            w(arr[i]);
        }
        wl();
    }
    static void SetMap(char def = '@')
    {
        if (r == 0 && c == 0)
        {
            r = Int();
            c = Int();
        }
        map = new char[r, c];
        for (int i = 0; i < r; i++)
        {
            if (def == '@') s = Text();
            for (int j = 0; j < c; j++)
            {
                map[i, j] = (def == '@') ? s[j] : def;
            }
        }
    }
    static void SetIMap(long def = -1)
    {
        if (r == 0 && c == 0)
        {
            r = Int();
            c = Int();
        }
        imap = new long[r, c];
        for (int i = 0; i < r; i++)
        {
            for (int j = 0; j < c; j++)
            {
                imap[i, j] = (def == -1) ? Int() : def;
            }
        }
    }
    static void ShowMap()
    {
        for (int i = 0; i < r; i++)
        {
            for (int j = 0; j < c; j++)
            {
                w(map[i, j]);
            }
            wl();
        }
    }
    static void ShowIMap()
    {
        for (int i = 0; i < r; i++)
        {
            for (int j = 0; j < c; j++)
            {
                w(imap[i, j]);
            }
            wl();
        }
    }
    #endregion

    #region main
    static void Main(string[] args)
    {
        var sw = new StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
        Console.SetOut(sw);
        input = new Input();
        Solve();
        Console.Out.Flush();
    }

    public static void Solve()
    {
        n = Int();
        int ac = 0;
        int wa = 0;
        int tle = 0;
        int re = 0;
        for (int i = 0; i < n; i++)
        {
            switch(Text())
            {
                case "AC":
                    ac++;
                    break;
                case "WA":
                    wa++;
                    break;
                case "TLE":
                    tle++;
                    break;
                case "RE":
                    re++;
                    break;
            }
        }

        wl("AC x " + ac);
        wl("WA x " + wa);
        wl("TLE x " + tle);
        wl("RE x " + re);
    }
    #endregion
}