diff --git a/applications/solvers/combustion/fireFoam/Allwmake b/applications/solvers/combustion/fireFoam/Allwmake
deleted file mode 100755
index f32c72860dbd12c0d8ea29e4b94bc36fb7b85547..0000000000000000000000000000000000000000
--- a/applications/solvers/combustion/fireFoam/Allwmake
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-cd ${0%/*} || exit 1    # run from this directory
-set -x
-
-wmake libso combustionModels
-wmake
-
-# ----------------------------------------------------------------- end-of-file
diff --git a/applications/solvers/combustion/fireFoam/Make/files b/applications/solvers/combustion/fireFoam/Make/files
index 826d736bd0f66081e00d868f15363948aa6211a5..2d50e5e7650b2b6cb48440ca6b6ddebbc91f4f2d 100644
--- a/applications/solvers/combustion/fireFoam/Make/files
+++ b/applications/solvers/combustion/fireFoam/Make/files
@@ -1,4 +1,3 @@
 fireFoam.C
 
 EXE = $(FOAM_APPBIN)/fireFoam
-
diff --git a/applications/solvers/combustion/fireFoam/Make/options b/applications/solvers/combustion/fireFoam/Make/options
index 9f7a66b39e38bd6c8e73320f22a01b59bd83e2a9..cf5b4b09764eea8074ad571a9942bbb1b7b61924 100644
--- a/applications/solvers/combustion/fireFoam/Make/options
+++ b/applications/solvers/combustion/fireFoam/Make/options
@@ -1,20 +1,52 @@
 EXE_INC = \
-    -IcombustionModels/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
     -I$(LIB_SRC)/finiteVolume/lnInclude \
+    -I${LIB_SRC}/meshTools/lnInclude \
     -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
-    -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude
+    -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/solid/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/basicSolidThermo/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/solidChemistryModel/lnInclude \
+    -I$(LIB_SRC)/combustionModels/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/properties/solidProperties/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/properties/solidMixtureProperties/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/properties/liquidProperties/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/properties/liquidMixtureProperties/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/thermophysicalFunctions/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \
+    -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude \
+    -I$(LIB_SRC)/combustionModels/lnInclude \
+    -I$(LIB_SRC)/regionModels/regionModel/lnInclude \
+    -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \
+    -I$(LIB_SRC)/regionModels/pyrolysisModels/lnInclude \
+    -I$(LIB_SRC)/lagrangian/basic/lnInclude \
+    -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \
+    -I$(LIB_SRC)/ODE/lnInclude \
+    -I$(LIB_SRC)/sampling/lnInclude
 
 
 EXE_LIBS = \
-    -lfireFoamCombustionModels \
-    -lspecie \
-    -lreactionThermophysicalModels \
-    -lbasicThermophysicalModels \
     -lfiniteVolume \
-    -lcompressibleTurbulenceModel \
-    -lcompressibleLESModels \
+    -lmeshTools \
     -lcompressibleRASModels \
-    -lradiationModels
+    -lcompressibleLESModels \
+    -lspecie \
+    -lbasicThermophysicalModels \
+    -lsolidProperties \
+    -lsolidMixtureProperties \
+    -lthermophysicalFunctions \
+    -lreactionThermophysicalModels \
+    -lSLGThermo \
+    -lchemistryModel \
+    -lsolidChemistryModel \
+    -lcombustionModels \
+    -lregionModels \
+    -lradiationModels \
+    -lsurfaceFilmModels \
+    -lpyrolysisModels \
+    -llagrangianIntermediate \
+    -lODE \
+    -lsampling
diff --git a/applications/solvers/combustion/fireFoam/UEqn.H b/applications/solvers/combustion/fireFoam/UEqn.H
index c4a865300d2b26df03a76af95d0710d60a9f5818..a64e50a2d24d19b3f1dd25e4bc73acbcfc27a356 100644
--- a/applications/solvers/combustion/fireFoam/UEqn.H
+++ b/applications/solvers/combustion/fireFoam/UEqn.H
@@ -1,24 +1,26 @@
-fvVectorMatrix UEqn
-(
-    fvm::ddt(rho, U)
-  + fvm::div(phi, U)
-  + turbulence->divDevRhoReff(U)
-);
+    fvVectorMatrix UEqn
+    (
+        fvm::ddt(rho, U)
+      + fvm::div(phi, U)
+      + turbulence->divDevRhoReff(U)
+     ==
+        parcels.SU(U)
+    );
 
-UEqn.relax();
+    UEqn.relax();
 
-if (pimple.momentumPredictor())
-{
-    solve
-    (
-        UEqn
-    ==
-        fvc::reconstruct
+    if (pimple.momentumPredictor())
+    {
+        solve
         (
+            UEqn
+          ==
+            fvc::reconstruct
             (
-            - ghf*fvc::snGrad(rho)
-            - fvc::snGrad(p_rgh)
-            )*mesh.magSf()
-        )
-    );
-}
+                (
+                  - ghf*fvc::snGrad(rho)
+                  - fvc::snGrad(p_rgh)
+                )*mesh.magSf()
+            )
+        );
+    }
diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/YhsEqn.H b/applications/solvers/combustion/fireFoam/YhsEqn.H
similarity index 99%
rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/YhsEqn.H
rename to applications/solvers/combustion/fireFoam/YhsEqn.H
index 18ebd5915f69e76d97bc63c4b3ea2abbb8ad46ab..aed41a4431359997c531556cab966fd23d2c514e 100644
--- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/YhsEqn.H
+++ b/applications/solvers/combustion/fireFoam/YhsEqn.H
@@ -9,6 +9,7 @@ tmp<fv::convectionScheme<scalar> > mvConvection
     )
 );
 {
+    radiation->correct();
     combustion->correct();
     dQ = combustion->dQ();
     label inertIndex = -1;
@@ -65,7 +66,5 @@ tmp<fv::convectionScheme<scalar> > mvConvection
 
     thermo.correct();
 
-    radiation->correct();
-
     Info<< "min/max(T) = " << min(T).value() << ", " << max(T).value() << endl;
 }
diff --git a/applications/solvers/combustion/fireFoam/combustionModels/Make/files b/applications/solvers/combustion/fireFoam/combustionModels/Make/files
deleted file mode 100644
index bef447f0b0d9bf3da970aca33fdb029843e3ca33..0000000000000000000000000000000000000000
--- a/applications/solvers/combustion/fireFoam/combustionModels/Make/files
+++ /dev/null
@@ -1,9 +0,0 @@
-combustionModel/combustionModel.C
-combustionModel/newCombustionModel.C
-
-infinitelyFastChemistry/infinitelyFastChemistry.C
-
-noCombustion/noCombustion.C
-
-LIB = $(FOAM_LIBBIN)/libfireFoamCombustionModels
-
diff --git a/applications/solvers/combustion/fireFoam/combustionModels/Make/options b/applications/solvers/combustion/fireFoam/combustionModels/Make/options
deleted file mode 100644
index 3f557113c4810506ff138816c8473206d06f49fb..0000000000000000000000000000000000000000
--- a/applications/solvers/combustion/fireFoam/combustionModels/Make/options
+++ /dev/null
@@ -1,9 +0,0 @@
-EXE_INC = \
-    -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
-    -I$(FOAM_SRC)/turbulenceModels/compressible/turbulenceModel \
-    -I$(FOAM_SRC)/finiteVolume/lnInclude
-
-LIB_LIBS = \
-    -lfiniteVolume
diff --git a/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/combustionModel.C b/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/combustionModel.C
deleted file mode 100644
index bd5f92db36b6f486efc507d22fb1e73b4de094e2..0000000000000000000000000000000000000000
--- a/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/combustionModel.C
+++ /dev/null
@@ -1,108 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-#include "combustionModel.H"
-#include "fvm.H"
-
-// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
-
-namespace Foam
-{
-    defineTypeNameAndDebug(combustionModel, 0);
-    defineRunTimeSelectionTable(combustionModel, dictionary);
-}
-
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::combustionModel::combustionModel
-(
-    const dictionary& combustionProperties,
-    const hsCombustionThermo& thermo,
-    const compressible::turbulenceModel& turbulence,
-    const surfaceScalarField& phi,
-    const volScalarField& rho
-)
-:
-    combustionModelCoeffs_
-    (
-        combustionProperties.subDict
-        (
-            word(combustionProperties.lookup("combustionModel")) + "Coeffs"
-        )
-    ),
-    thermo_(thermo),
-    turbulence_(turbulence),
-    mesh_(phi.mesh()),
-    phi_(phi),
-    rho_(rho),
-    stoicRatio_(thermo.lookup("stoichiometricAirFuelMassRatio")),
-    s_(thermo.lookup("stoichiometricOxygenFuelMassRatio")),
-    qFuel_(thermo_.lookup("qFuel")),
-    composition_(thermo.composition())
-{}
-
-
-// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
-
-Foam::combustionModel::~combustionModel()
-{}
-
-
-// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
-
-Foam::tmp<Foam::fvScalarMatrix>
-Foam::combustionModel::combustionModel::R(volScalarField& fu) const
-{
-    const basicMultiComponentMixture& composition = thermo_.composition();
-    const volScalarField& ft = composition.Y("ft");
-    volScalarField fres(composition.fres(ft, stoicRatio_.value()));
-    volScalarField wFuelNorm(this->wFuelNorm()*pos(fu - fres));
-
-    return wFuelNorm*fres - fvm::Sp(wFuelNorm, fu);
-}
-
-
-Foam::tmp<Foam::volScalarField> Foam::combustionModel::combustionModel::dQ
-(
-    const fvScalarMatrix& Rfu
-) const
-{
-    const basicMultiComponentMixture& composition = thermo_.composition();
-    const volScalarField& fu = composition.Y("fu");
-
-    return (-qFuel_)*(Rfu & fu);
-}
-
-
-bool Foam::combustionModel::read(const dictionary& combustionProperties)
-{
-    combustionModelCoeffs_ = combustionProperties.subDict(type() + "Coeffs");
-
-    return true;
-}
-
-
-// ************************************************************************* //
diff --git a/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/combustionModel.H b/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/combustionModel.H
deleted file mode 100644
index 1aa44ffcad15cf0e5d9ce903263e2ea4767c40c5..0000000000000000000000000000000000000000
--- a/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/combustionModel.H
+++ /dev/null
@@ -1,209 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-Class
-    Foam::combustionModel
-
-Description
-    Base class for all non-premixed combustion models.
-
-SourceFiles
-    combustionModel.C
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef combustionModel_H
-#define combustionModel_H
-
-#include "IOdictionary.H"
-#include "hsCombustionThermo.H"
-#include "turbulenceModel.H"
-#include "multivariateSurfaceInterpolationScheme.H"
-#include "runTimeSelectionTables.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-
-/*---------------------------------------------------------------------------*\
-                        Class combustionModel Declaration
-\*---------------------------------------------------------------------------*/
-
-class combustionModel
-{
-
-protected:
-
-    // Protected data
-
-        //- Dictionary of coefficients for the particular model
-        dictionary combustionModelCoeffs_;
-
-        //- Reference to the thermodynamic
-        const hsCombustionThermo& thermo_;
-
-        //- Reference to the turbulence model
-        const compressible::turbulenceModel& turbulence_;
-
-        //- Reference to the mesh database
-        const fvMesh& mesh_;
-
-        //- Reference to mass-flux field
-        const surfaceScalarField& phi_;
-
-        //- Reference to the density field
-        const volScalarField& rho_;
-
-        //- Stoichiometric air-fuel mass ratio
-        dimensionedScalar stoicRatio_;
-
-        //- Stoichiometric oxygen-fuel mass ratio
-        dimensionedScalar s_;
-
-        //- Heat of combustion (J/Kg)
-        dimensionedScalar qFuel_;
-
-
-private:
-
-    // Private Member Functions
-
-        //- Disallow copy construct
-        combustionModel(const combustionModel&);
-
-        //- Disallow default bitwise assignment
-        void operator=(const combustionModel&);
-
-        const basicMultiComponentMixture& composition_;
-
-
-public:
-
-    //- Runtime type information
-    TypeName("combustionModel");
-
-
-    // Declare run-time constructor selection table
-
-        declareRunTimeSelectionTable
-        (
-            autoPtr,
-            combustionModel,
-            dictionary,
-            (
-                const dictionary& combustionProperties,
-                const hsCombustionThermo& thermo,
-                const compressible::turbulenceModel& turbulence,
-                const surfaceScalarField& phi,
-                const volScalarField& rho
-            ),
-            (
-                combustionProperties,
-                thermo,
-                turbulence,
-                phi,
-                rho
-            )
-        );
-
-
-    // Selectors
-
-        //- Return a reference to the selected combustion model
-        static autoPtr<combustionModel> New
-        (
-            const dictionary& combustionProperties,
-            const hsCombustionThermo& thermo,
-            const compressible::turbulenceModel& turbulence,
-            const surfaceScalarField& phi,
-            const volScalarField& rho
-        );
-
-
-    // Constructors
-
-        //- Construct from components
-        combustionModel
-        (
-            const dictionary& combustionProperties,
-            const hsCombustionThermo& thermo,
-            const compressible::turbulenceModel& turbulence,
-            const surfaceScalarField& phi,
-            const volScalarField& rho
-        );
-
-
-    //- Destructor
-    virtual ~combustionModel();
-
-
-    // Member Functions
-
-        // Access functions
-
-            //- Access composition
-            const basicMultiComponentMixture& composition() const
-            {
-                return composition_;
-            }
-
-            //- Access combustion dictionary
-            const dictionary combustionModelCoeffs() const
-            {
-                return combustionModelCoeffs_;
-            }
-
-            //- Access heat of combustion
-            const dimensionedScalar qFuel() const
-            {
-                return qFuel_;
-            }
-
-        //- Return normalised consumption rate of (fu - fres)
-        virtual tmp<volScalarField> wFuelNorm() const = 0;
-
-        //- Fuel consumption rate matrix i.e. source-term for the fuel equation
-        virtual tmp<fvScalarMatrix> R(volScalarField& fu) const;
-
-        //- Heat-release rate calculated from the given
-        //  fuel consumption rate matrix
-        virtual tmp<volScalarField> dQ(const fvScalarMatrix& Rfu) const;
-
-        //- Correct combustion rate
-        virtual void correct() = 0;
-
-        //- Update properties from given dictionary
-        virtual bool read(const dictionary& combustionProperties) = 0;
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace Foam
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/newCombustionModel.C b/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/newCombustionModel.C
deleted file mode 100644
index 7164844577ba4227e75ae3db3e9dfbd57e49e70a..0000000000000000000000000000000000000000
--- a/applications/solvers/combustion/fireFoam/combustionModels/combustionModel/newCombustionModel.C
+++ /dev/null
@@ -1,66 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-#include "combustionModel.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-Foam::autoPtr<Foam::combustionModel> Foam::combustionModel::New
-(
-    const dictionary& combustionProperties,
-    const hsCombustionThermo& thermo,
-    const compressible::turbulenceModel& turbulence,
-    const surfaceScalarField& phi,
-    const volScalarField& rho
-)
-{
-    word combustionModelTypeName = combustionProperties.lookup
-    (
-        "combustionModel"
-    );
-
-    Info<< "Selecting combustion model " << combustionModelTypeName << endl;
-
-    dictionaryConstructorTable::iterator cstrIter =
-        dictionaryConstructorTablePtr_->find(combustionModelTypeName);
-
-    if (cstrIter == dictionaryConstructorTablePtr_->end())
-    {
-        FatalErrorIn
-        (
-            "combustionModel::New"
-        )   << "Unknown combustionModel type "
-            << combustionModelTypeName << endl << endl
-            << "Valid  combustionModels are : " << endl
-            << dictionaryConstructorTablePtr_->sortedToc()
-            << exit(FatalError);
-    }
-
-    return autoPtr<combustionModel>
-        (cstrIter()(combustionProperties, thermo, turbulence, phi, rho));
-}
-
-
-// ************************************************************************* //
diff --git a/applications/solvers/combustion/fireFoam/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.C b/applications/solvers/combustion/fireFoam/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.C
deleted file mode 100644
index f147911f765fa2ee94ffbaceffb3978bda4c362d..0000000000000000000000000000000000000000
--- a/applications/solvers/combustion/fireFoam/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.C
+++ /dev/null
@@ -1,93 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-#include "infinitelyFastChemistry.H"
-#include "addToRunTimeSelectionTable.H"
-
-// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
-
-namespace Foam
-{
-namespace combustionModels
-{
-    defineTypeNameAndDebug(infinitelyFastChemistry, 0);
-    addToRunTimeSelectionTable
-    (
-        combustionModel,
-        infinitelyFastChemistry,
-        dictionary
-    );
-}
-}
-
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::combustionModels::infinitelyFastChemistry::infinitelyFastChemistry
-(
-    const dictionary& combustionProperties,
-    const hsCombustionThermo& thermo,
-    const compressible::turbulenceModel& turbulence,
-    const surfaceScalarField& phi,
-    const volScalarField& rho
-)
-:
-    combustionModel(combustionProperties, thermo, turbulence, phi, rho),
-    C_(readScalar(combustionModelCoeffs_.lookup("C")))
-{}
-
-
-// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
-
-Foam::combustionModels::infinitelyFastChemistry::~infinitelyFastChemistry()
-{}
-
-
-// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
-
-void Foam::combustionModels::infinitelyFastChemistry::correct()
-{}
-
-
-Foam::tmp<Foam::volScalarField>
-Foam::combustionModels::infinitelyFastChemistry::wFuelNorm() const
-{
-    return rho_/(mesh_.time().deltaT()*C_);
-}
-
-
-bool Foam::combustionModels::infinitelyFastChemistry::read
-(
-    const dictionary& combustionProperties
-)
-{
-    combustionModel::read(combustionProperties);
-    combustionModelCoeffs_.lookup("C") >> C_ ;
-
-    return true;
-}
-
-
-// ************************************************************************* //
diff --git a/applications/solvers/combustion/fireFoam/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.H b/applications/solvers/combustion/fireFoam/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.H
deleted file mode 100644
index 80d55328dfe295d8deaa61ff9df46e4d65adf75f..0000000000000000000000000000000000000000
--- a/applications/solvers/combustion/fireFoam/combustionModels/infinitelyFastChemistry/infinitelyFastChemistry.H
+++ /dev/null
@@ -1,118 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-Class
-    Foam::combustionModels::infinitelyFastChemistry
-
-Description
-    Simple infinitely fast chemistry combustion model based on the principle
-    mixed is burnt. Additional parameter C is used to distribute the heat
-    release rate.in time
-
-SourceFiles
-    infinitelyFastChemistry.C
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef infinitelyFastChemistry_H
-#define infinitelyFastChemistry_H
-
-#include "fvc.H"
-#include "combustionModel.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-namespace combustionModels
-{
-
-/*---------------------------------------------------------------------------*\
-                Class infinitelyFastChemistry Declaration
-\*---------------------------------------------------------------------------*/
-
-class infinitelyFastChemistry
-:
-    public combustionModel
-{
-    // Private data
-
-        //- Model constant
-        scalar C_;
-
-    // Private Member Functions
-
-        //- Disallow copy construct
-        infinitelyFastChemistry(const infinitelyFastChemistry&);
-
-        //- Disallow default bitwise assignment
-        void operator=(const infinitelyFastChemistry&);
-
-
-public:
-
-    //- Runtime type information
-    TypeName("infinitelyFastChemistry");
-
-
-    // Constructors
-
-        //- Construct from components
-        infinitelyFastChemistry
-        (
-            const dictionary& combustionProperties,
-            const hsCombustionThermo& thermo,
-            const compressible::turbulenceModel& turbulence,
-            const surfaceScalarField& phi,
-            const volScalarField& rho
-        );
-
-
-    // Destructor
-
-        virtual ~infinitelyFastChemistry();
-
-
-    // Member Functions
-
-        //- Update properties from given dictionary
-        virtual bool read(const dictionary& combustionProperties);
-
-        //- Correct combustion rate
-        virtual void correct();
-
-        //- Return normalised consumption rate of (fu - fres)
-        virtual tmp<volScalarField> wFuelNorm() const;
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace combustionModels
-} // End namespace Foam
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/applications/solvers/combustion/fireFoam/combustionModels/noCombustion/noCombustion.C b/applications/solvers/combustion/fireFoam/combustionModels/noCombustion/noCombustion.C
deleted file mode 100644
index fd709b75e1699acf92b3c95d469f28ed43ff7fd5..0000000000000000000000000000000000000000
--- a/applications/solvers/combustion/fireFoam/combustionModels/noCombustion/noCombustion.C
+++ /dev/null
@@ -1,102 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-\*---------------------------------------------------------------------------*/
-
-#include "noCombustion.H"
-#include "addToRunTimeSelectionTable.H"
-
-// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
-
-namespace Foam
-{
-namespace combustionModels
-{
-    defineTypeNameAndDebug(noCombustion, 0);
-    addToRunTimeSelectionTable
-    (
-        combustionModel,
-        noCombustion,
-        dictionary
-    );
-}
-}
-
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::combustionModels::noCombustion::noCombustion
-(
-    const dictionary& combustionProperties,
-    const hsCombustionThermo& thermo,
-    const compressible::turbulenceModel& turbulence,
-    const surfaceScalarField& phi,
-    const volScalarField& rho
-)
-:
-    combustionModel(combustionProperties, thermo, turbulence, phi, rho)
-{}
-
-
-// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
-
-Foam::combustionModels::noCombustion::~noCombustion()
-{}
-
-
-void Foam::combustionModels::noCombustion::correct()
-{}
-
-
-Foam::tmp<Foam::volScalarField>
-Foam::combustionModels::noCombustion::wFuelNorm() const
-{
-    return tmp<Foam::volScalarField>
-    (
-        new volScalarField
-        (
-            IOobject
-            (
-                "wFuelNorm",
-                mesh_.time().timeName(),
-                mesh_,
-                IOobject::NO_READ,
-                IOobject::NO_WRITE
-            ),
-            mesh_,
-            dimensionedScalar("wFuelNorm", dimMass/dimTime/pow3(dimLength), 0.0)
-        )
-    );
-}
-
-
-bool Foam::combustionModels::noCombustion::read
-(
-    const dictionary& combustionProperties
-)
-{
-    return combustionModel::read(combustionProperties);
-}
-
-
-// ************************************************************************* //
diff --git a/applications/solvers/combustion/fireFoam/combustionModels/noCombustion/noCombustion.H b/applications/solvers/combustion/fireFoam/combustionModels/noCombustion/noCombustion.H
deleted file mode 100644
index 2ae12b891c507ae3b3671642eb239ebe8d81e411..0000000000000000000000000000000000000000
--- a/applications/solvers/combustion/fireFoam/combustionModels/noCombustion/noCombustion.H
+++ /dev/null
@@ -1,112 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-Class
-    Foam::combustionModel::noCombustion
-
-Description
-    No combustion
-
-SourceFiles
-    noCombustion.C
-
-\*---------------------------------------------------------------------------*/
-
-#ifndef noCombustion_H
-#define noCombustion_H
-
-#include "combustionModel.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-namespace combustionModels
-{
-
-/*---------------------------------------------------------------------------*\
-                          Class noCombustion Declaration
-\*---------------------------------------------------------------------------*/
-
-class noCombustion
-:
-    public combustionModel
-{
-    // Private data
-
-
-    // Private Member Functions
-
-        //- Disallow copy construct
-        noCombustion(const noCombustion&);
-
-        //- Disallow default bitwise assignment
-        void operator=(const noCombustion&);
-
-
-public:
-
-    //- Runtime type information
-    TypeName("noCombustion");
-
-
-    // Constructors
-
-        //- Construct from components
-        noCombustion
-        (
-            const dictionary& combustionProperties,
-            const hsCombustionThermo& thermo,
-            const compressible::turbulenceModel& turbulence,
-            const surfaceScalarField& phi,
-            const volScalarField& rho
-        );
-
-
-    // Destructor
-
-        virtual ~noCombustion();
-
-    // Member Functions
-
-        //- Update properties from given dictionary
-        virtual bool read(const dictionary& combustionProperties);
-
-        //- Correct combustion rate
-        virtual void correct();
-
-        //- Return normalised consumption rate of (fu - fres)
-        virtual tmp<volScalarField> wFuelNorm() const;
-};
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-} // End namespace combustionModels
-} // End namespace Foam
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-#endif
-
-// ************************************************************************* //
diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createClouds.H b/applications/solvers/combustion/fireFoam/createClouds.H
similarity index 100%
rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createClouds.H
rename to applications/solvers/combustion/fireFoam/createClouds.H
diff --git a/applications/solvers/combustion/fireFoam/createFields.H b/applications/solvers/combustion/fireFoam/createFields.H
index 73686c56682d8c2734550e4df957577109454894..f1e152dc320b47f428e326350f66aae48c947338 100644
--- a/applications/solvers/combustion/fireFoam/createFields.H
+++ b/applications/solvers/combustion/fireFoam/createFields.H
@@ -1,147 +1,154 @@
-Info<< "Reading thermophysical properties\n" << endl;
+    Info<< "Reading thermophysical properties\n" << endl;
 
-autoPtr<hsCombustionThermo> pThermo
-(
-    hsCombustionThermo::New(mesh)
-);
-
-hsCombustionThermo& thermo = pThermo();
-
-basicMultiComponentMixture& composition = thermo.composition();
-
-volScalarField rho
-(
-    IOobject
+    autoPtr<hsCombustionThermo> pThermo
     (
-        "rho",
-        runTime.timeName(),
-        mesh,
-        IOobject::NO_READ,
-        IOobject::AUTO_WRITE
-    ),
-    thermo.rho()
-);
-
-dimensionedScalar stoicRatio
-(
-    thermo.lookup("stoichiometricAirFuelMassRatio")
-);
-
-volScalarField& p = thermo.p();
-volScalarField& hs = thermo.hs();
+        hsCombustionThermo::New(mesh)
+    );
+    hsCombustionThermo& thermo = pThermo();
 
-const volScalarField& psi = thermo.psi();
+    SLGThermo slgThermo(mesh, thermo);
 
-volScalarField& ft = composition.Y("ft");
-volScalarField& fu = composition.Y("fu");
+    basicMultiComponentMixture& composition = thermo.composition();
+    PtrList<volScalarField>& Y = composition.Y();
 
+    const word inertSpecie(thermo.lookup("inertSpecie"));
 
-Info<< "Reading field U\n" << endl;
-
-volVectorField U
-(
-    IOobject
+    Info<< "Creating field rho\n" << endl;
+    volScalarField rho
     (
-        "U",
-        runTime.timeName(),
-        mesh,
-        IOobject::MUST_READ,
-        IOobject::AUTO_WRITE
-    ),
-    mesh
-);
-
-#include "compressibleCreatePhi.H"
-
-Info<< "Creating turbulence model\n" << endl;
-autoPtr<compressible::turbulenceModel> turbulence
-(
-    compressible::turbulenceModel::New(rho, U, phi, thermo)
-);
-
-IOdictionary combustionProperties
-(
-    IOobject
+        IOobject
+        (
+            "rho",
+            runTime.timeName(),
+            mesh,
+            IOobject::NO_READ,
+            IOobject::AUTO_WRITE
+        ),
+        thermo.rho()
+    );
+
+    volScalarField& p = thermo.p();
+    volScalarField& hs = thermo.hs();
+    const volScalarField& T = thermo.T();
+    const volScalarField& psi = thermo.psi();
+
+    Info<< "\nReading field U\n" << endl;
+    volVectorField U
     (
-        "combustionProperties",
-        runTime.constant(),
-        mesh,
-        IOobject::MUST_READ_IF_MODIFIED,
-        IOobject::NO_WRITE
-    )
-);
-
-Info<< "Creating combustion model\n" << endl;
-autoPtr<combustionModel> combustion
-(
-    combustionModel::combustionModel::New
+        IOobject
+        (
+            "U",
+            runTime.timeName(),
+            mesh,
+            IOobject::MUST_READ,
+            IOobject::AUTO_WRITE
+        ),
+        mesh
+    );
+
+    #include "compressibleCreatePhi.H"
+
+    Info<< "Creating turbulence model\n" << endl;
+    autoPtr<compressible::turbulenceModel> turbulence
     (
-        combustionProperties,
-        thermo,
-        turbulence(),
-        phi,
-        rho
-    )
-);
-
-
-Info<< "Calculating field g.h\n" << endl;
-volScalarField gh("gh", g & mesh.C());
-surfaceScalarField ghf("gh", g & mesh.Cf());
-
-Info<< "Reading field p_rgh\n" << endl;
-volScalarField p_rgh
-(
-    IOobject
+        compressible::turbulenceModel::New
+        (
+            rho,
+            U,
+            phi,
+            thermo
+        )
+    );
+
+    IOdictionary combustionProperties
     (
-        "p_rgh",
-        runTime.timeName(),
-        mesh,
-        IOobject::MUST_READ,
-        IOobject::AUTO_WRITE
-    ),
-    mesh
-);
-
-// Force p_rgh to be consistent with p
-p_rgh = p - rho*gh;
-
-
-volScalarField dQ
-(
-    IOobject
+        IOobject
+        (
+            "combustionProperties",
+            runTime.constant(),
+            mesh,
+            IOobject::MUST_READ_IF_MODIFIED,
+            IOobject::NO_WRITE
+        )
+    );
+
+    Info<< "Creating combustion model\n" << endl;
+    autoPtr<combustionModel> combustion
+    (
+        combustionModel::combustionModel::New
+        (
+            combustionProperties,
+            thermo,
+            turbulence(),
+            phi,
+            rho
+        )
+    );
+
+    volScalarField dQ
     (
-        "dQ",
-        runTime.timeName(),
+        IOobject
+        (
+            "dQ",
+            runTime.timeName(),
+            mesh,
+            IOobject::NO_READ,
+            IOobject::AUTO_WRITE
+        ),
         mesh,
-        IOobject::NO_READ,
-        IOobject::AUTO_WRITE
-    ),
-    mesh,
-    dimensionedScalar("dQ", dimMass/pow3(dimTime)/dimLength, 0.0)
-);
-
-
-Info<< "Creating field DpDt\n" << endl;
-volScalarField DpDt
-(
-    fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p)
-);
-
-
-dimensionedScalar initialMass = fvc::domainIntegrate(rho);
+        dimensionedScalar("dQ", dimMass/pow3(dimTime)/dimLength, 0.0)
+    );
 
