View Issue Details

IDProjectCategoryView StatusLast Update
0002526OpenFOAMBugpublic2017-09-02 17:04
Reporterrobertoribeiro Assigned Towill  
PrioritynormalSeveritycrashReproducibilityalways
Status closedResolutionno change required 
PlatformLinuxOSCentOSOS Version(please specify)
Product Versiondev 
Summary0002526: crash in interDyMFoam paralell with dynamicRefineFvMesh
DescriptiondamBreakWithObstacle crashes at an arbitrary point in the simulation when using dynamicRefineFvMesh and interDyMFoam in parallel. This happens in a cluster with GCC+MVAPICH2 (also tried with ICC+IMPI).

The output error is also not consistently the same, but the most frequent is the following:

Courant Number mean: 0.0215234 max: 0.467355
Interface Courant Number mean: 0.00205386 max: 0.467355
deltaT = 0.000763889
Time = 0.219236

PIMPLE: iteration 1
Selected 78 cells for refinement out of 113778.
Refined from 113778 to 114324 cells.
Selected 52 split points out of a possible 10022.
Unrefined from 114324 to 113960 cells.
Execution time for mesh.update() = 0.34 s
GAMG: Solving for pcorr, Initial residual = 1, Final residual = 4.39906e-05, No Iterations 9
time step continuity errors : sum local = 5.73634e-10, global = 1.57291e-10, cumulative = 9.06686e-06
MULES: Solving for alpha.water
(...)
time step continuity errors : sum local = 7.05031e-10, global = 2.8921e-11, cumulative = 9.78248e-06
ExecutionTime = 89.36 s ClockTime = 92 s

Courant Number mean: 0.0216001 max: 0.468787
Interface Courant Number mean: 0.00201923 max: 0.468787
deltaT = 0.000763889
Time = 0.22

PIMPLE: iteration 1
Selected 71 cells for refinement out of 113960.
[27]
[27]
[27] --> FOAM FATAL IO ERROR:
[27] error in IOstream "IOstream" for operation operator>>(Istream&, List<T>&) : reading first token
[27]
[27] file: IOstream at line 0.
[27]
[27] From function void Foam::IOstream::fatalCheck(const char*) const
[27] in file db/IOstreams/IOstreams/IOstream.C at line 109.
[27]
FOAM parallel run exiting
[27]
[cli_27]: aborting job:
application called MPI_Abort(MPI_COMM_WORLD, 1) - process 27


I traced it down to the hexRef8::setRefinement call, specifically where we call syncTools::syncEdgeList. It seems like inconsistent data in the message buffer that crashes the token parsing. The message seems to be associated with interchanging information related with coupled processor patches. The inconsistency is possibly generated by the refinement, either on the current step or on the previous. I have enabled all the pertinent checks but none reported any problem.

The error seems to be more frequent with higher processor counts.

Steps To ReproduceThe only required changes were to adjust the decomposeParDict to 32 processors and the Allrun to run in parallel.

This was executed in a cluster with 16 cores per node, thus requiring two nodes which were connected with an infiniband network interface.

TagsNo tags attached.

Activities

robertoribeiro

2017-05-03 19:25

reporter   ~0008077

Any ideas on this issue? I was able to reproduce it with 16 Procs too, though not so frequently.

I've developing some features for OF addressing load balance with dynamic load, but this problem is critically blocking me

Any help would be appreciated,
Thank you

robertoribeiro

2017-05-03 19:44

reporter   ~0008078

I was able to force a printStack upon error, and got this (with the latest 2.4.x branch and 16 ranks in two nodes):

Interface Courant Number mean: 0.00146512 max: 0.302876
Courant Number mean: 0.0139884 max: 0.381074
Time = 0.107

