Repository: BBVA/mercury-robust (language: python)

Issue:
Add Feature Checker Test
Port FeatureCheckerTest


Discussion / hints:

Fix patch:
diff --git a/.bumpversion.cfg b/.bumpversion.cfg
index 289380a..4844392 100644
--- a/.bumpversion.cfg
+++ b/.bumpversion.cfg
@@ -1,6 +1,5 @@
-
 [bumpversion]
-current_version = 0.0.1
+current_version = 0.0.2
 parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(-(?P<release>\w+)\.(?P<build>\d+))?
 serialize = 
 	{major}.{minor}.{patch}-{release}.{build}
@@ -12,4 +11,7 @@ tag = True
 
 [bumpversion:file:README.md]
 
-[bumpversion:file:docs/index.md]
\ No newline at end of file
+[bumpversion:file:docs/index.md]
+
+[bumpversion:file:pyproject.toml]
+
diff --git a/README.md b/README.md
index e5f9a42..bc21161 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,7 @@
 # mercury-robust
 
 [![](https://github.com/BBVA/mercury-robust/actions/workflows/test.yml/badge.svg)](https://github.com/BBVA/mercury-robust)
-![](https://img.shields.io/badge/latest-0.0.1-blue)
-
-***mercury-robust*** is a library to perform robust testing on models and/or datasets.
+![](https://img.shields.io/badge/latest-0.0.2-blue)
 
 ## Mercury project at BBVA
 
@@ -12,6 +10,58 @@ That's the case with the `mercury-robust` package.
 
 If you're interested in learning more about the Mercury project, we recommend reading this blog [post](https://www.bbvaaifactory.com/mercury-acelerando-la-reutilizacion-en-ciencia-de-datos-dentro-de-bbva/) from www.bbvaaifactory.com
 
+## Introduction to mercury-robust
+
+`mercury-robust` is a Python library designed for performing robust testing on machine learning models and datasets. It helps ensure that data workflows and models are robust against certain conditions, such as data drift, label leaking or the input data schema, by raising an exception when they fail. This library is intended for data scientists, machine learning engineers and anyone interested in ensuring the performance and robustness of their models in productive environments.
+
+## Importance of ML Robustness
+
+Errors or misbehaviours in machine learning models and datasets can have significant consequences, especially in sensitive domains such as healthcare or finance. It is important to ensure that model performance is align to what was measured in testing environemnts and robust to prevent harm to individuals or organizations that rely on them. `mercury-robust` helps ensure the robustness of machine learning models and datasets by providing a modular framework for performing tests.
+
+## Types of Tests
+`mercury-robust` provides two main types of tests: `Data Tests` and `Model Tests`. In addition, all tests can be added to a container class called `TestSuite`
+
+### Data Tests
+**Data Tests** receive a dataset as the main input argument and check different conditions. For example, the `CohortPerformanceTest checks whether some metrics perform poorly for some cohorts of data when compared to other groups. This is particularly relevant for measuring fairness in sensitive variables.
+
+### Model Tests
+**Model Tests** involve data in combination with a machine learning model. For example, the `ModelSimplicityChecker` evaluates if a simple baseline, trained in the same dataset, gives better or similar performance to a given model. It is used to check if added complexity contributes significantly to improve the model. 
+
+if the complexisty of the model is adecuate to the model  measures the importance of every input feature and fails if the model has input features that add very marginal contribution.
+
+### TestSuite
+This class provides an easy way to group tests and execute them together. Here's an example of a `TestSuite` that checks for input features that add very marginal importance to the model, the existence of linear combinations in those features, or some kind of data drift:
+
+```python 
+from mercury.robust.model_tests import ModelSimplicityChecker
+from mercury.robust.data_tests import LinearCombinationsTest, DriftTest
+from mercury.robust.suite import TestSuite
+
+# Create some tests
+complexity_test = ModelSimplicityChecker(
+    model = model,
+    X_train = X_train,
+    y_train = y_train,
+    X_test = X_test,
+    y_test = y_test,
+    threshold = 0.02,
+    eval_fn = roc_auc_score
+)
+drift_test = DriftTest(df_test, train_schma, name="drift_train_test")
+lin_comb_test = LinearCombinationsTest(df_train)
+
+# Create the TestSuite with the tests
+test_suite = TestSuite(
+    tests=[complexity_test, drift_test, lin_comb_test], run_safe=True
+)
+# Obtain results
+test_results = test_suite.get_results_as_df()
+```
+
+## Cheatsheet
+To help you get started with using `mercury-robust`, we've created a cheatsheet that summarizes the main features and methods of the library. You can download the cheatsheet from here: [RobustCheatsheet.pdf](https://github.com/BBVA/mercury-robust/files/11260658/RobustCheatsheet.pdf)
+
+
 ## User installation
 
 The easiest way to install `mercury-robust` is using ``pip``:
diff --git a/docs/index.md b/docs/index.md
index e5f9a42..fb15234 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,7 +1,7 @@
 # mercury-robust
 
 [![](https://github.com/BBVA/mercury-robust/actions/workflows/test.yml/badge.svg)](https://github.com/BBVA/mercury-robust)
-![](https://img.shields.io/badge/latest-0.0.1-blue)
+![](https://img.shields.io/badge/latest-0.0.2-blue)
 
 ***mercury-robust*** is a library to perform robust testing on models and/or datasets.
 
diff --git a/mercury/robust/__init__.py b/mercury/robust/__init__.py
index f00f836..49b2ada 100644
--- a/mercury/robust/__init__.py
+++ b/mercury/robust/__init__.py
@@ -4,6 +4,6 @@
 Top-level package for mercury robust.
 """
 
-__version__ = '0.0.1'
+__version__ = '0.0.2'
 
 from .suite import TestSuite  # noqa: 402
diff --git a/mercury/robust/_base_batch_drift_detector.py b/mercury/robust/_base_batch_drift_detector.py
deleted file mode 100644
index 870699c..0000000
--- a/mercury/robust/_base_batch_drift_detector.py
+++ /dev/null
@@ -1,267 +0,0 @@
-import numpy as np
-import seaborn as sns
-import matplotlib.pyplot as plt
-
-from abc import ABC, abstractmethod
-
-
-class BaseBatchDriftDetector(ABC):
-    """
-    Base class for batch drift detection.
-    The class can be extended to create a method for batch drift detection over a source dataset `X_src` and target
-    dataset `X_target`, or a source dataset distributions `distr_src` and a target dataset distributions `distr_target`
-    The main method to implement is the  `calculate_drift()` method.
-    """
-
-    def __init__(
-        self, X_src=None, X_target=None, distr_src=None, distr_target=None, features=None, correction="bonferroni", p_val=0.05
-    ):
-        self.X_src = X_src
-        self.X_target = X_target
-        self.distr_src = distr_src
-        self.distr_target = distr_target
-        self.features = features
-        self.correction = correction
-        self.p_val = p_val
-        self.drift_metrics = None
-
-    def set_datasets(self, X_src, X_target):
-        self.X_src = X_src
-        self.X_target = X_target
-        self.drift_metrics = None
-
-    def set_distributions(self, distr_src, distr_target):
-        self.distr_src = distr_src
-        self.distr_target = distr_target
-        self.drift_metrics = None
-
-    def _apply_correction(self, p_vals_test):
-        """
-        Applies correction of the p-value.
-        """
-
-        if self.p_val is None:
-            raise ValueError("p_val value is not setted")
-
-        n_tests = len(p_vals_test)
-        if self.correction is None:
-            threshold = self.p_val
-            drift_pred = p_vals_test < self.p_val
-        elif self.correction == 'bonferroni':
-            threshold = self.p_val / n_tests
-            drift_pred = (p_vals_test < threshold).any()
-        else:
-            raise ValueError("Invalid correction type")
-        return drift_pred, threshold
-
-    def _check_datasets(self):
-        if (self.X_src is None) or (self.X_target is None):
-            raise ValueError("X_src and X_target are needed to compute the metric")
-
-        if (not isinstance(self.X_src, np.ndarray)) or (not isinstance(self.X_target, np.ndarray)):
-            raise ValueError("X_src and X_target must be numpy arrays")
-
-        if (len(self.X_src.shape) != 2) or (len(self.X_target.shape) != 2):
-            raise ValueError("X_src and X_target must be 2-dimensional np.arrays")
-
-        if self.X_src.shape[1] != self.X_target.shape[1]:
-            raise ValueError("X_src and X_target must have the same number of features")
-
-    def _check_distributions(self):
-        if (self.distr_src is None) or (self.distr_target is None):
-            raise ValueError("distr_src and distr_target are need to compute the metric")
-
-        if len(self.distr_src) != len(self.distr_target):
-            raise ValueError("distr_src and distr_target  must have the same number of features")
-
-        for i in range(len(self.distr_src)):
-            if len(self.distr_src[i]) != len(self.distr_target[i]):
-                raise ValueError("distr_src and distr_target have different dimensions for feature ", i)
-
-    @abstractmethod
-    def calculate_drift(self):
-        """
-        Method to implement in extended classes
-        """
-        raise NotImplementedError()
-
-    def _get_index_feature(self, idx_feature=None, name_feature=None):
-        if idx_feature is None and name_feature is None:
-            raise ValueError("idx_feature or name_feature must be specified")
-
-        if (idx_feature is not None) and (name_feature is not None):
-            raise ValueError("Only one of the parameters idx_feature or name_feature must be specified")
-
-        if name_feature is not None:
-            if self.features is not None:
-                return self.features.index(name_feature)
-            else:
-                raise ValueError("To use the name_feature the feature attribute of the class must be specified first")
-
-        return idx_feature
-
-    def plot_distribution_feature(self, idx_feature=None, name_feature=None, hist=True, ax=None, figsize=(8, 4)):
-        """
-        Plots the distribution of a given feature for the source and the target datasets.
-        The feature can be indicated by the index using the `idx_feature` parameter, or by the name using the
-        `name_feature` parameter (only possible if attribute `features` was specified.
-        Args:
-            idx_feature (int):
-                index of the feature
-            name_feature (string):
-                name of the feature
-            hist (boolean):
-                whether to show the histograms in the plot or not.
-            ax (matplotlib.axes._subplots.AxesSubplot):
-                Axes object on which the data will be plotted. If not specified it creates one.
-            figsize (tuple):
-                figsize to use if `ax` is not specified.
-        Returns:
-            The axes
-        """
-        self._check_datasets()
-        idx_feature = self._get_index_feature(idx_feature, name_feature)
-        if ax is None:
-            fig, ax = plt.subplots(1, 1, figsize=figsize)
-
-        axes = sns.distplot(self.X_src[:, idx_feature], hist=hist, ax=ax, label="dataset source")
-        axes = sns.distplot(self.X_target[:, idx_feature], hist=hist, ax=ax, label="dataset target")
-        axes.legend()
-        return axes
-
-    def plot_histograms_feature(self, idx_feature=None, name_feature=None, figsize=(8, 4)):
-        """
-        Plots the histograms of a given feature for the source and the target distributions.
-        The feature can be indicated by the index using the `idx_feature` parameter, or by the name using the
-        `name_feature` parameter (only possible if attribute `features` was specified.
-        Args:
-            idx_feature (int):
-                index of the feature
-            name_feature (string):
-                name of the feature
-            figsize (tuple):
-                figsize to use if `ax` is not specified.
-        Returns:
-            The axes
-        """
-
-        self._check_distributions()
-        idx_feature = self._get_index_feature(idx_feature, name_feature)
-        # Plot distributions using histograms in different plots
-        fig, axes = plt.subplots(1, 2, figsize=figsize, constrained_layout=False)
-
-        axes[0].bar(range(len(self.distr_src[idx_feature])), self.distr_src[idx_feature], width=0.8)
-        axes[1].bar(range(len(self.distr_target[idx_feature])), self.distr_target[idx_feature], width=0.8)
-        axes[0].set_title("histogram source")
-        axes[1].set_title("histogram target")
-        return axes
-
-    def plot_distribution_drifted_features(self, figsize=(8, 4)):
-        """
-        Plots the distributions of the features that are considered to have drift. The method `calculate_drift`
-        needs to be called first.
-
-        Args:
-            figsize (tuple):
-                figsize to use if `ax` is not specified.
-
-        """
-
-        drifted_features = self.get_drifted_features(return_as_indices=True)
-        for idx in drifted_features:
-            ax = self.plot_distribution_feature(idx_feature=idx, figsize=figsize)
-            if self.features:
-                ax.set_title(self.features[idx])
-            else:
-                ax.set_title(idx)
-
-    def plot_histograms_drifted_features(self, figsize=(8, 4)):
-        """
-        Plots the histograms of the features that are considered to have drift. The method `calculate_drift`
-        needs to be called first.
-
-        Args:
-            figsize (tuple):
-                figsize to use if `ax` is not specified.
-
-        """
-
-        drifted_features = self.get_drifted_features(return_as_indices=True)
-        for idx in drifted_features:
-            axes = self.plot_histograms_feature(idx_feature=idx, figsize=figsize)
-            if self.features:
-                axes[0].set_title("histogram source " + self.features[idx])
-                axes[1].set_title("histogram target " + self.features[idx])
-            else:
-                axes[0].set_title("histogram source " + str(idx))
-                axes[1].set_title("histogram target " + str(idx))
-
-    def get_drifted_features(self, return_as_indices=False):
-        """
-        Gets the features that are considered to have drift. The method `calculate_drift` needs to be called first.
-        The parameter `return_as_indices` controls whether to return the features as indices or names.
-
-        Args:
-            return_as_indices (boolean): whether to return the features as indices or names.
-
-        Returns:
-            (list): features with drift.
-        """
-        if "p_vals" in self.drift_metrics.keys() and "threshold" in self.drift_metrics.keys():
-            drifted_features = []
-            for i in range(len(self.drift_metrics["scores"])):
-                if self.drift_metrics["p_vals"][i] < self.drift_metrics["threshold"]:
-                    drifted_features.append(i)
-        else:
-            raise ValueError(
-                "individual p-values need to be calculated to obtain features features. "
-                "Call calculate_drit() first or use a drift method that calculates p-values per feature.")
-
-        if return_as_indices:
-            return drifted_features
-        else:
-            if self.features is None:
-                raise ValueError("Feature indices are not setted")
-            else:
-                return [self.features[idx] for idx in drifted_features]
-
-    def plot_feature_drift_scores(self, top_k=None, ax=None, figsize=(8, 4)):
-        """
-        Plots a summary of the scores for each feature. The meaning of the score depends on the subclass that is used.
-
-        Args:
-            top_k (int):
-                If specified, plots only the top_k features with higher scores.
-            ax (matplotlib.axes._subplots.AxesSubplot):
-                Axes object on which the data will be plotted. If not specified it creates one.
-            figsize (tuple):
-                Size of the plotted figure
-        """
-        if self.drift_metrics is None:
-            raise ValueError("Drift must be calculated first to calculate feature drift scores")
-
-        if "scores" not in self.drift_metrics.keys():
-            raise ValueError("This drift methods doesn't have the drift scores calculated yet")
-
-        if self.features is None:
-            # if feature names are not given, we use the indices
-            features = list(range(len(self.drift_metrics["scores"])))
-        else:
-            features = self.features
-
-        # Sort features
-        sorted_pairs = sorted(zip(self.drift_metrics["scores"], features))
-        sorted_importances, sorted_features = [list(tuple) for tuple in zip(*sorted_pairs)]
-
-        # Get top k if specified
-        if top_k:
-            sorted_features = sorted_features[-top_k:]
-            sorted_importances = sorted_importances[-top_k:]
-
-        # Create plot
-        if ax is None:
-            fig, ax = plt.subplots(1, 1, figsize=figsize)
-        ax.barh([f for f in sorted_features], [imp for imp in sorted_importances])
-        ax.set_title("feature drift scores")
-
-        return ax
\ No newline at end of file
diff --git a/mercury/robust/_chi2_drift_detector.py b/mercury/robust/_chi2_drift_detector.py
deleted file mode 100644
index cb38037..0000000
--- a/mercury/robust/_chi2_drift_detector.py
+++ /dev/null
@@ -1,99 +0,0 @@
-import numpy as np
-
-from scipy.stats import chi2_contingency
-
-from ._base_batch_drift_detector import BaseBatchDriftDetector
-
-
-class Chi2Drift(BaseBatchDriftDetector):
-    """
-    The Chi2Drift class  allows us to detect drift in the source dataset distributions `distr_src` and the
-    target dataset distributions `distr_target` by performing a chi-square test of independence of variables in a
-    contingency table for each feature. It does it separately for each feature, calculating the statistic and the
-    p-value. The source and target distributions are specified when creating the object. Then, the method
-    `calculate_drift()` is used to obtain a dict of metrics.
-
-    Args:
-        distr_src (list of np.arrays):
-            The source dataset distributions. It's a list of np.arrays, where each np.array represents the counts of
-            each bin for that feature. The features and its bins must be in the same order than the `distr_target`
-        distr_target (list of np.arrays):
-            The target dataset distributions. It's a list of np.arrays, where each np.array represents the counts of
-            each bin for that feature. The features and its bins must be in the same order than the `distr_src`
-        features (list):
-            The name of the features of `X_src` and `X_target`.
-        p_val (float):
-            Threshold to be used with the p-value obtained to decide if there is drift or not (affects
-            `drift_detected` metric when calling `calculate_drift()`)
-            Lower values will be more conservative when indicating that drift exists in the dataset.
-            Default value is 0.05.
-        correction (string):
-            Since multiple tests are performed, this parameter controls whether to perform a correction of the p-value
-            or not (affects `drift_detected` metric when calling `calculate_drift()`). If None, it doesn't perform
-            a correction
-            Default value is "bonferroni", which makes the bonferroni correction taking into account the number of tests
-
-    """
-
-    def __init__(self, distr_src=None, distr_target=None, features=None, correction="bonferroni", p_val=0.05):
-        super().__init__(
-            distr_src=distr_src, distr_target=distr_target, features=features, correction=correction, p_val=p_val
-        )
-
-    def _remove_zero_cols(self, arr):
-        """ Removes cols that have value zero in all the rows for that column"""
-        idx = np.argwhere(np.all(arr[..., :] == 0, axis=0))
-        arr = np.delete(arr, idx, axis=1)
-        return arr
-
-    def _calculate_chi2(self):
-        """
-        Calculates a chi-square test
-        """
-
-        self._check_distributions()
-
-        n_features = len(self.distr_src)
-        p_val = np.zeros(n_features, dtype=np.float32)
-        dist = np.zeros_like(p_val)
-        for f in range(n_features):
-            # Construct contingency table
-            table = np.array([self.distr_src[f], self.distr_target[f]])
-            table = self._remove_zero_cols(table)
-            # Calculate chi2 contingency test
-            chi2, p, dof, ex = chi2_contingency(table)
-            dist[f] = chi2
-            p_val[f] = p
-
-        return p_val, dist
-
-    def calculate_drift(self):
-        """
-        Computes drift by performing a chi-square test of independence between the source dataset distributions
-        `distr_src` and the target dataset distributions `distr_target`. It performs the test individually for each
-        feature and obtains the p-values and the value of the statistic for each.
-        The returned dictionary contains the next metrics:
-
-        - p_vals: np.array of the p-values returned by the Chi2 test for each feature.
-        - scores: np.array of the chi2 statistics for each feature.
-        - score: average of all the scores.
-        - drift_detected: final decision if drift is detected. If any of the p-values of the features is lower than
-            the threshold, then this is set to 1. Otherwise is 0. This will depend on the specified `p_val` and
-            `correction` values.
-        - threshold: final threshold applied to decide if drift is detected. It depends on the specified
-            `p_val` and `correction` values.
-
-        Returns:
-            (dict): Dictionary with the drift metrics as specified.
-        """
-
-        p_vals_test, distances = self._calculate_chi2()
-        drift_pred, threshold = self._apply_correction(p_vals_test)
-        self.drift_metrics = {
-            "p_vals": p_vals_test,
-            "score": np.mean(distances),
-            "scores": distances,
-            "drift_detected": drift_pred,
-            "threshold": threshold
-        }
-        return self.drift_metrics
\ No newline at end of file
diff --git a/mercury/robust/_drift_simulation.py b/mercury/robust/_drift_simulation.py
deleted file mode 100644
index 05af67b..0000000
--- a/mercury/robust/_drift_simulation.py
+++ /dev/null
@@ -1,300 +0,0 @@
-
-from typing import Callable, Union, List
-
-import warnings
-import numpy as np
-import pandas as pd
-
-from mercury.dataschema import DataSchema
-
-
-class BatchDriftGenerator():
-    """ This is a simulator for applying synthetic perturbations to a given dataset,
-    so real life drift situations can be generated.
-
-    It allows generating several typical drift-like perturbations. In particular, it has the
-    following ones implemented:
-
-        1) Shift drift: Each one of the numerical features will be shifted by an amount N. With this,
-        you will be able to simulate situations where a particular feature increases of decreases.
-        2) Recodification drift: This operations simulates the situation where a particular feature
-        changes its codification (due to some change in a data ingestion pipeline). For example, imagine
-        a feature codified as [A, B, C] and, for some reason, category "C" becomes "A" and vice versa.
-        3) Missing value drift: Artificially increases the percentage of NaNs on a given feature or
-        list of features.
-        4) Hyperplane rotation drift: This method operates by modifying a set of features at once but
-        attempting to preserve the relationships they have. In other terms, it tries to change the
-        joint distribution of N continuous variables at once.
-        5) Outliers drift: This method artificially introduces outliers in the specified columns. You
-        can use one of the existing methods to inject outliers or create your own method. Check the
-        method documentation for `outliers_drift` for further documentation
-
-    Args:
-        X: Dataset features
-        names_categorical: An optional list with the names of the categorical variables. If given,
-        even as an empty list, only the column names in the list will be treated as categorical.
-        Otherwise, it will try to autodetect.
-
-    """
-    def __init__(
-            self, X: Union[pd.DataFrame, np.ndarray],
-            schema: DataSchema = None,
-    ):
-        self.X = X
-
-        if isinstance(self.X, np.ndarray):
-            self.X = pd.DataFrame(self.X, columns=[f'col{i}' for i in range(self.X.shape[-1])])
-
-        self._schema = schema
-
-    @property
-    def schema(self):
-        if self._schema is None:
-            warnings.warn(
-                """You haven't specified a schema in the constructor neither `cols`. Autoinferring an schema... """
-                """If you wish to suppress this warning provide a schema to the construct or specify the `cols` parameter.""",
-                RuntimeWarning
-            )
-            self._schema = DataSchema().generate(self.X, verbose=True)
-        return self._schema
-
-    def hyperplane_rotation_drift(self, cols: List[str] = None, force: float = 10.0) -> "BatchDriftGenerator":
-        """ Adds drift to several features at once by rotating them.
-
-        Args:
-            cols: columns which will be jointly rotated.
-            force: rotation amount in degrees (0 or 360 = no transformation)
-        Returns:
-            An updated version of the simulator.
-        """
-        force = abs(force)
-        columns = self.schema.continuous_feats if cols is None else cols
-        rotmat = self.__get_rotation_matrix(len(columns), force)
-        # Rows with NaNs wont receive the transformation
-        nan_entries = self.X.loc[:, columns].isna().any(axis=1)
-        self.X.loc[~nan_entries, columns] = self.X.loc[~nan_entries, columns].values @ rotmat
-        return self
-
-    def shift_drift(self, cols: List[str] = None, force=5.0, noise=0.0) -> "BatchDriftGenerator":
-        """ Adds drift to one or several features by adding or substracting a `force`
-        quantity. You could also add random noise to these shifts via the `noise`
-        parameter. The shifted amount will follow a gaussian distribution with mean
-        `force` and std `noise`.
-
-        Args:
-            cols: List of columns names where the operation will be performed
-            force: Amount shift each column will receive
-            noise: Amount of standard deviation the shift of each column will receive.
-
-        Returns:
-            An updated version of the simulator.
-        """
-        drifted_df = self.X
-        columns = self.schema.continuous_feats if cols is None else cols
-        for i, col in enumerate(columns):
-            f = force[i] if type(force) == list else force
-            n = noise[i] if type(noise) == list else noise
-            shifts = np.random.normal(f, n, len(drifted_df))
-            drifted_df.loc[:, col] += shifts
-
-        return self
-
-    def scale_drift(
-        self, cols: List[str] = None, mean=1, sd=0.05, iqr=None
-    ) -> "BatchDriftGenerator":
-        """
-        Adds drift to one or several features by multiplying then by some
-        random factor (normally close to 1).
-
-        Args:
-            cols: List of columns names where the operation will be performed
-            mean: The mean value of the random scale (if iqr is not given). Default is 1.
-            sd: The standard deviation of the random scale (if iqr is not given). Default is 0.05.
-            iqr: An alternative way to define the random scale is by giving the interquartile range as
-                a list of 2 elements. E.g. [1, 1.2]
-
-        Returns:
-            An updated version of the simulator.
-        """
-        if iqr is not None:
-            # q1, q3 = mean +/- .67449*sd
-            q1, q3 = iqr[0], iqr[1]
-
-            mean = (q1 + q3) / 2
-            sd = (q3 - q1) / 1.34898
-
-        drifted_df = self.X
-
-        if cols is None:
-            cols = self.schema.continuous_feats
-
-        for col in cols:
-            scale = np.random.normal(mean, sd, len(drifted_df))
-            drifted_df.loc[:, col] *= scale
-
-        return self
-
-    def recodification_drift(self, cols: List[str] = None) -> "BatchDriftGenerator":
-        """ Adds drift by randomly remapping the categories of cols.
-        For example, if you have a column with domain: ["A", "B", "C"], then, this
-        operation would swap all the "A" with "C" (and vice versa).
-
-        Note the swaps are random. The same remapping will not be repeated.
-
-        Args:
-              cols: List of columns names to be recoded
-
-        Returns:
-            An updated version of the simulator.
-        """
-        drifted_df = self.X
-        cols = self.schema.categorical_feats if cols is None else cols
-        for col in cols:
-            self.__remap_categorical(drifted_df, col)
-
-        return self
-
-    def missing_val_drift(self, cols: List[str] = None,
-                          percent: Union[float, List[float]] = .1) -> "BatchDriftGenerator":
-        """ Randomly injects NaN values in a column.
-
-        Args:
-            cols: Columns where this operation will be performed
-            percent: Percentage of values which will become Null values.
-        Returns:
-            An updated version of the simulator.
-        """
-        if type(cols) == list and type(percent) == list and len(cols) != len(percent):
-            raise ValueError("If both cols and percent are lists, they must have the same size.")
-
-        drifted_df = self.X
-        cols = drifted_df.columns if cols is None else cols
-        for i, col in enumerate(cols):
-            p = percent[i] if type(percent) == list else percent
-            mask = np.random.uniform(0, 1, len(self.X)) < p
-            drifted_df.loc[mask, col] = np.nan
-
-        return self
-
-    def outliers_drift(
-        self, cols: List[str] = None, method: Union[str, Callable] = "percentile", method_params: dict = None
-    ) -> "BatchDriftGenerator":
-        """
-        Injects outliers in `cols` using the method specified in `method`. Parameters of the method can
-        be specified using `method_params`.
-
-        Args:
-              cols: List of columns names to generate outliers.
-              method: string of the method to generate to use or custom function to generate outliers. If
-                using string, the current available method are 'percentile' and 'value'. If using 'percentile'
-                values in the dataframe are replaced by a percentile of that column. The percentile to use is
-                specified in key 'percentile' in `method_params` dictionary, and the key 'proportion_outliers'
-                specifies the proportion of outliers to set in the column. If using 'value', a custom value is
-                set in the column. The value is specified with the key 'value' in `method_params` and the
-                key `proportion_outliers` specifies the proportion of outliers to set in the column.
-                When using a custom function, the interface that should follow is
-                `fn(X: np.array, params: dict = None)`, where `X` will be an array of shape==1 to apply
-                the outlier generation and `params` is the dictionary where parameters of the method
-                are passed.
-              method_params: dictionary containing the parameters to use in `method`
-
-        Returns:
-            An updated version of the simulator.
-        """
-        drifted_df = self.X
-
-        if cols is None:
-            cols = self.schema.continuous_feats + self.schema.discrete_feats
-
-        if isinstance(method, Callable):
-            generate_outliers_fn = method
-        else:
-            generate_outliers_fn = _get_outlier_generation_fn(method)
-
-        for col in cols:
-            outliers = generate_outliers_fn(drifted_df.loc[:, col].values, method_params)
-            drifted_df.loc[:, col] = outliers
-
-        return self
-
-    def __get_rotation_matrix(self, n: int, deg: float) -> np.ndarray:
-        """ Returns a rotation matrix for a R^n space.
-
-        Args:
-            n: Dimensionality of the space
-            deg: amount of rotation to be applied. In degrees.
-
-        Returns:
-            nxn dimensional rotation matrix
-        """
-        # https://en.wikipedia.org/wiki/Orthogonal_matrix#:~:text=Canonical%20form%5Bedit%5D
-        theta = deg * np.pi / 180
-        rot = np.zeros(shape=(n, n))
-
-        for i in range(0, n - 1, 2):
-            rot[i, i] = np.cos(theta)
-            rot[i, i + 1] = -np.sin(theta)
-            rot[i + 1, i] = np.sin(theta)
-            rot[i + 1, i + 1] = np.cos(theta)
-        if n % 2 == 1:
-            rot[-1, -1] = 1
-        return rot
-
-    def __remap_categorical(self, df: pd.DataFrame, colname: str):
-        """ Randomly shuffles the categories of a particular column
-        """
-        original_ids = df[colname].dropna().unique()
-        remaped_ids = np.array(original_ids)
-        np.random.shuffle(remaped_ids)
-        remap_dic = {x: y for x, y in zip(original_ids, remaped_ids)}
-        df.loc[:, colname] = df.loc[:, colname].map(remap_dic)
-
-    @property
-    def data(self) -> pd.DataFrame:
-        return self.X
-
-
-def _replace_values_randomly(X: np.array, value: Union[float, int], percentage: float):
-    indices = np.random.choice(range(len(X)), size=int(len(X) * percentage), replace=False)
-    X[indices] = value
-    return X
-
-
-def _generate_outliers_percentile(X: np.array, params: dict = None):
-
-    if not np.issubdtype(X.dtype, np.number):
-        raise ValueError("generating outliers by perecentile only works with numeric arrays")
-
-    _params = dict(
-        percentile=99,
-        proportion_outliers=0.5
-    )
-    if isinstance(params, dict):
-        _params.update(params)
-
-    outlier_value = np.percentile(X[~np.isnan(X)], q=_params["percentile"])
-
-    X = _replace_values_randomly(X, value=outlier_value, percentage=_params["proportion_outliers"])
-    return X
-
-
-def _generate_outliers_setting_value(X, params: dict = None):
-
-    _params = dict(
-        value=X.max(),
-        proportion_outliers=0.5
-    )
-    if isinstance(params, dict):
-        _params.update(params)
-
-    X = _replace_values_randomly(X, value=_params["value"], percentage=_params["proportion_outliers"])
-    return X
-
-
-def _get_outlier_generation_fn(name_fn: str) -> Callable:
-    if name_fn.lower() == "percentile":
-        return _generate_outliers_percentile
-    elif name_fn.lower() == "value":
-        return _generate_outliers_setting_value
-    else:
-        raise ValueError("Invalid method name to generate outliers. Available method: 'percentile' and 'value'")
\ No newline at end of file
diff --git a/mercury/robust/_histogram_distance_drift_detector.py b/mercury/robust/_histogram_distance_drift_detector.py
deleted file mode 100644
index e834743..0000000
--- a/mercury/robust/_histogram_distance_drift_detector.py
+++ /dev/null
@@ -1,163 +0,0 @@
-import numpy as np
-
-from ._base_batch_drift_detector import BaseBatchDriftDetector
-from ._metrics import hellinger_distance, jeffreys_divergence, psi
-
-
-class HistogramDistanceDrift(BaseBatchDriftDetector):
-    """
-    The HistogramDistanceDrift class allows us to detect drift in the source dataset distributions `distr_src` and the
-    target dataset distributions `distr_target` by calculating distances between the distributions. For each feature,
-    the distance between its distributions in `distr_src` and `distr_target` is calculated. The distance function to
-    use is indicated by the `distance_metric` parameter. For each feature, a p-value is also calculated. This is
-    calculated by doing a permutation test, where data from `distr_src` and `distr_target` are put together and sampled
-    to calculate a new simulated distance `n_permutations` times. The p-value then is obtained by computing
-    the fraction of simulated distances equal or greater than the observed distance. The source and target distributions
-    are specified when creating the object. Then, the method `calculate_drift()` is used to obtain a dict of metrics.
-
-    Args:
-        distr_src (list of np.arrays):
-            The source dataset distributions. It's a list of np.arrays, where each np.array represents the counts of
-            each bin for that feature. The features and its bins must be in the same order than the `distr_target`
-        distr_target (list of np.arrays):
-            The target dataset distributions. It's a list of np.arrays, where each np.array represents the counts of
-            each bin for that feature. The features and its bins must be in the same order than the `distr_src`
-        features (list):
-            The name of the features of `X_src` and `X_target`.
-        distance_metric (string):
-            The distance metric to use. Available metrics are "hellinger", "jeffreys" or "psi".
-            Default value is "hellinger"
-        p_val (float):
-            Threshold to be used with the p-value obtained to decide if there is drift or not (affects
-            `drift_detected` metric when calling `calculate_drift()`)
-            Lower values will be more conservative when indicating that drift exists in the dataset.
-            Default value is 0.05.
-        correction (string):
-            Since multiple tests are performed, this parameter controls whether to perform a correction of the p-value
-            or not (affects `drift_detected` metric when calling `calculate_drift()`). If None, it doesn't perform
-            a correction
-            Default value is "bonferroni", which makes the bonferroni correction taking into account the number of tests
-        n_permutations (int):
-            The number of permutations to perform to calculate the p-value. A higher number will calculate a more
-            accurate p-value, but it will be computationally more expensive.
-            Default value is 50
-
-    """
-
-    def __init__(
-        self, distr_src=None, distr_target=None, features=None,
-        correction=None, p_val=None, n_permutations=50, distance_metric="hellinger"
-    ):
-        super().__init__(
-            distr_src=distr_src, distr_target=distr_target, features=features, correction=correction, p_val=p_val
-        )
-        self.n_permutations = n_permutations
-        self.distance_metric = distance_metric
-
-    def _generate_bin_samples_from_added_histogram(self, hist_1, hist_2):
-        """
-        Adds the bin counts of two histograms together.
-        Then, it transforms the counts to "bin_samples"
-        """
-        added_hist_1 = hist_1 + hist_2
-        bins = []
-        for i in range(len(added_hist_1)):
-            bins += int(added_hist_1[i]) * [i]
-        return np.array(bins)
-
-    def _permutation_test_from_histograms(
-            self, hist_1, hist_2, n_permutations, func_statistic, obs_statistic, sample_with_replacement=False
-    ):
-        """
-        Performs a permutation test for histograms.
-        """
-
-        self._check_distributions()
-
-        bin_samples = self._generate_bin_samples_from_added_histogram(hist_1, hist_2)
-        n_hist_1 = int(np.sum(hist_1))
-        metrics = []
-        for _ in range(n_permutations):
-            if sample_with_replacement:
-                pool = bin_samples[np.random.randint(0, len(bin_samples), len(bin_samples))]
-            else:
-                pool = bin_samples
-            # Split bins randomly with the same size of the original samples
-            idx_hist_1 = np.random.choice(len(pool), size=n_hist_1, replace=False)
-            idx_hist_2 = np.ones(len(pool), dtype=bool)
-            idx_hist_2[idx_hist_1] = False
-            new_bins_hist_1 = pool[idx_hist_1]
-            new_bins_hist_2 = pool[idx_hist_2]
-            # Count how many samples we have on each bin
-            bin_counts_1 = dict(enumerate(np.bincount(new_bins_hist_1), 0))
-            bin_counts_2 = dict(enumerate(np.bincount(new_bins_hist_2), 0))
-            # Convert from sampled bins to histogram (counts)
-            new_hist_1 = np.zeros_like(hist_1)
-            new_hist_2 = np.zeros_like(hist_2)
-            for k, v in bin_counts_1.items():
-                new_hist_1[k] = v
-            for k, v in bin_counts_2.items():
-                new_hist_2[k] = v
-            # Compute distance with this new sample
-            metrics.append(func_statistic(new_hist_1, new_hist_2))
-        # Compute fraction of simulated distances equal or greater than the observed distance
-        p_val_estimated = np.mean(np.array(metrics) >= obs_statistic)
-        return p_val_estimated
-
-    def _calculate_histogram_distance(self):
-
-        self._check_distributions()
-        if self.distance_metric.lower() == "hellinger":
-            distance_func = hellinger_distance
-        elif self.distance_metric.lower() == "jeffreys":
-            distance_func = jeffreys_divergence
-        elif self.distance_metric.lower() == "psi":
-            distance_func = psi
-        else:
-            raise ValueError("The specified distance metric doesn't exist. Specify 'hellinger', 'jeffreys' or 'psi'")
-
-        n_features = len(self.distr_src)
-        p_vals = np.zeros(n_features, dtype=np.float32)
-        distances = np.zeros_like(p_vals)
-        for i in range(n_features):
-            # Compute observed stiance between the source distribution and the target distribution
-            distances[i] = distance_func(self.distr_src[i], self.distr_target[i])
-            # Make a permutation test to obtain p-value
-            p_vals[i] = self._permutation_test_from_histograms(
-                self.distr_src[i],
-                self.distr_target[i],
-                self.n_permutations,
-                distance_func,
-                distances[i])
-
-        return p_vals, distances
-
-    def calculate_drift(self):
-        """
-        Computes drift by calculating histogram-based distances between the source dataset distributions `distr_src`
-        and the target dataset distributions `distr_target`. It calculates the distance individually for each feature
-        and obtains the p-values and distance for each.
-        The returned dictionary contains the next metrics:
-
-        - p_vals: np.array of the p-values returned by the permutation test for each feature.
-        - scores: np.array of the distances for each feature.
-        - score: average of all the distances.
-        - drift_detected: final decision if drift is detected. If any of the p-values of the features is lower than
-            the threshold, then this is set to 1. Otherwise is 0. This will depend on the specified `p_val` and
-            `correction` values.
-        - threshold: final threshold applied to decide if drift is detected. It depends on the specified
-            `p_val` and `correction` values.
-
-        Returns:
-            (dict): Dictionary with the drift metrics as specified.
-        """
-        p_vals_estimated, distances = self._calculate_histogram_distance()
-        drift_pred, threshold = self._apply_correction(p_vals_estimated)
-        self.drift_metrics = {
-            "p_vals": p_vals_estimated,
-            "score": np.mean(distances),
-            "scores": distances,
-            "drift_detected": drift_pred,
-            "threshold": threshold
-        }
-        return self.drift_metrics
\ No newline at end of file
diff --git a/mercury/robust/_metrics.py b/mercury/robust/_metrics.py
deleted file mode 100644
index 6cfa678..0000000
--- a/mercury/robust/_metrics.py
+++ /dev/null
@@ -1,112 +0,0 @@
-import numpy as np
-
-from scipy.special import rel_entr
-
-def hellinger_distance(p, q, normalize=True):
-    """
-    Computes Hellinger distance between two histograms as specified in this paper:
-    http://users.rowan.edu/~polikar/RESEARCH/PUBLICATIONS/cidue11.pdf
-    Both histograms are represented by numpy arrays with the same number of dimensions,
-    where each dimension represents the counts for that particular bin.
-    It is assumed that the bin edges are the same.
-
-    Args:
-        p (np.array): First histogram. Each dimension represents one bin and bin edges are assumed to be the same as in q.
-        q (np.array): Second histogram. Each dimension represents one bin and bin edges are assumed to be the same as in p.
-        normalize (bool): Whether to normalize the histograms. If True the proportions of each bin are calculated first
-            and then the distance is calculated with the proportions
-
-        Returns:
-            (float): float representing the Hellinger distance
-
-    """
-
-    if len(p) != len(q):
-        raise ValueError("p and q must have the same size and represent the same bins")
-
-    if normalize:
-        p = p / np.sum(p)
-        q = q / np.sum(q)
-
-    distances = (np.sqrt(p) - np.sqrt(q)) ** 2
-    return np.sqrt(np.sum(distances))
-
-
-def jeffreys_divergence(p, q, normalize=True):
-
-    """
-    Computes Jeffreys divergence between two histograms as specified in this paper:
-    https://www.cs.cmu.edu/~efros/courses/LBMV07/Papers/rubner-jcviu-00.pdf
-    Both histograms are represented by numpy arrays with the same number of dimensions,
-    where each dimension represents the counts for that particular bin.
-    It is assumed that the bin edges are the same.
-
-    Args:
-        p (np.array): First histogram. Each dimension represents one bin and bin edges are assumed to be the same as in q.
-        q (np.array): Second histogram. Each dimension represents one bin and bin edges are assumed to be the same as in p.
-        normalize (bool): Whether to normalize the histograms. If True the proportions of each bin are calculated first
-            and then the distance is calculated with the proportions
-
-        Returns:
-            (float): float representing the hellinger distance
-
-    """
-
-    if len(p) != len(q):
-        raise ValueError("p and q must have the same size and represent the same bins")
-
-    if normalize:
-        p = p / np.sum(p)
-        q = q / np.sum(q)
-
-    m = (p + q) / 2
-    distances = rel_entr(p, m) + rel_entr(q, m)
-    return np.sum(distances)
-
-
-def psi(p, q, normalize=True, eps=1e-4):
-
-    """
-    Calculates the Population Stability Index (PSI). The metric helps to measure the stability between two population
-    samples. It assumes that the two population samples have already been splitted in bins, so the histograms are the
-    input to this function.
-
-    Args:
-        p (np.array): First histogram. Each dimension represents one bin and bin edges are assumed to be the same as in q.
-        q (np.array): Second histogram. Each dimension represents one bin and bin edges are assumed to be the same as in p.
-        normalize (bool): Whether to normalize the histograms. If True the proportions of each bin are calculated first
-            and then the distance is calculated with the proportions
-
-    Returns:
-        (float): float representing the PSI
-
-    Example:
-        ```python
-        >>> a = np.array([12, 11, 14, 12, 12, 10, 12, 6, 6, 5])
-        >>> b = np.array([11, 11, 12, 13, 11, 11, 13, 5, 7, 6])
-        >>> psi = psi(a, b)
-        ```
-    """
-
-    if len(p.shape) != 1 or len(q.shape) != 1:
-        raise ValueError("p and q must be np.array with len(shape)==1")
-
-    if len(p) != len(q):
-        raise ValueError("p and q must have the same size and represent the same bins")
-
-    if normalize is None:
-        if np.any(p > 1) or np.any(q > 1):
-            normalize = True
-        else:
-            normalize = False
-
-    if normalize:
-        p = p / np.sum(p)
-        q = q / np.sum(q)
-
-    # Replace 0's to avoid inf and nans
-    p[p == 0] = eps
-    q[q == 0] = eps
-
-    psi = (p - q) * np.log(p / q)
-    return np.sum(psi)
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
index 7b4ddd9..bd99c16 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
 [project]
 name = "mercury-robust"
 license = {file = "LICENSE.txt"}
-version = "0.0.1"
+version = "0.0.2"
 authors = [
   { name="Mercury Team", email="mercury.group@bbva.com" },
 ]
@@ -23,6 +23,7 @@ dependencies = [
   'scikit-learn>=0.23.1',
   'seaborn',
   'mercury-dataschema',
+  'mercury-monitoring',
   'psutil',
   'cleanlab'
 ]
@@ -33,6 +34,7 @@ dev = [
   'pytest',
   'flake8',
   'xgboost',
+  'mercury-explainability'
 ]
 doc = [
   'mkdocs',


Test patch:
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 4790af4..55a13cc 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -2,9 +2,9 @@ name: Mercury-Robust
 
 on:
   push:
-    branches: [ "main", "develop" ]
+    branches: [ "master", "develop" ]
   pull_request:
-    branches: [ "main", "develop" ]
+    branches: [ "master", "develop" ]
 
 jobs:
   build:
diff --git a/mercury/robust/data_tests.py b/mercury/robust/data_tests.py
index 1d24f96..2a2939e 100644
--- a/mercury/robust/data_tests.py
+++ b/mercury/robust/data_tests.py
@@ -221,8 +221,8 @@ def run(self, *args, **kwargs):
         Raises:
             FailedTestError if any drift is detected
         """
-        from mercury.robust._histogram_distance_drift_detector import HistogramDistanceDrift
-        from mercury.robust._chi2_drift_detector import Chi2Drift
+        from mercury.monitoring.drift.histogram_distance_drift_detector import HistogramDistanceDrift
+        from mercury.monitoring.drift.chi2_drift_detector import Chi2Drift
 
         super().run(*args, **kwargs)
 
@@ -590,7 +590,7 @@ class NoisyLabelsTest(RobustDataTest):
             (text_col not specified) or a CountVectorizer to encode text in case of a text dataset(text_col specified)
         ignore_feats (List[str]): features that will not be used in the algorithm to detect noisy labels.
         calculate_idx_issues (bool): whether to calculate also the index of samples with label issues. If True, the idx will be
-            available in `idx_issues_` attribute. Default value is False.
+            available in `idx_issues_` attribute. Default value is True.
         label_issues_args (dict): arguments for the algorithm to detect noisy labels. You can check documentation from
             `_label_cleaning.get_label_issues` to see all available arguments.
         schema_custom_feature_map: Internally, this test generates a DataSchema object. In case you find it makes
@@ -628,7 +628,7 @@ def __init__(self,
                  text_col: str = None,
                  preprocessor: Union["TransformerMixin", "BaseEstimator"] = None,  # noqa: F821
                  ignore_feats: List[str] = None,
-                 calculate_idx_issues: bool = False,
+                 calculate_idx_issues: bool = True,
                  label_issues_args: dict = None,
                  name: str = None,
                  schema_custom_feature_map: Dict[str, FeatType] = None,
diff --git a/mercury/robust/model_tests.py b/mercury/robust/model_tests.py
index c15dac0..da7633d 100644
--- a/mercury/robust/model_tests.py
+++ b/mercury/robust/model_tests.py
@@ -1,4 +1,3 @@
-import warnings
 import numpy as np
 import pandas as pd
 import sklearn
@@ -17,7 +16,7 @@
 
 from mercury.dataschema.feature import FeatType
 from mercury.dataschema import DataSchema
-from ._drift_simulation import BatchDriftGenerator
+from mercury.monitoring.drift.drift_simulation import BatchDriftGenerator
 from ._tree_analysis import SkLearnTreeCoverageAnalyzer, SkLearnTreeEnsembleCoverageAnalyzer
 
 
@@ -907,6 +906,7 @@ class TreeCoverageTest(RobustModelTest):
         >>> rf = RandomForestClassifier().fit(train_data)
         >>> test = TreeCoverageTest(
         ...    rf,
+        ...    testing_dataset,
         ...    threshold_coverage=.8
         ...    name="My Tree Coverage Test"
         ... )
@@ -972,4 +972,211 @@ def run(self, *args, **kwargs):
             raise FailedTestError(f"Achieved a coverage of {coverage} while the minimum required was {self.threshold_coverage}")
 
     def info(self) -> dict:
-        return {'coverage': self.coverage}
\ No newline at end of file
+        return {'coverage': self.coverage}
+    
+class FeatureCheckerTest(RobustModelTest):
+    """
+    This model robustness test checks if training the models using less columns in the dataframe can achieve identical results.
+    To do so, it uses the variable importance taken from the model itself or estimated using a mercury.explainability explainer
+    (ShuffleImportanceExplainer). It does a small number of attempts at removing unimportant variables and "fails if it succeeds",
+    since success implies that a smaller, therefore more efficient, dataset should be used instead. The purpose of this test is
+    not to find that optimal dataset. That can be achieved by removing the columns identified as unimportant and iterating.
+
+    **NOTE**: This class will retrain (fit) the model several times resulting in the model being altered as a side effect. Make
+    copies of your model before using this tool. This tool is intended as a diagnostic tool.
+
+    Args:
+        model: The model being evaluated. The model is assumed to comply to a minimalistic sklearn-like interface. More precisely:
+            1. It must have a fit() method that works on the dataset and the dataset with some columns removed. It is important that each
+            time the method fit() is called the model is trained from scratch (ie does not perform incremental training).
+            2. It must have a predict() method that works on the dataset and returns a vector that is accepted by the evaluation function.
+            3. If the argument `importance` is used, it must have an attribute with that name containing a list of (value, column_name)
+            tuples which is consistent with many sklearn models.
+            Alternatively, you can provide a function that creates a model or pipeline. This is useful in models or pipelines where
+            removing columns from a dataframe raises an error because it expects the removed column. In this case, the interface of
+            the function is model_fn(dataframe, model_args), where dataframe is the input pandas dataframe with the features already
+            removed and model_fn_args is a dictionary with optional parameters that can be passed to the function. Importantly,
+            this function just needs to create the model (unfitted) instance, but not to perform the training
+        model_fn_args: if you are using a function in `model` parameter, you can use this argument to provide arguments to that function.
+        train: The pandas dataset used for training the model, possibly with some columns removed.
+        target: The name of the target variable predicted by the model which must be one columns in the train dataset.
+        test: If given, a separate dataset with identical column structure used for the evaluation parts. Otherwise, the train dataset
+            will be used instead.
+        importance: If given, the name of a property in the model is updated by a fit() call. It must contain the importance of the
+            columns as a list of (value, column_name) tuples. Otherwise, the importance of the variables will be estimated using a
+            mercury.explainer ShuffleImportanceExplainer.
+        eval: If given, an evaluation function that defines what "identical" results are. The function must accept two vectors returned
+            by model.predict() and return some positive value that is smaller than `tolerance` if "identical". Otherwise a sum of squared
+            differences will be used instead.
+        tolerance: A real value to be compared with the result of the evaluation function. Note that the purpose of the test is finding
+            unimportant variables. Therefore, the test will fail when the result (named as `loss`) is smaller than the tolerance, meaning
+            the model could work "identically" well with less variables. When the test fails, you can see the value returned by the `eval`
+            function in the RuntimeError message displayed as `loss`.
+        num_tries: The total number of column removal tries the test should do before passing. This value times `remove_num` must be
+            smaller than the number of columns (Y excluded).
+        remove_num: The number of columns removed at each try.
+        name: A name for the test. If not used, it will take the name of the class.
+
+    Example:
+        ```python
+        >>> from mercury.robust.model_tests import FeatureCheckerTest
+        >>> test = FeatureCheckerTest(
+        >>>     model=model,
+        >>>     train=df_train,
+        >>>     target="label_col",
+        >>>     test=df_test,
+        >>>     num_tries=len(df_train.columns)-1,
+        >>>     remove_num=1,
+        >>>     tolerance=len(df_test)*0.01
+        >>> )
+        >>> test.run()
+        ```
+    """
+
+    def __init__(
+        self,
+        model: Union["Estimator", Callable],  # noqa: F821
+        train: pd.DataFrame,
+        target: str,
+        test: pd.DataFrame = None,
+        model_fn_args: dict = None,
+        importance: str = None,
+        eval: Callable = None,
+        tolerance: float = 1e-3,
+        num_tries: int = 3,
+        remove_num: int = 1,
+        name: str = None
+    ):
+        super().__init__(model, name)
+        self.model_fn_args = model_fn_args
+        self.train = train
+        self.target = target
+        self.test = test if test is not None else train
+        self.importance = importance
+        self.eval = eval
+        self.remove_num = remove_num
+        self.num_tries = num_tries
+        self.tolerance = tolerance
+        self.losses = {}
+
+    def info(self):
+        return self.losses
+
+    def _get_least_important(self, N):
+
+        names = []
+
+        if self.importance is None:
+
+            try:
+                from mercury.explainability.explainers import ShuffleImportanceExplainer
+            except:
+                raise ImportError(
+                    'Install mercury-explainability to use the FeatureCheckerTest with this type of model'
+                )
+
+            def model_inference_function(data, target):
+                assert target == self.target
+
+                X = data.loc[:, data.columns != self.target]
+                Y = data.loc[:, self.target]
+                Yh = self.fitted_model.predict(X)
+
+                if self.eval is None:
+                    return sum((Y - Yh) ** 2)
+
+                return self.eval(Y, Yh)
+
+            explainer = ShuffleImportanceExplainer(model_inference_function)
+
+            explanation = explainer.explain(self.test, target=self.target)
+
+            for name, _ in sorted(explanation.get_importances(), key=lambda x: x[1]):
+                names.append(name)
+                N -= 1
+                if N == 0:
+                    break
+
+            return names
+
+        try:
+            importance = getattr(self.model, self.importance)
+
+        except AttributeError:
+            return names
+
+        finally:
+            columns = self.test.columns[self.test.columns != self.target]
+            if len(columns) != len(importance):
+                return names
+
+            for _, name in sorted(zip(importance, columns)):
+                names.append(name)
+                N -= 1
+                if N == 0:
+                    break
+
+            return names
+
+    def run(self, *args, **kwargs):
+        """
+        Runs the test.
+
+        Raises:
+            `FailedTestError` with a descriptive message if any of the attempts fail.
+        """
+
+        super().run(*args, **kwargs)
+
+        N = self.remove_num * self.num_tries
+
+        X_train = self.train.loc[:, self.train.columns != self.target]
+        Y_train = self.train.loc[:, self.target]
+
+        # Fit model with all the features
+        self._fit_model(X_train, Y_train)
+
+        X_test = self.test.loc[:, self.test.columns != self.target]
+        Y_hat = self.fitted_model.predict(X_test)
+
+        remove = self._get_least_important(N)
+
+        if len(remove) != N:
+            raise RuntimeError(
+                "Wrong arguments. Not enough columns for remove_num*num_tries."
+            )
+
+        for t in range(self.num_tries):
+            exclude = remove[0:self.remove_num]
+            remove = remove[self.remove_num:]
+
+            exclude.append(self.target)
+
+            x_cols = [c for c in self.train.columns if c not in exclude]
+
+            X_alt_train = self.train.loc[:, x_cols]
+
+            # Fit model with the removed features
+            self._fit_model(X_alt_train, Y_train)
+
+            X_alt_test = self.test.loc[:, x_cols]
+            Y_alt_hat = self.fitted_model.predict(X_alt_test)
+
+            if self.eval is None:
+                loss = sum((Y_hat - Y_alt_hat) ** 2)
+            else:
+                loss = self.eval(Y_hat, Y_alt_hat)
+            self.losses[", ".join(exclude[:-1])] = loss
+
+            if loss < self.tolerance:
+                raise FailedTestError(
+                    "Test failed. A model fitted removing columns [%s] is identical within tolerance %.3f (loss = %.3f)"
+                    % (", ".join(exclude[:-1]), self.tolerance, loss)
+                )
+
+    def _fit_model(self, X, Y):
+        if callable(self.model):
+            self.fitted_model = self.model(X, self.model_fn_args)
+            self.fitted_model.fit(X, Y)
+        else:
+            self.fitted_model = self.model.fit(X, Y)
diff --git a/tests/csv/test_twt.csv b/tests/csv/test_twt.csv
new file mode 100644
index 0000000..932ae7c
--- /dev/null
+++ b/tests/csv/test_twt.csv
@@ -0,0 +1,1102 @@
+Y	tweets	follows	followed	favorites	recency	w_and	w_data	w_in	w_of	w_developer	w_the	w_software	w_learning	w_to	w_ai	w_co	w_for	w_engineer	w_at	w_science	w_https	w_0ai	w_my	w_enthusiast
+1	2076	2753	683	85	13.978	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	438	287	67	875	65.005	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	9137	898	1391	1506	5.473	0	0	1	0	0	0	0	0	1	1	0	0	0	0	0	0	1	0	0
+0	5388	1922	262	12941	10.311	1	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	182	952	174	5935	324.483	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	430	1942	492	177	15332.955	1	1	1	0	0	0	1	0	0	0	0	1	0	0	0	0	0	0	0
+1	2523	1340	656	1423	31.151	1	0	1	0	1	0	1	0	0	1	0	0	0	0	0	0	1	0	0
+1	1151	4010	1329	3413	4.959	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	53	204	74	2066	146.023	0	0	0	1	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	132	258	232	705	3.080	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	1
+0	89	306	19	344	73.250	0	0	1	0	0	0	0	1	0	0	0	1	0	0	0	0	0	0	0
+0	10679	895	708	20444	4.646	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+1	1016	740	402	5216	69.846	1	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	522	754	250	727	27.548	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	320	1501	392	1555	276.622	1	0	0	1	1	1	1	1	0	1	0	0	1	0	0	0	0	0	0
+0	352	124	94	690	197.101	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	20	271	45	57	4343.331	1	1	0	0	0	0	0	1	0	1	0	1	0	0	0	0	0	0	0
+0	444	186	161	1060	8.695	0	0	1	0	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0
+0	11	333	33	112	228.791	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	357	491	569	995	4.251	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	447	572	110	352	7.8	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	7527	1057	1007	8897	19.968	1	0	0	0	0	0	0	0	1	1	0	0	0	0	0	0	1	0	0
+0	960	3435	427	673	1399.966	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	44	488	83	211	511.712	0	0	0	0	1	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+1	269	660	185	1228	4.456	1	0	0	0	0	1	1	0	1	0	0	0	1	0	0	0	0	0	1
+0	271	488	303	769	142.025	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0
+0	8608	3250	4173	11105	42.552	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	225812	18552	21105	135892	1.939	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+1	1239	791	400	1175	12.216	0	0	0	0	0	0	1	0	0	0	0	0	1	1	0	0	0	1	0
+0	158	408	115	202	664.236	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	1	0
+1	56	491	108	188	21.513	1	1	0	1	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	6976	6085	6375	18151	1.498	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	7214	2258	2505	2712	44.765	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	502	1395	651	174	219.609	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	589	802	368	1159	70.590	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1568	396	216	6550	8.909	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	341	1246	393	1062	248.976	1	0	0	1	0	0	0	1	0	0	0	0	0	0	0	0	0	1	0
+0	8856	979	514	7906	10.879	0	1	0	0	0	0	0	0	0	0	1	0	0	0	1	1	0	0	0
+1	155307	41780	43252	5674	1.257	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	185	199	123	457	20.664	0	0	0	0	0	0	0	0	0	1	0	0	0	1	0	0	1	0	0
+0	5318	9114	8808	8495	2247.225	0	0	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0
+0	205	816	224	345	397.596	0	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+1	563	1760	550	277	59.440	0	0	0	1	0	1	0	0	0	1	0	1	0	0	0	0	0	0	1
+0	666	785	266	1251	3.284	1	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	3115	540	559	1956	21.460	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	166	211	65	686	31.426	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0	0	0
+0	2316	519	380	4733	1.401	1	0	0	0	1	1	1	0	1	0	0	0	0	0	0	0	0	0	0
+0	19411	670	113	22667	480.892	0	0	0	0	0	1	0	0	0	1	0	1	0	0	0	0	0	0	0
+0	79	118	37	26	3.106	0	0	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0
+0	141	441	65	297	525.226	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	1640	1066	2948	747	3.267	0	0	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0
+0	345	142	88	13	394.086	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	9554	4940	1640	9478	17.49	0	0	0	0	0	0	0	0	0	1	1	0	0	0	0	0	1	0	0
+0	8356	4639	5779	4243	1.110	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	8448	7769	8428	5736	18.503	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	107	1193	75	4502	573.963	0	0	0	0	1	1	0	0	0	0	0	0	1	0	0	0	0	1	0
+0	79	75	52	58	30.534	1	0	0	0	0	0	0	0	0	1	1	0	0	0	1	1	0	0	0
+0	81	67	7	82	38.102	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	97	291	101	190	189.873	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+1	77564	1464	1578	50646	3.741	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+1	13777	2869	2001	37937	2.260	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	7684	3893	491	31571	121.852	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	8718	941	664	9905	55.776	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	256	699	189	643	24.166	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2588	8234	8516	1342	9.693	0	0	1	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	18667	764	307	572	21.434	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	811	339	270	2338	7.734	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	296	912	79	285	294.838	1	0	0	0	0	1	0	0	1	1	0	0	0	0	0	0	0	0	0
+0	238	442	287	3498	1682.410	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	6777	1416	1261	2934	1.508	1	0	0	0	0	0	1	0	0	1	0	1	0	1	0	0	0	0	0
+0	3139	2293	126	12655	120.254	0	0	0	1	1	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	9	833	172	32	31611.299	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	139	345	78	1652	3.648	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	134	459	68	233	268.623	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	657	2175	293	5142	34.236	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	2638	1687	140	10568	250.491	0	0	1	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	59	192	31	135	363.362	0	0	0	0	0	0	0	0	0	1	0	0	1	0	0	0	0	0	0
+0	1076	350	38	38	199.098	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	1089	381	378	6119	2.396	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1063	1865	541	1362	33.307	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	46	42	2	97	29.302	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	4479	2251	1887	1095	148.542	0	0	0	1	0	1	0	0	0	0	0	1	0	0	0	0	0	1	0
+0	82	287	76	160	617.120	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	9679	3324	3329	6406	31.498	1	0	0	0	0	1	0	0	0	1	1	0	0	0	0	0	0	0	1
+0	239	351	114	90	3.150	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	732	373	253	40	98.760	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	9781	3301	3304	1494	22.865	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	196	205	60	643	52.149	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3344	409	298	2627	711.627	0	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	56213	1434	3606	1264	13.190	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	1382	2121	402	8618	44.160	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	4798	1282	1030	3060	11.801	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	63	905	16	10950	121.818	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	21	376	123	23	1417.758	0	0	0	1	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	2939	835	865	5500	1.025	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	17	340	355	254	62.812	0	0	1	0	0	0	0	0	0	1	0	1	0	0	0	0	1	0	0
+0	19	93	40	14	90.170	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	632	4451	2368	542	277.341	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	10529	6641	6046	1651	5.868	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	68	1077	130	544	154.131	1	0	0	0	0	0	0	0	1	1	0	0	0	0	0	0	1	0	0
+0	6799	513	2116	24894	4.645	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3807	3670	5286	4755	19.050	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	10089	252	1205	5338	5.557	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	559	1064	236	43	113.548	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	14572	12996	12922	420	7.729	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3291	474	177	53391	1.537	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	112	680	472	316	153.693	1	0	0	1	0	1	0	0	0	0	0	0	1	0	0	0	0	1	0
+0	453	157	133	1979	102.505	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	1
+0	7385	346	255	1231	6.038	1	0	1	1	0	0	0	0	1	1	0	0	0	0	0	0	1	0	0
+0	4614	4443	4924	2993	49.672	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	5532	796	744	6754	36.363	0	0	1	0	0	0	1	1	1	0	1	0	1	0	0	1	0	0	0
+1	4669	1144	867	1720	16.041	0	1	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	44	172	28	306	256.345	0	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	3645	2693	2587	2987	64.088	1	0	0	1	0	0	1	0	0	0	0	1	0	0	0	0	0	0	0
+0	5767	6563	6789	3795	20.145	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	96	643	257	295	37.498	1	0	1	1	0	1	0	0	0	0	0	0	0	0	0	0	0	1	0
+1	272	327	158	2495	13.787	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	73	2951	370	555	1207.438	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	1	0	0
+1	93	475	85	100	25.036	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	5357	4537	4601	1725	43.657	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	17887	5000	2767	17698	196.331	0	0	0	0	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0
+0	748	170	150	1658	1.712	0	0	0	0	0	0	0	0	1	1	0	0	0	0	0	0	1	0	0
+0	252	726	452	2250	229.028	1	0	0	0	0	0	0	0	0	1	0	0	0	1	0	0	0	0	0
+0	3016	723	1298	3881	106.573	1	1	0	0	0	0	0	1	0	0	0	0	1	0	0	0	0	0	0
+0	56191	2343	2414	13135	3.388	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2579	3502	1197	15852	17.937	1	0	0	1	0	0	1	0	0	0	0	0	0	1	0	0	0	1	0
+0	113	402	399	408	94.351	0	0	0	0	0	0	0	0	0	0	0	0	0	1	1	0	0	0	0
+0	2	2519	866	3101	616.138	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	240	638	102	519	132.946	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	72691	3609	2154	1592	38.037	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	15075	3138	3238	6337	3.316	0	1	0	0	1	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	473	243	75	802	4.927	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3572	605	546	12634	163.919	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	512	284	46	218	88.618	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1911	92	46	6093	7.210	0	1	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	1	0
+0	11350	5555	7477	14332	12.850	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	5585	2795	1230	726	17.172	1	1	0	1	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	79830	4993	3091	55458	1.299	0	0	1	0	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0
+0	9373	762	592	2211	9.632	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	1
+0	2565	1082	577	49	3.110	1	0	0	1	0	0	0	1	0	0	0	1	1	0	0	0	0	0	0
+1	3572	1893	652	1373	3.474	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	366	527	223	237	37.628	0	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	4798	29	1210	12927	1.130	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	193	800	393	3869	161.362	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	1714	795	197	4557	199.181	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	13125	2701	647	14587	15.494	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1296	2356	1639	1914	16.826	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	9	102	17	167	5225.881	0	0	1	1	0	0	0	0	0	0	0	0	0	1	1	0	0	0	0
+0	44678	3156	7271	40404	6.995	1	0	0	1	1	0	0	1	1	0	0	0	0	0	0	0	0	0	0
+0	226	410	114	493	25.691	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	4	105	16	5	928.525	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	2658	3625	633	9762	5.468	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	3057	596	100	86	28.81	0	0	0	0	0	0	0	0	0	0	1	0	0	1	0	1	0	0	0
+1	2428	615	285	3065	94.642	0	1	0	0	0	0	0	1	0	0	0	0	1	0	0	0	0	0	1
+0	10903	3431	494	2651	537.141	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	33	359	140	28	2018.183	1	0	0	0	0	1	0	0	0	1	0	1	0	1	0	0	0	0	0
+0	9219	1195	3029	10590	9.015	0	0	0	1	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	37	193	61	148	51.581	1	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	524	438	206	350	16.297	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	100	189	48	1123	12.255	0	0	0	0	1	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	2141	197	102	2071	48.125	0	1	0	0	0	0	1	0	0	0	0	0	1	0	1	0	0	0	1
+0	1875	891	684	5424	26.977	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	1347	3749	473	1817	108.175	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	48	178	78	429	73.251	0	0	0	1	0	1	0	0	0	0	0	0	0	1	0	0	0	1	0
+0	954	542	319	2602	215.808	0	0	0	0	0	0	1	0	0	1	0	0	1	0	0	0	0	0	1
+0	5480	1559	2492	1495	4.427	1	1	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1107	410	567	3234	12.35	0	0	1	0	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	481	1222	168	2500	31.099	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	16	185	35	179	1312.018	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	918	2241	777	290	12.506	0	1	1	1	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	3278	361	56	7590	1.802	1	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	35	1062	153	64	1054.042	0	0	0	0	1	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	165	461	310	3055	19.291	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	104	1313	1004	94	422.952	0	1	0	0	0	1	0	0	0	0	1	1	0	0	0	0	0	0	0
+1	62750	1852	1745	42878	1.376	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	617	139	94	1623	40.192	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	48735	5271	4871	36831	1.346	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	272	1126	574	600	70.369	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1274	509	192	3369	16.044	0	1	0	0	0	0	0	0	0	1	0	1	0	0	1	0	1	0	1
+0	86	354	60	35	26.046	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1406	4569	3849	218	23.668	1	0	1	1	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	21	290	102	210	35.503	1	0	1	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0
+0	2733	571	661	2959	34.350	1	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0	0	0
+0	3283	2174	1069	2847	34.271	1	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	97	219	132	70	52.922	0	0	0	0	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0
+0	542	3258	1258	496	119.273	1	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	1863	3870	3237	1124	13.457	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	198	273	19	345	15.927	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	5753	1184	380	6819	12.457	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	273	923	98	958	4.071	1	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	1
+0	9138	4414	1734	446	106.351	1	0	0	0	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0
+0	769	580	255	2204	10.965	1	0	0	0	0	1	0	0	0	0	0	1	0	1	0	0	0	0	0
+1	39555	2426	595	45420	1.093	0	0	0	0	0	0	0	1	0	0	1	0	1	0	0	1	0	0	0
+0	641	787	326	245	51.842	1	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	143	1309	390	1305	22.685	0	0	1	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	11055	2892	2960	37799	1.797	0	0	0	0	1	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	484	1291	226	184	67.830	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	1014	974	196	541	51.900	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	446	519	109	791	55.544	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2601	121	725	724	219.238	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	23	267	53	1225	15252.534	0	0	1	0	0	0	0	0	0	1	0	1	0	1	0	0	0	0	0
+0	11716	9855	9396	328	78.058	1	0	0	1	0	0	0	0	0	1	1	0	0	0	0	1	0	0	0
+0	96	465	120	781	546.236	0	0	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0
+0	39719	1882	1504	64568	2.132	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	10	1429	75	1382	428.350	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	18077	8234	9169	546	11.386	1	0	0	0	0	0	0	1	0	0	1	0	0	0	0	1	0	0	0
+0	1686	1215	917	1184	23.375	1	0	0	0	1	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	2324	4961	6345	27689	18.968	1	1	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	129	712	296	8098	34033.629	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2107	899	2969	2459	79.785	1	1	0	0	1	0	0	1	0	0	0	0	0	1	1	0	0	0	0
+1	271	639	670	653	209.746	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	1433	2753	633	2367	11.247	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	335	489	333	363	9.263	1	0	0	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	2892	1040	242	23717	9.124	1	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	1215	1684	307	381	41.801	0	0	1	0	0	0	0	0	0	1	0	0	0	1	0	0	0	1	0
+0	35	1633	149	254	91.912	1	0	0	0	0	0	0	0	0	1	1	0	0	0	0	1	0	0	0
+0	71255	64887	60658	83	1.624	1	1	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	7	67	8	15	262.954	0	1	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	6	120	434	9	3334.398	0	0	0	0	0	0	0	0	1	1	0	1	0	0	0	0	0	0	0
+0	853	1069	155	2249	249.552	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	1	0
+0	3378	3911	4299	7024	52.080	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	1352	1084	342	3669	190.028	0	0	0	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	5	200	12	47	400.856	0	0	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	623	376	146	261	19.17	0	1	1	0	0	0	0	1	0	1	0	0	0	0	1	0	0	0	0
+0	2154	337	208	855	45.622	1	0	1	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	1208	1042	1080	680	103.302	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	40	295	11	18	235.514	1	1	0	1	0	1	0	0	0	0	0	0	0	0	1	0	0	0	0
+1	544	325	176	868	7.302	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1235	2185	546	922	61.368	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	5589	3662	1272	16	351.681	0	0	0	0	0	0	0	0	1	1	0	0	0	0	0	0	1	0	0
+0	3156	847	1267	5354	103.333	0	0	0	0	1	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	31397	1123	914	8194	22.824	0	0	0	1	0	0	0	0	1	1	0	0	0	0	0	0	1	0	0
+0	22761	3682	1650	1868	53.352	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	28	43	17	8	2046.753	1	0	0	0	0	0	0	1	0	1	1	1	0	1	0	0	0	0	0
+0	173	970	60	172	39.489	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	1
+0	3292	162	566	1425	46.387	0	0	0	0	0	1	0	0	0	1	0	1	0	0	0	0	0	0	0
+0	269	609	184	558	12.086	1	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	679	488	121	3160	16.444	0	0	1	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0
+1	855	132	159	105	64.396	0	1	0	0	0	0	0	1	0	1	0	0	0	0	1	0	0	0	0
+0	2930	692	515	400	21.703	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	241	716	192	6	11.085	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3707	523	239	2212	2.175	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0	0	1	0
+0	43047	16075	12492	33703	18.946	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	31	89	179	82	837.447	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	24768	1601	930	21972	5.450	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	51970	8866	8862	45633	3.011	0	0	0	0	0	0	0	1	0	0	0	1	0	0	0	0	0	0	0
+0	1942	975	334	2141	17.214	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	470	433	158	288	25.471	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	370	419	87	6521	311.746	1	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	2384	2177	380	10139	5.986	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	8029	3897	2878	5280	3.243	0	0	1	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+1	340	379	313	423	235.721	0	0	0	0	0	1	0	0	0	1	0	1	0	0	0	0	1	0	0
+1	347	440	238	1775	64.468	1	0	0	0	0	0	0	0	1	1	0	0	0	0	0	0	0	0	0
+0	268	2119	463	322	685.941	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	70	518	169	669	931.871	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	25	689	52	12	597.746	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	710	2222	137	1225	4.615	0	0	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	34	1100	137	363	331.890	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	15686	544	1042	20224	13.037	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	737	412	484	353	60.314	1	1	0	1	0	0	0	0	0	0	0	0	0	1	1	0	0	0	0
+0	445	171	52	556	11.029	1	1	0	1	0	1	0	0	1	0	0	0	0	1	1	0	0	0	0
+0	2401	4994	2401	4264	17.221	0	0	1	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	382	1574	216	1325	6.274	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	667	633	65	9045	25.893	1	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	1
+0	1436	757	308	361	12.979	0	1	0	0	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0
+0	364	735	842	655	2.876	0	0	0	0	0	0	1	0	0	0	0	0	1	1	0	0	0	0	0
+0	298	696	173	413	78.093	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	405	689	87	338	9.203	1	1	0	0	0	1	0	0	0	1	0	1	0	1	0	0	0	0	1
+0	7582	1186	601	20256	4.07	1	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	9098	6059	6324	7322	4.081	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	125	456	20	671	367.768	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1902	361	161	281	6.493	0	1	1	0	0	0	0	0	0	0	0	1	0	0	1	0	0	0	0
+0	735	811	669	827	119.185	1	1	0	0	0	0	0	1	0	1	0	0	0	0	1	0	0	0	1
+0	1158	1989	871	466	241.972	0	0	1	0	0	1	0	0	0	1	0	0	0	0	0	0	1	1	0
+0	195	4620	4005	527	829.180	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	5284	3935	3694	1278	50.683	1	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	2784	1563	1051	8246	3.403	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	1988	540	532	592	35.527	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	703	1466	1611	2314	125.447	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	1
+0	1552	2661	111	1589	103.646	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	272	355	103	283	38.691	1	0	1	1	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	2392	1438	1208	14296	51.229	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	3110	939	356	12415	22.666	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	1	0
+1	43648	2602	1773	98950	1.394	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	8480	1268	1002	6129	10.471	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1282	353	362	1896	23.988	1	0	1	1	0	1	0	1	0	0	0	0	0	1	0	0	0	0	0
+0	1602	802	628	4406	1.899	1	1	1	0	0	1	0	0	0	0	0	0	0	1	0	0	0	1	0
+0	118	339	29	645	128.542	1	1	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	1857	676	307	527	11.682	0	0	1	1	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0
+0	395	571	79	182	12.973	1	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	15603	3045	3932	3937	13.181	1	0	1	0	0	1	0	0	0	1	0	0	0	1	0	0	1	1	0
+0	132	220	117	3343	684.541	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	4993	265	59	3003	1169.921	1	0	0	0	0	1	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	248	1282	237	258	34.341	1	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	1990	946	168	771	31.244	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	1860	1667	598	1429	24.993	0	0	0	0	0	0	0	0	0	1	1	0	1	0	0	1	0	0	0
+0	3203	727	83	4877	33.183	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	539	1383	547	2247	11.473	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	1385	1113	1193	3465	14.818	0	0	0	0	0	0	0	1	0	1	1	0	1	1	0	0	0	0	0
+0	1007	1918	346	835	7.300	0	0	0	1	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	120	220	114	50	503.479	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	22215	10210	28042	1419	3353.438	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	20799	288	230	294	212.84	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	12324	762	1426	14487	12.467	0	0	0	0	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	318	346	119	393	141.858	0	0	0	1	0	1	1	0	0	0	0	1	1	0	0	0	0	0	0
+0	64243	47220	54335	72750	3.913	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	80	704	139	0	19.526	1	1	1	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	813	159	91	134	14.620	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	1528	479	451	6998	181.110	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	16497	103	58	651	7.914	1	0	0	0	0	1	0	0	0	0	0	0	0	0	1	0	0	1	0
+0	432	2225	229	4	2.799	1	0	0	0	0	1	1	0	0	1	0	0	0	0	0	0	0	0	0
+0	17	155	23	34	12.374	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	4118	170	240	1832	121.250	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	9342	1713	1284	0	115.565	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	867	3226	1384	373	97.178	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	6056	32960	33405	8453	70.047	1	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	1	1	0
+0	2935	1159	379	41068	3.129	1	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+1	64	395	36	203	93.052	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	232342	9690	10442	86420	6.504	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2892	723	272	867	182.360	1	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	10	40	6	256	504.058	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	19	275	60	330	715.130	0	0	1	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0	1
+0	2465	3539	1271	3256	151.306	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	44	282	802	298	895.131	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1643	994	1574	246	11.554	1	1	0	0	0	0	0	1	0	0	0	1	0	1	1	0	0	0	0
+0	14589	1953	1895	1872	2.877	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2665	794	131	618	156.230	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1013	1650	812	1614	11.638	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	2525	832	170	6079	5.563	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	96	291	42	91	175.336	0	1	0	0	1	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+1	487	565	286	1165	692.438	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	2446	2358	1709	3424	12.215	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	133	449	50	17	174.13	1	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	14	213	25	34	281.600	0	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	294169	137057	200719	5	2.583	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	491	864	514	1016	6.938	1	0	0	0	0	0	0	0	0	1	0	0	0	1	0	0	0	0	0
+0	651	1327	392	3571	138.718	1	1	0	1	0	0	0	0	0	0	1	0	0	0	1	0	0	1	0
+0	124	542	38	2382	4.645	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	125	393	236	55	8.933	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	20	140	101	3	930.285	0	0	0	1	1	0	1	1	0	0	1	1	1	0	0	1	0	0	0
+0	127	2620	428	24	238.617	0	0	0	0	0	0	0	0	0	1	0	0	1	0	0	0	1	0	0
+0	825	374	304	384	49.990	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+1	16492	785	1282	6031	193233.344	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	189	234	65	627	325.073	0	0	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	1
+1	4702	564	378	5512	7.444	1	0	1	0	0	0	1	0	0	1	0	0	0	1	1	0	0	0	0
+0	41516	2254	2268	779	11461.443	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	26894	4504	1789	1189	2.034	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	8666	4946	5161	5545	3.188	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	12	704	30	46	1798.243	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	1
+1	599	847	447	2280	8.141	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	4639	741	800	1339	57.496	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	1176	1042	943	1219	11.81	1	0	0	1	0	1	0	0	1	0	0	1	0	0	0	0	0	0	0
+0	23140	4275	6861	1209	9.055	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+1	539	285	111	1269	12.632	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	9229	1325	605	12506	1.16	0	0	0	1	0	0	1	0	0	0	0	0	1	0	0	0	0	1	0
+0	11804	3256	1748	13025	117.615	0	0	0	1	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	649	1955	287	717	12.153	0	0	0	0	0	0	0	0	0	0	0	1	0	1	0	0	0	0	0
+0	4482	4735	5784	1121	2.764	0	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0
+0	1706	2501	1830	6299	67.631	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	151	556	248	465	13.956	0	0	1	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0
+0	6201	4693	757	341	333.810	0	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	235	216	550	725	68.719	1	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+1	1545	2156	793	157	32.093	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	629	1189	580	125	2.735	0	1	0	0	0	0	0	0	0	1	0	0	0	1	0	0	1	1	0
+0	32464	18064	29608	19150	13.536	1	1	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	2388	1571	737	4288	1.712	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	775	102	56	1481	21.747	1	0	0	0	0	0	0	0	1	1	0	0	0	0	0	0	0	0	0
+0	40	145	125	53	83.516	0	0	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	54	117	20	28	4.871	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1320	907	891	1497	444.610	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	1	0
+1	493	1709	691	28	10.459	1	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	652	834	179	467	12.378	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+1	24	401	30	170	380.951	1	0	0	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0
+0	7785	770	680	6643	5.593	1	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	20	341	40	287	1146.711	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	1252	1053	464	3107	346.595	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	530	218	77	26	429.203	0	1	0	0	1	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+1	4837	1012	300	198	113.848	0	1	0	0	0	0	0	1	0	1	0	0	0	0	0	0	1	0	0
+0	147	1295	874	487	338.560	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+1	1151	446	240	2626	75.640	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	21	873	14	49	92.386	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	1514	3962	1896	2319	6.417	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	190	296	29	267	905.189	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	496	443	336	65	1.782	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+1	1900	1646	1344	10520	9.373	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	87	182	108	315	13.490	1	0	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	249	293	87	390	204.538	1	0	1	1	1	0	1	1	1	0	0	0	0	0	0	0	0	0	1
+0	191	285	25	471	10.318	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	12363	4623	9825	1677	11.831	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	596	916	284	13831	2.253	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	115	1465	120	27	36.959	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	15	243	34	581	315.466	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+1	3418	1984	594	552	220.625	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	960	858	86	2851	472.106	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	14796	3354	4364	25719	66.247	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	1
+0	181203	9955	10360	185082	1.077	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	293	2399	2328	449	18.633	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	98	174	52	93	239.13	0	0	0	0	0	0	0	0	0	0	0	0	1	0	1	0	0	0	0
+0	223	535	144	61	60.671	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	6268	304	438	38	1529.818	0	0	0	0	0	1	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	136	151	87	222	239.518	1	0	0	1	0	1	0	0	0	0	0	0	0	1	0	0	0	1	0
+0	32	540	584	114	217.213	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	6649	657	700	16363	4.890	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	1211	764	390	3657	102.732	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	8328	4993	1355	3280	73.091	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+1	41801	3849	3883	1184	1.406	0	0	0	0	0	0	0	0	0	1	1	0	0	0	0	1	0	0	0
+1	441	1028	499	10206	65.531	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	12721	1848	686	18087	1.201	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	167	240	79	840	625.383	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+1	110710	12303	13677	2137	1.134	1	0	0	0	0	0	1	0	0	0	0	1	0	1	0	0	0	0	0
+0	618	183	72	1723	9.969	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	1437	4570	2506	9072	9.936	1	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	3822	3624	4337	1440	60.997	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	37738	598	661	80498	6.16	0	0	0	0	0	1	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	1005	2566	1354	2392	13.911	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	226	286	148	320	917.916	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	1
+0	4682	829	648	4945	201.289	0	0	0	0	0	0	0	0	0	1	1	0	0	0	0	1	0	0	0
+0	13321	2229	48443	2943	18.829	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0	0	0	0	0
+0	1216	400	395	1123	85.302	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	3594	1737	398	77852	27.979	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	1	0
+0	344	2049	185	4559	513.090	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	265	664	521	300	13.870	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	62	984	431	1329	215.737	0	1	0	0	1	0	1	0	0	0	0	0	1	0	1	0	0	0	0
+1	305	489	44	568	14.597	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	527	186	86	1652	4.208	0	1	0	0	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0
+0	1489	801	435	1146	138.24	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	849	289	40	1567	655.437	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2328	933	1107	4347	69.797	0	0	0	1	1	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	231	508	393	245	319.779	0	0	0	0	1	0	0	1	1	0	0	0	0	0	0	0	0	0	0
+0	1	925	61	29	37444.726	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	490	434	179	923	1.230	1	1	1	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0
+0	1073	1630	724	2099	69.019	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	1182	597	146	365	197.483	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	987	195	245	263	10.565	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	204	214	31	192	687.696	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	16523	1453	1442	52073	2.538	1	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	1
+0	1222	995	1395	1417	615.260	1	1	0	1	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	64	147	8	47	67.706	1	1	1	1	0	1	0	0	0	1	0	0	1	0	1	0	0	0	0
+0	14060	3083	3023	16107	26.579	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	396	164	78	1499	85.631	1	0	0	1	0	1	0	0	0	1	1	0	0	1	0	1	0	0	0
+0	149	154	94	1571	41.436	1	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	319	937	331	785	96.775	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2081	517	234	4445	24.662	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+1	1350	318	112	4934	7.704	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3104	2325	1201	777	212.263	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	3254	2478	2530	7582	161.761	0	0	1	1	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	1054	1657	226	305	2.938	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	1424	105	108	3629	15.657	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3524	1264	298	2672	3.492	0	0	0	0	0	0	0	0	1	0	0	0	1	0	0	0	0	0	0
+0	99030	22072	34330	87782	2.099	1	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	5952	5248	5879	519	5.26	1	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	1864	548	368	18282	1913.23	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	263	473	94	850	10.536	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	280	362	74	1965	11.285	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	34211	11213	13352	4748	9.113	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	48	472	78	37	106.486	0	0	0	1	0	0	1	0	0	0	1	0	0	0	0	0	0	0	0
+0	5795	516	105	1547	3.050	1	0	0	0	0	0	0	0	0	1	0	0	0	1	0	0	0	0	0
+0	33	4866	954	9	603.107	1	0	0	0	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0
+0	193	3498	361	9735	53.711	0	0	0	0	1	0	0	0	0	1	0	0	0	0	0	0	0	0	1
+0	677	1626	232	1956	11.594	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	695	1624	438	1616	74.914	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	575	1538	130	1404	19.649	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	95	252	107	580	126.436	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1351	770	774	1730	367.389	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	5898	4096	1697	30099	2.205	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	5199	977	650	1098	280.084	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	1
+1	34	279	46	78	187.980	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	3067	4761	4831	4614	1.568	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	3014	648	645	18103	481.252	0	0	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	1509	354	124	3811	4.193	0	0	0	0	0	0	0	0	0	0	0	0	1	0	1	0	0	0	0
+1	435	2575	444	1679	133.244	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	237	1017	552	161	272.375	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	269	455	236	452	15.985	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	46826	11769	11154	128042	192513.342	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2928	1046	452	12315	41.268	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	251	447	65	2022	2.561	0	0	0	0	1	0	0	1	1	0	0	0	0	0	0	0	0	0	0
+0	5835	10601	10564	3207	6.524	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	41	1203	382	0	27.286	0	0	0	1	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0
+0	493	179	147	2624	15.986	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	148	161	97	609	12.041	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	36	121	60	242	35.971	0	0	0	0	0	0	0	0	1	1	0	0	1	1	0	0	1	0	0
+0	32766	13383	14799	124	11.736	0	0	1	0	1	1	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	730	1035	68	6948	16.440	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1
+1	221	875	278	277	28.03	1	0	0	0	0	1	0	0	1	1	0	0	0	0	0	0	1	0	0
+0	1508	116	177	199	97.89	1	1	1	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+1	1266	739	228	506	19.609	1	0	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0
+0	14	362	60	44	1239.124	1	0	1	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0
+1	499	756	130	1269	148.595	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	64990	8198	8741	33441	12.002	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	842	2458	2665	601	97.677	0	0	0	0	0	0	0	0	0	1	0	1	0	0	0	0	1	1	0
+0	576	301	43	626	112.422	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	1342	724	257	4175	144.332	0	0	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	405	894	788	1429	143.833	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+1	1112	869	263	42643	16.159	0	0	0	0	0	0	0	1	0	0	0	1	0	0	0	0	0	0	0
+0	665	408	311	3962	2.163	0	0	0	0	1	1	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	1565	1203	1103	1078	10.892	1	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	35301	944	18284	482	27.774	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	1238	970	1664	334	797.609	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	655	1978	585	992	17.043	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1060	454	626	1121	44.688	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	6607	5006	2032	56705	93.148	1	0	0	0	0	1	0	0	1	0	1	0	0	0	0	1	0	0	0
+0	459	85	81	749	185.646	1	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0
+0	956	307	180	2108	366.715	1	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	1
+0	2027	3278	589	8189	401.096	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	1598	666	608	1	923.16	0	1	1	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	2283	570	75	987	36.568	0	0	1	0	0	0	0	0	1	1	0	0	0	0	0	0	0	1	1
+0	18568	1560	1114	35057	16.469	1	0	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	1	0
+0	1656	2842	731	4532	25.441	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	1562	1628	362	859	15.538	1	1	1	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0
+1	215	712	248	445	18.368	0	1	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	71	311	213	408	12.109	0	0	0	1	1	0	0	0	0	0	1	0	0	0	0	0	0	0	0
+0	25	60	11	50	87.166	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	10869	391	89	2219	91.142	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	187	282	82	788	12.581	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	28	294	39	480	1318.614	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	360	347	73	2591	70.189	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	647	698	287	1038	45.088	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0
+0	121	800	171	147	118.151	0	0	0	1	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	16695	2975	2187	17096	4.470	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	3388	3525	1427	1998	12.259	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	1914	2866	601	152	28.756	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	11119	2351	895	9427	34.508	0	0	0	0	1	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	329	326	126	340	221.303	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	2010	410	506	645	61.276	0	0	0	0	0	0	1	0	0	1	0	1	0	0	0	0	0	0	0
+0	40321	5345	5466	7819	9.253	0	0	0	0	1	0	1	0	0	0	0	0	0	1	0	0	0	0	0
+0	7	649	82	299	259.94	1	0	1	0	0	0	0	0	1	1	0	0	0	0	0	0	0	0	0
+0	25206	837	917	144	16.938	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3486	276	243	2560	9.361	0	0	1	1	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	5259	3351	925	10190	10.633	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3	742	48	74	1304.025	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	113	1066	1449	151	25.150	0	1	1	0	0	0	0	0	0	1	0	0	1	0	0	0	1	0	0
+0	38471	5094	5026	41690	1.087	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	1	0	1	1
+0	9268	552	462	1011	10.035	0	0	0	1	1	1	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	33141	16201	16707	20717	22.349	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1396	1107	686	16924	2.369	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	163	532	214	815	31.694	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	35	143	13	1114	623.189	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	164	425	307	35	64.963	0	0	0	1	0	1	0	1	0	0	1	0	1	1	0	1	0	0	0
+0	329	644	55	170	167.217	0	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0
+0	36	141	127	1	330.542	1	1	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	4751	1060	393	1602	28.505	1	0	1	0	0	0	0	1	0	0	1	0	0	0	0	1	0	0	0
+0	148641	2946	3765	7002	10.314	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	57	402	6	59	1110.897	0	0	0	1	0	0	0	0	0	0	0	1	0	0	1	0	0	0	0
+0	71	1809	1600	507	88.909	0	0	0	0	1	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+1	372	863	51	976	22.131	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1079	1235	405	2337	62.253	1	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	542	383	32	270	3.420	1	0	0	0	0	0	0	1	1	0	1	0	0	1	0	1	0	0	0
+1	6754	2021	1965	3215	126.063	1	0	0	1	0	0	0	0	0	0	1	0	0	1	0	0	0	0	0
+0	489	1049	124	3697	7.385	1	1	0	0	1	0	0	0	0	0	0	0	0	1	1	0	0	1	0
+0	2585	955	1350	5317	372.965	0	0	0	1	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	451	3712	5880	2	108.318	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	15497	4859	2143	17407	15.676	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	411	1058	710	436	715.720	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	1867	1030	1571	1985	24.433	1	1	0	1	1	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	8471	1793	2036	5290	54.900	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	1	0
+0	309	641	256	872	22.556	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	253	407	133	412	48570.068	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	1297	3626	867	543	83.717	1	1	1	0	0	1	0	1	1	0	0	0	0	0	0	0	0	0	0
+0	46	904	210	1596	55.340	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	106	697	98	995	216.441	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2317	2414	804	4355	28.476	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	111	99	16	308	3.498	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	196	1042	205	1479	41.105	0	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0
+0	494	438	205	1006	131.520	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	459	411	293	2186	65.084	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1009	524	837	2624	43.323	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+1	192	812	109	14519	264.491	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3714	2999	2077	3833	169.861	0	0	0	0	1	0	1	0	1	0	0	0	0	0	0	0	0	0	0
+0	349	472	82	89	104.432	0	0	0	0	0	0	1	0	0	1	0	0	0	0	0	0	1	0	0
+0	285	3905	1825	55	173.043	0	1	0	0	0	0	0	0	1	0	1	1	0	0	0	1	0	0	0
+0	4152	717	643	1917	21.732	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	11688	7289	3066	4744	1.480	0	1	0	1	0	0	0	0	0	1	0	0	0	0	0	0	1	1	0
+0	19942	4739	2633	17121	13.338	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	258	570	87	931	41.5	1	0	0	0	0	1	1	0	0	0	0	1	0	0	0	0	0	0	0
+1	1480	1056	417	5504	39.328	1	1	1	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	482	671	336	1450	3.584	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	934	1962	598	1816	23.863	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	760	546	242	504	174.425	1	0	0	1	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	2317	509	330	1663	10.926	0	1	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	22	120	59	82	792.828	0	0	1	0	0	0	0	0	0	0	0	0	0	1	1	0	0	0	0
+1	5207	343	74	9663	6.238	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	1
+0	72	889	49	1617	44.573	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	877	218	119	136	6.212	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	164	320	65	195	54.744	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	23299	3690	2140	28969	33.634	0	0	0	0	0	0	0	0	0	1	1	0	0	0	0	1	0	0	0
+1	2068	1440	618	2016	3.490	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	6596	1089	583	2279	2241.643	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	3200	770	57	1145	280.550	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	4433	1560	5422	4702	22.820	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	284	744	167	414	34.132	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	641	2038	461	1410	94.838	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	366	429	123	2185	180.711	0	0	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	9884	1078	2022	7645	15.570	0	0	0	0	1	0	1	0	0	0	1	0	0	0	0	0	0	0	0
+0	41	2382	158	138	908.902	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	7493	1488	714	5688	1.216	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+1	2353	1512	534	419	556.942	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	292	152	54	321	14.755	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	459	476	103	116	56.820	0	0	0	0	0	0	1	0	0	0	1	0	0	0	0	0	0	0	0
+0	18382	895	335	27775	14.855	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	6944	520	690	524	6.625	1	0	0	0	1	1	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	1180	14530	17962	1826	3.262	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	4038	2181	2458	1873	15.712	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	4581	936	135	15587	2.731	0	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	1646	907	151	8326	1.426	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+1	17420	3893	3312	3106	113.567	0	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	88	1647	1537	270	25.110	0	0	0	0	0	0	0	0	0	0	1	0	1	0	0	1	0	0	0
+1	37	1065	213	144	338.780	0	1	0	1	0	1	0	0	0	0	0	0	0	1	1	0	0	0	0
+0	74	1683	257	174	112.388	1	0	1	0	0	1	0	0	0	1	0	1	0	0	0	0	0	0	0
+0	615	1406	317	17209	15.881	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	285	1779	215	963	1.243	0	0	0	0	0	0	1	0	0	0	1	0	1	0	0	1	0	0	0
+0	446	357	50	547	78.436	1	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0	0
+1	1949	3191	3231	6743	7.807	1	0	1	1	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	3003	3062	479	213	61.037	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	8318	3711	1154	5706	1.831	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	4498	1068	275	17988	5.208	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	1
+0	186	1472	829	18	26.072	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	958	198	106	2597	37.731	0	0	0	0	0	0	0	0	0	0	0	0	0	1	1	0	0	0	0
+0	22	477	59	37	260.150	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	1
+0	484	359	131	1266	88.034	0	0	1	0	0	0	0	0	1	0	1	0	0	0	0	1	0	0	0
+0	5959	1142	3703	4939	10.940	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	346	222	90	679	34.849	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	1077	232	81	4572	55.595	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	10027	1968	2136	693	4.456	0	1	1	0	0	0	0	1	0	1	0	0	0	0	1	0	1	0	0
+0	11	156	103	522	17.613	0	0	1	0	1	0	0	0	0	0	0	1	1	0	0	0	0	0	0
+0	167	819	81	729	1017.410	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	843	1063	518	4474	19.401	1	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	2094	1420	290	3218	52.086	0	1	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0
+0	756	1065	155	1341	15.663	0	1	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+1	3738	636	95	12033	3.216	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	1603	1321	831	2239	32.455	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	861	848	764	5319	3.958	1	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	429	317	61	1906	48.215	0	0	0	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	1
+0	397	358	90	7523	257.845	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	5100	689	126	18255	55.771	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1548	556	410	2940	1.778	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	28896	4518	2085	24592	3.545	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	28416	7186	6680	4747	27.022	1	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	314	76	24	722	145.481	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	118	421	152	126	69.329	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	39	832	285	65	736.210	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	40	391	17	4	121.821	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	4591	2562	909	26939	9.797	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	701	1543	504	3809	15.188	1	0	0	0	0	0	0	1	1	0	0	1	0	0	0	0	0	0	0
+0	426	391	386	184	13.769	1	1	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0
+1	1328	1790	104	3088	154.899	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	991	1067	122	1579	4.000	0	0	0	0	1	0	0	0	0	0	0	0	1	1	0	0	0	0	0
+0	75	815	114	928	94.123	0	0	0	0	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+1	48507	4483	2048	20201	1.838	1	1	0	0	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0
+0	124	896	444	438	1253.290	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	53	454	74	465	442.488	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	14669	281	390	5738	16.506	0	0	0	0	0	0	0	0	0	0	0	1	1	0	0	0	0	0	0
+0	696	3068	582	26424	20.390	0	0	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	962	3076	465	462	5.932	1	0	0	1	0	0	0	0	0	1	1	0	0	0	0	0	0	0	0
+1	406	397	183	120	63.971	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	10999	3260	1492	14410	109.875	1	0	1	0	1	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	2629	384	1882	4092	38.403	0	0	0	0	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	26151	2824	7324	4493	1.247	0	0	0	1	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+1	326	4999	906	455	43.886	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3458	1893	1527	327	243.682	0	0	0	0	0	1	0	0	0	1	0	1	0	0	0	0	0	0	0
+1	1018	825	862	29622	68.046	1	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	87609	2928	705	150142	1.01	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1054	1114	298	4212	12.216	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+1	475	185	149	1885	14.477	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	16418	4208	5278	63506	10.625	0	0	0	1	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	301	264	63	197	8.042	1	1	0	1	0	1	0	0	0	1	0	0	1	0	1	0	0	0	0
+0	959	595	526	756	74.235	1	0	0	1	1	0	1	0	0	0	0	0	0	0	0	0	0	0	1
+0	992	388	288	2112	61.401	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	4915	2022	1539	2389	58.633	0	0	0	0	1	0	1	0	0	1	0	0	0	1	0	0	0	0	0
+0	116	4802	1291	2070	15.848	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	188	680	73	5425	184.949	1	0	0	0	1	0	0	1	0	0	0	1	0	0	0	0	0	0	0
+0	99	371	130	1641	4748.066	0	0	0	1	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	838	251	159	915	55.507	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	433	470	536	566	39.306	0	0	0	0	0	1	0	0	0	1	0	0	0	0	0	0	0	0	0
+1	8834	2910	3206	11766	2.982	1	1	0	0	0	0	0	0	1	1	0	0	0	0	0	0	1	0	0
+1	7737	1447	1572	22188	2.604	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	33	578	61	292	89.882	0	0	0	1	0	1	1	0	0	0	0	1	1	1	0	0	0	0	0
+0	635	1838	698	246	473.294	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	3970	724	205	58098	5.993	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	20	658	69	197	288.922	0	0	0	0	0	1	0	1	0	1	0	1	1	0	0	0	0	0	0
+0	1633	573	237	1162	4.777	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	1
+0	2414	2760	3119	868	17.473	1	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	210	273	185	709	50.686	0	0	0	0	0	0	0	1	0	0	1	0	0	0	0	1	0	0	0
+0	16	326	18	353	34.653	0	0	0	0	0	0	1	0	1	0	0	0	1	1	0	0	0	0	0
+0	16	381	73	342	12295.998	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	533	798	177	2012	13.101	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	157	144	34	1174	17.706	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	414	466	213	864	26.801	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	1
+1	136	295	64	315	19.410	0	0	0	0	1	0	0	1	0	0	0	0	1	0	0	0	0	0	0
+0	791	2188	2469	2042	23.605	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+1	168	141	37	270	4.685	0	0	0	0	0	0	1	0	0	0	0	0	1	0	1	0	0	0	0
+0	10482	1448	2033	1833	4.142	0	0	0	0	0	0	0	0	0	1	0	0	0	1	0	0	1	0	0
+0	3321	434	52	3023	11.282	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	8	1986	3922	10	239.183	1	0	0	0	0	1	0	0	1	1	0	1	0	0	0	0	1	0	0
+0	180	4991	999	1180	506.878	1	0	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0
+0	153	1763	207	372	13.34	0	0	0	1	0	0	0	0	0	0	1	1	0	1	0	1	0	0	0
+0	28	87	14	45	112.988	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	574	826	496	2798	41.315	0	0	0	1	0	1	0	0	0	0	1	0	0	1	0	1	0	0	0
+0	2896	745	371	1784	2.135	0	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	2671	738	727	1349	47.424	1	0	1	0	0	0	1	0	0	0	0	0	1	0	0	0	0	1	0
+0	380	1726	91	8054	33.216	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+1	1314	691	202	2776	32.761	0	0	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+1	967	1919	292	1297	5.805	0	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	1	0
+1	45	314	140	38	4.432	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	1364	1323	628	1182	4.307	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	177	340	119	1019	9.715	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	214	267	32	215	112.071	0	0	1	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0
+1	446	360	39	1233	433.948	0	0	0	0	1	1	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	8581	4446	3902	7049	1.014	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	2803	3607	912	1676	14.099	1	0	0	1	0	0	1	1	0	0	0	1	0	0	0	0	0	0	0
+1	2251	1659	307	5643	4.636	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	852	4387	2526	460	12.531	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+1	42	246	49	271	237.931	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+1	28637	10014	20279	2238	3.584	1	0	1	1	0	0	0	1	1	1	0	0	0	0	1	0	0	1	0
+0	541	909	478	199	351.581	0	0	0	1	1	1	1	0	0	0	0	1	0	0	0	0	0	0	0
+0	1015	844	262	507	256.883	1	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	3542	3001	1615	3867	82.174	0	0	0	1	0	0	1	0	0	0	0	0	1	0	0	0	0	1	0
+0	2592	2540	3363	6757	2161.471	1	0	0	0	0	0	0	0	0	1	1	0	0	0	0	0	1	0	0
+1	50	1040	150	327	251.513	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	9242	870	4220	656	36.033	1	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	5034	4981	1655	306	17.118	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	5976	631	160	7458	5.963	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	1215	1908	183	5627	78.688	0	0	0	0	0	0	0	0	0	0	0	1	0	0	1	0	0	0	0
+1	66	429	369	392	237.706	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	16	1558	90	1362	48.998	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1156	358	144	937	58.321	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	1	0
+1	1071	1156	1065	93	141.274	1	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	763	4838	895	539	19.836	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	3202	6257	6523	6426	3.890	0	1	0	0	0	0	0	0	0	1	1	0	0	0	0	1	1	0	0
+0	6889	3091	3259	15627	3.476	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	437	928	1013	208	366.105	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	1512	1653	532	2298	7.270	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	747	613	195	4759	100.683	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	9983	2221	2640	2282	19.365	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	6316	2181	299	3918	6.199	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	4777	670	580	2300	44.496	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	1216	943	1289	771	244.661	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	7704	2596	4262	13806	63.517	0	0	1	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	2448	222	1091	4571	12.370	1	0	1	1	0	0	0	0	1	1	0	0	0	0	0	0	1	0	0
+0	14	466	94	87	627.699	1	1	0	0	0	0	0	1	1	0	0	0	0	0	0	0	0	0	1
+0	1557	813	811	679	23.033	1	1	1	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0	0
+1	310	837	140	767	4.311	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	8559	1821	3443	70793	40.415	1	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	926	560	106	1467	17.222	1	0	0	0	1	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	335	136	103	316	158.272	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	988	2255	496	5629	17.578	0	0	0	0	0	1	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	26	111	13	25	4.834	0	0	0	0	0	1	0	0	0	1	0	1	0	0	0	0	1	0	0
+0	1043	997	272	1918	2.542	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0
+0	332	517	108	475	1.462	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	906	892	30	112	13.859	0	0	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	470	1704	887	330	8.487	0	0	0	0	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	11161	8232	9367	15382	36.943	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	33	80	7	18	351.504	1	0	0	0	1	0	0	0	0	0	1	0	0	0	0	1	0	1	0
+0	304	1631	376	269	215.838	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	207	1874	482	140	33.906	0	0	1	1	0	1	1	0	0	0	0	1	1	0	0	0	0	0	0
+0	11492	348	595	19440	6.896	1	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	6052	1124	938	8466	179481.854	0	0	0	0	1	0	1	0	0	0	1	0	0	0	0	1	0	0	0
+0	10082	3352	2486	3119	1987.583	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	272	835	189	500	87.786	0	1	0	1	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+1	22089	4019	2287	23351	6.565	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	577	687	345	701	23.156	0	0	0	0	1	0	0	0	0	0	0	0	0	1	1	0	0	0	0
+0	138	316	31	5983	375.233	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	564	3149	809	1987	606.473	1	1	0	1	0	1	0	0	0	1	0	0	0	1	1	0	0	0	0
+0	753	913	383	3289	91.604	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3425	350	514	5285	1.743	1	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0
+1	28	665	116	1	33.050	1	1	0	0	0	0	0	0	0	0	0	1	0	0	1	0	0	0	0
+1	188	181	332	1668	32.737	0	0	1	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	1321	2899	1758	1855	26.710	0	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	44	444	15	41	13.807	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	463	212	81	768	4.944	1	0	0	0	0	1	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	119	269	67	774	285.626	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2042	564	255	1230	16.205	0	0	0	0	1	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	206	2220	676	491	165.271	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	18152	662	1045	8324	20.527	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+1	1929	3152	1921	22	4.927	1	0	0	0	0	0	0	0	1	1	0	1	0	0	0	0	1	1	0
+0	426	4803	6404	343	48.290	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	5	969	267	392	9457.642	1	0	0	0	1	0	0	0	1	0	1	0	0	1	0	1	0	0	0
+0	2534	1716	594	507	38.886	1	0	1	1	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+1	236	1587	190	128	16.217	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	1776	399	126	49997	93.198	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	23194	2647	1125	20398	6.746	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	575	237	1299	437	82.131	1	0	0	0	0	0	1	0	1	0	0	0	1	0	0	0	0	0	0
+0	871	494	186	1543	50.072	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	12891	6805	8210	33232	1.461	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	13082	84476	77327	1185	58.896	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	12466	695	294	28949	35.250	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	5412	1396	3014	996	14.255	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	5840	6640	6041	14046	43.183	0	0	0	0	0	0	0	1	0	0	1	1	0	0	0	1	0	0	0
+0	1069	1722	619	552	722.084	0	0	0	1	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	126	304	18	101	66.295	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3182	617	1746	28906	324.924	0	1	0	0	0	0	0	1	0	0	1	0	0	1	0	0	0	0	0
+1	3049	4877	1874	4375	16.477	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	7453	435	258	24545	32.44	0	1	0	0	0	0	0	0	0	1	0	0	1	0	0	0	0	0	0
+0	266	320	76	291	2.061	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	968	1846	233	811	28.562	0	0	0	1	0	1	1	0	1	0	0	0	1	0	0	0	0	0	0
+1	4076	1296	331	8203	48.718	0	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	192	462	135	842	79.218	1	0	1	1	0	0	0	0	0	0	1	0	1	0	0	1	0	0	0
+0	756	884	630	3792	234.615	1	0	0	1	1	1	0	0	0	0	1	0	0	0	0	0	0	1	0
+0	6787	2680	858	30	16.765	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	232	111	95	689	23.196	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+1	286	246	249	529	23.230	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	1
+0	366	1217	377	7792	45.967	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+1	70	563	46	187	12.489	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+1	1269	1992	2056	845	56.596	0	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	14244	3673	3011	148853	5.484	0	0	1	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	1178	469	269	1142	44.235	0	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1703	865	311	2155	198.192	1	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	6327	3933	4530	7135	43.144	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	30312	754	632	6007	24.737	1	0	1	1	1	1	0	0	0	0	1	0	0	1	0	1	0	0	0
+0	1459	1219	138	7271	5.002	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	1851	4767	1775	1493	100.842	0	0	1	1	0	1	1	0	0	0	0	1	0	0	0	0	0	0	0
+0	169	698	41	1637	5258.622	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	3028	422	20	9181	1.168	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	1637	2406	2856	395	13.381	1	1	1	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	63	115	50	177	445.760	0	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	12145	660	1028	30311	12.325	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1546	3934	507	2486	37.313	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	2	103	22	142	244.606	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	18	87	10	37	2203.359	0	0	0	1	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	2915	1339	182	324	932.903	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	929	156	96	7656	1.477	0	1	0	0	1	0	0	1	0	0	0	0	0	0	1	0	0	0	0
+0	104	116	164	25366	89.024	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	553	601	193	263	61.754	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	679	1302	260	136	4457.786	1	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	199	893	305	340	2.974	0	0	0	1	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0
+0	1179	4600	5725	672	257.103	1	0	0	0	0	0	0	0	0	1	1	0	0	0	0	0	1	0	0
+0	389	3725	4221	426	1324.223	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	368	298	93	42	422.737	1	1	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	4447	1268	196	5660	1.937	0	0	0	0	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0
+0	5501	4986	1234	6247	1.068	0	0	0	0	0	0	0	1	1	0	1	0	0	0	0	1	0	0	0
+1	3966	2626	4924	3610	1.223	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	647	557	1100	289	305.945	0	0	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	733	992	1150	2989	11.268	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	10323	595	849	558	15.778	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	24	92	2	71	20.503	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	77	173	179	52	92.920	0	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	94	404	64	504	113.013	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+1	178	145	57	16	18.708	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	5786	501	1263	5716	21.257	1	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0	0
+0	9167	2082	2385	29938	4.634	0	0	0	1	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0
+1	1375	12503	11605	341	228.751	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	149	263	194	251	1.87	0	0	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	188	131	73	816	51.709	0	1	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	1	0
+0	771	194	125	492	3.251	1	1	0	0	0	0	0	0	0	0	0	0	1	0	1	0	0	0	0
+0	4023	1047	292	13336	1.800	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	369	642	158	806	623.086	1	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	1933	2208	434	13	104.959	0	0	0	0	1	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	96	295	59	240	22.541	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	4275	533	362	3022	64.715	0	0	0	0	0	0	1	1	0	0	0	1	1	0	0	0	0	0	0
+0	204	544	171	915	12.848	0	0	0	0	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+1	1131	1454	276	545	19.957	1	1	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1
+0	2561	1253	574	3118	254.864	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	241	681	82	424	37.909	1	0	1	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	894	649	73	9807	4.347	0	0	0	0	1	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	1754	5418	5594	24668	3.573	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	5044	6943	7002	15602	11.146	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	4586	16778	20002	6130	9.989	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	1	0
+0	1861	3437	620	12439	18.929	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+1	520	1356	1483	23023	3.398	1	1	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	725	1120	92	0	230.71	0	0	1	1	1	0	1	0	0	0	0	0	0	0	0	0	0	0	1
+0	51	247	12	201	559.416	0	1	1	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	1
+0	248	105	13	1001	117.754	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	491	632	89	234	22.077	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	57	85	18	480	34.865	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	174	355	99	363	57.103	0	0	1	0	1	0	1	0	0	1	1	0	0	1	0	1	0	0	0
+0	783	761	669	2909	1.563	1	1	1	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	880	485	150	16013	491.749	0	0	0	0	1	0	1	1	0	0	0	0	0	0	0	0	0	1	0
+0	31	620	19	646	17.460	0	0	0	0	0	0	1	0	1	0	0	0	1	0	0	0	0	0	0
+1	10898	4108	1067	6285	5.131	1	1	1	1	0	1	0	1	0	0	0	0	0	0	1	0	0	0	0
+0	271	1180	1000	46	71.85	0	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	1035	1986	243	2594	482.878	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	23502	1538	2315	47490	1.631	1	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	1
+0	197	911	1764	2038	110.800	0	0	0	1	0	1	0	0	0	0	1	0	0	0	0	0	0	0	0
+0	90	1110	57	37	202.044	0	0	0	0	1	0	0	0	0	0	0	0	1	1	0	0	0	0	0
+0	18	66	35	6	21.682	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	3	261	13	13	307.283	1	1	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	1
+0	1443	611	167	2547	144.290	1	0	0	1	0	1	0	1	1	0	0	0	0	0	0	0	0	1	0
+1	667	1682	466	29565	26.256	0	1	0	1	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+1	345	361	67	262	28.326	1	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	95	178	14	105	623.718	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+1	7270	3601	1266	20121	9.454	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	666	738	146	1969	14.332	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	4466	1234	1073	4292	1.390	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	4226	33144	35434	4446	18.268	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	373	109	47	457	145.541	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+1	11230	4357	2797	3108	23.199	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	243	803	379	1087	221.433	0	0	0	1	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	432	322	155	751	13.141	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	287	313	40	942	98.653	1	0	0	0	0	0	1	0	0	0	0	1	0	0	0	0	0	0	0
+0	91	133	19	175	88.454	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	166	643	119	109	2.248	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	38	918	151	73	40.683	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	197	334	129	100	43.884	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	1
+0	404	1251	83	2337	10.786	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1843	189	60	11098	75.724	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	539	481	111	1044	4.161	1	1	1	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	1460	6494	6059	1292	498.385	1	1	1	0	0	0	0	0	0	0	0	0	0	0	1	0	0	1	0
+0	146	154	25	223	796.488	0	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	37931	11990	12929	59376	5.949	0	0	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	26397	2702	2008	1149	4.538	0	0	0	1	1	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	56	179	20	1446	27.522	0	0	0	0	0	1	0	0	0	1	0	1	0	0	0	0	0	0	1
+1	7929	6974	6964	48988	30.970	1	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	593	1117	140	537	125.869	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2836	1261	1164	4805	4.501	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	207	591	71	541	126.627	1	0	1	0	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	3	176	9	10	1504.656	0	0	0	0	1	0	0	1	0	1	0	0	0	0	0	0	1	0	1
+0	11121	2271	1343	32941	5.821	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	381	866	86	403	443.033	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	150	1279	449	2362	199.78	0	0	0	1	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	1499	6112	35897	6308	2.911	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3478	2233	391	11976	92.554	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	1	0
+0	5208	2721	1177	7819	24.162	0	0	0	1	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	10177	291	253	17567	49.684	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	4557	2181	1633	9739	1.467	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	17	43	29	29	5239.899	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	1
+0	6843	2849	8186	1519	106.969	0	0	0	0	0	1	0	0	0	1	1	0	0	0	0	0	0	0	0
+0	41	571	20	96	6.259	0	0	1	1	1	1	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	58	2582	1193	182	48.576	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	1636	2449	242	3217	14.008	1	0	0	0	0	0	0	0	1	1	0	0	0	0	1	0	0	1	0
+0	1545	1609	376	1306	1.844	1	1	1	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	22	42	18	15	1083.482	1	0	0	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	3917	2363	302	3752	86.526	1	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0
+1	2034	836	219	1158	9.296	1	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1136	2264	1618	1899	1.743	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	6045	268	233	16382	7.255	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	51	290	46	199	42.276	0	0	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	971	683	1254	640	18.663	0	1	1	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	358	509	55	646	59.746	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	6805	1621	428	7403	34.507	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	83	509	27	474	257.656	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3964	1015	298	7889	5.468	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	70	404	59	120	226.332	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	12127	1549	300	696	1.221	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	2251	1740	614	2461	5.740	0	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	1	0
+1	7	70	11	13	116.633	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	21762	380	1083	1727	62.523	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2102	634	769	788	2.952	1	1	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2	66	6	71	528.327	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	13977	889	927	5029	3.948	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1357	463	810	12883	15.864	0	0	0	0	1	0	1	0	0	0	0	0	0	1	0	0	0	0	0
+0	19	393	80	21	624.922	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	23	1564	117	597	39.286	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	101	320	110	705	136.712	0	0	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	758	241	669	381	22.209	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	143	1067	267	2489	81.134	1	0	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+1	208	1324	495	883	1086.945	1	0	0	0	0	0	1	0	0	1	0	1	0	0	0	0	1	0	0
+0	282	651	79	159	22.123	1	0	1	0	0	1	0	1	0	0	0	1	0	0	0	0	0	0	0
+0	452	1243	512	777	45.987	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	61	236	20	38	95.744	1	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	1845	1337	1198	2312	23.773	0	1	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	70	300	22	176	62.753	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	5437	873	1099	10536	21.440	1	1	1	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	2044	643	465	4526	9.616	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	9542	4978	2687	935	2.252	1	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	35899	1830	30484	6964	13.305	0	0	1	0	0	0	1	1	1	0	0	0	0	0	0	0	0	0	0
+0	1370	2314	423	2506	633.381	0	1	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0	0	0
+0	194	564	208	115	452.020	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	26	319	59	309	8.723	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	288	196	66	374	317.714	0	1	0	1	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	5975	2167	1551	14528	39.572	0	0	1	1	0	1	0	1	0	0	0	0	0	0	0	0	0	1	0
+0	1227	2272	947	4951	207.624	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+1	3109	3959	4075	8496	71.469	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1269	672	731	3335	4.224	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+1	67	565	53	69	145.991	1	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	46	215	14	89	12.146	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	1
+0	50	89	37	93	17.741	0	0	0	0	1	0	0	0	0	1	1	0	1	0	0	1	0	0	0
+0	14043	5064	5277	19185	1.885	0	1	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0
+0	563	320	370	957	119.463	1	1	1	1	0	0	0	0	1	0	0	0	0	1	0	0	0	0	0
+0	4445	343	155	832	181.148	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	12	104	13	60	2721.603	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	161	290	128	433	261.757	0	0	0	0	1	0	0	1	0	0	0	1	0	0	0	0	0	1	0
+0	2960	2131	1173	3864	3.292	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	42861	30844	53376	112	5.188	0	1	0	0	0	0	0	0	0	0	0	0	0	1	1	0	0	0	0
+0	154	319	105	696	19.427	0	1	1	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	679	1553	1681	2147	3240.029	0	0	0	1	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	979	606	273	4555	34.505	1	0	0	0	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	238	3817	415	217	7.913	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	9	89	38	20	11.500	0	1	0	1	0	1	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	29050	4582	4325	17668	1.368	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3	113	8	32	81.451	1	1	0	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	182472	2445	5096	40478	4.021	0	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	1947	1103	328	321	43.997	1	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0
+1	361	1978	225	392	12.164	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	1	0
+0	312	468	97	180	878.162	1	1	1	1	0	0	0	1	0	0	0	0	0	1	1	0	0	0	0
+0	479	526	78	155	15.676	1	1	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	821	1444	554	580	49.446	1	0	1	0	0	0	0	0	0	1	0	0	0	0	0	0	1	1	0
+0	198	2252	2369	655	74.653	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	24634	4995	852	14158	15.133	0	1	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	1	0
+0	580	1108	2859	34394	400.764	0	1	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	2128	3339	4382	4046	118.028	0	0	0	0	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+1	2137	1030	253	3817	138.005	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	963	1580	930	437	7.583	1	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+1	4512	2550	2211	6423	7.847	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	5119	2018	366	3259	274.406	0	0	0	0	0	0	0	0	0	1	1	0	0	0	0	1	0	0	0
+0	3191	4456	566	57	328.100	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	297	979	699	2600	318.445	0	1	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0	0	0
+0	428	156	77	601	7.020	1	1	0	0	1	0	0	1	0	0	0	0	0	0	1	0	0	0	1
+1	69	172	23	102	120.474	1	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	1
+0	1844	2752	402	2670	40.017	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0	0	0	0	0
+0	68	430	32	426	38.004	0	0	1	1	0	0	0	1	1	0	0	0	1	0	0	0	0	0	0
+0	411	3742	369	571	9.47	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	160	221	26	803	64.155	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	1
+0	1546	1748	164	43	51.483	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	211	636	91	207	35.695	0	1	0	1	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
+0	146	875	131	647	3.913	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	92	132	250	104	344.877	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	161	664	43	422	321.701	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	1
+1	6016	2194	2182	3553	4.512	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	24	85	4	48	681.518	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+0	4646	266	230	182	856.97	1	0	0	1	1	0	0	0	0	0	1	0	0	1	0	0	0	0	0
+1	9786	10244	10150	20714	3.088	0	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	726	861	323	24156	15.093	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	4098	2456	1154	3890	80.362	1	1	1	1	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	11572	1370	3456	3345	22.491	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	1728	541	606	667	2.048	1	0	1	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+1	813	469	193	2142	8.599	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	5564	611	353	3888	4.153	0	0	0	0	0	0	0	1	0	0	0	1	0	0	0	0	0	1	0
+0	1546	3402	3221	98	237.171	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	5450	599	851	7228	1.021	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+1	216	370	229	847	41.712	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+1	13871	1024	1071	2868	74.513	0	0	0	0	1	0	1	0	0	0	1	0	0	0	0	1	0	0	0
+0	785	283	282	1076	12.551	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+1	65	1067	228	107	2006.490	1	0	0	0	0	0	1	0	0	1	0	0	0	0	1	0	0	0	0
+0	266	158	100	3231	89.591	1	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	527	1654	111	1884	37.193	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	3739	1209	1066	14447	8.969	0	0	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0
+0	15	322	84	220	442.431	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1841	1435	1542	6411	9.298	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	4025	792	310	1696	19.076	0	0	0	1	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	436	1971	263	365	12.404	0	0	0	0	1	0	1	0	0	0	1	0	1	0	0	1	0	0	0
+0	2788	2387	1442	877	10.269	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	1	0
+0	1666	1298	200	3093	34.630	1	0	0	0	0	0	0	0	1	0	0	1	0	0	1	0	0	1	0
+0	5841	1566	680	6875	9.620	0	0	0	1	1	1	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	1340	384	354	2319	19.887	0	1	1	0	0	0	0	0	0	1	0	1	0	0	0	0	0	0	0
+0	72	100	38	303	365.300	0	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	37	225	22	17	264.380	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	551	486	55	3383	7.089	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	22237	56654	51511	434	10.158	0	0	1	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	1967	1565	251	1193	3.285	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	451	998	505	1972	575.633	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2322	1453	656	7087	185.859	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	361	724	275	190	14.113	1	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	670	889	307	793	3.773	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	745	659	365	158	5.571	1	0	1	1	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	253	333	179	758	35.974	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	2348	631	188	3841	2.812	0	0	0	0	0	0	0	0	0	1	0	0	1	0	0	0	0	0	0
+0	1108	316	44	864	195.081	0	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	101689	4198	3268	125625	5.036	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	10	193	55	117	160.211	0	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	506	271	211	681	959.877	1	0	1	1	0	1	0	1	0	1	0	0	0	0	0	0	0	0	0
+1	8553	475	149	15517	64.104	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	16	59	34	57	434.697	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0
+1	4176	1560	1384	481	2.178	1	0	0	1	1	1	1	0	0	0	0	0	0	1	0	0	0	0	0
+0	390	284	213	629	60.272	1	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	2207	717	767	1619	141.986	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	7886	2537	2971	15216	8.465	0	0	0	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	322	1276	121	392	3.513	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	860	671	523	6237	17.440	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0	0
+0	35	203	107	651	231.884	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	320	956	436	2351	164.427	1	0	1	1	0	1	1	0	1	0	0	0	0	1	0	0	0	0	0
+0	1605	2385	1137	279	24.301	1	1	1	0	0	0	0	0	1	0	0	1	0	0	0	0	0	0	0
+0	5818	2074	233	9310	75.820	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1
+0	76906	4385	4423	162851	12.373	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	725	204	42	2993	278.721	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	213	691	348	91	11.379	1	0	1	0	0	1	0	0	0	1	0	1	0	0	0	0	0	0	0
+0	12595	4577	4862	5074	21.839	0	0	0	1	0	0	0	0	0	1	1	0	0	0	0	1	1	0	0
+1	17	43	3	1	386.446	1	0	1	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	94	681	163	379	138.936	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1076	1434	1427	2043	150.512	1	1	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	444	136	454	142	7.425	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	70674	5790	6086	78109	6.988	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	1684	10499	10816	527	5.557	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	1063	1480	4133	14033	6.600	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0
+0	73	1101	184	14	5330.435	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	593	1454	277	352	83.318	0	1	0	0	1	0	0	1	0	1	0	0	1	0	0	0	0	0	0
+0	78	398	255	611	9.988	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0
+0	431	295	874	230	95.201	1	0	1	1	1	1	0	0	0	0	1	0	0	1	0	1	0	0	0
+0	307	343	190	2014	166.34	1	1	0	0	0	0	0	0	0	0	1	0	0	0	0	1	0	0	0
+0	1977	2396	1467	342	4.995	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	637	4229	1114	51	37.426	0	0	0	0	0	0	0	0	0	0	1	1	0	1	0	1	0	0	0
+0	29	133	16	507	60.726	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	801	1636	1252	312	33.511	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	7164	601	266	9868	4.033	1	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	1	0
+0	3590	1039	658	1149	14.933	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2997	903	526	3466	780.132	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	5249	1077	586	16240	2.492	1	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	20988	2655	1831	27345	1.008	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	0
+0	228	113	70	719	47.330	0	0	0	0	0	0	0	1	0	0	0	0	0	1	0	0	0	0	0
+0	460	589	62	11525	15.465	0	1	0	0	0	0	1	0	0	0	0	0	0	0	1	0	0	0	0
+0	2703	3676	1205	1759	1.739	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0
+0	2551	5073	5064	16659	13.903	0	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	2117	453	207	8991	12.558	1	1	0	0	0	0	1	0	0	0	0	0	1	1	0	0	0	0	0
+0	21686	4442	5710	1300	4.085	0	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+1	45743	9873	9976	10557	6.073	0	0	0	0	0	1	0	0	0	1	0	0	0	0	0	0	1	0	0
+0	236	1426	118	48	475.868	0	0	0	0	0	0	1	1	0	1	0	0	1	0	0	0	0	0	0
+0	279	637	201	1514	16.773	1	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+0	6748	2057	6295	3224	3.564	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
+1	323	246	164	403	44.957	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0
+0	344	243	129	157	153.472	1	0	0	1	0	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	1685	1835	286	7833	39.009	0	0	0	0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0
+0	472	256	50	4585	177.422	0	0	0	0	0	0	0	1	0	0	0	0	0	0	0	0	0	0	1
+0	2117	954	164	9743	34.740	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0
diff --git a/tests/test_model_tests.py b/tests/test_model_tests.py
index d3aa99d..2fc87c0 100644
--- a/tests/test_model_tests.py
+++ b/tests/test_model_tests.py
@@ -23,7 +23,8 @@
     DriftPredictionsResistanceTest,
     ClassificationInvarianceTest,
     TreeCoverageTest,
-    DriftMetricResistanceTest
+    DriftMetricResistanceTest,
+    FeatureCheckerTest
 )
 from mercury.robust.errors import FailedTestError
 
@@ -1033,3 +1034,91 @@ def test_drift_metric_resistance_test_invalid_inputs():
     )
     with pytest.raises(ValueError):
         test.run()
+
+def test_feature_checker_test():
+    df = pd.read_csv('%s/csv/test_twt.csv' % pathlib.Path(__file__).parent.resolve(), sep = '\t')
+
+    train, test = train_test_split(df, test_size = 0.2)
+
+    X_train = train.loc[:, train.columns != 'Y']
+    Y_train = train.loc[:, 'Y']
+
+    rf = RandomForestClassifier()
+    rf.fit(X_train, Y_train)
+
+    fct = FeatureCheckerTest(rf, train, 'Y', tolerance = 100)
+    with pytest.raises(FailedTestError):
+        fct.run()
+
+    fct = FeatureCheckerTest(rf, train, 'Y', test, tolerance = 100)
+    with pytest.raises(FailedTestError):
+        fct.run()
+
+    def eval_fun(Y_obs, Y_hat):
+        return sum((Y_obs - Y_hat)**2)
+
+    fct = FeatureCheckerTest(rf, train, 'Y', test, eval = eval_fun, tolerance = 100)
+    with pytest.raises(FailedTestError):
+        fct.run()
+
+    fct = FeatureCheckerTest(rf, train, 'Y', test, importance = 'feature_importances_', tolerance = 100)
+    with pytest.raises(FailedTestError):
+        fct.run()
+
+    fct = FeatureCheckerTest(rf, train, 'Y', test, importance = 'feature_importances_', eval = eval_fun, tolerance = 100, remove_num = 2, num_tries = 1)
+    with pytest.raises(FailedTestError):
+        fct.run()
+
+
+def test_feature_checker_test_model_function():
+
+    # Create Dataset
+    X, y = make_classification(200, n_features=5, n_informative=5, n_redundant=0)
+    df = pd.DataFrame(X, columns=["x1", "x2", "x3", "x4", "x5"])
+    df["x6"] = np.random.choice(["cat_0", "cat_1", "cat_2"], size=len(df)) # make categorical feature feature
+    df["y"] = y
+    df_train, df_test = train_test_split(df, test_size = 0.2)
+
+    # Define function to create the model (pipeline)
+    def create_pipeline_fn(X, model_args):
+
+        num_feats = [f for f in model_args['num_feats'] if f in X.columns]
+        cat_feats = [f for f in model_args['cat_feats'] if f in X.columns]
+
+        numeric_transformer = Pipeline(steps=[("scaler", StandardScaler())])
+        categorical_transformer = Pipeline(steps=[("ohe", OneHotEncoder(handle_unknown="ignore"))])
+
+        preprocessor = ColumnTransformer(
+            transformers=[
+                ("num", numeric_transformer, num_feats),
+                ("cat", categorical_transformer, cat_feats),
+            ], remainder='drop'
+        )
+
+        pipeline = Pipeline(
+            steps=[
+                ("preprocessor", preprocessor),
+                ("classifier", DecisionTreeClassifier())
+            ]
+        )
+        
+        return pipeline
+
+    # Create and run test
+    num_feats = ["x1", "x2", "x3", "x4", "x5"]
+    cat_feats = ["x6"]
+    model_fn_args = {
+        'num_feats': num_feats,
+        'cat_feats': cat_feats
+    }
+    test = FeatureCheckerTest(
+        model=create_pipeline_fn,
+        train=df_train,
+        target="y",
+        test=df_test,
+        tolerance=-1,
+        num_tries=3,
+        remove_num=1,
+        model_fn_args = model_fn_args,
+    )
+    test.run()
\ No newline at end of file