+    Info<< "Creating field DpDt\n" << endl;
+    volScalarField DpDt
+    (
+        "DpDt",
+        fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p)
+    );
 
-multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields;
 
-if (composition.contains("ft"))
-{
-    fields.add(composition.Y("ft"));
-}
+    Info<< "Calculating field g.h\n" << endl;
+    volScalarField gh("gh", g & mesh.C());
 
-if (composition.contains("fu"))
-{
-    fields.add(composition.Y("fu"));
-}
+    surfaceScalarField ghf("ghf", g & mesh.Cf());
 
-fields.add(hs);
+    volScalarField p_rgh
+    (
+        IOobject
+        (
+            "p_rgh",
+            runTime.timeName(),
+            mesh,
+            IOobject::MUST_READ,
+            IOobject::AUTO_WRITE
+        ),
+        mesh
+    );
+
+    // Force p_rgh to be consistent with p
+    p_rgh = p - rho*gh;
+
+    multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields;
+
+    forAll(Y, i)
+    {
+        fields.add(Y[i]);
+    }
+    fields.add(hs);
+
+    IOdictionary additionalControlsDict
+    (
+        IOobject
+        (
+            "additionalControls",
+            runTime.constant(),
+            mesh,
+            IOobject::MUST_READ_IF_MODIFIED,
+            IOobject::NO_WRITE
+        )
+    );
+
+    Switch solvePrimaryRegion
+    (
+        additionalControlsDict.lookup("solvePrimaryRegion")
+    );
diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createPyrolysisModel.H b/applications/solvers/combustion/fireFoam/createPyrolysisModel.H
similarity index 100%
rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createPyrolysisModel.H
rename to applications/solvers/combustion/fireFoam/createPyrolysisModel.H
diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createSurfaceFilmModel.H b/applications/solvers/combustion/fireFoam/createSurfaceFilmModel.H
similarity index 99%
rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createSurfaceFilmModel.H
rename to applications/solvers/combustion/fireFoam/createSurfaceFilmModel.H
index 1db870f0aa76f02a89cc98748782f97fd0f1242b..8ddcc77a5f00eaf83c912e5bf90de389fb336a7f 100644
--- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createSurfaceFilmModel.H
+++ b/applications/solvers/combustion/fireFoam/createSurfaceFilmModel.H
@@ -4,4 +4,3 @@ typedef regionModels::surfaceFilmModels::surfaceFilmModel filmModelType;
 
 autoPtr<filmModelType> tsurfaceFilm(filmModelType::New(mesh, g));
 filmModelType& surfaceFilm = tsurfaceFilm();
-
diff --git a/applications/solvers/combustion/fireFoam/fireFoam.C b/applications/solvers/combustion/fireFoam/fireFoam.C
index a517eccde11383f0a6f4215df73f821917d55405..7c58a722d1676bfa6a6845e754df62344e9c386a 100644
--- a/applications/solvers/combustion/fireFoam/fireFoam.C
+++ b/applications/solvers/combustion/fireFoam/fireFoam.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2004-2011 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2009-2011 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -25,15 +25,22 @@ Application
     fireFoam
 
 Description
-    Transient Solver for Fires and turbulent diffusion flames
+    Transient PIMPLE solver for Fires and turbulent diffusion flames with
+    reacting Lagrangian parcels, surface film and pyrolysis modelling.
 
 \*---------------------------------------------------------------------------*/
 
+#include "mapDistribute.H"
 #include "fvCFD.H"
-#include "hsCombustionThermo.H"
 #include "turbulenceModel.H"
-#include "combustionModel.H"
+#include "basicReactingCloud.H"
+#include "surfaceFilmModel.H"
+#include "pyrolysisModel.H"
 #include "radiationModel.H"
+#include "SLGThermo.H"
+#include "hsCombustionThermo.H"
+#include "solidChemistryModel.H"
+#include "combustionModel.H"
 #include "pimpleControl.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -41,19 +48,25 @@ Description
 int main(int argc, char *argv[])
 {
     #include "setRootCase.H"
+
     #include "createTime.H"
     #include "createMesh.H"
+    #include "readChemistryProperties.H"
     #include "readGravitationalAcceleration.H"
-    #include "initContinuityErrs.H"
     #include "createFields.H"
+    #include "createClouds.H"
+    #include "createSurfaceFilmModel.H"
+    #include "createPyrolysisModel.H"
     #include "createRadiationModel.H"
+    #include "initContinuityErrs.H"
     #include "readTimeControls.H"
     #include "compressibleCourantNo.H"
     #include "setInitialDeltaT.H"
+    #include "readPyrolysisTimeControls.H"
 
     pimpleControl pimple(mesh);
 
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
     Info<< "\nStarting time loop\n" << endl;
 
@@ -61,46 +74,56 @@ int main(int argc, char *argv[])
     {
         #include "readTimeControls.H"
         #include "compressibleCourantNo.H"
+        #include "solidRegionDiffusionNo.H"
+        #include "setMultiRegionDeltaT.H"
         #include "setDeltaT.H"
 
         runTime++;
+
         Info<< "Time = " << runTime.timeName() << nl << endl;
 
-        #include "rhoEqn.H"
+        parcels.evolve();
 
-        // --- Pressure-velocity PIMPLE corrector loop
-        for (pimple.start(); pimple.loop(); pimple++)
-        {
-            #include "UEqn.H"
+        surfaceFilm.evolve();
 
-            #include "ftEqn.H"
-            #include "fuhsEqn.H"
+        pyrolysis->evolve();
 
-            // --- PISO loop
-            for (int corr=0; corr<pimple.nCorr(); corr++)
-            {
-                #include "pEqn.H"
-            }
+        if (solvePrimaryRegion)
+        {
+            #include "rhoEqn.H"
 
-            if (pimple.turbCorr())
+            // --- PIMPLE loop
+            for (pimple.start(); pimple.loop(); pimple++)
             {
-                turbulence->correct();
+                #include "UEqn.H"
+                #include "YhsEqn.H"
+
+                // --- PISO loop
+                for (int corr=1; corr<=pimple.nCorr(); corr++)
+                {
+                    #include "pEqn.H"
+                }
+
+                if (pimple.turbCorr())
+                {
+                    turbulence->correct();
+                }
             }
-        }
 
-        rho = thermo.rho();
+            rho = thermo.rho();
+        }
 
         runTime.write();
 
         Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
             << "  ClockTime = " << runTime.elapsedClockTime() << " s"
             << nl << endl;
-
     }
 
-    Info<< "End\n" << endl;
+    Info<< "End" << endl;
 
-    return 0;
+    return(0);
 }
 
+
 // ************************************************************************* //
diff --git a/applications/solvers/combustion/fireFoam/ftEqn.H b/applications/solvers/combustion/fireFoam/ftEqn.H
deleted file mode 100644
index 57406da753360b61b8b352bf5f737a64cb057bf3..0000000000000000000000000000000000000000
--- a/applications/solvers/combustion/fireFoam/ftEqn.H
+++ /dev/null
@@ -1,25 +0,0 @@
-tmp<fv::convectionScheme<scalar> > mvConvection
-(
-    fv::convectionScheme<scalar>::New
-    (
-        mesh,
-        fields,
-        phi,
-        mesh.divScheme("div(phi,ft_b_h)")
-    )
-);
-
-{
-    fvScalarMatrix ftEqn
-    (
-        fvm::ddt(rho, ft)
-      + mvConvection->fvmDiv(phi, ft)
-      - fvm::laplacian(turbulence->alphaEff(), ft)
-    );
-
-    ftEqn.relax();
-    ftEqn.solve();
-}
-
-Info<< "max(ft) = " << max(ft).value() << endl;
-Info<< "min(ft) = " << min(ft).value() << endl;
diff --git a/applications/solvers/combustion/fireFoam/fuhsEqn.H b/applications/solvers/combustion/fireFoam/fuhsEqn.H
deleted file mode 100644
index 6494ead4f4d7a343df5a78c4a9f7023e840dd984..0000000000000000000000000000000000000000
--- a/applications/solvers/combustion/fireFoam/fuhsEqn.H
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-    // Solve fuel equation
-    // ~~~~~~~~~~~~~~~~~~~
-    fvScalarMatrix R(combustion->R(fu));
-
-    {
-        fvScalarMatrix fuEqn
-        (
-            fvm::ddt(rho, fu)
-          + mvConvection->fvmDiv(phi, fu)
-          - fvm::laplacian(turbulence->alphaEff(), fu)
-         ==
-            R
-        );
-
-        fuEqn.relax();
-        fuEqn.solve();
-    }
-
-    Info<< "max(fu) = " << max(fu).value() << endl;
-    Info<< "min(fu) = " << min(fu).value() << endl;
-
-
-    // Solve sensible enthalpy equation
-    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    radiation->correct();
-    dQ = combustion->dQ(R);
-
-    {
-        fvScalarMatrix hsEqn
-        (
-            fvm::ddt(rho, hs)
-          + mvConvection->fvmDiv(phi,hs)
-          - fvm::laplacian(turbulence->alphaEff(), hs)
-         ==
-            DpDt
-          + dQ
-          + radiation->Shs(thermo)
-        );
-
-        hsEqn.relax();
-        hsEqn.solve();
-    }
-
-    thermo.correct();
-    combustion->correct();
-}
diff --git a/applications/solvers/combustion/fireFoam/pEqn.H b/applications/solvers/combustion/fireFoam/pEqn.H
index 6813950e19e9f2aaa48e3dc90e138fe3688350a5..5c7a4ae33e30c7b3dd4bf145e5687f500ce8857a 100644
--- a/applications/solvers/combustion/fireFoam/pEqn.H
+++ b/applications/solvers/combustion/fireFoam/pEqn.H
@@ -1,7 +1,7 @@
 rho = thermo.rho();
 
 volScalarField rAU(1.0/UEqn.A());
-surfaceScalarField rhorAUf("(rho*(1|A(U)))", fvc::interpolate(rho*rAU));
+surfaceScalarField rhorAUf(rAU.name() + 'f', fvc::interpolate(rho*rAU));
 U = rAU*UEqn.H();
 
 surfaceScalarField phiU
