import
java.util.*;
public
class
GFG {
static
boolean
check(List<List<Integer> > mat,
int
x,
int
y,
int
N, List<Integer> rows,
List<Integer> cols,
boolean
[][] same)
{
if
(mat.get(x).get(y) !=
1
)
return
false
;
if
(!rows.get(x).equals(N))
return
false
;
if
(!cols.get(y).equals(N))
return
false
;
for
(
int
i =
0
; i < mat.size(); i++)
if
(mat.get(i).get(y) ==
1
&& !same[i][x])
return
false
;
return
true
;
}
static
int
findNumberOfOnes(List<List<Integer> > mat,
int
N)
{
int
R = mat.size();
int
C = mat.get(
0
).size();
List<Integer> rows
=
new
ArrayList<>(Collections.nCopies(R,
0
));
List<Integer> cols
=
new
ArrayList<>(Collections.nCopies(C,
0
));
for
(
int
i =
0
; i < R; i++) {
for
(
int
j =
0
; j < C; j++) {
if
(mat.get(i).get(j) ==
1
) {
rows.set(i, rows.get(i) +
1
);
cols.set(j, cols.get(j) +
1
);
}
}
}
boolean
[][] same =
new
boolean
[R][R];
for
(
int
i =
0
; i < R; i++) {
for
(
int
j = i; j < R; j++) {
if
(mat.get(i).equals(mat.get(j))) {
same[i][j] = same[j][i] =
true
;
}
}
}
int
res =
0
;
for
(
int
i =
0
; i < R; i++) {
for
(
int
j =
0
; j < C; j++) {
if
(check(mat, i, j, N, rows, cols, same)) {
res++;
}
}
}
return
res;
}
public
static
void
main(String[] args)
{
List<List<Integer> > mat = Arrays.asList(
Arrays.asList(
0
,
1
,
0
,
1
,
1
,
0
),
Arrays.asList(
0
,
1
,
0
,
1
,
1
,
0
),
Arrays.asList(
0
,
1
,
0
,
1
,
1
,
0
),
Arrays.asList(
0
,
0
,
1
,
0
,
1
,
0
));
int
N =
3
;
System.out.println(findNumberOfOnes(mat, N));
}
}