Problem:
Score : 300 points

Problem Statement

There are N stones arranged in a row. Every stone is painted white or black.
A string S represents the color of the stones. The i-th stone from the left is white if the i-th character of S is ., and the stone is black if the character is #.

Takahashi wants to change the colors of some stones to black or white so that there will be no white stone immediately to the right of a black stone.
Find the minimum number of stones that needs to be recolored.

Constraints

1 \leq N \leq 2\times 10^5

S is a string of length N consisting of . and #.

Input

Input is given from Standard Input in the following format:

N
S

Output

Print the minimum number of stones that needs to be recolored.

Sample Input 1

3
#.#

Sample Output 1

1

It is enough to change the color of the first stone to white.

Sample Input 2

5
#.##.

Sample Output 2

2

Sample Input 3

9
.........

Sample Output 3

0

Solution in PHP7 (7.0.15) (judge verdict: Wrong Answer)

<?php
$n = (int)trim(fgets(STDIN));
$s = trim(fgets(STDIN));

$min = $min2 = $n;

$black_cnt = [0];
$white_cnt = [0];

// 累積和
for ($i=0; $i < $n; $i++) { 
	$tmp = $s[$i];
	if ($tmp === '#') {
		$black_cnt[$i+1] = $black_cnt[$i]+1;
		$white_cnt[$i+1] = $white_cnt[$i];
	}else{
		$black_cnt[$i+1] = $black_cnt[$i];
		$white_cnt[$i+1] = $white_cnt[$i]+1;
	}
}

$left = 0;
$right = $n;

while ($left < $right) {
	$mid = (int)floor(($left+$right)/2);
	if (ev($mid) < $min) {
		$min = ev($mid);
		$left = $mid+1;
	}else{
		$right = $mid;
	}
}
$left = 0;
$right = $n;
while ($left < $right) {
	$mid = (int)floor(($left+$right)/2);
	if (ev($mid) < $min2) {
		$min2 = ev($mid);
		$right = $mid;
	}else{
		$left = $mid+1;
	}
}
echo min($min, $min2);


function ev($p){
	global $n;
	global $black_cnt;
	global $white_cnt;
	$b_sum_left = $black_cnt[max(0, $p-1)] - $black_cnt[0];
	$w_sum_right = $white_cnt[$n] - $white_cnt[$p];
	return $b_sum_left + $w_sum_right;
}