@@ -17,13 +17,15 @@ phi = phiU - rhorAUf*ghf*fvc::snGrad(rho)*mesh.magSf();
 
 for (int nonOrth=0; nonOrth<=pimple.nNonOrthCorr(); nonOrth++)
 {
-    surfaceScalarField rhorAUf(fvc::interpolate(rho*rAU));
-
     fvScalarMatrix p_rghEqn
     (
-        fvm::ddt(psi, p_rgh) + fvc::ddt(psi, rho)*gh
+        fvc::ddt(psi, rho)*gh
       + fvc::div(phi)
+      + fvm::ddt(psi, p_rgh)
       - fvm::laplacian(rhorAUf, p_rgh)
+     ==
+        parcels.Srho()
+      + surfaceFilm.Srho()
     );
 
     p_rghEqn.solve
diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/readChemistryProperties.H b/applications/solvers/combustion/fireFoam/readChemistryProperties.H
similarity index 100%
rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/readChemistryProperties.H
rename to applications/solvers/combustion/fireFoam/readChemistryProperties.H
diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/readPyrolysisTimeControls.H b/applications/solvers/combustion/fireFoam/readPyrolysisTimeControls.H
similarity index 100%
rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/readPyrolysisTimeControls.H
rename to applications/solvers/combustion/fireFoam/readPyrolysisTimeControls.H
diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/rhoEqn.H b/applications/solvers/combustion/fireFoam/rhoEqn.H
similarity index 100%
rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/rhoEqn.H
rename to applications/solvers/combustion/fireFoam/rhoEqn.H
diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/setMultiRegionDeltaT.H b/applications/solvers/combustion/fireFoam/setMultiRegionDeltaT.H
similarity index 100%
rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/setMultiRegionDeltaT.H
rename to applications/solvers/combustion/fireFoam/setMultiRegionDeltaT.H
diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/solidRegionDiffusionNo.H b/applications/solvers/combustion/fireFoam/solidRegionDiffusionNo.H
similarity index 97%
rename from applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/solidRegionDiffusionNo.H
rename to applications/solvers/combustion/fireFoam/solidRegionDiffusionNo.H
index a6ab0eb14a6741700fa0379190cbc7b52b21426d..2d443c50bf9c54920dfa744ff9927adadba41fd7 100644
--- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/solidRegionDiffusionNo.H
+++ b/applications/solvers/combustion/fireFoam/solidRegionDiffusionNo.H
@@ -1,2 +1 @@
 scalar DiNum =  pyrolysis->solidRegionDiffNo();
-
diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/files b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/files
deleted file mode 100644
index 7910a0296578f689ba0cb09fe8212f09a2eae6ae..0000000000000000000000000000000000000000
--- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/files
+++ /dev/null
@@ -1,3 +0,0 @@
-reactingParcelFilmPyrolysisFoam.C
-
-EXE = $(FOAM_APPBIN)/reactingParcelFilmPyrolysisFoam
diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/options b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/options
deleted file mode 100644
index 49ab49307723b946e354d4b00e9ca46772e8d26f..0000000000000000000000000000000000000000
--- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/Make/options
+++ /dev/null
@@ -1,51 +0,0 @@
-EXE_INC = \
-    -I$(LIB_SRC)/finiteVolume/lnInclude \
-    -I${LIB_SRC}/meshTools/lnInclude \
-    -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
-    -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/solid/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/basicSolidThermo/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/solidChemistryModel/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/properties/solidProperties/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/properties/solidMixtureProperties/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/properties/liquidProperties/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/properties/liquidMixtureProperties/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/thermophysicalFunctions/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \
-    -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude \
-    -I$(LIB_SRC)/combustionModels/lnInclude \
-    -I$(LIB_SRC)/regionModels/regionModel/lnInclude \
-    -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \
-    -I$(LIB_SRC)/regionModels/pyrolysisModels/lnInclude \
-    -I$(LIB_SRC)/lagrangian/basic/lnInclude \
-    -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \
-    -I$(LIB_SRC)/ODE/lnInclude \
-    -I$(LIB_SRC)/sampling/lnInclude
-
-
-EXE_LIBS = \
-    -lfiniteVolume \
-    -lmeshTools \
-    -lcompressibleRASModels \
-    -lcompressibleLESModels \
-    -lspecie \
-    -lbasicThermophysicalModels \
-    -lsolidProperties \
-    -lsolidMixtureProperties \
-    -lthermophysicalFunctions \
-    -lreactionThermophysicalModels \
-    -lSLGThermo \
-    -lchemistryModel \
-    -lsolidChemistryModel \
-    -lcombustionModels \
-    -lregionModels \
-    -lradiationModels \
-    -lsurfaceFilmModels \
-    -lpyrolysisModels \
-    -llagrangianIntermediate \
-    -lODE \
-    -lsampling
diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/UEqn.H b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/UEqn.H
deleted file mode 100644
index a64e50a2d24d19b3f1dd25e4bc73acbcfc27a356..0000000000000000000000000000000000000000
--- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/UEqn.H
+++ /dev/null
@@ -1,26 +0,0 @@
-    fvVectorMatrix UEqn
-    (
-        fvm::ddt(rho, U)
-      + fvm::div(phi, U)
-      + turbulence->divDevRhoReff(U)
-     ==
-        parcels.SU(U)
-    );
-
-    UEqn.relax();
-
-    if (pimple.momentumPredictor())
-    {
-        solve
-        (
-            UEqn
-          ==
-            fvc::reconstruct
-            (
-                (
-                  - ghf*fvc::snGrad(rho)
-                  - fvc::snGrad(p_rgh)
-                )*mesh.magSf()
-            )
-        );
-    }
diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createFields.H b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createFields.H
deleted file mode 100644
index f1e152dc320b47f428e326350f66aae48c947338..0000000000000000000000000000000000000000
--- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/createFields.H
+++ /dev/null
@@ -1,154 +0,0 @@
-    Info<< "Reading thermophysical properties\n" << endl;
-
-    autoPtr<hsCombustionThermo> pThermo
-    (
-        hsCombustionThermo::New(mesh)
-    );
-    hsCombustionThermo& thermo = pThermo();
-
-    SLGThermo slgThermo(mesh, thermo);
-
-    basicMultiComponentMixture& composition = thermo.composition();
-    PtrList<volScalarField>& Y = composition.Y();
-
-    const word inertSpecie(thermo.lookup("inertSpecie"));
-
-    Info<< "Creating field rho\n" << endl;
-    volScalarField rho
-    (
-        IOobject
-        (
-            "rho",
-            runTime.timeName(),
-            mesh,
-            IOobject::NO_READ,
-            IOobject::AUTO_WRITE
-        ),
-        thermo.rho()
-    );
-
-    volScalarField& p = thermo.p();
-    volScalarField& hs = thermo.hs();
-    const volScalarField& T = thermo.T();
-    const volScalarField& psi = thermo.psi();
-
-    Info<< "\nReading field U\n" << endl;
-    volVectorField U
-    (
-        IOobject
-        (
-            "U",
-            runTime.timeName(),
-            mesh,
-            IOobject::MUST_READ,
-            IOobject::AUTO_WRITE
-        ),
-        mesh
-    );
-
-    #include "compressibleCreatePhi.H"
-
-    Info<< "Creating turbulence model\n" << endl;
-    autoPtr<compressible::turbulenceModel> turbulence
-    (
-        compressible::turbulenceModel::New
-        (
-            rho,
-            U,
-            phi,
-            thermo
-        )
-    );
-
-    IOdictionary combustionProperties
-    (
-        IOobject
-        (
-            "combustionProperties",
-            runTime.constant(),
-            mesh,
-            IOobject::MUST_READ_IF_MODIFIED,
-            IOobject::NO_WRITE
-        )
-    );
-
-    Info<< "Creating combustion model\n" << endl;
-    autoPtr<combustionModel> combustion
-    (
-        combustionModel::combustionModel::New
-        (
-            combustionProperties,
-            thermo,
-            turbulence(),
-            phi,
-            rho
-        )
-    );
-
-    volScalarField dQ
-    (
-        IOobject
-        (
-            "dQ",
-            runTime.timeName(),
-            mesh,
-            IOobject::NO_READ,
-            IOobject::AUTO_WRITE
-        ),
-        mesh,
-        dimensionedScalar("dQ", dimMass/pow3(dimTime)/dimLength, 0.0)
-    );
-
-    Info<< "Creating field DpDt\n" << endl;
-    volScalarField DpDt
-    (
-        "DpDt",
-        fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p)
-    );
-
-
-    Info<< "Calculating field g.h\n" << endl;
-    volScalarField gh("gh", g & mesh.C());
-
-    surfaceScalarField ghf("ghf", g & mesh.Cf());
-
-    volScalarField p_rgh
-    (
-        IOobject
-        (
-            "p_rgh",
-            runTime.timeName(),
-            mesh,
-            IOobject::MUST_READ,
-            IOobject::AUTO_WRITE
-        ),
-        mesh
-    );
-
-    // Force p_rgh to be consistent with p
-    p_rgh = p - rho*gh;
-
-    multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields;
-
-    forAll(Y, i)
-    {
-        fields.add(Y[i]);
-    }
-    fields.add(hs);
-
-    IOdictionary additionalControlsDict
-    (
-        IOobject
-        (
-            "additionalControls",
-            runTime.constant(),
-            mesh,
-            IOobject::MUST_READ_IF_MODIFIED,
-            IOobject::NO_WRITE
-        )
-    );
-
-    Switch solvePrimaryRegion
-    (
-        additionalControlsDict.lookup("solvePrimaryRegion")
-    );
diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/pEqn.H b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/pEqn.H
deleted file mode 100644
index 5c7a4ae33e30c7b3dd4bf145e5687f500ce8857a..0000000000000000000000000000000000000000
--- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/pEqn.H
+++ /dev/null
@@ -1,50 +0,0 @@
-rho = thermo.rho();
-
-volScalarField rAU(1.0/UEqn.A());
-surfaceScalarField rhorAUf(rAU.name() + 'f', fvc::interpolate(rho*rAU));
-U = rAU*UEqn.H();
-
-surfaceScalarField phiU
-(
-    fvc::interpolate(rho)
-   *(
-        (fvc::interpolate(U) & mesh.Sf())
-      + fvc::ddtPhiCorr(rAU, rho, U, phi)
-    )
-);
-
-phi = phiU - rhorAUf*ghf*fvc::snGrad(rho)*mesh.magSf();
-
-for (int nonOrth=0; nonOrth<=pimple.nNonOrthCorr(); nonOrth++)
-{
-    fvScalarMatrix p_rghEqn
-    (
-        fvc::ddt(psi, rho)*gh
-      + fvc::div(phi)
-      + fvm::ddt(psi, p_rgh)
-      - fvm::laplacian(rhorAUf, p_rgh)
-     ==
-        parcels.Srho()
-      + surfaceFilm.Srho()
-    );
-
-    p_rghEqn.solve
-    (
-        mesh.solver(p_rgh.select(pimple.finalInnerIter(corr, nonOrth)))
-    );
-
-    if (nonOrth == pimple.nNonOrthCorr())
-    {
-        phi += p_rghEqn.flux();
-    }
-}
-
-p = p_rgh + rho*gh;
-
-#include "rhoEqn.H"
-#include "compressibleContinuityErrs.H"
-
-U += rAU*fvc::reconstruct((phi - phiU)/rhorAUf);
-U.correctBoundaryConditions();
-
-DpDt = fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p);
diff --git a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/reactingParcelFilmPyrolysisFoam.C b/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/reactingParcelFilmPyrolysisFoam.C
deleted file mode 100644
index ac029bea8642464f79f80b037ee791504bc34a92..0000000000000000000000000000000000000000
--- a/applications/solvers/lagrangian/reactingParcelFilmPyrolysisFoam/reactingParcelFilmPyrolysisFoam.C
+++ /dev/null
@@ -1,130 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2009-2011 OpenCFD Ltd.
-     \\/     M anipulation  |
--------------------------------------------------------------------------------
-License
-    This file is part of OpenFOAM.
-
-    OpenFOAM is free software: you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-    for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
-
-Application
-    reactingParcelFilmPyrolysisFoam
-
-Description
-    Transient PIMPLE solver for Fires and turbulent diffusion flames with
-    reacting Lagrangian parcels, surface film and pyrolysis modelling.
-
-\*---------------------------------------------------------------------------*/
-
-#include "fvCFD.H"
-#include "turbulenceModel.H"
-#include "basicReactingCloud.H"
-#include "surfaceFilmModel.H"
-#include "pyrolysisModel.H"
-#include "radiationModel.H"
-#include "SLGThermo.H"
-#include "hsCombustionThermo.H"
-#include "solidChemistryModel.H"
-#include "combustionModel.H"
-#include "pimpleControl.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-int main(int argc, char *argv[])
-{
-    #include "setRootCase.H"
-
-    #include "createTime.H"
-    #include "createMesh.H"
-    #include "readChemistryProperties.H"
-    #include "readGravitationalAcceleration.H"
-    #include "createFields.H"
-    #include "createClouds.H"
-    #include "createRadiationModel.H"
-    #include "createSurfaceFilmModel.H"
-    #include "createPyrolysisModel.H"
-    #include "initContinuityErrs.H"
-    #include "readTimeControls.H"
-    #include "compressibleCourantNo.H"
-    #include "setInitialDeltaT.H"
-    #include "readPyrolysisTimeControls.H"
-
-    pimpleControl pimple(mesh);
-
-    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-    Info<< "\nStarting time loop\n" << endl;
-
-    while (runTime.run())
-    {
-        #include "readTimeControls.H"
-        #include "compressibleCourantNo.H"
-        #include "solidRegionDiffusionNo.H"
-        #include "setMultiRegionDeltaT.H"
-        #include "setDeltaT.H"
-
-        runTime++;
-
-        Info<< "Time = " << runTime.timeName() << nl << endl;
-
-        parcels.evolve();
-
-        surfaceFilm.evolve();
-
-        pyrolysis->evolve();
-
-        if (solvePrimaryRegion)
-        {
-            #include "rhoEqn.H"
-
-            // --- PIMPLE loop
-            for (pimple.start(); pimple.loop(); pimple++)
-            {
-                #include "UEqn.H"
-                #include "YhsEqn.H"
-
-                // --- PISO loop
-                for (int corr=1; corr<=pimple.nCorr(); corr++)
-                {
-                    #include "pEqn.H"
-                }
-
-                if (pimple.turbCorr())
-                {
-                    turbulence->correct();
-                }
-            }
-
-            rho = thermo.rho();
-        }
-        else
-        {
-            runTime.write();
-        }
-
-        Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
-            << "  ClockTime = " << runTime.elapsedClockTime() << " s"
-            << nl << endl;
-    }
-
-    Info<< "End" << endl;
-
-    return(0);
-}
-
-
-// ************************************************************************* //
diff --git a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C
index e231144b9208021b21bebff47cc170a4b256e0cf..90727e381bd1e118b279af75a8ad46cab3e01957 100644
--- a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C
+++ b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/greyDiffusiveRadiation/greyDiffusiveRadiationMixedFvPatchScalarField.C
@@ -189,6 +189,8 @@ updateCoeffs()
 
     ray.Qr().boundaryField()[patchI] += Iw*(n & ray.dAve());
 
+    scalarList temissivity = emissivity();
+
     forAll(Iw, faceI)
     {
         scalar Ir = 0.0;
@@ -217,8 +219,8 @@ updateCoeffs()
             valueFraction()[faceI] = 1.0;
             refValue()[faceI] =
                 (
-                    Ir*(scalar(1.0) - emissivity()()[faceI])
-                  + emissivity()()[faceI]*physicoChemical::sigma.value()
+                    Ir*(scalar(1.0) - temissivity[faceI])
+                  + temissivity[faceI]*physicoChemical::sigma.value()
                   * pow4(Tp[faceI])
                 )/pi;
 
@@ -238,7 +240,6 @@ updateCoeffs()
                 Iw[faceI]*(n[faceI] & ray.dAve());
         }
     }
-
     mixedFvPatchScalarField::updateCoeffs();
 }
 
diff --git a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.C b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.C
index f8d034ca34963952df97d50bd540e15c05e87379..580342d92a50ae650ec6bb653fcc5c9b0ad44d2b 100644
--- a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.C
+++ b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.C
@@ -127,7 +127,7 @@ Foam::radiationCoupledBase::radiationCoupledBase
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-Foam::tmp<Foam::scalarField> Foam::radiationCoupledBase::emissivity() const
+Foam::scalarField Foam::radiationCoupledBase::emissivity() const
 {
     switch (method_)
     {
@@ -142,6 +142,9 @@ Foam::tmp<Foam::scalarField> Foam::radiationCoupledBase::emissivity() const
 
             const polyMesh& nbrMesh = mpp.sampleMesh();
 
+            // Force recalculation of mapping and schedule
+            const mapDistribute& distMap = mpp.map();
+
             const fvPatch& nbrPatch = refCast<const fvMesh>
             (
                 nbrMesh
@@ -160,12 +163,11 @@ Foam::tmp<Foam::scalarField> Foam::radiationCoupledBase::emissivity() const
                     )
                 );
 
-                scalarField& emissivity = temissivity();
-
+                scalarField emissivity(temissivity);
                 // Use direct map mapping to exchange data
-                mpp.map().distribute(emissivity);
-
-                return temissivity;
+                distMap.distribute(emissivity);
+                //Pout << emissivity << endl;
+                return emissivity;
             }
             else
             {
diff --git a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.H b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.H
index 405d0f75a54ef6723d169f997bf1cdaaadf9d706..0b9fe86c74a618fd28976be156856cd6389e8c9a 100644
--- a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.H
+++ b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/radiationCoupledBase/radiationCoupledBase.H
@@ -114,7 +114,7 @@ public:
 
 
         //- Calculate corresponding emissivity field
-        tmp<scalarField> emissivity() const;
+        scalarField emissivity() const;
 
         //- Write
         void write(Ostream&) const;
diff --git a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C
index 45ab196b5c0780f5bae069d5aa06d97e2e2393dc..c985ea5e3a708b0126073f4a15415ba15c03dcfd 100644
--- a/src/thermophysicalModels/radiationModels/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C
+++ b/src/thermophysicalModels/radiationModels/derivedFvPatchFields/wideBandDiffusiveRadiation/wideBandDiffusiveRadiationMixedFvPatchScalarField.C
@@ -189,6 +189,8 @@ updateCoeffs()
         dom.blackBody().bLambda(lambdaId).boundaryField()[patchI]
     );
 
+    scalarList temissivity = emissivity();
+
     forAll(Iw, faceI)
     {
         scalar Ir = 0.0;
@@ -215,8 +217,8 @@ updateCoeffs()
             valueFraction()[faceI] = 1.0;
             refValue()[faceI] =
                 (
-                    Ir*(1.0 - emissivity()()[faceI])
-                  + emissivity()()[faceI]*Eb[faceI]
+                    Ir*(1.0 - temissivity[faceI])
+                  + temissivity[faceI]*Eb[faceI]
                 )/pi;
         }
         else
diff --git a/src/thermophysicalModels/reactionThermo/mixtures/singleStepReactingMixture/singleStepReactingMixture.C b/src/thermophysicalModels/reactionThermo/mixtures/singleStepReactingMixture/singleStepReactingMixture.C
index 65749dca89726f56c0fe752fd4f6791558729623..5ac41aa0e6c3f59791254eb45d03843a1905b460 100644
--- a/src/thermophysicalModels/reactionThermo/mixtures/singleStepReactingMixture/singleStepReactingMixture.C
+++ b/src/thermophysicalModels/reactionThermo/mixtures/singleStepReactingMixture/singleStepReactingMixture.C
@@ -108,8 +108,6 @@ void Foam::singleStepReactingMixture<ThermoType>::calculateMaxProducts()
         Yprod0_[specieI] =  this->speciesData()[specieI].W()/Wm*Xi[i];
     }
 
-    Info << "Max products: " << Yprod0_ << endl;
-
     // Normalize the stoichiometric coeff to mass
     forAll(specieStoichCoeffs_, i)
     {
@@ -208,7 +206,7 @@ Foam::singleStepReactingMixture<ThermoType>::singleStepReactingMixture
                 mesh.time().timeName(),
                 mesh,
                 IOobject::NO_READ,
-                IOobject::AUTO_WRITE
+                IOobject::NO_WRITE
             );
 
             fres_.set
