chempyformatics

CTR1.py

See also: the Groovy version

Source code

from scyjava import config, jimport
config.add_endpoints('org.openscience.cdk:cdk-bundle:2.9')
SilentChemObjectBuilder = jimport('org.openscience.cdk.silent.SilentChemObjectBuilder')
IChemObjectReader = jimport('org.openscience.cdk.io.IChemObjectReader')
IteratingSDFReader = jimport('org.openscience.cdk.io.iterator.IteratingSDFReader')
GZIPInputStream = jimport('java.util.zip.GZIPInputStream')
File = jimport('java.io.File')
FileInputStream = jimport('java.io.FileInputStream')

iterator = IteratingSDFReader(
  GZIPInputStream(
    FileInputStream(
       File("ctr/benzodiazepine.sdf.gz")
    )
  ),
  SilentChemObjectBuilder.getInstance()
)
iterator.setReaderMode(
  IChemObjectReader.Mode.STRICT
)
while iterator.hasNext():
  mol = iterator.next()
  heavyAtomCount = 0
  for atom in mol.atoms():
    if 1 != atom.getAtomicNumber() and "H" != atom.getSymbol():
      heavyAtomCount += 1
  print(f"{heavyAtomCount}")

Open In Colab

Output

21
24
22
22
22
19
20
21
25
21
23
27
24
21
23
22
21
20
20
23
25
21
23
22
30
29
26
27
27
34
34
25
32
29
27
25
29
27
25
30
32
29
22
24
20
20
29
21
27
28
26
30
28
27
25
28
27
25
24
23
24
23
21
34
44
23
24
27
26
25
26
27
24
26
28
25
20
26
24
24
23
24
26
25
27
26
27
29
22
22
23
23
20
22
22
22
26
25
27
26
23
26
25
30
24
28
27
24
35
34
27
23
25
31
33
28
27
32
32
24
34
26
26
23
29
21
22
19
19
21
18
19
51
33
24
26
25
29
21
25
23
27
22
22
25
26
23
30
29
27
26
30
29
33
32
34
33
30
29
30
29
30
24
24
21
24
25
20
24
39
24
28
21
23
25
33
24
26
25
24
28
24
20
25
21
33
41
36
37
26
23
21
26
23
21
27
22
22
43
33
23
34
20
32
23
23
25
25
27
24
27
24
35
29
23
29
22
22
20
38
71
47
24
20
25
24
29
39
37
23
24
23
20
27
22
22
24
25
21
20
28
29
29
29
29
31
28
30
32
25
24
29
27
26
28
23
23
26
23
27
25
27
23
26
27
45
22
23
23
24
23
24
29
30
30
31
30
31
30
31
31
32
31
32
27
28
28
29
28
29
26
27
27
28
26
27
30
31
31
32
30
31
25
26
26
27
25
26
27
28
28
29
27
28
24
25
25
26
26
30
33
24
23
23
25
31
32
32
31
21
22
21
21
23
25
20
30
30
22
23
24
21
23
26
42
30
25
27
35
26
26
28
24
29
29
32
32
32
33
36
19
19
21
19
22
20
20
22
21
21
21
21
22
21
20
26
23
22
21
21
28
23
22
25
23
25
22
20
22
20
23
23
22
23
22
23
27
27
25
27
37
20
23
20
23
22
22
26
27
21
28
24
28
21
24
20
24
22
25
27
22
25
25
21
30
25
29
24
21
23
25
25
21
26
35
20
20
25
24
26
26
27
24
27
27
30
22
20
24
20
20
20
20
20
20
22
20
19
21
23
24
23
23
20
20
20
20
20
19
19
22
22
24
25
31
30
29
30
23
25
26
38
38
23
27
29
28
29
29
29
29
29
30
30
29
29
22
24
25
29
20
28
28
24
24
22
37
37
26
26
29
29
27
27
20
21
21
21
21
24
24
23
23
25
25
24
24
21
21
19
19
27
27
30
20
20
20
20
20
20
21
21
38
27
27
27
27
31
29
29
31
30
34
32
33
33
30
30
22
24
24
22
25
27
27
27
27
25
20
20
29
29
34
34
28
28
21
27
24
22
23
22
34
20
40
29
31
30
31
27
24
28
26
20
23
18
24
25
28
27
28
27
20
24
25
33
23
44
34
24
38
33
28
21
24
33
32
33
26
25
28
27
27
26
28
27
27
26
27
26
22
26
22
26
29
23
28
29
26
30
29
32
35
31
32
29
29
30
31
31
33
31
33
32
32
33
32
32
34
32
25
23
23
25
21
21
24
31
29
29
25
23
25
31
27
26
28
28
26
29
29
28
28
26
32
27
29
29
29
30
28
27
21
30
31
29
24
30
25
33
35
27
30
31
26
28
29
27
27
28
29
29
25
22
22
31
20
25
20
22
40
35
28
27
22
30
26
27
28
28
28
27
28
31
30
20
33
31
28
20
21
28
27
27
27
28
30
31
31
31
31
33
31
35
30
30
29
39
37
36
36
32
36
31
35
31
35
33
24
24
25
26
26
26
26
34
31
30
27
32
31
20
30
30
27
33
32
32
28
29
32
32
32
20
37
35
33
33
33
33
33
33
35
33
32
30
34
32
32
34
33
32
32
28
31
31
30
33
31
33
20
21
20
22
26
36
29
32
30
33
37
32
33
34
33
32
32
32
34
34
34
33
28
23
24
29
26
29
28
28
31
31
27
31
32
30
26
26
27
27
32
34
35
34
28
28
28
32
31
36
37
33
29
28
32
34
31
31
31
24
24
28
31
33
31
28
31
27
27
28
30
31
27
32
27
20
30
30
32
30
29
30
26
26
29
27
34
28
19
20
19
28
26
26
26
24
21
21
34
34
27
27
22
31
27
27
27
23
35
34
33
33
33
34
30
25
29
29
35
35
33
35
35
20
27
25
38
31
29
31
31
31
31
31
31
31
31
31
32
31
33
35
34
36
37
36
33
36
35
36
37
36
36
36
29
36
34
39
38
36
32
28
28
32
28
32
31
31
27
32
23
24
24
25
25
25
26
26
21
22
23
23
24
24
24
25
25
21
22
22
24
23
23
25
23
23
25
24
24
25
31
28
27
29
20
29
20
43
27
27
28
25
26
23
24
24
25
28
29
29
29
29
31
27
28
28
29
29
30
30
30
29
31
28
28
28
30
32
32
32
32
28
32
28
27
27
23
27
28
29
29
29
29
29
29
29
28
28
30
25
30
23
25
24
27
27
28
30
30
31
30
30
30
31
31
32
32
32
30
31
29
29
29
29
29
29
33
33
33
33
32
32
33
30
30
28
28
30
30
33
33
31
30
31
30
32
30
32
30
30
32
31
31
31
30
30
31
31
33
33
33
30
31
30
31
30
32
30
30
33
33
30
30
30
30
31
30
30
33
31
30
29
30
32
29
31
29
31
28
29
31
28
33
31
29
29
30
30
30
30
32
26
28
24
26
28
28
27
27
28
27
27
27
27
26
30
34
35
31
26
28
30
23
24
26
28
25
32
30
19
21
19
29
31
28
28
27
34
28
24
31
25
30
28
27
27
26
27
28
27
34
32
27
31
34
32
21
21
28
25
26
32
35
31
26
24
25
27
25
28
29
30
30
35
30
25
21
30
35
37
31
29
29
25
26
25
21
26
34
35
35
58
50
48
46
45
43
24
30
29
32
23
24
35
23
24
21
21
31
30
28
28
32
34
34
28
38
21
21
22
22
29
38
38
28
28
27
27
27
27
20
20
20
20
21
21
32
32
30
33
33
37
34
33
33
29
33
39
41
34
31
25
27
26
28
29
29
28
30
29
32
32
33
33
34
32
32
35
35
36
35
35
35
35
37
39
37
37
38
38
40
39
39
40
40
40
40
41
47
45
44
51
52
58
23
23
26
26
28
28
26
29
31
29
31
32
32
34
34
32
35
35
35
35
34
33
35
33
36
36
37
35
37
38
37
37
38
38
37
39
40
40
41
42
43
42
41
44
39
44
43
45
19
21
22
30
28
30
32
32
32
32
33
33
34
34
34
34
36
36
36
37
36
39
38
38
39
39
39
41
41
44
41
40
44
38
47
52
62
23
24
23
22
28
29
30
29
27
29
32
32
32
30
32
33
33
34
35
34
35
35
36
35
36
36
38
39
39
37
38
38
38
38
41
39
40
40
42
41
42
41
41
38
38
43
45
44
50
24
25
22
26
24
26
30
31
29
31
31
31
32
30
34
34
34
33
35
36
35
37
37
36
38
39
39
37
38
39
39
39
39
40
38
41
39
39
41
41
42
41
42
42
43
45
52
25
26
20
21
25
27
30
33
32
33
31
34
35
35
35
34
34
29
37
37
35
36
37
37
39
37
38
40
38
40
39
39
39
38
38
40
40
39
42
41
41
41
43
39
42
38
41
44
38
45
46
56
66
80
20
23
26
27
20
23
26
26
32
27
32
33
33
32
34
34
34
35
35
35
35
33
36
37
37
37
36
37
38
35
39
38
38
40
39
41
41
39
40
41
42
39
42
40
42
40
38
20
24
24
26
27
23
27
27
26
30
31
29
32
30
34
32
34
35
35
35
33
34
29
37
35
38
36
39
38
39
40
39
39
39
40
40
40
41
41
42
41
42
40
42
45
46
45
46
46
50
63
22
24
25
26
23
28
28
22
22
23
23
24
24
23
22
26
27
29
29
30
30
30
31
31
31
32
32
32
32
33
33
34
34
35
34
37
37
38
37
37
41
41
37
47
85
22
22
23
26
26
28
28
31
31
30
32
33
34
34
34
33
30
35
36
36
34
35
36
38
47
48
47
23
24
25
26
27
27
28
29
27
28
27
27
31
32
31
32
33
35
34
33
36
36
37
38
40
41
38
40
43
37
36
46
65
21
23
24
23
25
25
26
25
28
30
30
30
31
31
31
28
31
31
30
30
32
33
32
32
34
33
35
36
36
37
37
36
37
39
41
41
48
22
22
22
21
23
21
22
25
25
26
26
26
26
25
29
28
30
29
31
30
30
30
32
33
33
34
34
33
32
30
34
35
37
36
36
30
38
38
39
38
40
43
40
20
21
24
24
24
26
26
26
25
27
29
32
32
32
33
35
33
33
37
37
34
38
39
40
37
30
25
30
28
23
33
34
32
34
34
34
35
36
35
38
38
39
38
39
40
40
42
42
30
27
34
36
36
37
36
35
35
45
26
28
29
29
31
32
33
33
33
34
34
35
34
36
35
34
37
37
36
39
39
40
39
41
42
42
41
40
50
31
34
33
35
35
35
39
43
27
28
29
30
31
32
32
32
33
35
35
34
36
37
36
35
38
38
38
38
39
39
39
39
41
41
29
37
40
39
40
41
43
23
29
30
31
33
34
34
34
32
35
35
34
32
35
38
37
35
35
39
41
40
42
44
30
33
36
37
38
35
40
39
44
20
30
32
33
33
33
34
34
34
35
35
35
36
37
37
37
37
37
36
38
35
38
38
37
37
39
41
32
34
36
36
35
35
37
37
38
44
29
31
31
31
32
33
33
34
35
36
36
35
39
38
38
41
33
42
42
43
32
35
37
36
39
38
38
37
38
45
22
24
24
23
25
27
26
26
29
29
31
31
32
33
33
32
33
27
31
34
35
35
37
36
39
35
42
44
54
20
22
29
29
25
34
34
35
35
35
35
33
36
37
37
37
36
35
37
38
38
36
37
39
40
40
40
40
43
42
43
43
42
45
43
42
34
33
34
34
34
41
37
25
25
27
28
29
30
31
32
32
33
33
34
34
33
34
31
35
37
35
36
40
38
40
41
43
32
33
33
35
33
35
36
39
39
35
39
38
24
26
25
27
25
25
25
28
29
30
30
31
31
30
30
33
32
34
34
34
34
34
27
36
36
37
37
37
37
34
39
38
41
65
23
22
24
24
23
25
25
25
26
26
28
30
22
30
30
31
31
32
30
34
33
33
35
35
36
38
37
39
38
38
39
22
23
23
21
23
26
27
27
26
28
28
26
29
31
32
32
33
33
34
34
33
35
37
35
38
37
39
41
46
55
74
22
23
24
24
26
26
26
27
27
25
23
27
32
32
32
32
32
32
32
32
33
34
33
30
34
36
36
38
39
39
40
39
47
23
23
24
27
26
27
28
30
31
32
27
33
33
33
34
34
34
35
35
36
36
34
37
37
36
37
39
37
41
40
21
23
23
23
24
23
25
26
26
26
26
29
26
25
26
31
32
30
31
33
33
32
33
35
35
37
41
38
42
21
22
24
25
27
28
29
29
29
31
31
30
30
32
32
33
33
33
33
33
34
34
33
35
34
33
34
37
35
35
38
41
38
40
47
50
20
24
28
28
29
28
28
30
30
30
31
31
26
30
32
34
31
33
32
32
35
35
36
36
37
37
39
36
39
40
43
47
23
23
25
28
28
28
29
27
32
30
32
33
36
36
38
37
38
40
40
38
39
42
43
24
29
27
30
30
31
31
32
32
32
36
39
37
40
50
51
90
22
24
26
29
33
35
35
37
37
40
38
40
41
22
24
26
29
29
30
31
35
35
36
36
36
36
38
37
37
36
36
38
40
42
39
45
48
22
26
28
27
26
31
31
30
32
32
30
32
35
34
33
37
36
34
39
37
41
62
61
29
29
30
27
34
35
32
27
37
38
40
41
42
41
46
62
64
21
22
30
30
30
32
33
34
34
33
35
27
33
36
28
36
37
36
38
38
39
38
42
40
42
29
28
30
28
32
32
35
38
38
38
41
40
42
44
69
23
27
20
29
29
25
31
31
35
35
36
31
37
35
37
35
36
42
64
28
29
32
34
34
36
35
37
35
38
39
38
39
36
39
39
39
40
42
41
43
41
57
25
24
24
26
29
30
31
31
33
33
31
38
38
39
39
40
38
40
41
40
41
41
44
51
55
65
22
22
23
23
22
27
28
28
30
29
31
31
32
34
34
36
36
38
38
37
35
40
42
45
52
24
26
28
28
26
29
30
30
31
31
25
34
27
38
37
45
25
25
29
30
33
33
25
34
35
36
37
37
40
39
42
42
39
43
51
50
56
59
22
23
26
29
29
34
33
35
36
37
41
42
43
58
24
34
21
24
29
31
20
25
35
40
27
25
30
30
21
22
28
37
24
30
34
28
40
22
26
29
34
24
22
25
25
35
41
41
24
26
28
22
25
25
35
36
24
27
30
30
36
35
41
19
20
29
40
44
26
48
22
22
25
30
19
21
23
24
26
25
31
38
22
30
30
34
39
24
28
40
40
31
22
25
26
32
33
21
21
23
26
26
34
41
41
32
36
23
30
33
27
31
31
32
33
34
38
33
39
43
43
43
43
47
26
30
36
43
26
29
32
32
36
38
28
29
34
33
34
33
45
45
23
27
31
32
33
35
36
41
45
26
26
28
31
37
36
42
42
43
43
23
26
28
29
31
34
35
36
41
42
44
43
47
27
34
43
45
44
29
31
31
32
31
32
33
34
34
36
36
41
29
28
30
36
39
43
44
45
44
26
29
31
33
35
37
38
29
30
31
33
37
36
27
32
36
36
42
43
44
66
28
33
33
36
36
46
44
28
34
34
35
36
39
62
34
23
30
30
32
33
34
41
42
43
41
43
43
46
48
38
38
42
43
27
30
32
33
35
36
45
55
23
27
32
33
34
42
43
26
32
29
29
36
36
37
39
28
32
35
37
43
46
26
25
33
37
43
43
44
25
30
30
31
33
35
39
41
40
42
30
32
31
33
33
40
45
44
23
30
32
33
36
36
36
37
41
42
43
38
64
30
30
33
37
35
40
43
31
32
32
32
42
44
22
27
31
34
33
37
30
30
30
28
28
33
35
42
22
28
28
31
34
33
38
42
32
33
44
20
28
29
46
27
27
38
37
42
44
50
30
29
32
44
35
41
24
24
28
31
44
26
28
33
33
45
22
30
30
31
32
34
42
48
49
32
34
46
26
32
34
41
44
45
48
29
28
30
53
28
28
39
43
45
28
27
29
29
40
44
49
29
27
33
49
52
20
26
27
28
33
21
27
40
42
39
46
27
26
29
34
34
38
28
29
29
28
30
32
31
41
42
45
48
51
30
41
50
28
29
34
39
44
30
46
45
25
27
37
46
20
23
26
32
33
34
37
42
20
22
28
32
41
27
30
40
50
52
28
28
31
32
45
43
28
32
38
44
26
28
44
22
26
29
33
33
44
27
27
28
33
35
34
40
27
30
32
33
38
44
24
25
26
26
27
27
26
37
27
34
24
29
30
30
30
28
31
32
27
33
32
33
20
26
27
34
32
36
35
36
36
34
35
35
35
33
36
35
37
28
38
38
35
39
40
40
37
40
38
43
34
57
29
81
40
29
29
31
32
21
22
23
24
37
42
42
44
45
27
29
28
31
31
35
32
25
32
35
36
36
37
36
38
38
36
40
39
39
41
47
90
23
23
24
29
35
38
36
46
45
143
23
24
24
26
24
25
27
24
25
25
46
28
29
26
27
21
21
34
25
28
27
29
30
26
24
28
25
25
27
28
21
22
22
24
26
25
24
24
25
20
21
24
23
31
29
28
22
21
21
21
21
19
22
22
22
22
24
23
23
25
25
29
25
26
28
28
30
27
29
30
31
32
32
33
31
32
29
26
29
25
28
25
23
23
25
24
24
25
26
22
23
24
26
29
23
24
24
25
27
24
25
25
26
26
27
24
25
23
24
25
29
29
24
25
25
26
24
25
36
24
25
42
36
25
20
21
25
27
26
28
20
33
31
28
28
29
28
26
23
25
27
26
26
28
28
31
32
32
27
30
30
28
28
23
23
26
26
23
24
22
27
23
23
24
26
25
25
25
21
23
24
25
23
27
33
19
23
21
21
22
23
24
30
28
22
26
26
30
29
28
32
24
28
24
23
27
27
38
27
24
23
23
24
27
24
23
28
23
21
20
21
22
28
28
29
28
26
26
24
25
22
24
24
25
23
23
29
28
27
24
30
30
33
31
29
31
32
32
28
38
35
21
23
23
24
23
25
27
27
37
27
27
34
27
26
27
26
28
27
27
27
26
30
29
36
29
28
20
26
25
22
25
24
24
25
26
24
25
34
35
34
34
24
26
25
25
24
24
23
24
25
26
27
26
25
26
26
28
26
34
24
28
20
28
27
28
23
28
23
33
26
26
21
36
33
28
27
27
29
29
31
31
33
34
23
25
25
26
23
25
23
27
24
27
22
21
29
21
24
27
25
25
28
28
31
26
30
28
34
26
27
32
23
24
25
26
27
26
27
24
29
24
30
32
33
31
25
27
29
26
28
25
25
26
26
26
26
24
26
29
29
31
33
31
28
28
30
29
32
22
25
26
24
24
25
25
24
25
24
27
21
28
28
30
27
29
24
25
31
29
24
24
25
25
32
28
26
23
27
24
27
24
24
26
24
25
22
23
24
23
21
20
21
20
22
20
21
27
23
25
21
24
24
28
30
29
26
25
25
23
24
25
26
28
29
30
29
26
22
23
24
29
29
27
23
33
21
37
29
25
20
21
22
22
20
21
21
22
19
23
21
22
22
20
24
25
22
21
29
31
32
33
31
31
21
22
24
22
25
19
27
25
28
26
35
24
25
25
25
31
27
26
25
26
26
25
26
25
21
22
27
26
30
26
26
27
33
27
26
27
27
27
27
27
28
29
27
27
30
28
27
26
27
26
27
26
32
36
26
29
25
26
26
29
31
25
26
25
26
27
28
22
35
27
20
31
34
24
25
26
25
26
32
21
32
28
23
29
38
38
38
31
31
31
31
29
25
22
23
24
29
29
30
26
29
29
29
29
32
32
30
29
31
31
33
34
32
19
19
28
30
30
32
33
34
34
34
33
30
24
25
31
31
35
35
37
37
35
35
30
29
20
31
32
21
24
22
25
31
32
27
28
26
27
33
23
25
23
25
25
25
26
26
28
29
31
30
30
24
23
23
23
32
28
30
23
20
30
31
32
40
40
40
30
32
33
32
32
29
32
30
30
30
31
23
30
27
31
31
28
27
37
37
27
29
32
32
33
35
32
32
32
34
32
32
33
32
37
30
30
31
30
35
29
29
28
29
33
32
29
29
29
29
28
30
31
32
33
28
38
31
30
33
32
31
29
28
29
30
29
29
33
33
33
30
25
27
30
30
26
31
30
30
30
30
30
30
30
30
30
31
31
30
30
30
30
30
30
32
32
29
30
30
20
21
21
19
20
32
33
33
29
25
21
25
29
27
31
27
24
21
21
21
21
21
39
32
32
32
32
35
19
19
26
27
28
28
27
28
29
29
27
28
29
29
29
30
30
27
29
27
28
29
29
26
27
28
27
28
29
29
30
30
27
28
29
28
29
29
27
28
29
29
27
28
29
29
21
22
23
33
32
22
31
34
33
31
31
32
31
32
33
32
43
37
36
35
33
35
33
34
34
34
33
38
31
29
38
28
39
33
33
33
36
36
36
37
37
37
34
34
37
34
36
35
35
35
36
39
35
40
34
36
42
36
39
36
25
25
25
26
45
45
45
33
36
37
37
37
38
42
37
36
36
36
35
36
40
37
36
35
37
41
37
35
35
56
56
56
31
20
23
36
36
36
40
34
35
38
36
36
36
37
35
35
34
35
37
35
36
39
32
32
34
38
37
23
37
24
28
28
24
24
30
39
37
37
24
24
39
37
38
39
36
20
21
20
20
35
36
36
26
23
35
24
21
22
23
24
23
24
24
26
26
28
30
25
26
26
30
27
30
27
27
28
31
31
29
30
25
26
27
23
25
27
25
23
23
22
25
24
24
28
26
31
36
26
24
26
24
26
27
28
30
28
24
25
24
25
19
25
20
23
23
26
21
24
24
30
29
31
30
30
22
25
25
33
37
34
31
31
20
30
31
28
20
29
35
29
30
23
29
20
21
21
21
33
23
27
29
27
31
32
37
33
31
32
32
32
34
40
30
32
30
32
23
25
30
27
50
22
40
20
25
39
26
22
24
31
38
25
26
37
41
40
34
38
32
36
36
44
34
34
29
31
31
23
32
36
30
25
28
33
20
23
22
23
23
25
24
24
26
24
27
24
27
24
27
24
21
21
24
23
23
23
24
24
25
25
24
24
25
26
48
24
32
27
29
32
31
48
24
29
30
28
34
26
34
30
38
29
35
28
36
30
38
28
36
27
33
23
28
36
29
37
28
36
28
29
35
25
27
28
28
28
22
26
28
24
24
37
54
37
43
26
31
30
30
30
25
25
26
28
32
28
41
30
30
38
35
33
32
30
31
31
42
32
30
31
32
32
29
29
28
28
44
31
31
33
33
34
34
34
34
34
34
34
35
35
39
21
28
28
36
36
36
30
30
20
20
38
38
23
31
31
32
21
32
34
32
23
36
23
30
30
30
30
40
21
32
39
41
42
28
34
32
32
45
31
57
46
37
31
31
32
30
31
33
32
34
26
31
32
33
32
34
23
26
33
33
34
33
28
34
32
32
30
33
33
35
33
31
32
31
28
32
30
31
32
33
32
31
32
27
34
29
30
31
32
32
30
32
32
33
30
32
30
29
30
29
31
29
27
34
30
31
32
32
32
32
33
35
37
34
33
34
33
33
27
32
22
39
40
40
40
37
40
41
41
42
42
41
42
39
40
40
40
41
39
41
43
30
29
40
34
33
33
34
40
30
28
30
29
31
31
29
30
32
33
33
41
39
36
37
31
34
35
38
42
37
25
31
30
34
27
24
20
31
31
32
32
31
31
31
31
31
31
28
28
33
35
39
39
27
23
30
39
34
32
27
29
38
30
96
137
33
134
24
24
28
31
23
37
38
42
40
41
42
43
44
36
37
38
42
40
42
44
36
21
26
31
31
33
22
35
38
42
35
47
40
24
34
37
38
26
26
24
25
26
26
37
26
27
30
29
30
29
32
33
30
33
33
27
62
26
32
39
34
33
40
32
24
22
23
38
33
65
34
41
48
24
32
41
41
40
40
37
37
34
43
43
44
40
45
44
38
39
37
38
39
38
37
36
32
38
34
35
35
37
37
41
37
33
40
37
33
33
34
33
34
33
33
39
38
36
31
35
33
32
35
35
37
42
34
36
30
25
27
33
24
41
40
24
19
38
53
43
43
24
26
38
42
43
42
30
39
36
37
46
38
40
37
37
37
24
30
24
21
28
29
21
21
23
27
26
25
25
21
19
20
34
34
30
36
44
37
43
38
37
34
41
29
33
31
33
34
34
33
34
34
32
32
34
34
34
23
41
34
34
33
23
38
28
26
34
24
23
34
30
23
24
35
35
42
24
33
30
28
30
30
28
35
33
32
33
32
34
33
31
22
32
32
38
40
40
39
41
42
37
39
43
42
42
49
44
47
52
50
53
38
22
29
22
36
32
29
28
32
32
31
28
21
32
32
34
23
43
39
39
31
31
32
35
32
25
32
34
33
34
38
34
32
28
32
33
26
33
33
32
33
26
31
34
34
32
34
33
33
32
32
29
32
34
32
34
23
32
36
33
35
35
33
33
34
36
28
32
27
30
30
38
26
28
30
25
21
25
39
28
20
30
41
32
29
35
32
22
31
29
31
35
33
31
33
31
30
32
30
41
26
30
34
34
42
31
29
31
33
37
59
42
39
38
36
30
31
31
32
41
65
40
31
34
31
37
30
31
32
31
30
31
35
31
34
32
38
32
25
35
38
34
31
29
26
34
30
30
37
31
34
32
36
32
34
32
34
30
32
35
43
41
40
31
37
31
35
36
32
34
32
31
33
27
32
35
32
31
24
37
34
31
60
24
22
22
23
24
25
21
21
33
32
32
36
33
35
36
36
36
42
34
32
34
37
36
34
28
28
29
28
30
31
33
32
36
31
33
21
33
33
30
38
34
33
34
32
31
33
24
39
32
35
35
39
32
31
33
35
26
27
25
36
35
35
24
26
41
41
43
40
40
32
36
36
38
43
44
37
47
30
32
46
33
33
50
47
43
44
33
41
28
39
29
26
31
28
25
29
21
24
25
27
30
23
32
26
28
37
43
27
42
41
37
35
37
42
43
29
41
36
30
37
49
38
38
29
29
31
28
36
36
47
40
35
44
31
28
40
44
46
41
32
31
41
49
46
33
48
30
48
33
44
40
44
42
28
42
30
46
29
47
41
42
34
44
47
44
42
37
27
26
44
43
40
53
38
38
40
38
34
43
27
42
43
45
45
42
37
30
37
38
45
47
27
44
40
39
41
30
41
44
47
45
42
39
30
43
48
48
40
46
41
51
39
37
26
40
40
41
30
44
45
40
40
36
42
27
34
39
40
46
42
45
40
38
34
27
31
36
31
40
44
41
47
45
39
39
41
41
42
41
45
28
41
44
46
44
26
36
37
35
46
43
34
37
32
30
30
24
25
41
22
32
31
39
40
22
45
38
37
36
39
40
33
35
25
35
34
22
41
29
39
26
28
39
29
37
40
39
29
28
29
27
38
39
39
31
32
32
35
20
42
27
31
32
32
32
32
33
26
34
34
24
23
24
23
31
30
23
30
38
26
23
33
26
38
39
28
38
40
23
22
21
29
19
42
34
22
34
34
41
34
33
24
33
34
34
34
32
32
34
33
33
33
32
26
27
25
21
20
29
27
23
19
26
22
21
28
25
24
27
23
22
27
33
24
21
19
35
27
29
21
24
43
27
21
26
32
30
26
22
24
21
36
26
25
26
28
19
32
30
27
20
25
21
24
30
20
20
24
30
22
30
26
27
23
25
32
20
27
25
27
34
35
33
28
23
42
26
27
30
32
24
36
26
32
28
31
20
24
27
29
25
28
27
24
28
36
25
27
39
25
35
20
27
25
22
26
22
20
37
36
66
66
25
42
25
34
35
34
30
30
29
30
34
33
28
32
31
30
33
25
29
26
33
29
34
27
23
33
32
21
42
23
25
31
23
36
25
40
40
33
26
30
33
31
28
33
31
23
30
31
32
34
34
39
34
30
32
31
29
30
37
31
37
32
29
24
37
36
28
31
34
30
31
29
28
28
32
30
34
31
33
31
40
36
38
35
35
33
32
36
43
54
55
46
34
33
36
36
38
39
59
35
36
44
44
34
35
45
43
30
40
37
35
45
33
43
26
38
36
34
42
38
32
45
35
35
27
35
27
31
32
37
29
36
28
37
29
36
28
29
36
28
28
29
31
36
28
31
22
36
28
36
28
37
29
25
33
27
28
26
26
28
27
28
33
27
26
28
36
33
27
28
33
27
28
33
27
26
26
26
33
27
26
26
33
34
33
32
31
33
31
35
34
31
32
22
26
32
27
33
30
35
33
30
27
32
33
33
28
28
22
22
25
24
36
28
24
28
29
28
30
33
28
30
27
21
30
23
28
29
28
22
21
28
30
28
28
28
29
30
31
29
29
28
22
22
23
29
28
29
31
30
23
29
22
30
23
24
27
25
31
27
25
25
25
28
25
25
27
24
25
26
26
31
28
26
34
27
27
27
32
27
26
28
32
28
33
26
24
25
26
35
28
25
26
35
26
31
32
25
25
25
26
25
24
30
26
25
24
23
25
25
25
32
26
25
27
31
37
35
36
24
22
27
23
23
27
29
33
29
28
27
25
34
32
30
28
38
26
30
28
31
23
26
36
26
25
28
26
26
23
36
30
29
25
27
24
27
23
26
30
28
31
33
26
32
26
32
24
32
23
26
27
26
30
28
28
24
30
25
27
26
25
24
32
31
27
24
27
26
28
26
28
30
31
26
27
24
27
30
33
32
23
28
28
26
28
30
29
29
24
24
25
28
27
27
28
28
27
25
29
26
25
24
23
24
23
26
21
58
25
24
29
27
29
30
29
28
29
29
28
25
27
27
24
29
26
24
23
28
30
24
28
25
28
27
32
31
22
22
27
25
27
28
25
21
25
24
33
32
30
29
45
44
27
32
31
35
34
34
33
30
48
47
32
31
32
31
43
42
37
36
28
27
30
32
31
29
28
27
28
24
25
25
28
29
28
30
27
25
27
25
27
29
30
34
28
28
27
29
30
27
29
28
28
27
26
25
28
30
28
30
29
28
28
27
25
26
28
29
24
35
27
26
25
30
31
24
31
24
35
31
31
29
29
31
38
31
29
33
24
26
37
27
26
28
32
29
27
27
26
27
27
26
27
29
30
26
25
27
26
28
27
27
27
31
28
27
29
28
25
28
27
27
30
28
26
31
29
26
27
28
30
30
25
29
28
30
25
31
26
24
28
29
27
30
24
31
30
26
31
27
34
26
26
33
27
27
27
30
26
23
27
28
24
25
30
24
24
27
27
28
26
27
24
27
28
25
24
28
26
23
27
27
25
30
27
25
25
26
29
26
29
25
26
27
30
26
29
24
27
29
27
28
25
25
26
23
29
27
29
28
26
25
26
27
26
29
28
29
27
26
26
30
25
27
28
26
26
24
25
27
27
25
27
25
26
26
26
23
24
26
26
27
24
28
29
28
29
27
24
27
27
26
26
26
27
26
26
25
27
26
25
28
28
26
26
27
24
25
25
25
25
25
24
26
30
26
23
25
28
26
24
25
27
27
29
27
25
28
28
25
25
27
28
27
26
25
28
26
23
28
26
28
27
27
29
31
28
26
27
28
27
23
29
23
31
23
25
27
23
29
27
28
29
31
25
26
36
26
26
20
20
25
24
23
31
22
33
23
28
32
27
22
28
27
28
27
28
32
29
30
26
31
34
31
28
27
28
29
23
24
26
27
25
24
26
23
26
24
23
27
23
24
22
23
23
25
24
25
23
24
24
25
26
25
26
31
25
25
25
27
23
24
27
25
24
26
24
27
26
23
25
25
28
23
28
25
26
24
35
25
28
24
24
26
26
24
25
24
29
23
28
23
26
24
28
26
26
27
26
27
26
27
25
27
26
23
27
25
27
24
27
28
27
29
29
33
33
34
33
32
34
32
30
27
22
29
30
30
29
33
27
30
31
23
37
31
24
31
38
32
34
33
33
25
32
23
32
21
23
27
23
23
27
27
24
22
22
24
23
24
24
23
24
27
32
29
24
27
37
33
25
33
24
23
35
26
37
25
32
27
24
25
23
26
27
24
28
29
30
29
33
27
32
25
25
31
24
23
36
23
25
25
19
32
23
29
33
27
24
28
26
29
24
29
26
27
25
25
29
24
30
25
27
29
25
24
25
25
31
29
24
24
25
25
28
24
25
31
25
25
23
24
25
26
26
26
24
25
26
30
30
29
27
26
26
23
27
38
24
31
27
24
25
27
24
34
26
25
27
26
26
29
26
28
28
36
24
25
24
31
31
26
30
31
31
27
30
22
26
32
27
28
28
24
25
29
22
23
26
27
29
25
29
25
31
26
27
25
24
24
24
27
28
27
27
27
28
25
27
34
34
29
24
22
23
24
22
25
28
24
25
27
21
27
23
22
24
25
22
24
23
25
24
26
22
23
24
25
28
28
22
32
24
27
22
27
25
23
23
28
23
21
27
22
31
31
21
22
24
25
23
21
24
27
30
24
22
24
22
28
37
23
24
29
30
29
24
25
26
30
26
31
28
23
28
23
31
27
26
24
24
23
30
28
25
24
31
29
29
28
25
28
32
28
24
23
23
30
26
38
21
32
25
30
34
26
37
38
36
36
40
35
37
39
36
31
37
37
39
38
41
39
37
35
34
36
35
36
34
37
37
37
32
37
35
39
38
35
34
28
40
32
37
39
36
41
38
42
38
37
37
37
41
36
38
38
32
34
37
36
32
37
38
34
40
31
37
32
36
32
41
37
35
38
40
32
37
40
36
36
40
38
37
39
42
40
36
40
35
47
37
36
37
35
31
36
36
36
32
38
34
25
37
40
36
37
40
36
39
36
40
39
37
35
37
46
32
35
39
33
39
39
41
38
42
38
38
32
22
32
25
23
34
34
41
39
44
42
44
43
41
43
42
44
43
42
46
39
40
40
52
52
43
44
42
43
41
43
40
43
52
41
42
42
40
43
44
42
43
41
40
41
41
39
42
40
41
42
46
38
39
41
40
40
40
38
42
42
42
42
44
55
41
42
40
42
42
43
43
42
41
40
41
39
46
40
39
40
39
60
42
40
38
39
43
39
43
43
41
51
40
39
46
40
40
41
39
42
40
38
41
41
38
42
42
42
42
49
44
37
47
34
47
33
65
38
25
25
25
24
26
38
35
34
33
42
36
42
50
34
35
38
33
31
31
31
40
44
26
35
36
39
39
23
42
42
40
38
37
35
29
30
31
31
30
30
32
31
31
32
31
31
33
34
32
35
35
34
35
37
33
36
36
28
32
33
34
35
33
34
32
31
32
34
32
33
31
31
33
31
30
31
35
32
32
30
30
31
36
26
28
31
33
37
32
35
32
33
32
32
31
32
31
32
35
35
23
25
30
30
30
34
44
44
39
33
36
39
39
47
36
41
40
44
42
38
37
39
35
37
40
39
38
37
34
33
42
48
36
40
40
39
37
27
27
40
22
27
37
25
26
25
21
22
24
25
53
55
21
53
29
51
29
53
22
23
27
55
57
24
23
29
25
55
53
30
31
55
28
29
33
28
30
31
35
26
27
63
61
34
63
30
24
28
29
25
33
32
32
31
33
32
26
25
28
27
27
26
28
27
27
26
27
26
29
30
28
32
29
24
25
26
22
37
36
37
48
36
47
34
37
35
35
40
32
34
36
37
34
33
33
33
35
22
45
45
34
34
33
48
39
36
35
49
45
40
34
43
37
44
35
33
35
32
44
35
34
42
47
46
34
37
34
39
34
37
41
36
34
36
35
35
57
35
36
24
41
40
58
36
52
34
36
41
38
34
35
38
38
34
29
33
33
26
35
43
26
30
29
26
30
27
27
29
26
25
25
26
26
28
31
23
24
33
25
28
27
30
32
26
31
26
24
21
23
24
42
33
32
33
22
25
24
23
26
25
26
29
27
24
36
28
42
43
40
43
44
43
38
44
44
54
42
42
45
34
34
36
33
33
33
32
29
35
32
33
30
32
34
30
37
36
34
28
35
26
26
32
28
27
27
34
25
33
26
31
29
30
27
25
27
27
31
31
28
34
29
26
29
27
27
31
26
34
25
23
28
32
31
32
28
29
30
27
30
26
33
28
28
30
32
31
29
30
30
26
28
28
24
22
30
29
25
29
30
31
34
33
23
28
26
28
24
27
29
26
23
28
26
30
25
30
27
25
28
30
26
26
30
23
26
29
25
25
26
24
24
28
33
27
23
33
25
31
33
27
28
24
25
27
31
26
27
28
28
28
26
25
26
28
31
25
31
30
25
25
28
27
32
25
29
25
24
29
25
25
27
27
26
27
25
34
29
29
25
34
26
28
24
29
29
32
27
27
32
27
27
25
31
35
28
27
26
25
25
33
31
32
26
27
30
28
26
27
28
30
28
29
26
27
30
24
28
27
24
30
28
24
28
24
28
24
30
29
27
30
30
29
29
26
28
29
23
27
26
24
29
27
27
30
30
30
28
31
27
27
24
31
27
28
26
27
27
24
29
28
24
28
28
28
28
26
30
29
28
32
27
26
24
24
31
30
28
26
29
28
23
31
28
28
26
28
30
26
27
29
28
27
29
25
29
27
27
26
29
27
24
26
28
30
27
28
25
31
27
31
30
28
30
27
23
23
31
26
29
27
27
24
27
27
31
19
19
27
30
24
31
28
25
25
24
29
34
31
37
28
37
32
33
26
28
25
25
32
31
27
27
27
30
26
25
27
34
28
26
26
29
30
27
29
34
29
27
28
25
25
25
24
25
24
31
32
33
48
36
30
31
27
29
33
29
36
31
36
26
26
33
25
33
28
26
35
27
30
27
29
33
37
27
39
33
32
32
34
38
26
29
31
32
27
24
43
30
29
27
34
32
33
48
51
49
28
28
28
29
29
24
28
31
29
26
28
27
28
28
30
30
35
24
30
32
30
26
27
32
31
30
29
29
29
30
28
29
34
28
29
27
30
22
31
29
29
30
25
31
32
24
29
32
26
30
25
31
30
31
28
30
26
29
27
28
27
27
29
29
24
34
28
29
33
31
29
29
27
25
31
32
34
32
24
32
28
26
28
27
29
23
29
27
25
85
24
44
37
37
21
22
23
26
27
26
25
27
29
27
26
28
30
29
27
26
23
24
28
25
29
27
24
25
25
27
30
28
27
22
25
27
26
27
21
22
26
26
21
26
23
30
29
26
25
25
26
24
28
25
22
24
28
21
27
20
26
23
27
22
21
25
24
22
21
24
38
26
30
32
25
29
31
30
29
33
32
30
40
31
26
25
27
24
23
30
29
25
25
23
28
33
26
29
37
25
28
24
36
29
27
28
26
30
27
29
27
30
26
27
28
28
28
26
43
26
27
29
27
28
29
29
27
35
27
24
24
38
35
34
38
24
35
28
36
37
35
38
35
35
24
25
34
35
25
22
35
34
37
26
37
35
35
32
27
28
30
34
31
33
24
30
28
29
25
25
25
26
21
27
26
22
27
26
28
32
28
29
35
36
27
29
26
28
27
25
34
35
36
33
28
27
35
24
21
26
35
23
24
26
33
29
26
28
24
27
21
24
28
38
28
30
33
20
30
25
27
27
26
27
28
27
21
25
26
26
24
28
29
27
26
23
37
27
37
35
26
34
25
26
24
31
24
23
22
30
23
25
26
25
24
20
24
25
25
22
22
26
26
24
25
25
25
25
25
28
23
21
20
21
22
22
20
21
26
24
31
31
24
24
26
31
26
27
29
26
25
23
35
27
30
30
26
32
23
35
29
24
30
27
29
35
32
22
31
29
25
29
23
27
27
26
26
24
29
27
35
24
25
30
26
23
27
31
29
25
28
28
28
26
27
25
30
27
27
25
27
23
22
21
24
26
24
29
22
24
30
27
26
31
23
24
24
26
25
36
31
30
28
28
26
30
26
26
29
32
29
31
28
27
27
26
26
29
25
26
30
28
30
28
32
24
24
30
26
28
25
26
27
30
27
25
31
29
28
23
28
22
27
29
25
29
26
25
33
28
29
29
27
25
34
25
28
29
28
29
25
21
33
29
28
25
29
28
26
23
32
26
25
25
26
30
23
27
26
27
28
29
27
29
27
23
28
25
30
29
28
25
33
27
30
20
31
30
23
25
27
31
31
29
26
27
26
25
30
24
30
32
31
29
29
27
27
25
25
26
26
24
24
27
27
25
25
28
28
26
26
30
30
28
28
27
27
24
24
30
26
24
25
26
24
26
24
29
25
28
26
29
25
25
23
30
28
29
28
29
33
22
26
21
23
22
25
23
23
25
25
24
24
25
29
25
24
28
24
27
27
26
28
24
26
23
23
25
25
25
25
26
25
25
30
26
29
25
30
26
25
27
23
27
23
21
25
28
28
24
24
28
24
23
23
26
26
30
26
24
31
27
23
27
23
30
26
28
24
22
29
25
23
28
24
24
31
27
25
27
24
24
24
23
29
25
26
30
26
31
27
24
23
25
27
23
27
25
23
25
31
27
25
25
29
25
24
24
23
24
24
25
32
28
25
24
24
28
24
27
23
27
25
22
28
24
22
27
23
24
23
21
24
24
25
28
24
24
23
23
23
30
26
27
23
27
23
29
25
25
24
25
29
25
25
29
25
31
27
26
25
30
26
28
24
26
27
23
32
28
29
22
25
23
28
24
26
25
24
25
25
30
26
26
23
25
23
32
28
22
26
24
29
29
25
25
24
25
24
24
24
28
30
26
23
24
28
24
27
23
26
23
24
24
24
26
25
26
22
23
23
26
24
23
28
24
23
28
24
25
24
25
27
27
23
23
26
24
25
25
22
28
28
24
23
24
26
22
24
27
26
24
24
28
24
29
25
27
26
28
24
25
26
28
24
23
22
28
24
27
26
25
26
23
21
29
25
25
24
25
26
29
25
27
29
25
23
23
23
22
24
28
24
28
24
26
26
22
26
22
24
25
26
30
26
25
27
26
24
26
28
24
29
25
27
23
24
29
25
29
25
25
29
25
24
28
27
23
27
23
24
23
25
23
23
31
27
24
31
27
23
28
24
27
23
24
26
23
27
25
29
25
29
25
30
30
26
27
24
26
29
25
25
24
30
26
24
33
32
28
29
28
24
34
28
23
27
30
27
29
30
27
25
25
27
30
32
29
24
25
26
23
27
24
30
24
28
26
24
27
31
26
24
24
26
27
31
29
21
31
24
28
23
25
27
34
25
26
24
26
30
24
23
34
33
25
24
25
25
26
25
23
27
28
26
33
26
25
24
27
23
25
26
30
24
26
26
24
33
23
27
33
25
24
25
27
26
27
27
23
27
24
26
26
31
25
25
27
37
27
26
34
59
19
34
26
29
33
24
32
32
30
32
30
32
30
36
33
31
30
35
24
22
24
21
22
27
29
30
44
29
43
21
42
26
45
33
25
28
31
32
35
42
43
31
70
45
42
28
47
34
33
41
30
64
28
35
43
46
35
34
33
24
43
21
23
33
31
49
47
34
36
32
32
39
31
25
38
35
35
39
34
28
22
29
31
34
47
37
32
45
24
31
31
32
31
35
35
32
32
33
30
20
21
32
32
22
33
26
32
31
21
31
39
27
26
31
32
29
29
38
38
26
30
27
42
29
44
24
44
29
30
31
44
39
39
28
30
43
25
31
27
30
23
32
28
25
26
24
26
29
27
34
24
28
29
28
23
23
24
22
32
20
24
25
32
23
25
26
25
26
27
28
25
25
28
29
30
30
25
26
27
25
24
26
27
28
29
27
24
28
28
29
30
31
30
30
29
30
28
29
24
26
29
30
49
49
59
53
24
55
54
24
26
48
59
23
25
55
48
53
40
21
25
26
40
22
21
22
22
27
24
21
36
38
30
34
35
32
34
36
24
26
31
24
37
47
38
38
38
39
36
37
40
37
36
37
35
39
39
37
42
36
36
39
38
37
37
37
41
39
37
36
37
39
40
41
44
44
38
37
38
37
38
39
39
36
39
39
39
37
38
36
37
35
39
42
36
39
38
37
39
40
37
41
37
30
30
37
39
44
44
39
28
33
26
25
24
31
27
20
25
27
27
27
23
34
23
29
33
31
29
27
35
22
24
32
26
30
26
29
28
31
34
33
33
35
37
35
40
40
34
35
37
38
34
36
33
33
35
34
30
40
37
29
33
36
38
35
44
35
36
33
39
37
40
37
35
50
38
43
34
32
37
39
38
44
39
22
36
32
38
41
40
35
39
37
34
31
39
37
32
41
38
32
41
34
43
32
37
35
43
37
31
41
40
43
35
37
45
40
37
39
41
40
34
34
30
37
37
38
40
37
41
37
39
39
39
37
36
41
40
46
41
38
43
23
40
34
36
34
38
45
45
37
34
45
41
21
39
41
36
36
40
34
42
38
41
38
39
46
38
39
36
40
37
41
40
37
34
43
43
38
45
39
41
41
24
39
40
39
37
33
39
44
38
32
41
44
43
33
40
43
40
40
27
40
39
37
35
42
23
33
30
36
39
25
36
37
38
43
38
38
39
42
35
36
35
42
23
33
32
25
41
41
42
45
33
33
32
47
34
21
40
23
44
36
40
34
38
47
39
22
36
37
44
36
37
48
34
43
39
26
43
33
39
38
26
37
45
44
37
38
41
35
39
36
43
37
37
38
38
40
46
42
41
40
40
38
33
40
42
42
24
39
37
34
37
39
44
36
41
35
41
40
41
48
40
51
48
50
49
48
47
51
50
40
50
50
40
49
50
50
53
47
41
39
40
49
38
47
51
51
49
50
48
38
52
51
48
50
41
38
49
49
49
40
42
47
47
39
41
49
49
50
48
40
50
42
49
49
48
49
37
50
51
48
38
48
48
40
48
51
50
51
37
41
48
39
49
49
52
41
49
48
49
52
48
49
50
52
48
47
40
50
50
48
50
48
50
48
41
48
47
39
49
52
41
38
51
50
39
49
48
53
47
41
39
50
48
51
49
48
48
47
51
52
42
47
48
49
47
50
23
32
30
31
23
23
31
30
32
30
31
30
29
30
31
35
33
29
31
30
31
30
35
40
38
41
38
42
39
39
53
43
34
50
41
40
42
43
40
38
44
38
32
39
35
37
40
42
38
52
38
37
47
46
39
37
41
41
42
42
49
33
41
43
42
35
38
33
44
37
41
35
40
40
32
40
40
36
39
42
34
39
39
29
38
37
43
40
42
36
35
34
31
21
38
35
31
35
36
36
22
21
35
21
36
38
36
39
34
21
35
37
28
33
38
21
35
22
22
36
36
36
24
36
36
35
39
32
35
35
22
29
34
25
29
28
33
35
35
23
27
30
35
23
33
28
30
26
31
30
34
36
36
40
34
36
32
26
26
27
25
37
22
37
39
35
37
25
22
26
33
36
41
31
36
35
36
36
34
35
35
40
43
36
28
34
32
35
37
40
46
35
30
25
30
36
32
28
31
38
40
31
38
41
36
27
41
42
38
36
27
30
37
35
42
28
32
38
36
43
38
44
37
33
35
36
38
40
41
36
39
36
38
36
31
35
36
37
22
39
36
30
39
42
32
36
39
44
40
36
35
35
26
37
42
34
36
32
42
36
22
26
37
35
37
37
35
34
36
26
37
32
23
34
37
36
38
29
34
35
37
37
43
39
36
45
38
45
35
37
39
37
35
45
35
38
34
37
37
31
37
36
37
37
35
36
36
33
43
37
37
36
37
32
39
38
37
38
26
35
43
31
37
38
35
38
48
37
36
36
30
31
35
42
43
42
36
39
35
39
39
37
27
36
33
35
42
40
39
32
32
39
38
35
39
41
35
37
36
27
42
38
36
36
38
37
27
37
41
32
39
33
36
34
38
41
36
36
31
31
41
33
41
37
37
32
28
38
35
33
34
31
33
41
39
36
39
35
46
41
43
41
37
42
37
36
37
38
41
36
35
43
40
36
36
36
42
35
39
38
39
40
42
34
37
43
34
36
39
36
36
39
32
37
39
35
36
33
41
37
41
37
35
38
41
38
38
32
30
39
43
32
42
30
40
39
41
38
46
42
41
38
41
40
47
45
41
41
42
60
41
43
39
41
41
41
40
43
23
30
32
32
30
31
32
34
31
30
60
31
29
28
37
32
33
29
32
30
29
38
33
36
30
34
40
42
36
37
37
41
32
32
37
38
34
38
39
36
36
26
37
36
37
37
40
36
32
34
38
39
40
35
36
36
36
29
36
38
37
39
36
38
39
37
42
38
39
32
36
40
37
35
41
37
35
35
40
38
32
37
36
35
36
37
39
32
41
38
36
34
41
47
37
37
34
38
31
40
36
31
40
37
37
34
39
38
38
36
31
37
40
35
36
35
35
32
37
40
26
37
32
28
31
36
40
39
37
35
39
40
37
35
28
29
23
28
38
30
47
53
41
31
35
35
29
32
37
39
47
41
41
31
38
50
35
35
44
35
35
42
30
40
44
42
28
38
42
43
42
42
36
37
43
49
35
36
38
38
52
35
41
47
41
38
46
32
31
41
32
33
24
33
35
34
33
32
30
36
27
33
32
25
29
32
35
32
31
33
34
32
28
27
28
31
31
34
25
37
40
29
21
22
25
25
27
23
23
25
28
29
33
29
34
33
28
31
28
23
23
25
26
29
31
27
27
29
29
31
25
25
25
25
27
25
25
27
31
29
31
26
25
25
25
27
25
27
29
29
24
24
28
30
28
30
30
29
27
27
29
30
32
29
30
32
26
26
28
30
26
27
29
27
28
28
33
29
26
26
24
27
24
27
26
23
23
26
23
23
26
25
28
28
25
68
43
23
24
21
24
32
33
32
39
21
33
34
35
45
34
36
45
36
30
31
26
23
31
30
31
30
41
40
45
44
31
32
31
31
33
31
31
31
31
31
35
34
32
31
34
31
32
34
32
29
30
27
31
34
31
37
37
29
29
29
29
32
37
35
38
38
33
39
33
35
39
33
32
35
35
35
31
33
33
34
34
38
32
31
31
22
31
33
30
30
35
34
21
23
40
38
28
24
28
24
37
36
37
35
31
32
35
34
23
33
29
30
77
27
35
30
30
31
24
21
35
35
33
36
29
38
34
37
44
39
37
38
37
37
37
36
39
38
42
35
46
43
41
39
40
48
47
43
41
41
41
43
45
44
42
46
45
42
42
38
37
39
38
37
37
37
40
39
37
35
31
36
36
41
41
39
43
40
36
37
39
38
42
41
43
42
39
39
36
34
35
35
35
34
35
36
35
43
41
37
36
37
38
36
32
31
32
41
39
43
40
38
36
37
39
38
42
43
42
39
36
34
35
35
34
35
34
36
33
41
39
35
34
35
42
40
36
35
36
35
42
40
36
35
36
37
37
36
37
39
36
38
36
35
36
39
35
35
37
37
36
36
38
37
37
41
36
41
36
38
36
36
38
37
36
36
39
37
36
42
37
37
35
35
33
32
36
31
41
36
36
38
38
39
35
33
38
36
37
35
36
37
36
38
37
36
37
38
32
31
41
36
35
38
37
36
37
38
35
30
31
31
33
32
31
37
30
30
35
33
35
37
33
32
36
29
30
29
37
38
33
25
35
26
25
19
20
20
20
20
21
21
21
21
21
21
22
22
22
22
22
22
22
22
22
22
22
22
22
23
23
23
23
23
24
26
28
35
36
36
36
37
28
28
28
29
27
22
29
31
29
28
26
24
25
29
28
28
25
27
26
27
26
27
29
32
24
23
21
27
25
23
34
27
21
26
28
22
21
21
25
25
21
24
21
27
22
21
22
22
21
25
21
21
22
22
21
24
23
23
22
21
22
21
26
22
24
22
24
23
23
24
21
25
26
23
22
23
21
21
21
22
22
28
21
24
24
21
26
24
23
26
22
25
22
20
26
24
23
21
21
23
22
21
21
22
25
22
21
24
22
24
24
27
22
22
22
24
25
22
22
21
25
24
23
23
24
26
21
28
27
23
26
30
28
32
26
32
24
28
24
23
33
35
40
47
34
35
36
43
30
32
36
24
34
45
44
39
41
43
32
35
38
43
35
38
36
30
39
37
43
37
34
42
43
61
66
49
57
48
33
30
47
43
37
40
37
39
35
68
27
26
24
26
26
28
25
24
23
25
30
30
30
30
29
27
28
35
36
32
31
32
32
30
33
30
29
28
34
30
37
24
26
26
25
28
27
27
26
28
27
28
26
28
27
27
26
33
31
32
30
28
37
36
32
30
30
32
34
33
35
31
31
40
38
30
23
37
35
35
41
36
40
37
38
23
41
24
38
37
43
39
38
42
41
38
35
24
35
43
41
32
32
31
23
23
27
26
21
20
43
40
33
34
25
24
28
48
27
28
27
35
34
37
48
49
36
31
43
37
33
27
39
39
39
28
23
25
28
28
40
28
25
36
28
37
38
41
25
26
21
37
23
47
20
20
21
44
24
24
23
26
24
53
60
50
34
41
42
35
27
49
54
58
45
46
52
26
23
34
34
42
36
35
29
27
27
49
48
41
41
35
38
42
77
47
36
33
40
42
42
42
42
42
42
42
42
42
37
37
37
37
37
37
37
37
37
40
40
40
40
40
40
41
41
36
36
36
39
39
36
36
44
44
44
39
39
39
42
42
42
42
44
44
39
39
40
39
44
42
42
40
42
42
37
37
43
43
43
38
37
40
42
42
42
43
43
43
38
42
37
37
37
37
41
41
42
40
37
37
37
37
37
40
40
40
40
40
34
35
44
36
56
58
29
29
20
40
34
37
34
34
32
34
35
36
32
36
36
36
34
35
36
31
34
32
50
88
31
32
34
34
35
35
38
38
39
39
33
33
40
26
24
27
25
27
25
29
27
29
27
30
28
33
31
33
31
34
32
34
32
34
32
28
26
28
26
31
29
26
24
33
31
31
32
39
40
31
40
30
28
34
32
31
29
33
31
31
33
33
38
38
40
28
26
28
26
40
40
39
25
34
24
28
28
25
27
29
28
29
29
33
27
62
71
57
73
77
28
25
38
34
29
28
30
29
64
66
29
30
34
29
32
38
40
41
43
44
43
39
41
38
38
39
43
42
42
42
42
43
41
41
40
42
46
44
35
32
33
33
36
35
32
34
35
31
36
37
44
37
34
35
39
35
31
29
28
27
25
28
30
31
30
28
32
32
33
30
30
31
31
36
30
29
29
31
29
32
31
32
30
29
32
30
33
31
33
31
30
31
33
27
25
26
25
24
30
31
31
27
27
33
33
31
31
33
31
31
31
39
32
32
28
28
35
35
38
38
31
31
33
29
30
34
33
32
33
32
32
32
31
21
20
20
20
20
26
26
27
27
35
35
35
35
35
35
35
35
36
36
36
36
36
36
36
36
36
36
36
36
36
36
36
36
33
33
33
33
33
33
33
33
33
33
33
33
33
33
33
33
26
35
35
27
26
37
37
25
25
25
25
19
24
24
22
22
22
22
26
25
24
23
21
21
19
19
20
20
20
20
20
20
24
23
24
24
25
31
31
33
28
28
28
29
29
29
29
29
29
29
29
29
31
31
30
31
31
31
30
30
30
33
33
33
33
33
33
29
29
29
30
30
30
30
30
30
34
29
28
29
37
35
34
32
32
37
33
31
33
31
32
28
35
38
31
35
30
33
34
34
35
29
49
48
33
34
33
30
35
36
34
37
39
38
38
36
34
34
37
36
35
35
36
33
33
33
34
35
36
33
33
32
31
30
34
31
31
30
46
45
44
44
47
35
34
37
37
37
37
36
36
40
34
33
51
32
36
36
34
42
39
35
33
39
35
27
50
51
43
43
41
46
43
37
36
32
32
33
35
35
47
41
29
33
34
33
34
31
40
37
37
30
33
34
29
39
40
45
39
41
36
42
40
41
40
42
43
36
38
38
35
39
40
38
50
58
56
55
51
52
54
52
49
50
50
46
58
48
54
53
56
55
46
54
60
58
57
56
45
52
51
58
56
55
52
54
53
57
58
57
55
57
64
63
60
49
35
43
38
43
43
43
44
45
45
44
34
34
35
36
36
33
38
29
39
38
28
38
40
39
37
37
34
34
38
35
37
34
37
33
35
33
33
35
34
42
40
30
32
32
30
32
39
31
30
37
40
40
41
39
33
37
41
40
38
38
35
41
41
41
35
40
88
40
45
23
26
26
23
21
24
27
23
27
23
22
25
24
25
26
26
51
41
26
26
26
26
33
27
30
31
25
31
31
27
27
30
25
31
29
29
31
62
62
65
30
23
32
31
32
34
32
32
34
21
39
38
37
38
41
38
40
35
36
38
40
36
38
40
37
38
91
35
31
30
30
34
32
38
30
32
33
31
34
33
31
31
31
41
33
30
31
43
40
34
34
28
30
33
35
29
29
31
24
30
20
20
21
20
21
21
21
20
26
20
23
21
21
22
22
20
37
31
44
44
44
44
34
27
34
37
30
32
37
35
35
34
21
24
22
36
36
29
25
24
23
22
55
39
42
43
43
43
46
45
45
46
43
39
45
49
46
43
41
22
21
35
42
45
42
43
37
39
44
47
44
45
38
39
41
48
41
42
43
39
40
36
37
37
37
38
36
37
36
37
43
38
31
31
27
42
35
32
33
32
33
33
37
34
38
36
37
39
38
38
40
38
39
41
41
35
38
41
38
39
39
42
46
42
43
46
43
44
45
46
44
38
39
40
41
44
38
39
40
41
41
42
42
43
44
45
43
44
44
44
45
46
44
45
47
47
47
51
47
49
41
38
32
38
37
39
39
39
37
38
37
39
35
37
40
37
35
41
36
37
43
22
22
21
30
31
31
32
31
31
33
33
29
52
44
41