public static void Seed_cycle(Network net, int stop) {
  
    int i, j, k, n;
    double h_err, delta, e;
    double mse = 0.0F;
    double err[] = new double[Config.NUM_OUTPUTS];
    Neuron h;

    for(i=0; i<stop; ++i) {
      System.out.println("Cycle " + i + ", MSE " + mse/600);
      mse = 0.0;
      for(j=0; j<Config.NUM_SEED_EXAMPLES; ++j) {
        for(k=0; k<Config.NUM_INPUTS; ++k)
          net.input[k] = seed_in[j][k];
        Sane_NN.Activate_net(net);
        /* get output errors*/
        for (k=0; k<Config.NUM_OUTPUTS; ++k)
          err[k] = (seed_out[j][k] - net.sigout[k]) 
                    * net.sigout[k] * (1-net.sigout[k]);

        for(k=0; k<Config.NUM_OUTPUTS; ++k) {
          e = seed_out[j][k] - net.sigout[k];
          mse += e*e;
        }
   
        /*error propogation*/
        for(k=0; k<Config.NUM_HIDDEN; ++k) {
          h = net.hidden[k];
          h_err = 0.0;
          for(n=0; n<h.numout; ++n) {
            h_err += err[h.out_conn[n]] * h.out_weight[n];
            delta = S_ETA * err[h.out_conn[n]] * h.sigout
                    + S_ALPHA * h.out_delta[n];
            h.out_weight[n] += delta;
            h.out_delta[n] = (float) delta;
          } /* end for-n */

          if (h_err != 0.0F) {
            h_err = h_err * h.sigout * (1.0F - h.sigout);
            for(n=0;n<h.numin;++n) {
              delta = S_ETA * h_err * Sane_Util.sgn(net.input[h.in_conn[n]])
                      + S_ALPHA * h.in_delta[n];
              h.in_weight[n] += delta;
              h.in_delta[n] = (float) delta;
            } /* end for-n */
          } /* end if h-err */
        } /* end for-k */
      } /* end for-j */
    } /* end for-i */

  }  /* end Seed_cycle */