PIMPLE: iteration 1
Selected 8 cells for refinement out of 44273.
Refined from 44273 to 44329 cells.
Selected 7 split points out of a possible 1690.
#0 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libOpenFOAM.so(_ZN4Foam5error14safePrintStackERSo+0x23) [0x2b741e44e7e3]
#1 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libOpenFOAM.so(_ZNK4Foam8IOstream10fatalCheckEPKc+0x2c) [0x2b741df9b6ac]
#2 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libincompressibleRASModels.so(_ZN4FoamrsIiEERNS_7IstreamES2_RNS_4ListIT_EE+0x64) [0x2b74197181d4]
#3 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libOpenFOAM.so(_ZN4Foam12globalPoints18receivePatchPointsEbRKNS_3MapIiEERKNS_4ListIiEERNS_14PstreamBuffersERNS_7HashSetIiNS_4HashIiEEEE+0x1b1) [0x2b741e205b21]
#4 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libOpenFOAM.so(_ZN4Foam12globalPoints21calculateSharedPointsERKNS_3MapIiEERKNS_4ListIiEEbb+0x37a) [0x2b741e204dca]
#5 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libOpenFOAM.so(_ZN4Foam12globalPointsC1ERKNS_8polyMeshERKNS_14PrimitivePatchINS_4faceENS_12IndirectListERKNS_5FieldINS_6VectorIdEEEES9_EEbb+0x209) [0x2b741e20b1c9]
#6 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libOpenFOAM.so(_ZNK4Foam14globalMeshData21calcGlobalPointSlavesEv+0x6c) [0x2b741e1dfc5c]
#7 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libOpenFOAM.so(_ZNK4Foam14globalMeshData17globalPointSlavesEv+0x1c) [0x2b741e1dfb4c]
#8 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libOpenFOAM.so(_ZNK4Foam14globalMeshData21calcPointConnectivityERNS_4ListINS1_INS_4PairIiEEEEEE+0x2a) [0x2b741e1df04a]
#9 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libOpenFOAM.so(_ZNK4Foam14globalMeshData20calcGlobalEdgeSlavesEv+0xac) [0x2b741e1dd74c]
#10 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libOpenFOAM.so(_ZNK4Foam14globalMeshData19globalEdgeSlavesMapEv+0x1c) [0x2b741e1e154c]
#11 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libdynamicMesh.so(_ZN4Foam9syncTools12syncEdgeListIiNS_7maxEqOpIiEENS_13mapDistribute9transformEEEvRKNS_8polyMeshERNS_4ListIT_EERKT0_RKSA_RKT1_+0x79) [0x2b741bd35fd9]
#12 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libdynamicMesh.so(_ZNK4Foam11removeFaces13setRefinementERKNS_4ListIiEES4_S4_RNS_14polyTopoChangeE+0xd1d) [0x2b741bda664d]
#13 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libdynamicMesh.so(_ZN4Foam7hexRef815setUnrefinementERKNS_4ListIiEERNS_14polyTopoChangeE+0x974) [0x2b741bd7ad64]
#14 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libdynamicFvMesh.so(_ZN4Foam19dynamicRefineFvMesh8unrefineERKNS_4ListIiEE+0x60) [0x2b741c383d60]
#15 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/lib/libdynamicFvMesh.so(_ZN4Foam19dynamicRefineFvMesh6updateEv+0x68a) [0x2b741c38254a]
#16 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/bin/interDyMFoam() [0x429392]
#17 /lib64/libc.so.6(__libc_start_main+0xfd) [0x34a9c1ed1d]
#18 /work/01502/rri/work/openfoam/2.4.x/builds/dev-sandy-icc-impi/OpenFOAM-2.4.x/platforms/linux64IccDPOpt/bin/interDyMFoam() [0x426c69]
[2]
[2]
[2] --> FOAM FATAL IO ERROR:
[2] error in IOstream "IOstream" for operation operator>>(Istream&, List<T>&) : reading first token
[2]
[2] file: IOstream at line 0.
[2]
[2] From function IOstream::fatalCheck(const char*) const
[2] in file db/IOstreams/IOstreams/IOstream.C at line 116.
[2]
FOAM parallel run exiting


Eventually I also get the crash in the refine call

