#include <iostream>
#include <vector>
using namespace std;
struct Graph {
typedef unsigned int vertex_t;
typedef std::vector< std::vector<bool> > edges_set_t;
edges_set_t edges;
Graph(vertex_t vertices = 0)
: edges(std::vector< std::vector<bool> >(vertices, std::vector<bool>(vertices))) {
}
void insertEdge(vertex_t v, vertex_t w) {
edges[v][w] = 1;
}
bool hasEdge(vertex_t v, vertex_t w) const {
return edges[v][w];
}
};
bool operator==(const Graph& g, const Graph& h) {
return g.edges == h.edges;
}
int main() {
Graph g1(1);
g1.insertEdge(0, 0);
Graph g2(g1);
cout << (g1 == g2) << endl; // true
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKI2luY2x1ZGUgPHZlY3Rvcj4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgR3JhcGggewoJdHlwZWRlZiB1bnNpZ25lZCBpbnQgdmVydGV4X3Q7CiAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPCBzdGQ6OnZlY3Rvcjxib29sPiA+IGVkZ2VzX3NldF90OwoKICAgIGVkZ2VzX3NldF90IGVkZ2VzOwoKICAgIEdyYXBoKHZlcnRleF90IHZlcnRpY2VzID0gMCkKICAgIDogICBlZGdlcyhzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0b3I8Ym9vbD4gPih2ZXJ0aWNlcywgc3RkOjp2ZWN0b3I8Ym9vbD4odmVydGljZXMpKSkgewogICAgfQoKICAgIHZvaWQgaW5zZXJ0RWRnZSh2ZXJ0ZXhfdCB2LCB2ZXJ0ZXhfdCB3KSB7CiAgICAgICAgZWRnZXNbdl1bd10gPSAxOwogICAgfQoKICAgIGJvb2wgaGFzRWRnZSh2ZXJ0ZXhfdCB2LCB2ZXJ0ZXhfdCB3KSBjb25zdCB7CiAgICAgICAgcmV0dXJuIGVkZ2VzW3ZdW3ddOwogICAgfQoKfTsKCmJvb2wgb3BlcmF0b3I9PShjb25zdCBHcmFwaCYgZywgY29uc3QgR3JhcGgmIGgpIHsKICAgIHJldHVybiBnLmVkZ2VzID09IGguZWRnZXM7Cn0KCgppbnQgbWFpbigpIHsKICAgIEdyYXBoIGcxKDEpOwogICAgZzEuaW5zZXJ0RWRnZSgwLCAwKTsKICAgIEdyYXBoIGcyKGcxKTsKCiAgICBjb3V0IDw8IChnMSA9PSBnMikgPDwgZW5kbDsgLy8gdHJ1ZQoJcmV0dXJuIDA7Cn0=