Problem:
Score : 400 points

Problem Statement

An altar enshrines N stones arranged in a row from left to right. The color of the i-th stone from the left (1 \leq i \leq N) is given to you as a character c_i; R stands for red and W stands for white.

You can do the following two kinds of operations any number of times in any order:

Choose two stones (not necessarily adjacent) and swap them.

Choose one stone and change its color (from red to white and vice versa).

According to a fortune-teller, a white stone placed to the immediate left of a red stone will bring a disaster. At least how many operations are needed to reach a situation without such a white stone?

Constraints

2 \leq N \leq 200000

c_i is R or W.

Input

Input is given from Standard Input in the following format:

N
c_{1}c_{2}...c_{N}

Output

Print an integer representing the minimum number of operations needed.

Sample Input 1

4
WWRR

Sample Output 1

2

For example, the two operations below will achieve the objective.

Swap the 1-st and 3-rd stones from the left, resulting in RWWR.

Change the color of the 4-th stone from the left, resulting in RWWW.

Sample Input 2

2
RR

Sample Output 2

0

It can be the case that no operation is needed.

Sample Input 3

8
WRWWRWRR

Sample Output 3

3

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using static System.Console;
using static System.Math;

namespace CP
{
    class Atria
    {
        static void Main(string[] args)
        {
            int n = int.Parse(ReadLine());
            char[] s = ReadLine().ToArray();
            int ans = 0;
            //入れ替え
            int changeLimit = 0;
            for (int i = 0; i < n; i++)
            {
                if (s[i] == 'R')break;
                changeLimit++;
            }

            int changeIndex = 0;
            for (int i = n - 1; i >= Divide(n); i--)//Rを右に移動させない
            {
                if (changeLimit <= 0) break;//入れ替え終わり
                if(s[i] == 'R')
                {
                    Swap(ref s[i], ref s[changeIndex++]);
                    changeLimit--;
                    ans++;
                }
            }


            //色変
            bool changed = false;
            for (int i = 0; i < n; i++)
            {
                if (!changed)
                {
                    if (s[i] == 'W') changed = true;
                }
                if (changed)
                {
                    if (s[i] == 'R') ans++;
                }
            }
            WriteLine(ans);
        }

        static int Divide(int n)
        {
            if (n % 2 == 0) return n / 2;
            else return (n / 2) + 1;
        }
        static void Swap<T>(ref T a, ref T b)
        {
            var tmp = a;
            a = b;
            b = tmp;
        }
    }
}