@Override
  public void search(Input input, Results results, int runNumber, String runId) {
    Result result = new Result(rules, input, this, runNumber, runId);
    result.start();

    int n = input.getLength();

    List<Runnable> runnables = new ArrayList<>();

    rules
        .getRules()
        .forEach(
            rule -> {
              Runnable runnable = new ApostolicoGiancarloRunnable(input, result, n, rule);
              runnables.add(runnable);
            });

    executeSearch(runnables);

    result.end();
    results.addResult(result);
  }