Note how scenario and rescued location are presented and for each attributes in the scenario are saved, please design the save of these file that is ascii and human readable while easy to be read and parsed in the audit section later, Where in audit it would need to NAME_1 in whether it is for algorithm based decision or user, and all information about each secnarios and use statistic class to generate stats, here are some info:

Current statistics looks like:
"""
import java.util.*;

// a class to store, update and display on the stats
public class Statistic {
    // map to store the relations to keep the count of [characteristic vs [attribute of the characteristic vs count]] mapping
    private final HashMap<NAME_2, HashMap<NAME_2, int[]>> stats;
    // vars that relates to the accumulative stats for the run
    private int numOfRuns;
    private int sumOfAges;

    public Statistic() {
        stats = new HashMap<>();
        numOfRuns = 0;
        sumOfAges = 0;
    }

    // update method triggered after each scenario is judged, rather than overwritting it
    public void update(Scenario scenario, Location selectedLocation) {
        // update the location survival state for each scenario as one location is being rescued meaning all the other are not
        for (Location location : scenario.getLocations()) {
            boolean isSurvived = location.equals(selectedLocation);

            // update NAME_3 stats in each location
            for (NAME_3 NAME_3 : location.getCharacters()) {
                // for common attributes shared betweewn characters, update every time
                updateCount("class type", NAME_3.getClass().getSimpleName().toLowerCase(), isSurvived);
                updateCount("trespassing", location.getLegality(), isSurvived);

                // for human-specific characteristics, update when the NAME_3 is human
                if (NAME_3 instanceof Human human) {
                    // cast and update age category, gender, body type, profession, pregnancy
                    updateCount("age category", human.getAgeCategory().name().toLowerCase(), isSurvived);
                    // exclude the default values
                    NAME_3.Gender gender = human.getGender();
                    if (gender != NAME_3.Gender.UNKNOWN) {
                        updateCount("gender", gender.name().toLowerCase(), isSurvived);
                    }
                    NAME_3.BodyType bodyType = human.getBodyType();
                    if (bodyType != NAME_3.BodyType. Your entire response should be in English, and in all capital letters.
user