Помогите с задачей по с++

Мое решение не проходит по ошибкам в "Квадратик"

Ссылка 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();
   }   
} '''

Ответы (0 шт):