diff --git a/src/thermophysicalModels/solidChemistryModel/ODESolidChemistryModel/ODESolidChemistryModel.C b/src/thermophysicalModels/solidChemistryModel/ODESolidChemistryModel/ODESolidChemistryModel.C
index 7d716a8a8847ccbf5b28d967d6f386316ed78a81..bd7ac96a4640222dd5ff69bb99b92fe0757f318e 100644
--- a/src/thermophysicalModels/solidChemistryModel/ODESolidChemistryModel/ODESolidChemistryModel.C
+++ b/src/thermophysicalModels/solidChemistryModel/ODESolidChemistryModel/ODESolidChemistryModel.C
@@ -139,7 +139,6 @@ ODESolidChemistryModel
 
         // Calculate inital values of Ysi0 = rho*delta*Yi
         Ys0_[fieldI].internalField() =
-            //this->solidThermo().rho()*Ys_[fieldI]*mesh.V();
             this->solidThermo().rho()*max(Ys_[fieldI],scalar(0.001))*mesh.V();
    }
 
@@ -148,15 +147,18 @@ ODESolidChemistryModel
         RRg_.set(fieldI, new scalarField(mesh.nCells(), 0.0));
     }
 
-    dictionary thermoDict =
-        mesh.lookupObject<dictionary>("chemistryProperties");
-
     forAll(gasThermo_, gasI)
     {
+        dictionary thermoDict =
+            mesh.lookupObject<dictionary>
+            (
+                "chemistryProperties"
+            ).subDict(pyrolisisGases_[gasI]);
+
         gasThermo_.set
         (
             gasI,
-            new GasThermo(thermoDict.lookup(pyrolisisGases_[gasI]))
+            new GasThermo(thermoDict)
         );
     }
 
@@ -275,7 +277,6 @@ Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::omega
         label si = R.slhs()[s];
 
         kf *=
-//            pow(c1[si]/max(Ys0_[si][cellI], 0.001), exponent)
             pow(c1[si]/Ys0_[si][cellI], exponent)
            *(Ys0_[si][cellI]);
     }
@@ -312,7 +313,6 @@ void Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::derivatives
         scalar dYidt = dcdt[i]/cTot;
         scalar Yi = c[i]/cTot;
         newCp += Yi*solidThermo_[i].Cp(T);
-        //newhi += dYidt*solidThermo_[i].hf();
         newhi -= dYidt*solidThermo_[i].hf();
     }
 
@@ -465,7 +465,6 @@ Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::Sh() const
             forAll(Sh, cellI)
             {
                 scalar hf = solidThermo_[i].hf();
-                //Sh[cellI] += hf*RRs_[i][cellI];
                 Sh[cellI] -= hf*RRs_[i][cellI];
             }
         }
@@ -695,7 +694,6 @@ Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::solve
                     scalar dYi = dcdt[i]/cTot;
                     scalar Yi = c[i]/cTot;
                     newCp += Yi*solidThermo_[i].Cp(Ti);
-                    //newhi += dYi*solidThermo_[i].hf();
                     newhi -= dYi*solidThermo_[i].hf();
                     invRho += Yi/solidThermo_[i].rho(Ti);
                 }
diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C b/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C
index 262b9da61f0256a1efae6baa70f5835c63a7bf6d..b5f81301b593e428c6bc56d5523323252fe20ecd 100644
--- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C
+++ b/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C
@@ -158,6 +158,9 @@ void turbulentTemperatureRadCoupledMixedFvPatchScalarField::updateCoeffs()
     const fvPatch& nbrPatch =
         refCast<const fvMesh>(nbrMesh).boundary()[samplePatchI];
 
+    // Force recalculation of mapping and schedule
+    const mapDistribute& distMap = mpp.map();
+
     scalarField Tc(patchInternalField());
     scalarField& Tp = *this;
 
@@ -170,13 +173,13 @@ void turbulentTemperatureRadCoupledMixedFvPatchScalarField::updateCoeffs()
 
     // Swap to obtain full local values of neighbour internal field
     scalarField TcNbr(nbrField.patchInternalField());
+    distMap.distribute(TcNbr);
 
-    mpp.map().distribute(TcNbr);
 
     // Swap to obtain full local values of neighbour K*delta
-    scalarField KDeltaNbr(nbrField.K(TcNbr)*nbrPatch.deltaCoeffs());
+    scalarField KDeltaNbr(nbrField.K(nbrField)*nbrPatch.deltaCoeffs());
+    distMap.distribute(KDeltaNbr);
 
-    mpp.map().distribute(KDeltaNbr);
 
     scalarField KDelta(K(*this)*patch().deltaCoeffs());
 
