class Solution {
public:
int solve(vector<vector<int>>& matrix,int i,int j,int n,int m,int sum[],int arr[][10]){
if(i>=n and j>=m){
return 0;
}
if(arr[i][j]!=-1){
return arr[i][j];
}
if(matrix[i][j]==0){
int a = solve(matrix,i,j+1,n,m,sum,arr);
int b = solve(matrix,i+1,j,n,m,sum,arr);
int c = solve(matrix,i+1,j+1,n,m,sum,arr);
return arr[i][j]=0;
}
int a = solve(matrix,i,j+1,n,m,sum,arr);
int b = solve(matrix,i+1,j,n,m,sum,arr);
int c = solve(matrix,i+1,j+1,n,m,sum,arr);
int k = min(min(a,b),c)+1;
for(int y=1;y<=k;y++){
sum[y]++;
}
return arr[i][j] = k;
}
int countSquares(vector<vector<int>>& matrix) {
int arr[10][10];
memset(arr,-1,sizeof arr);
int n = matrix.size();
int m = matrix[0].size();
int ret = 0;
int i = 0;
int j = 0;
int sum[10];
memset(sum,0,sizeof sum);
ret = solve(matrix,i,j,n,m,sum,arr);
int re = 0;
for(int i=0;i<=5;i++){
cout<<sum[i]<<" ";
re+=sum[i];
}
cout<<"\n"<<re<<"\n";
return re;
}
};