diff --git a/doc/bibliography.bib b/doc/bibliography.bib
new file mode 100644
index 0000000000000000000000000000000000000000..539c772e8e2f86fed2ec05f12d2db657d5971072
--- /dev/null
+++ b/doc/bibliography.bib
@@ -0,0 +1,59 @@
+    @article{Tang_Ishwaran,
+      title={Random Forest Missing Data Algorithms},
+      author={Fei Tang and Hemant Ishwaran},
+      journal={Stat Anal Data Min.},
+      volume={10},
+      number={6},
+      pages={363--377},
+      year={2017},
+      http={https://arxiv.org/pdf/1701.05305.pdf}
+    }
+    @article{rf,
+      title={Random Forest},
+      author={Leo Breiman},
+      journal={Stat Anal Data Min.},
+      volume={45},
+      number={1},
+      pages={5--32},
+      year={2001},
+      issn={0885-6125}
+      http={https://www.stat.berkeley.edu/~breiman/randomforest2001.pdf}
+    }
+    @article{knn-imputation,
+        title={Nearest neighbor imputation algorithms: a critical evaluation},
+        author={Lorenzo Beretta, Alessandro Santaniello},
+        year={2016},
+        page={74},
+        volume={16},
+        number={3},
+        journal={BMC medical informatics and decision making},
+        http={https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4959387/}
+    }
+    @thesis{rf-imputation,
+        title={Imputation for Random Forests},
+        author={Joshua Young},
+        year={2017},
+        university={Utah State University},
+        http={https://digitalcommons.usu.edu/cgi/viewcontent.cgi?article=1946&context=gradreports}
+    }
+    
+    @misc{UCI-repositorio ,
+        author = "Dua, Dheeru and Graff, Casey",
+        year = "2017",
+        title = "{UCI} Machine Learning Repository",
+        url = "http://archive.ics.uci.edu/ml",
+        institution = "University of California, Irvine, School of Information and Computer Sciences" }
+    
+    
+    
+    @article{missForest,
+       title={MissForest—non-parametric missing value imputation for mixed-type data},
+       author={Daniel J. Stekhoven, Peter Bühlmann},
+       journal={Bioinformatics},
+       volume={28},
+       number={1},
+       year={2012},
+       pages={112--118},
+       http={https://doi.org/10.1093/bioinformatics/btr597}
+    }
+
diff --git a/doc/images/airfoil4pane.png b/doc/images/airfoil4pane.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d9239d7a5f7e2d7326c0e6feaa7e0b898e065ed
Binary files /dev/null and b/doc/images/airfoil4pane.png differ
diff --git a/doc/images/error.png b/doc/images/error.png
new file mode 100644
index 0000000000000000000000000000000000000000..96d59950632d6bbd2112e7b42d5e85fdaf36002e
Binary files /dev/null and b/doc/images/error.png differ
diff --git a/doc/images/int_state_traffic4pane.png b/doc/images/int_state_traffic4pane.png
new file mode 100644
index 0000000000000000000000000000000000000000..d7ac7cdff13c577637feac1f8dd2d30c9c6f89bf
Binary files /dev/null and b/doc/images/int_state_traffic4pane.png differ
diff --git a/doc/images/outTests.png b/doc/images/outTests.png
new file mode 100644
index 0000000000000000000000000000000000000000..703db4215b27a3cc6eab4ab87447166a2b90f973
Binary files /dev/null and b/doc/images/outTests.png differ
diff --git a/doc/images/real_state4pane.png b/doc/images/real_state4pane.png
new file mode 100644
index 0000000000000000000000000000000000000000..d300ac08b5fa941e9ae5612dfcd4b17bb4df9b16
Binary files /dev/null and b/doc/images/real_state4pane.png differ
diff --git a/doc/images/rf_insts.png b/doc/images/rf_insts.png
new file mode 100644
index 0000000000000000000000000000000000000000..1eaf3e841b61c278ba516ad18c3a79be27813abf
Binary files /dev/null and b/doc/images/rf_insts.png differ
diff --git a/doc/images/sin4panel.png b/doc/images/sin4panel.png
new file mode 100644
index 0000000000000000000000000000000000000000..14ffba2cdd7deca20715e9b8d9150e937b7a2fa3
Binary files /dev/null and b/doc/images/sin4panel.png differ
diff --git a/doc/images/sizes.png b/doc/images/sizes.png
new file mode 100644
index 0000000000000000000000000000000000000000..6de369d365bcac77524bfedde73a3cecc8c33298
Binary files /dev/null and b/doc/images/sizes.png differ
diff --git a/doc/images/wine4pane.png b/doc/images/wine4pane.png
new file mode 100644
index 0000000000000000000000000000000000000000..a771d8cac20eb52b3d11463a2e7279f7fdd995eb
Binary files /dev/null and b/doc/images/wine4pane.png differ
diff --git a/doc/main.text b/doc/main.text
new file mode 100644
index 0000000000000000000000000000000000000000..9b25187f85dae8baabd2861faf90aba4c31be27e
--- /dev/null
+++ b/doc/main.text
@@ -0,0 +1,287 @@
+\documentclass[preprint,12pt]{elsarticle}
+\usepackage{subfigure}
+\usepackage{makeidx}  % allows for indexgeneration
+\usepackage{multirow}
+\usepackage{tabularx}
+\usepackage{amsmath,amsfonts,amssymb}
+\usepackage{multirow,array}
+\usepackage{graphicx}
+\usepackage{rotating}
+\usepackage{MnSymbol,wasysym}
+\usepackage{url,soul}
+\usepackage[switch]{lineno}
+\usepackage{blindtext}
+\usepackage{comment}
+\graphicspath{ {./images/} }
+
+\journal{Transportation Research Part C: Emerging Technologies}
+
+\begin{document}
+\begin{frontmatter}
+\title{Hole Resilient Method for Classification and Regression}
+
+\author[TECNALIA]{Ignacio (I\~{n}aki) Olabarrieta}
+\address[TECNALIA]{OPTIMA Unit. TECNALIA, ICT Division P. Tecnologico Bizkaia, Ed. 700, 48160 Derio, Spain}
+
+%\address[EHU]{Dept. of Communications Engineering. University of the Basque Country UPV/EHU. Alameda Urquijo S/N, 48013 Bilbao, Spain}
+%\address[BCAM]{Basque Center for Applied Mathematics (BCAM), 48009 Bilbao, Spain}
+\cortext[cor1]{Corresponding author: ignacio.olabarrieta@tecnalia.com. OPTIMA Unit. TECNALIA. P. Tecnologico Bizkaia, Ed. 700, 48160 Derio, Spain. Tl: +34 946 430 50. Fax: +34 901 760 009. E-mail: ignacio.olabarrieta@tecnalia.com.}
+
+
+\begin{abstract}
+
+
+
+\end{abstract}
+\begin{keyword}
+Time Series forecasting; missing data
+\end{keyword}
+\end{frontmatter}
+\section{Introduction}
+Here we propose an extension of the Random Forest Regression \cite{rf} algorithm to consider holes in the data series. In \cite{Tang_Ishwaran} it is shown a 
+ 
+Typically the way to confront the missing values problem  is to impute or to fill the missing values by artificial ones~\cite{rf-imputation} in such a way that the regression/classification algorithm can work on all the data set. Popular imputation methods are:
+\begin{itemize}
+    \item Filling missing data with zeroes.
+    \item Filling missing data with the average values of each feature.
+    \item Filling missing data via {\it{k}}-Nearest Neighbours algorithm~\cite{knn-imputation}.
+    \item Filling missing data with the result of missForest~\cite{missForest}.
+\end{itemize}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section {Description}\label {sec:description}
+Given a training sample 
+${\mathcal{D}}_n=\{({\mathbf{X}}_i,Y_i)\}_{i=1}^n$
+of 
+$ \mathbb R^{p}\times \mathbb R$
+-valued independent random variables distributed as the independent prototype pair 
+$ (\mathbf {X} ,Y)$, where 
+$ \operatorname {E} [Y^{2}]<\infty $. We aim at predicting the responses $Y_j$, associated with the vectors $ {\cal P}_m=\left\{\mathbf {X}_j\right\}_{j=1}^m$.
+
+For a given training sample $\mathcal{D}_n$ and a vector $\mathbf{X}_j$ we compute the prediction $Y_j$ using:
+\begin{equation}
+    Y_j = \mathcal{RF}\left[\mathcal{D}_n \right]\left(\mathbf{X}_j \right).
+\end{equation}
+
+\subsection{Mask vectors Properties}
+We assume that both the training data ${\mathcal{D}}_n$ and the prediction data $\mathcal{P}_m$ contain holes, missing data $\varnothing$. To define the positions where data are missing we define a mask vector $\mathbf M=\mathcal{M}\left(\mathbf{X}\right)$ for each vector $\mathbf X$, the components of this mask vector are defined as:
+\begin{equation}
+M^j=\left\{
+        \begin{array}{cc}
+          1 & {\mathrm {if}}\ X^j\ \mathrm{is\  \varnothing}\\
+          0 & {\mathrm {else.}}
+        \end{array}
+        \right.
+\end{equation}
+the hamming weight of $\mathbf M$ is defined as the number of ones within the mask vector: $w_{h}\left(\mathbf{M}\right)=\sum M^j$ as the number of {\it ones} within the mask vector $\mathbf M$.
+Therefore each of the vectors $ \mathbf {X}$ has an associated mask vector $\mathcal {M}\left(\mathbf{X}\right)$ depending on the values that are missing on that particular vector. Alternatively each different mask vector $\mathbf {M}_k$ has a set of associated $\mathbf X$ vectors: $\{\mathbf {X}_{}\}$. The number of possible different mask vectors depends on $p$, the size of vectors $\mathbf X$.
+
+For any given mask vector ${\mathbf M}$ there exists a set of mask vectors ${\mathbf C}_{\mathbf M}=\{{\mathbf M}_{l}\}$ which are compatible with ${\mathbf M}$. We say that ${\mathbf M}_{l}$ is compatible with ${\mathbf M}$, and write:
+\begin{equation}
+    {\mathbf M}_{l} \subset {\mathbf M}
+\end{equation}
+if the all the positions of the {\it ones} in $\mathbf M_{l}$ are in the positions of some (or all) the ones in $\mathbf M$. 
+\begin{equation}
+    {\mathbf C}_{\mathbf M} \equiv \left\{{\mathbf M}_k\ :\ {\mathbf M}_k \subset {\mathbf M}\right\} 
+\end{equation}
+
+For example for ${\mathbf M} = \left[ 0, 0, 1, 1, 0, 0 \right]$
+the set of compatible vectors $\mathbf{C_{\mathbf M}}$ is the following:
+\begin{equation}
+    \mathbf{C_{\mathbf M}}=\left\{\left[ 0, 0, 0, 0, 0, 0 \right],\left[ 0, 0, 1, 0, 0, 0 \right],\left[ 0, 0, 0, 1, 0, 0 \right],\left[ 0, 0, 1, 1, 0, 0 \right]  \right\}.
+\end{equation}
+The mask vector with no ones, i.e. $[0, 0, 0, \dots, 0, 0]$, is compatible with all other mask vectors but the only one that is compatible with it is itself. In general if ${\mathbf A} \subset {\mathbf B}$ then ${\mathbf B} \nsubset {\mathbf A}$, more over if 
+${\mathbf A} \subset {\mathbf B}$ and ${\mathbf B} \subset {\mathbf A}$ then ${\mathbf A}={\mathbf B}$. 
+
+In addition, for a given mask vector $\mathbf M$ we can construct the set of mask vectors for which $\mathbf M$ is compatible to, i.e.:
+\begin{equation}
+    {\mathbf C}^{\dagger}_{\mathbf M} \equiv \left\{{\mathbf M}_k\ :\ {\mathbf M} \subset {\mathbf M}_k\right\} 
+\end{equation}
+For example for ${\mathbf M} = \left[ 0, 0, 1, 1, 0, 0 \right]$
+the set of compatible vectors $\mathbf{C}^\dagger_{\mathbf M}$ is the following:
+\begin{eqnarray}
+\nonumber
+{\mathbf C}^\dagger_{\mathbf M}=\left\{ \right.
+    &&\left[ 0, 0, 1, 1, 0, 0 \right],\\
+\nonumber
+    &&\left[ 1, 0, 1, 1, 0, 0 \right],
+     \left[ 0, 1, 1, 1, 0, 0 \right],
+     \left[ 0, 0, 1, 1, 1, 0 \right], 
+     \left[ 0, 0, 1, 1, 0, 1 \right],\\
+\nonumber
+   &&\left[ 1, 1, 1, 1, 0, 0 \right],
+    \left[ 0, 1, 1, 1, 1, 0 \right],
+    \left[ 0, 0, 1, 1, 1, 1 \right],\\
+\nonumber
+   &&\left[ 1, 1, 1, 1, 1, 0 \right],
+    \left[ 1, 1, 1, 1, 0, 1 \right],
+    \left[ 1, 0, 1, 1, 1, 1 \right],
+    \left[ 0, 1, 1, 1, 1, 1 \right],\\
+    &&\left. \left[ 1, 1, 1, 1, 1, 1 \right]
+    \right\}
+\end{eqnarray}
+
+\subsection{Generation of Models}
+Each mask vector $\mathbf M$ defines a projection function in the following way:
+\begin{eqnarray}
+\nonumber
+    {\mathbf M}:{\mathbb R}^p &\longrightarrow& {\mathbb R}^{p-w_h(\mathbf{M})}\\
+      {\mathbf X} &\mapsto& \pi_{\mathbf M}\left({\mathbf X}\right) = \left[ X_j\right]\ \forall j : M_j = 0
+\end{eqnarray}
+
+
+For example, a vector ${\mathbf X} =[x_1, x_2, x_3,\dots,x_n]$ in $\mathbb R^n$ applying the projection $\pi_{\mathbf M}$ with $w_h(\mathbf{M})=1$ associated with mask vector ${\mathbf M} = [0, 1, 0,\dots,0]$ results in a vector $\pi_{\mathbf M}\left(\mathbf X \right) = [x_1,x_3,\dots,x_n]$ in $\mathbb R^{n-1}$, i.e. the second component of vector $\mathbf X$ has been removed.
+
+For a given vector $\mathbf X$ for which a prediction $Y$ needs to be computed a model is generated taking into account the vectors in ${\cal D}_n$ that have a mask compatible with the mask of the $\mathbf X$, $\mathbf M=\mathcal M\left(\mathbf{X}\right)$. 
+\begin{equation}
+    {\mathfrak{D}}\left({\mathbf M;\mathcal{D}_n} \right)=\{(\pi_{\mathbf M}\left(\mathbf{X}_i\right),Y_i)\ \ \ :\ \ \left({\mathbf X}_i,Y_i \right) \in {\mathcal D}_n \ \& \ {\mathcal M}\left({\mathbf X}_i\right) \in {\mathbf C}_{\mathbf M}\ \& \ Y_i \neq {\varnothing} \} 
+\end{equation}
+
+This training set constitutes a training set without missing data and can be used in order to train a Random Forest model ${\mathcal {RF}}\left[\mathfrak{D}\left(\mathbf{M};\mathcal{D}_n\right)\right]$. Actually any mask vector $\mathbf M^k$ belonging to ${\mathbf C}^\dagger_{\mathbf M}$ can produce a training data set $\mathfrak{D}\left(\mathbf{M}^k;\mathcal{D}_n\right)$ without holes able to generate a model to get a prediction for $\mathbf X$. It is important to note that the information from all these models are not necessarily independent.
+
+There exists multiple ways to combine the results from the different models:
+\begin{itemize}
+    \item One way is to choose the model with higher number of features which coincides with the training set $\mathfrak D\left(\mathbf{M};\mathcal D_n\right)$ and disregard any other model.
+    \begin{equation}
+        Y = \mathcal{RF}\left[\mathfrak{D}\right]\left(\mathbf{X}\right)
+    \end{equation}
+    This model is the model without holes with more features but it is also the model with less rows available from the training data set. We will denote this method Random Forest Selection level 1.
+    \item The result of all the models could be average out to obtain an overall result.
+    \begin{equation}
+      Y = \frac{1}{|\mathbf{C}^\dagger_{\mathcal{M}\left(\mathbf{X} \right)}|}\sum_k\mathcal{RF}\left[\mathfrak{D}\left(\mathbf{M}^k;\mathcal {D}_n\right)\right]\left(\mathbf{X}\right) \ \forall \mathbf{M}^k \in \mathbf{C}^\dagger_{\mathcal{M}\left(\mathbf{X} \right)}
+    \end{equation}
+    \item Only consider the model with most features, i.e. model derived from $\mathcal {M}(\mathbf{X})$ and the models with one less features. We will denote this method Random Forest selection with 2 levels.
+    \begin{equation}
+      Y = \frac{1}{\mathcal N}\sum_k\mathcal{RF}\left[\mathfrak{D}\left(\mathbf{M}^k;\mathcal {D}_n\right)\right]\left(\mathbf{X}\right)\ :\ \mathbf{M}^k \in \mathbf{C}^\dagger_{\mathcal{M}\left(\mathbf{X} \right)}\ \ \& \ \ 
+      w_{h}\left(\mathbf{M}^k\right) \leq w_{h}\left(\mathcal{M}\left(\mathbf{X}\right)\right)+1
+    \end{equation}
+    where $\mathcal N$ is the number of $\mathbf{M}^k$ with $w_h$ equal or less than $w_h(\mathcal{M}(\mathbf{X}))+1$. 
+    \item Finally, the last method to combine the different models is to perform {\it stacking}. For a given $\mathbf X$ for which a prediction is requested a meta Random Forest model is used. This meta model is constructed using as the training samples the predictions obtained from the individual models constructed using $\mathbf{M}^k \in \mathbf{C}^\dagger_{\mathcal{M}\left(\mathbf X \right)}$. 
+    \begin{equation}
+        Y = \mathcal{RF}\left[ \mathfrak{M}\right]\left(\mathcal{Y}\right)
+    \end{equation}
+    where $\mathcal{Y}$ is the vector with components:
+    \begin{equation}
+        \mathcal{Y}^k = \mathcal{RF}\left[\mathfrak{D}\left(\mathbf{M}^k;\mathcal {D}_n\right)\right]\left(\mathbf{X}\right)
+    \end{equation}
+    and $\mathfrak{M}$ is the training set associated with these vectors and obtained from $\mathcal{D}_n$.
+\end{itemize}
+
+
+\section{Results}\label {sec:results}
+\subsection{$Sin\left(x\right)$ Prediction}
+We have tested the different method in predicting the result of $\sin\left(x\right)$. In order to construct a training sample $\mathcal{D}_n$ and a test sample $\mathcal{P}_m$. We choose $1000$ values of $\sin\left(x\right)$ starting from $x=0$ and $0.01$ apart. Holes are produced with according to different $P_r$ probabilities using MCAR (missing completely at random) mechanism, this way, the probability of getting missing data at a particular position is independent of other values.
+The string of values obtained is divided in sets of 6 values: the first 5 constitute the $\mathbf{X}^j$ vectors, therefore $p=5$ and the sixth one $Y^j$. A string of $10000$ values produces $9995$ tuples, the difference due to boundary issues, that are furthermore randomly split $75$\%-$25$\% to finally produce $\mathcal{D}_n$ and $\mathcal{P}_m$.
+
+Different methods have been applied in order to overcome the missing data.
+\begin{itemize}
+\item \textbf{Interp(0)}: Filling the missing data interpolating the missing data with the average value for each feature, in this case since it has been derived from values of $\sin\left(x\right)$ the average value of all the features is $0$.
+\item \textbf{Interp(const)}: Filling the missing data with the average values with in a given vector $\mathbf{X}$.
+\item \textbf{Interp(linear)}: Filling the missing data with a linear approximation within each vector $\mathbf{X}$.
+\item \textbf{KNN}: Using a KNN method for interpolating the missing values.
+\item \textbf{MissForest}: \textit{ MissForest imputes missing values using Random Forests in an iterative fashion [1]. By default, the imputer begins imputing missing values of the column (which is expected to be a variable) with the smallest number of missing values -- let's call this the candidate column. The first step involves filling any missing values of the remaining, non-candidate, columns with an initial guess, which is the column mean for columns representing numerical variables. From https://pypi.org/project/missingpy/}
+
+\item There \textbf{Random Forest Selection} methods described in section \ref{sec:description}. Including the level 1, level 2 y and the stacking method using a meta Random Forest model.
+\end{itemize}
+
+
+%\includegraphics[scale=0.35]{outTests.png}
+\begin{figure}
+\includegraphics[scale=0.3]{error.png}
+\caption{Mean Square Error for the different methods investigated.}
+\label{fig:mse}
+\end{figure}
+For each of the methods and value for the probability of missing data $10$ simulations have been performed and shown in Figure \ref{fig:mse}.
+
+The results for the mean square error are shown in Figure \ref{fig:mse}. We can see that the best of the methods is to use a simple linear interpolation within each of the vectors $\mathbf{X}$. The reason why linear interpolation works so well for this example is because the function $\sin(x)$ is very well approximated by a linear function for the range of values within each vector. 
+\begin{figure}
+  \subfigure{\includegraphics[width=7cm]{sizes.png}}
+  \subfigure{\includegraphics[width=7cm]{rf_insts}}
+%\includegraphics[scale=0.3]{sizes.png}
+%\includegraphics[scale=0.3]{rf_insts.png}
+\caption{Sizes and theoretical sizes for the training and test sets as a function of the Hole probability (on the left). Number of $\mathcal{RF}$ models used as a function of the missing data (on the right).}
+\label{fig:rf_selcs}
+\end{figure}
+The best of the other methods is the Random Forest Selection method of level $1$ and the Random Forest Selection method with meta model. 
+
+In Figure \ref{fig:rf_selcs} different characteristics of the Random Forest Selection level 1 are shown. In particular in the left in-set we shown what is the size of the test set $\mathcal{P}$ and the effective size of the training set. The size of the test set decreases because those tuples with $Y_j=\varnothing$ or  with $w_h\left(\mathcal{M}\left(\mathbf{X}_j\right)\right)=p$ cannot be considered. In the case $Y_j=\varnothing$ because there is no value to test against and if $w_h=p$ because there is nothing to predict from. Since the probability for $Y_j$ being $\varnothing$ is $Pr$:
+\begin{equation}
+    |\mathcal{P}| = |\mathcal{P}_0|(1-Pr)
+\end{equation}
+where $\mathcal{P}_0$ is the size of the test set without any hole, in our case $2500$.
+
+Since each vector in the test set have a different mask vector and each mask vector has a different set of training vectors finding a specific value of the training set size is not straightforward and needs to be computed considering the actual vectors in $\mathcal{D}$ and $\mathcal{P}$ and the missing data on those sets. The effective size has been computing taking the average of the training sizes for each model used. This is compared with the size of the training set erasing all the vectors with any missing component. Statistically the size of the training set is given by the following expression:
+\begin{equation}
+ |\mathcal{D}| = |\mathcal{D}_0|(1-Pr)^p
+\end{equation}
+where $\mathcal{D}_0$ is the zero hole probability training set size which in our case is $7500$ and as we mentioned above $p=5$.
+
+On the right side of Figure \ref{fig:rf_selcs} the number of different $\mathcal{RF}$ consider for the predictions as a function of the probability of missing data. For $Pr=0$ the number of instances used is $1$ since all the masks are equal for all $\mathbf{X} \in \mathcal{P}$. As $Pr$ starts increasing the number of models used increases to $6$ because by constructions once a hole is produce in the stream of data all masks with $w_h=1$ appears in the corresponding data set. As $Pr$ continues increasing more and more models need to be considered until it reaches the maximum number of masks vectors for $p=5$ this corresponds to $k=31$.
+
+\begin{table}[]
+    \centering
+    \begin{tabular}{|c|c|c|}
+         \hline
+         \textbf{Data Set} & \textbf{Size}  & \textbf{# Features} \\
+         \hline
+         \hline
+         $sin\left(x\right)$ & 10000  & 6 \\
+         \hline
+         Wine Quality & 1600  & 12 \\
+         \hline
+         Real State Validation & 412  & 8 \\
+         \hline
+         Airfoil Self-Noise & 1500 & 6 \\
+         \hline
+         Interstate Traffic Flow & 44451 & 8 \\
+         \hline
+    \end{tabular}
+    \caption{Caption}
+    \label{tab:my_label}
+\end{table}
+
+We have applied different 
+
+The market historical data set of real estate valuation are collected from Sindian Dist., New Taipei City, Taiwan. 
+The NASA data set comprises different size NACA 0012 airfoils at various wind tunnel speeds and angles of attack. The span of the airfoil and the observer position were the same in all of the experiments.
+
+These data are the results of a chemical analysis of wines grown in the same region in Italy but derived from three different cultivars. The analysis determined the quantities of 13 constituents found in each of the three types of wines
+\begin{figure}
+  \includegraphics[width=16cm]{images/sin4panel.png}
+\caption{Prediction of $\sin\left(x\right)$.}
+\label{fig:realState4pane}
+\end{figure}
+
+\begin{figure}
+  \includegraphics[width=16cm]{images/wine4pane.png}
+\caption{Wine Quality Data Set.}
+\label{fig:wine4pane}
+\end{figure}
+
+\begin{figure}
+  \includegraphics[width=16cm]{images/real_state4pane.png}
+\caption{Real State Valuation data Set \cite{UCI-repositorio} prediction results using different methods.}
+\label{fig:realState4pane}
+\end{figure}
+
+\begin{figure}
+  \includegraphics[width=16cm]{images/airfoil4pane.png}
+\caption{Airfoil Self-Noise Data Set \cite{UCI-repositorio} prediction results using different methods.}
+\label{fig:airfoil4pane}
+\end{figure}
+
+\begin{figure}
+  \includegraphics[width=16cm]{images/int_state_traffic4pane.png}
+\caption{Prediction of Traffic Flow on interstate.}
+\label{fig:int_state_traffic4pane}
+\end{figure}
+
+\section{Conclusions}
+The Random Forest Selection mechanism introduced in this paper has been proven to be of general use for regression, i.e. prediction of a variable. The 
+computation expense is more costly than common random forest models since this is based on building multiple models, as many as the mask vector allowed.
+\bibliography{bibliography} 
+\bibliographystyle{splncs03}
+\end{document}
+
diff --git a/doc/splncs03.bst b/doc/splncs03.bst
new file mode 100644
index 0000000000000000000000000000000000000000..263f3b2a3f3f0719edeae4e85058f97488a86434
--- /dev/null
+++ b/doc/splncs03.bst
@@ -0,0 +1,1520 @@
+%% BibTeX bibliography style `splncs03'
+%%
+%% BibTeX bibliography style for use with numbered references in
+%% Springer Verlag's "Lecture Notes in Computer Science" series.
+%% (See Springer's documentation for llncs.cls for
+%% more details of the suggested reference format.)  Note that this
+%% file will not work for author-year style citations.
+%%
+%% Use \documentclass{llncs} and \bibliographystyle{splncs03}, and cite
+%% a reference with (e.g.) \cite{smith77} to get a "[1]" in the text.
+%%
+%% This file comes to you courtesy of Maurizio "Titto" Patrignani of
+%% Dipartimento di Informatica e Automazione Universita' Roma Tre
+%%
+%% ================================================================================================
+%% This was file `titto-lncs-02.bst' produced on Wed Apr 1, 2009
+%% Edited by hand by titto based on `titto-lncs-01.bst' (see below)
+%%
+%% CHANGES (with respect to titto-lncs-01.bst):
+%% - Removed the call to \urlprefix (thus no "URL" string is added to the output)
+%% ================================================================================================
+%% This was file `titto-lncs-01.bst' produced on Fri Aug 22, 2008
+%% Edited by hand by titto based on `titto.bst' (see below)
+%%
+%% CHANGES (with respect to titto.bst):
+%% - Removed the "capitalize" command for editors string "(eds.)" and "(ed.)"
+%% - Introduced the functions titto.bbl.pages and titto.bbl.page for journal pages (without "pp.")
+%% - Added a new.sentence command to separate with a dot booktitle and series in the inproceedings
+%% - Commented all new.block commands before urls and notes (to separate them with a comma)
+%% - Introduced the functions titto.bbl.volume for handling journal volumes (without "vol." label)
+%% - Used for editors the same name conventions used for authors (see function format.in.ed.booktitle)
+%% - Removed a \newblock to avoid long spaces between title and "In: ..."
+%% - Added function titto.space.prefix to add a space instead of "~" after the (removed) "vol." label
+%% ================================================================================================
+%% This was file `titto.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs  (with options: `vonx,nm-rvvc,yr-par,jttl-rm,volp-com,jwdpg,jwdvol,numser,ser-vol,jnm-x,btit-rm,bt-rm,edparxc,bkedcap,au-col,in-col,fin-bare,pp,ed,abr,mth-bare,xedn,jabr,and-com,and-com-ed,xand,url,url-blk,em-x,nfss,')
+%% ----------------------------------------
+%% *** Tentative .bst file for Springer LNCS ***
+%%
+%% Copyright 1994-2007 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)]
+ %   For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is a numerical citation style, and as such is standard LaTeX.
+ % It requires no extra package to interface to the main text.
+ % The form of the \bibitem entries is
+ %   \bibitem{key}...
+ % Usage of \cite is as follows:
+ %   \cite{key} ==>>          [#]
+ %   \cite[chap. 2]{key} ==>> [#, chap. 2]
+ % where # is a number determined by the ordering in the reference list.
+ % The order in the reference list is alphabetical by authors.
+ %---------------------------------------------------------------------
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    edition
+    editor
+    eid
+    howpublished
+    institution
+    journal
+    key
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    url
+    volume
+    year
+  }
+  {}
+  { label }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+STRINGS { s t}
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+        { add.period$ write$
+%          newline$
+%          "\newblock " write$  % removed for titto-lncs-01
+          " " write$            % to avoid long spaces between title and "In: ..."
+        }
+        { output.state before.all =
+            'write$
+            { add.period$ " " * write$ }
+          if$
+        }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+FUNCTION {fin.entry}
+{ duplicate$ empty$
+    'pop$
+    'write$
+  if$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+        'skip$
+        { after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+FUNCTION {add.blank}
+{  " " * before.all 'output.state :=
+}
+
+
+FUNCTION {add.colon}
+{ duplicate$ empty$
+    'skip$
+    { ":" * add.blank }
+  if$
+}
+
+FUNCTION {date.block}
+{
+  new.block
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+STRINGS {z}
+FUNCTION {remove.dots}
+{ 'z :=
+  ""
+  { z empty$ not }
+  { z #1 #1 substring$
+    z #2 global.max$ substring$ 'z :=
+    duplicate$ "." = 'pop$
+      { * }
+    if$
+  }
+  while$
+}
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+FUNCTION {emphasize}
+{ skip$ }
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { " " }
+  if$
+  swap$
+}
+FUNCTION {titto.space.prefix} %  always introduce a space
+{ duplicate$ text.length$ #3 <
+    { " " }
+    { " " }
+  if$
+  swap$
+}
+
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+{ "and"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "eds." }
+
+FUNCTION {bbl.editor}
+{ "ed." }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{ "edn." }
+
+FUNCTION {bbl.volume}
+{ "vol." }
+
+FUNCTION {titto.bbl.volume} % for handling journals
+{ "" }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{ "no." }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "pp." }
+
+FUNCTION {bbl.page}
+{ "p." }
+
+FUNCTION {titto.bbl.pages} % for journals
+{ "" }
+
+FUNCTION {titto.bbl.page}  % for journals
+{ "" }
+
+FUNCTION {bbl.chapter}
+{ "chap." }
+
+FUNCTION {bbl.techrep}
+{ "Tech. Rep." }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+MACRO {acmcs} {"ACM Comput. Surv."}
+
+MACRO {acta} {"Acta Inf."}
+
+MACRO {cacm} {"Commun. ACM"}
+
+MACRO {ibmjrd} {"IBM J. Res. Dev."}
+
+MACRO {ibmsj} {"IBM Syst.~J."}
+
+MACRO {ieeese} {"IEEE Trans. Software Eng."}
+
+MACRO {ieeetc} {"IEEE Trans. Comput."}
+
+MACRO {ieeetcad}
+ {"IEEE Trans. Comput. Aid. Des."}
+
+MACRO {ipl} {"Inf. Process. Lett."}
+
+MACRO {jacm} {"J.~ACM"}
+
+MACRO {jcss} {"J.~Comput. Syst. Sci."}
+
+MACRO {scp} {"Sci. Comput. Program."}
+
+MACRO {sicomp} {"SIAM J. Comput."}
+
+MACRO {tocs} {"ACM Trans. Comput. Syst."}
+
+MACRO {tods} {"ACM Trans. Database Syst."}
+
+MACRO {tog} {"ACM Trans. Graphic."}
+
+MACRO {toms} {"ACM Trans. Math. Software"}
+
+MACRO {toois} {"ACM Trans. Office Inf. Syst."}
+
+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}
+
+MACRO {tcs} {"Theor. Comput. Sci."}
+
+FUNCTION {bibinfo.check}
+{ swap$
+  duplicate$ missing$
+    {
+      pop$ pop$
+      ""
+    }
+    { duplicate$ empty$
+        {
+          swap$ pop$
+        }
+        { swap$
+          pop$
+        }
+      if$
+    }
+  if$
+}
+FUNCTION {bibinfo.warn}
+{ swap$
+  duplicate$ missing$
+    {
+      swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+      ""
+    }
+    { duplicate$ empty$
+        {
+          swap$ "empty " swap$ * " in " * cite$ * warning$
+        }
+        { swap$
+          pop$
+        }
+      if$
+    }
+  if$
+}
+FUNCTION {format.url}
+{ url empty$
+    { "" }
+%    { "\urlprefix\url{" url * "}" * }
+    { "\url{" url * "}" * }  % changed in titto-lncs-02.bst
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+
+STRINGS  { bibinfo}
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+  duplicate$ empty$ 'skip$ {
+  's :=
+  "" 't :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr
+      "{vv~}{ll}{, jj}{, f{.}.}"
+      format.name$
+      bibinfo bibinfo.check
+      't :=
+      nameptr #1 >
+        {
+          namesleft #1 >
+            { ", " * t * }
+            {
+              s nameptr "{ll}" format.name$ duplicate$ "others" =
+                { 't := }
+                { pop$ }
+              if$
+              "," *
+              t "others" =
+                {
+                  " " * bbl.etal *
+                }
+                { " " * t * }
+              if$
+            }
+          if$
+        }
+        't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+  } if$
+}
+FUNCTION {format.names.ed}
+{
+  'bibinfo :=
+  duplicate$ empty$ 'skip$ {
+  's :=
+  "" 't :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr
+      "{f{.}.~}{vv~}{ll}{ jj}"
+      format.name$
+      bibinfo bibinfo.check
+      't :=
+      nameptr #1 >
+        {
+          namesleft #1 >
+            { ", " * t * }
+            {
+              s nameptr "{ll}" format.name$ duplicate$ "others" =
+                { 't := }
+                { pop$ }
+              if$
+              "," *
+              t "others" =
+                {
+
+                  " " * bbl.etal *
+                }
+                { " " * t * }
+              if$
+            }
+          if$
+        }
+        't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+  } if$
+}
+FUNCTION {format.authors}
+{ author "author" format.names
+}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+    {
+      " " *
+      get.bbl.editor
+%      capitalize
+   "(" swap$ * ")" *
+      *
+    }
+  if$
+}
+FUNCTION {format.note}
+{
+ note empty$
+    { "" }
+    { note #1 #1 substring$
+      duplicate$ "{" =
+        'skip$
+        { output.state mid.sentence =
+          { "l" }
+          { "u" }
+        if$
+        change.case$
+        }
+      if$
+      note #2 global.max$ substring$ * "note" bibinfo.check
+    }
+  if$
+}
+
+FUNCTION {format.title}
+{ title
+  duplicate$ empty$ 'skip$
+    { "t" change.case$ }
+  if$
+  "title" bibinfo.check
+}
+FUNCTION {output.bibitem}
+{ newline$
+  "\bibitem{" write$
+  cite$ write$
+  "}" write$
+  newline$
+  ""
+  before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{
+  't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+        { t #1 #2 substring$ "--" = not
+            { "--" *
+              t #2 global.max$ substring$ 't :=
+            }
+            {   { t #1 #1 substring$ "-" = }
+                { "-" *
+                  t #2 global.max$ substring$ 't :=
+                }
+              while$
+            }
+          if$
+        }
+        { t #1 #1 substring$ *
+          t #2 global.max$ substring$ 't :=
+        }
+      if$
+    }
+  while$
+}
+
+FUNCTION {word.in}
+{ bbl.in capitalize
+  ":" *
+  " " * }
+
+FUNCTION {format.date}
+{
+  month "month" bibinfo.check
+  duplicate$ empty$
+  year  "year"  bibinfo.check duplicate$ empty$
+    { swap$ 'skip$
+        { "there's a month but no year in " cite$ * warning$ }
+      if$
+      *
+    }
+    { swap$ 'skip$
+        {
+          swap$
+          " " * swap$
+        }
+      if$
+      *
+      remove.dots
+    }
+  if$
+  duplicate$ empty$
+    'skip$
+    {
+      before.all 'output.state :=
+    " (" swap$ * ")" *
+    }
+  if$
+}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+  duplicate$ empty$ 'skip$
+    {
+    }
+  if$
+}
+FUNCTION {either.or.check}
+{ empty$
+    'pop$
+    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+  if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+    { "" }
+    { bbl.volume volume tie.or.space.prefix
+      "volume" bibinfo.check * *
+      series "series" bibinfo.check
+      duplicate$ empty$ 'pop$
+        { emphasize ", " * swap$ * }
+      if$
+      "volume and number" number either.or.check
+    }
+  if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+    { number empty$
+        { series field.or.null }
+        { output.state mid.sentence =
+            { bbl.number }
+            { bbl.number capitalize }
+          if$
+          number tie.or.space.prefix "number" bibinfo.check * *
+          series empty$
+            { "there's a number but no series in " cite$ * warning$ }
+            { bbl.in space.word *
+              series "series" bibinfo.check *
+            }
+          if$
+        }
+      if$
+    }
+    { "" }
+  if$
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+    {
+      output.state mid.sentence =
+        { "l" }
+        { "t" }
+      if$ change.case$
+      "edition" bibinfo.check
+      " " * bbl.edition *
+    }
+  if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty$ not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+        { #1 'multiresult := }
+        { t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+    { duplicate$ multi.page.check
+        {
+          bbl.pages swap$
+          n.dashify
+        }
+        {
+          bbl.page swap$
+        }
+      if$
+      tie.or.space.prefix
+      "pages" bibinfo.check
+      * *
+    }
+  if$
+}
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+    { swap$ duplicate$ empty$
+        { pop$ pop$ format.pages }
+        {
+          ", " *
+          swap$
+          n.dashify
+          pages multi.page.check
+            'titto.bbl.pages
+            'titto.bbl.page
+          if$
+          swap$ tie.or.space.prefix
+          "pages" bibinfo.check
+          * *
+          *
+        }
+      if$
+    }
+  if$
+}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+  duplicate$ empty$ 'pop$
+    { swap$ duplicate$ empty$ 'skip$
+      {
+          ", " *
+      }
+      if$
+      swap$ *
+    }
+  if$
+}
+FUNCTION {format.vol.num.pages} % this function is used only for journal entries
+{ volume field.or.null
+  duplicate$ empty$ 'skip$
+    {
+%     bbl.volume swap$ tie.or.space.prefix
+      titto.bbl.volume swap$ titto.space.prefix
+%             rationale for the change above: for journals you don't want "vol." label
+%             hence it does not make sense to attach the journal number to the label when
+%             it is short
+      "volume" bibinfo.check
+      * *
+    }
+  if$
+  number "number" bibinfo.check duplicate$ empty$ 'skip$
+    {
+      swap$ duplicate$ empty$
+        { "there's a number but no volume in " cite$ * warning$ }
+        'skip$
+      if$
+      swap$
+      "(" swap$ * ")" *
+    }
+  if$ *
+  eid empty$
+    { format.journal.pages }
+    { format.journal.eid }
+  if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+        { bbl.chapter }
+        { type "l" change.case$
+          "type" bibinfo.check
+        }
+      if$
+      chapter tie.or.space.prefix
+      "chapter" bibinfo.check
+      * *
+      pages empty$
+        'skip$
+        { ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.booktitle}
+{
+  booktitle "booktitle" bibinfo.check
+}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+    {
+%     editor "editor" format.names.ed duplicate$ empty$ 'pop$ % changed by titto
+      editor "editor" format.names duplicate$ empty$ 'pop$
+        {
+          " " *
+          get.bbl.editor
+%          capitalize
+          "(" swap$ * ") " *
+          * swap$
+          * }
+      if$
+      word.in swap$ *
+    }
+  if$
+}
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+  key empty$ not and
+    { "all relevant fields are empty in " cite$ * warning$ }
+    'skip$
+  if$
+}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+    'pop$
+    { swap$ pop$
+      "t" change.case$ "type" bibinfo.check
+    }
+  if$
+}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+  type duplicate$ empty$
+    { pop$ bbl.techrep }
+    'skip$
+  if$
+  "type" bibinfo.check
+  swap$ duplicate$ empty$
+    { pop$ "t" change.case$ }
+    { tie.or.space.prefix * * }
+  if$
+}
+FUNCTION {format.article.crossref}
+{
+  key duplicate$ empty$
+    { pop$
+      journal duplicate$ empty$
+        { "need key or journal for " cite$ * " to crossref " * crossref * warning$ }
+        { "journal" bibinfo.check emphasize word.in swap$ * }
+      if$
+    }
+    { word.in swap$ * " " *}
+  if$
+  " \cite{" * crossref * "}" *
+}
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+  "editor" bibinfo.check
+  editor num.names$ duplicate$
+  #2 >
+    { pop$
+      "editor" bibinfo.check
+      " " * bbl.etal
+      *
+    }
+    { #2 <
+        'skip$
+        { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+            {
+              "editor" bibinfo.check
+              " " * bbl.etal
+              *
+            }
+            {
+             bbl.and space.word
+              * editor #2 "{vv~}{ll}" format.name$
+              "editor" bibinfo.check
+              *
+            }
+          if$
+        }
+      if$
+    }
+  if$
+}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+      pop$ word.in
+    }
+    { bbl.volume
+      capitalize
+      swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+    }
+  if$
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { series empty$
+            { "need editor, key, or series for " cite$ * " to crossref " *
+              crossref * warning$
+              "" *
+            }
+            { series emphasize * }
+          if$
+        }
+        { key * }
+      if$
+    }
+    { format.crossref.editor * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { format.booktitle duplicate$ empty$
+            { "need editor, key, or booktitle for " cite$ * " to crossref " *
+              crossref * warning$
+            }
+            { word.in swap$ * }
+          if$
+        }
+        { word.in key * " " *}
+      if$
+    }
+    { word.in format.crossref.editor * " " *}
+  if$
+  " \cite{" * crossref * "}" *
+}
+FUNCTION {format.org.or.pub}
+{ 't :=
+  ""
+  address empty$ t empty$ and
+    'skip$
+    {
+      t empty$
+        { address "address" bibinfo.check *
+        }
+        { t *
+          address empty$
+            'skip$
+            { ", " * address "address" bibinfo.check * }
+          if$
+        }
+      if$
+    }
+  if$
+}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+  format.authors "author" output.check
+  add.colon
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    {
+      journal
+      "journal" bibinfo.check
+      "journal" output.check
+      add.blank
+      format.vol.num.pages output
+      format.date "year" output.check
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+%  new.block
+  format.url output
+%  new.block
+  format.note output
+  fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check
+      add.colon
+    }
+    { format.authors output.nonnull
+      add.colon
+      crossref missing$
+        { "author and editor" editor either.or.check }
+        'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      new.block
+      new.sentence
+      format.number.series output
+      format.publisher.address output
+    }
+    {
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+%  new.block
+  format.url output
+%  new.block
+  format.note output
+  fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+  format.authors output
+  add.colon
+  new.block
+  format.title "title" output.check
+  new.block
+  howpublished "howpublished" bibinfo.check output
+  address "address" bibinfo.check output
+  format.date output
+%  new.block
+  format.url output
+%  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check
+      add.colon
+    }
+    { format.authors output.nonnull
+      add.colon
+      crossref missing$
+        { "author and editor" editor either.or.check }
+        'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    {
+      format.bvolume output
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      new.sentence
+      format.number.series output
+      format.publisher.address output
+    }
+    {
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+%  new.block
+  format.url output
+%  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors "author" output.check
+  add.colon
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.chapter.pages output
+      new.sentence
+      format.number.series output
+      format.publisher.address output
+      format.edition output
+      format.date "year" output.check
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+%  new.block
+  format.url output
+%  new.block
+  format.note output
+  fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.authors "author" output.check
+  add.colon
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      new.sentence % added by titto
+      format.bvolume output
+      format.pages output
+      new.sentence
+      format.number.series output
+      publisher empty$
+        { format.organization.address output }
+        { organization "organization" bibinfo.check output
+          format.publisher.address output
+        }
+      if$
+      format.date "year" output.check
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+%  new.block
+  format.url output
+%  new.block
+  format.note output
+  fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+  author empty$
+    { organization "organization" bibinfo.check
+      duplicate$ empty$ 'pop$
+        { output
+          address "address" bibinfo.check output
+        }
+      if$
+    }
+    { format.authors output.nonnull }
+  if$
+  add.colon
+  new.block
+  format.btitle "title" output.check
+  author empty$
+    { organization empty$
+        {
+          address new.block.checka
+          address "address" bibinfo.check output
+        }
+        'skip$
+      if$
+    }
+    {
+      organization address new.block.checkb
+      organization "organization" bibinfo.check output
+      address "address" bibinfo.check output
+    }
+  if$
+  format.edition output
+  format.date output
+%  new.block
+  format.url output
+%  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  add.colon
+  new.block
+  format.btitle
+  "title" output.check
+  new.block
+  bbl.mthesis format.thesis.type output.nonnull
+  school "school" bibinfo.warn output
+  address "address" bibinfo.check output
+  format.date "year" output.check
+%  new.block
+  format.url output
+%  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+  format.authors output
+  add.colon
+  title howpublished new.block.checkb
+  format.title output
+  howpublished new.block.checka
+  howpublished "howpublished" bibinfo.check output
+  format.date output
+%  new.block
+  format.url output
+%  new.block
+  format.note output
+  fin.entry
+  empty.misc.check
+}
+FUNCTION {phdthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  add.colon
+  new.block
+  format.btitle
+  "title" output.check
+  new.block
+  bbl.phdthesis format.thesis.type output.nonnull
+  school "school" bibinfo.warn output
+  address "address" bibinfo.check output
+  format.date "year" output.check
+%  new.block
+  format.url output
+%  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+  editor empty$
+    { organization "organization" bibinfo.check output
+    }
+    { format.editors output.nonnull }
+  if$
+  add.colon
+  new.block
+  format.btitle "title" output.check
+  format.bvolume output
+  editor empty$
+    { publisher empty$
+        {  format.number.series output }
+        {
+          new.sentence
+          format.number.series output
+          format.publisher.address output
+        }
+      if$
+    }
+    { publisher empty$
+        {
+          new.sentence
+          format.number.series output
+          format.organization.address output }
+        {
+          new.sentence
+          format.number.series output
+          organization "organization" bibinfo.check output
+          format.publisher.address output
+        }
+      if$
+     }
+  if$
+      format.date "year" output.check
+%  new.block
+  format.url output
+%  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+  format.authors "author" output.check
+  add.colon
+  new.block
+  format.title
+  "title" output.check
+  new.block
+  format.tr.number output.nonnull
+  institution "institution" bibinfo.warn output
+  address "address" bibinfo.check output
+  format.date "year" output.check
+%  new.block
+  format.url output
+%  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+  format.authors "author" output.check
+  add.colon
+  new.block
+  format.title "title" output.check
+  format.date output
+%  new.block
+  format.url output
+%  new.block
+  format.note "note" output.check
+  fin.entry
+}
+
+FUNCTION {default.type} { misc }
+READ
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+INTEGERS { len }
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+FUNCTION {sort.format.names}
+{ 's :=
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr
+      "{ll{ }}{  ff{ }}{  jj{ }}"
+      format.name$ 't :=
+      nameptr #1 >
+        {
+          "   "  *
+          namesleft #1 = t "others" = and
+            { "zzzzz" * }
+            { t sortify * }
+          if$
+        }
+        { t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+        { "to sort, need author or key in " cite$ * warning$
+          ""
+        }
+        { key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+        { key empty$
+            { "to sort, need author, editor, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+        { key empty$
+            { "to sort, need author, organization, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+        { key empty$
+            { "to sort, need editor, organization, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+FUNCTION {presort}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+        'editor.organization.sort
+        { type$ "manual" =
+            'author.organization.sort
+            'author.sort
+          if$
+        }
+      if$
+    }
+  if$
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+ITERATE {presort}
+SORT
+STRINGS { longest.label }
+INTEGERS { number.label longest.label.width }
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #1 'number.label :=
+  #0 'longest.label.width :=
+}
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+  number.label #1 + 'number.label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+}
+EXECUTE {initialize.longest.label}
+ITERATE {longest.label.pass}
+FUNCTION {begin.bib}
+{ preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{"  longest.label  * "}" *
+  write$ newline$
+  "\providecommand{\url}[1]{\texttt{#1}}"
+  write$ newline$
+  "\providecommand{\urlprefix}{URL }"
+  write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `titto.bst'.
+
+
+