#include <bits/stdc++.h>
using namespace std;
static const int INTINF = (INT_MAX >> 1);
static const long long LLINF = (LLONG_MAX >> 1);
static const int MAX = 100001;
static const long long MOD = 1000000007;
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline bool int_ceil(T a, T b) {
  T res = a / b;
  if (a % b != 0) res++;
  return res;
}
template <typename T>
using min_priority_queue = priority_queue<T, vector<T>, greater<T> >;
string to_string(string s) { return '"' + s + '"'; }
string to_string(bool b) { return b ? "true" : "false"; }
template <size_t N>
string to_string(bitset<N> bs) {
  string res;
  for (size_t i = 0; i < N; ++i) res += '0' + bs[i];
  return res;
}
string to_string(vector<bool> v) {
  string res = "{";
  for (bool e : v) res += to_string(e) + ", ";
  return res += "}";
}
template <class T, class U>
string to_string(pair<T, U> p);
template <class C>
string to_string(C c) {
  string res = "{";
  for (auto e : c) res += to_string(e) + ", ";
  return res += "}";
}
template <class T, class U>
string to_string(pair<T, U> p) {
  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}
void debug() { cerr << '\n'; }
template <class Head, class... Tail>
void debug(Head head, Tail... tail) {
  cerr << '\t' << to_string(head), debug(tail...);
}
vector<pair<char, int> > Ranlength(string str) {
  vector<pair<char, int> > ranlength;
  pair<char, int> f;
  char lastChar;
  int cnt = 0;
  for (int i = 0; i < (str.size()); ++i) {
    if (lastChar != str[i] || i == str.size()) {
      if (i != 0) {
        f = make_pair(lastChar, cnt);
        ranlength.push_back(f);
      }
      lastChar = str[i];
      cnt = 1;
    } else {
      cnt++;
    }
  }
  f = make_pair(lastChar, cnt);
  ranlength.push_back(f);
  return ranlength;
}
int main(int argc, const char* argv[]) {
  std::cout << std::fixed << std::setprecision(15);
  int n;
  cin >> n;
  string str;
  cin >> str;
  auto v = Ranlength(str);
  int k = 0;
  while (v[k].first != '#') {
    k++;
    if (str.size() < k) {
      cout << 0 << endl;
      return 0;
    }
  }
  long long sum = 0;
  long long ans = LLINF;
  for (int i = k; i < (v.size()); ++i) {
    if (v[i].first == '.') sum += v[i].second;
  }
  chmin(ans, sum);
  for (int i = k; i < (v.size()); ++i) {
    if (v[i].first == '#')
      sum += v[i].second;
    else
      sum -= v[i].second;
    chmin(ans, sum);
  }
  cout << ans << endl;
  return 0;
}