will

2017-05-04 09:27

manager   ~0008081

I can't reproduce this. I'm running openmpi on 32 cores a single machine (no interconnect).

Have you tried openmpi?

Could you change the Allrun to run decomposePar -cellDist? Then if it fails we can then use the 0/cellDist field to do a manual decomposition to get an identical case and hopefully reliably reproduce the error. If you manage this, then please upload the 0/cellDist file.

robertoribeiro

2017-05-04 15:08

reporter  

cellDist (87,815 bytes)   
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  dev                                   |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    location    "0";
    object      cellDist;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 0 0 0 0 0 0];

internalField   nonuniform List<scalar> 
32256
(
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
27
27
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
27
27
27
27
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
1
1
1
1
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
0
0
0
0
0
0
0
4
4
4
4
4
4
4
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
4
4
4
4
4
4
4
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
4
4
4
4
4
4
4
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
4
4
4
4
4
4
4
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
4
4
4
4
4
4
4
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
4
4
4
4
4
4
4
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
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
27
27
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
27
27
27
27
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
1
1
1
1
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
0
0
0
0
0
0
0
4
4
4
4
4
4
4
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
4
4
4
4
4
4
4
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
4
4
4
4
4
4
4
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
4
4
4
4
4
4
4
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
4
4
4
4
4
4
4
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
4
4
4
4
4
4
4
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
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
27
27
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
27
27
27
27
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
1
1
1
1
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
0
0
0
0
0
0
0
4
4
4
4
4
4
4
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
4
4
4
4
4
4
4
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
4
4
4
4
4
4
4
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
4
4
4
4
4
4
4
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
4
4
4
4
4
4
4
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
4
4
4
4
4
4
4
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
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
27
27
27
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
27
27
27
27
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
1
1
1
1
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
0
0
0
0
0
0
0
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
27
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
1
1
1
1
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
0
0
0
0
0
0
0
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
20
20
20
20
20
21
21
21
21
20
20
20
20
20
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
1
1
1
1
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
0
0
0
0
0
0
0
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
20
20
20
20
21
21
21
21
21
20
20
20
20
20
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
26
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
26
26
26
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
20
20
20
20
20
20
20
20
20
20
20
20
7
7
7
7
7
7
7
7
7
7
7
7
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
1
1
1
1
0
0
0
0
0
0
0
0
0
0
7
7
7
7
7
7
7
7
7
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
0
0
0
0
0
0
0
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
21
21
21
21
21
21
21
21
21
21
21
21
21
21
21
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
22
22
22
20
20
21
21
21
21
21
20
20
20
20
20
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
23
23
23
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
23
23
23
20
20
20
20
20
20
20
20
20
20
20
20
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
23
23
23
20
20
20
20
20
20
20
20
20
20
20
20
25
25
25
25
25
25
25
25
25
25
25
25
20
20
20
20
20
20
20
20
20
20
20
20
25
25
25
25
25
25
25
25
25
25
25
25
20
20
20
20
20
20
20
20
20
20
20
20
25
25
25
25
25
25
25
25
25
25
25
25
20
20
20
20
20
20
20
20
20
20
20
20
6
6
6
6
6
6
6
6
6
6
6
6
20
20
20
20
20
20
20
20
20
20
20
20
6
6
6
6
6
6
6
6
6
6
6
6
20
20
20
20
20
20
20
20
20
20
20
20
6
6
6
6
6
6
6
6
6
6
6
6
0
0
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
0
0
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
0
0
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
5
5
5
5
5
5
5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
0
0
0
0
0
0
0
0
0
0
6
6
6
6
4
4
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
0
0
0
0
0
0
0
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
26
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
27
26
26
26
26
26
26
26
26
26
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
26
26
26
26
26
26
26
26
26
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
26
26
26
26
26
26
26
26
26
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
0
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
0
0
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
0
0
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
0
0
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
0
0
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
5
5
5
5
5
5
2
2
0
0
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
5
5
5
5
5
5
2
2
0
0
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
5
5
5
5
5
5
2
2
0
0
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
0
0
0
0
0
0
0
0
0
0
6
6
6
6
4
4
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
0
0
0
0
0
0
0
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
27
27
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
25
25
25
25
25
25
25
25
25
25
25
24
24
24
24
24
24
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
5
5
5
5
2
2
2
2
2
2
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
5
5
5
5
2
2
2
2
2
2
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
5
5
5
5
2
2
2
2
2
2
0
0
0
0
0
0
0
0
0
0
6
6
6
6
6
6
4
4
4
4
4
4
5
5
5
5
2
2
2
2
2
2
0
0
0
0
0
0
0
0
0
0
6
6
6
6
4
4
4
4
4
4
4
4
5
5
5
5
2
2
2
2
2
2
1
1
1
0
0
0
0
0
0
0
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
5
2
2
2
2
2
2
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
5
2
2
2
2
2
2
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
5
2
2
2
2
2
2
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
5
2
2
2
2
2
2
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
5
2
2
2
2
2
2
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
5
2
2
2
2
2
2
1
1
1
1
1
1
1
1
1
1
27
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
27
27
27
27
27
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
25
25
25
25
25
25
25
25
25
25
25
24
24
24
24
24
24
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
0
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
6
5
5
2
2
2
2
2
2
2
2
2
0
0
0
0
0
0
0
0
6
6
6
6
6
6
4
4
4
4
4
4
4
5
5
5
2
2
2
2
2
2
2
2
0
0
0
0
0
0
0
0
6
6
6
6
4
4
4
4
4
4
4
4
4
5
5
5
2
2
2
2
2
2
2
1
1
0
0
0
0
0
0
0
4
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
2
2
2
2
2
2
2
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
2
2
2
2
2
2
2
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
2
2
2
2
2
2
2
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
2
2
2
2
2
2
2
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
2
2
2
2
2
2
2
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
2
2
2
2
2
2
2
1
1
1
1
1
1
1
1
1
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
25
25
25
25
25
25
25
25
25
25
25
24
24
24
24
24
24
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
1
1
1
1
1
1
1
1
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
25
25
25
25
25
25
25
25
25
25
25
24
24
24
24
24
24
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
23
23
23
23
23
23
23
23
23
23
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
25
25
25
25
25
25
25
25
25
25
25
24
24
24
24
24
24
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
2
2
2
2
23
23
23
23
23
23
23
23
23
23
23
23
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
23
23
23
23
23
23
23
23
23
23
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
6
6
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
6
6
6
6
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
14
14
14
14
14
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
14
14
14
14
14
2
2
2
2
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
14
14
14
14
14
2
2
2
2
3
3
3
3
3
3
3
3
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
25
25
25
25
25
25
25
25
25
25
25
24
24
24
24
24
24
23
23
23
23
23
23
22
22
22
22
22
22
22
22
22
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
23
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
2
2
2
2
23
23
23
23
23
23
23
23
23
23
23
23
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
23
23
23
23
23
23
23
23
23
23
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
6
6
6
6
6
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
6
6
6
6
6
6
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
4
4
4
4
4
4
4
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
4
4
4
4
4
4
4
14
14
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
4
4
4
4
4
4
4
14
14
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
4
4
4
4
4
4
4
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
4
4
4
4
4
4
4
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
4
4
4
4
4
4
4
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
24
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
22
25
25
25
25
25
25
25
25
25
25
25
24
24
24
24
24
24
23
23
23
23
23
23
22
22
22
22
22
22
22
22
22
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
23
18
18
18
18
18
18
18
18
18
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
18
18
18
18
18
18
18
18
18
18
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
18
18
18
18
18
18
18
18
18
18
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
18
18
18
18
18
18
18
18
18
18
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
18
18
18
18
18
18
18
18
18
18
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
23
23
23
23
23
23
18
18
18
18
18
18
18
18
18
18
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
25
2
2
2
2
23
23
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
2
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
11
11
11
11
11
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
10
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
10
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
24
24
24
24
24
24
24
24
24
24
24
24
24
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
24
24
24
24
24
24
24
24
24
24
24
24
24
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
24
24
24
24
24
24
24
24
24
24
24
24
24
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
24
24
24
24
24
24
24
24
24
24
24
24
24
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
24
24
24
24
24
24
24
24
24
24
24
24
24
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
24
24
24
24
24
24
24
24
24
24
24
24
24
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
24
24
24
24
24
24
24
24
24
24
24
24
24
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
24
24
24
24
24
24
24
24
24
24
24
24
24
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
25
25
25
25
25
25
25
25
25
25
29
29
29
29
29
29
16
16
16
16
16
16
16
16
16
16
16
16
18
18
18
18
25
25
25
25
25
25
25
25
25
25
29
29
29
29
29
29
16
16
16
16
16
16
16
16
18
18
18
18
18
18
18
18
25
25
25
25
25
25
25
25
25
25
29
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
25
25
25
25
25
25
25
25
25
25
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
25
25
25
25
25
25
25
25
25
25
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
25
25
25
25
25
25
25
25
25
25
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
25
25
25
25
25
25
25
25
25
25
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
25
25
25
25
25
25
25
25
25
25
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
11
11
11
11
11
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
16
16
16
16
16
16
16
16
16
16
16
16
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
16
16
16
16
16
16
16
16
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
11
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
2
2
2
2
14
14
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
2
2
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
11
11
11
11
11
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
16
16
16
16
16
16
16
16
16
16
16
16
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
16
16
16
16
16
16
16
16
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
11
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
11
11
11
11
11
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
16
16
16
16
16
16
16
16
16
16
16
16
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
16
16
16
16
16
16
16
16
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
11
11
11
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
11
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
11
11
11
11
11
14
14
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
16
16
16
16
16
16
16
16
16
16
16
16
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
16
16
16
16
16
16
16
16
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
11
11
11
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
11
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
14
3
3
3
3
3
3
3
3
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
11
11
11
11
11
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
16
16
16
16
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
16
16
16
16
16
16
16
16
16
16
16
16
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
16
16
16
16
16
16
16
16
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
11
11
11
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
11
29
29
14
14
14
14
18
18
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
12
12
12
12
12
12
12
12
12
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
12
12
12
12
12
12
12
12
12
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
12
12
12
12
12
12
12
12
12
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
12
12
12
12
12
12
12
12
12
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
12
12
12
12
12
12
12
12
12
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
12
12
12
12
12
12
12
12
12
10
10
10
10
10
10
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
11
11
11
11
11
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
17
17
17
17
31
31
31
31
31
31
31
31
31
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
16
17
17
17
17
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
16
16
16
16
16
16
16
16
16
16
16
17
17
17
17
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
16
16
16
16
16
16
16
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
11
11
11
29
29
29
29
29
29
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
11
11
11
11
11
11
11
11
11
11
11
11
11
11
29
29
14
14
14
14
18
18
18
12
12
12
12
12
12
12
12
12
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
8
14
14
14
14
14
14
14
12
12
12
12
12
12
12
12
12
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
12
12
12
12
12
12
12
12
12
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
12
12
12
12
12
12
12
12
12
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
12
12
12
12
12
12
12
12
12
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
12
12
12
12
12
12
12
12
12
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
12
12
12
12
12
12
12
12
12
10
10
10
10
10
10
11
11
11
11
11
11
11
11
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
11
11
11
11
11
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
14
14
14
14
14
14
14
14
14
14
13
13
13
13
13
13
13
13
13
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
17
17
17
17
17
31
31
31
31
31
31
31
31
31
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
16
16
16
17
17
17
17
17
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
16
16
16
16
16
16
16
16
16
16
17
17
17
17
17
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
16
16
16
16
16
16
16
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
19
19
19
19
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
19
19
19
19
19
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
19
19
19
19
19
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
19
19
19
19
19
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
19
19
19
19
19
18
18
18
18
18
18
18
18
18
18
18
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
18
18
18
18
18
18
18
18
18
18
18
11
11
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
18
18
12
12
12
12
12
12
12
12
12
11
11
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
11
11
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
11
11
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
11
11
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
11
11
11
11
11
8
8
8
8
8
8
8
8
8
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
11
11
11
11
11
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
10
10
10
10
10
10
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
10
10
10
10
10
10
10
10
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
16
16
16
16
16
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
31
31
28
28
28
28
28
28
28
28
28
16
16
16
16
16
16
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
17
17
17
17
17
17
17
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
17
17
17
17
17
17
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
8
8
8
8
8
8
8
8
8
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
10
10
10
10
10
10
10
10
10
10
10
10
10
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
17
17
17
17
17
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
17
17
17
17
17
17
17
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
17
17
17
17
17
17
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
8
8
8
8
8
8
8
8
8
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
17
17
17
17
17
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
17
17
17
17
17
17
17
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
17
17
17
17
17
17
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
8
8
8
8
8
8
8
8
8
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
17
17
17
17
17
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
17
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
8
8
8
8
8
8
8
8
8
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
29
29
29
29
29
29
29
29
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
29
29
29
29
29
29
29
29
29
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
17
17
17
17
17
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
17
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
12
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
8
8
8
8
8
8
8
8
8
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
30
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
29
29
29
29
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
29
29
29
29
29
29
29
29
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
29
29
29
29
29
29
29
29
29
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
17
17
17
17
17
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
17
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
12
12
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
12
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
8
8
8
8
8
8
8
8
8
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
30
30
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
29
29
29
29
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
29
29
29
29
29
29
29
29
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
29
29
29
29
29
29
29
29
29
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
17
17
17
17
17
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
17
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
12
12
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
12
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
8
8
8
8
8
8
8
8
8
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
8
8
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
30
30
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
30
30
28
28
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
29
29
29
29
28
28
28
28
28
28
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
30
29
29
29
29
29
29
29
29
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
30
30
30
30
30
30
30
30
29
29
29
29
29
29
29
29
29
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
17
17
17
17
17
17
17
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
17
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
17
17
17
17
17
17
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
31
31
31
29
29
29
29
29
29
29
29
29
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
12
12
31
31
31
31
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
19
19
19
19
19
19
19
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
19
19
19
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
19
19
19
19
12
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
8
8
8
8
8
8
8
8
8
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
8
8
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
12
12
12
12
12
12
12
12
12
12
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
13
13
13
13
13
13
13
13
13
13
)
;

