public void addNeuron(ArrayList<Connection> connects,Neuron neuron){
        // THIS SHOULD NEVER RUN
        if(connects.isEmpty()){
            mutate();
            return;
        }
        int connectionNum=rng.getInt(connects.size(),null,false);
        Connection connection=connects.get(connectionNum);
        //hack to make sure not inserting node into connection to self
        int cnt=0;
        while(connection.getGiveNeuron()==connection.getRecieveNeuron()){
            cnt++;
            connectionNum=rng.getInt(connects.size(),null,false);
            connection=connects.get(connectionNum);
            if(cnt==200)
                new CMDTester(this);
        }
        Neuron otherNeuron=null;
        if(connection.getGiveNeuron()==neuron)
            otherNeuron=connection.getRecieveNeuron();
        else
            otherNeuron=connection.getGiveNeuron();
        Neuron newNeuron=new Neuron_Add();
        if(usingSpeciation){
            newNeuron.setInitIn(neuron.getInnovationNum());
            newNeuron.setInitOut(otherNeuron.getInnovationNum());
            tracker.defineNeuron(newNeuron);
        }
        else
            newNeuron.setInnovationNum(nodeCnt++);
        if(connection.getGiveNeuron()==neuron){
            makeConnection(neuron,newNeuron);
            makeConnection(newNeuron,otherNeuron);
        }else{
            makeConnection(otherNeuron,newNeuron);
            makeConnection(newNeuron,neuron);
        }
        neurons.add(newNeuron);
        nodes.add(newNeuron);
    }