#include <bits/stdc++.h>
#include "supertrees.h"
#include <vector>
using namespace std;
const int mxN = 1001;
vector<int> parent(mxN,0);
int find(int node){
if(node==parent[node])
return node;
return parent[node]=find(parent[node]);
}
void unite(int a,int b){
a=find(a),b=find(b);
parent[b]=a;
}
int construct(vector<vector<int>> p) {
int N = p.size();
for(int i=0;i<N;i++)
parent[i]=i;
vector<vector<int>> ans(N,vector<int>(N,0));
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
if(p[i][j]==1){
if(find(i)!=find(j)){
ans[i][j]=1;
unite(i,j);
}
}
}
}
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
if(p[i][j]==0&&find(i)==find(j)){
return 0;
}
}
}
build(ans);
return 1;
}