
1. Ninja can use one color at a time.
2. Ninja can’t use one color more than once.
3. The stamp box is in the form of a rectangle. So, Ninja can only draw rectangles(or squares) by adjusting the dimensions of the stamp box.
4. Once Ninja prints any color using the stamp box, the old color won’t be visible and only the new color will be visible.
The first line of input contains an integer ‘T’, denoting the number of test cases. The test cases follow.
The first line contains two space-separated integers ‘N’ and ‘M’, which denotes the number of rows and columns in the matrix ‘MAT’.
The next ‘N’ lines contain ‘M’ space-separated integers denoting the colors at that point.
For each test case, print 1 if it is possible to draw the given design. Otherwise, print 0.
Print the output of each test case in a separate line.
You are not required to print the expected output, it has already been taken care of. Just implement the function.
1 <= T <= 50
1 <= N <= 100
1 <= M <= 100
1 <= MAT[i][j] <= 50
Where 'MAT[i][j]' is the color in the coordinate (i, j).
Time Limit: 1 sec
Approach: The idea is to start removing the colors one by one instead of filling the colors.
After making the design, if you can successfully remove the colors, then it will be a blank grid. If it is not possible to make the design under the given conditions, then you won’t be able to reach a blank sheet.
Let’s say if we made a rectangle of 3X3 using color 1 and inside that, we made a rectangle of size 2X2 using color 2. How can we store the information that we have to remove color 2 first and then color 1?
We will use topological sorting for this. We will store indegrees of every color. For the above example, the indegree of color 2 will be 0, and the indegree of color 1 will be 1. It implies that we will remove all the colors with indegrees 0, and then reduce the indegrees of all the connected colors to it. This is similar to topological sorting.
The steps are as follows: