public void go(String input, String outputdir){
        // set location of config file
        String config = "d:/warcraft data/config.cfg";
        // Create data structure
        MatchData M = new MatchData(input);
        // Read the config file
        processConfig(readConfig(config));
        // Declare variables
        int c = 0;
        Match m = null;
        long start = System.currentTimeMillis();
        long last = System.currentTimeMillis();
        int lim = 100000;
        int propertyCounter = 0;
        int numMatches = 4000000;
        int rule;
        // Create an adjacency list file for every high level rule
        for(int i=0;i<rules.length;i++)
        {
            // Read rule
            rule = rules[i];
            // do some time keeping
            start = System.currentTimeMillis();
            c = 0;
            // reset the data structure
            M.reset();
            // Go over all the matches, until end of file or match limit is reached
            while((m = M.getNext()) != null && c < numMatches)
            {
                // extract the links based on the rule
                switch(rule)
                {
                    case 0:
                        extractLinksSameSide(m);
                        break;
                    case 1:
                        extractLinksOpposingSide(m);
                        break;
                }
                c++;
                if(c%lim==0) // output some info ever lim cycles
                {
                    System.out.println(c + " done. Last " + lim + " done in " + (System.currentTimeMillis()-last) + " ms.");
                    System.out.println("Total number of links added: " + L.size());
                    last = System.currentTimeMillis();
                }
            }

            System.out.println("Total number of links added: " + L.size());
            System.out.println("All files read in " + (System.currentTimeMillis()-start) + " ms.");
            start = System.currentTimeMillis();

            // Write the result of this rule to disk
            System.out.println("Writing links to disk...");
//            L.writeValidLinksToFile((outputdir + "prop" + (i+1) + ".tlst"),thresholds[i]);
            System.out.println("Done. That took me " + (System.currentTimeMillis()-start));
            start = System.currentTimeMillis();
            // Clear tree for next rule
            L.clear();
        }
        // Close the data set
        M.close();
        // Combine the lists
//        System.out.println("Combining results...");
        System.out.println("Done. That took me " + (System.currentTimeMillis()-start) + " ms.");
    }