#include <bits/stdc++.h>
using namespace std;
char stage[501][501];
int n;
int countblackcol(){
	int res=0;
	for (int x = 0; x < n; ++x)
	{
		int y;
		for (y = 0; y < n; ++y)
		{
			if(stage[y][x]=='.') break;
		}
		if(y==n) res++;
	}
	return res;
}
int searchrow(){
	//黒一行を作るまでの回数の最小を調べる
	int minv = n+1;
	for (int y = 0; y < n; ++y)
	{
		int v = 0;
		int ty;
		//塗りつぶし開始までの準備
		for (ty = 0; ty < n; ++ty)
		{
			if(stage[ty][y]=='#') break;
		}
		if(ty == n) v=1;
		//塗りつぶす個数
		for (int x = 0; x < n; ++x)
		{
			if(stage[y][x]=='.') v++;
		}
		//行動回数が最小のものを残す
		if(minv > v){
			minv = v;
		}
		
	}
	return minv;
}
int main(){
	// freopen("in.txt","r",stdin);
	cin >> n;
	for (int i = 0; i < n; ++i)
	{
		scanf("%s",stage[i]);
	}
	//どこに張り付けたとしても縦一列にはならない
	//つまり初めに縦一列黒なものから増えない
	int ans = searchrow();
	if(ans==n+1){
		cout << "-1" << endl;
		return 0;
	}
	//縦一列黒ではない個数を調べる
	ans += n - countblackcol();
	cout << ans << endl;
	//横一列すべて黒にするまでにかかる最小試行数
	

	return 0;
}