boundaryField
{
    atmosphere
    {
        type            calculated;
        value           uniform 0;
    }
    walls
    {
        type            calculated;
        value           uniform 0;
    }
}


// ************************************************************************* //
cellDist (87,815 bytes)   

robertoribeiro

2017-05-04 15:16

reporter   ~0008086

Done. Here is a link to the entire run with the logs:

https://drive.google.com/file/d/0ByVQEnByzivXOHF3R3Z6Q1UxSGs/view?usp=sharing

I got the same error with openmpi in a different system.

will

2017-05-04 17:31

manager   ~0008092

Last edited: 2017-05-04 17:32

I can't reproduce it, even with the same exact decomposition.

I may just be clutching at straws, but if you put the following in the controlDict, does it still crash?

OptimisationSwitches
{
    commsType blocking;
}

robertoribeiro

2017-05-04 17:55

reporter   ~0008093

I tried and a whole lot of stuff, like increasing MPI buffer with blocking comms, floatTransfers change, enabling and disabling tree comms, different compilers and MPI implementations, etc.

In all these runs, I realized that the crash never happened with a single node, always with multiple nodes. However, it doesnt make sense to me that the problem is related with the interconnection and also I got the error in different systems. Do have any chance to run this on a cluster?

Based on the printStack above and the error, can you have an idea and describe it on what the system is doing at that point?

