View
4
Download
0
Category
Preview:
Citation preview
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Modèlisation statistique d’un championnat de football.Extension au tournoi de fighting
Eric Parent, Edouard Kolf
le 20 décembre 2012, AppliBUGS, Paris
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Contents
1 Exemple du championnat de football
2 Modèle Bradley-Terry
3 Inférence par data augmentation
4 Modèle Parent-Bernier
5 Résultats
6 Extension au Ju-Jitsu Fighting System
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Structure du championnat de France 2012
Exemple du championnat de ligue
20 équipes (1,...,20) soit 20*20-20=380 rencontres
38 journées de championnats
10 matchs par journée
3 résultats possibles : victoire, nul ou défaite
Objectif
Estimer les forces relatives des équipes (λ1, ..., λ20)Estimer les probabilités des différentes rencontres
Parier sur les 3 résultats possibles (cf. LotoFoot)
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Un exemple de Grille de LotoFoot
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Modèle de comparaison par paires
Notations
Chaque équipe possède une force latente propre : λi
3 issues possibles :i bat j avec probabilité Π+
iji et j font match nul avec probabilité Π=
ij
i perd contre j avec probabilité Π−ij
Version Duel Bradley-Terry sans match nul
Πij = λiλi+λj
Interprétation Diaconis : v. latentes
Zi ∼ Exp(λi) ; Zj ∼ Exp(λj)Πij = [Zi < Zj]
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Modele Bradley-Terry-Caron-Doucet
Avec match nul θ
Π+ij = λi
λi+θλj
Π=ij = (θ2−1)λiλj
(λi+θλj)(θλi+λj)
Π−ij = λj
λj+θλi= Π+
ji
Et oui ! (θ2−1)λiλj+λi(θλi+λj)+λj(λi+θλj)(λi+θλj)(θλi+λj)
= 1
Avantage terrain δ
λi → δλi si i joue à domicile
Π+ij = δλi
δλi+θλjsi i joue à domicile
Π=ij = (θ2−1)δλiλj
(δλi+θλj)(θδλi+λj)
Π−ij = λj
λj+θδλi6= Π+
ji
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Vraisemblance Bradley Terry
Vraisemblance
rencontre (ij) : l’équipe i rencontre j et joue sur son terrain
log[N|λ, θ, δ] =∑
(ij)
{n+
ij logΠ+ij + n=
ij logΠ=ij + n−
ij logΠ−ij
}log[N(ij)|λ, θ, δ] =(
n+(ij) + n
=(ij)
)log δλi
δλi+θλj+ n=
(ij)log(θ2 − 1) +(
n−(ij) + n
=(ij)
)log λj
λj+θδλi
n+(ij) + n
(ij)+ n−
(ij) = 1 : match entre i et j
Pb d’inférence : les dénominateurs !Force brute : SIR séquentiel au cours des rencontres (cf Parent/Bernier)Force aveugle : go to WinBUGS (cf Parent/Bernier)Approximation Normale bayésienne de la logistique(cf Glickman)Asymptotique Normale fréquentiste (cf David)Elégance bayésienne : Augmentation de données (cf Caron-Doucet)
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Astuce Caron-Doucet : Augmentation !
Introduction de variables latentes Zij|λi, λj pour chaque rencontre (ij)
Z+(ij) ∼ Γ(n+
(ij) + n=(ij), δλi + θλj) ; Z−
(ij) ∼ Γ(n−(ij) + n
=(ij), δθλi + λj)
log[N(ij), Z(ij)|λ, θ, δ] ≡(
n+(ij) + n
=(ij)
)log δλi +
(n−(ij) + n
=(ij)
)logλj
−(δλi + θλj)z+(ij) − (δθλi + λj)z−(ij) + n=
(ij)log(θ2 − 1)
On prend des priors appropriés :δ ∼ Γ(aδ, bδ),λi ∼ Γ(ai, bi), éventuellement fixé en fonction du classement de la saison précédenteNB λi ∼ Γ(ai, b), Πij = λi
λi+λjDirichlet
Jolie vraisemblance complète : Gibbs ou MAP par EM (ou Max Vrais) !
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Méthode Caron-Doucet : Algorithme de Gibbs
Des conditionnelles complètes très Gamma
Z+(ij) ∼ Γ(n+
(ij) + n=(ij), δλi + θλj) ; Z−
(ij) ∼ Γ(n−(ij) + n
=(ij), δθλi + λj)
λi ∼ Γ(ai +∑
j
(n+(ij) + n
=(ij)
)+∑
k
(n+(ki) + n
=(ki)
), bi +∑
j
(δz+(ij) + δθz
−
(ij)
)+∑
k
(θz+(ki) + z
−
(ki)
))
δ ∼ Γ(aδ +∑(ij)
(n+(ij) + n
=(ij)
), bδ +
∑i
λi
∑j
(z+(ij) + δz
−
(ij)
))
[θ|Z,N, λ, δ] ∝ [θ]× (θ2 − 1)
∑(ij)
n=(ij)
exp(−Kθ)× 1θ>1
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Comment générer selon la conditionnelle du paramètre de match nul ?
Comment générer selon(θ2 − 1
)Sexp−Kθ × 1θ>1 ?
S est entier.
θ = 1 + x
θ2 − 1 = x× (x + 2)
xS (x + 2)S = S!S∑
k=0
xS+k 2S−k
k! (S− k)!
xS (x + 2)S exp−Kx ∝S∑
k=0
(Γ(S + k + 1)2−k
Kk+1 × k! (S− k)!
)(KS+k+1 × x(S+k+1)−1
Γ(S + k + 1)exp−Kx
)
Un mélange de S + 1 lois gamma avec Pk ∝ Γ(S+k+1)2−k
Kk+1×k!(S−k)!
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Remarques
Sans problème pour un bayésien...
chaque force λi à une constante près, on n’apprend rien sur leur somme
possibilité de "parameter extension", améliore drastiquement, pas fait parWinBUGS
on peut aussi faire de l’EM, bien sûr...
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Pour rappel, modèle Parent-Bernier
Conditions de comportement vis à vis de l’écart des forces ∆
Π+ij
Π=ij
= g1(∆)
Π=ij
Π−ij
= g2(∆)
g1(∆) et g2(∆) fonctions croissantes de ∆On choisit g1(∆) = K1g(∆) et g2(∆) = K2g(∆) avec K1 > 0, K2 > 0
Par conséquent, le modèle doit s’écrire
Π−(∆) =1
K2g(∆)1
K2g(∆) +1+K1g(∆))
Π=(∆) = 11
K2g(∆) +1+K1g(∆)
Π+(∆) = K1g(∆)1
K2g(∆) +1+K1g(∆)
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Pour rappel, modèle Parent-Bernier
Conditions de symétrie (sans avantage jeu à domicile)
Π+(∆) = Π−(−∆)Π=(∆) = Π=(−∆)Si on choisit g(∆) = exp(∆), K1 × K2 = 1
Modèle Parent-Bernier
Π+(∆ij) = Kexp(∆ij)Kexp(−∆ij)+1+Kexp(∆ij)
Π=(∆ij) = 1Kexp(−∆ij)+1+Kexp(∆ij)
Π−(∆ij) = Kexp(−∆ij)Kexp(−∆ij)+1+Kexp(∆ij)
Le dénominateur de ce modèle ne donne pas une écriture du typeBradley-Terry-Caron-Doucet...mais se factorise et permettrait la même astuce de dataaugmentation
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Quel modèle ?
Comportement Bradley-Terry versus Parent-Bernier
−1.5 −1.0 −0.5 0.0 0.5 1.0 1.5
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
Log ratio des forces
Pro
b B
radl
ey−
Terr
y &
Par
ent_
Ber
nier
home&win draw home&defeat
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Résultats d’inférence sur les paramètres δ et θ de réglage
0 10 20 30 40
01
23
4
Matchs
Ava
ntag
e te
rrai
n
0 10 20 30 40
01
23
4Matchs
Coe
ffici
ent d
e m
atch
nul
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Résultats d’inférence sur les paramètres δ et θ de réglage (dernièrejournée)
Match nul du local (sachant égalité de forces)
Probabilité
Den
sity
0.10 0.15 0.20 0.25 0.30
05
1015
1.6 1.8 2.0 2.2 2.4 2.61.
52.
02.
5
Corrélation a posteriori
Coef. égalité
Ava
ntag
e te
rrai
n
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Résultats d’inférence sur la force des équipes
Estimation des λi au cours du temps
0 10 20 30 40
01
23
4
Rencontres
For
ces
Montpellier
Auxerre
Marseille
Lyon
Montpellier
Auxerre
Marseille
Lyon
Montpellier
Auxerre
Marseille
Lyon
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Résultats prédictifs Lyon recoit Montpellier (après la dernière journée)
0.0 0.2 0.4 0.6 0.8 1.0
05
1015
2025
Posteriors prob playing Lyon−Montpellier
Prob
Den
sity
win
lost
nul
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
++
++
++
++
+
+
+
+
+++
++
+++
+
+
+
+
+
+
+++
++
+
+
+++++
+++
+
+
+
+
+
+
+
+
+
++
+
+
+
++
++
+
++
+
+
+
+++
+
+
+
+
+++
++++
+
+
+
+
+
++
+
+
+
+
+
+
++++
+
++
+
+
+++
+
+
+++
+
++
+
++
+
++
+ +
+
+++
+
++
+
++
+
+
+
++
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
+++
+
++
+
+
+
+
+
+
+
++++
+
+
++
+
+
++
+
++
++
++
+
+
+
+
+
+
+++
++
+
+++
+
+
+
+
+
+
++
+
+
++
+
+
+++
+
+
+
+
++
+ ++
+
+
+
+
+
+
++
+
++
++
+
+
+++
+
+
+
+
+
+
+ +
+
+
+
++
+
+
++
+
+++
+
+
++
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
++
++
+
++
+
++
+
++
+
++
+
+++
+
+
++++
++
+
++
+
+
++
+
+
+
++
+++
+
+
++
+
+
+
+
++
++++
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
++
+
++
+
+
+
+
++
+
+
+
+
++
+++
+
+
++++
++
+++
+
+
+
+
+++++
+
+++
++
+
+
++
++
+
+
++
+
+
+++
+ +
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+++
+
+++
+
+
++
+
++++
+
+
+
+
+
++
++
+
++
++
++
+
++
+
+
+
++
+
+
+
+
++
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+++++++
+
++
++
+
++++
+
++
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
++
++
+
+
+
++
+
+
++
++
+
+
++++
+
+
+
+
++++
+
+
+
+
+
+
++
+
++
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+++
+
++
+
++
+
++
+
++
+
++
+
+
+
+
+
++
+
+
+
++
+
++
++
+
++
+++
++
++
+++
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+++
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++++
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
++
+
++
+
+
+
++
+
++
+
+
++
+
+
+++
+++
++
+
++
+
+
+
+
+++
+
+
++++
+++
+++
+
+
++
+
+
+
++
+
++
+
+
+
+
+
+++++
+
+
+++
++
++
+
+
+
++
+
+
++
++
+
+
++
+
++
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
++
++
+
+++
++
+
++
++
+
+
+
++
++
++
+
++
++
+++
++
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+++
+
+
+
+++
++
++
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+++++
++
+
+
+
+++
+
+
+
+
+
+
++
+
+
+
+
++++
++
+
+
++
+
+
+++
+
+
+
+
++
+
+
++
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
++
+
++
+
++
++
+
+
++
+
+
+
+
+
++
+
++
+
++
+
+
+
+
++
+
+++
+
+
++
+
+
+
+
+
++
+
+
+++++++
+
+
+
+
++++
++
+
+
+
+
+
++
+
+
+
+
+
++
+
+
++
+
+
++
++
+
+
+
++
++
+
++
+
++
+
+++
+
+
+++++ +
++
+
+
+
+
+
++
+
+++
+
+
+
+
+
+
+
++ ++
++
+
+
+
+
+
+
++
+
+
++
+
+
++
+
+
+++
+
+
+
++
+
+++
+
+
+
++++
+++
+
+
++
+
++
+
+
++
+
+
+
+++
+
+++
+
+
++++
++
+
+
++
++
++
++
+
+
+
++
+
+
+
+
++
+
++
++
+
+
+
++
+
+
+
+
+
+
+
++
+
++
++
+
++
++
++
+
+
+
+ +
+
+ +
++
++
+
+
+
++
+
++
++
+
+
+++
+
++
+
+++
+
+
+++
+
+
+
+
+
+++++
+
+++
+
+
+
+
++
+
++
++
+
+
+
+
++
++
+
+
++
++
++
+
+
++
+++
+
+++
+++
+
+
++
+
+
+
++
+
+
+
+++
++
+
+
+
++
+
+
+
+
++
+
+
+
++
+
+
++
++
+++
+
+
+
++++
+
+
++
+++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
++
+
++
+
++
++
+
+
++
+
+
++
+
+
++
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+++
+
+
++
++
++
++
++
++
+
+
+
++
+++
+
++
++
+
+
++
+
+
+
+
+
+
++
+
++
++
+
+++
+++
+
+
+++
+
+
+
+
+++
++
++
+
+++++
+
+
+
+
+++
++
+
+
+
+
+
++
+
+
++
+
+++
+
+
+
+
++
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
++
++
+
++
+
++
++
+
++
+
+
+
+
+++++
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+++++
+
+
++++
+
+
++
+++
++
++
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
++
+
+
++
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
++++
+
+
+
++
+
++
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+++
+
+
++
+++
+
+
+
+
+
+
+++
+
+
+
+
++
++
+
+
+
+
+
++
+++
+
+
+
+
+
++
+
++
+
++
+
+
+
++
+
+
+
+
++
++
+
+
+
+
+
++
+
++
+
+
+
++
+
+
++
+
+
++ +
+
+
+
+
+
++
+
+
+
++
++
+++
++
+
+
+
+
+
+
++
+
+
++
+
+
++
+
+++++
+
+
++
+
+
+
++
+
+
++
+
+
++++
+
+
+
++
+++
+
+
+
++
+
++
+
+
+
+
+
+
++
+
+
++
+
+
+
++
+
++
++++
++
+
+
++
+
+
+
+
+
++
+
+
+
++
+
+
+
++
+
+
+
+
++++
+
++
+
+
+
+
+
+
++
++
+
++
+
+
+
+
++
+
+
+++
+
+
+
++
+++
++
+
++
+
++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
++++
+
++
+
+++
++
++
++++
++ +
++
++
+
+++
+
+
+++
+
+
+
+ ++
+
+
+++
+
+
+
+
+
+
++++
+
+
+
+
+++
+
++
+
+
+++ +
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
++
++
++
++
+
+
++
+
+
+
+
+
+
+
+++
+
+++
+
++
+
+
+
+
+
+
+
+
+
+++
++
+++
+
+
++
+++
+
+
+
+
++
++
+
++
+
+
++
++
++
+
++
++
++
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
++
++
+
+
+++
+
+
++
+
+
++
+
+
+
+
+
++
+
+
+
+
+
++
++
+++
++
+
+
+
++
+
++
+
+
+
++
+
+
+
+
+++
+
+
++++++
++
++
+
+++
+
+
++
+
+
+
+
++
+
+
+
++
+
++
+
++
+
+
+
+
+ +
++
++
+
+
+
+
+ +++
++
+
++
++
+
+
+
+
+
+
+
+
++
++
+
++
+
++
+
+
+
+++
+
+
+
+
+
+
+
+++++
+
+
+
++
++
+
+++
++
++
+
+
+
+++
+
+
+++
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+ +
++++
+
+++
+
++
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
++
++
+
+
+
++++++++
+++
+
++
+
+
+
++
+
+
+
++
+
++
+
+++
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
++
+
+
++
+
+
+
+++
+
+
+++
++
+
+
++
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
++
+
++
++
++
++
+
+
+
+
+
+
+
+
+++
+
+
+
++
+++++
++
+
+
++
+
+
+
++
+
+++
+
+
+
+
+
++
+
+
++++
+
+
+++
++++
+
+
+
+
+
+
++
+
+
++
++
++
+
+
+
+
+++
+
+
+
+
+
+
+
++
++
+
+
+
+
+
++
+
+
+
++
+
+
+
+
++
++ +
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
++
+
+ ++
+
+
+
+
+
+++
+++
+
+
++
++
+
+
+
+
+
+
+++
+
+
++
+
+
+ +
+
+
++
++
+
+
++
+
+
+
+
+
++
+
++
+
++
+
++
+ +
+
++
++
+
+
+
+
+
+
+
+
++
+
+
+
++
+
++
++
+++
+
+
+
++
++
+
+
+
+
++
++
++++
+
++++
+
++
+
++
+
++
+
+
+
++
+
++
+
++
++
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
++
+++
+
+
+
++
++
+
+
+++
+
+
+
+
+
+
++
+
+
++
+
+
++
+
+
+
+++
++
++
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
++
++++ +
+
+
+++
++
+
+
+
+
+
++
+
+
++
+
+
+
+
+
++
+
+
++
+
+
+
+
+++
+
+
++
+
+
++
++
+
+
+
++
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
++
++
+++
+
+
+
++
+
+
++
++
+
+
++
+
+++
+++++
+
+++
+
+
++
++
+
++
++
+++
++
+
+
+
+
+
++
+++
+
+++
+
+
+
+
+++
+
+
++
++
+++
+
+
++
+
++
+
++
++
+
+
++
++
+
+
++
+
+
+
++
+
+
+
+
++
+
+
+
++
+
+
+ +++
+
+
+
+
+++
+
+
+
+
+
++
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+++++
+
+
+
+
+
+++
+
+
+
+
++
++
+
+
++
+
++
++
++
++++
+
+
+
+
+
++
++++
+
+
+
+
+
+
++
++
+
++
+
+
++
+
+
+
+++
+
++
++
++
+
++
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+++
+
+
++
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+++
+
+
+
++
+
++
+
++++
+
+
++
+
+
++
+
+++
+
+
++
+
+++
++
+
++++
+
+
+++
+++
+
+
+++
+
+
+
++
+
++
+
+
+
+
+
+
+
++
++
+
++
+
+++++
+++
++
+++
+
+
+
+
+
+
+
+
++
+
+
+
++
++
+
+
+
+
+
++
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
++++
++++
+++
+
+
+
+++
+
+
+
+
+
+
++
++
+
+
+
++ +
+
+
+
++
++
++
+
+
+
++
++++
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+
++
+
+
++
+
+
++++
+
+
+
+
++
+
+
+
++
+
++
+
+++
++
+
+
+
++
+
+
++
+
+
+
+
++++
+
+
++
+
++
+
++
+
+
+
+
+
+
++++
+
++
++
+
+
+
+
+++
+
++
+
+
+++
+
+
+
+
+++
+
+
+
+++
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
++
+
+
+
+
+
++
+
+
++
+
+
+
+
+
++
++
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++
++
+
+
+++
+
+++
+
+
+ +++
+
+++
+
+
+
++
+
+
+
++
+
+++
+++
+
+
+
+
+
+
+++
++
+
+
+
++
+
+
+
+
++
++++
+
+++
+
+
+
+
+
++
+
++
+
+
++
++++
+++
+
++
+
+
+
+
++
+
+
+
++
+
+++
+
++
+
+
+
+
++
++
+ ++++
+
++
+
+
+
+
+
+
++
+
++
+
++
+
+
++
++
++++
+
+
++
+
+
+
+
+
+
++
+
+
++
++
+
+
+
+
++
+
++
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+++ +
++
+
+
+
+
++ +
+
+
+
+
+
+++
+
+
++
+
++
+
+
++
+
+++
++
+++
+++
+
++
+
++
+
++
++
+
++
+
+++
+
+++
++
++
++++
++
++
+
+
+
+
+
+
+
+
++
++
++
+++
+++
+
+
+
+
+
+ ++++
+
+
+
+ +
++
++
+
++
+
+
+
+++++
++
+
+
+ +
+
+
+
+
+
+
+
+++
+
+
+++++
+++
+
+
+
++
++
++
++
++++
+
+
+
+++
+
+
+
+++
+
++
+
+
++
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+++
+
+
++
+
+
+
+
+
++
++
+
+
+
+
+
++
++
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+++
++
+
++
+
+
+
++
+
+
+
+
+
+
++
+
+
+
++
+
++
++
+
+
++
+
+++
++
+
+
+
++
++
++
+++
++
+
+
+
++
+
++++
+
+
+
+
+
+++
+
+
+
++
+
+
++
+
+
+++
+
++
+
+
+
++
+
++++
++
+
+++
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++++
+
+
+
+++
+
+
+
+
+
+
++
+
+
+
++
+
+
+
++
+
++
+++
++
+
+
+
+
+
+++
+
+
+++
+
++
++
+
+
+
+
++
+
+
++
++
+
+
+++
+
+
+
+++
+
+
+
+
+
++
+
+
+
+
+
+
+
++
++
+
++
++
+
+
+
+
+
++
+
+
+
+
+
++
+
++
+++
+
++
+
+
+
+
+
+
++
+++
+
+
++
++
+
+
+
+
+
++
+
+
+
++
+++
+
+
+
++++
+
+
+
+
+
+
+
+
+
+
++
++++
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+++
++
+
+
+
+
++++
+
+
+
+
+
++
+
+
+
+
++
+
++
+
+
++
++++
+
+
++
+
+++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
++
++
++
+
+
+
++
++
+
+++
+
++
++++
+
+
+
++
++
++
++
++
+
+
++
+
+
+
+
++
++
+
+
++
+++++
++
+
+
+
++
+
+
++
+
+
+++
+
+
++
+
+++
+
+
+
++
+
++
+
++
+
+
++
+
+
+
+
+
++
+
+
+
++++
+
+
++
++
++
++
+
+
++
+
+
+
++
++
+
++
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
++
+
+
+
++
++
+
+
+
+
+
+
+++++
+
+
++ +
++
+++
+
+
+
++
+
+
+
+
++
++
+
++
+
+
+
++
+++++
+
+++
+
+++
+++
++
+++
++ ++
+
+
+
+
++
+
+
+
+
+
+++
++
+
++
++++
+
+
+
+
++
++
++
+
+
++
++
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
++
++++
+
+
+
+
+
+
+
+
+
++
+++
++
+++
++++
+
+
++
+
++
+
+++
++
+
+
++
+
+
+
+
+
++
+
+++
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++++
+
+
++
++
++
++
+
++
+
+
++
+
+
+
+++
+
+
+
+
++
+
+
++
+
++
++
+
+++++
++
++
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+++
++
++
+
++
+
+
+ +
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
++
+ ++
+
+
+
++
+
+
++
+
+
+
+
+
+
+
++
++
+
+
++
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
++++
+
+
+
+
+
+
+
++
+
+
+
+
++++
++++
+++
+
++
+
++
+
+
+
++
+
+
+
+
+
++
+
++
+
+
+
+++
++
++
+
+
+
+
+
++
++
+
++
+++
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
++
+
++
+
+++
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
++
++
++
+
+
+
+
+
+
+
++
+
+
++
+
+
++
++++
+++
+
++
+++
+
+
++
++
+
+
+++
+
+
+
+
+
++
+
++
+++
++
+
+
+
+
+
+
+
+
+++++
+
+
+
+
+
+
+
++
+
+
+
++
+
++
++
++
+
+
+
+
+
+
++
+ +
+
++
+++
+
+
++
+
+
+
+
+
++
+
+++
+
++
+
+
+
+
+
++
++
+
+
++
+
++
++
+
++
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+++
+
++
+
+
+
++
++
+
+
+
++
+
+
+
+
+++
+
+
+
+++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
++
+
+
++
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
++
++
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
++
+
+
+++
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
++
+
+
+
++
+
+
+++
++
+++
+
++
+
++
+
++
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+ +
+
+
++
+++++
+
+++
+
+
+
+
++
+
+++
+
+
+
+
+
+
+
+
++++++
++++
+
+
+
+
++
++
+
++
++++
+
+
++
+
++
+
+++
+++
+
++
++++
+
++
+
+
+
+++++
+
+
++
+
+
++++++
+
+
+
++
+
+
+
+
+
++
++
+
+
+
+
+
+++
+
+
+
++
+
++
+
+
+
+
+
+
+++
+
+
++++
++
++
+++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
++
++
++
+
+
+
+
+
+
++ +
+
+
+++
++
+
+
++
++++
++
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
++
+ +
+ +
+++
+
++
++
++
+++
+
++
++
+
+
+++
+
+
+
++
++
+++
+
+
+
++
+
+
+
+
+
++
++
+
+
+
+
+
+ +
+
++
+++
+
+
+
+++
+
+
+
+++
+
+++
+++
++
+
+
++
+++
+
++
+++
+
+
+ +
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
++
++
+++
+
+++++
+
++
+
+
+
++
+
+
+
+
+
+
++
+
++
++
+
+
+
+
+
++
+
+
+
++
+
++
+++
+
+
+
+
++
++
+
+++
+
+++
+++
++
+
+
+
+
++
+
+
++
+
+
+
++
++
+
+
+
+
+
+
+
++ ++
+
+++
+
+
+
++
+
+
+
++
+
++
++++
++
+
+
+
++
+
++
+++
+
+
+
++
+++
+
+
+
++
+
+
++
+++ +
+++
++
+
+
++
++
+
+
+
+
+
++
+++
+++
+
+
+
++
++
+
+
+
++
+
+
+
+
++++
+++++
+
+
+++++
+
+
+
+
+
+
+
+
+
+
+++
+
++
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+++
+
++
+
++
++
+
+
+
+
+
+
+
++++
+
++
+
++
+
+
+
++
+
+
+
++
++
+
++
++
+
+
++
+
+
+++
++
+
++
++
+
+
++
++
++
+
++
+
+
+
++
+
+
+
+
+
+++
++++
++++
++
+++
++
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+++++
+
+
+++
+
+
++
++
+
+
+
+++++++
+
+
+
+
+
++
+
++
+
+
+
+
++
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++++
+
+
+
++ +++
+++++
+
+
+
++
+
+
++
+
+
+
++
+++
+
+
+++
+
+
++
+
+
+
+
+
+
+
+
+++
+
+
+
+
++
+
+
+
+
+
+ +
+
++
+
++
++
+
++
+
++
+
+
+
+
+
+
+++
+
+
++
+
+
+ +
+
++
+ ++
+
+
++
+
+
+
+
+
+
++
+
+++
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
++
+
+
+
++
+
++
+
+
++
++
+
++
+
+++
++
++
+
++
+
+
++
+
+
+
+++
+
+
+
+++
+
+
+
+
++ +
+
+
+
+
+
+
+
+
++
++
+
+++
+
+
+
+
+
+
++
+
+ +
+
+++
+
++
++
+
++
+
+
+
+
+
++ +
+
+
+
+
+
+
+
++
+++
+++
+
+
+
+
++ +
+
+
++
+
++ +
++
++
+++++
+
++++
+++
++
+
+
++
+ +
+
+
+
+
+
++
+
+++
+
+
+
+
++
+
+
+
+
+
+
+
++
++ +
+
+
+
++
++++
+++
+
++
++
+
+ +
+
++++++
+
+
+
+
++
+
+
++
+
+
+
++
+
+
++++++
+
++
+++
+
+
+
++
+
+
+
+
+++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +++
++
+
+
++
++
++
++
++ +
+
+++++
+
+
+
+
+++++
+ +
+
+
+
++
++++
+
++
+
+
++
+
++++
+
+
+
+
+++
++++
+
+
+
+
+
+
+
++
++
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+ ++
++
+
+
+
+
+
+
+
+
+
+++
+
+++
++
+
++
++
+
++
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+++++
+
+++++
+
+
+
+
+
+++
+
+
+
+
+
+
++ +
+
++
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+++
+
+
++
+
++
+
+++
++
++
+
+
+
++
+
++
+
+
+
+
++
+
++
+
+++
+
+
+
++
+
+
++
+
+++
++
++
+++
+
+++
+
+
++++
+
++
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
++
++
+
+++
+
++++
+
+
++
+++
++
++
++
++
+
+
+
++
+
+ +
+
+
++
+ +
+
+
+
+
++
+
++
+
+
+
++
++
+
++
+++
+
+
+
+
+
++
+
++++
+
+
+
+
+
+++
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
++
++
+
+
++
+
+
+
+
+
+
+
+
+
++
++
++
+
+
+
+
+
++
+
+
+
+
+
+
+++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+
++
++
++
+
+
+
+++
+
+
++
+
+
+
+
++++
+
+
++
+
+
+
+
+
+ +
++
+
+
+
++
++
++
+ +
+
++
+
+
+
++
+
++
+
+
++
++ ++++
+
+
+
+
+
+
+
+
+++
++
+
+
+
+
+
+
+
+++
+
++
+
+
++
+
+
++
+
+ +
+
+
+
+
+
+++
+
+
+
++
++
+
+
++
+
+++
+
+
+
+
+
+++
+
++
+
+
+
+
++
+
+
+
+
++
+
+
++++
+
+++
+
+
++
++
++
+
+
++++
+
+
+
+
+
+
+
+
++
+
+++
+
+
+
++
+
+
+
+
+
+
+
+++
+
++
+
++
++
++
+
+
+++
+
+
+
+
++
+
+
+
+++
++
+
++
++
++
+
+
++
+
+++
++
+
+
+
+ ++
+
++
++ +
+
+
+
++
++
+
++
++
+++
+
+
+++
++
+
+
+
++
+
++
+
+
+
+
++
+
++
++
++
+
++
+
+
+++++
+
++
+
+
+
++
+
+
+
++
+
+
+
+
++
+
+
++
+
+
++
+
+
+
++
++
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
++
+++
+++
+
++
++
+
+++
+
+
+
+
+++
+
+
++
++
+++
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
++
++
++++
++
++
++
+++
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+
++
++++
+
+
+
+
+
+
+
+++
+
+
++
+
++
+
++
++
+
+
+
+++
+
+
+
+
+
++++
+++
+
+
+
+
+
+
+++
++
+
+
+
+
++++
+
+
+
+
+
++
+
+
++
+
++++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+++
+
++
+
+
+
++
+
+
++
+
+
++
+
+
+
+
+
++
+
++
+
+
+
+
++
+
++
+
+
+
++
+
++
++
+
+
+
++
+++
++
+
+
+
+
++
+
+++
+
+
+
+
+
+
+
++
+
+
++
++
+
+++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+ ++
++
+
+
+
++++
+
+
+
++
+
+
++
+
+++
++
+
+
+
+
++
+
+
+
++
+
+ +
++
+
+
+
+
+
++
+
+
+
+
+
+
++
+
++
+
+
+
+
+
++++
++
+++
+
+
+++
++
++
+
+
++
+
+
+
++++
+
+
+
+++
+
+
+
+
+
++
+
+
+
+
+
+++
+
+++
++
++
++
+
+
+
+
+
++
++
++
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
++
+
++
+
+
+
+
++
+
+
+
+
+++
+
++
+
+
++
++
+
+
++
+
+
+
+
+
+ +
+
++
+
+
++
+
++
++++
+
+
+
+
+
+
+
+
++
+
+
++
+
++
+
+
+
++
+
+
++
+
+
+
++++
++
++
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
++
+
+++
++
+++
+++ +
+++
+
++
+
+
+
+
+
++
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
++
++
+
+
+
++
+++
+
++
+
+
+
+
++
+
+
++++
++
++
++
+
++
+++ +
+
+
+
+++++
+
+
+++++
++
+
+
+
+++
++
++
+
+
+++
++
+
++
++
+
+
+
++
+
+
+
+
++
+
+
+
+
++
+
+++
+
+
++
++
++++
++
+
+++++
+
+
+
++
+
+++
+
+
+
+++
+
++
+
+
+
+
++
+
+++
+
+
+++
+
+
+++
++
++
+
+
++
+
+++
+
++
+++
+
+++
+
+
++
+
+++
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
++
+
+
++
+
+
++
+
+
++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
++
++
++
+
+
++
+
+
+
+
+
+
++++
+
+
+
+
+++
+
++
+
+
+
+
+
++
+++
+
+
+
+++
++++
+
+
++
++
+
+++
+
++
+
+
++++
+++
++
+
+
+
+
+++
+
+
++
+
+ +
+
+
++
+
+
+
+
++
+
+
++
++
+
+
+
++
++
++
+
+
+
+
+
+
++
+
++
+
+
+
++
+
++
++
+
+
+
+
++
++
+
++
+++
++
+
+
+ ++
++
+++
+
+
+
+++
++
+
+
+
++
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+++
+
+++
+
++
++
++
++
+
+
+
+
+
+
+
+
++
++
++
+
+
+++
+
+
+
+
+
+++
+
+
+
+
+
+
+
++
+
++
++
++
+
+
+
+
++
+
++
+
+
+
++
++ +
+
+
+
+
+
+++
+
+++
++
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
++ +
+
+
+
+
+
+
+
+++
+
+
+
+
++
++
+
+++
+++
++
++
++
+
+
+
+
+
+
+
+
+
+
+
++
++++ ++
+
+
+
+
+
+
+
+
++
++
++
+
+
+
+++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++++
+
+
+
++
+
++
++
+
+
+
++
++++
+
+++++
+
+
+
++
++
+
+
+
+
+
+
+
+
+++
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++++
+
++
+
+
+
++
++
++
+
++
+
+
++
++
++
+++
+
+
++
+
+
+
++
+
+
+
+
+++
+
+
+++
+
++
+
+
++
+
+
+
+
++
+++
+
+
+
+
+
+
+
++
+
+
+++
+
++ ++
+
++++
+
+
+
++
+
+
++
++
++
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
++
+
+++
++++
+++
+
+
++
+
++
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+++
++
+
++
++
+
+
+++
++
+
+
+
+
+
++
+
+
+
+++
+
+
+
+
++
++
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
++
+
++
+
+++++
+
+
+
+
+
++
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+++
+
+++
+
+
++
+
+
+
+
+
+
+++++
+++
++
+
+
+
+
+
+++
+
+
++
+++
+
+
+
+
+
++
+
+
+
++
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
++++
+
+
+
++++++++
+
+
++ ++
+
++
++
+
+
+
++
+
+
+
++
++
+
++
+
+
+
++ ++
++
++
++
+
+
+
+++
+
++
+
+
+++
+++
+ ++
++
+
+
+
+
+
+++
+
++
+
++ +
+
+++
+
+
+
++
+
+
++
+
++++
+
+
+
+
+
++
+++
++
+
+
+
+
+
+ +
+
++
++
+
++
+
+
+
++
+
+
++
+
+
+++
+
++
+
+
+
+
++
+
++
++
++
++
+
++
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
++
++
+
++
+
+
+
+
++++
++
+
+
+
+
+
+
+
+++
+
+
+
+
++
+
+
+
+
++
+
+
++
++
++
+
+
++
+
+ +
+
+
+
+
+
+
+
+
+
+
+ +
++
+
+
+
+
++
++
+
+
++
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
++
+
++
+
+
++
+
+
+
+
+
+
+
++
++++
++ ++
+
++
+
+
+++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+++
+
+
+
++
++
++
+
+
+
+
+++
+
+++
+++
+
+
+++
+
++
+
++
++
+
++ +
+
+
+
+++
+++
+
++
+
+
+
+
+
++
+++
+
+
+
++
+
+
+
++
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
++
+
+
++
+
+
+
+
++
+
++
+
++
+
+
++
++
++
+
+
+
++ +
+
+ +
+
+
+
+++
+
++
+
+++
+++
+
++
++
+
++
+
+
++
++
+
++
+
+++
++
++
+
+
+
+
++
+
+
++
+
+
++++
+
++
+
+
+
+
+
+
+
++++ +
++
+++
++
+
+
+
+
+++
++
+
+
+
+++
+
+
++
++
+
+
+++
+
++
+
+
+
+
+++
+
+
+
++
+
+
+
+ ++
+
+++
+
+
+
+
+
+
+
+
+
+
+
++++
+
+
+
+++ +
+
+
+
+
+
+
+
+
+
+++
+
++
++
++
+
+
+
+
+
+
+
+
++
+
++
++
++
+
++
+
+
+
+
++
+
++
+
++
+
++
+
+
++
+
+
++
+
+
++
+
+
+
+
++
++
+
+
++
+
+
+
+
+
++
++
+
+
+
++
+++
+++
+
+
+ +
+
+
+
+
+
+
+
++++
+
+
++ +
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+++
+
+
++
+
+
+
+
+
+
++
++
++
++
+
++
+++
+
+
+
+
+++
++
++
+++
+
+
++
+
++
+++
+
+++
+
+
++
+
++
+
+
+++
+
++++++
+++
+
+
+
+++
+
+
+
+
++
+
+
++
+
+
+
+
+
++
+
++
+ +
+
+
++
+
+
+
+
+
+
+++
++
+
+
+
+
+
+
+
+
++ +
+
+
+
++
++
+
+
+
+
+
++
+
+
+++
+
+
+
+
++
+
+
+
+
++
++
+
+
++
+
++
+++
+
++
+
+
+
+
+
+
+
+
+
+
+
++
++
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+++
+
+
+
+
+
+
+++
+
+++
+
+
+
++
++
+++
+
+
+
+++++
+
+
++
+
+
++
+
+
+
++
+
+
+++
++
+
++
++
+
+++
+
+
++
+
+
+
+++
++
+
+
+
+
+
+
+
+
++
++
+
++
+
++++
+
+
+
+++++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++++
+++
+
++
+
+
+
++
+
++
+
+
++
+
++
+++
+++
++
+
+
++
+
+
+
+
+++
+
++
++
+
+
+
+
+
++
++
+
++
+
+
+
++
+++
++
+
+
+
+
++
+
+
+
+
+
++
+
+
+
++
++
++
+
++
+
+
+
+++
++
+
++
+ +
+
++
+
+
+
+
+
+
+
+
+
+
++
++++
++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++++
+
+++
+
+
+
+
+
+
+
++
+ +++
+
+
++
+
+
+
++++
+
+
+
+
++
+
+
+
++
+
++
++
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
++
+
+
+
++
+
++
++
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+++
+
++
+
+
+
+
+
++
+
++
+
+
++
+++
+
+
+
++
+
++
+
+
+
+
+
+
++
+++
++++
+
+
+
+
+
+
+
++
+
+++
+
++
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
++
++
++++
+
+
+
+
++
++
+
+
++
+
+
+
+
++++
+++
+
+
+
+
+
+
++++++
+
++
+
++
+++
++++
+
+
+
+
+
+
+
++
++
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+ +
+
+
++
+
++
+
++
+
++++
+
+++
+
+
+
+
++
+
++
++
+
+
+
+
++
+
++
+
++
+
+
+
+
++
+
+++
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
++
+
+++
++
+++
++
++
+
+
+
+
++
+
+
+
++
+
+
+
++
+
+
++
++
+
+
++
+
+
++
+
++
+
+
+
+
+
+
+
+
+ +
+ +
+
++
+
+
++
+
+
++
+
+
++
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+
++
+
++
++
+
++
++++
+
++
+
++
+
+
++
++
+
+++
+
+
++
+
+
+
+
+++
+
+
+
++
+
+++
++
+
+++++
++
++
+
+
++
+
++++
+
++
+++
+
+++
+
++
+
++
+
++
+
+
++
+
+++
++
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
++
+ ++
+
+
+
+
++
+
+
++
++
+
+
+++
+
+
+
+
+
+
++++
+
+
+
++++
++++
+++
++
+++
++
+
+
+
++
+
+
+
+++
+
+++
+
++
++
++
+
+
+
+
+
++
+
+
++
+
+++++
+
+
+
++
+
+++
++++
+
++
+++
++
+ +
+
+
++
+
+++
+
+
++
+
+
++
+
+
+
+
++
+
++
+
+
+
++
++
+
+
+
+
++
+
++++
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
++++
++++
+++
+
+
+
++
++
+
+
++++
+
+++
+
+
++
+
+
+
+++
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
++
++
+
+
+
+
++
++
+++++
++
+++++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
+ +++
+
+
+
++
+
++
++
++
++++
++++
+
+
+
+
++
+++
+
+
+
+
+
+++
+
+++
+
+
+
++
+
+
++
+
+
+
+
++++
+
+
+
+
+
+
++++
+
+ +++
+
+
+
+
++
++
++++
+++
+
+
+
+
+
+
+
+
+
+
++
++++
+
+
+ +
++
+
+
+
+
+
+
+
+
++
+
+ ++
+
+
++
++
+
++
++++
+
+
++
+
+
+
+ ++
+
+
+
++
++
+
+
+
++
+
+
+
++ +
++
+
+
++
++
++
+
+
++
+
+
+
+
+
+
++
+
+
++
+
+
++
+
+
+
++
+
+
+
+
++
+
+
+
+
+
++
+
+
++
++
+
+
+
+++
+
+
++
++
+
+
+
++
+
++
+
++++
++
+
++
+
+
+
+
+
+
+
++
+ +
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+++
+
++
++ ++
+++
+
++
+
++
++
+
+
+
+++
+
+
+
+
++
+
+
+
+++
+++
+
+
+++
+
+
+
++
+
+
+++
+ +
+
+++
+
+
+
+
+++
++
+
+
+
++
++ ++
+
+++
+
+
+
+
+
++
++
+
+++++
+
++
+
+++
+
+++
+
+
+
+
+++
+++
+
++
++
+++
++
+
+++
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+ +
++
+
+
+
+
+
++
++
++
+
++
+
+
++
+
+
++
+
+
++
+
++
+
+++
+
+
+
+
++
++
+
++
+
+
+
++
+
+
+
+
++
+
++
+
++++
+
+
+
++
++
++
+
++++
+
+
+
+
++
++
++
+
+
+
+
++
+
+
+
+
++
+
++
+
+
+
+
++
+
+
+
+
+
+
++
+
++
++
+
++
+++
+
++
++
+
+
++
+
+
+
+
+
+
++
+
+
+
++ ++
+
+
++
+
+
+
+
+
+ +++
++
+
+
+
+
+
+
+
+++
++
+
++
+
+
++
+
+
++
++
+
+
++
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
++ ++
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
++++
+
+
+
+
+
+++
+
+
+
+
+
++
+
+
+
++ +++
+
+
+
++
+
++
++
+
+
+
+
+
++ +
+
+
+
++
+
+
+
++
++
+
+
+++
+
++
+
++
++
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
++
+
++
+
+
+
+
+
++
+
+
+
++
+
+
++
++
+
+
+
+
++
+
++
+
+
+
++
+
+
+
+
++
++
+
+
++
+
+
+
+
+
++++
+
+++
+
++++
++
+++
+
+
+
+
+
++
+
++
++
+
+
++
+
+
+++
+
+
++
+
+
++
++
+
+
++
+++
+
++
++
+
+
+
+
++
+
+
+++
+
+
++
++
+
+
+++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
++
+
+
+
++
++
+
+
++
+
+
++
+ +++
+
+
+++
+
+
++
+
+
+
+
++
++++
+++
++
+
+
+
+
+
+++
++
+
++
+++
+
++
+
+
+
+
+
++
++
+
++++ ++++
+
+
++
+
++++
+
++
++
+
+
++++
+
+
+
+
+ +
+
+++
+++
+
+
+
+
+
+
+
++
++
+
+
+
+
++ +
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
++++
+ +
+
++
++
+
+
+
+
++
+
+
+
+
+
++
+
+
+
++
+
+
+
+
++
+++ ++
+
+
+
+
+++
+
+
+
+
+
+
+ ++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+++
+
++
+
+
++
+
+
++++
++++
+
+
+
+
+
+
+
+
+
++
+
+
++
+
++
+
+
+
+
+
+++
+
+
++
+
+
+
+
+
+
++
+
+
++
+
+
+
+ ++
+
++
+++
++
+
+
++
++
+
+
+++
+
++
+
+
+
++
++
+
+
+
+
++
+
+
+
++
+
++++
+
+
+
+
+
+
+
+
+
++
+ +++
++
+
++
++
+
+ +++
+
+
+
+
+
+
+++
+
+
++
+++
+
+
++++
+
+ +++
+
+
++
+
+
++
+
+
+
+++
+
+
+++++
+
+
+
++
++
+
+
++
++
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
++++
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++++
++
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+++
+
+
+
+
+
+
+++ +
+
++
+
+++
+
++
+
+
+
+
+
+
+++
+
+
+++
++
+
+
+
++
++
+
++
++
+
+
+
+
+
+
+
++
+++
+
+
++
+
+
+
++
+
+
+
+
+++++
++
++
++
+
++
++
++
++
++
+
+
+
+
+
++
++
+
+
+
++
+
+
+
++
+
+
+++
++
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+
++
++
+++ +
+++
++ +
+++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+++
++
+
+
+
++
++
+
+
+
++
+
+++
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
++
+
+
+
++
+
++
++
+
+
+
+
++
+
+
+
+++
+
+
+
+
+
+++
++
+
+
+
+
++
+
+
++
++
+
+
+
+ +++
++
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+++
+++
++
++
+++
+++
+
+ +
+
+
++
+
+
+
+
++
+
++ +
+
++
+++
+
+
++
+
+
++
+
+
+
+
+++
+
+
++
++++
+
+++
++
++
+
+
+
++++
+
+
++
+
++
++
+
++
+++++
+
+
++
+
+
+
++
+
+ ++
+
+
+
+++
+
+
+
+
++
+
++
+
+++
+
+
+
+
++
++
++
++++++
+
++
+
+
+
++
+
+
+ +
+++++
++
++
+
+
+
+
++++
++
+
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+++
++
+
+
+
+
++ +
+
++
++
+
+
+
+
+
++
++
++
+
+
++
++
++
++
+
+
+
+
++
++++
++
++
+
+
++
+
+
+
+
++
++
+
+
++
+++
+
+
+
++
+
+++
+
+
+
++
+
+
+++
+
++
+
++
++
++
+
++
+
+
+
+
+
+
+
+
++
+
++
+
+
+
++ ++
+++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+++
+
++
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
++
++
+
+
+
+
++
+
+
++
++
+
++
+
+
+
+
+++
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
++
+
+++
+
+
+
+
+
++
+
+
+ ++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+++
+
+++ +
+
+
+
+
+++
+
+
+
++
+
+
+
+
+++
+
+
+
+
++++
+
++
+
+
+
+
+
++
+
+
+
+++
+
+
+
+
+
+
+
++
+
+
++
+
+
+
++
+
+
+
+
+
++
++
+
+
+++
+
+
++
++++
+++
++
++
++
+
+
+
++
++
++
+
+
++
+
+++
++
++
+
+
++
+
++
+
+
+
+
+
++
+
++
+
+++
+
+
++++
+++
+ ++
+
+
++
+
++
+
++
+
+
+
+
++
+
+
+++
++
+
++
+
++
+
+
+
++
++
++
+
+
+
+
+
+
+ +
++
+
+
+
++
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
++
+
+
++
+
++
+
+
++
+
+
+
++
+
+
+
+
++
++
++
+
++
++
+
+
+
+
++
+
+
+
++
+
+++
+
+ +
+
++
+
+
+
+
+
++
+++
+
++
+
+
+
+++
+++
+
+
+
++
+
+
+
++
+
+
+
+
++++
++
+++++++
+
+
+
+
+
+
+
+
+
+
+
++
+++
+
++
+
+
+
+
+
+
+
+++
+
+
++++
+
+
+
++
+
+
++++
+
+
+
+
+
+
++++
++++
+
+
++
+++
++
+
+
+
+
+
+
++
++
+
++
+
+++
+
++
+
+
+++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
++
+
+++
+
+
+++
+
++
+
+
+
+
+
+
++
++
++
+++
+
+
++
+
+
+
+
+++++
+
+
+
++
+
+
+
+
+
+
++
++
+
++
+
+
+
+
+
++
+
+
+
+++++
+
+
+
+
+
+
+
++
++
++
++
++
++
+
+
+
+
+++
+
++
+
+
+
+
+
+++
++
+
+
++
+
+
+
+++
+
+++
++
+
+
++
++
+
+
++
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
++
+++
++
+
+++
+
+
+
+
+
+
+
+
++
+
+
+++
++
+++
+++
++
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
++ +
+
++
+
++
+
++
++
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
++
++
++
++
++
++
+
++
+
+
+
++
++
++
+
+
+++
++
+
++
+
+
++
+
+
+++
+
+
++
+
+
+
++
+
++
+
+
++
++
+
+
+
++
++
+
+
+
+
+
+
++
+++
+
+
+
+
+
++ +
+
+ +++
+
++++
+
+
+
+
+
+++
++
+
++
+++
+
+
+
+
+
++
+++
+
++
++
++
+
+
+
++
+
+
+
+
+
+
+
+++
++
++
+
+
++
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+++
+
+
+
+
+++
+
++
+
++
+
+
+
+
+
+
+
+
++
++
+
+ +
+++ +
++
+
++
+
+
+++
+
++++
+
+
++
++
+ +
++
+
+++++
++
+
++ +
+
++
+
+++
+
+
+
++
++
+
+
+
++
+
+
+
++
+
++
++
+
+
+
+
++++
++
++++
+
+
+
+
+
+
++
+
+
+
+++
+
++
++
++
+
+
+
++
++
+
+
+
+
+ +++
+
+
++
+
+
+
+
++
+
++
+
++
+
+
+
++
+
+
+
+++
+
+++++
+++
+
++
+
+
+
+
+
+
++
+
+
+
++
+
++
+ +
+
+++
+
+
++++
++++
++
++
++++
++
+++
+
+
++
+
+
+
+
+
++
+
++++++
+
+
+
+++
+
+++
+ +
+
+
+
+++++
+
+
++
+
+
++
+
+
+
++
+
++
+
++
+++
+
+
+
+
++
++++
+
+
+
++
+
++
+++
+
+++
++
+++
+
+
+
+++
++
+
+
+
+
++
++
+
+
+
+
+
+
++
+
+
+
+
+++
+
+
+
+
+
+
++
++
+
++
+
+
++
++
++++
+
++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
++
+
+
++
++
+
++
+
+
+
+
+
+
++
+
+
+
+
++
++
+
+
++
++
+
++
+
+
++
++
++
+
+
+++
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
++
+++
++
+
+
+
+
++
+
+
++
+
+
++
+
+
+
++++
+
+
++
++
+
+
++
+
++
+++
+++
+++
+
+
++
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
++
+
+
+
+
++
+
++
+
+
+ +
++
++
++
++
+
+
+
+
+
+
++
++
+
+
+++
+
+
+
+
+
++
+
+
+
++++
++
+
++
+
+
+
+
++
+
++++
++
+
+++
++
+
++
+
++
+
+++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+++
+++
+
+
+
++
+
+
+
+
+
+
++
++
+
++
+
+
+
+
+
++++
+
+ +
+
+
+
++
+
+
+
+
+
+
+
++++
+
+
+
+
+
++
+++
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
++
+
++
++
+
+
+
++
++
++
+
+
+
+
+
+
+
+
+
+
++
+
+ +
++
+
+
+
+
++
++
+
+
+
+
++
+
+
+
+++
+
++
+
+
+
++
+
+
+
+
++
+
+
+
+
++
++
+
+
+
+
++
+
+
+
+
+
+
++
++
+++ +
+
++
+
+
++
++
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
++
++++
+
+
+
+
+
+
+
+
+
++
+
+
+
+++
++
+
+
+
++
+
+
+++
++
+
+
++
+
+
+
++
+
+
+
+++
+
+
++
+
+
+
+
+
+
+
++
+++
++
+++
++
+
++
+
++
++++
+
+++
+
+
+
++++
+
+
++
+
+
+
+
++
+
+++
++
++
+
+
+
+
+
+
+
+
+
+
++
++
+
+
++
+
++
++ +
+
+
++
+
++
++
+
+
++
+
+
++
++++
+
++
+
++
+
+
+
++
++++
++
+
+
++
+
+
+++
+
+
+
++
+ ++
++
+
++
+
++
+
++++
+
++
++
+
+
+
+
++
+
++
++
+
+
++
+
+++
+
+
+
++++
+
+
+
+
+
+
++++
+
+
+
++
+
+++
+
+
+ +
+
++
+
+
+
+
++
+++++
++++ +
+
++
+
+
++
+
+
+
+
+
+
+
++
++
++
+
++
+
+
+
+
+
+
+++
+
+
++
+++ +
+ ++
+++
+
++
+
++
+
+
++
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+ ++
+
++
+
+
+
++
++
+
++
++
+
+
+
+
+++
+
+
+
++
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
++
++
+
+
+
+++
+
+
+
+
+
++
+
+
++
+
+
+
+
++
+
+
+
+
+
++
+++
+
+
+
+
+
++
+
+++
+
+
++
+
+
++
+
+ +
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
++
+
++
+
++
+
+
+++
+++
+
++
++
++
++
+
+
++
+++
+
+
+
++
+
++
+
++
+
++
++
+
+++ +
+
+ +
+
+
+
++
+
++
+
++
+
+
++
+
+
+
++
+
+
+
+
+
++
+
+
+
+
++
+
+
+
++
+
+
+
+
+++
+
+
+
+
+
+
+++
+
+
+
+
++
+
+
+
+
+
++
+
++
+
+
++
+
+
+
++
++ +
+
+
++
+++
+
++++
+
++
+
+++
+
+
+
+
++++
+
++
++
++
++
+
+
+ +
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+++
+
+
+
+
+
+++
+++
++
+
++
+
+
++++++
+
+
+
+
+
++++
+
+
+
++
++
+
+
+
+
+
++
+
+
+
+
++
+
++
+
+
+
++
+
+
++
++
+
+
+
+
+ +
+
++
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+++
++
+
+
++
++
+
+
+ +
++
+
++
+
+
++
+
+
+
++
+
++
+
+
+
++
+
+
+
+
+
+++
+
+
++
++
+
+
+
+++
+
+
+
++
+++
+
+
+++
+
++
+
+
+
+
+
+
+
++
++
+
++
+
+
+++
+
+
+
+
+
+
+
+++
+
++
+
+
+++
+
++
++
+++
+
+
+
+++
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+++
+
++
++
+
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
+
+
+
+++
+
+
+
+
+++
+
+
+
++
++
+++
+
+
+
+
+
+
++
+
+
+
++
+
+
+
++
++
++++
+
+
+
++
+
++
+
+
+
++++ +
+
+
++
+
++
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+++
+
+
+
++
+
++
+
+
++
+
+++
+
+
+
++
+
+
+
+++
+++
+
++
+
+
++ +
+
+
+
++
+
+
+++
+++
+
++
+
+
+
+++++
+
+
+++
++++
++
+++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+ +
++
++ +
+
+
+
+
++
++
+
+
+
++++
+
+++
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
++
+
+
+
+
++
++
+
+
+
+
+
++
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+++
+
++
++ +
++
+
+
+
+
++
+
+
++
+
+
+
+
+++
++
+
+ +
+
+
+
+
++
+
++
+
+
+++
+
+
++
+++
++
+
+
+
+
+
+
+
+++ ++
+++
+
+ +
+
+++
+
+++
+
+
++
+
+
+++
+
+
+++
++
+
+
+
+
+
+
+
+++
+
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++++
+
+
+
+
+
++
+
++
+
+
++++
++
+
+
++
+
++
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
++++
++
++
++
++
+ +
+
+
+
+
+
+
++
+
++++
++
+
+
++
++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
++
++
+
++
+
++
++
++
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+++
++
+
+
+
+
++++
+
+
+
+
++++
++
++
+
+
++
++
+
+
+
++
+
++
+++
+
+
+
+
+
+
+
+++++
+
+++++
++
++
+
++
++
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
++
++++
+++
++
+
+
++
+
+
+
++++
++
+
++
+
+
++
+
++
+
+ +
+
++
++
+
+
++
++
+
++
+
+
+
+
+
+
+
+
++
++
+
+++
+
+
+++
+
+
+
++
+
+
+
+
++++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+++
+
++
+
+
+
+
+
+
++
++++
+
+
+
++
+
++
+
+
++
+
+
+
++
+
+
++
++
+
+
+
+
++
+
+
+
+
+
+
++
+ +
+
+
+
+
++
++
+
++
++
+
+
++
+++
++
++
+
+
++
+
+
++
+
+ +
+
+
+++
+
+++
+
+
+
+
+
++
+
+++
+
+
+
+
+
++
+
+++
++
+
+++
++
+ ++
+
+
+
+
+ +
++
++
++
+
+
+
++
+
+
+++
+
+
+++
+
++
+
+++
+
+
+++
+
+
++
+
+
+
+
+
+++
+
++
+
++
++
+
++
+
+++
+
++
++++
+
+++
+
++
+
+
+
+++
+
+
++
+
+
+
+
+++
+
++
+
++
++
+++
++
+
+
+
+
++
+++
+
+
+
+
++
+
+
+
+
++++
+
+
+
+
++
+
++
+
+
+
+
+++
+
+
+
+
+
++
+
++
++
++
+
+
+
++
+
+
+
++++
+
+
+
+++
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
++
++
+++
+
++
+
+
+
+
+ +
+
+
+++
+
+
+
+
+
+++
+
+
+ +
++
+
++
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+++
+
+
+
+
+
+
++
+
+
+++
++
+
+
+
+
+
++++
+
+
+
++++
+
++
+
+
+
++
++
+++
+
++
++
+
+
+
++
++
+
+
+
+
+
+ ++
+
++
+
+
+
+
+
+
+++
+
+
+
+
++
+
+
+
+
+
+
+++
+
+
+
+
+
+
++
+
+
++
+
+
+
+++
+
+
+
+
++
++
+
+
+
+
++
++
+
+
+
+
+
++
+
+
+
++++
+++
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+++
+
++++
+
+
+
+
+
+
+
+
+++++
+
+
+
++
+
+
++
+
+
+++
+
++
+
+
+
+
++++
+
+
++
++
++
+
+
+
++
+
++
++
+
+
++
+
++
+
+
+
++
+
+
++++
+++
+
+
+
+
+
+
++
++
+
++
++
+
+
+
+
++
++
+
+
+
+ +
+
++
+++
++
+
+
+
+++
+
+++++
+
+
+
++
+
+
+
+
+
+
+
+
+
+++++
+
+
++
++++
+
+
+
+
+++
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+++
+
+
+
+
+
++
+
++
+
++
+
+
++ +
+
+
+
+
+
++
+
+
+++
++
+
+
+++
+
+
+
+
+++
+
+
++
+++
+
+
+
++
+
++
+
+
++
+
+
++
+
++
+
+
+
+
+
+
+
+
+++
+
+
++
+
+
+
+++
+
+
+
+
++
+
+
+
+
++
++
+
+
++
++ ++
+
+
+
+
++
++
+
+
++
+
+
++
+
+++
+
+ +
+
+
+
+
+
+
+
++++
++
++
++
+
+
+
++
+ ++
+
+
+
+
+
+
+
+++
+
+
+
+
++
+
+
+
+
+
++
+
+
++
+
+
++++
++
++
+
++++
+
+
++
+
+
++
+
+
+
+++
+
++
+
+
++++
+
+
+
++
++
+
++
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+++
+
++
+
+
+
++
+++
+
++++
+
++
+
+
+ +
++
++++
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
++
+
+++
+
+
+
+
+
+
+
+++
++
+
+
++
+
+
+
++
+
++
+
+
++
++
+
+
+
++
+
++
+
+
+
+++
+
++
+
+
++
+
++
++
+
+
++
++
++
+
+
+
+
+
+
+
+
+
++
++
++
+
++
++
+
++
++
+
+
+
+
+
+
++
+++
+
+
+
++
+
+
++
+
+
+
++
+
++
+++
++
+++
+
+
+
+
+
+
+
+
+
+++
+
++
++
+
+
+++
++
+
+++++++
+++
+
++ +
+
+
+++
+
+
+
++
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
++
+
+
++
+
+
+++
+
+
+ +
+
+
+++++
+
+
+
+
+
++
++
+
++
+
+
+
+
++++
++
+
+
+
+
+
++ +
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
++ ++
+
+
++
++ ++
+ +
+
+
+
+
++
+
++
+
+
+++
+
++
+
+
+
+
+
++
+
+
+++
+
+
++
++
+++
+++++
++
+
+++
++
+++
+
+
+
+
++
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+++
+
+
+
+
+ +
++++
+
+
++
+
++
+
+
+
+
+
+ +++
++
+
+
+
+
+
+
+
+
+
+
+ +
++
++
+
+
+
+
+
+
+
+++
+
+
+
+
+++
+
+
+
++
+++
+
+
+
++
+ +
+
+
+
+
+
+
+
+
+
++
+
+
++
++
+
+
++
+
++
+
++
+
++
+
+ ++
+
+
++
+
+
+
+
+++
+
++
+
+
+
+
+++
+
+
++
+
+
++
++
+
+
+++++
+
+
++
+
+
+
+++
+++
+
++
+
+++
+++++
++
++
+
+
++
+++
+
+
+
+
++
+
++
++
++
+
++
+
+
+++
++
+
+++
+
+
+
+
++
++
+
+
++
+
++
++++
+
+
+
++
++++
+
+
+
+
+
++
+
+
++
+
+
+
++
+
+
++
+
++++
+
++
+
+
+
+
++
+
+
+ +
++
++
+
++++
+
++
+
+
++
+
+ +
+
++
+
++
++
+
++
+
+
+
+
+
++++
+++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++++
+
+
+
+
+
+
++
+
+++
+
++
+++
+++
+
+
++
+
+
+
++
+
+
++
+
+
+
+
+
+
+++
+
++
+
+
+
+
+
++
+
++
+
+
+
+
+
++
+
+
+
++
+
++
++
++
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+++
+
++
+++
+
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
+
++
++
+
+++
+
++
+
+
++
+
+
+
+
+
++
+
+
++
+
++
+
+
++
++
+
+
+
+
++
+++
++++
+
+
+
+++
+
+
++
+
++
++
+
+
+
+++
+++
++
+
++
+
+
++
+
+
+
+
++
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+++
+
++
+
+
+
+++
++
+
+
+
+
+
+++
+
+
+
+++
++++
+
++
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+ ++
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+ +
+
++
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
++
++
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
++
+
+
+++
++
++
+
+++
+
++
+
+
+
++
+ +
+
+
+
+
+
+
+
+
+
++ ++
+
++
++
++
+
++
++
++
+++
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
++
+
+
++++
+
+
+
++
+
+
+
+++
+
+
+
+++
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+++
++
++
++
++
+
+
+
++
++
+
+
+
+
+
+
++
+
+
+
+
++
+
++
++
+
+
++
+
+
++
++++
+
+
+
+
+
+
+
++
++++++
+ +++
++
+
+++
+
+
+
++
++
+
++
++
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+++
+
+
++
+
+
++++++
+
++
+
+
++
+
++
+
+
+
+
++
+
++
+++
+
+
+
+
+
+
+
+++
+
++
+
++
+
+++++
+
++
+
++
+
+
++
+
+
+
+
+
+
+
+
+++
+
+
++
++++
++
++
+
+
+
++++
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+++
+
++
+
++++
+
+
+++
+
+
+
+
+
+
+
+
++
+
+
+
++ +
+
+++
++
+
+
+
+
+
++++
+
+++
+
+
++
++++
+++
+
+
+
+
+
+
+
+
+++
+
++
+
+ +
+++
+
+++
+
++
+
++
+
+
+++
++
++
++
++
+
+
++
+
++
++
+
+
+
++
+
++
+
+
++
+++
+++
+
++
+ +
+
+
+
+
++
+ +
++++
+
+
++
++
+
+
++
+ +
+
+++
++
+
+ +++
+
++
+
+
+
+
++
+
+
+
+
+
+
+++
+
++
+
+
+
+
+
++
+
+
+
+++
+
+
+
++++
+
++ ++
+
+
++
+
+
+++
+
+
+
+
++
+
+
+ +
+++
+
+
+
+
+
+
+
+
+
+
++
+++
+
+
++
+
+
++
+
+
+++
+
++
+
+
++
+
+
++
++
++
+
+++
+++
++
+
+
+
+
+
++++
+
+
++++
+++
++
+
+
+
+
++++
+++
++
++
++
+
++
+
+++
+++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
+
++
+
+
++
+
++
+
+
+++
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+ +
++
+
+
+
+
++
+
++++
++
+
+
+++
++
++
+
+
+
+
+
++
+
+++
+
+
+
++
++
++
+
+
+++
+
+
+ +++
+++
++
+
+
+
+
+
+
+++
+
++
+
++
+
+
+
+++
++
+
+
++
+
+
+
+++
+
+
++
+++
+
+++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++ +
+ +
+
+
+
+
++
+
++
+
+
+
+
++++
++
+
+
+
+
+
+
+
+
++
+++
+
+
+
++
+
+
+
+
+
+
++
+++
+
++
++
++
+ +
+
+
+
++++
+++
+
+
+
+++
+
+
++++
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+++++
+
+
++
++
++
+
+
+
+
+
+
+
+
+
+
+
+++
+
++
+++
+
+
+
++
+
++
+
+
+
++
+
+
+
+
+
++++
+
+
+
+
+
+
++
+
+
+++
+
+
+
+++
++
+
+++
+++++
+
+++
+
+
++
+
+++
+
+
++
+
+
+
+
+
+
+
+
++
++++++
+
+
+
+++
+
+
++
+
++
+
+
+
++
+ +
++
++
+
+
+
++
+
++
+
+++
+
++
+
+
+
+++++
+
++
+
++
+
+
+
++
+++
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
++
+
+
+
++++
++
+++++
+++
++
+
+
++
+
+
+++
+
+
+
++
+++
++
+
++
+
++
+
+
+
+
+
++
+
++
++
+
+
++++
++
++
+
++
+
+
+
+++
+
++
+
+++
+
+
+
++
+
++
+
+
+
+
+
+
+ +++
+
+
+
+
+
+
++
++
++
++
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+++
+
+
++++
++++
+
++
+
+
+
+
+
++
+
++
+
++
++
+
+
+
++
+
+
+
+
+
+++
++
+
+
+
++
+
+
++
+
+ +
++++
+
+
+++
++
++
++
+++
++
+
+
+
+ ++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
++
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+++++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+++
+
+
+
+
++
+
+
+++
+
+
+
++
++
+
+
+
+
+
++
+
+
+ +
+++
++
++
+
+
++
+
+
+
+
+
+++
++
+
+ ++
+
+
++
+
++
+
+
+
+
+
+
+++
+
+++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+
++
+
+
++
+
+
+
++
+
+
+
+
+
+
+
++
+
+
++
+
++
++
+
+
++++
+
++++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+++
++
++
+
+
+
+
+
++
++
++
+
+++
+
++
+
++
+
+
+ ++
+
+
+
+
+
+
++
++
++
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
++
++
+
+
+
++
+
+++
+
++
+
+
+
+++
+
+
+
+ ++
+
+
+
+
++
++++
++++
+++
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
++
++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+++++
+
+++
+
+
+
+++
++
++
++
+
+
++
+
+++
+
++
+
+ ++
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+++
+
+++
+
+
+
+++
+
+
+
++
++
++
++
+
++
+
+
+
+
+
+
+
++
+
+++
++
+
+
+
+
+
++
+ ++
+
+
+
+
+
+
+
+
++
+
+
+
++
+ +
++
+
+
+++
+
++++
+++
+
+
+
++
+
+
+
++++
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+++
++
+
+
+
+++
+
+
+
+
+
+
+
+
+++
+
+
+
+
+++
+
+
+
+
++
+
+
+
+
++
+
+++
+++
++
+
++
+
+
++
+
+++
+++
++
++
+
+
+
++
+
+
+
+
+
+++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+++
+
+
+++
++
+
+
+
+
+++
++
+
++
+
+
+
+
++
+
+
+
+
+
+++
+
+
+++
+
+
+++++
++++ +
+
+
++
+
+++ +
+
+++
+
++
+
+
++
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
++
+++
++
+
+
+
+
+
++
+
++
+
+
+
++
+
++
+
+
++
+
+
++
+
+
+++
+
+
+
++
+
+
+
+
+
++
++
++
+
+
+
++
+
++
+
+
+
++
++
+
++
+
+
+
+
++
++++
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+++
+
+
+++
+ +
++
+
+
+
+++
+
+
+
+
++
+
+++++
+
++
+
+
+
+
+
+
+++
+
++
+
+
+
++
+
+
++
++
+
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++ +
+
++
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
++
+
+
+
++
+
+
+
++
+
+
+
+
++
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+++
+
+
+
++
++
++
++++
+
+
+
++
+
+
+
+
++
++
+ ++ +
+
++
+
+
+
+
+
+
++
+
+
++
+
+
+
++++
+
+
+
+++
+
++
+
++
++
+
+
++
+
+
+++
+
++
+
+
+
+
+
+
+++
++
+
+
++++
+
+
+
+++
+
+
+
++
+
++
+
+
++
+
+
+
+
+
++++
+
+++
+++
+
++
+
+
++
+
+
+
++
+
++
+
+
+
+
+
++
+
++
+++
+
+
+
+
+
+
++
+
+
++
++
++
+
+
+
++
+
+
+++
+
++
++
+
+
++++
+
+
++
+
+
+
+
++
++
+
++
++
++
+++++
+
+
++
+
+
+
+
+
+
++++
+++++
+
++
+
+
+
++ +
++
+
+++ +
++
++
+
+
++
++
+
++
++
++
+++
+
+++
+
+
+
++
++
+++
+
+
+
+
++
++
+
++
++
++
+
+
+
+
+
++
++
+
+
+
+
+
+
+++
+
+
++
+
+
+
+
+++
+
+
+
+
++
+
+
++
+
++++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+++
+
+
+
++
+
+
++
++
+++
+
+
+
+
++
+
+
+++
+
+
+
+
++
+
+
++
+
+
+
+
++
+
+
+
+++
+
++++
+
+
+
+
+
+
+
++
+
+
+
+
+
+++
+
+
+
+
+
+
++++
+++
+
+
++
+++
+
+
+
+++
++++
+
+
+
+
++
+
+
++
++
+
+
+
+
+++
+
+
+
+++
+
+
+
+
+
++
+
+++
+
+
+
+++
+
++
+
+
+
+
+
++
+
+
+
+
++
+++ ++
+
+ ++
++
++
+
+
+
+
+ +++
++
+
+ +
+
+++++
+
+
++
+
+
+
+
+
++
+
+
+++
+
+
++
+++
+
+
+
+++
+
+
+
+
+++
+
++
++
+
++
+
+++ +
+
+
++
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
++
++
+++
+
+
+
++
+
+++ +
+++
+
+
+++
+
+
+
++
+
+
+
+++
+++
+
++
+
+
+
+++
++++
++
+
+
+
+
+++
+
+
++
++
+
+
++++
+
++
+
+
+++
+++
+
++
+
+
++
++
++
+
+++
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
++
+
+
++
+
++
+
++
+
+
+
+
+
+
+
++
+++
+
+
+
++
+
+
+
+
+++
+
+
+
+
+++
+
+
+
+
+
+
++
++
+++
++
++
++
+
+
++
++
+
++
+
++
+
+++
+
+
+
++
++
+
++
+
+
++
++
+
+
+
++
+
++
+++
+
+
++
+
+
+
++
+
+
++
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+++
++
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
++
++++
+
+
+
+
++
+
+
+++
+
+
+++
+++
+
++
++
+
++
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
++
+
+
+
+
++
+
+
++
+
++
++
++
+
+
+
+
+
+
+
+
+
+
+++ +
+++
+
+
+
+
+
+
+
+
++
++
+
+
+++
+
+
+
+
+
+
++
+
++
+
++
+
++
+
+
+
+
++
++
+
++
++++
++
+
+
+
++
++
+
+
+++
++
+
++
+
+
+
+
+
++
+
+
+
+
++
+
++
++
+
++
+
+++
+
++
+++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+ +
++
++
++
+++ +
+
+
+
+
+
+
++
+
+
+++
++
++++
+
+++
+
+
+
++
+
+++
+
+
++
+
++
+
+++++
+
+
+
+++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+++++
+
+
++
++
+
+
+
+
+
+
+
+
+
++
+
+++
+
++
++ ++
++
+
++
++
+
+
+
+
+
++
+
+
+
++
+
++
+
+
++
+++
++
+
+
++
++ +
+
+
+
+
+
++
+++
+
+
+++
+ +
+
++
+++
++
+
++
+
+
+
+
+
+
+++++
+
++
++
+
+++
+
++
+
+
+
+
+
+
++
+++
+
+
+
+
+
++
+
+
+
++
+
+
+
+
++
+
+
+++
+
+
+
++
+
++
+
+
+
+
+
+ ++
++
++
+
+
+
+
+
+
+
+
+++
+
+
+++
+
+
+
+
+
++
+
++
+
+
+
+
+
+
++
+
++
+
++
+
+
+
++
+
+
+
+
+
++
++++
+
++
+
+
+ +
+
+
+++
+
+
+
+
+
++ ++
+
++
+
+++
+
+
+
++
+
++
++ +
+
+
+
+
++++
++
++
+
++
+
+
+
+
+
+
+
+
+
+
++
++
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+++
+
+
+++
++
+ ++
++
+
+
+
++
+
++
++
+
++
+
++
+
+
+
++
+++ +
+
+
++
+
++
+
++
+
++
+++
+
+
++
+
++
+
++
+
+
+
+
+++ ++
++
+
++
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+++
++
+
+
+
+
+
+
+
++
++
+
+
+++++
++
+
+
+
+
++
+
+
+
+
++
+
+
+ +
+
+
++
+
+++
++
+
+
+
++
+
+
+
++
+
+
++
++
++
++++
++
+
++
+
+
+
+
+
+
+
+
+
+
+ ++
+
++++
++
+
+
+
+
+++
++
+
+
+
+++
++
+
+
+
+
+
+
++
+
++
++
+++
+
+
+
+
++
+
++
+++
+
++
+
+++
++
+
+
+++
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
++
++
+++
+
++
++
+
++
+
+++
+
+++
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
++
+
+
++
+
++
++
+
++
++
++
+++
+
+
++
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+++
++
++
+++
++++
+
+
+
+
+
+
+
+++
+
++
+
+
+
+
+
++
++++
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
++
++
++
+
+
+
+++
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+++
+
+++ ++
+
+++
+++
++
+
+
+++
+
+
+
+
+
+
+
+
+
+++
+
++
+
+
+++++
++
+
+
+ +
+
+
++
+
++
+
+
+
++++
+
+
+
+
+++
+
+
+
+
+
+
+
++
+
+
+
+
+
+++
+
+
+++
+++
++
+
+
+
++
++
++
+
++
+
+
+
++
++
+
+
++
+
+++
+
+
+
+
+++
+
++
+
+++
++
+
+
++
+
+
+
+++
+
+
+
++
+
++
+
++
+
+
+
++
++
+
++
+
+
++++
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+ +
+
++
+
+
++++
+
+++
++
+
+
+
+
+
+
+
+++
+
++
+
+
+
++++
+
+
+
+ +
+
+
++
+++
+++
+
+
+
+
+
+
+
++
+++
+
+
++
++
+
+
+
++
+
++
+
+
++
+
++
+
+
+
+
+
+
+
++
+
+
++++
+
+
+
+++
+
+++
++
+++
++
++
+
+
+
+
+++
+
+
+
+
+
+
+
+
++
++ +
+
+
+
+
+
+++
+
+++
+
+
+
++
+
+
+
+
+
+++
+++
+
+++
+
+
+
+
+
+
+
+
+
+
++
++
++
+
+
+
++
+
+
+
++
+
++
+
+
++
+
++
+
++
+
+
+
+
+
++
+
+
+++
+
+
++
+++
+
+++
+
+
++
+
+
+
++
++
+
+
+
+
+
++
+
+
+
++
+
+
+
+++
++
++
++
+
+
+
+
+
++
++
++
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+ +++
+
+
++
+
+
++
+
+
+
+++
+
+
+++
+
+
++
+
+
+
+
++
+
+
+
+
+
++
++
+
+
+
++
+
+
++
++
+
+++
+
+
++
++
+
++
+
+
++++
+ +
+
+
+
+
++
++
+
+
++
+
+
+++
+
+
+
+
+
++
+
++++
++
++
+
++
++
++
+
+
+
+
+
+ +++
+
+
++
++++
+
++
+
+
+
+
+
++++
+
+
++
+
+
++
++
++
+
++
+
+
+
+
+
++
+
+++
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++++
++
+
+
+
+
+
+
+
+
+
+
+++
++
++
+
++
++
++
+
+
+
++
+
++
+
+
++
+
+
+
+
+
+++
+
+
+
+
+
++
++
+
+
++
+
+
+++
+
++
+ +
++
++
+++
+
+
+
++
++
+
+
+
+++
+
+++
+++
+
+
++
++++
+++
+
+
+
+
+
+
++
+
++
+
+
+
+
+
++
+
+
++
+
+
+++++ +
+
++
+
+
+++
+
+
++
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
++
+ +
++++
+
++
+
++
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
++
+
++ ++
+
+
+
++
++
++
++
++
+
+
+ +
+
+
+
+
+
+
+
+
+
++
+++++++
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+ +
+
+
+
+
+
+
+++
+
+
+
+
++
+
++
++
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
++
+
+
+
+
+
+
++
+
+
+
+
++++
+
+
++
++
+++
+
+
+
+
+
+
+
+
+
+
+++
++
++
++
++
+
+++
+
+
+
++
+
+++
+
+
++
++
++++
++
+
+
+
+
+
+
+
+
+
+
++ +
+
+
++
++
+
+
+
+++++
+
++
+
+
+
+
+
+++
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+ +
+++
++
+
+ +++
+
+
+
+++
+
+
+
+
+
+
+
+++
+++
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
++++
+
+
+
+
+
+++
+
+++
+
+ +++
+
++
+++
+
+
+
+
+
+
+
++
++
+
+
+
+
+++
++
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
++
+++
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
+ +
+++
+
+
++
+
+
++
++++ +
+
+++
+
+
+
+
++
+
++
+
+
++
+++
+
+
+
++
+
++
+
+
+
+
+
++
+
++
++++
++
+
+
+
+
+
++
+
++++
+
++
+++
+++
++
+
+
+
+
+
+
+
+
++++
+
+
++
+
+
++
+
+
++
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+++
+
+
+
+
+
+
+
+
++++
++
+
+
+
+
+
+
+++
+++
+
++
+
+
+
+
+
+
+
+
+
+
++++
++
+
+
+
+
++
+++
+
++++
+
+
+
+++
+
+++
++
+
+
+
+++
+
+
+
++
++
++++
+
+++
++
+
+++
+
++
+
+
+
+
++
+
++
+
++
+
++
++
++
+
++
+
++
+
+
+
+
+
+
+
+
++
+++
+ +
++
++
+
++
+
++
+
+
+
++
+
+
++
+
++
+
++
+
++
+
++
++
+
++
+
++
+
+
++
++
+
+
+
++
++
+
+
++
+
+
+
++
+
++++
+
+
++
+
+
++++
+
+
+++++
+
++
+
+
+
+
++
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
++
++
++
++
++
++
+++++
+ +
+
+
+
+
+
+
+
+
++
+ ++
+
+
+
+
+++
+
++
+
+
+
++
+
+
+
+
+
+
++
++
+
++
+
++
+
+
+++
+
+
+
+
++
+
+
+
+
+
++
+
+
++
++
++
+
+
+
+
+
++++
++
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+
++
++
+
+
+
+
+++++++
+
+
+
+
+
+
+
++
++
++
+
+
+
+
+
+
++
+
+
+ +++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+++++
++
++
+
++++
+
+
+
+
++
++
+++
++
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+++
+
+++
+
++
+
+
++
+
+
+
++
++
+
+
+
+
++
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
++
+
++
+
+++
+
+
+
+
+
+
+
+
++
+
+
+
+++
+
+
+
+
+
+
++
++++ ++
+
+
+
+++
+
++
+
++
+
+
+
+++
++
+
+
++
+
++
+
+++
+
++
+
+ ++++
+
+
+
++
+
+
++
+++
++
+++
++
+
+
+
+
+
++
+
+
+
+
+
+++
+
++
+
++
++
+
+
+
+
++
+
+++++
+
+
+
+++
++
+
++
++
++
+
+
+++
+
+
+
+
+
+
+
++
+ +
+
++
+
+
++
++
++
+
++
+
+
+
++
++
+
++
+
+
+
+
+
++++
+
++
+
+
++
+
+
+
+
+
++
+
+
+++
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+++
+
+
+
+
+
++
+
+
+
+
++
+
++
+
+
+
++
+
+
+
+++
+
+
+
+
++
++
+
+
+
+
+++
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
++++
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
++
+
+
+++
+
++
+
+
++
+
+
++++
+
+
++
+
+
+
+
+
+
++
++
+++
+
+++
++
+
++
+
+
++
+
+
++
+
+
++
+
+
++
+
+
+
+
++
+++
++
+
+
+
+
++
+
+
+
++
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
++
+
+++
+
++
++
+
+
+++
+
++
++
+
++
+
+
++
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
++
++
+++
+
+
+
+++
+
+
+
+
+
++
+
+
+
+++
+
+
+
++++
+++++++
+
++
+
+
+
+
+
++
++
++
+
++
+
++
+
+
+
+
+
+
+
+++++++++
+
+
++
+
+
+
+
+
+
+
+
+++++
+++
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
++++
+
+
+
+
+
+
+
+
+
++
+
+
++
+
++
+
+
++
++
+++
+
+
+
+
+
+
++
+
++
++
+
+
++
++
+
++++
+
+
++
+
+
++
+
+
+
++
+
++
++
++
++
+
+
++
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
++
+
+
++
+
+
+
++++
++
+
++
+
+
++
++
+
++
+
+
+
+
+
+
+
++
+
++
++
++
+++
+
+
+
+
+
+
+
++
++
+
++
+
+
+
++
+
+
+
++
+
+++
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
++
+
++
++++ +
++
++
+++
+
+
+
+++
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
++++
++
++
+
+
++
+
+
++
++
++
+
+
+
+
+
+
+
+
++
++
+
+
+
+
++
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
++
+
+++
+
+
+
+
+++
+
+
+
+
+
+
++
++
+
++
+
+++
+
++
+
+
+
+
+++
+
++
++++++
+
+
+
++
++
++
+
+
+++
+
+++++
++
+
++
++
+
+
+
+
++
+
+++
+
+
++
+
+
+
+
+ +
+
+
+
++
++
+
+
+
+
++
+
+
+
++
++++
++
+++
+
+
+
+
+
++
+
+
+
+
+
+
++
++
+
+
+
+
++
++++
+
+
++
+
++
+
+
+
++
+
++
+
+++
+
+
+
++
+
++
+
+
++
+++
+
++
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
++
+
+
++
+
++
+
+
+
+
+++
+
++
++
+
++
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
++++
++ ++
++ +
+
+
++
+
+
++
++
+
++
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
++
++
++
++
+
+
++
+
+
+
++++++
++
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
++
++
+
+++
+
+
++
+
++
+
+
++
+
+
+
++
+
+++++++
++
+
+
+
++
++
+
+
+
+
+
+
++
++
+
+
++
+
+
++++
++++
+
+
+
+++
+
+
++
++
++
++
+
+
+
+
+
+
+
+++ ++
++
+
+
+
+
+
++
++
+
++
+++
+
+
+
++
+
+
++
+
+
++
+
+++
++
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
++++
+
++++
+
+
+
+
+
+
+
+++
++
+
+
+
+
+++++
++
+
+
+++
++
+
+
+++
++
+
+
+
+
+
++
++
++
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+++++
+
+++
+
++
+++
+
++
++++
++
+
+
++
+++
+
+++
+
+
+
++
+
+
+
+
+
++
+
+
+
+++++
+++
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+++
+
+
+
+
++
++++
+ ++
+
+
+
+++
++++
+
+
+
+
+
++
+
++
+
+
+++
+
+
+
+
+
+
++
+
+
+++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+++
+
+++
+
+
++
+++
+
+++
+
+
+
+
+
+
++
+
++
++
+
+
++
+
+
+
+
++
+
+
+
++
++
++
++
++
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
++++
+
+
++
+++
+++++
+
++
++
++
+
+
+
+
+
+
++
++
+
+
++
+
+
+
+
+ +
+++
+
++
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
++
+
++
+
+
+++
+
+++
++
+
+
+
+
++
+++
++
+
+
+
+
+
++
+++
+
++
++
+
+
+
+
++
+
+
+
+
+
++ ++
+++
+
+
+
+
+
+++
+
+
++
++
+
+
+
+
+
+
+
+++
+
+
+
++
++
+
+
+
+
++
+
+
+
+
++
++
+++
+
++
+
++
+
+
+
+
+++
++
+ +
+
+++
+
++
+
++
+
++
+
+++
++
+
++
+
+
+
+
+
+
+
++
+++
+
+
+
+
+
++
++
+ +++
+
+
+
++
+
+
+
+
++
+
+
+
+
+
++
+
+
++
++
+ +
+
++
++
+
+++
+
+
++
++
++
+
+
+
++
+
+
+
+
+++
++
+++
+
+
+
+
+++++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
++
++
+
+
+++
+++
+++
+
+
++
+
+
+
+++
+++
++
+
++
+
+
+
+
+
+
++
+++
++
+
+
+
+
++
++
+
+
+
+
+
++
+
++
+
++
+
+
+
+
+
+
++
+
++
++
+
+
+
+
+
+
+
+++
+
+
++++++
+
+
+++
+
++
+
++
+
+
+
+
+
++
+
++
+
+
+
+
++
+
+
+
+++
+
+
++
++
+
+
+
+
++
+
+
+++
+++
+
++++
+
+
++
+
+
+
+
++
++
+
+
+
++
+
+
+
+
+
+
++ +++
++
++++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+++
++
++
+
+
+
++
+
++
+
+
++
+
+
++++++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+++
+
+
+
+
+
++
+
++
+
++
+
++
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
++++
+
+
+
+
+
+
+
++++
+
++
+
+
+
+
+
+
+
+
+++
++
+
++
+
+
+
+
++
++++++
+
++
+
+
+
+
++
++++
++
+
++
+++
++
+
+
+++
++
+
+
++
+
++
++++
+
+
+
+
++
+
+
++
+
+
+++
+
+
+++
+
+
+
+
+
+
+
+++ +
+++
+++
+
+
++
++
++
+++
+
++
+
+
+
++
++
+
++
+
+
+
+
+
+
+
++
+
+
+
++
++
+
+
++++
+++
+
++
+
+
+
+
+
+
+
+ +
+
+
+
+
++++
+
+
+
+
+
+
+
+
+
+
++
++
++
+
+
+
+
+
+
+
+
+
+ +
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
+
+
++
+ ++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++++
+
+
+
++
+
++
+
++
+
+
++
+
+
+
+
+
+
+
++
+
+++
++
+
+
+
+
+
+
+
+++++
++ ++
++
+
++
+
+
+
+
+
+
++
+
+++
+
+ ++
+
+
+
++
++
+
++
+
+
+
+
+
+
+
+
+++++
+
++
+++
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+++
+
++
++
+
++
+
++
+
++
+
+
+
+
+++
+
+
++
+
+++
+++++
++++
+++
+
+
+
++
+
+++
+
++
+
+
+
+
+
+
+
+
++
++
+ +
++
+
+
+
+++
+
+++
+
+
+
+
++
+
+
+
++
+
++
+
+++
+++
++
+
+
+
++
+
+
++
++
+
++
+
++
++
++
+
+
+
+
+
++
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+++
+++
+
+
++
+
+
+
+
++
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
+++
+
+ +
++
+
+
+
+
++
+
+
+
+
+
++
+
+
++
++
+
+
++
+
+++
+
+
+
+
+
++
+
++++
++
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
++
+
++
++
++
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
++ +
+
+
+
+
+++
+
++
+ +
+
+
+
+
+
+
+
+
+
+
+
++++
+
++
++
+
+
+
+
++
+
+
+
++
+
+
++
+++
+
++
+
+
+
++
+
+
+
+
+
+
+++
+++
++
+
+
+
+
+
+
+
+
+
++
++++
+
+
+
+
++
+
+
+
++
++
+
+
+
++
+
++++
+
+
+
+
++
+
+
++
+
+
+++
++
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
++
+
++
+
+
+ ++
+
+
++
+
+
+
++
+
+
++
++
+
+
+
+ +
++
+
+
+++
+
++ ++++
+
+
+
+
+
++
+
+
+
++++
+ +
+
+
+
+
+
+
+
+++
+
++
+
+
+
+
++
++
+
+
+++++
+
+
++
+
+
++
++
+
+
++++
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
++
+ +
++
+
+
+
+
++
+++++
+
++
+
+
+
+
+
+
++
+
+
+
+
+++
++
+
+
+
+
+
+
+ +
++
++
+
+
+
++
+
++
+
+
+
++
+
+
+
+++
+++
+
++
+
+
+
++
+
+
+
+
+
+
+++
++
+++
+
++
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
++
+
+
+
+
+
++
++
+
++
+
+
+
++
+
+
+
+
++
+
+
++
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
++
+
+
+
++
++++
+
++
++
+
+
+
++
+
++++
+
+
+
+
+
++
++++
+
+
++
+++
+
++
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+++
+++
+
+
+
+
+
+
+
+
+
+
+++
+
+++
+
+
+
+
+
++
++
+
+
++
+
++
++
+
+
++
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
++
+
+
+++
++
+
+
+
+
+
+
++
+
+
+
+++
++
+
++
+
+
++
++
++
+
+
+
+++ +
+
+
+++
+++
+
++
+
+
+
++
+
+++
++ ++
+++
+
+
+
+
+
+
+
+++
+++
++
+++
++
+
+++
+
+
+
+
+
+
+
+
++
+
+
+
+
+ +
+
+
+
++
+
+
+
++
+
+
++
+
+
+
+
+
++
+++
+++
+
+
++
+
+
+
+++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
++
+
++
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+++
+
+
++++++
+
+
++
+
+
+
+
+
++
+
+
++ +
+
++
+++
+
+
+
++
+
+
+
+
++
+++
+
++
+
++
+
+
+
+
+
++
+
+
++
++
++
+
+
+
+
+++
+
+
+ +
++
+
++
++
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+++
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
++
+++
++
++
+
++
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
++
++
+++
+
+
+
+
+
+
+
+++
++++
+
++
+
++
+
+
+
++
+
++
+
+
++
+
+
+
+
+++
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
+
++
+++
+
+
+
+
+
++
++
+
++
+
+
+++
++
+
+
++
++
+
++
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+ +
++
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
++++
+
+
+
+
++++
+
+
++
+
+
+++
+
+
+
+++
+
+
++
+
+
+
+
+++
+++
++
+
+
+
+
+
++
+
+
+
+
++
+
+
++
++
+
++
+
+
+++
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+++
+
++
+
+
++
++
++++
+
+
+++
+
+
+
+
+++
+
+
+++
+
+
+++
+
++
+
+
++
+
+
+
+
++
+
+
+
++
+
+
+
+
+
++
++++
++
+
+
+
++
+
+
++
+++++
++
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+++
++
++
+
+
+
++
+++
+
+
+
+
++
+++
+
+
+++
+
+
+
++
+++
+
++
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+
++
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
++
+
+
+
+
++
+++
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
++
+ ++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++
++
++
+
+
+
+
+
+
++
+
++
+
+
+
++
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+++
+
+
+++
+
++
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+ +
+
+
+++
++
+
+
+++
+++
+
+
++
+
+
+
+
+
++
+
+
++
+
++
+
+
++
+
+
++
++
++
+
+
+
+
++
+++++
++
++
+
+
+++
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
++
+
++
+
+
+
+
++
+
+
+
+++
+++
+
+
+
+++
+
++++
++
++
+
+
+
++
+
++
+
++
+
++
+
+
+
+
++
+++
+++
+
++
+
+
+
+
+
+
++
+
+
+++
+++
+++
+ +
+
++
+++
++
+
+
+
+
++ +
+
+
+
+
+
+
+
+
++
+
+
+
+ +
+
++
+
+
+
+
+
+
+
+
+
+++
+
+
+
++
++
++
+
++++
+++
+
+
+
++
+
+
+
+
+
+
+++
+
+++
+
++
+
+
+
+
++
+
+
+
++
+
+
+
++
+
+
+++
+
+
+
++
+
+
+
++
++
++
+
+
+
+
+
+
+
+
+++
++
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
++
++
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
++
+
+
+
+
++
+
+
+
++++
++
+
+
+
+ +++
++
++
+
+
+
+
+
+
++
++
+
+
++
+
+
+
+
+++
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
++
+
+
+
++ ++ +
++
++
+
+
+++
+
+
+
++++
+
+
+++
++
+
++
+
++
+
+
+
++
+
+
+
++
+
++
++
+++
+
+
+ ++
++
++
+ +
+
+
++
+++
+
+
+
+
+++++
+++
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
++
+
+
++
+
+
+++
+
+
+
++
++
+
+
+
+
+
+
+++
+
+
+
++
++
+
+
++
+++
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
++
+
++
++
+
+
+++
+
++
+
+
+
+
++
+
++
++
++
+
++
++
+
++
++
+
+
+
+
+
++
+++
+
+
+
+
+
+ +++
++
+
+
++
+
++
+
+
+
+
+
+
+
+ ++
+
++
+
+
+
+
++
+++
+
+++
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
++
+
+++
+
+++
+
+
+
+
+
+
+
++
++++
+++
+++
+
+
+
+
+++
+
+
+++
+
++
+
+
+
+
+
+
+
+
+
+
++
+++
+
+
+
+
++++
+
+
++++
+
++
++
+
+
++
+
++
+
+
+
+
+
+
++
+
+
+
++
+
++
+
+
+++
+
++
+
+
++
++
+
+
+
+
+++
+
+
+
+++
++
+
+
++
+
+
+
+
+
+
+
++
+
+
++
+
+ ++
+
++ +
+
+
+
+
+
+++
++
++
+
++
++
+
+
+++
+
+
+
++
+
++
+
++
+++
+
+
+++
+++
++
+
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+++
++
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+++
+
+
+
+
++
+++
+
+
+++
+
+
++
++
++
+
+
+
+
+
+
++
+
++
+
+++
+
++
+
+
+
++
+++
+++
++
+
+
+
++
+
++
++
++
+
++
+
+
+
+
+
+
++
+
+
+
+
+
++
++++
+
+
+
+
++
+
+
++
+
++
++
+
++
++
++
+
+
++
+
+
+++
+
+
+++
+
+
+
++
++
+
+
+
+
++
+++
+
++
++++
+
+
+
+
+
+
+
++
+++
+
++
+
+
+
+
++
++
+
+
+
++
++
++
+
+
++
+
+
+
+
+
+++
+
+
+
+
+
+
++
+++
++
+
+
+
++
+
+
+
++
+
++
++
+
+
+
+
+
+
+
+
++
+
+
+
+++
+
++
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
++
++
+
++
+
+
+
+
+
+
+++
+
+++
+
+
+
+++
+
+
+++
++
++
+
++
+
+
+
+
++
++
+
+
+
++
++
+
++
+ ++
+
+
+
++
+
+ ++
++
+
+
++
++
+
+++
+
+
+
+
++
+
+
++
+
+
+
+++
+
++
+
+
+
+
+
+
+
+ +
+
+++
+
+
++
+
+++
+
+++
+
+
+
++
+ +
+
+
+
+
+
+++
+
++ ++
+
+
+
+
+
+
++ +
+ +
++
+
+
++
+
+
+
+
+
++
++
+
+
+
+
+
++
+
+
+
++
++
+++
++
+
++
+++
+
+
++
+
+
+
+++
+
+
+
+
++
+
+
++
+
+++
+
+
+
++
++
+
++++
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +++
+ +
+
++
++
++
+
+
+
+
++
+
++
++
+
++
+
+
+
+ +
+
+++
+
+
+
+
++
+
+
++
+++
+ +
+
+
++
+
++++
+
++
++
+
+++
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
++ ++
+
+
+
+
+
+++
+
+
+
+
+
+
++++
++
+
++
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
++
+
++
+++
+
+
+
+
+
+
+
++
+
++
+
+
++
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+++
++
+
+
+
++
+++
+
++
+
+
+
+
++
++++
++
+
+++
++
+ ++
+ +
+
+
+
+
++
+
+
+
+
+
+
+
++++
++
+
+
+
+
++
+
+
++
++
+
+
+
+++
+
+
+++ ++
+
+
++
+
+
+
+++++
++
+
++
+
+
++
+
+
+
+
++
++++
+
+
+
+
+
+
++++
+
+
+
+
++++
+
+
+
+
++
+
++
+
++
+
+
+
++
++
+
++
+
+
+
+
++
+
+
+
++++
++
+
+
+
+
++
+
+
++
+
+
+++
+
+
+
+
+
++
+
++
++
+
+
++
++
+
++++
++
+
++
++
++++
+
+
+
++
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+++
++
+
+
+++
+++
+
+
++
+
+
+
+
+
+
++
+
++
+++
++
+
+
++++
+
+
++
+
+
++
+
+++
++
+
++
+
++
++
++
+
+
+
+
+
+
++
++
+
+
++
+
+
+
+
+
+
+
+
+++
+++
+
+++
++++
+
+
++
++
+
+
+
+
+
+
+
++
++
+
+
+++
+
+++
+
+
+
+
++
+
+
++
+
++
++
+
+
+
+
++++
+
+
+
+
+
+
+
+
+
+
+
+ +
+
++
+
+
+
+
++
+
++
+
+
+
+
++
+
+
+
+
+++
+
+
+
+
+
+
+
+
++
++
+
++ +
+
+
+
+
++
+++
+
+
+
+
+
+
+++
+
++
+
+
+
+
++
+
+
++
+++
++
++
++
+
+
+++
+
+
+++
+++
+ +
+
+
++++
++
++
+
++
+
++
+
++ +
+
++
+
++
+
+++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+++
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+++
+
++
+
+
++
++
+
+
++
+
+
+
++
++++
++
+
+
++++
+
+
+++
++
++
+
+ ++
+
+
+
++
++
+
+
++++
++ ++
+
+
+
++
+ +++ +
+
+
+
+
+
+
++
+
+++
+
++++
+
+
++
++
+
++
++
+
+
+
+
+
+
+
++++
++
+
+
+
+
+
+
+
+
++
+ +
+
+
+
++
+++
+++
+
++++
+
+
+
+
+
+++
++
+
+
+ ++
+
+
+
+
++
+
++
++
+
+
+
+
++
+
++
++++
+
+
+++
++
+
+
++
+
++
+
+
+
+++
+
+
+
+
+
++
+
+
+
+
+
+
+ ++
+
++
++
++
++
+
+
+
+
++
++ +
+
+
+
+
+
+
+
+
++
+++
++
+
+
++
+
+
++
+
++
+
+++
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
++
+
++
+
+
++
+
++
+
+
+
+
+
+
+
+
+++
+
++
+
+
+
+
++
+++
++++ +
+++
+
+
+
+
+
+
+
+
+++
+
++++
+++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+++
++
+++
+
+
++
+
+
+
++
++
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
++
+
+
+
++
++
+
+
+++
+
++
+
+++
+
+++
+
++
+
+
+
++
+
+ +++
+
+
++
+
+
++
+
++
+
+
+++
+
+
+
+
+
+++
++
+
+
+
++
+
+
++
+++++
+
++
+
+
+
+++
+
+
+++
++
+
+
++
+
++
+
+
++
+
+
+
++
++
+
+
+
+
++
++
++
+
++
+
+
+
+
++
+++
++
+
+++
+
+
+
+
+
++
+
++
+
+
++
+
++
++
++
+
+
+
+
+
+
+
+ +
+++
+
+
++
+
+
+
+
++++
+
++
+
+
+
+
+
+
+
+
+
++
+
+++
+
+
+
++
+
++
++
++
+
+
+++
+
+
+
+
++
+
+
+++
+
++
+
++
+
+
++
+
+++
++
+
++
+ ++
+
+
+
+
+
+
++
+++ +
++
++
++++
+
+
++
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
++
++
+
++
+
++++
+
+
+
+
++
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
++
+
+
++
+
+
+
+
+
++
+
++
++
+++
+
+
++
+
+++
+++
+
+
+
+
++
+
+
++
+
+
+
+
+++
+++
++
+
++++++++
+
+
+++
+
++
+
+
+
++
++
++
++++
+
+
+
++
+
+
+
+
+
++
+
++
+
+
++
+
+
+
+
+++
+
+
++
++
++
+
+
++
+
+
+
+
+++
++++
+++
+
+++
++
+
+++
+
+
+++
++
+
+
+
+
+
++
++++
++
+
+
+
++
+
+
++
+
+
+
+
+
++++
+
++
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+++
+
++
++
+++
+
++
+
++
++++
++++
+
++
+
+
++
++
+
++
+
+
++
++
+
+
++
++
+
+
+
++
+
+
+
++
++
+
+
+
++
+
++
+
+
+
++
+
++
+
+
+
+
+
+
+
+
++
++
+
+
+
+ +
+
+
+
+ ++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
++
+
+
+
+
+
++
+
++
+
+
+
++
+
+
+
+
+
++
+
+
+
++
+
+
++++
+
+
++++
+
+
+++
+
+
+
+
+
++
+++
+
+
+
+
+
+
+
+
+
+
+
++++ +
+
++
+
++
+++
+
++
+
+
+++
++
++
++
+
+
+
+
+
+
++
+
+++
+
+++
+
+
+
+
++
+
++
++++
+
+
++
+
+++
+
++
++
+
+
+++
++
+
+
+
+
++
+
+
++
+
+++
+
++
+++
+
+
+
++
+
+
+
++
++
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+++
++
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
++
+
++
+
+
++
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
++
++
++++
+++
+
+
++
+
+
+
++
+
+
+
+
++++
++
+
+
+
+
++++
++
+
+
+
++
+
+
+
+
+
+
+++
++++
+
++
+
+
++
+
++
+
+
+
+
+
++
++
+
+
+
++
++
+
+
++
+
+
+
++
++
+
+
+
++
++
+
+
+
+
+
+
+
++
+
+
++
+++
+
+
+
+
++
+++
+
+
+
+
+
+
+
+
++
+
++
++++
+++
+ +
+
++
+
+
+
++
+
++
++
+++
++
+
++ ++++
+
+
+
+
++
+++
+++
+
+
+
+
+
+
+
++
+
+
++
+
+
++
++
+++
++
+
+
+
++
+
+
+
+
+
+
+
++
+
+++
++
+
++
+
+
++
+
++
+
++
++
++
++
+
+
++
+
+
++
++
+
+
+
+
+
++
+
+
++
++
+
+
++
+
+
+
+++
+
+
+++
+
+
+
++
+
++++
++
+
+
+
+
+
+
+
++
+
+++++
+
+++
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
++
++
+
+
+
+
++
+ ++
++
+
++
+
+
+
+
+
+++++
++
+++
+
+
++
+
+++++
++
+
+
++
+
++++
+
+
+
+
++
+
++++
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
++
+
+
+
+
+
+
+
+++
++
+
+
+
+ ++
+
+
++
+
+
++
+
++
+
+
+ ++
+
++
+
+++
++
+++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+++
++++
+
+
+
+++
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
++++
+
++
+++++
+
++
+
++
+
+++++
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+
++
++
+ +
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+++
++
+
+++++
+
+
+
++
+
++
++
+
++
+
+
+
+
+
+
+
+
+
++
++
+
++
+
+
+
++
+
++
+
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
++
++
++
+
+
+
++
+
+
++
+
+
++++++
++
+
++
+
+
+++
+++
++
+
+
++++ +
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
++
+
+
+
++
++
+++
+
+
+
+
++
+
++
++
++
+
+
+
+++
+
+
++++
+
+
+
+
+
++
+
+
++
++
++
+
+
++++
+
+
+
+++
+++
+
+
+
+
+
+
++
+
++
++++++
+
+
+
+
+
+
+
+
+
+
+
+
+
++++
+
+
+
+
+
+
+
+
+++
+++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+++
++
+
+
+
+
+
+
++
+
++ ++
+
+
+
+
++
+
++
++
++
+
+
++
+
++
+
+
++
++
+
+
+
+
+
+
++
+
+++
++
+
+++
+
+
+
++
+
+++
+
+
++
+
++
+
++
+
+
++
+
+
+
+
+
++
+
++
++
++
++++
+
+
++
+++
++
+
++
+
+
+
+
+
+
+
+
++
+
++
++
++
++
++
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+++
++
++++
+
++
++
++
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
++
+
+
++
+
+
+
+
++
++
++
+++
+
+
+
+
+
++
+
+
+
+++
++ +
+
+
+++ +
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+ ++
+
+
+
+
+
++
+
+
+
++
+
+
++
+
+
++
+
+
+
+
+
+
++++
+
+
+
+
++ +
++
+++
++
+
++
+
+
++
+
++
+
+
++
+
+
++
+
++
++
+
+
++
++
+
++
+
++
+
++
+++
+
++
++
+
+ +
+
+
+
+
++
+
+
+
++
+
+
+
++
+
+
++
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
++++
+
+
+
+
+
+++++++
+
+
++
+
+
+++
++++
+
+
+
+
++
++++
++
+
+
+
+
++
+
+
+
++
+
+
++
+
+
+
+
+
+
++
++
++
+
+
++
+
+
++
+
++
+
+
+
+
+
+++
+
+
+
+
++
+
+
+
+
+
++
+
+
++
++
+ +
+
+
++
+
+
+
++
++
+
++
+++
+
+
+
+
+
+++
+
++
+++
+
+
+
+
+
+
+
+
+
+ +++
+
+
++
++ +
+
++
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+
++
++
++
+
++
+
+
+
+
+
+
++
+
+
+
+++
+
+
+ ++ +
++
+
+
+
+ +
+
+++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+++
+++
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
+++++
++
+ +
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
+
+
+
+
++
+
++
+
+
++
+
++
+
++
+
++
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
++
+
++
+
+
+++++
+
++
+
+
+
+
+
+
+
+
+
++
+++ ++++
+
+
++
+
+
+
++
+
+
+
++
+
++
+++
+++
++++
+
++
+
+
+
++
++
++
+
++
+
+
+
+
+
++
+
++
+
+
+++
+
+
+
+
+
+
+
+ +
++ +
+
++
+
+
+
+
+++
+
+
+
+
+++
++
+
+
+
+ +
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+++++
+
+
++
+
++
+
++
+
+
++
++
++
+ +
+
++
++
+
+
++
+
+
+
++++
+
++
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
++ +
+
+
+
++
++
++
++
++
++
+++
+
+
+
+
++
+
+
+
+
++
+
++++
++
+
++
+++
+
+
+
++
+
+
+
+
+
+
+
+++
++
+
++
+
+++
++
+
++++
+
++
+
++
++
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+++
+
+
+
+
++
++
+
+
++
++
++++
+
+
+
++
+
++
++
++
+
+
++
+
+
+
+
++
+
++
+++
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
++
++
+
++
+
+
+
+
++
+++
+
+
+
+
+
++
+
+
+
++
+++
++
+
+
+
+
+
++
+
++
+++
++
+
+
++
+
+
+
+
+
++
+++
+
++
+
++
+
++++
+
+
++
+
+
+
+
+
+
++
++
+ +
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
++
+
++
+
+
+
++
+
++
+++
++
+
++
+
+
++
++
++
+
+
+
+++
+
+++
++
+
++ ++
+
+
+
+
+
+
++
+
+
+
++
+
+++
+
++
+
+
+
++
+
+
+++
+
+
+
++
+
+
+
+
+
++++
+
+++
+
+
+
+++
+
+
++
++
++
+
+
++
+
+
+
++
+++
+
++
+
+
++
+
+
+
++
+
++
+
+
+
++
+
+++
+
+
+
+++
+
+++
+++
+
++
+
++
++
+++
++
+
+
++
++
++
+
++
+
+
++
++
+
+
+
++
+
+
+
+
+
+
++
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+++
+
+
+
+
++++
+
+
+
+
+
+
+
+
+
++
+
+
++
+
++
+
++
+
+
+ +
+
++
+
+
+
+
+
+++
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+
++
++
++
+
+
++
++++
+
+
+
++
+
++
+
++++
+
++
+
+
++
+
+
++
++
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
++
+
+
+ +
+
+
+
+++
+
+
++
+
++
+
++
+
++
+
+
++
+
+
+
++
++
+
++
+
++
+
+
++
++
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+ +
++
+++
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+++
+++
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
++
+
++
++ +
+
+
++
+
+++++
++
+
++
+
+
++
+
+
+
+
+
+
++
+
+
+
++
+++
+ ++
++
+
+
+
+
+
++
++++
+
+
++
+
+
+++
+
+
++
+++
+
++++
+
++++
+
+
++
++
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+++
+++
+
++
+
+
+
+
++
+
++
+
+++
+
+
++
+
+
++
+
++
++
++
+
+
+
+
++
++
+
+
+
+
+
+
+
++++
+
++
+
+
++
+
++
++
+++
+++
+
+
++
+
+
+
+++
+
+
+
+
++
+
+
+
++
+
+
+
+++
+
+
+
+
+
+++
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
++
+++
+
+
+
+
++
+
+
++
+
++
+
+
+
+
++
+
+
+
+
++
++
+
+
+++
+
+
++
+
+
+
+
++
+++
+
+
+
+
++
+
+
++
++
+
++
+
+
+
+
+
+
+
+
+
+
+
++++
+
+
+
++
+
+
+
++
++++++++
+
+
++
+++
+
+
++
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
++
+
+
+
++
++
+
+
++
+
+
+
+
++
+
+
+
++
+
+++
+
+
+
+
+
++
++
+
++
+
+
+
+
+
+
+
+
++
+
+
+
++++
+
++
+
++
++
+
++
+
+
+
+
+
+
++
++
+
+
++
++
+
+
+
+
+
++++
+
++
+
+
+
+
++
++
+
+
+
++
+
+
+++
+
+
+
+
++++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+++
+
++
++
+
+
++
++
+
++
+
+
+
+
+
++
+
+++
++
+
+
+
+
++++
++
+
+
++
+
+
+
+
++
+
+
++
++
+
+
+
++ ++
+
+
+
+
+
+++
+
++ ++
+
++
+++
+
++
+
++
++
++
++
+
+
+
+
+
+
++
++
++
+
+
++
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+++
+
+ +
+
+
+
+
+
+
+
+
+++++
+
+++
+
++
+
++
+
+
+++
+
+
+
+++
++
+
+++
+
+
+
++
+
++++
+
+
+
+
+
+
+
+
+
+
+
+++++
++
+
+
+
+
+
+
++
+
++
+
++
+++++
+
+
++
++
++
+
++
++
+
++
+
++
+
+
+
+
+
+
+
+
+
+++
++
++
++
++
+
+
+
+
+++
+++
+ ++
+
+
+
+
++
+++
+
+
+
+
+
+++
+++
+
+
+
+
++
+++
+++
+
++++
+
+
+
+
+
+
+
+
++
++
++
++
+
+
+
+
+
++
+
+
+
+++
+
+++
++
+
+
+
++
+++
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++++
+
+
+
+
+
+
++
+
+++
+
+
+
+
+
+++++
++++
+
+
+
++
+
+
+
+
++
++
+
+
+
+
+++
+ +
+
++
+
+
++
+++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
++++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
++
+
+++++
+
+
+
+
+
+
+
++
+
+++
+
+
+
+
+
+++
++
+
+++
+
++++
+
+
+
+
+
+
+
+++
++
++
++
+
+
+
++
+
+
+
++
++
+
+
+++
+
++
+
+
+
+
++
+
+++
++
+
+
+
++
+
+
+
++
++++++
+
+
+++
++++
+
+
+
+
+++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
++
+++
+++
+
+
+
+
++
++
++
+
+
+
+
+
++
+
+
++
++
++
+
+
+
++
++
+
+
++
+
+
++++
++
++
+
+
+++
++
+
+
++
+
++
++
+
+
+
+
++
+
+
+
+
+
++
++
+
+
+
+
++
++
+
+
+
++
+ +
+
+
+++
+
+
+
++
+
+++
+
+++
+
+++
++
+
+
+
+++
+
++++
+
+
+
+
++
++++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+ +
+
+
+
+
+
++
+
+
++
+
++
+
+
+
+
+
++
+
+
+++
++++
+
+
++
+
+
+
+
+
+
++
+++
+
+
+
+ +
+
+
+ +++
+
+
+
+++
+
++
+
+
++
++
+
+
+
+
++
+
+
+
+++
+
+
+++
+++
+
+
+
+
+
+
+++
+
+
+
+
+
+
+++
+
+
+
+
+
++
+
+
++
+
+
++
+
+
++
+
+
+
+
+
+
++++++
+
+
+
+++++
++
++
+
+
+
+
+
+
++
+
++
++
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
++
+
+
++
+++
+++
++
+
+
++
++
+
+
+
+
+
++
+
+
+
+++
+
+
+++
+
+
+
++
+
+
+
++
+
+
+
+
++++
+
+
+
+
++++
+
+
++
+++++
++
++
+
+
++
+
+
+
+
+
+
+++
+
++
++
+
+
+
++
+ +
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
++++
++ ++
+
++++
+
+
+
+
++
+
+
++
+
+
+
+
+
++
+++
+
++++
+
+
+
+
++
+
+
++
+
+
++
+
+
+
+
+++
+
+
+
+
++
++
+
+
++
+
+
+
+
+
+
+
+
++
+
+ +
++
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+++
+
+
+
++
+
++
+
+
+
+
+
+
++
++
+++
+++
++
+
+
++
++
+
+
+
+
+
++
+
++
++
+
+
+
++
+
+
+
+
+
+++
++
++
++
+
+++
+
+
+++
+
+
+
+
++
+
+
++
+
+++
+
+++
+
++
+
+
+
++
+
+
+
++
+
+
+
+
+
+
++
+
++
++
+
+
+
+
++
+
+
++
+
+
+
+++
+++
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
++
+
++
+
+
+
+
+++
+
+
+
++
++
+
++
+
+ +
+
+
+
++
++
++
+
++
++
+
+
+
+
+
+
+
++
+
++
++
+
+++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
++
+
+
+++++
+
+
++
++
+
+
+
+
+
++
+++
++
+
++
++
+
+
++
+
+
+
++++
+
+
++
+
++
++
+
+
+
+
+
++
++
+
++
+
++
+
++
+
+
+
++
+
+
+
++++
+
+
++
+++
++
+
+
+
+
+
+
++
++++
++
+
++
+
+ ++
++
++
++
++
+
++
++
+++
+
++
+
++
++
+
+
+
+
+
+
+
+
++
+++
+
+
+
+
+
++
+
+
++++
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
++
++
++
+
+
+
++++
+
++
+ +
+
+
+
+
+
++
+
++ +
+
+
+
+
++++
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
++
+++
+
++
+
+
+
+++
+++
+
++
+
+
+
+
++
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
++
++
++
+++
+
+
+
+++
++
+
++++
++
++
+
+
+
+
+
+++
+
+
+
+
+ +
+
+
+++
+++
+
+
+
++ +
+
+
+
++
+
+
+
+
+
++ ++
++
+ +
+++++
++
+
+
+
+
++
+
+
+++
+
+
+
++
+
+
+++
+
++
+
+++
++
+
++
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
++
++
+
+
+
+ +
+
+
++
+
+++++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++++
++
+
+
+
++
++
+
+
+
+
+
++
+
+
++++
+
+
+++++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+++
+
+
++
+
+
+
++
++
+
+
+
+
+
+
++++
+
+
+
+
+ +
+
+++
+
+
++
+
+
+
+
+++
++
+
++
+
+
+
+++
+
+
+
+
++
++
+
+
+
++
+
+
++
+
+
+++
+
++
++
++
+
++ ++
++
+
++
+
++
+
+
+
+
++
+
+
+
+
++
+
+
++++
+
+
++
+
+
+++++
+
+++
+
+
++
+
+++
+
+
++
+
+
+
+
+
+
+++
+
++
+
++++
+
+++
+
+
+
++
+
+
++
+
+
+
+
+
++
+
+
++
+
++
++
++
++
++
+
+
+
+
++
+
++
+
+
+
++
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
++
++
+
+++
+
++
+
+
++
+
+
+
+
+
++
++
++
+
+
+
+
+
++
+
+
+
++
+++
++
+
++
+
++
+
++
+
++
+
+
+
+
+++
+
+
+
+
++
+
+ +
++
+++
+
+
+
++
+
+ +
+++
++
+
+
+
+
++
+
+
+
++
+
+
+
++
+
+
+
++
+
+
++++
+
++
+
++
+
+
+
+
+
+
++
+++
+++
++
+
++
+
+
+
+
+
++
+
+
+++
+
+
++
+
+
++
+
+++
+ +
+
+
+
++
+
+
++
+
+
++
+++
+
++++
+
+
+
+++
++
+
++
+
+
++
+
++
++
+
+
+
++
+++
+
++
+
+
++
+
+++
++++
++ +++
+
+
+
+
+++++
+
+
+
+
+
+
+
++
++
++
+
+
+
+
+
+
+
++
++
+
++
+
+
+
+
+
+
+
++
+
+
+
+
++
++ +
+
+
+
+
+
+ +
+
++++
+
+
+
++
+
+
++
+
+
+
+
++
+
++
+
++
+
+
+
+
+
+
+
+
++
++
+
+
+++++
++
+
++
+
+
+
+
+
+
+
+
+
+
++
+
++
++
++
+
++
+
+
+
++
+
+
+
++
+
+++
+
+
+
+++++
+
+
++
++
+
+
+
+
+
+
++
+++
+
+
+
++ +
+
++
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+ +
+
+
+
+
+
++++
+
+
+
+
+
+++
+
+
+
+
+
++
++
+
+
+
+
++
+
++
+
++
++
+
++
+
+++++
+
+
+
+
++
+
+
+
++
++
++
+
+++
++
++
++
+
+
+
+
+
+
+
+++
++++
+
+
++
+++++
+
+
+++
++
+
+
++
+++
+
+
+
+
+
+++
++
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
++
+
+++ +
+
+
+
++
+++
+
++++
+
+
+
+
+
+
+
+ +
+
++
+
+
++
++
+
+
+
+
+
+
+
+
+ +
+
++
+
++
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+++
+
+
+
+
+
+
++
+++
++
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
++
++
+
+++
+
++
+
+
+
++
+
++
+
+++
++++
+
+
++
+
++
+
+
+
++
+
++
++
+ ++
+
+
+++
+
+
+++
++++
+
+
++
++
+
+
++
+
++
++
++
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
++ +
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+++
++
++
+
++
+
++
+
+++ +
++
+
+
++
+
+
+
+
+
++
++
++
+
+ +
+
+
+
+
+
++
+
+++
+
+
+
+
+
+
++
+
+
+
+
+ +
++
+
+
++
+
+
+
+
+
+
+
++
+
+
++
+
+
+++
+
+
+++
+++
++ ++
+
++++
+
++
+
++
+
+
+
++
++
++
+
+
+
+
++
++
++
+
++
++
+
+
+
+
++
+
+
+
++
+
+
+
++
+
+
+
+
++
+
+
+
++
++
++
++
+
+
+
+
+
+
+
++
+
+
+++
+
++
+
+
++
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
+++
+++
+
+
+
+
++
+
+
+
++
++
+
+
+
+++
+
++
+
+
+
+
+
+++
++
++
+
++
++
+
+
+
+
+
++
++
+
+++
+
+++
+
+ +
+ +
++
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
++
++
+
++
+
+
+++
++
++++
+
+
++
++
+
+
+
++
+
++
+
++
++
+
+
+
+
+
+
+
+
+
+
++
++
++
++
+
+
+
+
+
+++
++
++
++
+
+
++++
+
+ +
+
+ +
+
+
+
++++
+
+
+
+
+
+
+
++
+
++
++
+++
+
+++
+++
+
++
++
++
+
+
++
+
+++
+
+
+
+
+
+
++
+
+
+
+
+ +
+
+
+
+
+
+
+
+++
++
+
++
+
+
+
+
+++
+
+
+
+++
+
+
+
++
+
+
+
+
+
++
++
++
+++++
+
+++
+
+
++
+
++
+++
++ +
++
+
++
+
++
+
+ +++
+
+
+
+
+
+++
++
+
+
+
+
+
+++
+
+
+
+
+
+++
+
++
+
+
+
++ +
+
+++
+
+
++
+
+
+
+
++
+
+
++
++
+
+
++
+
++
+
++
+
+
++++
++
+
+
+
++
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
++
++
+
+
+
++
+
++
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
++++
+++
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+++
+
+
++
++++
+
++
++
+
+
+
+
+
+ ++
++
++
++
+
+
++
+
+
++
+
+
+
+
+
++
+
+
+ ++
++
++
+
++
++
+
+
+
+
+
+
+
+
+
+
+
++
++++
+
+
++
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++++
+
+ +
+
+
++
+
++
+
+
+
++
++
+++
+
+++
+
+++
++
+
+++
+
+
+
+
+
+
+++
+
++
++
+++
+
++
+
++
+
++
++
+
++
+
+
+
+
++
+
+
+
+
+
++
++
+
++
+
+
+ ++
+
+
+
+
+
+
++
+
++
++
++
+
+
+
+
+
++
+
+++
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+++++
++
+
+
+
++
+
++
++
++
+
+
+++
+
+
++
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
++
+
++
+
+++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+++
+
+
+
+
+ +
+
+
+
++
+
+
+
+
++
++
+
+
+ +
+
+
+
+
++
+
+
+
++
++
+
+++
+
+
+
+
+
+
+
+
+
+
++
+++
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
++
++
+
+
++
+
+
+
+
++++
+++
+
++
+
+
++
+
+
+
+
++++
++
+
+++
++
++
+ +
+
+
+++++
+
+
+
+
+
+++
+
++
+++
+
+
+
+
++
+
+
++
++
+
+
+
+
+
+++
+
+
+
+
++++ ++
+
+
++
+
+
+
+
+
+
+
+
+
+++
++
+
+
++
++
+
+
++
+
+
+
+
+
+++
+
++
+
++
++
+
+
+ +
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+++
++
++
+
+
+
++
+++
+ +
+
+
++
++
++
+++
+
++
+
++
++
++
++++
+
+
+
+
+
+
+
+
+
+
+
+++
++
+
++
+
+
+
++
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++++
+
++
+
+
+
+
++
+
++
+
+
+
+
++++
+
++
++
+++
++++
+
+
+
++
++
+
+
++
+
+
+
+
+
++
+
++
+++++
+
+ +
+
+
+++
+
++
++
+
+
++
+
++
+
+
++
+++
++
+
+
+
++
+
+
++
++
+++
++
++
++++
+
+
++
+
+
+
++
+
+
+
+
+
+
++
++
++
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+++
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+++
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+ ++
++
+
+
++
+
+
+
++
++
++
+
+
++
+++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+
++
+
++
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
++
+ +
+
+
+++
++
+
++
+
+
++
++
++
+
+
+++++
+
+
++
+
++
+
+
++
+
+
+
++
++
+++
+
+
+
+
+
++++
+
+
+
+
+
+
+
+
++
++
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++++
+
+
++
+
++
+
+
++
+
+
+
+
+
+
+++
+
++
+
+
++
+
++++
+
+
+
+
+
++
++
++
+
++
+
++
+
+
++
+
++
+
+
+
++
+
+
+
+++
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
++
+
+
++
+
++
+
+
+++++
+
++
+
+
+
++
++
+
++
+
++
+
+
+
++
+
+
+
+
+
++
+
+++
+
+
++
++
++
++
+
+
++
++
+
++++
+
+
++
+
+
+
+
++
++
+ ++
+
++
+
++
+
+
+++
++
+
+
+
+++
+
+
+
+
++
+++
++
+
++
+
++
+
++
+
++++
++
+
+
+
+
+
+
+
+
+
+
++
+
+++
+
++
+
+
++
+
++++
+
+
+
++
+
+
+
+
++
+
++
++
+++
+
+
+
+
++
++
++
+++
++
++
+
+
+
++
+
+
+
+
+ +
+
+
++
++
++
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+++
+
+
++
+
+
+
+
++
++
+
++
+
+
+
+++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
++++
+
+
+
+
+
++
+
++
+
+++
+
+
++
+
+
+
++++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+++
+
+
+
+
+
++
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
+++
++++
+++
+
+
++++
+
+
++
+
++
+++
+
+
+++++
++
+
+
+
+
+
+
+
+
+
+
++ +++
+++
+
+
++
+
+
+
++
++
+
+
+
+++
+++
+
+
+
+
+
+
+
+
++
+++
++
++
+
+++
++
+
+
+++
+
+
+++
++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+++
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
++
++++
+
++
+
+
+
+
+
+
+++++
+
++
+
++
++
++
+
+
+
+++
++ ++
+
++
+
++
+
+
++++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+++
+
+
+
+
++++
+
+
+
++
+
+
+
+
+
+ +
++
+++
+
+
+
+
+
+
+
+++
+
+
+
++
+
++
++
+
+
+
+++
+
+
++
+
+
++
++++
+
+
+
+
+
+
+
+
+
+++
+
+
++
++
++
+
+
+
+
++
+++
++
++
+++++
+
+
+
++
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+++
+
+
++
+
+++
+
++
+
+++
++
+
+
++
+++
+
+
+
+
+
+++
+++
++
+
++
++
+
+
++
+++
+
+
+
+
+
+
+
+
++
+
+++
+
+
+
++
+
+
+
++
++
+
+++
+
+
++
++
++
++
+
+
+
+
+
+
+
+
++
+
+
+
+++
++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
++
+
+++
+
+
++
++
++
+
+
+
++
+++
+
+
+++
+
+
++
++
+
+++
+
++
++
+++
+++
+
+
+
+++
++
+
++
+
+
+
+
+
+
+++
++
+
+
+
+++
+
+
+
+
+
+
+
++
+
+
++
++++
+
+
+
+
++
+
+
+
+++
++
++
+
+
+
+
++
+
+++
+
+
+
+
+
++++
+
+
+
+
+
++
++
+++
+
+
+
+
+
++
+
+
+
+
++
+
++
++
+
+
+
+
+
+
+ +
++ +
+
++
++
+
+
++
+
++
+
+
++
+
+
+
+
+
+
++
++
+
+
+
+
+
+++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
++
+
++
+
+++++
+
+
+
+
++
+
++
+
++
+
+
+
++
+
++
+
++
+
+
+
+
++
+++
+
++
+
+
++
+
++
+
+
+
++++
+
+
+
+
+
++
+
+++
+
+++
+
+
+
++
+
+
+
+
+
+
+++
+
++
+
++
+
+
+
+++
+
+
+
+
++
+
+
+
+ +++
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
++
+
++
+
+
+
+
++
+
+
++
+
+
+
+++
+
++
+
+
+
++
+
+
+
++
+ +
+
+
+
++
+
+
+
+
+
++
+
+++++++
+
+++
++
++
+
+
+
+
+
+
++
+++
+
+
+
+
+
+
+
+
+
+
++
++
+
+
++
+
+
++++++
+
+
+
++
+++
+
+
+
+
+
+
++++
++
+
+
+++
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
++
+++
+
+
++
+
+
+
+
+
+
+
+++
+
++
+
+
+
+
+
+++
+
++
+++
+++
+
+++
+
++
+
+
++
+
++
+
+++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
++
+
++ +
+
+
+
+
++
+
+
+
+
++ ++
+
+
+ +++
++
+
+
+
+
+
+
+++++
+
+++ +
++
+
+++
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++++
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
++
++
++
++ +
+
++
+
+++
++
++++
+
+
+
+
+
+ +
+
+
++
++
++
+
+
+
++
+
+
++++
+
+++
+
++
++
+
+
+
++++
+ +
+
+
+ +
+
+
+
+
+
+
+
++
+++
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
++
+
+
++
+
+
+
++
+
++
+
++
+
+
+
++
+++
++
+
+
+++
+
+
+
+
++
+
+++
++
++
+++
+
++
+
+
+
++++
+
++
+
++
+
+
++
+ +
++
+
+
+
+
+
+++
+
+
++
+
+
++
+++
+
++
++
+
+
++
+
+ +
+
+
+
+
+
+
+
++
+
++
+++
+
+
+
++
+
++
+
+
+
++
+++
+
+
+
+
+
+
+
+
+
+
+
++
+++++
+ +
+++
+
+
+
+
+++
+
+++
+
+
+
++
+
+
+
+
++
+
+
+++
+
+
+
+
+
+
+
+
+++
++
+
+
+
+
+
++ +++
+
++
+
++
+ +
+
+++
+
+
++
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
++
+
+
+
++
+
+
+
++
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+++
++
+
+
+
+
+
+
+
+
+
+++
++
+
+
++
++
+
+++++++
++
++
++
++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
++
++
+
+
+
++
+
+
+
++
+
++
++
++
++
+ ++
+
+
++
+
+
+
++
+
+
+
+
++
+++
+
++
+
+
+
+
+
+
++++
++
+
++
+
+ ++
++
+
+
+
+
+
++
++
+
+
+
+
+
++
+
++
+
+
+
++
++
++
+
+
++
+
+
+
+
+
+
+
+++++
+
++
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
++++
+
+
++
++
++
++
+
+
+
++
+
+
+
+
+
+
+
++
+++
+
+
++
++
+
+++
+++
++
++++
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
+ ++
+
+
+
+
+
+
++ ++
+
++
+
+
+
++
+
+
++
+
+
+
++++
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+++
++
+
+
+
+++
+
+
+
+
+
++
++
++
+
++
+
++
+
++
+
+
+
++
++
+
+
+
+
+
++
+
+
+
+
+ +++
++
+
+
++++
+
+
++
+
+
+
+
++
+++
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+++
+
+
+
+
++
++
+
++
+
+
+
+++
+
+
+
++
+
+
+
+
+
++
++
+
+
++
++
+++
+
+
+
+
+
+++
+
+
+
++
+
+
++
+
+
+
+
+
++
+
+
+
+
++
++
++
+
+
+
+
+
+++
+
+
+
+
+ +
+
+
+
++
+
+
++ +
+
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+++
+
++
+
+
++
+
+
+
+
+
+++
+
+
+++
+
+
++
+
++
+
++
+ ++
+
+
+
+
+
+
+++++++
++
+
+
+
++
++
++
+
+
+
++
+
++
+
+++
++
++
+
+++
+
++
+++
++
+
+
+
+++
+
+
+
+
+
++
++
+
+++
+
++
+
+++
++
+++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
++
++
+
+
++
+
+
+
+
+
+
++
+
++
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
++++
++
+
+
+
+
+
+
++
+
++
+
+ +
+
++
+
+
+
+
+
+
+
+++
+
+
+
+
+
++
+
+++
+++
++
++++
+
+
+++
+
+
+++++
+
++
++
+
+
++
+
+
+
+
+
++
+++
+
++
+
++
+
+
+
+
+
++
+
+
+
+
+
+
++ +++
+
+
+
+
+
+
++
+ +
++
+
+
+
+
+
++
++
+
+
+
++
++
+
+
+ +
++
+
++++++
++
++
+
+
++
+
+++
+++
+
+
++
+
+
+ ++
+
+
+
+
+
+ +
++
+
+
+
+
+
+
+
+
+
+
+
++
+
++
++
+++
+
+
+
++
++
+
+
+
+
+
++
+
+
++
++
++
+
+
+
++++
++++++
+
+
+
++
++
+
++ +
+
+
+
+
++
+
+
++
++
++
+++
+++
+
+++
++
+
++
+
+
++
+++
+
+
+
+
+
+
+++
+
+
++
+
+++
+
+
+
++
+
+
++
++
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+ ++
++
+
++
++++
++
++
+
+
+
++
+
+
+
+
+
++
++
+
++
+
+++
+
+
+
+
++
++
+
+
++
+++
+++
+
++
+
++
++
+
++
+
+
+
+
+
+
+
+ +
++
+
+
+
+
+
+
+
++
+
+++
+++
+++
+
+
+
+
+
++
++
+
+
+
+
+
+
++
+
++
++
+
+
++
+
+
+++
++
+
+++
+
+
++
+
+
+
++
+
++
+
+
+
+
+
+
+
++
+
++
+
+
++
+
+
+++
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+ +
+
+++
++
+
+
+
+
+++
+
+
++
+
++
+
++ +
++
+
++
+
+
+
++ +
+
+
++
+
++
++
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
++
+
+
+
++
+
+
+
++
+++
+
+
++
++
+
++
+
+
+
+++
+++++
++
++
+
+
+
+
+
+
+
+
++
+
+
++
++
+
+
+
++
+
+
++
+++
+
++
++
+
+
+
++++
+
+
+
++
+
+
+
+
++
+
+
+
+++
+
+ ++
++
+
+++
+
+
+
++
++
+
+
+
+
+
+
+
+
+
++
+
+
+++
++
+
+
+
+
+
++
+
++
++++ +
+
+++
+
+
+ +
+
+
+
+
++
+
+
+
+
++
+
+
+
+ +
+
+
+
+
+
++
++
+
+
++
+
++
+
+
+
+
+
+
++++
+
+++
++
+++
+
+
+
+
+++
+++
+
+
+
+
+
+
+
+
++
+
++
+
+
+
++
++
+
++
+
+
+
++
+
+
+
+
+
+++
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
++
+
+
+++
+
+
+
+
++
++ +
++
++++
+
+
++
++
+
+++
+
+
+
+
++
+
++
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
+
++
+
+
++
+
++
+
+
+
+
+
+
+
++
+
+
++++
+
+++
+
+
+
++
+++
+
+++
+++
+
+
+
+++
+++
++
++
+++
+
+
+
+
+
+
+
+
+
+
+
+
++
++++
+
+ +
+
++
+
+
+
+
+
++
+
++
++
++
+
+
+
+
+
+
+
+
++
+
+
++
+
++
+
+
+
+ ++
++
+
+
+
+
+
+
+
++
+
++
+
++
++++++
++
++
+++
++
+
+
+
++
+++
++
++ +
+
++++
++
+
+
+
++
+
+
+
++
++
+
+
++
++++
+++
+
++
+ +
++
+
+
+
+
+
+
+++
++
+++
+
++
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+++
+
+
+
+
++
+++
+
++
+
+
+++
+
+
++
+
+
+
+
++
+
+
++
+
+
+
++
++
+ +
+
+
+
+++
++
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+++
+
++
+++
+
++
+
++
+
+
+
+
++++
+
+
++
+
++
++
+
+
+
+
+
+++
+
++++
+
++
+++
+
+
+
++
+
+
+
++
+
+
+
++
++
+
+
+
++
+
+
+
++
+++
+
+
++
++
+
+
+
++
+
+
++
+++
+
+
++
++
+
++
++
++
+
+
+
+
+++
++
+
+
++
+
+
++
+
+
++
+
+
+
+
+
+
+
++
++
+
+
+
+
++
++++
+
+
+
+
+
+
++
+ ++
++
++
++
++
+
++
+
+
+ +++
+
++++
+++
+
++
+
++
+
+++
+
+
+
+
+
+++
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
++
++
++
+
+
++
+
++
+
+++
+
++
++
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+++++
+
+
+
++
+
+
+
+
+
+
+++
+
+
++
++ ++
+
+
++
+
+++
++
++
+++
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
++
++
++ +
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++
++
+
+
+
++ +
+
++
+
+
++
+
+
+
+
+
+
+
+
+++
+
+
+
+++
++
+
++++
+++++
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
++
+
+
+
++
++
++
+
++++
+
+
+
++
++
+
+
++
+++++
+++
+
+
++
++
+
+
+
+
+
+++
+
+
++
+
+
+
+
+
++
+++
+
+
+
+++
+
+
+
+
+
+
++
+
+
+
++
+
+
++
+
+
+++
+
++
+
+
+++
+
++
+
++++
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+++
+
+
+
+
+
+
++++
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
++
+
+++
+
+
+
+++
++
+
+++
+
++
++
+
++
+
+
+++
+
+
+
+
++
++
+
++
+++
+
+
+
+
+
+
+
++
+
+++
++
+
+ +
+
+
+
+++
++
+
+
+
+
+
+
+
+++++
++
++
+
+
+
++
++
++
+
+
+
+
+++
+
+
+
++
+
+
+
+
+
++
++
++
+
+
+
+
+
+
++++
+
+
+
+
+
+
++
+
+
++
+
+++
+
+
+
+
++
+
+
+
+
++
+
+++
+
+
+
+
+
++
+
+ ++
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
++
+
++
+
+
+
+++
++
+
+ +
+
+
+
+
+
+
+
+
++
+++++
+
++
+
+
+
+
+
+
++
+
++
++
+
+ +
+
+++
+
+
++
+
++
+
+
+
+
+++ +
++
+
+
+++
+++
+
+
+
++
+
+
++
+++ +
+
+
++
+
+
+
+
+
++
+
+
++
+
++
++++
+
+
+
+
++
+
+
+
+
+
++
+
+
++
+
+
+
++
+
+
++
+ ++
+
+++
+
++
+
+
++
+
++
+
+ +
+
+
+
+++
+
+
+
+
+
+
++
+
+
+
++
++
++
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
++
+
+
+
+++
+++
++
+++
++
++
+
++
+
+
+
+
++
+
+
+
++
+
+
++
++
++
+++
+
++
+
+
+
+
+
+
++
+
++ +
+
+
+
+
+
+
+
++++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
++
++
+
+ +
+
+
+
+
++
+
+
++
+
+
++ +
+
+
+
+++
+
++
++
+
+
++
++
++
+
++
+
++
++
+
+
+
++
++
+
++
+
++
+
+
+
+++
+
++
+
+
+++
+
+
+
+
++
+
+
+
+ +
+++
++++
+
++
+++
+++
++
+
+
+
+
+
+
+
++
++++++
+
+
+
++
++
++
+
+
+
+++
+
+
+
+++
++
++
+
+
+
+
+
++
++
+
+
+
+
+
++
+
+
+
+
++
+
++++
+
+
+
+
+
+
+
++
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
++
+
+ +
+
++ +
++
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
++++
+++
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+++
+
+
+
+
+
+
+
+
++++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
++
+
+
+++
+++
+
+++
++
+
+
+++
+++++
+
+
+++
+
+++++++
+
+
+
++
+
++
+
+
+++
++
+
++
+
+
+
++
++
+
+
++
++
+
+++
+
++
+++
+
+
+
+
++
+
+
+++
+
+
+
+
+
+
+
+
+
++
+
+
+
+++
+
+
+
++
+
++
+
++
++
+
+
+
++
+
++++
+++
+++
+
++
+
+
++
+
+
+
+
+
++++
+
+
+
+
+
++
++
+
+
+
+++
+
+
+
+
++
++
+
+++
+
+
++
++
+
+
+
+
+
+
+
+++
++
+
+
+
++
+
+
++
+
+
+
+
+++
+
+
++
++
+
+
++
+
+
++
++
++
+
+++
++
+
+++
++
+
++
+
+
+
+
+
+
+
++
+ ++
+
+++
++
+++
++
++
+++
+
++++
+
+
++
+
++
+
+
+
++
+++
++
+
+
+
+
+
+++
++
+++
+
+
+
+
+
++
++
+
+
+
++
+++
++
+
++
+
+
+
+
++
+
++
+
+++
++++++
+
+
+
+
+
+
+
+
++
+
+
+
+
++ ++
+
++ +
+
++
+
+
+
+++
+
+
+
+
++
+
+
+++
++
+
+
++++
++
+
+++
+
+
+
++++
++
++
++
+
+
+++
++
+
+
+
+
+
++
+
+
+
+
++
+
++
+
+
++
+++
++
+
++
+
+
+
+
++
+
++++
+
++
++
+
+
+
++++
+
+
++
+++
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
++
+
++
+
++
++
+
+ +
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+++
+
+
+++
+++
+
+
+
+
+
+
+
++
+
++
+
+
++
+
+
+
+
+++
+
+
+
+
+
+
++
+
++
+
+
+++++
+
+
+++
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
++
+++
+
++
++
++
+
++ +++
+
+
+
+
+
+++
+
+
+
++
+
++
+
+
++
+
+
++++
+
++
+
+
++
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+++
+
+++
++
+
+
+
+ +
+
+
+
+
++
+ +
++
+
++
+
+
+
+
++
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
++
++
+
+
++
+
+
+
++
+
+
++
++
+
+
+
+
+
++
+ +++
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+++
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
++
++
+
+
++
++
+
+
+
+
+
++
+
+
+
+
+
++
++
+
+++
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
++
+
+
+
+
++
+
+
++++
+
+
+
++
+
+
+ ++
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
++
++
+
++
+ +
+
++
+
+
+++
++
+
+
++
++
+
+
+
+++
++
+
+
++
++
++
++
+
++
+
+
+++
+
+
+
+
++
+
+
+
++
+
+
+
++
+
+
+
++
+
+
+++
++
+
+
+
+
++
+
+
+
+
+
+
++
+
+
++
++
+
++
+
+++
++
+
+
+++
++
++
+
+ +
+
+
+++
+
+
+
+
+
++
+
++
+
+
++
++
+
+
+
+
+
+
+
+
++
++
+++
++
+
+
++
+
++
+
++++
+
++
+
++
+
+
++
+
+
+
+
+
+
+++
+
+
+
+
+
+
+++
+
+
+
+
+
+++
+
+
++
+
++
++
+
+
+
+
+
++
+
+++
+
++
+
+
+++
+
+
+
++
+
+++
++
++
+
+
+
++
+
+++
++
+
+++
+
+
+
++
+
++
+
++
+
+++++++
++
+
+
+
+
++
+
+
+
+++
+
++
+
+
+
+
+
+
++
+
+
+
++++
+++
++
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
+++++++
+++
+
+
+
+
++
++++
+
++
+
+
+
+
+++
++
+
++
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
++
+
+
++
++
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
++
+++
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+++
+
++
+
+
+++
+
+
+
++
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++++++
++
+
+
+++
+
++
++
+
+
++
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
++
+
++
+
+
++
+++
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
++
++
+
+
+
++
+
+
+
+
+++
++
+
+
+
+
+
+++
+
+
+
+
++
++
++
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+++
+
+
+++
++
+
+
++
+
+++
+
++
+
+
+
+
++
+++
+
++
+
+
+
++
++
++
++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
++
++
++ +
+
+
+
+
+
++
++
+
++
+
+
+
+
++
++++
++
+
+
+
+
+
++
+++
+
++
++
+
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
++
+
++
+
+
+
++
+
+
+
+++
+
++
+++
+
+
+
+
+
++
+
+
++
+
+
+
+
+++
+
+
++
++
++
+
+
+
+
+++
+++
+
++
+
+
+
+
+
+
+
+
++
+
++
++++
+++
++
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
++
++
++
+
+
+
+
+
+
+
+
+
++
++
+
++
+
++
+
++
+
+
+
+
+
++
++
+
+
+ ++
++
+
+
++
++
++
+
+
++
+
++
+
+
++
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
++
+ +++
++
+
+
+
+
+
+
+
+
+
++
+++
++
+
+
++
+
+
+
+
+
++
+
+
++
+++
+
+
++
+++ +
+
+
+
+
+ ++++
+
+
+
+
+
+
+++
+
+
+
+
++
+
+
+
++
+
+
++
+
+
+++
+
+
+
+
+
+
+
+
++
++
+
+
+
++
++
+
+
++++
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+++
+
+++
++
+
+
+
+
+++ ++
+
+
+
++
+
+
+
+
++
+
++
++++
+
+
+
+
++
+
+
+
+
+++
+
+
++
+
++
+++
++
+
++
++
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
++
++
+
++
+
+
+
++
+++
+
+
+
+
+
+
+
+
+
+++
+++
+
+
+++
+
++++
+
++
+
+
++
+
+
+++
+
+
+
+
+
+
+
+
+
++
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
++
+
+ +
++
++++
+
+
+
+
+
++
+
++
+++
+
+
++++
++
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+++
+++
+
+
+
+
+
+
++
++
+
+
+
+++
+
+
+
+
+
+
+
+
++
+
+
+++
+
+
+
++
+
+
+
++
+
+
+
++
++
++
+
+
+
++
+
+
++
+
+
+
+++
++
+ +
+
+
++
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
++
+
++
++
+ ++
+
+
+
++
+
+
+
+
++++
+
+
+
+
++
++++
+
++
++ +++
+
+
+
+
+++
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
++
+
++
+
++
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
++
+++
+++
+
+
+
+
+
+
+ ++
+
++
++
++
+++
+
++
++++
+++
+
+
+
+
++
+++++
+++
++
+
+
+
++
++
+
+
+++
++
++
+
++
+
+
+
++
+
+
++
+
+
+
++
++
+
+
+
++
++
++
++
+
+ + +
++++
+
++++
+
+
+
+
+++
++
++
+
++
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
++
++
+++
+
+++
+++
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
++
+
+
++
+
+
+
++
++
++
+
+
+
+
+
+
++
+++
++
++
+++
+
+
+
+
++
+
++
++
+
+
++
+
+
+
+
+++
+
+
+
++
+
++
+ +
+
+
+
+
+
++
++
+
+
+
+++
+
++
++
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
++
+
+
++
++++
+
+++
+
+
+
+
++
++
+
++
+
+
+++
+
+
+
+
+++ +
+
+
+
+
+
+++
+
+
+++
+
+
++
+
+
+
+
++
++
+
+
+
+
+
++
++
+
++
+++
+
++
+
+
++
+
+
++
+
+
+++
+
+
++
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
++++
+
++
+
+
+
+
+
++
+
++
+
+
+
+
++
+
+
+
+++
+
+
+
+
+
++
+
+
++++
+
+
+
++++++
+++
++
+
+
+
+
+
+
+
+
+
+++
+++++ +
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+++
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
++
+
++
+
+ +
+
+
+++
+
++++
++
+
+
++++
+
+
+
++
+
+
+
++
+
+
+
+
++
+
++
+
+
+
++
+
+
++
+
+
++
+
+
++
+
++
+
+
+
++
+
+
++
+
++++
+
+
++
+
++
+
+++
+
++
+ +
++
+
+
++
+
+ ++
++
+
+++
++
+
++
++
++
+
+
+
++
+
++
+
+
+
+
++
+
+
++++
+
+
+
+
++
+
+
+
++
++
+
+
+
++
+++
+
+
++
++
++
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+++
+
++
+
++
+
+
+
+
+
++
++
+
+
+++++
+
+ +
++
+
++
++
+
+
++
+
+
++
+
+
+
+
+++
+
+
+
+
+
+
+
++
+++
+
+++
+
+
+
+
++
++
+
+
+
+
+
+++
+
+
+
+
+
+
+++
+
++
+
+
++
++
+
+
+
++ +
+
++
++
+
+
+
++
+
++++
++
+
++
+
+
+
+
+
++
+
++
+
+
++
+
+
+
+++
+
++
+
+
+
++
++
+
+
++
+
+
+
+
++
+
+
+
+
++
++
+
+
+
+
++
+
+
++++
+++
+
++
+
+
+
+
+
++++
+
+
+
+
+
+
+
+++
+++
+
+
+
++
+
+
+
+
++
+
+++++
+
++
+
+
+++
++
+++
+
+
+
+
+
+
+++
++
+
+
+
+
+
+
++
+
++++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
++
++++
+
++
+
+
++++
+
+
+
+
+
+
+
+
++
+ +
+
+++
+
+
+
+
++
++
+
+
+++
+
+
++
++
++
+
+
++
++
++
+++
++
++
+
+
++
++
+
+
++ +
++
++
++
+
+
+
+++
++
+
+
+
+
++
+
++
+
+
++
+
++
+
+
++
+
+
++
+
+
++
++
+
+
+
++
++
++
+
+++
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+++
+
++
+
+
++
++
+
+
+
+
++
++
+
+
++
++
+
+++
+ +++
+
+
+++
+
++
+
+
++
+
+
+
+
+
+
+
+
+++++
+
++++
+
++
++
+
+
+
+
+
+++
+
+
+
+
+
++
+
+
++
+
+
+++
+
+
++
+
+
+
++
+
+++
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+ +
+
+
+
+
++
+
+
+
+
+
+
+++
+
++++
+
+
+
++
+
+
+
+
+
+
+
+
++
++
+
+
+
+
++
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
++
+++
+
+
+
++++
++++
+
++
++
+
+
+++
+++
+
+
+
+
++
+
+
+
+++++
++
+
+
+++
+
+
++
+
+
+
+
++
++
++
+
++
+
++
+
+
++
+
+
++
+
+
+
++
+
+
+
+
+++
++
+
++
+
+ ++
+
+++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
++
+++
+
++
++
+
++
++
+++
+
+++
++
+++
+
+
++++
+
++
+
+
+
+
++
+
+
++
++
+
+
+++
+
+++
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
++
+
+
+
++
+ +++
++
+
+
+
+
+
++
+
++
+++
++
+
+
+
+
+
+
+
+
++
+
++
++
+
+
++
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
++
+++
+
+
+
+
++
++
++
+
+
+
++
+
++
+
++
++
+
+
+
+
+
+
+
+
+
+ +
+
+
+
++
++
++
++
+
+
+ ++
++
+++
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
++
+
+++
+
++
+
+
+
+++
+
+
+
+
+
+
++
+
++
++
+
+++
++
+
+
+
+
++
+
+
++
+
++
+++
+
+
+
++
++
++++
+ ++
+
+
+
+
+
+
++
+
+
+
+
++++
+++
++
++
+
+
+
+
+
+
+
++
++
+
+++
+
++
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
++
++++
+
+++
++
+
+
++
+
+
+
+
+++++
+
+
+
+
+
+
+
+
+
++
++
+
++
+
++
+ +
+
+
+
+++
+
++
++
++
+
+
+
+
+
+
+
+
++
+
++
+
++
+
+
+
+
+++
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+++++
+
+
++
+
++
+
++
+
+
+
+
+
+
+
++
+
++
+
+
+
+
++
+
+
+
+
+
++
++
+
+++
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+++
+
+
+
+
++
+
+
+ +++
++
++
++
+
+
+
+
+++
+
+
+
++++
+
+
+
+++
+
++++
+
++
+
+
+
++
+++
++
++
+
+
+
+
+
++
+
+
+
+
+
++
+
++
+
+++
+
+
+
++
++
+
+
+
+
++++
+
+
++
++
+
+
+
+
++
+
+
+
+++
++
+
++
+++
+++
++
+
+
+
++ + +
++
+
+
+
++
+
+
++
++
+
+++
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
++
+++
+
+
+
+
+
++
+
+
+
+
++
+
+
++
+
++
+
+
+
+
++
+
+++
++
++++
+
++
+
+
+
+
+
++
+
+
+
+
+
+++
+
++
+
+
+
+
++
+
++
+++
+
++
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
++
+
++
++
+
+
+
+
+
+
++
+
++
+
++
+
+
+
+
+
+
+
++
++
++
++
++
+
++
+
+
+
+
+
+
+
+
+
++
++
++
++
+
+
++
+
++
+
+
++
+
+
+
+
++
+
++
+
+
+
++++
+
+
+
+
+
+
+
++
+
++
+
+
+++
+
+
++
+
++
+
++
+
+
+
+
++
+++
++++
++
++
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
++
+
+
+
+
+
+
++++
+
++
+
+
+
+
+
+++
+
+
+++
+
+
+
+
++
+
+ +
+++
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+ +++
++
+
+
++
+++
+
+
+++++
+
+
+
+
+
+
+
+
++
++
++
+
+
+
++
+
++
++++
++
+
+++
+
+
++
+
++
+
+
+
++
++
+
+
+
+
+
+
++
++
++
++
+
+
++
+
+
++
+
+
+
+
++
++
+
+
+
++++
+
+
+
+++
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
++
+
++
+
+
+
+
+
+ ++
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+++
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
++
+
+
++
++++
+
+
++
+
+
++
++
+++
+
++
+
+
+
+
+
+
+
+
++
+
+
++
+
++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
++
+
+
+
++++
+
+
+++
+
+
+
+
+
+
+
++
+
+++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+++
++
++
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
++
+
+++
+
+
+++
+
+
+++
+
+
+
+
++
+
++
+
+
+
+
++
+
+
+
+
+
+
++
+
++
++
+++
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+
++
++
+++
+
++
+
+
+
+++
+
+
++
+++
+
++
++
+++
+
+
+
++
+
+
+
+
+ ++
+
++
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
++
+
+
+ +
+
++
++
+
++
+
+
+
++++
+
+
++
+
+
+
++
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
++
++
++
+
+
+
++
+
+++
+
+
+
++
++
+
+
++
++
+
+
+
+
+
++
++
+
++++
+
+
+
++++
++
+
++
+
+
++
+
+
+
++
+
++
+
+
+
++++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
++
+
++
+
++
+++
+
+
+
+
++
++
+
+ ++
+
+
++
+
++
+
++
++
++
++
++
+
++
+
++
+
+
+
+
+
+
++
+
++
+
+
++
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
++++
++
+
++
+++
+
+++
+
+
+
+
+
+
+++
+
+
+
+
+
+
++
+
+
++
+
+++
+
+
++
+
++
++++
+
+
++
+++++
+++
+
+
++
+++
+++
++
+
+
+
+
+
+
++++
+
+
+
+++
++
+
+
++
+
+
+
+++
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+++
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+++
+
++
+
+
+
+
+
+
+
+
+
+++
+
++
+
+
+
+
+
+
+
+
+
+++
+ ++
+
+
+
+ ++
+++
+
+
+
+++
+
+
+
+
++
+
+
++
+
+
++
++
+
++++
++
+
+
++
+
++
+
++
+
+
+
+
+
++
+
+++
+
+
+
++
+
+
+
+
+
+
++
+
+
++
++
+
+
+
+
+
+
++
+++
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+++
+
+
+
++
+
+
+
+++
++
++
+
+++
+
+
++
++
+
+
+
+
++
+
+
+
++
+
+++
+
++
+
++
+
+
+++
++
+++++
+
+
+++
+
+
++
++
+++
+
+
++
++
+
+
+
+
+
+
+
+
++
+
+
+
+++
++
+
+
+
+
+
+
+
+
+
+++
+
+
++
++
+
+
+
+++
+
++
+++
+
+
+++
+
++
++++
+
++
+
+
+
++
+
+
+
++
+
+
++
+
+
+
+
++
++
+
+
+
++
+
++
+
+
+
+
+
+
++
+
+
+
+ +
+
++++
+
++
++
+
+
+
+
+
+
++
+
+ +
+
++
++++
+
+
+
+++++
+
++
+
+
++
++
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+++++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
++
+
+
+
++
+
++
+
+
+
++
+++
+
++
+
+
++++
+
+
+
++
+
+
+
+
+
+
+
+
++
+
++
+
++
+
+
++
+
++
+
++
+
++
+
+++
+
+
+
+
+
+
++
+++
+
+
+
+++++
+
+
+
+
++
+
++
+
+
+
+
+++
++
+
+
+
+
+
+
+
+++
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+++
+
+
+++
+++
+
++
+
+
+
+ ++
+
+
+ +++
+
+
+
++
++
+
++
+
++
+
++
+
++
+
+++
+
+
+
++
++
++
+
+++
+
+ ++
++
++
++
+
+
++
+
+
+
+++
+
+
+
++
+
++
++
+
+
+
++++ ++
+
+
+
+
+
++
+
++
++
+
+
+
++
+
+
++
+
+
++
+
+++
+
++
+
+
+
++
++
++
+
+
+
++
+
+++
+
+++
++
+++
+
+
++
++
+
++
+
+
+
++
+
++
+
+
+
+
+
+
++
++
+
+
+
++++
+
+++
+
+++
++
+
+++
+
+
+
+
+
+
+
+++
+
+++++
+
+
+
+++
++++
+
++
+
++
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+
++
+
++++
++
+
++
+
++
++
+
++
+++
+
++
++
+
+
+
++
+
+
+
+
++
+
+
+
++
+++++
+
+++ ++++++
++
+
+
+
+
+ ++
++
++
+
++
++
+
+
+
+
+
+
+
+
+
++++
+
+
+
+
++
+
+
+
+
+++
++
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+++
+
+
++
+
++++
+
+
+
+
++
++
++
+
+
+
+
++
+
+
+
++
+
+
+
+
+
++
+
++
++++
++
++
+
+
+ ++
+
+
+
+++++
++
+
+
+
+
+
+
+
++
+
++
+
+
++
+
+
+++
+
++
+
+
++
++
+
+
+
+
+
+
+
+
+
++
+
++
+
++
+
++
+
++ +++
+
+
+
+
+
+++
+
+
++++
+
++
+
+++
+
+
++
++
+
++
++
+
+
+
+ +
++
+++
+
+
+
+
+
+
+
+++
++
+
+
++
+++
+
+
+
+
+
+
++
++
+
+
+
+++++
+
++
+
++
++++
+
+
++
++
+
+
+
+++
+
+
+
+
+
+++
+
++
+
+
+++++
+ +
+++
+++
+
+
+
++
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
++
++
+
+
+
++
++
+
++
+
++
+
++
+
+
+
+
++++
+
++
+
+
+
+
+
+
++
++
++
+
+
+++
+
+
+
+
++
+
+
+
+
++
++
+
+
+
+
++
++
++
+
++++
+
+
+++
+
+
++
++
++
++
++
+
++
+
++++
++
++
+
+
+
++
+
+
+
+ +++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+++
+++
+
+
+
+
+
+
+
+
+
+
+
+
+++
++
+
+
+
+
+
+
+
+
+
++
+
++
++
+++
++
+
++
+
+
+
+
++
++++
++++
+++
++
+
++
+
+ ++ +
+
+
+
+
+
++
+
+
+
+
++
+
++
+
++++
+++
++
+
+
+
+
+
+
++++++
+
++
+
+++
+
+++
+
+
+
+++
+
+
++
+
+
+
+
+
++
++
++
+
+
+
++
++
+
++
+
+
+
++
+ +
++
++
++
+
++
++
+
+
+
+
+
+
+
+
+++
+
+
+
+++
+
++
+
+
++
+
+
+++
+++
+
+
+
+
+++
+++
+
++
++
+
+
+
+
+++
+
++++
+
+
+
+
+
+
+
+
+
++++
+
+++
+
+
+
+
+
+
+ ++
+
+
+
+++++
+
+++
+
++
+
+
+
++
+
++
+++
++
+
++
+
+
+
+
+
+
++
++
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
++++++
+
+
+
+
+
+
+
+
++++
+
+
++
+
+
+
+
+
+
++
+
+
+
+
++
++
+
++
++
++
+
+
+
+
++
+
+
+
+
+
++
+
+
++
++
+
+
++
++
+
++
+++
+
++
+
+
+
+
+
+
++
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
++++
+
+
+
+
+
++++
+
+
+
++
++
+
+
+
+
+
+
+
+
+++
+
+
+
+
+ ++++
+
+
+
++
++
++
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+++++
+
++
+
+++
+
+++
+
++
+
+
+
++
+
+
++++
+
+
+
+
++
+
++
+
+
+
+
++
+
+
++
+++
+
++
+
+
+
++
++
+
+
+
+
+++
+
+
+
+
+
++++++
++
+
+
+++
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
++
+
+
++
+
++
++
++
+
+
+
+
+++
++
+
++
++
+
+
+
+++++
+
+
+++
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
++
+++
+
++
+
+
+
+
++
+
+
++
+
+
+
+
++
++++
+
++
+
+
+
+
++
+
++
+
+
+
++
+++
+
+
++
+
+ +
++
+
+
++
++
++
+
+
++
+
+
+
+
++
+
+
+
+
++
++
+
+++
+
+
++
+
+
+
+
+
++
+++++
++++
+
+
+++
+
+
+
+ +
+
+
++
+
+
++
+++
+
+
+++
++
+
+
+
++
++
+
++
+++
+
+ +
++
+
+
++
+
+
+
+
++
+
+
++
+
+
+
++
+ +
+
++
++
+
+
+
++
+
+
+
+
+
++
+
++
+
+++
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
++
+
++
+
+
+
+
+
+
+++++
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
++
++
++
+
+
++
+
++
+
+
+++
+
+
+
++++
+
++
+
++
++
++
+
++
++
+
+
+
+
+
++
+
+
++
++
+
+
+
+++
++
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
++
+
+
++
+
+
+
+
+
++ +
+
++
+
+
++
+
+++
+
+
++ +
++
+
+
+
+
++++++
+
++
++
+
++
+
++
+
+
+
+
++
+
+
+++
+++
++
+
+
++
+
++++
++
++
+
+
+
+
+
+
+
+
++
++
+
+
++
+
++
+
++
+++
+
+
++
+
+
+
+
+
+
++++
+
+
+
+
++
+
+++
+
+
+
++
+
+
+ +
+
+
+
++
+++
+
+
+
+
+
+
+
+
+
+
+
+++
+++
+
++
+
++
+
+
++
++
+
+++
+
++
+
+
++
+
+
++
+
+
+
+
+++
+
+
++
+
+
+
++
++
+
+
++
+
+
+
+
+
+
+
+++
+
+++++
++
+
++
+
++
++
++
+
+
+
+
+
+
+++
+
+
++
+
++
+
+++
+
+
+
+
+
++
+
+
+
+
+
+
++
+++++
+
+
+
++
+
+
++
++
+
+
++
+
+
+
++
+
+
+
+
+
++
+
++
+
+
++++
+
+
+
++++
+
++
++
+
++
+
+
+
+
+
++
+
+
+
+++
+
+
++
+
++
+
+
+
+
++++ +
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+++
++
+
++
+
++
+++
+
++
+++
++
+
+
+
+
++
+
++
++
+
+
++
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+++
+ ++
+
++
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+++
+
++
++
+ +
+
+
+
+++ ++
++
++
++
+++++
+
++
+
+
++
+
+
+++
++
+
+
+
+
+
+
+
+
++
++++
++
++
+++
+
+
+
+
+
++
+
+
+
+
++ +
+
+
+
+
+
+
+
+
+
++++
+
+
+
+
+
++
+
+
+
++
+
+
++
++
++
+
++++
+
+
++
+
++
++
++
+++ +++
++
+
+
+
+++
++
+
++
+
+++
+
++
++
++
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+++
+++
+
+
+
+
+
+
+
++++
++
+
+
+
+
+
+
++
+
+++
+
+
++
++++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
++
+
+
+
+
+
++
++
+
+
+
++
+
+
+++
+
+
+
++
+
+
+
++
+
+
+
++
+
++
+
+
++++
+
++++
+
+
+++
+
+
+
+
++
+
++
++
++
+
+++
+
++
+
+
+
++
++
+
+
+
+
+
+++ +
+
+
++
+
++
+
+++
+
+
+
+
+
++
+
++
+
+
+++
+
+
+++
+ +
+
+
++++
+
+
+++
++
+
+
+
+
+
+
+
+++
++++
+
+
+
++
+
+
+
+
++
+
++
+
+
+
+
+++
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
++
++
++
++
+
+
+
+
+
+++
+
+
+
+
+++
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+++
+++
+
+
+
+
+
++
+
++
++
+
+
++++
++
++
+++
++
+
+
+
+
+
+
+
++
++
+
+
++
++
++
+
+
++
+
+
+
+
++ +
++
+
+
+
++
++
++
+++
+
+++
+
+
++
+
+
++
+
++
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
++++
++
+
+
+
++
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+++
+
++
+
+
++
+
++
+
+
+
+
+
+
++
++
++
++
+
+
+
++
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
++
++
++
+
++
+
+++
+
++
++
++
+
+
++
+
+
+
+
+
+
+
+
++++
+++
+
+
+
+
+
++
+
+
++
+
+++
+
+
+
+
++
+
+++
+
+
++ +
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
++
+
+
+
+
+
+
++
+
++
+
++
++
+
+
+
+
+
+
+++
+++
+
+
+++
++
++
+
+
+
+
+
+
+
++++
+
+
++
+
+
+
+
+ +
+
+++
+
+
+
+++
+
+
+
++ +
+++
++
+
+
+
+
++
++
+
+
++
+
+
++
+
++
++
+
+
++
+
+
+++
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
++
+
+
++
+
++
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+++
++++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
++
+
+
+++
+
+
+
+
++
+
+
+
+
+
+++++
+
+
+
+
++++
++
+
+
+
+
+ +
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+++
++
+
++
+
+++
++
+
+++
+
+
+
++
++
+
++
+
+
+
+
+++
+
++
+
+
+
+
+
+
++
+
+
++
+
+
+
+
++
+
++
+
+
+
+
+
+
+
++
++
+
+
+ +++
+
+
+
+
+
+
+
+
++
++
+ +
++
+
++
+
+
++
+++ +
++
+
+
+
+
+
+
++
+
+
+
++
+
++
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+++
++
+
+
+
+++
++
+
+
+
+
+
+
+
+
++
+
+++
++
+
++
+
+
+
+
+
+
+
+
++
++++
++
+++
+
+
+
++
+
+
+
++
+
+
++++
++
+
+
+
++
+ +
+
+
+
+
++
+
+
+++++
+
++
+
+
+
+
+++
++
++
++
+
++
++
++
+
+
+
+
+
+
+
+
+
+
+
++
++
++
++
+
+
+
+
++
++
+
+++
+
+
+
+
+
++
++
+
+
+
+
++
+
+
+
++
++
+
+
+
+
+
+
+ +
++
+
+
+
+
+
+++
+
+++
+
++
++
+
++
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
++
+
++
+
+
+
+
+
+
++
+
+
+
++++
++
+ ++
+
+
++
++
+
+
+
++
+
+
++
+
+
+
+
++
+
++
+
+++
+
+
++
+
++
+
+
+
+
+
+++
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
++
++
+
+
+
+
+++
+
+
+
+
++
++++++
+
+
+
++
++
+
++
+
++ +
+
++
+
+
+
+
+
++
+
+++
+++
++
+
++
+
+
+
+
+++
++
++
+
++
+++
+
+
+
++++
+++
++
+
+++
+
+
+
+
+
+
+
+
++
+
+
+
+++
+
+
++
++
+++
++
+++
++
+
+
++
++
+
+
+
++
++
+
+
++
++
+++
+
+
+
+
+
+
++ +
+
+
+ +++++
+
+
++++
+
+
++
++++
++
++
++
+++
+
+
+
+
+
++
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
++++
++
+
++
+
+
++
+
+
+
+
+
++
+++
+
++
+++
+
+
+
++
+++
++
+++++
++
+
++
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
++
++++
++
+
+
++
+
+
+
+
+
+
+
+++
+
+
++
+
+
++++
+
+
++
++
+++
++
+
++
++
+
++
++
+
+
+
+
+
+
+++
+
++
+
+
++
++
+
+
+
+
++
+
++
+
+
+
++
+
+++
++++
+
+
+
+
+
++
++
+
+
+
++
+
+
++
+
+
+
+++
++
+
++
+
+
+++
+
++
++
++
+++++
++
+
++
+
+
+
+
+
+++
+
+
+
+
+
+
++
+
+
+
+
+
++
+
++
+
++
+
++
+
+
++
+
+
+++
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
++
+ +
+
++
+
++
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+++
+
+
++
++
+
+
+
+
+
+++
+
++
++
++++
+
+
+ +
++
+
+
+
+
++
+
+
+
+ +
+++
+
+
+
+
++
+++
+
+
+
+
+
+++
+
+
++
+
+
++
++
++++
+++
+
+
++
++++
+
++
+++
+
+
+
+++
+
+++
+
++++
+
+
++
++
+
+
++
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+++
++
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+ +
++ +++
+++
+
+
++
++
+
+++
+++
+
+
+
+
++
+
+
++
+
+++
+
++
+
+
++
+
+
+ +++ ++
++
+
+ +++
+
+
+
+
+
+
+
++
+
+
++
+
++
+
++
++++
+
+
++
+
+
+
+++
+++
+
+
+
+
+++++
+
+
++
+
+++
++
++
+
+
+++
+
++
+
+
+
++
++
+
+
+
++
++
+
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
++
++
++
+
++
+
+
++++
+
+
+
+
++
+
+
+
+
++
+ +
+ ++
+
+
+
+
+
+
+
++
++
+
+
+
+
++
++
+
++
+
++
++
++
+
+
+
++
++
+
+
+
+
+
+
+++
+
+
+
+
+
+
++
+
+++
+
+
+++++
++
+++
+
++ +
+
+
+++
+
+
+
+
+
++
+
+
+
+++
+
+
+
++
++
++
+
++
+
+
+
+
+
+
+
+
++
+
+
+ +
++
++
+++
++
+
+
+
+
+
++
+
+
+
++
+
+ +
+
++
++
+
+
+
+
+
++
++
++
++
+
+
+
+
+
+
+
++
+
++
+
++
+
+
++
+
++
++
+
++
+
++
+
+
+
+
+
++
+
+
+
++++
+
++
+
++
+
+ +++
+++
+
+
++
+
+
+
+
+
++
+
++
++
+
++
+
+++
+
+
+
+
+
++
+
++
+
+
++
+
+
+
++
+
+
+
+
+
+
++
++
++
+
+
+
++
+
+
+
++
+
+
++
+
+
+
+++++
++
+
++
+
+
++
+
++
+
+
+
+
+
+++
+
+
+ +
+++
+
+
+
+
++
+++
+++
++
++
+
+
++
+
+
++
++
++
+
+++
+
+
+
+
+
+
+
++
++
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+++
++
+
+
+
+
++
+
+
+
+
++
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+ ++
+
+
+
+
++
+++
+
+
+
+
+
+++
+
+
+
+
+
+
++
++
++
+
+
+
+
+++++
+
++
+
+
+
++
+
+
+
+
++
++++
+
++
++
++
+
+
+
++
+
+
+++
+
+
++++
++
+
+
++
+
++
+
+
++
+
+
+
+
+
+
+
++
+
+
+++
++
+
+++
++
+
+
+++
+
++
+
+
+
+
+
++
+
+
+
+
++++
+
+
+
+
++++
+
+
++
++
+
+
++
+
+
+
+
+
++
+++
+
+
+
++
+
+
+
++
+
+
+
+
+
+++
+
+
+
+
+++
+
+
+
+
+
+
++
+
++
+
+++++++
+
+++
++ +++
+
+
+
+
+
+
+
++
+
+
++
+
+++
++
+
+
+
++++
+
+
++
+
++
++
+
+
++++
+
++
++
+
+
+
+
+
+
+++
+
+
+++
+
+
+
++
+
+
+++++
+
+
++
+
+
+++++
++ +
++
+
+
++
+
+
+
+
+
+ +
+
+
+
++
+
++
++
+
++
++
+
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
+
+
+
++
+
+++
++
++
+
+
++
+
+
++
+
+ +
++
++++
+
+
+
++
++
+
+
+
+
+
+
++
+
+
+
+
+++
++
+++
++
++++
+
+
+
+
++++
++
+
++
+++
+
+
+
+
+
+++
++++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
++
+
+
+
+
++
+
+
++
+
+
++
+++
++
+
++
++
+
+
+++
++
+
+
+
++
+
++
+
+
+
++
+
+
+++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++++
++ +
+
+
++
+
++
+
+
+
++
++
+
+
+
+
++
++
+++
++
+
++
+
++
+
+
+
+
++
+
+
++
+
++++
++
+
+
+
++
++
+
+
+++
+
+
+
+
+
+
+++
+
+ +
+
+
++
+
+
+
++
++
++
+
+
++
+
+
+
+
++++
+
+
++
+++
+
+
+
+++
+
++
+
+
+
++
+
+
++
+
+
+
+
++
+
++
+
++++
+
+
+
+
+
++
++
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+ +
++
+++
++
+
+
+
+
++
+
+
+++
+++
+
+
+
++
+
+
+
++
+
+
++
+
++
+
+
+
++
+
+
+
+
++
+++++
+
+
+
+
++ +
+
+
+
++
+++
++
++
+
++
++
++
+
++
+
++
+
+
++++++
+
+
+
+++
+
+
+
+++
+
+
++
+
++
++
++
+
++
++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+++
+
+
++
+++++
+
+
+
+
+++
++
+
+
++
++
+
+
++
+
+
++
+
+
++
+
++
+
++++
++
+
++
+
+
+
+
+
++
++
+++
+
++
++
++++
+++
++
++
+
++
++
+
+
+
++
+
+
+
+
+
+
+
++
+++ +
++
+
++
+
+
+
+
+
+
+
+
+
++
+
++++
+
+
+ +
+
+
++
+
++
++
+++
+
+
++
+
+
+
+
++
+
+
++++
+ ++
+
+
++
++
+
+
+++
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ ++
++
++
+
+++
+
++
+
+
+++
++++
+
+
++++
+
+
+
+
+
++++
+
++
+
+
+
+
+
+
+
+
+
+
++
+++
+
+++
+
+
+
+++
+
+
+
+
++
+
+
+
+
+++
+
+
+
+
++
+
++
+
++
+
+
+
+
++
+++
+
+
++
++
+
++++
+
+
+
+
+
+
+
+
+
+
+
++
++
++
++
+
++
++
+
+
++
+
+
++
+++
+
+
+ +
+
++
+
+
+
+
+
+
+
++
+
+
+
+
++
++
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
++++
+
+
++
++++
+
+
+ +
+
+
+
+
+
++
+
+ +
++
+
+
+
+
++
+
++
++
+
+
++
+
+
+++
+
+
+
+
+
+
+
+
++
+++
+
+
+++
++
+
+
+
+++
+
+
+
+
+
+
+
+
+
++
+
++++
+
+
+++
++
+
+
+++
++
+
+
+
++
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+++ ++
+
+
+
++
++
++++
+
+++
+
++
++
+
++
+
+
++
+ ++
++
+
+
+
+
+
+
+
+
+
++
+
+
++
++
+
+
++
++
+++
+
+
+++
+
+
++
+
++
++
+
+
+
+
++
+
++
+
+++++
+
++++
+++
+
+++
+
+++
++
+
++
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++ +
+
+
+
+
+
++
+
+
+
+
++
+++
+
++
+
+
+++
+
+
+
+
+++
+
++
+
++
+
++
++
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+ ++
+++
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+ +
+
+
+
+
+
+++
+
+
+ ++
+
+++
+
+
+
+
+
+
+
+++ +
++
+
+
++
+
+
+
+
+
+
+++++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
++++
+
++
+
+
+++
+
++
+
+
++
+
+
+
+
+
++
+
+++
+
+
+
+
++
+
+
+
+++
++
+
+
+
+
+
+
+++
+
+
+++
++
+
++++
+
++
++
+
+
+ +
+
+
+
+
++
++
++
++
+
+
+
+
+
+
+
++
+
+
+
+
++
+
++
+
++++
+
+
+
++
+++
+
++
+++
+
+
++
+
+++
+
+
++
++
+
++
+
+
+
+
+
+++
+ +
+
++
++
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
++
++
+
+
+++
++
++
+
+
+
+
+
+
++
+
+
+
+
++
++
+
++
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
++
+
++
+
+
+
+
++
+++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+ +
+
+
++
+
+
++
+
+
+
+++
++
+++++
+
+
+
++
+++++++
+
++
+
+
+
+
+
+
+ +
+
+ +
+
+
+
++
+
+
+
++
+
+
+
++
++
+
+
+
+
+
+
++
+
+
+++
+
+
+
+
++
+
+
+
+
+
+
++
+
++
+
+
+++
++
++
+
+
++
+
+
+
+
+
++++
+
+
++
+
+
+
+
++
+
++ +
++
+++
+++++
++
+
+
+
+
+
+
+
+
+++
+++
++
+
+
+
+
+
++
+
+
+
++
+
+
++
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+++
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+++++
+
++
+
++
++
++
+
+
++
+++
++
+
++
+
+
++
++
+++
+++
++++
+
++
+
+
+
+
+
+
+
++
+
+
++ ++
+
+
++
+
+
++
+
+
++
+
+
+
+
+
++
+
+
+
+++++
++
+
+
+
+
+++
++
+
+
+
+
++
+
+++
+
+++
+ +
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
++
+
++
+
++
+
++
+
+
+
++
+
+
+
+
+
+
+
++
++
+
+
++
+
+
+
+
++
++
+
+
++
+
+
+
++++
+
+
+++
+
+++
+
+
++
++ ++
+
+
++
+
+
+
+
++
+
+
++
+
++
+++
++
+++ +
+
++
+
++
+
+
+
+
+
+
+
+
++
+
++
++
+
++
+
+
+
+++
+
+
++
++++++
++
++
++
+
+
+
+
+
+
++
+ ++
+
+
+
+
+
+
+
+
+
+
+
+
++
++
+++
+ +++
++
+
+++
+
+
++
++
+
+
+
+
+
++++
++
++
++
+
+
+
+
+
+
++
+
+++
+
+
+
+++
+
+
++
+++
+ +
+
+
+
+
+
++
+
++
++
+
++++
+
++
+
+
+
++
++
++
+
+
++
++
+
+
+++
++
++
+
+
++
+
+
+
+
++++
+
+
+
+
++
+
++
+
+
++
+
++
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
++
+
+
+++
++
++
++
+++
+
+
++
++
+++
+
++
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
++
++
++
+
+
+
+
+++
+
+++
++
+
+
+
+
+
++
+++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+++
+
+
+++
+
+
++
+
+
+
+
++
+
+++
+
+
+
+
+
++
++ ++
+
++
++
+
++
+
++
+
++++
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
++
+
++
+
+
++
+
+
+
++
+
++
+
++
+++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
++
+
+
++
++
+
+
+
+
++++
+
+
++
++
+
+
+
+
+
++
+
+
+
++
+
+
+
+
++
+
+
+
++
+
+
++
+++
+
+
++
++
++
+
+
+++
+
+
++++
++++
+
+
+
+
+
++
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+ +
++
++
+
+
+
+
+ ++
+++
+
+
+
++
+
+
++
+
+
++++
+
++
+
+
++
++
+
++
+++++
+++
++
+
+
++
++
+
++
+
+
+
+
++
++
+
+
++
+
++
+
+
+
++
+
+
+++
+
+
+
+
+
++
+
++
+++
+
++
+
+
+
+
+
++
+
+
+
++
+
+++
+
+
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
+
+++
+
++
+
++
+
+++
++
+
++
+
+
+
+
+
+++
++
++++
+
+
+
++
+
++++
+
+
+
++
+
++
+
+
+
++
+
+
++
+
++++
++
++
++
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
++++
+
+
+
+
+
+
+
+
++
+
+++
+
+
+
+
++
+
+
++
+
+
+
++
+
+
+
+
+++
++ +
++
+
++
+
++ +
+
+
+
+
+
+
++
+
++
+++
++
+
+++
+
++
+++
+
+
+
+
+
+++
+
+++
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
++
+++
+++
+
+
+
++
+
+++
+
+
++
+
++
+
+
+
++
++
+
+
+++
+
+
+
+
+
++
+
+++
+
++
++
+
+
+++
++
+
+
+
+
+
++
++
+++
+
+++++
++
+
+
++
+ +
+
+
+
+
+
+
+
+
++
++
++
+
+
+++
+
++
++
+
+
+
+
+
++
+ +
+
+
+
+
++
+
+
++
+
+
++
+
+
+
++
+
+
+
++
+
+
+
+++
+
+
+
+
++
++
+++
+
+
++
++
+++++
++
+
++
++
+
+
+
+
+
+
++
+
+++
+
+++
++
+
+
+
+
+
+
+
++
+
+
+
++
+
++++++
+
+++
+
+
+
+
++
+
++
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
++
+
+
+++
+
++
+
+
++
++
+
++
+
++
+
+
+
+
+
++
+ +
+
+
+
++
+
+
+
+
+
+
++
+
+
++++
+
++
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+++
+
+
+
+
+
+
+
+
+ ++++
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
++
+++
+
++
+
+
++
+
++
++
++
+
+
+
+
+
++
+
+
+
+
+
+
+++
+
++
+
+
++
+
+
+
+
+
++
++
+
+
++
++ +
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
+
++
+
+
+++
++
+
+
+
++
+
+
++
+
+
+ +
++
++
+
+
+
+
+
+
+
+
++
++
+
+
++
++
+
++
+
+
+
+
++
+
+
+
++
+++
+
+
+
+
+
+
+
+
++
+
++ ++
++
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
+
+
++
+++
+
+
+
+
+
++
++
+
++++
+
+
+
++
+++
+++
++
+
+
+
+
+
+
+
+
++
+
++
+++
+
++
+
++
+
+
+
+
++
+
+++++++++
+
+
+
+
++++
++
+
+
+
+++
++
+
+
+
+
++
+
++
+
+
+
++
+++
+++
+
+
+++
+
+
++
++
+
+
+
+
++++++
+ +++
+
+
+++
+
+
++
+
+
+
++
+++
+
+
+
++
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+++
+
++
+
+
+
++++
+
+++
+
+++
+
+
++
+
+
++++
+
++
+
++
+
++++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+++
++
++++
++
+
+
++
++
+
+++
++
+
+
+
++
+
+++
+
++
++
+
+
+
+
+
+
+
+
++
+
++++
++
+
+
+
+
++
+++
++
+
+
+
+
+
+++
+
++
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+++
+
+
++
++
+
++
++
++
++
+
++
+
+
+
+
++
+
+
++
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+++
++
+
+++
+
+
++
+
+
++
+
+
++
+++
+
+
++
+
+++ +
+
+
++ +++++
++
++
+
+
+
+
+
+++
+
++
+
+
++
++
+
++
+++
+
+
++
+
+++
+
++
+
++
+++
++
+
+
+
+
+
++
+
+
++
+
+
+
++
+
++
+
+++
+
++
+
+
+++
++++
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
++
+
+
+
+
++
+
++
+++++
+
+
+
++
+
+
+
+
+
++
+
++
+
+
+
++
+
+
+
++
++
+
++
+++
+
++
+
++
+
+
++
++
+
+
++++
+++++
++
+
++
+
+
++
+
+
+
++
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
++
+
+++
+
+++
+
+
+
+
++++
++
+++
+
+
+
++
+
++
+
+
+
++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++++
++
+
+
+
+
+ +
++++
+ +
+
+
+
+++
+
+
+
++
+
+
+
+++
+
+
+
+++
+
+
+
+
+
+
+
+
+
+++
+++
+
+
+
+
+
+
++
+++
+
+
+
+
+
+
+
+
+
+
++
+
++
++
+
+
+++
+
+
++
+++
++
+
+ +
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
++
+
+
+
+
++
+
+
++
+
+
+
++
+
+
+
+++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+++
+
+
+
+
+
++
+
++
++
+
+
+++
++
+
+
+
+++++
+
++
+
++
+++
+
++
+
++
+
++
+
+
+++
+++
+
+
+
++
+
+
+
++
++
++
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+++
+
+
+
++
+
+
++
++
++
+
++
++
+
++
+++
+
++
+
+++
+
+
+++
+
+
+++
+
+
++++
+
+
+
+
+++
+
+
+
++
+
++
+
+
+
++
+
+++
+
+
+
+
+
+
+
++
+
+++
+
++
+
+
+
+
+
++++
+
++
+
+
+
+
+
+
++
+++
++
+
+
+
+
++
+
+
++
+
++++
+
+
+
+
+
+
+ +
+
++
+
+
+
+
+
+
++
+
+
+++ +
+
++
+
+
+
+
+
++
++
+
+
+
+
+
+
++
+
+
++
+++
+
+
+
+++
++
+
++
++
+
+
++
+
+
+++
+
+
+
+
+
+
++ +
+
++
++
++
+
+++
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+++
++
+
++
+
+
+
+
+
++ +
+ ++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
++
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++
++++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+ ++
++
+
+++++
++
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+++
+
++
+
++
+
+
+
++
++
+
+
+
+
+
+
+
+
+++
++
+
+
++
+
+
+
+
+
+
+++
++
++
+
+
+
++
++
+
++
+
+
+
+
+
+
+
+
+
+
++
++++
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++++
+
++
+
+
++
+
++
+
++
++
+
+
+
+
+
+
+
++
+
+
+
+++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
++
+
+
+
+
++
+
+
+
+++
+
+
+
+++++
+
+
+
+++
+
+ +
+
+
++
+++
+
++
++++++
+
+++
+
+
+
++
+
++
++
++
++
+
+
+++
+
+
+
+
+
+
++
+
+
+
+
+
+
+++
+
+++
+
+
+
++
+ ++
+
+++
+++
+
+
+
+
++
+
+
+
+
+
++
+
++
+ ++
+
+
+
+
++
+
+
++
+
++
++
+
+
++
+
+
+
++
++
+
+
+++
+
+
+
+++++
+
+
+
+
+
+
+
++
+
+
+++
+
+
+
+
+
+
+
+
+
+
+++
++
++
+
+++
+
+ ++
+
+++
+
+ +
+ +
+++
+
+
+
+
+
+
+
+++
+
+ ++
+
++
++
++
+
++
+
++
+
+
+
+
+
++
+
++
+
+
++
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+++
+
++
++
+
++
++
+
+
+
++
+
++
+
+++
+
+++
+
+
+++
+
+
+
++
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
++
+
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
++
+
+
+
++
+
+ +
+
++
+
+++
+++
+
+
+
+
++
+
+
+++++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+++
+
+
+
++
+
+
++
++
+
+ ++
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
++
+
++
++
++
+
+
+
+
+++
+
++
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+ +
+
+
++
++++
+
++
+
+
+
+
+++
++
+++
+
+
+
+
+
++
++
++
++++
++
+
+
+
+
+
+
++
+++
+
+
+++
++
+
++
+
+
++
+
++
++
+ +
+
+
+
+
+
+
+++
+
+
+
+
+
+
+++
+
+
+ ++
++
+
+
+
++
+
+
+
+
+
++
+
+
+++
+
+
+
+
+
+
+++
+
++
+
+
+
+
+
+++
+
+
++++
+
+
+
++
+
+++
+
++++
+
+
+
+
+
+
+
++
+
+++
+
+++
+
+
+
+
++
++
+
+
++ +
+
+++
++
+
++
+
++
+
++
++
+
+ +
+
++
+
++++
+
+ +
+
++
+
+ +
+
+++
+
+
+
+
+++
++
+
+
+
++
+
++++
+
+
+
++
+
+
+
+
+
++
+
++
++
+
+
++
+
++
+
+
++
+
+
+
++
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
++
+
+
+
+
+
+
+++
+
+
+++
+
++
++
+
+
+
++
+
+++
+
+
+
+
+
+
+
++
++
+
+
++
++
+
++
+++++
++
+
+
++
+
++
+ +
+
++
++
++
+
+
+++
+
++
+ +
+++
++
++
+
++
+
+
++
+
++++
+
+
+
+
++
+
++
++
+
+
+
+
++
+
+
++
+
++
+
++
++
+
+
+
+
+
+
++
+
+
+
++
+
+
++
+
+
+
++++
++
+
+
++
+
+
+
+ +
++
+
+
+
+
+++
+
+
+
+
+
++
++
++
+
++
+
++
+
++
+
+
+++
+
+
+
+
+
+
+
+
+
++
++
+
+
+
++
+
+
+++
+
+
++
+
+
+++
+
++
+
+
++
+
+
++
+
++++
++
++++
+
+
++
++
+
+
+
++
++
++
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
++
+
++
+
+
+
+
+
+
+++
+
+
+
++
+
+
+
+
++
+
+
+
+
++
+
+
++
+
++
+
++++
+
+
+
+
++
+
+
++
++
+
+
+
+++
+
+
+
+++
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
++++
+
++
+
+
++
+
+
+
+
++
++
+
+
+
++
+
+
++
+++
++++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+++
+
+
+
+
+
+
+ ++
++
+
+
+
+
+
+
++
+
++
+
++
+
+
+
+
+
++
++
+
+
+
+
+
++
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+
++ +
++
+++
++
++
+
++++
+
++
+
+
+
+ +
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
++
+
+
++
+
+
+
+
++
+
++
+
++
++
+
+++++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+++
+
+
+
+++
++
+
++
++
++
+
+
++
+
+
+
+
+
++
+
+
+
++
++
+
+++
+
+
++++
+
++ ++
++
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
++ +
++++
++
+
++++
+
+
++
+
+
+ +
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++
++
+
++++
+
++++
+
++
+
+
+
+ +
+
+
+
++
+
++
+
++
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+++
+
++
+ +
+
+
++
+
++
+
+
++
+
+
+
+
+
+++
++
+
+
+
+
++
+
+
++++
++
+
++
+
++
+
+
+
+
+
+
+
+
+
++
++
+
+
++
+
+++
+
+++
+
++
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+++
+
++
++
+++
+
+
+
++
+
++
++
++
+
+++
+
+
++++
+
+
+
++
+
+
++
+
+
++
+++
+
+
+
+++
+
+
+
++
+
+++
+
++
+
++
+
+++
+
+
++
+
+++
+
+
+
++++
+++
+
++
+
+ +
+
++
++
++
+
++
+
++
+
+
+
++
++
+
++
+
++
+
+
++
+ +++
+
++++
+
+
++
+
++
+
+
+
+
+++
+
+
+
+
++
+++
+
++
+
+
+++
+
++
++
++
++
++
+++
+
++
++
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
++
+++
+
+
++
+
+
+
++
+
++
++++
+
+
+
+++
+
+
+
++
+
+
+
+
++
++
+
+
+
++
++
+
+
++
+
+++
++
+
++
++
+
+++ ++
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
++
+
++
++++
+
+
+
++++
+
++++
+
++
+
++
+
+
+
+
+
+
+
+++
+
+
++
++
+
++
+
++
++
+++
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
++
+
++ +++
+++
+
+
+
+
+++
+
+ +
+
+
++
++
+
+++
+
+
+
+++
+
++
+
+
++
+
++
+
+
+
++
+
++
+++++
+
+
+
+++++++
+
+
+
+
+
++
++
++++
+
+
++
+++++
+++
+
+
+
+++
+
+
+
+
++
+
++
+++
++
+
++
+
+
+
+
+
+
++
++
++
+
+
++
+++
+
+
+
+
+
+++
+
+
++++
++
+
+
+
+
+++
++
+
+
+
+
+++
++
+
+++
++
++
+
+++
+
+++
+
+
+
++
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
+++
+
++
+
++
+
+++
+
+
+
++
++
++
+
+++
+++
++
+
+
+
+
+
+
+
+
+
+
+
+++
+
++
+
++
+
+
+++
+
+
+
++
+
++
++
+
+
+
+
+
++
+
++
+
+
+
+
+
++
+
+
++
+
+
++
+
+
++
+
+
+++
+++
+
+
++
+
+
++
+
+
+
+
+
++
++
+
+
+
+
++
+
++
+++
+
+
+
+
+
+
+
+
+
+ +
+++
+
+
++
++
+
+++
++ ++
++++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+++
+
+
++
+
+
++++
+
+
+
++
+
++++
+
+
+
++
++
+++
++
+
++
+
++
+
+
+
+
++
+
+
+
+
+++
+
+
+
++
+
+
+
+++
+
+
++
+
+
+
++
+
++
++
+
+
+++ +
+
++
++
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+++
+
+
+
+
+
+++
++
+
+
+
++
++
+++
++
+
++
++
+
++
+
++
+
+
+
+
++
++
+
+
+ ++
+ +
+
+
+
++
++
++
+++
+
+
+
+
++
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++ +
+++
+
+
++
++
+++
+
+
+++
++
+
++
+++
+
+
+
++
+
++
+
++
+
++
+
+
+
++
+
+ ++
++
++
+
+
+
++
+
+
++
++
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+++
++
+
+
+
++
++
++
+
+
+
+
+
+
+
+
++
+
+++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+++
+
+
+
+++
+
+
+
++++
+
+
+
+
+
+
+
+
+
+++
+
+
++++++++
++
+
+
+++++
+
++
+
+
+
+
+
+
+
+
+
+++
++
++
+
+
+
+
++
++
+
++
++
+
+
+
++
+
+
+
+
++
++
+
+
+
+ +
+
+
+
++
+
+
++
+
++++
+
+
+
++
+
+
+ +
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+
++
+
+
+
+
+
+
++
+
++
+
+
+
+
++
++
+
+
+++
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+ +
+
+
++
++ +
+
+ +
+
+
+
+
+
++++
++
+
++
++ +
+
+
+
+
++
+
+
+
+++++++
+
+++
++
+
+
++
++
+
+
+
+
+
+
+
+
++
+
+
+
+
++++
+
+
+
++
+
++
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+++
+
+++
+
++
+++++++ +
+
+++++
++++
+
+
+
+
+
+
+
+
+
+
+++
+
+
+++
++++
+
+
++++
++
++
+
+
++
+
+
+
++
+
+
+
+
++
+
++
+
+
+
++ +
+
+
+++
+
++
+
++
++
+ ++
++
++
+
+
++
+
+++
+
+++
+
+
+
+++
+
+
+
++
+
+
+++
+
+
++
++
++
+
++
+
+
+
++
+
+
++
+
+
++
+
++
+
+
+
+
+
+
+++
++
++
++
+
+
++
+++
+
++++
+++
++
+
+
+
++
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+++
+
+
+ +
+
++
+
++
+
+
+
++
++
++
++
++
+
++
+
+
+ ++
+
+
+
+
+
+
+
++
++
+
+
+
++++
+
+
+
+
+
+
++
++
+
+
+
++
+
+
+
+
+
+
+
+++++
+++
+
+
+
+
++
+
+
+
+
+++
+
+
+
+
+
+
++
+
+
+
++
+
+
+++
+
++
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
+++
++
+
+
+
+
++
+
+
+
+
+
+
+
++
++
+
++
+
+
+
++
+
++
+
+
+
+
+
+
++
+
+
+++
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
++
+
+
+
++
+
+
+ ++
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+++
++
++
+
++
++
+++
+
+
++
+
+
+
+
+
++++
+++
+
+
+
+
++
++
++
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
++
+
+
+
++
+ +
+
+++
+++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++++
+
+
+
++
+
++
++
+
+
+
+
++
+
+
++
+
+
+
+
+
+
++
+
+
++
++
+
++
+
+
+
+
++
+
++
++
+
+
++++
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+ ++
+
+
+
+
+++
+
+++
+
+
+
+
+
+
++
++
+
+
++++
+
++
+
+
+
++
+
+
+
+
+
+
+
++
++
++
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
++
+
+
+
++
++
+
+
+
++
++
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
+
++
+
+
+ ++++
+
++++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+++
++
+
+
+
+
++
+
+
+++
+
+
+
+
+
+
+
+
+
++++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+ ++
++++
++++
+
+
+
++
+
++++
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
++
+
++
+++
+
+
++
+
+
++
+
+
+
+
+
+
+
++
+
+++
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+++
++
++
++
+
++
++
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
++
+++++
+
+
++
+
++
+
++
++
++
+
+++
++
+
+
+
+
++
++
+++++
+
+
+
++
+
+
+
+
++
++
+
++
+
+
+
+
+
++
+
+
+
++
+
++
+
+
++
+
+++
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
++
+
++
++
++
+
+
+
+
+
+
+
++
+
+++
++
+
+
++
+
+
++
+
+
+
+
+
++
++
+
+
+
+
++
+
+
+++
+
++
+
++
++
+
++
+
+
+
+
++
++
+
+
+
+++
+
+
+
+
+
+
++
+
+
+++
+
+++
+
+
+
+
+
+
+
+
+++ +
+
++++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
++
+
+++
+
+
++
+
+
++
+
+
+
+++ +++
++
++
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+++
+
++++
+
++
+
+
+
+
++
+
+
+
+
++++
++
++
+
+
+
++
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
++
++
+
++
++ +
+
+
+
+
+
+
+
++
+
+ +
+
+
++
++
+
+
+
+
+
+
+
+
+
+++
++++
+
+
+
+
+++
+
++
+
+
+
+
+
+
+
++
++
++
++
+
+
+
+
+
+++
+
+
+
++
+++
++
+
+
+
+
+
++
++
+
+
++++
+
+
+
+ +
+
+
++
+
+
++
++
+++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+++
+
++++
+
+
+
++
++
+
++
+
++
++
+
+
+
++
+
+
+
++
+
+
+
+
+
++++
+
++
+ ++ +
++
+
++
++
+
+
+
++
+
++
+++
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+++
+
+
+
+
+
++
+
+
+
+
+
++
+
+
++
+
+
+
+
++
+
++
++
+
+
+++
++
++
+++
+
+
+++
+
++
+
++
+++
+++
+
+
++
++
+++
+
+
++
+
++
+
+
+
++
+++
++++
+
+
++
+
+
++++
+++
+
+
++
+++
+
+
+
++
+
+
+
+
++
+
+
++++
+
+
+
+
+
++++
+
+
+++
+
++
+
++
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
++
+ ++
+
++
++
++
++
+
+
+
+
+
+
+
++++
+
++++
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+ ++
++
+
++++
+
++ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+++
++++ +
++
++
+
++
+
+
+
+
+
+
++
+
++
+
++
+
+
+
+
+
+
+
++
+
+
++
+++
+
+
+
++
+
++
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
++
++
++
++
+
+
++
+
+
+
+
+
+
+
++
++
+
+++
+
+
++
+
+
+
+
+
++
++
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+++
+
++
++
+
+
++
+
+++
+
+
+
+
++ +
+
+
+
+
+
++
++
++
+
+
+
+
+
++
+
++
+++
+
+
++
+
+
++
+
+
++
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+++
+ ++
+
+
+
++
+
+
+
++
++++
+++
+
+
+
+
+
+
+++
+
+
+
+
++
+++
++
++
+
+
+
+
+
+
+
++
+++ +
+
++
++
+
+
+
+
+
+++
+
+
++
++
+
+
+
+
+
+
+
++
+++
+
+
+
+
++
+
+
+
+
+
++
+
+
+ ++
+
+++
++
+
++
+++
+
+
++
++
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
++
+
+
+
+
+
+++
+
+
+
++
++
++
+
++
+++
+
++
+
+
++
+
+
+
++
+
+
++
++
+
+
+++
++
+ +
+
+
+
+
+
++
+
++
+
+
+
+
+++
+++
+
++
+
+
++
++
++
+
+
+
++ +
+
++
++
+
+
+
+++
+
+
+
+
++
+
++
++
+
+++
+
+
+
+
+
+
++
++
+
+
++
+
++
+
+
++ ++
++
+
+
+
+
+
+
+
+++
+
++
++++
+++
+
++
++
+
+
+
+
+
++
++
+
++
++
+
+++
+
+
+
+
+
+
++
+
+
+++
++
++
+++
+
+
+
+++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
++
+
+
+
++
++
++ +
+
++ +
+
+
+
+
++
+
++
+
+
+
+
++++
++
++
+
+
+
+
+
++
+
+
++
+
+
+
++
+
+
+
++++
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+ ++
+
+
++
+
+++
+
++
+
+++
+
+
+
+++
+
+
++
+
++
+
+
++
+
+
+
+++
+
+
+ +
++
+
+
++
+
+++
+
+++
+
+
++++++
++
+
+
+
++
+
+
+
++
+
+++++
+
+
+
+
++ +
+
+
+
+
+
+
++
+
+
+
++
+
++++++
+
+
+
+
+
+
+++
+
+
+
++
+
+
+
++
+
+
+
+++
+
++
+
++
+
+
+
+
+
+
+
++
+
+
+
+
++
+
++
+
+
+
+
++
++
++
++
+
+
+
+
+
+
+
+
+
++++
+
+
+
+
+
+
++
+
+
+++
++
++
++
+
+
+
+
+
++
+
+
+
+
+
++++
+
+
+
++
+
+
+
++
+
+
+
+
++
+
+
++
+
+++
+
+
+
+
+
+
+
+
+
+++
++
+
+
++
+
+
+
+++
+
++
+
+
++
+
+
+
+++
++
+
+
+
+
+
+
++++
+
+
+
+
++
+
+
+++
+
+
++
+
+
++++
+
+
+
+
+
+
+ +
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+
++++
+
+
+
+++
+
++
++
++
+
+
+
++
++
++
+
+
++
+
+
+++
+
+ +
+
+
+
+
+
+
++
+
++
+
++
+
+
+
++
++
+
+
+
+
+
+
+
+
+
++
++
+++
+
++
++
+
+
++
+
++
+
++
++
+
+
+
++
++++
+
+
+
+
+
+
++
+++
+
+
++
++
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+++
+++
+
+
++
++++
+
+++
+
+
+
++
+
+
++
+
+
++
+
+
+
+
++ +
+
+
+
++++
+
+
++++
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+++
+++
+++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
++
++
+ +
+
+
+
+++
+++
++
+
+
+
+
+
++
++
+++
+
+
+
++
++
+
+
+
+
+
+
+
+
+
++
++
++
+++
+
+
+
+
+++
+
+
++++
++
+
+
+
+
++
+
+
+
+
+
+
+
++
+
+
++
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+++
+
+
+
+
++
+
++
++
++
+
+
+
++
+
+
+
++
+++
+++
+
+
+++
+
+
+
++
+
+
+++++
+
++
++
++
+
++
++
+
+
+
+
+
+
+
+
+
+
++
+
+
++++
+
+
+
+
+ +
++
+
++
+
+
+
+
+++
+
+
++
+
++
++++
+
+
+++
+
++
++
+
++
+
+
+
+++
++
+
+ +
+ +
+
++
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+++
++
+
+
+
+
+
+
+
++
+
+++
++
+
+
+ +
+
+
+
++
+
+
+
++
+
+
+
+
+
+++
+
+
++
++
+
+
+
+
+
+
+
+
+
+
++
++
+++ +
+
+
+
+
+
+
+
++
+
+ +
++
++
+
++
+
+
++
++ ++
+
++
+
++
+
+++
++
++
+++
+
+
+
+
+
++
+
+
++
+
+
++
++
+
++
+
+
+
+
+
+
+
+
++++
+
++++
++
+
+
+
++
+++
+
++
++
++
+
+
+
+ ++
+
+
+
+
+
+
+
++
++
++
+
++
+++
+++
+++
+
+
+
+++ ++
+
+
++
+
+
++
+
+
+
++
+++
+
+
++++
+
++
+
+
+
++
+ +
+
+
++
++ +
+
++
+
+
+
++
+
+
++
+
+++
+
+
+
+
+++
+
++
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++++
+
+
+
+
+
+
+
+
++
+
+
+
++
++
+
+
+
+
+
++
+
+++
+
+
+
+
++
+++
+
+
+
+
+
++
+
++++
+
+
+
+
+++
+
+
+
++++
+
+
+
++
++
+
+
+
+
+
+
+
+
+
++
+ ++
+
+
+
+++
+
+
+++
+
+
+
+
++
+
+
+
+
++
+
++++
++
+
+
+
++
+++
+
+
+
+
+
+
+++ +
+
++
++
+
+++
+
+
++
+
++
+
+
++++
+
++ +
++
+++
+
+++
+
+
++
+
+
+
+
+++
++++
+
+++
++
++
+
+
+
+
+
++
+
+
+
+
++++
+
+
+
+
+
+
+
++
++
++
+
++
+
+
++
+ +
++
+++
++
+
+
++
++
++
++
++
++
++
++++++
++
+++
+
+
+
++
+
+
+
+
+
++
+
+
++
+++++
+
+
+++ +
+
+
+
+
+
+++
+
+
++
++
+
+
++
+
++
+
++++++
+
+
+
+
+
+
+
+
+++
+
+
++
+
++
+
+
++
++++
++
+
+++
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+++++
+++
+++
+
+++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
++++
+++
++++
+
+
+
+
+
+++++
+
+
+
+
+
+
++++
++
++
+
+
+
+++
+
+
+
+
+
+++++
+
+
+
++
+
++
++
+
+
++
+
+
++
++
+
+
+
+
++
+
+
+
+
+
++
+
++ +
++
+
+
+
++
+
+
+
+
++
++
+
++
+
+
+
+
+
++
+
++
++
+
++
+
+
+
+
+
+
+
++
+
+
+++
++++++
+++
+ +
+++
+
+ + +
+
+
+
+
+
+
++
++
+
+
++
++
+
+
+
+
+
+
++ +
+
+
+
+
+
++
+
+
+
+
+
+
+
++
++
+
++
+
+
+
+
+
+
+
++
++
+
++
+
++
+
+
+
++
+
++
+
++
+
+
+
++
+
+
+
+
+
+
++
+
+++
+
+
+
+
++
+
+++
+
+
+++
+
+
+
+
+
+
+
+
+
+
+++
+ +
+
++
+
+
++
+
+
+
+
++
++
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
++
+++
++
+
+
++
+
+
+
+++
+
+++
+
++
++
+
+
+
+
+
+++
+
+
+
++
+
+
+
+
+
+
+
++++
+
+
++
++
+
+
++
+++
+++ +++
+
+
++
+
++
++
+
+
+++
+
+++
++
+
++
+++
+
+
++
+ ++
+
+
+
+ +
+
+++
+
+
++
+
++
+
+
+++
+
+
++
+
++
+
+
++
++
++ +
+
++
+
+
++
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+++
+
+
+
+
+
+
+++
++
+
+
++
+
++
+
+
+
++
+
+
+
++
++
+
+
+
+
+
++
+
+
+
+
++
+
+
+++
+
++++
+
++
+
+ +++
++
++
++
+
+
++++
+
+ ++
+
++
+
+
++
+
+
+
+
+
+++
+
++
++
+
+
+
+
+++
+
++
++
++
+
+++
+
++
+
+
+
++
+
+
+
+
+
+
+
++
++++
++
+
++
+
+
+
++
+
++
+
+
++
++++
+
+
+
+ ++++
+
+
+
+
+ +
+
+ +
++
+
+
+
++
++
++
++
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
++
+++
+
+
+
++
++
+
+
+
+++
+
+
+
+
++
+
+++
+
++
+
+ +
+
+
+
+
+
+
+
+
+
+
+++
+
++
++
+++
++
+
+
+++ ++
+
+
+
++
+
+
+
+
++
++++ ++
+
+ +
+
+
+++++
++
+
+
+
+
+
+
+
+
+
+++
++++
++
+
++++
++
+
+
++
++
+
++
++++
+
+++
+
+
+
+
+
+
+
+++
++
+
+
+
+
+
+
++
+
+
++
++
+
+
+
+
+
+
++
++
+++
++
+
+
+
++
+
++
+
+
+++
+
++
+
++
+
+
+
+
+
+
+
+
+
++
+
++++
+
+++
+
++
+
++
++
++
+
+
+
+
++
+
+
++
+++
+
+
+
+
+
++
+
+
++
+
+++
+
+
+
+
+
+
+
+++
+
+
+
++
+
++
+ +
+
+
++
+
+
+
+
+
+
++
++
+
++
+
+
+
+
++
+++
+
+
+
++ ++
+ +
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
+
++
++
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
++
+
++
++
+
+
++
+
+
+
+
+
+
+
+
+++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
+ +
+
+
+++
+
+
+ +
+
+++
++
+++
+
+
++
+
++++++
++ ++
++
++
+
+
+
+
+
++
+
++
+
++++
+
++
++
+
+
++
+
+
+++
+
++
+
++
+
++
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++++
+
+
+
+
+++
+
+
+
+
++++
++
+++
++
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
++
+
+
++
++
+
+
++++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
++
+
++
++
+
+
+
+++
+
+++
+
+
++
+
+++
+
+
+
+
+
++
+++
++
++
++
++
++
+++
+
+
+
+
+
+
+
+
+
++
+
+
+
++++++
++
++
++
++
+
+
+
+
+
+
+
++
++
+++
++
+
+
+
+
+
++
++
++
+
+
+
++++
+
+
+
+
+
+
++++
++
+
++
+
+++++
+
+++
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+++
++
+
+
+
+++
++
++
+
++
+
+
+
+
++
+
+
+
++
+
+
++
+
++
+
+
++
++ ++
++
+++
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
+
+++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+++
++
+++
+
++
++
+
+
+
+
++
+++
+
+
++++
+
+
+
++
++
++
+
++
++
+
+
+
+
+
+
+
++
++++
++
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
++
+
+
++
+
+
+++
+
+
+
+
+ +
+
++
+
+
+
++
+
++
+
+
+
++
+
+
+
+
+
+
++++++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
++
+
+ ++
+
+
+
+
+
+
+
++
+
+++
+++
+
+
+
+
+ +
+
++
++
+
+
+
++
+
+
+
+
+
+
+
++++
+
+
++
+
++
+
+
+
+
+
+
+
+
++
+
++ ++
+
++
+
+
++
+++
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
++
+
++
+
++
+++
+
+
+
+
+
+
+
++
++ +
+
+
+
+
+
+
+++
++
+
+
+
+
+
+
+
+
+
+
+
+
+++
++
+
+
+
++
+
+
+
++
+
+++
++
+
+
++
+
+
+
+
+
+
+
++ +
+
++
+
+
+
++
+
++
+
+++
++
+
+
+
+
+
+
++
+
++
+
+
+++
+++
++
+++
+
+++
+++
+
+
++
+
+
++
+
+
+
+
++
+
+
+++
++ +
+ +
++
+
++
+
+++
++++
++
+++++
+++++
+
+
+
+++
+
+
+
+
++++++
+
+
++
+
+
+
+
++
+
+
+
++++
++
+++
++
+
+
++
+
+
+
+
+
+
+
++
++
++
+
+
++
+
++
++
++
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+ +
+
+
+++
+
+
+++
+
+
+
+
+
++ +
+
+
+
+++
+
+
+
++++
++
+
+
+
+
+
+
+
+
+++
++
+
+
++
+
++
++
+
+
+
+
+
+
+
+
+
+
+
+ +
+
++
+
++
+
++++
+
+
+
+
+
+ +
++
+
+
+++
+
++++
+
+
++
+
++
+
+
+
++++
+
++
+++
+
+
+
+++
+
+
++
+
+
+
+
++++
+
+
+
+
+
++
++
+
+
++
+
++
+
+
++
+
+
+
+
+
+
+
+
++
++
+
+
++
+
+
++
+
+++
+
+++
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+ +
++
+
+
+ ++
+
+
+
++
+
+++
+
+
+++
+
++
+
+
++
+++ ++++
++
++
+
+++
++
+
+
+++
+++
+
+
+
+
+
+
+
+++
++
++
+
++
++
+
+
+
++
++
++
+
+
+
+ ++
++
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
++
++
+
+
+
+
+++++++
+
++
++
+
++++++
++
+
+
+
+
+
+
+++
+
+
+
+
++
+
++
+
++
+
+
++
+
+
+
+++
+ +
+
++
+
+
+
+
+ +
++
++
++
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+++
+
+++
++
+++
++
++++
+
+ ++
+
++
+
+
+
+
++
+
+
++
+
+
+
+
+ +
+
++
+
+
+ +
++
++
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
++
+++
+
+
+
+
+
+
++++
++
+
+
+
+
+
+
+
+++
+
+++
++++
+ ++
+
+
+
+
+
+
+
+
++
+
+
+
+
+++
++
+
+
+
+
++
++
+
+++
+ +++
+
+
++
+
+
+
+
+
+
+
++
+++
+ +
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
++
++
+
++
++
+
+
+
++
++
++
+
+
+
+
+
+
+
++
+++
+
+
+
++
+
+
+
+
+
+
++
+
+
++
+
++
+
+
++
+
+
+
+
+
++++
+++
++
+
+
++
+
+
+
+
+
++
++
++
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
++
+++
++
+
+
+ +
++++
+
+
++
+
++++
++
+
++
+
++
++
++
+
+
+
++
++
+
++
+
+++
++
+
+
+
+
+
++
++
++
+
+
+
++
+
+
+++
+
+
+
++
+
+
+++
+++ +
+
+
+
+
+
++
+
+
+ +
++
+
+
++
+
++
+
++
+
+
++
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+++
+
+
++
+
+
+
+
+
+
++
+
+
++
+
+
++
+
+
+
+
+
++
+
+
+
+
+
+
+
++
++
+
+
+
++
+
++
+
+++ +
+
++
+
++
+
+
+++
+
+
++
++
+
+
+
+
++
++
+
+
++
+++
+
++
++++
+
++
+
+
+
+++
+
+
+
++
+
+
++
+
+
++
++
+
+
++
+
+
++
++
++
+
+
+
+ +
+
+
+
++
+
+ +
+
+
+
+
+
++
+
+
+
+
+
++
++
+
++
+
++
+
+
+
++
+
+
+
+
+
+
++
+
+
+
++
+
+
++
++
+
+
+ +
+
++
+
+
+
+
++
+
+
+
+
+
++
++
+
++
++
+++
+
++
+
++
+
+
+
++
+
+
+
++
+
+
+
++
+
++
+
+
+
++
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
++
+
++
+++
+ ++
+++
+++
+
++
+
+++
+
+++
++
++
+
+
+
+
+
++
+
++
+
+
+
+
+
+
++
+++
+++
+++
+
+
+
+
+++
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+++++
++
+
++
++
+
++
+
++
+++
++++
+
+
+
++
+
+
+
+
+
+ +
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+ +
+
++
+
+
+++
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+++
++
+
+
+
+
++
+
+++++
+
+
++
++
+
+
+
+
+
++
+
+
+
+
+
+ +
+
+
++
++
+
+
+ ++
+
+
+
++
++
+
++
+++
+
+
+
+
+
+
++
+++
+
+++
+++
+
+
+
++++
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+++
+
++
++
+
+
+
++
++
+
+
+
+
++
++++
+
++
+++++
+
+
+
++
+
+
++++
+
+
+
++
+
+++
+
++
++
+
++
+
+
+
+
+
++
++++
+
+
+
++
+
++
+++
+
+++
++
+
+
+
+
+
+
+
+
++++
++
++
+
+
+
+
+
++
+
+
+++
+
+++
++
++
+
+
+
+
+
++
+
+++
+
++
+
+
+
+
+
+
+++
+
+++
+++
+++
+
+
++
+
+
+
+
+
+
++ +
+
+
++
+
++
++
++
+
+
+ +++
+
++
+++
+
+
+
++
+
+
+++
+
+
+
++
+
++
+
+
++
++++
+
+
+
+
+
+
+
+
+
+
+
++
++
+
+
+
++
+
+++
+++++
+++
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+++++
+
+++
+
+
++
+
++
+
+
+
+
++
++
+
+
++
++
+
+
+
+
++
++
+
+++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+++
+
+
++
+
+
++
++
+++
+
+
++
+
+++ +
+
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+++
+
++
+
+
+
++
++
+
+
+
++
+
+
++
+
++
+
+++
+
++
+
+
+
+
+
++
+
+
++++
++
+
+
+
++
+
+
++++
+
+
+
++
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
++
+
++
+
+
++
+
+
+
+
+
++
+
+
+
+
+++
++
+
+
+
+
++
+
+++
++
++
++++
+
+
++
+
+
++++
++
+
+
+
++
+
+
++
++
+
++
+
++
+
+
+
+
++
++
+
+
+
++
+
+++
+
+
+
+
+
+
+
+
+
++
++
+++++
+
+
+
+
++
+
+
++
+
+
++++
+
+
+ +
+
+
+
+
+++
++
++
+
+
+
+
+
++
+
++
++
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+
++
+
+
+
+
+
+
+
+
++
+
+
++
++
+
+
+
+
+
+
++
+
+
++
++
+
+
++
+
+
+
+
+
++
++
+++
++++
+
+
+
+
+
++
+
+++
++
++
+
+
+
+
+
+
+
+
+++
+++
+
+
++
+
++
+
+++
+
+
++++
+
+
+++
+
++
+
+
+
+
+
+
+
+++
+
+
+
++
+++
+
+
+++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
++
+
+
+
+
++
+
++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
++
+
++
+
++
+
+++++
+
+
+
+
++
++
+
+
+
+
+
++
++
+
+
++++
+
+
+
+++
++
+
++
+
+++
+
+
+
+
+
+
++
++
+
+
++
++
+
+
+
++
+
+++
+
+++
+++
+
++
+
++
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+++
++
++
+
+
+
+
++
+++
+
+
++
+
+
+
++
+
++++
+
+
++
+
+
++
+
+
+
+
+++
+
++
+
++
+
+
+
+
+
+ +
+
++
+
+++
+
+
+
+
+
++
+
+++++
+
+
+
+
+
+
+ ++
+
+
+
++
++
++
+
+
+
++
+
++ ++
+
+
+
+
+
+
++
++
+
+
+
+
+
++
+
+
+
+
++
+
+
++
+++
+++
+
+
+
+++
+
+
+
+
+
+ ++
+
+
+
+
+
+
+
+
+
++
+++
++
+
+
+
++
++
+
+
+
+
++
+
+
+
+
+
++
+
+
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+++ +
+
+
+
+++
+
+
+
+++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
++
+++
+
+
+
+ ++
++
+
+
+++
+
+
++ +
+
+
+++
++
+
+
+
+
+
++
+
+
+
+++
++
+
+
++
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+++
+
+
+
+
+
+++
+
++
+
+
++
++
+
+
+
+
+
+
+
+
+++
+
++
++
++
++++
++
+
++
+
+
++
+
+++
+
+
+
++
++
+
+
+
++
+
++
++++
+
+++
+
+++
+
+
+
+
+
+
++
+
+
++
+++
++
+
+
++++
+
+
+
+
+++
++
+
++
+
+
+
+
+++
+
++
+
+
+
+
+
+
+
+
++
++
+
+
++
+
+
+
+
+
+
+
+
+
+
+
+++++
+
++
+
+
++
+
+++
+
+
+
+
+
++
++
+
+
+
++
++
+
+
+
+
+
+
+
++
++
++
+
+
+
+
++
++
+
+
+++
++
+
+
+
++
+
+
+
+++
+
+
+
++
+
+
++
++
+
+
++
+
+
+
++
+
+
+++
++
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+++
++
+
+++
+
++
+
++
++
+
+
++
+
+
+++
++
+
++
+
+
++
++
+
+
+
+++
+
+
+
+
+
+
+
++
+
+
+++
+
+
+
+
+
+
++
+
++
+
+
+
++
+
+++
++
+
+
+
+
+
+
++
++
++
++++
++
++++
+
+
+
+++
++
++
+
+
+
++
++
+
+
++
++
+
+
+ +
++++
+++
+
+++
++
+
+
++
+
+
+
+
+
+ ++
++
+
+
+
+
+
+
+
+
++
+
+++
+
+
+++
+++
++
+
+
+
+
+
+
++
++
+
+
++
+
++
+
+
+
+
+
+
++
++
+
+
+
+++
++
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
++++
++
+
++
+
+
+
++
+
+
+++
+
++
+
+
+
+
+
+
++
+
++
+
+
++
+
+
+
+
+
++
+
++
+
++
+
+
++
++
+++
+
++
+ +++
+
+
+
++
+
+
+
+++
+
++
+
+
+++
++
+
+
+
+
+
++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
++
+
+
+
++++
+
+
+++
+
+
++
+
++
++
+
+
++
++
++++
+
+++
+
+
+
++
++
+
++
+
+
++ +
+
+
+
+
+
++++
+
+++
+
+
+
++
+
+
+
++
++
++
+
+
+
+
+
++
++
+
++
+
+
+++
+
++
++
+
++
+
+
+
++
+++
++
+
+
+
+
++
++++++++
+
++++
+
++
+
+
+
++
+
+
+
++ +
++
+
+
+
++ ++++
++
++++
++++++
+
+
+
+++
+
+++
++
++
+
+
+
+
+
++
++
+
++
+
+
+
++
+
+
+
+
+
++
+
+
+
+
+
++
+
+
+
++
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
+++
+
++
+
+
++
+
+
+
++
++++
+++
+
+
++
+++
+
++
+
++
+
+
+
+
+
++
+
+
+++
+++
++
+
+
++
+
++
+
+
+
++
+++
+
+
++
+
+++
+
+
+
+
+
++
+
+
+
+
+
+
+
+
+++
+
++
+
+
++
++
++
+
+
++
+
+
+
++
+++
+
+
+
+
++
+
+
+
++
+
+
+
+
++
+
+
+
+++
+
+
++
++
++
+
+
++
++
++
+
+
+
+
+++
+
+
+
+
+++
+
++
+
+
+
++
+
+
+
+
++
+++
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+++
+
+
++++
+
+
+
+
+
+
+
++
+
+
++
+
+
+
+
+++
+
+
++
+
+
+
+
+
++
+
++
+
+++
+
+
+
+++
+
+
+
+
+
+
+
+
+
+++
++
+
++
++
+
++
+
++
+
++
+
++
+
+
+
+
+
+
+++
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+
++
++
+
++++
+
+
+++
++++
+++
++
++
+
+
++
+
+
+
+
+
++
++
+
+
+
+
+++
+
+
++
+
++
+
+
++
++
+
+
++
++
+
+
++
+
++
++
++
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
++
++
+++
+
+
+
++
++
+
++
+
+
+
+
+
+
+++
+
+
+
++
+
++
+
+
+++
+
++
+
++
+
++
+
+
+
++
++
+
+
+
+
+
+
+
+
+
++
++
+
++
+
+++
+ +
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
++++
+
+
+
++
+
+
+
+
+
+
+
++
+
+
+++
+
++
+
++
+
++
+
+
+
+
+++
++
+++++
+
+
+
++
++
+++
+
+
+
++++
+++
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+++
++
+ +
+
++++
+
+
+++
+
+
++++
+
+
+
+
+
+
++
+
++++
+
+
+
++
+
+
++
+++
++
+
+
+++
+++
+
+
++
+ +
++
+
+
+++
+
+
++
+
+ +
+
+
+
+
++
+
+
++
++
+++
+
++
+
+ +
+
++
++
+
++
++
+++
+
+
+
+
+
+
+
+
+
+
+
++
+
++
+++
++
+++
++
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
+++
+
+
++
+
+
+
+
++
++
+
+
+
+
++
+
+++++
+
++
+
+
+
+
+
+
+
+
++
++
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
++
+
+
++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+++
+
+
+
+
+
+
++
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
++
+
+++
+
+
++
++
+
++
+++
+
+
+
+
+
+
+
+
+
++
+++
+
+
+
+++
++
+
+
+
++
+
+
+
+
+
+
+
+
+
++++
+
+
+
+
+
++
+
+
++
+
+
++
+
+
+
+++
++
+
+
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+++
+
++
+ ++
+
+
+
+
+
+
++
++
+
+
+
+
+
+
++
++
+
+
+++ +
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
++
+
+
++
+
+
+
+++
+
+
++
+
+
+
+
+++
+
+ ++
+
+
+
+
+
++
+
+++
+
+
+
+
++
++++
++
+
+
+
++
+
+
++
+++
+
++
+
+++++
+
+
+
++
+
++++
++
+
+
+
+
+
+
+++
++
+
+
+++
+++
+
+
+
++
+
+
+
++
+
++
++
++
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+++
+
+
+
+
++++
+
++
+
+
+
+
+
++
+
+++
+
++
+
+
+
+
++
+
+
+
++
+
++
++
+++
+ ++
++++
+
+
+
++ +
++
+ +
+
++
++
++ +
+
+
+
+
++
+++
++++++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+
+ ++
+
+++
+
+
+
+++
++
+
++
+
+
++
++
+
+
++
++ +
+
+
+++
+++
+
+
+
+
+++++
+
+
+
+
++
+
+
+
++++
+
+++
+
+
+
+
++
+
++
+
+++
+++
++
++
++
++
++
+
++
+
+++
++
+
++
+
+
+
+
++++++
++
+
+
+++
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
++
+
+
+
+
+
+
+
+
++
+
++
+
+
+++
+
+
+
++
++
+
+
+
++
+++
+
+
+
+
++
+
+
++++
+++
+
+
+
+
+
+
+
+
++
++
++
+
+
+
++
++
+
++
+
+
+
++
+
+
+
+
+
+ +
+
++
+
+
+
+
+
++
+
++
+++
+
+++
+
+
+
++++
+
+
+
++
+
+
++
+++
+
+
++
+
+
+
+
+
+
+
++
+
+
+
++
+
+
+
+
+
+
+
+
+
+
+++++
++
+
+
+
+
+
+
++
++
+
+
++
+
+
+
+
+
++++
+
+++
+++
+
++
+++
+
+
++
+
+
+
++
+
++
+
++
+
+
+
+
+
++
++
++
++
+
+
++
+
+
+
+
+
+
+
++
+++
+
+++
+
+
++
+
+
+
++
+
+
++
++
+
+
++
+
+
+
+
+
+ +
+
++
++
+
+
+
+
+
+
+
+
+
+
++
++
++
+
+
+
+
+
+++
+
++
+
++
+
+
+
+
+
+
+
+++
+
++
+
+
++++++
+
+
+
++
+
+
+
+
++
+
+++
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++
+
+
+
++
+
+++
++
+
+
+ +
++
+
++
+
+
+
+
+
++
+
+
+
+
+++
+
+++
+
+
+
+
+
+
+
+
++
+
+
+
+
+
+
++++
+
+
+
+
+
+
++
++
+
+
+
+
++
+
++ ++
+
+
++
+
+
+
++
+
+
+++
+
+++
+
+
++
+
+
+++
+
+
+
+
+
+
+
+
+
+
++
++
++
+
+
++
+
+
+
+
+
++
+
++
+
+
+ ++
+++
+++
+
+
+
+
+
+
++
++
+
++
+
++++
+
+
+
++
+
+
++
+
+
++
+
+
+++
+
+
+
+
+
+
+
++
++
+
++
+
+
+
+
+
++ +
+++
+
+
++
++
+
++
+
++
++
++
++
+
+ +
++
+
+
+
+
+
+
+++
+
++
+
+++
+++
+++
+
+
++
+
+
+
+
++
+++
+
+
+++
++
+
+
++
+
+
+
+
+
+ +
++
+
+
++
+++
+
+
+
++
++
+
+
+
++
+
+
++
+
+
+++
+
+
++
+
+
++
+
++
++
++
+
+
+
+
+
+
+
+
++
+
+
++
+
+
+
++
+
++
++++
+
+ +
+
+
+
++
++
+
+
+
++
+
++++
+
+++
+
+
+
+
+
+++
+
+
+
+
++
+
+
+
+
++
+
+
+
+
+
+
+
+
+++
++
++
+++
++
++
+
++
++
++
+
+
+
+
++
+
+
+
++
+
++
++
+
+
+
+
++
+
+
++
+
+
+
+
+
+
++
+
++
++++
+
+
+++
++
+++
+
+
+
+
+
++
++
+
+
+
++
++
+
++++
+
+
+++
++
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+++
+
++
++
++
+
+
+
++
+
++
+
+
+
++
+
++
+
+
+
+
+
++
+ +++
+
++
+
+
+
+
+
+
+++
+
+
++
+
+
+
++
+++
+
+
++
+
+
++
+
+
+
+
+
+
++
++
+
+
+
+
+
+
+
+
+
+++++
+
+
+
++ +
++
++
+++ +++
+
+++
++
+
+
+
+
+
+++
+++
+++
+
+
+
+
+
++
+
++
++
+
+
+++
+
+
++
+
++
+
+
+
+
+
+
+
+++
+
+
+
+
+
+
+
+
+
+
++
+ +++
+
+
+
+
++
+
+
+
+
+
+
++
+
+
++
+
++
+
+
+
+
++
+
+
+
++
+
+
+
++
++
+
+
+++
+
+
+
+
+
+++
+
++
+
+
++
+
+
++++
++
+
++
+
+
+
+++
+
+
++
++
+
++
++
+
+
+ +
++
++
+
+
+
+++
++
+
+
+
+
+
+
+
+
+
+
++
+
+
+
+++
++
+
+
+
+
+
++
+
+
+
+
++
+
+
++
+
+++
+
+
+
+
+
+++
++
+
++
+
++
+
+
+
+++
+
++++
+
++
+
+++
++
+++++
+
+
+
+
+
+
+
+++
+++
+
+
+
++++
+
+
+
+
++
+
+
+
++
+
+
+ ++
++
++
+
++
+
+ +
++++
++
+++
+
++
+
++
+
+
+
++
++
+++
+
+
+
+
+
+
++
++
+
++
+
+
++
+
+
++
++
+
+
+
+
+
+
+
+
++
+++
+
++
+
++
+
++++
+
+
++
+
+
++
++
+
+
+
+
++
+
+
+
+
+
++
++
+
++
+
++
+
++
++
+
+
+
++
+
++
+
+
+
+
+
+
+
+
+
++
+
+
+
+
++
+
+
+
+
++
+
+
+
++
++
+++
+
+
++
++++
+
++
+
++
+
0.0 0.2 0.4 0.6 0.8 1.0
0.0
0.2
0.4
0.6
0.8
1.0
Virtuel Lyon reçoit Montpellier
P(nul)
P(d
efai
te)
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Le classement versus l’estimation statistique de la force des équipes
Dernière journée
40 50 60 70 80
01
23
4
classement
For
ce a
u jo
ur 3
8
Lille
Lyon
Montpellier
PSG
AuxerreSochaux
Marseille
Evian
Lorient
Toulouse
NancyCaen
BrestAjaccio ValenciennesNice
Saint−EtienneRennes
Dijon
Bordeaux
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Un bayésien peut-il gagner au lotofoot ?
Nombre de matchs (sur 10) prévus correctement
3.0 3.5 4.0 4.5
3.0
3.5
4.0
4.5
5.0
Modele Parent−Bernier
mod
ele
Bra
dley
−Te
rry
1
23
4
56
789
10
1112
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 34
35
36
37
meanscorePB= 3.83meanscoreBT= 3.88
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Conclusions : il reste du travail !
Temps de calcul
Facteur ×3 entre augmentation de données+parameter extension et inférencebrutale
Part de bons résultats
Moyenne de 40% de matchs correctement prévus sur tout le championnat
Grimpe parfois à 50% sur la seconde partie du championnat
Améliorations possibles
Rechercher l’information : expertise a priori, annees précédentes
Changer le modèle : nb buts marqués, etc
Covariables de composition des équipes
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Extension au Fighting System du JuJitsu
Données
3 phases de combats (Atemi (pieds-poings), Judo debout, Judo sol)
3 forces en présence pour chacun des combattants λi = (λ1i , λ
2i , λ
3i )
3 manières de gagner un combat
...à faire
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
Références Bibliographiques
R.A. Bradley and M.E. Terry.Rank analysis of incomplete block designs, 1. the method of paired comparisons.Biometrika, 39 :324U-345, 1952.
F. Caron and A. Doucet.Efficient Bayesian inference for generalized bradley-terry models.Research Report 7445, INRIA, 2010.
H.A. David.The Method of Paired Comparisons.Oxford University Press, New York, 1988.
M.E. Glickman.Parameter estimation in large dynamic paired comparison experiments.JRSB Appl. Statist., 48(3) :377–394, 1999.
E. Parent and J Bernier.Le Raisonnement Bayésien : Modélisation et Inférence.Springer France, Paris, 2007.
M. H. Tanner.Tools for Statistical Inference : Observed Data and Data Augmentation Methods.Springer-Verlag, New York, 1992.
EP-EF LotoFoot et Extensions
Exemple du championnat de footballModèle Bradley-Terry
Inférence par data augmentationModèle Parent-Bernier
RésultatsExtension au Ju-Jitsu Fighting System
C’est fini
Merci
EP-EF LotoFoot et Extensions
Recommended