#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;
const int nx = 1e3+5;
int n, dsu[nx], vs[nx];
vector<vector<int>> b;
int find(int x)
{
if(dsu[x] == x) return x;
dsu[x] = find(dsu[x]);
return dsu[x];
}
void merge(int u, int v, int* dsu)
{
int pu = find(u), pv = find(v);
if(pu != pv)
dsu[pu] = pv;
}
int construct(vector<vector<int>> p)
{
n = p.size();
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(p[i][j] == 3) return 0;
iota(dsu, dsu + nx, 0);
b.resize(n);
for(auto &row : b) row.resize(n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(p[i][j] == 1 && i != j) merge(i, j, dsu);
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
if(i != j && find(i) == find(j)) {
if(p[i][j] == 1 && find(i) != j) b[find(i)][j] = 1, b[j][find(i)] = 1;
if(p[i][j] == 0) return 0;
}
}
}
build(b);
return 1;
}