Thanks for all your help

will

2017-05-04 18:19

manager   ~0008094

I can't tell just from the stack, no. The stack only tells us where the failure is happening. The code is doing a syncEdgeList, as you rightly figured out. This in turn requires some point data to be communicated, and it's during this that the failure actually happens. Why the failure happens, I don't know.

Yes, we have got a little multi-node machine. I'll try running on it tomorrow.

MattijsJ

2017-05-05 10:06

reporter  

interDyMFoam_debug.tgz (20,476 bytes)

MattijsJ

2017-05-05 10:13

reporter   ~0008099

Looks like something is modifying an edge/face and that change isn't synchronised correctly so one of the processor patches has less faces/edges than its opposite number - this will cause an error when trying to find out connected points by walking through the processor faces. Attached is a version of dev interDyMFoam which has been compiled with FULLDEBUG and has some additional code to prevent protected cells (even though there probably aren't any in your case). Might at least give you a better backtrace.

will

2017-05-05 14:41

manager   ~0008101

I've now tried it on 36 cores over 6 nodes, and it runs to completion.

will

2017-05-05 14:59

manager   ~0008102

I think you're on your own. If you are willing, try a full debug build*, and turn on debug switches for globalPoints and globalMeshData.

*i.e., put the line "export WM_COMPILE_OPTION=Debug" in your bashrc, then do a full clean and rebuild.

