public static Network build(List<Pair> pairs){
        Map<String, Integer> nodeMap = new HashMap<>();
        List<Node> nodes = new ArrayList<>();
        int index = 0;
        for(Pair p:pairs){
            if(!nodeMap.containsKey(p.getP1())){
                nodeMap.put(p.getP1(), index++);
                nodes.add(new Node(p.getP1(), NodeType.miRNA));
            }
            if(!nodeMap.containsKey(p.getP2())){
                nodeMap.put(p.getP2(), index++);
                nodes.add(new Node(p.getP2(), NodeType.Gene));
            }
        }
        
        int[][] am = new int[nodes.size()][nodes.size()];
        for(Pair p:pairs){
            int p1n = nodeMap.get(p.getP1());
            int p2n = nodeMap.get(p.getP2());
            if(p1n < p2n){
                am[p1n][p2n] = 1;
            }else{
                am[p2n][p1n] = 1;
            }
        }
        return new Network(am, nodes);
    }