Помогите с задачей по с++
Мое решение не проходит по ошибкам в "Квадратик"
Ссылка https://informatics.msk.ru/mod/statements/view.php?chapterid=2774#1
По претестам и тестам которые сам задавал проходить но в отправление выходит ошибка " Ошибка во время выполнения программы" и не исправить как бы не дебагл.
На клетчатом поле N×N, некоторые клетки которого закрашены, требуется найти размер максимального квадрата, состоящего из закрашенных клеток.
Входные данные В первой строке входного файла содержится единственное целое число N (1≤N≤3000). В каждой из следующих N строк содержится по N символов «#» и «.» (соответствующих закрашенным и незакрашенным клеткам соответственно), описывающих таблицу.
Выходные данные Выведите единственное целое число — максимальный размер полностью закрашенного квадрата.
'''
#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
const int N=2e5+7;
const int INF=2e9+7;
int t;
char a[3007][3007];
int n,answer,b[3007][3007],c[3007][3007];
void solve(){
cin>>n;
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
cin>>a[i][j];
}
}
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
if (a[i][j]=='#'){
int id=j;
int ans=0;
while(j<=n){
if (a[i][j]=='#') {
ans++;
}
else break;
j++;
}
for (int k=id;k<j;k++){
b[i][k]=ans;
ans--;
}
}
}
}
for (int j=1;j<=n;j++){
for (int i=1;i<=n;i++){
if (a[i][j]=='#'){
int ans=0;
int id=i;
while(i<=n){
if (a[i][j]=='#'){
ans++;
}
else break;
i++;
}
for (int k=id;k<i;k++){
c[k][j]=ans;
ans--;
}
}
}
}
for (int j=1;j<=n;j++){
for (int i=1;i<=n;i++){
if (b[i][j]!=0){
int id=i;
int mn=INF;
while(i<=n && b[i][j]!=0){
mn=min(mn,b[i][j]);
i++;
}
int mn1=INF;
while(j<=n && c[i][j]!=0){
mn1=min(mn1,c[id][j]);
j++;
}
answer=max(answer,min(mn,mn1));
}
}
}
cout<<answer;
}
int main () {
t=1;
//cin>>t;
while(t--){
solve();
}
} '''