robertoribeiro

2017-05-12 18:40

reporter   ~0008146

Hi,

quick question, any particular reason why multiple routine (fvMeshDistribute::distribute, etc ) force the use of nonBlocking comms by using, for instance, PstreamBuffers pBufs(Pstream::commsTypes::nonBlocking)?

Thank you

chris

2017-06-01 08:36

manager   ~0008200

In the report you say you are using "dev", but the messages suggest "2.4.x". Which version are you using?

robertoribeiro

2017-06-01 11:39

reporter   ~0008202

I tested both of them, the behavior was similar. I figured that this happened much more frequently with a particular cluster system with high number of nodes, which makes it harder to reproduce.

will

2017-06-01 11:55

manager   ~0008203

The full case you put on google drive shows that you are using dev, but the commit hash in the logs (793a111bdfb7) doesn't match with anything in foundation dev. Are you using a different fork and/or have you made any changes to the code yourself?

wyldckat

2017-09-02 17:04

updater   ~0008673

@robertoribeiro: Please re-open this report when you have some time to look further into this, given that you haven't answered to Will's question yet.

Issue History

Date Modified Username Field Change
2017-04-11 20:37 robertoribeiro New Issue
2017-04-11 20:51 henry Priority high => normal
2017-05-03 19:25 robertoribeiro Note Added: 0008077
2017-05-03 19:44 robertoribeiro Note Added: 0008078
2017-05-04 09:27 will Note Added: 0008081
2017-05-04 15:08 robertoribeiro File Added: cellDist
2017-05-04 15:16 robertoribeiro Note Added: 0008086
2017-05-04 17:31 will Note Added: 0008092
2017-05-04 17:32 will Note Edited: 0008092
2017-05-04 17:55 robertoribeiro Note Added: 0008093
2017-05-04 18:19 will Note Added: 0008094
2017-05-05 10:06 MattijsJ File Added: interDyMFoam_debug.tgz
2017-05-05 10:13 MattijsJ Note Added: 0008099
2017-05-05 14:41 will Note Added: 0008101
2017-05-05 14:59 will Note Added: 0008102
2017-05-12 18:40 robertoribeiro Note Added: 0008146
2017-06-01 08:36 chris Note Added: 0008200
2017-06-01 11:39 robertoribeiro Note Added: 0008202
2017-06-01 11:55 will Note Added: 0008203
2017-09-02 17:04 wyldckat Assigned To => will
2017-09-02 17:04 wyldckat Status new => closed
2017-09-02 17:04 wyldckat Resolution open => no change required
2017-09-02 17:04 wyldckat Note Added: 0008673