@@ -190,7 +193,7 @@ void turbulentTemperatureRadCoupledMixedFvPatchScalarField::updateCoeffs()
     if (QrNbrName_ != "none")
     {
         QrNbr = nbrPatch.lookupPatchField<volScalarField, scalar>(QrNbrName_);
-        mpp.map().distribute(QrNbr);
+        distMap.distribute(QrNbr);
     }
 
     scalarField alpha(KDeltaNbr - (Qr + QrNbr)/Tp);
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/C3H8 b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/C3H8
new file mode 100644
index 0000000000000000000000000000000000000000..3b232b3642a7cb5f792a18b2d17c81cd2e334560
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/C3H8
@@ -0,0 +1,57 @@
+/*---------------------------------------------------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+    class           volScalarField;
+    object          C3H8;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    top
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+    ground
+    {
+        type            zeroGradient;
+        value           $internalField;
+    }
+    sides
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+    burner
+    {
+        type            totalFlowRateAdvectiveDiffusive;
+        phi             phi;
+        rho             rho;
+        value           uniform 1.0;
+    }
+    "(region0_to.*)"
+    {
+        type            totalFlowRateAdvectiveDiffusive;
+        phi             phi;
+        rho             rho;
+        value           $internalField;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/IDefault b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/IDefault
new file mode 100644
index 0000000000000000000000000000000000000000..77797e828abeaf12d89d0a590a894c85beebec47
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/IDefault
@@ -0,0 +1,40 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    object      IDefault;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [1 0 -3 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    ".*"
+    {
+        type            greyDiffusiveRadiation;
+        T               T;
+        emissivityMode  lookup;
+        emissivity      uniform 1.0;
+        value           uniform 0;
+    }
+    "(region0_to.*)"
+    {
+        type            greyDiffusiveRadiation;
+        T               T;
+        emissivityMode  solidThermo;
+        value           uniform 0;
+    }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/N2 b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/N2
new file mode 100644
index 0000000000000000000000000000000000000000..901e8fa36c87404ada89391e944d321a40e905ae
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/N2
@@ -0,0 +1,54 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+    class           volScalarField;
+    object          N2;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+dimensions      [0 0 0 0 0 0 0];
+
+internalField   uniform 0.76699;
+
+boundaryField
+{
+    top
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+
+    ground
+    {
+        type            zeroGradient;
+    }
+
+    sides
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+
+    burner
+    {
+        type            fixedValue;
+        value           uniform 0;
+    }
+
+    "(region0_to.*)"
+    {
+        type            zeroGradient;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/O2 b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/O2
new file mode 100644
index 0000000000000000000000000000000000000000..9167d834acf43c03c223f333951790797ec1a250
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/O2
@@ -0,0 +1,55 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+    class           volScalarField;
+    object          O2;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 0 0 0 0];
+
+internalField   uniform 0.23301;
+
+boundaryField
+{
+    top
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+
+    ground
+    {
+        type            zeroGradient;
+    }
+
+    sides
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+
+    burner
+    {
+        type            fixedValue;
+        value           uniform 0;
+    }
+
+    "(region0_to.*)"
+    {
+        type            zeroGradient;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/T b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/T
new file mode 100755
index 0000000000000000000000000000000000000000..6e28b36318d0a95e7a4ff595b53993c0680a9f10
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/T
@@ -0,0 +1,62 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      T;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 1 0 0 0];
+
+internalField   uniform 298.15;
+
+boundaryField
+{
+    ground
+    {
+        type            zeroGradient;
+    }
+
+    top
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+
+    burner
+    {
+        type            fixedValue;
+        value           $internalField;
+    }
+
+    sides
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+
+    "(region0_to.*)"
+    {
+        type            compressible::turbulentTemperatureRadCoupledMixed;
+        Tnbr            T;
+        K               basicThermo;
+        QrNbr           none;
+        Qr              Qr;
+        KName           none;
+        value           $internalField;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/U b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/U
new file mode 100755
index 0000000000000000000000000000000000000000..2fe05e7a26c4ef6c88c94d8b96d9be945dde83c9
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/U
@@ -0,0 +1,62 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volVectorField;
+    location    "0";
+    object      U;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 1 -1 0 0 0 0];
+
+internalField   uniform (0 0 0);
+
+boundaryField
+{
+    ground
+    {
+        type            fixedValue;
+        value           $internalField;
+    }
+
+    top
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+
+    burner
+    {
+        type            flowRateInletVelocity;
+        flowRate        0.001294;     //60kW  C3H8
+        value           uniform (0 0 0);
+    }
+
+    sides
+    {
+        type            pressureInletOutletVelocity;
+        phi             phi;
+        value           $internalField;
+    }
+
+    "(region0_to.*)"
+    {
+        type            directMappedFlowRate;
+        phi             phi;
+        nbrPhi          phiGas;
+        rho             rho;
+        value           uniform (0 0 0);
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/Ydefault b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/Ydefault
new file mode 100755
index 0000000000000000000000000000000000000000..5e6d1eba5b6b99abc15f8d3400f3f84c77e509cd
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/Ydefault
@@ -0,0 +1,56 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      Ydefault;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    ground
+    {
+        type            zeroGradient;
+    }
+
+    top
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+
+    burner
+    {
+        type            fixedValue;
+        value           uniform 0;
+    }
+
+    sides
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+
+    "(region0_to.*)"
+    {
+        type            zeroGradient;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/alphaSgs b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/alphaSgs
new file mode 100755
index 0000000000000000000000000000000000000000..948eedffbda16d2dd7afe8ef806bbb1c92a2e10e
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/alphaSgs
@@ -0,0 +1,53 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      alphaSgs;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [1 -1 -1 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    ground
+    {
+        type        alphaSgsWallFunction;
+        value       uniform 0;
+    }
+
+    top
+    {
+        type        zeroGradient;
+    }
+
+    burner
+    {
+        type        zeroGradient;
+    }
+
+    sides
+    {
+        type        zeroGradient;
+    }
+
+    "(region0_to.*)"
+    {
+        type        alphaSgsWallFunction;
+        value       uniform 0;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/k b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/k
new file mode 100755
index 0000000000000000000000000000000000000000..f7c0531029e26da5cd4b22e26a3a0f41b920dca3
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/k
@@ -0,0 +1,56 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      k;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 2 -2 0 0 0 0];
+
+internalField   uniform 1e-05;
+
+boundaryField
+{
+    ground
+    {
+        type            zeroGradient;
+    }
+
+    top
+    {
+        type            inletOutlet;
+        inletValue      uniform 1e-05;
+        value           uniform 1e-05;
+    }
+
+    burner
+    {
+        type            fixedValue;
+        value           uniform 1e-05;
+    }
+
+    sides
+    {
+        type            inletOutlet;
+        inletValue      uniform 1e-05;
+        value           uniform 1e-05;
+    }
+
+    "(region0_to.*)"
+    {
+        type            zeroGradient;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/muSgs b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/muSgs
new file mode 100755
index 0000000000000000000000000000000000000000..5e2ea9252c3aeeb0860a7d2cf074aea9d6f930c5
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/muSgs
@@ -0,0 +1,52 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      muSgs;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+dimensions      [1 -1 -1 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    ground
+    {
+        type            fixedValue;
+        value           uniform 0;
+    }
+
+    top
+    {
+        type            zeroGradient;
+    }
+
+    burner
+    {
+        type            zeroGradient;
+    }
+
+    sides
+    {
+        type            zeroGradient;
+    }
+
+    "(region0_to.*)"
+    {
+        type            muSgsUSpaldingWallFunction;
+        value           uniform 0;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/p b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/p
new file mode 100755
index 0000000000000000000000000000000000000000..7cd9c8727d5fd2eb6eb1973271a5095207acb20f
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/p
@@ -0,0 +1,56 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      p;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [1 -1 -2 0 0 0 0];
+
+internalField   uniform 101325;
+
+boundaryField
+{
+    ground
+    {
+        type            calculated;
+        value           $internalField;
+    }
+
+    top
+    {
+        type            calculated;
+        value           $internalField;
+    }
+
+    burner
+    {
+        type            calculated;
+        value           $internalField;
+    }
+
+    sides
+    {
+        type            calculated;
+        value           $internalField;
+    }
+
+    "(region0_to.*)"
+    {
+        type            calculated;
+        value           $internalField;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/p_rgh b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/p_rgh
new file mode 100755
index 0000000000000000000000000000000000000000..e21fb90581a2ce5d0d34dd3bf724750bf1f39cbc
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/p_rgh
@@ -0,0 +1,62 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      p_rgh;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [1 -1 -2 0 0 0 0];
+
+internalField   uniform 101325;
+
+boundaryField
+{
+    ground
+    {
+        type            buoyantPressure;
+        value           $internalField;
+    }
+
+    top
+    {
+        type            zeroGradient;
+        value           $internalField;
+    }
+
+    burner
+    {
+        type            buoyantPressure;
+        value           $internalField;
+    }
+
+    sides
+    {
+        type            totalPressure;
+        U               U;
+        phi             phi;
+        rho             rho;
+        psi             none;
+        gamma           1.4;
+        p0              $internalField;
+        value           $internalField;
+    }
+
+    "(region0_to.*)"
+    {
+        type            buoyantPressure;
+        value           $internalField;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Qr b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Qr
new file mode 100644
index 0000000000000000000000000000000000000000..e81ca0200252518827a92488006f4bb9e22ae32b
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Qr
@@ -0,0 +1,67 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      Qr;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [1 0 -3 0 0 0 0];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    ".*"
+    {
+        type            zeroGradient;
+    }
+
+    fRight_zone_side
+    {
+        type            wedge;
+    }
+
+    fLeft_zone_side
+    {
+        type            wedge;
+    }
+
+    region0_to_panelRegion_left_face
+    {
+        type            directMappedField;
+        sampleRegion    region0;
+        sampleMode      nearestPatchFace;
+        samplePatch     region0_to_panelRegion_left_face;
+        offset          (0 0 0);
+        fieldName       Qr;
+        setAverage      no;
+        average         0;
+        value           uniform 0;
+    }
+
+    region0_to_panelRegion_right_face
+    {
+        type            directMappedField;
+        sampleRegion    region0;
+        sampleMode      nearestPatchFace;
+        samplePatch     region0_to_panelRegion_right_face;
+        offset          (0 0 0);
+        fieldName       Qr;
+        setAverage      no;
+        average         0;
+        value           uniform 0;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/T b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/T
new file mode 100755
index 0000000000000000000000000000000000000000..3a2ee1dfad03c71c08d33c50754b66d6c2017687
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/T
@@ -0,0 +1,54 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      T;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 1 0 0 0];
+
+internalField   uniform 298.15;
+
+boundaryField
+{
+
+    ".*"
+    {
+        type            zeroGradient;
+    }
+
+    fRight_zone_side
+    {
+        type            wedge;
+    }
+
+    fLeft_zone_side
+    {
+        type            wedge;
+    }
+
+   "(region0_to.*)"
+    {
+        type            compressible::turbulentTemperatureRadCoupledMixed;
+        Tnbr            T;
+        K               solidThermo;
+        KName           none;
+        QrNbr           Qr;
+        Qr              none;
+        value           uniform 298.15;
+    }
+
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/b b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Y0Default
old mode 100644
new mode 100755
similarity index 86%
rename from tutorials/combustion/fireFoam/les/smallPoolFire3D/0/b
rename to tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Y0Default
index 242f45c9433d5e0c38dbd781351fee02196f2582..77bcb76e39a4a772ba44179cac1136f63f77b161
--- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/b
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Y0Default
@@ -11,7 +11,7 @@ FoamFile
     format      ascii;
     class       volScalarField;
     location    "0";
-    object      b;
+    object      Ydefault;
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -21,23 +21,26 @@ internalField   uniform 0;
 
 boundaryField
 {
-    outlet
+
+    ".*"
     {
         type            zeroGradient;
     }
-    sides
+
+    fRight_zone_side
     {
-        type            zeroGradient;
+        type            wedge;
     }
-    base
+
+    fLeft_zone_side
     {
-        type            zeroGradient;
+        type            wedge;
     }
-    inlet
+
+    "(region0_to.*)"
     {
         type            zeroGradient;
     }
-
 }
 
 
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/b b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Ydefault
old mode 100644
new mode 100755
similarity index 84%
rename from tutorials/combustion/fireFoam/les/smallPoolFire2D/0/b
rename to tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Ydefault
index 69d723a7e10054813556b11c8e44bee2d23f9853..77bcb76e39a4a772ba44179cac1136f63f77b161
--- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/b
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Ydefault
@@ -11,7 +11,7 @@ FoamFile
     format      ascii;
     class       volScalarField;
     location    "0";
-    object      b;
+    object      Ydefault;
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -21,26 +21,26 @@ internalField   uniform 0;
 
 boundaryField
 {
-    outlet
+
+    ".*"
     {
         type            zeroGradient;
     }
-    sides
+
+    fRight_zone_side
     {
-        type            zeroGradient;
+        type            wedge;
     }
-    base
+
+    fLeft_zone_side
     {
-        type            zeroGradient;
+        type            wedge;
     }
-    inlet
+
+    "(region0_to.*)"
     {
         type            zeroGradient;
     }
-    frontBack
-    {
-        type            empty;
-    }
 }
 
 
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Yv b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Yv
new file mode 100755
index 0000000000000000000000000000000000000000..7f2048e1e94ff3312de1ad4d14b1caf3708fdf6f
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/panelRegion/Yv
@@ -0,0 +1,46 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      Yv;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 0 0 0 0];
+
+internalField   uniform 1;
+
+boundaryField
+{
+    ".*"
+    {
+        type            zeroGradient;
+    }
+
+    fRight_zone_side
+    {
+        type            wedge;
+    }
+
+    fLeft_zone_side
+    {
+        type            wedge;
+    }
+
+    "(region0_to.*)"
+    {
+        type            zeroGradient;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/applications/solvers/combustion/fireFoam/Allwclean b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allclean
similarity index 53%
rename from applications/solvers/combustion/fireFoam/Allwclean
rename to tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allclean
index 713a0552018db8ec0774d506ed003e54a58054df..07dc128240dd5705bf192dcc6f40d91e770e01a6 100755
--- a/applications/solvers/combustion/fireFoam/Allwclean
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allclean
@@ -1,8 +1,10 @@
 #!/bin/sh
 cd ${0%/*} || exit 1    # run from this directory
-set -x
 
-wclean libso combustionModels
-wclean
+# Source tutorial clean functions
+. $WM_PROJECT_DIR/bin/tools/CleanFunctions
 
+cleanCase
+
+rm -r constant/panelRegion/polyMesh
 # ----------------------------------------------------------------- end-of-file
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun
new file mode 100755
index 0000000000000000000000000000000000000000..17b4dd27afd7cd43849767b9d0dc1827ea716a2a
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+# Set application name
+application=`getApplication`
+
+runApplication blockMesh
+
+runApplication setSet -batch cRefine.setSet
+runApplication refineMesh -overwrite -dict
+
+rm log.setSet
+runApplication setSet -batch f.setSet
+rm log.setSet
+runApplication setSet -batch fZone.setSet
+
+# create the pyrolysis region.
+runApplication extrudeToRegionMesh -overwrite
+
+
+rm log.setSet
+runApplication setSet -batch fBurner.setSet
+
+runApplication createPatch -overwrite
+
+decomposePar -force > log.decomposePar.log 2>&1
+
+decomposePar -region panelRegion > log.decomposParPanelRegion.log 2>&1
+
+runParallel `getApplication` 6
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/cRefine.setSet b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/cRefine.setSet
new file mode 100644
index 0000000000000000000000000000000000000000..526bfc6a738fad8a5de7c18642399a386a799a8e
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/cRefine.setSet
@@ -0,0 +1 @@
+cellSet refineCells new boxToCell (-0.15 0.0 -0.3)(0.15 2.4 0.3)
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/LESProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/LESProperties
new file mode 100644
index 0000000000000000000000000000000000000000..0967c7e0799d7b90f399b760f096e46f8bfe5923
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/LESProperties
@@ -0,0 +1,93 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      LESProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+LESModel        oneEqEddy;
+
+delta           cubeRootVol;
+
+turbulence      on;
+
+printCoeffs     on;
+
+oneEqEddyCoeffs
+{
+    Prt             1;
+}
+
+cubeRootVolCoeffs
+{
+    deltaCoeff      1;
+}
+
+PrandtlCoeffs
+{
+    delta           cubeRootVol;
+    cubeRootVolCoeffs
+    {
+        deltaCoeff      1;
+    }
+
+    smoothCoeffs
+    {
+        delta           cubeRootVol;
+        cubeRootVolCoeffs
+        {
+            deltaCoeff      1;
+        }
+
+        maxDeltaRatio   1.1;
+    }
+
+    Cdelta          0.158;
+}
+
+vanDriestCoeffs
+{
+    delta           cubeRootVol;
+    cubeRootVolCoeffs
+    {
+        deltaCoeff      1;
+    }
+
+    smoothCoeffs
+    {
+        delta           cubeRootVol;
+        cubeRootVolCoeffs
+        {
+            deltaCoeff      1;
+        }
+
+        maxDeltaRatio   1.1;
+    }
+
+    Aplus           26;
+    Cdelta          0.158;
+}
+
+smoothCoeffs
+{
+    delta           cubeRootVol;
+    cubeRootVolCoeffs
+    {
+        deltaCoeff      1;
+    }
+
+    maxDeltaRatio   1.1;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/additionalControls b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/additionalControls
new file mode 100644
index 0000000000000000000000000000000000000000..af372fbcbec69d98d26ebbc0e17c1158c3590e12
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/additionalControls
@@ -0,0 +1,20 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      additionalControls;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvePrimaryRegion true;
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/chemistryProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/chemistryProperties
new file mode 100644
index 0000000000000000000000000000000000000000..fca4f15a5cacd9815e78fb5fd469bb34807f1c5e
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/chemistryProperties
@@ -0,0 +1,29 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      chemistryProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+psiChemistryModel ODEChemistryModel<gasThermoPhysics>;
+
+chemistry       off;
+
+turbulentReaction off;
+
+chemistrySolver noChemistrySolver;
+
+initialChemicalTimeStep 1e-07;
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/combustionProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/combustionProperties
new file mode 100644
index 0000000000000000000000000000000000000000..c6378c0612e0b1e1bfd5f9f4ddcbbf9a3b723e70
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/combustionProperties
@@ -0,0 +1,25 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      combustionProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+combustionModel    infinitelyFastChemistry;
+
+infinitelyFastChemistryCoeffs
+{
+    C       10;
+}
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/g b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/g
new file mode 100644
index 0000000000000000000000000000000000000000..710f2a6ab52f36f1f771df6bec241ee2361134c5
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/g
@@ -0,0 +1,21 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       uniformDimensionedVectorField;
+    location    "constant";
+    object      g;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 1 -2 0 0 0 0];
+value           (0 -9.80665 0);
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/cellDecomposition b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/cellDecomposition
new file mode 100644
index 0000000000000000000000000000000000000000..07dc8690bb106cb53695b765b617e1eb8a5d167a
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/cellDecomposition
@@ -0,0 +1,34104 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       labelList;
+    location    "constant";
+    object      cellDecomposition;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+
+34080
+(
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+3
+3
+3
+3
+3
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+4
+4
+4
+4
+4
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+2
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+4
+)
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/chemistryProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/chemistryProperties
new file mode 100644
index 0000000000000000000000000000000000000000..bef3a6db5e883fb34e680752c4e4a9cea86f1648
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/chemistryProperties
@@ -0,0 +1,69 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      binary;
+    class       dictionary;
+    location    "constant";
+    object      chemistryProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solidChemistryModel  ODESolidChemistryModel<constSolidThermoPhysics>;
+
+gasThermoModel      gasThermoPhysics;
+
+chemistry           on;
+
+chemistrySolver     ode;
+
+initialChemicalTimeStep 1e-07;
+
+odeCoeffs
+{
+    solver          SIBS;
+    eps             0.05;
+}
+
+species
+(
+    gas
+);
+
+reactions
+(
+    irreversibleSolidArrheniusReaction
+    v  = gas + char
+    (7.83e10 15274.57 400 4.86)
+);
+
+
+gas
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       18.0153;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           5000;
+        Tcommon         1000;
+        highCpCoeffs    ( 2.67215 0.00305629 -8.73026e-07 1.20100e-10 -6.39162e-15 -29899.2 6.86282 );
+        lowCpCoeffs     ( 3.38684 0.00347498 -6.35470e-06 6.96858e-09 -2.50659e-12 -30208.1 2.59023 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/polyMesh/boundary b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/solidThermophysicalProperties
similarity index 52%
rename from tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/polyMesh/boundary
rename to tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/solidThermophysicalProperties
index 39c75e0d212e04c31d992b8a6bc1e7be7caa6a45..855cb612f4ac82d3794c5b159abd6821ac0f0349 100644
--- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/polyMesh/boundary
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/panelRegion/solidThermophysicalProperties
@@ -9,50 +9,63 @@ FoamFile
 {
     version     2.0;
     format      ascii;
-    class       polyBoundaryMesh;
-    location    "constant/polyMesh";
-    object      boundary;
+    class       dictionary;
+    object      solidThermophysicalProperties;
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-6
+thermoType
+solidMixtureThermo<reactingSolidMixture<constSolidTransport<constSolidRad<constSolidThermo<constRho>>>>>;
+
+solidComponents
 (
-    maxY
+    v char
+);
+
+vCoeffs
+{
+    transport
+    {
+        K           0.135;
+    }
+    radiation
     {
-        type            wall;
-        nFaces          300;
-        startFace       8300;
+        sigmaS      0.0;
+        kappa       0.0;  //opaque
+        emissivity  0.17;
     }
-    minX
+    thermodynamics
     {
-        type            patch;
-        nFaces          100;
-        startFace       8600;
+        Cp          696;
+        Hf          -1.41e6;
     }
-    maxX
+    density
+    {
+        rho         114.7;
+    }
+};
+
+charCoeffs
+{
+    transport
     {
-        type            patch;
-        nFaces          100;
-        startFace       8700;
+        K           0.4;
     }
-    minY
+    radiation
     {
-        type            wall;
-        nFaces          300;
-        startFace       8800;
+        sigmaS      0.0;
+        kappa       0.0;
+        emissivity  0.85;
     }
-    minZ
+    thermodynamics
     {
-        type            wall;
-        nFaces          300;
-        startFace       9100;
+        Cp          611;
+        Hf          0;
     }
-    maxZ
+    density
     {
-        type            wall;
-        nFaces          300;
-        startFace       9400;
+        rho         11.5;
     }
-)
+};
 
 // ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/polyMesh/blockMeshDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/polyMesh/blockMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..75241f19471efb1ef10e78889200c9ded8050cdb
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/polyMesh/blockMeshDict
@@ -0,0 +1,77 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+convertToMeters 1;
+
+vertices
+(
+    (-0.15 0 -0.6)
+    ( 0.15 0 -0.6)
+    ( 0.15 4.2 -0.6)
+    (-0.15 4.2 -0.6)
+    (-0.15 0 0.6)
+    ( 0.15 0 0.6)
+    ( 0.15 4.2 0.6)
+    (-0.15 4.2 0.6)
+);
+
+blocks
+(
+    hex (0 1 2 3 4 5 6 7) (16 124 24) simpleGrading (1 1 1)
+);
+
+edges
+(
+);
+
+boundary
+(
+    ground
+    {
+        type    wall;
+        faces
+        (
+            (0 1 5 4)
+        );
+    }
+
+    sides
+    {
+        type    patch;
+        faces
+        (
+            (1 2 6 5)
+            (0 3 2 1)
+            (0 4 7 3)
+            (6 7 4 5)
+        );
+    }
+
+    top
+    {
+        type    patch;
+        faces
+        (
+            (7 6 2 3)
+        );
+    }
+);
+
+mergePatchPairs
+(
+);
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/pyrolysisProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/pyrolysisProperties
new file mode 100644
index 0000000000000000000000000000000000000000..aba5535e401a9c00c5975e33e364599eb4d02397
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/pyrolysisProperties
@@ -0,0 +1,37 @@
+/*---------------------------------------------------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      binary;
+    class       dictionary;
+    location    "constant";
+    object      pyrolysisProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+active          true;
+
+pyrolysisModel  reactingOneDim;
+
+regionName      panelRegion;
+
+reactingOneDimCoeffs
+{
+    filmCoupled     false;
+
+    radFluxName     Qr;
+
+    minimumDelta    1e-8;
+
+    moveMesh        false;
+}
+
+infoOutput      true;
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/radiationProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/radiationProperties
new file mode 100644
index 0000000000000000000000000000000000000000..16f720763867d797e80d191cc31e870c136343f9
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/radiationProperties
@@ -0,0 +1,151 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      radiationProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+radiation       on;
+
+radiationModel  fvDOM;
+
+noRadiation
+{
+}
+
+P1Coeffs
+{
+}
+
+fvDOMCoeffs
+{
+    nPhi    3;          // azimuthal angles in PI/2 on X-Y.(from Y to X)
+    nTheta  6;          // polar angles in PI (from Z to X-Y plane)
+    convergence 1e-4;   // convergence criteria for radiation iteration
+    maxIter 4;         // maximum number of iterations
+}
+
+// Number of flow iterations per radiation iteration
+solverFreq 10;
+
+//absorptionEmissionModel constantAbsorptionEmission;
+absorptionEmissionModel greyMeanAbsorptionEmission;
+
+constantAbsorptionEmissionCoeffs
+{
+    a               a [ 0 -1 0 0 0 0 0 ] 0.01;
+    e               e [ 0 -1 0 0 0 0 0 ] 0.01;
+    E               E [ 1 -1 -3 0 0 0 0 ] 0;
+}
+
+greyMeanAbsorptionEmissionCoeffs
+{
+    lookUpTableFileName     none;
+
+    EhrrCoeff               0.2;
+
+    CO2
+    {
+        Tcommon         300;   //Common Temp
+        invTemp         true;   //Is the polynomio using inverse temperature.
+        Tlow            200;   //Low Temp
+        Thigh           2000;  //High Temp
+
+        loTcoeffs       //coefss for T < Tcommon
+        (
+            0           //  a0            +
+            0           //  a1*T          +
+            0           //  a2*T^(+/-)2   +
+            0           //  a3*T^(+/-)3   +
+            0           //  a4*T^(+/-)4   +
+            0           //  a5*T^(+/-)5   +
+        );
+        hiTcoeffs        //coefss for T > Tcommon
+        (
+            18.741
+            -121.31e3
+            273.5e6
+            -194.05e9
+            56.31e12
+            -5.8169e15
+        );
+
+    }
+
+    H2O
+    {
+        Tcommon         300;
+        invTemp         true;
+        Tlow            200;
+        Thigh           2000;
+
+        loTcoeffs
+        (
+            0
+            0
+            0
+            0
+            0
+            0
+        );
+        hiTcoeffs
+        (
+            -0.23093
+            -1.12390e3
+             9.4153e6
+            -2.99885e9
+             0.51382e12
+            -1.868e10
+        );
+    }
+
+    C3H8//CH4
+    {
+        Tcommon         300;
+        Tlow            200;
+        Thigh           2000;
+        invTemp         false;
+
+        loTcoeffs
+        (
+            0
+            0
+            0
+            0
+            0
+            0
+        );
+        hiTcoeffs
+        (
+            6.6334
+            -0.0035686
+            1.6682e-8
+            2.5611e-10
+            -2.6558e-14
+            0
+        );
+    }
+
+}
+
+scatterModel    constantScatter;
+
+constantScatterCoeffs
+{
+    sigma           sigma [ 0 -1 0 0 0 0 0 ] 0;
+    C               C [ 0 0 0 0 0 0 0 ] 0;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactingCloud1Properties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactingCloud1Properties
new file mode 100644
index 0000000000000000000000000000000000000000..f975d237d38c9a9f91f615b90996e21d78a04924
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactingCloud1Properties
@@ -0,0 +1,165 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      reactingCloud1Properties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solution
+{
+    active          false;
+    coupled         yes;
+    transient       yes;
+    cellValueSourceCorrection yes;
+
+    sourceTerms
+    {
+        schemes
+        {
+            rho             explicit 1;
+            U               explicit 1;
+            Yi              explicit 1;
+            hs              explicit 1;
+        }
+    }
+
+    interpolationSchemes
+    {
+        rho             cell;
+        U               cellPoint;
+        mu              cell;
+        T               cell;
+        Cp              cell;
+        p               cell;
+    }
+
+    integrationSchemes
+    {
+        U               Euler;
+        T               analytical;
+    }
+}
+
+constantProperties
+{
+    parcelTypeId    1;
+
+    rhoMin          1e-15;
+    TMin            200;
+    pMin            1000;
+    minParticleMass 1e-15;
+
+    rho0            1000;
+    T0              300;
+    Cp0             4187;
+
+    youngsModulus   1e9;
+    poissonsRatio   0.35;
+
+    epsilon0        1;
+    f0              0.5;
+    Pr              0.7;
+    Tvap            273;
+    Tbp             373;
+
+    constantVolume  false;
+}
+
+subModels
+{
+    particleForces
+    {
+        sphereDrag;
+        gravity;
+    }
+
+    injectionModel  coneInjection;
+
+    dispersionModel none;
+
+    patchInteractionModel standardWallInteraction;
+
+    heatTransferModel none;
+
+    compositionModel singlePhaseMixture;
+
+    phaseChangeModel none;
+
+    surfaceFilmModel thermoSurfaceFilm;
+
+    radiation       off;
+
+    coneInjectionCoeffs
+    {
+        SOI             0.000;
+        duration        20.000;
+        positionAxis
+        (
+            ((0.3 0.35 1.45) (0 0 -1))
+            ((0.6 0.35 1.45) (0 0 -1))
+        );
+
+        massTotal       10;
+        parcelsPerInjector 20000;
+        parcelsPerSecond 500;
+        parcelBasisType mass;
+        flowRateProfile constant 0.1;
+        Umag            constant 3.0;
+        thetaInner      constant 0;
+        thetaOuter      constant 45;
+
+        sizeDistribution
+        {
+            type         RosinRammler;
+            RosinRammlerDistribution
+            {
+                minValue        5e-04;
+                maxValue        0.0012;
+                d               7.5e-05;
+                n               0.5;
+            }
+        }
+    }
+
+    standardWallInteractionCoeffs
+    {
+        type            rebound;
+    }
+
+    singlePhaseMixtureCoeffs
+    {
+        phases
+        (
+            liquid
+            {
+                H2O          1;
+            }
+        );
+    }
+
+    thermoSurfaceFilmCoeffs
+    {
+        interactionType splashBai;
+        deltaWet        0.0005;
+        Adry            2630;
+        Awet            1320;
+        Cf              0.6;
+    }
+}
+
+
+cloudFunctions
+{}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactions b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactions
new file mode 100644
index 0000000000000000000000000000000000000000..5f29a1d87257a272858a2dbeed2ce599b8f7918d
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/reactions
@@ -0,0 +1,17 @@
+species
+(
+    O2
+    H2O
+    C3H8
+    CO2
+    N2
+);
+
+reactions
+{
+    propaneReaction
+    {
+        type         irreversibleinfiniteReaction;
+        reaction     "C3H8 + 5O2 + 18.8N2 = 3CO2 + 4H2O + 18.8N2";
+    }
+}
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/surfaceFilmProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/surfaceFilmProperties
new file mode 100644
index 0000000000000000000000000000000000000000..db5db22ec3ca2858880cd1644c582b526a90019d
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/surfaceFilmProperties
@@ -0,0 +1,22 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      SurfaceFilmProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+surfaceFilmModel none;
+
+regionName      none;
+
+active          false;
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermo.compressibleGas b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermo.compressibleGas
new file mode 100644
index 0000000000000000000000000000000000000000..e5c21d81c7fc7076fb0b88c18bb44791ae1ed977
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermo.compressibleGas
@@ -0,0 +1,126 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      thermo.compressibleGas;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+O2
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       31.9988;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           5000;
+        Tcommon         1000;
+        highCpCoeffs    ( 3.69758 0.00061352 -1.25884e-07 1.77528e-11 -1.13644e-15 -1233.93 3.18917 );
+        lowCpCoeffs     ( 3.21294 0.00112749 -5.75615e-07 1.31388e-09 -8.76855e-13 -1005.25 6.03474 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
+
+H2O
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       18.0153;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           5000;
+        Tcommon         1000;
+        highCpCoeffs    ( 2.67215 0.00305629 -8.73026e-07 1.201e-10 -6.39162e-15 -29899.2 6.86282 );
+        lowCpCoeffs     ( 3.38684 0.00347498 -6.3547e-06 6.96858e-09 -2.50659e-12 -30208.1 2.59023 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
+
+C3H8
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       44.01;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           5000;
+        Tcommon         1000;
+        highCpCoeffs    ( 7.5341368 0.018872239 -6.2718491e-06 9.1475649e-10 -4.7838069e-14 -16467.516 -17.892349 );
+        lowCpCoeffs     ( 0.93355381 0.026424579 6.1059727e-06 -2.1977499e-08 9.5149253e-12 -13958.52 19.201691 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
+
+CO2
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       44.01;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           5000;
+        Tcommon         1000;
+        highCpCoeffs    ( 4.45362 0.00314017 -1.27841e-06 2.394e-10 -1.66903e-14 -48967 -0.955396 );
+        lowCpCoeffs     ( 2.27572 0.00992207 -1.04091e-05 6.86669e-09 -2.11728e-12 -48373.1 10.1885 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
+
+N2
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       28.0134;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           5000;
+        Tcommon         1000;
+        highCpCoeffs    ( 2.92664 0.00148798 -5.68476e-07 1.0097e-10 -6.75335e-15 -922.798 5.98053 );
+        lowCpCoeffs     ( 3.29868 0.00140824 -3.96322e-06 5.64152e-09 -2.44486e-12 -1020.9 3.95037 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermophysicalProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermophysicalProperties
new file mode 100644
index 0000000000000000000000000000000000000000..ae4f537c47fdaa7f83d1fab5bbe94b880863252c
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/thermophysicalProperties
@@ -0,0 +1,45 @@
+/*---------------------------------------------------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      thermophysicalProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+thermoType hsPsiMixtureThermo<singleStepReactingMixture<gasThermoPhysics>>;
+
+
+inertSpecie N2;
+fuel        C3H8;
+
+chemistryReader foamChemistryReader;
+
+foamChemistryFile "$FOAM_CASE/constant/reactions";
+
+foamChemistryThermoFile "$FOAM_CASE/constant/thermo.compressibleGas";
+
+
+liquids
+{
+    liquidComponents
+    ();
+
+    H2O             H2O defaultCoeffs;
+}
+
+
+solids
+{
+    solidComponents
+    ();
+}
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/turbulenceProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/turbulenceProperties
new file mode 100644
index 0000000000000000000000000000000000000000..574f7f99b213508c2ad5b35a9cb3f2d4a367904e
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/turbulenceProperties
@@ -0,0 +1,23 @@
+/*---------------------------------------------------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      turbulenceProperties;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+simulationType  LESModel;
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/f.setSet b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/f.setSet
new file mode 100644
index 0000000000000000000000000000000000000000..10dfed3e4a81368889da1d0cdabd8a853f0f0792
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/f.setSet
@@ -0,0 +1,2 @@
+faceSet fLeft new boxToFace (-0.151 0 -0.3)(-0.14999 2.4 0.3)
+faceSet fRight new boxToFace (0.14999 0 -0.3)(0.151 2.4 0.3)
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/fBurner.setSet b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/fBurner.setSet
new file mode 100644
index 0000000000000000000000000000000000000000..eebf5d28b30c20bb406310053bfdc907ef7a09de
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/fBurner.setSet
@@ -0,0 +1 @@
+faceSet fBurner new boxToFace (-0.15 -0.001 -0.30) (0.15 0.001 0.30)
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/fZone.setSet b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/fZone.setSet
new file mode 100644
index 0000000000000000000000000000000000000000..75644274d55e4b78b9edc3e064e75b2fa450c226
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/fZone.setSet
@@ -0,0 +1,2 @@
+faceZoneSet fRight_zone new setToFaceZone fRight
+faceZoneSet fLeft_zone new setToFaceZone fLeft
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/controlDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/controlDict
new file mode 100644
index 0000000000000000000000000000000000000000..586afc015e058c12e2072dc07f9899fc0c3f1abc
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/controlDict
@@ -0,0 +1,57 @@
+/*---------------------------------------------------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version         2.0;
+    format          ascii;
+    class           dictionary;
+    object          controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+application     fireFoam;
+
+startFrom       latestTime;
+
+startTime       0;
+
+stopAt          endTime;
+
+endTime         15.0;
+
+deltaT          0.03;
+
+writeControl    adjustableRunTime;
+
+writeInterval   0.5;
+
+purgeWrite      0;
+
+writeFormat     ascii;
+
+writePrecision  6;
+
+writeCompression off;
+
+timeFormat      general;
+
+timePrecision   6;
+
+graphFormat     raw;
+
+runTimeModifiable yes;
+
+adjustTimeStep  yes;
+
+maxCo           0.5;
+
+maxDi           0.25;
+
+maxDeltaT       0.02;
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/createPatchDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/createPatchDict
new file mode 100644
index 0000000000000000000000000000000000000000..0cc1b3d564d1457be271d75b25b338c3839a4464
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/createPatchDict
@@ -0,0 +1,72 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      createPatchDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// This application/dictionary controls:
+// - optional: create new patches from boundary faces (either given as
+//   a set of patches or as a faceSet)
+// - always: order faces on coupled patches such that they are opposite. This
+//   is done for all coupled faces, not just for any patches created.
+// - optional: synchronise points on coupled patches.
+
+// 1. Create cyclic:
+// - specify where the faces should come from
+// - specify the type of cyclic. If a rotational specify the rotationAxis
+//   and centre to make matching easier
+// - always create both halves in one invocation with correct 'neighbourPatch'
+//   setting.
+// - optionally pointSync true to guarantee points to line up.
+
+// 2. Correct incorrect cyclic:
+// This will usually fail upon loading:
+//  "face 0 area does not match neighbour 2 by 0.0100005%"
+//  " -- possible face ordering problem."
+// - in polyMesh/boundary file:
+//      - loosen matchTolerance of all cyclics to get case to load
+//      - or change patch type from 'cyclic' to 'patch'
+//        and regenerate cyclic as above
+
+
+// Do a synchronisation of coupled points after creation of any patches.
+// Note: this does not work with points that are on multiple coupled patches
+//       with transformations (i.e. cyclics).
+pointSync false;
+
+// Patches to create.
+patches
+(
+    {
+        // Name of new patch
+        name burner;
+
+        // Dictionary to construct new patch from
+        patchInfo
+        {
+            type patch;
+        }
+
+        // How to construct: either from 'patches' or 'set'
+        constructFrom set;
+
+        // If constructFrom = patches : names of patches. Wildcards allowed.
+        //patches (periodic1);
+
+        // If constructFrom = set : name of faceSet
+        set fBurner;
+    }
+);
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/decomposeParDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/decomposeParDict
new file mode 100644
index 0000000000000000000000000000000000000000..1b4915684a65e65265d0f680e38875c11a3cc7c6
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/decomposeParDict
@@ -0,0 +1,44 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      decomposeParDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+numberOfSubdomains 6;
+
+method          simple;
+
+simpleCoeffs
+{
+    n               ( 1 3 2 );
+    delta           0.001;
+}
+
+hierarchicalCoeffs
+{
+    n               ( 1 2 2 );
+    delta           0.001;
+    order           xyz;
+}
+
+manualCoeffs
+{
+    dataFile        "cellDecomposition";
+}
+
+scotchCoeffs
+{
+}
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/extrudeToRegionMeshDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/extrudeToRegionMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..5d47b1b657c4b5d1f73155c82e31dfa45383080e
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/extrudeToRegionMeshDict
@@ -0,0 +1,38 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      extrudeToRegionMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+region          panelRegion;
+
+faceZones       (fRight_zone fLeft_zone);
+
+oneD            true;
+
+oneDPolyPatchType emptyPolyPatch; //wedgePolyPatch
+
+extrudeModel    linearNormal;
+
+nLayers         5;
+
+expansionRatio  1;
+
+adaptMesh       true; // directMapped for both
+
+linearNormalCoeffs
+{
+    thickness       0.01;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes
new file mode 100644
index 0000000000000000000000000000000000000000..b4775a599000844ec36b19c5b1c693be62fb83ec
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes
@@ -0,0 +1,76 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+    default         Euler;
+}
+
+gradSchemes
+{
+    default         Gauss linear;
+}
+
+divSchemes
+{
+    default         none;
+    div(phi,U)      Gauss limitedLinear 1;
+    div(phi,k)      Gauss limitedLinear 1;
+    div(phi,Yi_hs)  Gauss multivariateSelection
+    {
+        O2              limitedLinear01 1;
+        N2              limitedLinear01 1;
+        C3H8            limitedLinear01 1;
+        H2O             limitedLinear01 1;
+        CO2             limitedLinear01 1;
+        hs              limitedLinear 1;
+    };
+    div((muEff*dev2(T(grad(U))))) Gauss linear;
+    div(phiU,p)         Gauss linear;
+    div(Ji,Ii_h)        Gauss upwind;
+}
+
+laplacianSchemes
+{
+    //default         none;
+    default         Gauss linear corrected;
+    laplacian(muEff,U) Gauss linear corrected;
+    laplacian(DkEff,k) Gauss linear corrected;
+    laplacian(alphaEff,hs) Gauss linear corrected;
+    laplacian((((rho*(1|A(U)))*rho)*gh)) Gauss linear corrected;
+    laplacian(interpolate((rho*(1|A(U)))),p) Gauss linear corrected;
+    laplacian(gammaRad,G) Gauss linear corrected;
+}
+
+interpolationSchemes
+{
+    default         linear;
+}
+
+snGradSchemes
+{
+    default         corrected;
+}
+
+fluxRequired
+{
+    default         no;
+    p_rgh;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSolution b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSolution
new file mode 100644
index 0000000000000000000000000000000000000000..74f77b4283f460e1478cc8b1184ea712fd5e8100
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSolution
@@ -0,0 +1,118 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+    rho
+    {
+        solver          PCG;
+        preconditioner  DIC;
+        tolerance       1e-6;
+        relTol          0;
+    };
+
+    "(rho)Final"
+    {
+        $rho;
+        relTol          0;
+    }
+
+    p_rgh
+    {
+        solver              GAMG;
+        tolerance           1e-5;
+        relTol              0.01;
+        smoother            GaussSeidel;
+        cacheAgglomeration  true;
+        nCellsInCoarsestLevel   10;
+        agglomerator    faceAreaPair;
+        mergeLevels     1;
+    };
+
+    p_rghFinal
+    {
+        solver              GAMG;
+        tolerance           1e-6;
+        relTol              0;
+        smoother            GaussSeidel;
+        cacheAgglomeration  true;
+        nCellsInCoarsestLevel 10;
+        agglomerator     faceAreaPair;
+        mergeLevels      1;
+    };
+
+
+    "(U|k)"
+    {
+        solver          PBiCG;
+        preconditioner  DILU;
+        tolerance       1e-6;
+        relTol          0.01;
+    };
+
+    "(U|k)Final"
+    {
+        $U;
+        relTol          0;
+    };
+
+
+    "(hs|hsFinal|Yi)"
+    {
+        solver          PBiCG;
+        preconditioner  DILU;
+        tolerance       1e-8;
+        relTol          0;
+    };
+
+    Ii
+    {
+        solver              GAMG;
+        tolerance           1e-4;
+        relTol              0;
+        smoother            DILU;
+        cacheAgglomeration  true;
+        nCellsInCoarsestLevel   10;
+        agglomerator    faceAreaPair;
+        mergeLevels     1;
+    }
+
+    G
+    {
+        solver          PCG;
+        preconditioner  DIC;
+        tolerance       1e-06;
+        relTol          0;
+    }
+
+}
+
+PIMPLE
+{
+    momentumPredictor yes;
+    nOuterCorrectors  2;
+    nCorrectors       1;
+    nNonOrthogonalCorrectors 0;
+}
+
+relaxationFactors
+{
+    "(U|k).*"                   1;
+    "(C3H8|O2|H2O|CO2|hs).*"    1;
+}
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/decomposeParDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/decomposeParDict
new file mode 100644
index 0000000000000000000000000000000000000000..49efdc7a03b83d57b9bd734508d1a1b20cc311ef
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/decomposeParDict
@@ -0,0 +1,53 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      decomposeParDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+numberOfSubdomains 6;
+
+
+method          structured;
+
+structuredCoeffs
+{
+    method      hierarchical;
+    patches     (region0_to_panelRegion_fRight_zone region0_to_panelRegion_fLeft_zone);
+
+    hierarchicalCoeffs
+    {
+         n               ( 2 3 1 );
+         delta           0.001;
+         order           xyz;
+    }
+}
+
+
+hierarchicalCoeffs
+{
+    n               ( 1 2 2 );
+    delta           0.001;
+    order           xyz;
+}
+
+manualCoeffs
+{
+    dataFile        "cellDecomposition";
+}
+
+metisCoeffs
+{
+}
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSchemes b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSchemes
new file mode 100644
index 0000000000000000000000000000000000000000..5d3a6809a33fa262929f9e9fda321050a634263d
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSchemes
@@ -0,0 +1,53 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+    default Euler;
+}
+
+gradSchemes
+{
+    default         Gauss linear;
+}
+
+divSchemes
+{
+    default        none;
+}
+
+laplacianSchemes
+{
+    default         none;
+    laplacian(K,T)  Gauss linear uncorrected;
+}
+
+interpolationSchemes
+{
+    default         linear;
+}
+
+snGradSchemes
+{
+    default        uncorrected;
+}
+
+fluxRequired
+{
+    default         no;
+}
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSolution b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSolution
new file mode 100644
index 0000000000000000000000000000000000000000..98aec611d77b50f4acce6ea658f6aafd191d330a
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/panelRegion/fvSolution
@@ -0,0 +1,55 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+    T
+    {
+        solver          PCG;
+        preconditioner  DIC;
+        tolerance       1e-6;
+        relTol          0;
+    }
+
+    "Yi"
+    {
+        solver          PBiCG;
+        preconditioner  DILU;
+        tolerance       1e-06;
+        relTol          0;
+    }
+
+    "rho|rhot"
+    {
+        solver          PCG;
+        preconditioner  DIC;
+        tolerance       0;
+        relTol          0;
+    };
+
+}
+
+SIMPLE
+{
+    nNonOrthCorr    0;
+}
+
+relaxationFactors
+{
+    T               1;
+}
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/refineMeshDict b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/refineMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..2735737bb826b72d57390fdbf6162031daf709d3
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/refineMeshDict
@@ -0,0 +1,65 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      refineMeshDict;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// Cells to refine; name of cell set
+set refineCells;
+
+// Type of coordinate system:
+// - global : coordinate system same for every cell. Usually aligned with
+//   x,y,z axis. Specify in globalCoeffs section below.
+// - patchLocal : coordinate system different for every cell. Specify in
+//   patchLocalCoeffs section below.
+//coordinateSystem global;
+coordinateSystem global;
+
+
+// .. and its coefficients. x,y in this case. (normal direction is calculated
+// as tan1^tan2)
+globalCoeffs
+{
+    tan1 (0 1 0);
+    tan2 (0 0 1);
+}
+
+patchLocalCoeffs
+{
+    patch patchName; //Normal direction is facenormal of zero'th face of patch
+    tan1 (0 1 0);
+    tan2 (0 0 1);
+}
+
+// List of directions to refine
+directions
+(
+    tan1
+    tan2
+    normal
+);
+
+// Whether to use hex topology. This will
+// - if patchLocal: all cells on selected patch should be hex
+// - split all hexes in 2x2x2 through the middle of edges.
+useHexTopology  true;
+
+// Cut purely geometric (will cut hexes through vertices) or take topology
+// into account. Incompatible with useHexTopology
+geometricCut    false;
+
+// Write meshes from intermediate steps
+writeMesh       false;
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/fu b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/CH4
similarity index 98%
rename from tutorials/combustion/fireFoam/les/smallPoolFire2D/0/fu
rename to tutorials/combustion/fireFoam/les/smallPoolFire2D/0/CH4
index 8451b3a9efb36e534d3d2faef0f86bc0363d8f27..0b1e0de832de26e3b346ee85c47d3188e7e9bd37 100644
--- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/fu
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/CH4
@@ -11,7 +11,7 @@ FoamFile
     format      ascii;
     class       volScalarField;
     location    "0";
-    object      fu;
+    object      CH4;
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/N2 b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/N2
new file mode 100644
index 0000000000000000000000000000000000000000..d03d685b405a00e177a447500e24432f60173ec9
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/N2
@@ -0,0 +1,52 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      N2;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 0 0 0 0];
+
+internalField   uniform 0.76699;
+
+boundaryField
+{
+    outlet
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+    sides
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+    base
+    {
+        type            zeroGradient;
+    }
+    inlet
+    {
+        type            fixedValue;
+        value           uniform 0;
+    }
+    frontBack
+    {
+        type            empty;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/O2 b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/O2
new file mode 100644
index 0000000000000000000000000000000000000000..b433139678f169ca2a8d21e89b1d262721cfc6f7
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/O2
@@ -0,0 +1,52 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      O2;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 0 0 0 0];
+
+internalField   uniform 0.23301;
+
+boundaryField
+{
+    outlet
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+    sides
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+    base
+    {
+        type            zeroGradient;
+    }
+    inlet
+    {
+        type            fixedValue;
+        value           uniform 0;
+    }
+    frontBack
+    {
+        type            empty;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/ft b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/Ydefault
old mode 100644
new mode 100755
similarity index 86%
rename from tutorials/combustion/fireFoam/les/smallPoolFire2D/0/ft
rename to tutorials/combustion/fireFoam/les/smallPoolFire2D/0/Ydefault
index d84a10a7d653e81a04ca98eb08c8cc7cce4e2099..9536e7a9f2e144881e276b928aff2533ec9bf383
--- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/ft
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/Ydefault
@@ -11,7 +11,7 @@ FoamFile
     format      ascii;
     class       volScalarField;
     location    "0";
-    object      ft;
+    object      Ydefault;
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -21,26 +21,29 @@ internalField   uniform 0;
 
 boundaryField
 {
-    outlet
+    base
     {
-        type            inletOutlet;
-        inletValue      uniform 0;
-        value           uniform 0;
+        type            zeroGradient;
     }
-    sides
+
+    outlet
     {
         type            inletOutlet;
-        inletValue      uniform 0;
-        value           uniform 0;
-    }
-    base
-    {
-        type            zeroGradient;
+        inletValue      $internalField;
+        value           $internalField;
     }
+
     inlet
     {
         type            fixedValue;
-        value           uniform 1.0;
+        value           uniform 0;
+    }
+
+    sides
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
     }
     frontBack
     {
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/SpeciesTable b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/SpeciesTable
deleted file mode 100644
index e387970281a9821705966649484bbf24343832d7..0000000000000000000000000000000000000000
--- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/SpeciesTable
+++ /dev/null
@@ -1,491 +0,0 @@
-/*--------------------------------*- C++ -*----------------------------------*\
-| =========                 |                                                 |
-| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
-|  \\    /   O peration     | Version:  dev                                   |
-|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
-|    \\/     M anipulation  |                                                 |
-\*---------------------------------------------------------------------------*/
-FoamFile
-{
-    version     2.0;
-    format      ascii;
-    class       dictionary;
-    location    "constant";
-    object      SpeciesTable;
-}
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-fields
-1
-(
-
-{
-    name            ft;
-    min             0;
-    max             1;
-    N               100;
-}
-
-)
-;
-output
-5
-(
-
-{
-    name            CH4;
-}
-
-
-{
-    name            CO2;
-}
-
-
-{
-    name            H2O;
-}
-
-
-{
-    name            CO;
-}
-
-
-{
-    name            soot;
-}
-
-)
-;
-values
-6
-(
-
-101
-(
-0.001
-0.011
-0.021
-0.031
-0.041
-0.051
-0.061
-0.071
-0.081
-0.091
-0.101
-0.111
-0.121
-0.131
-0.141
-0.151
-0.161
-0.171
-0.181
-0.191
-0.201
-0.211
-0.221
-0.231
-0.241
-0.251
-0.261
-0.271
-0.281
-0.291
-0.301
-0.311
-0.321
-0.331
-0.341
-0.351
-0.361
-0.371
-0.381
-0.391
-0.401
-0.411
-0.421
-0.431
-0.441
-0.451
-0.461
-0.471
-0.481
-0.491
-0.501
-0.511
-0.521
-0.531
-0.541
-0.551
-0.561
-0.571
-0.581
-0.591
-0.601
-0.611
-0.621
-0.631
-0.641
-0.651
-0.661
-0.671
-0.681
-0.691
-0.701
-0.711
-0.721
-0.731
-0.741
-0.751
-0.761
-0.771
-0.781
-0.791
-0.801
-0.811
-0.821
-0.831
-0.841
-0.851
-0.861
-0.871
-0.881
-0.891
-0.901
-0.911
-0.921
-0.931
-0.941
-0.951
-0.961
-0.971
-0.981
-0.991
-0.999
-)
-
-
-101
-(
-0
-0
-0
-0
-0
-0
-0.0105883
-0.0285208
-0.0461843
-0.0635849
-0.0807284
-0.0976204
-0.114266
-0.130672
-0.146842
-0.162782
-0.178496
-0.193989
-0.209266
-0.224332
-0.23919
-0.253845
-0.268301
-0.282563
-0.296633
-0.310517
-0.324216
-0.337736
-0.35108
-0.364251
-0.377252
-0.390087
-0.402759
-0.415271
-0.427625
-0.439826
-0.451876
-0.463777
-0.475532
-0.487144
-0.498616
-0.50995
-0.521148
-0.532214
-0.543149
-0.553955
-0.564635
-0.575191
-0.585626
-0.595941
-0.606138
-0.61622
-0.626187
-0.636044
-0.64579
-0.655428
-0.66496
-0.674387
-0.683712
-0.692935
-0.702059
-0.711085
-0.720014
-0.728849
-0.73759
-0.74624
-0.754799
-0.763269
-0.771652
-0.779948
-0.788159
-0.796287
-0.804332
-0.812297
-0.820181
-0.827987
-0.835715
-0.843367
-0.850943
-0.858445
-0.865875
-0.873232
-0.880518
-0.887735
-0.894882
-0.901961
-0.908974
-0.91592
-0.922802
-0.929619
-0.936373
-0.943064
-0.949694
-0.956263
-0.962772
-0.969222
-0.975614
-0.981948
-0.988226
-0.994448
-0.999385
-)
-
-
-101
-(
-0.00200328
-0.0213922
-0.0396804
-0.0569589
-0.0733092
-0.088804
-0.0940165
-0.0923125
-0.0906341
-0.0889806
-0.0873516
-0.0857465
-0.0841647
-0.0826058
-0.0810693
-0.0795547
-0.0780615
-0.0765893
-0.0751376
-0.073706
-0.0722942
-0.0709016
-0.0695279
-0.0681728
-0.0668357
-0.0655165
-0.0642147
-0.06293
-0.0616621
-0.0604105
-0.0591751
-0.0579555
-0.0567514
-0.0555625
-0.0543885
-0.0532292
-0.0520842
-0.0509534
-0.0498363
-0.0487329
-0.0476428
-0.0465658
-0.0455017
-0.0444503
-0.0434112
-0.0423844
-0.0413695
-0.0403664
-0.0393749
-0.0383948
-0.0374258
-0.0364678
-0.0355206
-0.0345841
-0.033658
-0.0327421
-0.0318364
-0.0309406
-0.0300546
-0.0291781
-0.0283112
-0.0274535
-0.026605
-0.0257655
-0.0249349
-0.024113
-0.0232997
-0.0224948
-0.0216983
-0.0209099
-0.0201297
-0.0193573
-0.0185928
-0.0178361
-0.0170869
-0.0163452
-0.0156108
-0.0148837
-0.0141638
-0.0134509
-0.0127449
-0.0120458
-0.0113535
-0.0106678
-0.00998859
-0.00931588
-0.00864953
-0.00798947
-0.00733558
-0.0066878
-0.00604604
-0.00541021
-0.00478022
-0.00415601
-0.00353749
-0.00292458
-0.00231721
-0.00171531
-0.00111879
-0.000527591
-5.8413e-05
-)
-
-
-101
-(
-0.00400655
-0.0427844
-0.0793607
-0.113918
-0.146618
-0.177608
-0.188033
-0.184625
-0.181268
-0.177961
-0.174703
-0.171493
-0.168329
-0.165212
-0.162139
-0.159109
-0.156123
-0.153179
-0.150275
-0.147412
-0.144588
-0.141803
-0.139056
-0.136346
-0.133671
-0.131033
-0.128429
-0.12586
-0.123324
-0.120821
-0.11835
-0.115911
-0.113503
-0.111125
-0.108777
-0.106458
-0.104168
-0.101907
-0.0996727
-0.0974658
-0.0952856
-0.0931317
-0.0910035
-0.0889006
-0.0868225
-0.0847688
-0.082739
-0.0807328
-0.0787498
-0.0767895
-0.0748516
-0.0729356
-0.0710413
-0.0691682
-0.067316
-0.0654843
-0.0636728
-0.0618812
-0.0601091
-0.0583563
-0.0566223
-0.054907
-0.05321
-0.051531
-0.0498697
-0.0482259
-0.0465993
-0.0449896
-0.0433965
-0.0418198
-0.0402593
-0.0387147
-0.0371857
-0.0356721
-0.0341737
-0.0326903
-0.0312216
-0.0297674
-0.0283276
-0.0269018
-0.0254899
-0.0240917
-0.022707
-0.0213355
-0.0199772
-0.0186318
-0.0172991
-0.0159789
-0.0146712
-0.0133756
-0.0120921
-0.0108204
-0.00956045
-0.00831202
-0.00707498
-0.00584917
-0.00463443
-0.00343062
-0.00223758
-0.00105518
-0.000116826
-)
-
-101{0}
-101{0}
-)
-;
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/additionalControls b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/additionalControls
new file mode 100644
index 0000000000000000000000000000000000000000..af372fbcbec69d98d26ebbc0e17c1158c3590e12
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/additionalControls
@@ -0,0 +1,20 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      additionalControls;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvePrimaryRegion true;
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/chemistryProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/chemistryProperties
new file mode 100644
index 0000000000000000000000000000000000000000..fca4f15a5cacd9815e78fb5fd469bb34807f1c5e
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/chemistryProperties
@@ -0,0 +1,29 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      chemistryProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+psiChemistryModel ODEChemistryModel<gasThermoPhysics>;
+
+chemistry       off;
+
+turbulentReaction off;
+
+chemistrySolver noChemistrySolver;
+
+initialChemicalTimeStep 1e-07;
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/pyrolysisProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/pyrolysisProperties
new file mode 100644
index 0000000000000000000000000000000000000000..3dfb0fbe7153e173cdc5c627b55078ced053771f
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/pyrolysisProperties
@@ -0,0 +1,37 @@
+/*---------------------------------------------------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      binary;
+    class       dictionary;
+    location    "constant";
+    object      pyrolysisProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+active          false;
+
+pyrolysisModel  none;
+
+regionName      panelRegion;
+
+reactingOneDimCoeffs
+{
+    filmCoupled     false;
+
+    radFluxName     Qr;
+
+    minimumDelta    1e-8;
+
+    moveMesh        false;
+}
+
+infoOutput      false;
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties
index d7b2c3f4e38267cd4802f7d1d330a0f10753ff63..8d7ce6f129074f9c5a1e8cc7a9236559f352a060 100644
--- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties
@@ -49,7 +49,7 @@ constantAbsorptionEmissionCoeffs
 
 greyMeanAbsorptionEmissionCoeffs
 {
-    lookUpTableFileName     "SpeciesTable";
+    lookUpTableFileName     none;
 
     EhrrCoeff                0.0;
 
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactingCloud1Properties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactingCloud1Properties
new file mode 100644
index 0000000000000000000000000000000000000000..f975d237d38c9a9f91f615b90996e21d78a04924
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactingCloud1Properties
@@ -0,0 +1,165 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      reactingCloud1Properties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solution
+{
+    active          false;
+    coupled         yes;
+    transient       yes;
+    cellValueSourceCorrection yes;
+
+    sourceTerms
+    {
+        schemes
+        {
+            rho             explicit 1;
+            U               explicit 1;
+            Yi              explicit 1;
+            hs              explicit 1;
+        }
+    }
+
+    interpolationSchemes
+    {
+        rho             cell;
+        U               cellPoint;
+        mu              cell;
+        T               cell;
+        Cp              cell;
+        p               cell;
+    }
+
+    integrationSchemes
+    {
+        U               Euler;
+        T               analytical;
+    }
+}
+
+constantProperties
+{
+    parcelTypeId    1;
+
+    rhoMin          1e-15;
+    TMin            200;
+    pMin            1000;
+    minParticleMass 1e-15;
+
+    rho0            1000;
+    T0              300;
+    Cp0             4187;
+
+    youngsModulus   1e9;
+    poissonsRatio   0.35;
+
+    epsilon0        1;
+    f0              0.5;
+    Pr              0.7;
+    Tvap            273;
+    Tbp             373;
+
+    constantVolume  false;
+}
+
+subModels
+{
+    particleForces
+    {
+        sphereDrag;
+        gravity;
+    }
+
+    injectionModel  coneInjection;
+
+    dispersionModel none;
+
+    patchInteractionModel standardWallInteraction;
+
+    heatTransferModel none;
+
+    compositionModel singlePhaseMixture;
+
+    phaseChangeModel none;
+
+    surfaceFilmModel thermoSurfaceFilm;
+
+    radiation       off;
+
+    coneInjectionCoeffs
+    {
+        SOI             0.000;
+        duration        20.000;
+        positionAxis
+        (
+            ((0.3 0.35 1.45) (0 0 -1))
+            ((0.6 0.35 1.45) (0 0 -1))
+        );
+
+        massTotal       10;
+        parcelsPerInjector 20000;
+        parcelsPerSecond 500;
+        parcelBasisType mass;
+        flowRateProfile constant 0.1;
+        Umag            constant 3.0;
+        thetaInner      constant 0;
+        thetaOuter      constant 45;
+
+        sizeDistribution
+        {
+            type         RosinRammler;
+            RosinRammlerDistribution
+            {
+                minValue        5e-04;
+                maxValue        0.0012;
+                d               7.5e-05;
+                n               0.5;
+            }
+        }
+    }
+
+    standardWallInteractionCoeffs
+    {
+        type            rebound;
+    }
+
+    singlePhaseMixtureCoeffs
+    {
+        phases
+        (
+            liquid
+            {
+                H2O          1;
+            }
+        );
+    }
+
+    thermoSurfaceFilmCoeffs
+    {
+        interactionType splashBai;
+        deltaWet        0.0005;
+        Adry            2630;
+        Awet            1320;
+        Cf              0.6;
+    }
+}
+
+
+cloudFunctions
+{}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions
new file mode 100644
index 0000000000000000000000000000000000000000..c174cf789ecfdfbaf6128592efbd6123e013f690
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions
@@ -0,0 +1,17 @@
+species
+(
+    O2
+    H2O
+    CH4
+    CO2
+    N2
+);
+
+reactions
+{
+    propaneReaction
+    {
+        type         irreversibleinfiniteReaction;
+        reaction     "CH4 + 2O2 = CO2 + 2H2O";
+    }
+}
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/surfaceFilmProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/surfaceFilmProperties
new file mode 100644
index 0000000000000000000000000000000000000000..db5db22ec3ca2858880cd1644c582b526a90019d
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/surfaceFilmProperties
@@ -0,0 +1,22 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      SurfaceFilmProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+surfaceFilmModel none;
+
+regionName      none;
+
+active          false;
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermo.compressibleGas b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermo.compressibleGas
new file mode 100644
index 0000000000000000000000000000000000000000..367faadefd70ebf2c4d580105ef0ea3a76dc4dad
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermo.compressibleGas
@@ -0,0 +1,126 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      thermo.compressibleGas;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+O2
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       31.9988;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           5000;
+        Tcommon         1000;
+        highCpCoeffs    ( 3.69758 0.00061352 -1.25884e-07 1.77528e-11 -1.13644e-15 -1233.93 3.18917 );
+        lowCpCoeffs     ( 3.21294 0.00112749 -5.75615e-07 1.31388e-09 -8.76855e-13 -1005.25 6.03474 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
+
+H2O
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       18.0153;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           5000;
+        Tcommon         1000;
+        highCpCoeffs    ( 2.67215 0.00305629 -8.73026e-07 1.201e-10 -6.39162e-15 -29899.2 6.86282 );
+        lowCpCoeffs     ( 3.38684 0.00347498 -6.3547e-06 6.96858e-09 -2.50659e-12 -30208.1 2.59023 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
+
+CH4
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       16.0428;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           6000;
+        Tcommon         1000;
+        highCpCoeffs    ( 1.63543 0.0100844 -3.36924e-06 5.34973e-10 -3.15528e-14 -10005.6 9.9937 );
+        lowCpCoeffs     ( 5.14988 -0.013671 4.91801e-05 -4.84744e-08 1.66694e-11 -10246.6 -4.64132 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
+
+CO2
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       44.01;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           5000;
+        Tcommon         1000;
+        highCpCoeffs    ( 4.45362 0.00314017 -1.27841e-06 2.394e-10 -1.66903e-14 -48967 -0.955396 );
+        lowCpCoeffs     ( 2.27572 0.00992207 -1.04091e-05 6.86669e-09 -2.11728e-12 -48373.1 10.1885 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
+
+N2
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       28.0134;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           5000;
+        Tcommon         1000;
+        highCpCoeffs    ( 2.92664 0.00148798 -5.68476e-07 1.0097e-10 -6.75335e-15 -922.798 5.98053 );
+        lowCpCoeffs     ( 3.29868 0.00140824 -3.96322e-06 5.64152e-09 -2.44486e-12 -1020.9 3.95037 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties
index 021d55435533c1b0946c50504e9f63b1d864a44a..f593a1dd1264a63aebc98419d9edacb6369ef97f 100644
--- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties
@@ -15,79 +15,23 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-thermoType      hsPsiMixtureThermo<veryInhomogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>;
+thermoType hsPsiMixtureThermo<singleStepReactingMixture<gasThermoPhysics>>;
 
-stoichiometricAirFuelMassRatio stoichiometricAirFuelMassRatio [ 0 0 0 0 0 0 0 ] 17.1271;
+inertSpecie N2;
+fuel        CH4;
 
-stoichiometricOxygenFuelMassRatio stoichiometricOxygenFuelMassRatio [ 0 0 0 0 0 0 0 ] 4;
+chemistryReader foamChemistryReader;
 
-qFuel           qFuel [ 0 2 -2 0 0 0 0 ] 5.00264e+07;
+foamChemistryFile "$FOAM_CASE/constant/reactions";
 
-fuel
-{
-    specie
-    {
-        nMoles          1;
-        molWeight       16.0428;
-    }
-    thermodynamics
-    {
-        Tlow            200;
-        Thigh           6000;
-        Tcommon         1000;
-        highCpCoeffs    ( 1.63543 0.0100844 -3.36924e-06 5.34973e-10 -3.15528e-14 -10005.6 9.9937 );
-        lowCpCoeffs     ( 5.14988 -0.013671 4.91801e-05 -4.84744e-08 1.66694e-11 -10246.6 -4.64132 );
-    }
-    transport
-    {
-        As              1.67212e-06;
-        Ts              170.672;
-    }
-}
+foamChemistryThermoFile "$FOAM_CASE/constant/thermo.compressibleGas";
 
-oxidant
+liquids
 {
-    specie
-    {
-        nMoles          1;
-        molWeight       28.8504;
-    }
-    thermodynamics
-    {
-        Tlow            200;
-        Thigh           6000;
-        Tcommon         1000;
-        highCpCoeffs    ( 3.10131 0.00124137 -4.18816e-07 6.64158e-11 -3.91274e-15 -985.266 5.35597 );
-        lowCpCoeffs     ( 3.58378 -0.000727005 1.67057e-06 -1.09203e-10 -4.31765e-13 -1050.53 3.11239 );
-    }
-    transport
-    {
-        As              1.67212e-06;
-        Ts              170.672;
-    }
-}
+    liquidComponents
+    ();
 
-burntProducts
-{
-specie
-{
-    nMoles          1;
-    molWeight       27.6334;
+    H2O             H2O defaultCoeffs;
 }
-thermodynamics
-{
-    Tlow            200;
-    Thigh           6000;
-    Tcommon         1000;
-    highCpCoeffs    ( 3.0602 0.00182422 -5.93878e-07 8.93807e-11 -4.97595e-15 -10998.7 5.32209 );
-    lowCpCoeffs     ( 3.54628 0.000378279 2.02797e-07 9.31602e-10 -6.84016e-13 -11102.1 2.90098 );
-}
-transport
-{
-    As              1.67212e-06;
-    Ts              170.672;
-}
-}
-
 
 // ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes b/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes
index 4402f372524239fd37cf34718cfb27eff9b5beb2..5c8063431d1ba700472f497ecd6d10701c8368fe 100644
--- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes
@@ -30,11 +30,13 @@ divSchemes
     default         none;
     div(phi,U)      Gauss limitedLinear 1;
     div(phi,k)      Gauss limitedLinear 1;
-    flux(phi,ft)    Gauss limitedLinear01 1;
-    div(phi,ft_b_h) Gauss multivariateSelection
+    div(phi,Yi_hs)  Gauss multivariateSelection
     {
-        fu              limitedLinear01 1;
-        ft              limitedLinear01 1;
+        O2              limitedLinear01 1;
+        CH4             limitedLinear01 1;
+        N2              limitedLinear01 1;
+        H2O             limitedLinear01 1;
+        CO2             limitedLinear01 1;
         hs              limitedLinear 1;
     };
     div((muEff*dev2(T(grad(U))))) Gauss linear;
@@ -44,7 +46,7 @@ divSchemes
 
 laplacianSchemes
 {
-    default         Gauss linear uncorrected;
+    default         Gauss linear corrected;
 }
 
 interpolationSchemes
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSolution b/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSolution
index 10c1c27de7506d06df5735086d5f8661e0aa782f..5a7b7a980a4652f368af9e122b3f3b8f93119d90 100644
--- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSolution
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSolution
@@ -53,16 +53,16 @@ solvers
     };
 
 
-    "(U|ft|fu|k|hs)"
+    "(U|Yi|k|hs)"
     {
-        solver          smoothSolver;
-        smoother        GaussSeidel;
+        solver          PBiCG;
+        preconditioner  DILU;
         tolerance       1e-7;
         relTol          0.1;
         nSweeps         1;
     };
 
-    "(U|ft|fu|k|hs)Final"
+    "(U|Yi|k|hs)Final"
     {
         $U;
         tolerance       1e-7;
@@ -100,4 +100,10 @@ PIMPLE
     nNonOrthogonalCorrectors 0;
 }
 
+relaxationFactors
+{
+    "(U|k).*"                   1;
+    "(C3H8|O2|H2O|CO2|hs).*"    0.9;
+}
+
 // ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/ft b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/CH4
similarity index 98%
rename from tutorials/combustion/fireFoam/les/smallPoolFire3D/0/ft
rename to tutorials/combustion/fireFoam/les/smallPoolFire3D/0/CH4
index d24a5478e180909c4c274b78b140437fb0b7b837..219f5ffe6097a249e767bbdd3b62f1a617d6458a 100644
--- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/ft
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/CH4
@@ -11,7 +11,7 @@ FoamFile
     format      ascii;
     class       volScalarField;
     location    "0";
-    object      ft;
+    object      CH4;
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/N2 b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/N2
new file mode 100644
index 0000000000000000000000000000000000000000..c1511f982799e593750ece78b3d4eb87c811a581
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/N2
@@ -0,0 +1,48 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      N2;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 0 0 0 0];
+
+internalField   uniform 0.76699;
+
+boundaryField
+{
+    outlet
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+    sides
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+    base
+    {
+        type            zeroGradient;
+    }
+    inlet
+    {
+        type            fixedValue;
+        value           uniform 0;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/O2 b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/O2
new file mode 100644
index 0000000000000000000000000000000000000000..b433139678f169ca2a8d21e89b1d262721cfc6f7
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/O2
@@ -0,0 +1,52 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0";
+    object      O2;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [0 0 0 0 0 0 0];
+
+internalField   uniform 0.23301;
+
+boundaryField
+{
+    outlet
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+    sides
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
+    base
+    {
+        type            zeroGradient;
+    }
+    inlet
+    {
+        type            fixedValue;
+        value           uniform 0;
+    }
+    frontBack
+    {
+        type            empty;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/fu b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/Ydefault
old mode 100644
new mode 100755
similarity index 86%
rename from tutorials/combustion/fireFoam/les/smallPoolFire3D/0/fu
rename to tutorials/combustion/fireFoam/les/smallPoolFire3D/0/Ydefault
index 8782fc3987226248544dff0e07fd18506d70013f..bc81b33f523e33c8b03b6404dcf7419a659d9379
--- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/fu
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/Ydefault
@@ -11,7 +11,7 @@ FoamFile
     format      ascii;
     class       volScalarField;
     location    "0";
-    object      fu;
+    object      Ydefault;
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -21,28 +21,30 @@ internalField   uniform 0;
 
 boundaryField
 {
-    outlet
+    base
     {
-        type            inletOutlet;
-        inletValue      uniform 0;
-        value           uniform 0;
+        type            zeroGradient;
     }
-    sides
+
+    outlet
     {
         type            inletOutlet;
-        inletValue      uniform 0;
-        value           uniform 0;
-    }
-    base
-    {
-        type            zeroGradient;
+        inletValue      $internalField;
+        value           $internalField;
     }
+
     inlet
     {
         type            fixedValue;
-        value           uniform 1.0;
+        value           uniform 0;
     }
 
+    sides
+    {
+        type            inletOutlet;
+        inletValue      $internalField;
+        value           $internalField;
+    }
 }
 
 
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/SpeciesTable b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/SpeciesTable
deleted file mode 100644
index e387970281a9821705966649484bbf24343832d7..0000000000000000000000000000000000000000
--- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/SpeciesTable
+++ /dev/null
@@ -1,491 +0,0 @@
-/*--------------------------------*- C++ -*----------------------------------*\
-| =========                 |                                                 |
-| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
-|  \\    /   O peration     | Version:  dev                                   |
-|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
-|    \\/     M anipulation  |                                                 |
-\*---------------------------------------------------------------------------*/
-FoamFile
-{
-    version     2.0;
-    format      ascii;
-    class       dictionary;
-    location    "constant";
-    object      SpeciesTable;
-}
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-fields
-1
-(
-
-{
-    name            ft;
-    min             0;
-    max             1;
-    N               100;
-}
-
-)
-;
-output
-5
-(
-
-{
-    name            CH4;
-}
-
-
-{
-    name            CO2;
-}
-
-
-{
-    name            H2O;
-}
-
-
-{
-    name            CO;
-}
-
-
-{
-    name            soot;
-}
-
-)
-;
-values
-6
-(
-
-101
-(
-0.001
-0.011
-0.021
-0.031
-0.041
-0.051
-0.061
-0.071
-0.081
-0.091
-0.101
-0.111
-0.121
-0.131
-0.141
-0.151
-0.161
-0.171
-0.181
-0.191
-0.201
-0.211
-0.221
-0.231
-0.241
-0.251
-0.261
-0.271
-0.281
-0.291
-0.301
-0.311
-0.321
-0.331
-0.341
-0.351
-0.361
-0.371
-0.381
-0.391
-0.401
-0.411
-0.421
-0.431
-0.441
-0.451
-0.461
-0.471
-0.481
-0.491
-0.501
-0.511
-0.521
-0.531
-0.541
-0.551
-0.561
-0.571
-0.581
-0.591
-0.601
-0.611
-0.621
-0.631
-0.641
-0.651
-0.661
-0.671
-0.681
-0.691
-0.701
-0.711
-0.721
-0.731
-0.741
-0.751
-0.761
-0.771
-0.781
-0.791
-0.801
-0.811
-0.821
-0.831
-0.841
-0.851
-0.861
-0.871
-0.881
-0.891
-0.901
-0.911
-0.921
-0.931
-0.941
-0.951
-0.961
-0.971
-0.981
-0.991
-0.999
-)
-
-
-101
-(
-0
-0
-0
-0
-0
-0
-0.0105883
-0.0285208
-0.0461843
-0.0635849
-0.0807284
-0.0976204
-0.114266
-0.130672
-0.146842
-0.162782
-0.178496
-0.193989
-0.209266
-0.224332
-0.23919
-0.253845
-0.268301
-0.282563
-0.296633
-0.310517
-0.324216
-0.337736
-0.35108
-0.364251
-0.377252
-0.390087
-0.402759
-0.415271
-0.427625
-0.439826
-0.451876
-0.463777
-0.475532
-0.487144
-0.498616
-0.50995
-0.521148
-0.532214
-0.543149
-0.553955
-0.564635
-0.575191
-0.585626
-0.595941
-0.606138
-0.61622
-0.626187
-0.636044
-0.64579
-0.655428
-0.66496
-0.674387
-0.683712
-0.692935
-0.702059
-0.711085
-0.720014
-0.728849
-0.73759
-0.74624
-0.754799
-0.763269
-0.771652
-0.779948
-0.788159
-0.796287
-0.804332
-0.812297
-0.820181
-0.827987
-0.835715
-0.843367
-0.850943
-0.858445
-0.865875
-0.873232
-0.880518
-0.887735
-0.894882
-0.901961
-0.908974
-0.91592
-0.922802
-0.929619
-0.936373
-0.943064
-0.949694
-0.956263
-0.962772
-0.969222
-0.975614
-0.981948
-0.988226
-0.994448
-0.999385
-)
-
-
-101
-(
-0.00200328
-0.0213922
-0.0396804
-0.0569589
-0.0733092
-0.088804
-0.0940165
-0.0923125
-0.0906341
-0.0889806
-0.0873516
-0.0857465
-0.0841647
-0.0826058
-0.0810693
-0.0795547
-0.0780615
-0.0765893
-0.0751376
-0.073706
-0.0722942
-0.0709016
-0.0695279
-0.0681728
-0.0668357
-0.0655165
-0.0642147
-0.06293
-0.0616621
-0.0604105
-0.0591751
-0.0579555
-0.0567514
-0.0555625
-0.0543885
-0.0532292
-0.0520842
-0.0509534
-0.0498363
-0.0487329
-0.0476428
-0.0465658
-0.0455017
-0.0444503
-0.0434112
-0.0423844
-0.0413695
-0.0403664
-0.0393749
-0.0383948
-0.0374258
-0.0364678
-0.0355206
-0.0345841
-0.033658
-0.0327421
-0.0318364
-0.0309406
-0.0300546
-0.0291781
-0.0283112
-0.0274535
-0.026605
-0.0257655
-0.0249349
-0.024113
-0.0232997
-0.0224948
-0.0216983
-0.0209099
-0.0201297
-0.0193573
-0.0185928
-0.0178361
-0.0170869
-0.0163452
-0.0156108
-0.0148837
-0.0141638
-0.0134509
-0.0127449
-0.0120458
-0.0113535
-0.0106678
-0.00998859
-0.00931588
-0.00864953
-0.00798947
-0.00733558
-0.0066878
-0.00604604
-0.00541021
-0.00478022
-0.00415601
-0.00353749
-0.00292458
-0.00231721
-0.00171531
-0.00111879
-0.000527591
-5.8413e-05
-)
-
-
-101
-(
-0.00400655
-0.0427844
-0.0793607
-0.113918
-0.146618
-0.177608
-0.188033
-0.184625
-0.181268
-0.177961
-0.174703
-0.171493
-0.168329
-0.165212
-0.162139
-0.159109
-0.156123
-0.153179
-0.150275
-0.147412
-0.144588
-0.141803
-0.139056
-0.136346
-0.133671
-0.131033
-0.128429
-0.12586
-0.123324
-0.120821
-0.11835
-0.115911
-0.113503
-0.111125
-0.108777
-0.106458
-0.104168
-0.101907
-0.0996727
-0.0974658
-0.0952856
-0.0931317
-0.0910035
-0.0889006
-0.0868225
-0.0847688
-0.082739
-0.0807328
-0.0787498
-0.0767895
-0.0748516
-0.0729356
-0.0710413
-0.0691682
-0.067316
-0.0654843
-0.0636728
-0.0618812
-0.0601091
-0.0583563
-0.0566223
-0.054907
-0.05321
-0.051531
-0.0498697
-0.0482259
-0.0465993
-0.0449896
-0.0433965
-0.0418198
-0.0402593
-0.0387147
-0.0371857
-0.0356721
-0.0341737
-0.0326903
-0.0312216
-0.0297674
-0.0283276
-0.0269018
-0.0254899
-0.0240917
-0.022707
-0.0213355
-0.0199772
-0.0186318
-0.0172991
-0.0159789
-0.0146712
-0.0133756
-0.0120921
-0.0108204
-0.00956045
-0.00831202
-0.00707498
-0.00584917
-0.00463443
-0.00343062
-0.00223758
-0.00105518
-0.000116826
-)
-
-101{0}
-101{0}
-)
-;
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/additionalControls b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/additionalControls
new file mode 100644
index 0000000000000000000000000000000000000000..af372fbcbec69d98d26ebbc0e17c1158c3590e12
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/additionalControls
@@ -0,0 +1,20 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      additionalControls;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvePrimaryRegion true;
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/chemistryProperties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/chemistryProperties
new file mode 100644
index 0000000000000000000000000000000000000000..fca4f15a5cacd9815e78fb5fd469bb34807f1c5e
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/chemistryProperties
@@ -0,0 +1,29 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      chemistryProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+psiChemistryModel ODEChemistryModel<gasThermoPhysics>;
+
+chemistry       off;
+
+turbulentReaction off;
+
+chemistrySolver noChemistrySolver;
+
+initialChemicalTimeStep 1e-07;
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/pyrolysisProperties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/pyrolysisProperties
new file mode 100644
index 0000000000000000000000000000000000000000..3dfb0fbe7153e173cdc5c627b55078ced053771f
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/pyrolysisProperties
@@ -0,0 +1,37 @@
+/*---------------------------------------------------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      binary;
+    class       dictionary;
+    location    "constant";
+    object      pyrolysisProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+active          false;
+
+pyrolysisModel  none;
+
+regionName      panelRegion;
+
+reactingOneDimCoeffs
+{
+    filmCoupled     false;
+
+    radFluxName     Qr;
+
+    minimumDelta    1e-8;
+
+    moveMesh        false;
+}
+
+infoOutput      false;
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/radiationProperties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/radiationProperties
index e48fc02f42e395678b75379c7cd5fe89fbd056aa..ff2d2c0d2448835c63d4971b6363928ce3b9a7fd 100644
--- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/radiationProperties
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/radiationProperties
@@ -50,7 +50,7 @@ constantAbsorptionEmissionCoeffs
 
 greyMeanAbsorptionEmissionCoeffs
 {
-    lookUpTableFileName     "SpeciesTable";
+    lookUpTableFileName      none;
 
     EhrrCoeff                0.0;
 
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactingCloud1Properties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactingCloud1Properties
new file mode 100644
index 0000000000000000000000000000000000000000..f975d237d38c9a9f91f615b90996e21d78a04924
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactingCloud1Properties
@@ -0,0 +1,165 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      reactingCloud1Properties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solution
+{
+    active          false;
+    coupled         yes;
+    transient       yes;
+    cellValueSourceCorrection yes;
+
+    sourceTerms
+    {
+        schemes
+        {
+            rho             explicit 1;
+            U               explicit 1;
+            Yi              explicit 1;
+            hs              explicit 1;
+        }
+    }
+
+    interpolationSchemes
+    {
+        rho             cell;
+        U               cellPoint;
+        mu              cell;
+        T               cell;
+        Cp              cell;
+        p               cell;
+    }
+
+    integrationSchemes
+    {
+        U               Euler;
+        T               analytical;
+    }
+}
+
+constantProperties
+{
+    parcelTypeId    1;
+
+    rhoMin          1e-15;
+    TMin            200;
+    pMin            1000;
+    minParticleMass 1e-15;
+
+    rho0            1000;
+    T0              300;
+    Cp0             4187;
+
+    youngsModulus   1e9;
+    poissonsRatio   0.35;
+
+    epsilon0        1;
+    f0              0.5;
+    Pr              0.7;
+    Tvap            273;
+    Tbp             373;
+
+    constantVolume  false;
+}
+
+subModels
+{
+    particleForces
+    {
+        sphereDrag;
+        gravity;
+    }
+
+    injectionModel  coneInjection;
+
+    dispersionModel none;
+
+    patchInteractionModel standardWallInteraction;
+
+    heatTransferModel none;
+
+    compositionModel singlePhaseMixture;
+
+    phaseChangeModel none;
+
+    surfaceFilmModel thermoSurfaceFilm;
+
+    radiation       off;
+
+    coneInjectionCoeffs
+    {
+        SOI             0.000;
+        duration        20.000;
+        positionAxis
+        (
+            ((0.3 0.35 1.45) (0 0 -1))
+            ((0.6 0.35 1.45) (0 0 -1))
+        );
+
+        massTotal       10;
+        parcelsPerInjector 20000;
+        parcelsPerSecond 500;
+        parcelBasisType mass;
+        flowRateProfile constant 0.1;
+        Umag            constant 3.0;
+        thetaInner      constant 0;
+        thetaOuter      constant 45;
+
+        sizeDistribution
+        {
+            type         RosinRammler;
+            RosinRammlerDistribution
+            {
+                minValue        5e-04;
+                maxValue        0.0012;
+                d               7.5e-05;
+                n               0.5;
+            }
+        }
+    }
+
+    standardWallInteractionCoeffs
+    {
+        type            rebound;
+    }
+
+    singlePhaseMixtureCoeffs
+    {
+        phases
+        (
+            liquid
+            {
+                H2O          1;
+            }
+        );
+    }
+
+    thermoSurfaceFilmCoeffs
+    {
+        interactionType splashBai;
+        deltaWet        0.0005;
+        Adry            2630;
+        Awet            1320;
+        Cf              0.6;
+    }
+}
+
+
+cloudFunctions
+{}
+
+
+// ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactions b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactions
new file mode 100644
index 0000000000000000000000000000000000000000..c174cf789ecfdfbaf6128592efbd6123e013f690
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/reactions
@@ -0,0 +1,17 @@
+species
+(
+    O2
+    H2O
+    CH4
+    CO2
+    N2
+);
+
+reactions
+{
+    propaneReaction
+    {
+        type         irreversibleinfiniteReaction;
+        reaction     "CH4 + 2O2 = CO2 + 2H2O";
+    }
+}
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/surfaceFilmProperties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/surfaceFilmProperties
new file mode 100644
index 0000000000000000000000000000000000000000..db5db22ec3ca2858880cd1644c582b526a90019d
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/surfaceFilmProperties
@@ -0,0 +1,22 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      SurfaceFilmProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+surfaceFilmModel none;
+
+regionName      none;
+
+active          false;
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermo.compressibleGas b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermo.compressibleGas
new file mode 100644
index 0000000000000000000000000000000000000000..367faadefd70ebf2c4d580105ef0ea3a76dc4dad
--- /dev/null
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermo.compressibleGas
@@ -0,0 +1,126 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  dev                                   |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      thermo.compressibleGas;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+O2
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       31.9988;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           5000;
+        Tcommon         1000;
+        highCpCoeffs    ( 3.69758 0.00061352 -1.25884e-07 1.77528e-11 -1.13644e-15 -1233.93 3.18917 );
+        lowCpCoeffs     ( 3.21294 0.00112749 -5.75615e-07 1.31388e-09 -8.76855e-13 -1005.25 6.03474 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
+
+H2O
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       18.0153;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           5000;
+        Tcommon         1000;
+        highCpCoeffs    ( 2.67215 0.00305629 -8.73026e-07 1.201e-10 -6.39162e-15 -29899.2 6.86282 );
+        lowCpCoeffs     ( 3.38684 0.00347498 -6.3547e-06 6.96858e-09 -2.50659e-12 -30208.1 2.59023 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
+
+CH4
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       16.0428;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           6000;
+        Tcommon         1000;
+        highCpCoeffs    ( 1.63543 0.0100844 -3.36924e-06 5.34973e-10 -3.15528e-14 -10005.6 9.9937 );
+        lowCpCoeffs     ( 5.14988 -0.013671 4.91801e-05 -4.84744e-08 1.66694e-11 -10246.6 -4.64132 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
+
+CO2
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       44.01;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           5000;
+        Tcommon         1000;
+        highCpCoeffs    ( 4.45362 0.00314017 -1.27841e-06 2.394e-10 -1.66903e-14 -48967 -0.955396 );
+        lowCpCoeffs     ( 2.27572 0.00992207 -1.04091e-05 6.86669e-09 -2.11728e-12 -48373.1 10.1885 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
+
+N2
+{
+    specie
+    {
+        nMoles          1;
+        molWeight       28.0134;
+    }
+    thermodynamics
+    {
+        Tlow            200;
+        Thigh           5000;
+        Tcommon         1000;
+        highCpCoeffs    ( 2.92664 0.00148798 -5.68476e-07 1.0097e-10 -6.75335e-15 -922.798 5.98053 );
+        lowCpCoeffs     ( 3.29868 0.00140824 -3.96322e-06 5.64152e-09 -2.44486e-12 -1020.9 3.95037 );
+    }
+    transport
+    {
+        As              1.67212e-06;
+        Ts              170.672;
+    }
+}
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermophysicalProperties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermophysicalProperties
index 9060c18a70884fe51828e299fff28f54435f5828..f593a1dd1264a63aebc98419d9edacb6369ef97f 100644
--- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermophysicalProperties
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/thermophysicalProperties
@@ -15,79 +15,23 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-thermoType      hsPsiMixtureThermo<veryInhomogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>;
+thermoType hsPsiMixtureThermo<singleStepReactingMixture<gasThermoPhysics>>;
 
-stoichiometricAirFuelMassRatio stoichiometricAirFuelMassRatio [ 0 0 0 0 0 0 0 ] 17.1271;
+inertSpecie N2;
+fuel        CH4;
 
-stoichiometricOxygenFuelMassRatio stoichiometricOxygenFuelMassRatio [ 0 0 0 0 0 0 0 ] 4;
+chemistryReader foamChemistryReader;
 
-qFuel           qFuel [ 0 2 -2 0 0 0 0 ] 5.00264e+07;
+foamChemistryFile "$FOAM_CASE/constant/reactions";
 
-fuel
-{
-    specie
-    {
-        nMoles          1;
-        molWeight       16.0428;
-    }
-    thermodynamics
-    {
-        Tlow            200;
-        Thigh           6000;
-        Tcommon         1000;
-        highCpCoeffs    ( 1.63543 0.0100844 -3.36924e-06 5.34973e-10 -3.15528e-14 -10005.6 9.9937 );
-        lowCpCoeffs     ( 5.14988 -0.013671 4.91801e-05 -4.84744e-08 1.66694e-11 -10246.6 -4.64132 );
-    }
-    transport
-    {
-        As              1.67212e-06;
-        Ts              170.672;
-    }
-}
+foamChemistryThermoFile "$FOAM_CASE/constant/thermo.compressibleGas";
 
-oxidant
+liquids
 {
-    specie
-    {
-        nMoles          1;
-        molWeight       28.8504;
-    }
-    thermodynamics
-    {
-        Tlow            200;
-        Thigh           6000;
-        Tcommon         1000;
-        highCpCoeffs    ( 3.10131 0.00124137 -4.18816e-07 6.64158e-11 -3.91274e-15 -985.266 5.35597 );
-        lowCpCoeffs     ( 3.58378 -0.000727005 1.67057e-06 -1.09203e-10 -4.31765e-13 -1050.53 3.11239 );
-    }
-    transport
-    {
-        As              1.67212e-06;
-        Ts              170.672;
-    }
-}
+    liquidComponents
+    ();
 
-burntProducts
-{
-    specie
-    {
-        nMoles          1;
-        molWeight       27.6334;
-    }
-    thermodynamics
-    {
-        Tlow            200;
-        Thigh           6000;
-        Tcommon         1000;
-        highCpCoeffs    ( 3.0602 0.00182422 -5.93878e-07 8.93807e-11 -4.97595e-15 -10998.7 5.32209 );
-        lowCpCoeffs     ( 3.54628 0.000378279 2.02797e-07 9.31602e-10 -6.84016e-13 -11102.1 2.90098 );
-    }
-    transport
-    {
-        As              1.67212e-06;
-        Ts              170.672;
-    }
+    H2O             H2O defaultCoeffs;
 }
 
-
 // ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSchemes b/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSchemes
index ce3527c1531bec417a2d889e396378ba1c874924..eed3d8330130d88618267aa02db972201d58dc95 100644
--- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSchemes
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSchemes
@@ -30,12 +30,14 @@ divSchemes
     default        none;
     div(phi,U)      Gauss linear;
     div(phi,k)      Gauss limitedLinear 0.1;
-    flux(phi,ft)    Gauss limitedLinear01 0.1;
-    div(phi,ft_b_h) Gauss multivariateSelection
+    div(phi,Yi_hs) Gauss multivariateSelection
     {
-        fu              limitedLinear 0.1;
-        ft              limitedLinear 0.1;
-        hs              limitedLinear 0.1;
+        O2              limitedLinear01 1;
+        CH4             limitedLinear01 1;
+        N2              limitedLinear01 1;
+        H2O             limitedLinear01 1;
+        CO2             limitedLinear01 1;
+        hs              limitedLinear 1;
     };
     div((muEff*dev2(T(grad(U))))) Gauss linear;
     div(phiU,p)     Gauss linear;
@@ -44,7 +46,7 @@ divSchemes
 
 laplacianSchemes
 {
-    default         Gauss linear uncorrected;
+    default         Gauss linear corrected;
 }
 
 interpolationSchemes
@@ -54,7 +56,7 @@ interpolationSchemes
 
 snGradSchemes
 {
-    default         uncorrected;
+    default         corrected;
 }
 
 fluxRequired
diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSolution b/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSolution
index ef95fada40f1ed14d204e24830c26b5e5b397720..37e6164a4f57aa1753948a1ae5a798e1d7f473c1 100644
--- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSolution
+++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSolution
@@ -45,16 +45,16 @@ solvers
     };
 
 
-    "(U|ft|fu|k|hs)"
+    "(U|Yi|k|hs)"
     {
-        solver          smoothSolver;
-        smoother        GaussSeidel;
+        solver          PBiCG;
+        preconditioner  DILU;
         tolerance       1e-7;
         relTol          0.1;
         nSweeps         1;
     };
 
-    "(U|ft|fu|k|hs)Final"
+    "(U|Yi|k|hs)Final"
     {
         $U;
         tolerance       1e-8;
@@ -85,10 +85,16 @@ solvers
 
 PIMPLE
 {
-    momentumPredictor no;
+    momentumPredictor yes;
     nOuterCorrectors  1;
     nCorrectors       1;
     nNonOrthogonalCorrectors 0;
 }
 
+relaxationFactors
+{
+    "(U|k).*"                   1;
+    "(C3H8|O2|H2O|CO2|hs).*"    0.9;
+}
+
 // ************************************************************************* //
diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/G b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/G
index 993b5237c3226380e7c25bd56fa6af96997ae926..3ae5fafc79444698d9f8aca27c7ceb72b5feeb0a 100644
--- a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/G
+++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/0.org/G
@@ -26,7 +26,7 @@ boundaryField
         type            MarshakRadiation;
         T               T;
         emissivityMode  lookup;
-        emissivity      1;
+        emissivity      uniform 1;
         value           uniform 0;
         refValue        uniform 0;
         refGradient     uniform 0;
@@ -37,7 +37,7 @@ boundaryField
         type            MarshakRadiation;
         T               T;
         emissivityMode  lookup;
-        emissivity      1;
+        emissivity      uniform 1;
         value           uniform 0;
         refValue        uniform 0;
         refGradient     uniform 0;