using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static string[] SList(long n) => Enumerable.Repeat(0, (int)n).Select(_ => ReadLine()).ToArray(); public static void Main() { Solve(); } static void Solve() { var n = NN; var s = SList(n); var ans = Count(0, n - 1, 0, n - 1, s); if (CanPutHori(0, 0, s) || CanPutHori(0, 1, s)) ans = Math.Max(ans, Count(1, n - 1, 0, n - 1, s) + 1); if (CanPutHori(n - 1, 0, s) || CanPutHori(n - 1, 1, s)) ans = Math.Max(ans, Count(0, n - 2, 0, n - 1, s) + 1); if (CanPutVert(0, 0, s) || CanPutVert(1, 0, s)) ans = Math.Max(ans, Count(0, n - 1, 1, n - 1, s) + 1); if (CanPutVert(0, n - 1, s) || CanPutVert(1, n - 1, s)) ans = Math.Max(ans, Count(0, n - 1, 0, n - 2, s) + 1); if (((CanPutHori(0, 0, s) || CanPutHori(0, 1, s)) && CanPutVert(1, 0, s)) || (CanPutHori(0, 1, s) && (CanPutVert(0, 0, s) || CanPutVert(1, 0, s)))) ans = Math.Max(ans, Count(1, n - 1, 1, n - 1, s) + 2); if (((CanPutHori(0, 0, s) || CanPutHori(0, 1, s)) && CanPutVert(1, n - 1, s)) || (CanPutHori(0, 0, s) && (CanPutVert(0, n - 1, s) || CanPutVert(1, n - 1, s)))) ans = Math.Max(ans, Count(1, n - 1, 0, n - 2, s) + 2); if (((CanPutHori(n - 1, 0, s) || CanPutHori(n - 1, 1, s)) && CanPutVert(0, 0, s)) || (CanPutHori(n - 1, 1, s) && (CanPutVert(0, 0, s) || CanPutVert(1, 0, s)))) ans = Math.Max(ans, Count(0, n - 2, 1, n - 1, s) + 2); if (((CanPutHori(n - 1, 0, s) || CanPutHori(n - 1, 1, s)) && CanPutVert(0, n - 1, s)) || (CanPutHori(n - 1, 0, s) && (CanPutVert(0, n - 1, s) || CanPutVert(1, n - 1, s)))) ans = Math.Max(ans, Count(0, n - 2, 0, n - 2, s) + 2); WriteLine(ans); } static int Count(int xs, int xe, int ys, int ye, string[] s) { var ans = 0; if (ye - ys >= s.Length - 2) { var sub = 0; for (var i = xs; i <= xe; ++i) { if (ye - ys == s.Length - 1) if (CanPutHori(i, ys, s) || CanPutHori(i, ys + 1, s)) ++sub; if (ye - ys == s.Length - 2) if (CanPutHori(i, ys, s)) ++sub; } ans = Math.Max(ans, sub); } if (xe - xs >= s.Length - 2) { var sub = 0; for (var j = ys; j <= ye; ++j) { if (xe - xs == s.Length - 1) if (CanPutVert(xs, j, s) || CanPutVert(xs + 1, j, s)) ++sub; if (xe - xs == s.Length - 2) if (CanPutVert(xs, j, s)) ++sub; } ans = Math.Max(ans, sub); } return ans; } static bool CanPutHori(int x, int y, string[] s) { for (var j = 0; j < s.Length - 1; ++j) if (s[x][y + j] == '#') return false; return true; } static bool CanPutVert(int x, int y, string[] s) { for (var i = 0; i < s.Length - 1; ++i) if (s[x + i][y] == '#') return false; return true; } }