#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;
int construct(std::vector<std::vector<int>> p){
int n = p.size();
vector<int> vis(n, 0);
vector<vector<int>> ln, cyc, ans(n, vector<int>(n, 0));
for(int i = 0;i<n;i++){
if(!vis[i]){
vis[i] = 1;
ln.push_back({i});
for(int j = i + 1;j<n;j++){
if(p[i][j] == 1) ln.back().push_back(j), vis[j] = 1;
else if(p[i][j] == 3) return 0;
}
}
}
int m = ln.size();
for(int i = 0;i<n;i++) vis[i] = 0;
for(int i = 0;i<m;i++){
if(!vis[ln[i][0]]){
vis[ln[i][0]] = 1;
cyc.push_back({ln[i][0]});
for(int j = i + 1;j<m;j++){
if(p[ln[i][0]][ln[j][0]] == 2) cyc.back().push_back(ln[j][0]);
}
}
}
for(int i = 0;i<m;i++){
for(int j = 0;j<ln[i].size() - 1;j++){
ans[ln[i][j]][ln[i][j + 1]] = ans[ln[i][j + 1]][ln[i][j]] = 1;
}
}
for(int i = 0;i<cyc.size();i++){
for(int j = 0;j<cyc[i].size() - 1;j++){
ans[cyc[i][j]][cyc[i][j + 1]] = ans[cyc[i][j + 1]][cyc[i][j]] = 1;
}
if(cyc[i].size() != 1) ans[cyc[i][0]][cyc[i].back()] = ans[cyc[i].back()][cyc[i][0]] = 1;
}
build(ans);
return 1;
}