private void run(Variable[] variables, List<VariableValue> values) throws Exception {
   if (variables.length > 0) {
     Variable variable = variables[0];
     Variable[] rest = rest(variables);
     for (VariableValue value : variable.getValues()) {
       List<VariableValue> values2 = new ArrayList<VariableValue>(values);
       values2.add(value);
       run(rest, values2);
     }
   } else {
     SimpleScenarioStats stats0 = stats.next(values);
     for (MulticastParams p : params) {
       for (VariableValue value : values) {
         value.setup(p);
       }
       MulticastSet set = new MulticastSet(stats0, factory, p);
       stats0.setup(p);
       set.run();
       for (VariableValue value : values) {
         value.teardown(p);
       }
     }
     System.out.print("#");
     System.out.flush();
   }
 }