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# (Mono-mcs 6.8.0.105) (judge verdict: Accepted)

using System;
using System.Collections;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Threading.Tasks;


class Program
{
	//Main
	static void Main(string[] args)
	{
		//読み込む
		string S = Console.ReadLine();
		int N = int.Parse(S);
		char[] Cn = Console.ReadLine().ToCharArray();

		//i番目がRであるかのフラグ
		bool[] isRed = new bool[N];
		for(int i=0; i<N; i++){
			if(Cn[i] == 'R'){
				isRed[i] = true;
			}
		}

		int ans = 0;
		//現在の右端
		int right = N-1;

		//貪欲に、左端のWと右端のRとを交換していく
		for(int i=0; i<N; i++){
			//debug
			//Console.WriteLine("i={0},r={1}",i,right);

			//Rの場合、スキップ
			if(isRed[i]){
				continue;
			}
			//Wの場合
			else{
				bool done = false;

				//現在地点まできた場合、終了
				if(right <= i){
					break;
				}
				
				//右端から探索
				while(!isRed[right]){
					right --;
					//現在地点まできた場合、終了
					if(right <= i){
						done = true;
						break;
					}
				}

				//終了
				if(done){
					break;
				}

				//右端のRと入れ替える
				ans ++;
				isRed[i] = true;
				isRed[right] = false;
				right --;
			}
		}

		//出力
		Console.WriteLine(ans);
	}
}