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 Python (3.4.3) (judge verdict: Wrong Answer)

N = int(input())
S = str(input())
first_B = S.find('#') #最初の黒より前の白を消去するため　初めて出てくる黒の場所を取得
if first_B == -1: #黒がない=全部白-->回数0
    answer = 0
else:
    S = S[first_B:] #最初の白の部分を全部消去
    rev_S = S[::-1] #反転　終わり側から続く黒は不要なため
#    print (rev_S, 'rev_S')
#    print(S)
    last_W = rev_S.find('.') #(反転後で)最初の白より前の黒を消去するため　反転後に初めて白が出てくる場所を取得　
    if last_W == -1: #白がない-->全部黒-->もともと白...白＋黒...黒 -->k耐えは0回
#        n_W = S.count('.')
#        n_B = S.count('#')
#        if n_W > n_B:
#            answer = n_B
#        else:
#           answer = n_W
        answer = 0
    else:
        S = rev_S[last_W:] #最初の黒の部分を全部消去
        S = S[::-1] #反転
#        print (S)
        n_W = S.count('.')
        n_B = S.count('#')
        if n_W > n_B:
            answer = n_B
        else:
            answer = n_W
print (answer)