<p>You are given an integer <code>n</code>. You have an <code>n x n</code> binary grid <code>grid</code> with all values initially <code>1</code>&#39;s except for some indices given in the array <code>mines</code>. The <code>i<sup>th</sup></code> element of the array <code>mines</code> is defined as <code>mines[i] = [x<sub>i</sub>, y<sub>i</sub>]</code> where <code>grid[x<sub>i</sub>][y<sub>i</sub>] == 0</code>.</p>

<p>Return <em>the order of the largest <strong>axis-aligned</strong> plus sign of </em>1<em>&#39;s contained in </em><code>grid</code>. If there is none, return <code>0</code>.</p>

<p>An <strong>axis-aligned plus sign</strong> of <code>1</code>&#39;s of order <code>k</code> has some center <code>grid[r][c] == 1</code> along with four arms of length <code>k - 1</code> going up, down, left, and right, and made of <code>1</code>&#39;s. Note that there could be <code>0</code>&#39;s or <code>1</code>&#39;s beyond the arms of the plus sign, only the relevant area of the plus sign is checked for <code>1</code>&#39;s.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2021/06/13/plus1-grid.jpg" style="width: 404px; height: 405px;" />
<pre>
<strong>Input:</strong> n = 5, mines = [[4,2]]
<strong>Output:</strong> 2
<strong>Explanation:</strong> In the above grid, the largest plus sign can only be of order 2. One of them is shown.
</pre>

<p><strong class="example">Example 2:</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2021/06/13/plus2-grid.jpg" style="width: 84px; height: 85px;" />
<pre>
<strong>Input:</strong> n = 1, mines = [[0,0]]
<strong>Output:</strong> 0
<strong>Explanation:</strong> There is no plus sign, so return 0.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= n &lt;= 500</code></li>
	<li><code>1 &lt;= mines.length &lt;= 5000</code></li>
	<li><code>0 &lt;= x<sub>i</sub>, y<sub>i</sub> &lt; n</code></li>
	<li>All the pairs <code>(x<sub>i</sub>, y<sub>i</sub>)</code> are <strong>unique</strong>.</li>
</ul>

class Solution {
public:
    int orderOfLargestPlusSign(int n, vector<vector<int>>& mines) {
        ios_base::sync_with_stdio(false);
        cin.tie(nullptr);
        cout.tie(nullptr);
        vector<vector<int>> dp(n+1,vector<int>(n+1,1));
        
        for (int i = 0;i <=n;i++) {
            dp[i][0] = 0;
            dp[0][i] = 0;
        }
        int m = mines.size();
        for (int i = 0;i < m;i++){
            int x = mines[i][0];
            int y = mines[i][1];
            dp[x + 1][y + 1] = 0;
        }
        for (int i = 1;i <= n;i++) {
            for (int j = 1;j <= n;j++) {
                // cout << mines[i-1][j-1] << " ";
                dp[i][j] +=  dp[i-1][j] + dp[i][j-1]  - dp[i-1][j-1];
                // cout << i << " " << j << endl;?
            }
            // cout << endl;
        }
        // for (int i = 0;i <= n;i++) {
        //     for (int j = 0;j <= n;j++) cout <<  dp[i][j] << " ";
        //     cout << endl;
        // }
        if (dp[n][n] == 1 || dp[n][n] == 0) return dp[n][n];
        
        int order = 1;
         for (int k =  2;k <= n;k++) {
             for (int i = 1;i <= n;i++) {
                if (order == k) break;
                 for (int j = 1;j <= n;j++) {
                    int l = k - 1;
                    if (i - l >= 1 && i + l <= n && j - l >= 1 && j+ l <= n) {
                        if (dp[i + l][j] - dp[i - l - 1][j] -dp[i+l][j-1] + dp[i-l-1][j-1] == 2*l + 1 && dp[i][j+l] - dp[i][j - l - 1] -dp[i-1][j+l] + dp[i-1][j-l-1] == 2*l + 1) {
                            order = k;
                            break;
                        }
                       
                    }
                   
                 }
                

             }
             if (order != k) break;
         }
         return order;
    }

};
35434