Drag and Drop mode

Jaafar Tribak

Well-known Member
Joined
Dec 5, 2002
Messages
9,806
Office Version
  1. 2016
Platform
  1. Windows
Is there a VBA way to detect if the user is currently dragging and dropping a range from one location to another ? I want to be able to trap this event .
 

Excel Facts

What is =ROMAN(40) in Excel?
The Roman numeral for 40 is XL. Bill "MrExcel" Jelen's 40th book was called MrExcel XL.
No luck so far.

Excel does know when the user is performing a drag and drop a operation because the Statusbar text gets updated. However this event isn't exposed to the programmer. Is anybody aware of a workaround that's worked before ?
 
Upvote 0
Workbook demo.

I have written this small ActiveX dll and have stored its bytes in a hidden worksheet (DllBytes) within the workbook so that the dll can be loaded on the fly upon opening the workbook.

No registration of the dll is required as it is loaded with DirectCom which should make the whole process quicker and work even if the user has no rights to register dlls the conventional way.

The only one requirement for this to work is that the OnCell_Drop event Procedure MUST be Public and located in the Workbook Module so it can be seen by the dll.

In keeping with the office built-in events signature,the On_CellDrop event provides a ByRef Cancel argument to give the user the flexibility to abort the drag and drop operation.



Place this code in the workbook module, save the workbook, reopen it and see if Dragging and Dropping cells are being trapped :

Code:
Option Explicit
 
Private Const JAAFAR_DLL_PATH_NAME As String _
= "C:\DragAndDropWatcher.dll"
[COLOR=Green]
[/COLOR] [COLOR=Green]'CreateObject-Replacement (FileBased)[/COLOR]
Private Declare Function GETINSTANCE Lib "DirectCom" _
(FName As String, ClassName As String) As Object

Private Declare Function UNLOADCOMDLL Lib "DirectCom" _
(FName As String, ClassName As String) As Long

Private oDragAndDropInstance As Object


[COLOR=Green]'=================================================================[/COLOR]
[COLOR=Green]'Drag and Drop custom event.[/COLOR]
[COLOR=Green]'Event Procedure Must be PUBLIC !!! and located in the workbook module.
'Use the ByRef Cancel argument to prevent the drop operation.[/COLOR]

Public Sub OnCellDrop _
(ByVal Source As Range, ByVal Target As Range, ByRef Cancel As Boolean)

    MsgBox "You are trying to drag the Range : " & Source.Address & _
    vbNewLine & " onto the Range : " & Target.Address & vbNewLine _
    & vbNewLine & "This Action is not permitted.", vbCritical
    
    Cancel = True

End Sub
[COLOR=Green]'=====================================================================[/COLOR]


Private Sub Workbook_Open()

    Call CreateDlls

       [COLOR=Green] 'load an instance of the 'DragAndDropWatcher.dll' Class.[/COLOR]
        Set oDragAndDropInstance = _
        GETINSTANCE(JAAFAR_DLL_PATH_NAME, "DragAndDropClass")
        DoEvents

        If Not oDragAndDropInstance Is Nothing Then
           [COLOR=Green] 'start watching the Drop and Drag operations.[/COLOR]
            Call oDragAndDropInstance.Start(ThisWorkbook)
        Else
            MsgBox "Unable to load the " & _
            "'DragAndDropWatcher' dll.", vbInformation
        End If

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

  [COLOR=Green]  'CleanUp.[/COLOR]

    If Not oDragAndDropInstance Is Nothing Then
        oDragAndDropInstance.Finish
        Set oDragAndDropInstance = Nothing
    End If
    
    UNLOADCOMDLL JAAFAR_DLL_PATH_NAME, "DragAndDropClass"
    
    If Len(Dir(JAAFAR_DLL_PATH_NAME)) <> 0 Then
        Kill JAAFAR_DLL_PATH_NAME
    End If

End Sub



[COLOR=Green]'Create the 'DragAndDropWatcher' dll from the
'Bytes stored in the '"DllBytes" hidden worksheet.[/COLOR]
Private Sub CreateDlls()
 
    Dim bytes() As Byte
    Dim lFileNum As Integer
    Dim aVar
    Dim x As Long
 
    On Error Resume Next
    
 
    With Worksheets("DllBytes")
        aVar = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value
    End With
  
    ReDim bytes(LBound(aVar) To UBound(aVar))
    For x = LBound(aVar) To UBound(aVar)
        bytes(x) = CByte(aVar(x, 1))
    Next
 
    lFileNum = FreeFile
    Open JAAFAR_DLL_PATH_NAME For Binary As #lFileNum
        Put #lFileNum, 1, bytes
    Close lFileNum

End Sub
Tested on XL 2007 Win 7
 
Last edited:
Upvote 0
For future reference,in case the above workbook demo link has expired, here are the dll bytes that are stored in the DllBytes hidden worksheet in Column A:A :

Code:
77
90
144
0
3
0
0
0
4
0
0
0
255
255
0
0
184
0
0
0
0
0
0
0
64
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
192
0
0
0
14
31
186
14
0
180
9
205
33
184
1
76
205
33
84
104
105
115
32
112
114
111
103
114
97
109
32
99
97
110
110
111
116
32
98
101
32
114
117
110
32
105
110
32
68
79
83
32
109
111
100
101
46
13
13
10
36
0
0
0
0
0
0
0
41
11
220
219
109
106
178
136
109
106
178
136
109
106
178
136
238
118
188
136
108
106
178
136
4
117
187
136
111
106
178
136
132
117
191
136
108
106
178
136
133
117
182
136
108
106
178
136
82
105
99
104
109
106
178
136
0
0
0
0
0
0
0
0
80
69
0
0
76
1
4
0
67
177
199
77
0
0
0
0
0
0
0
0
224
0
14
33
11
1
6
0
0
64
0
0
0
48
0
0
0
0
0
0
140
19
0
0
0
16
0
0
0
80
0
0
0
0
0
17
0
16
0
0
0
16
0
0
4
0
0
0
1
0
0
0
4
0
0
0
0
0
0
0
0
128
0
0
0
16
0
0
243
172
0
0
2
0
0
0
0
0
16
0
0
16
0
0
0
0
16
0
0
16
0
0
0
0
0
0
16
0
0
0
208
66
0
0
175
0
0
0
212
61
0
0
40
0
0
0
0
96
0
0
240
9
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
112
0
0
144
4
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
88
2
0
0
32
0
0
0
0
16
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
46
116
101
120
116
0
0
0
127
51
0
0
0
16
0
0
0
64
0
0
0
16
0
0
0
0
0
0
0
0
0
0
0
0
0
0
32
0
0
96
46
100
97
116
97
0
0
0
80
4
0
0
0
80
0
0
0
16
0
0
0
80
0
0
0
0
0
0
0
0
0
0
0
0
0
0
64
0
0
192
46
114
115
114
99
0
0
0
240
9
0
0
0
96
0
0
0
16
0
0
0
96
0
0
0
0
0
0
0
0
0
0
0
0
0
0
64
0
0
64
46
114
101
108
111
99
0
0
214
4
0
0
0
112
0
0
0
16
0
0
0
112
0
0
0
0
0
0
0
0
0
0
0
0
0
0
64
0
0
66
191
194
2
72
16
0
0
0
0
0
0
0
0
0
0
0
77
83
86
66
86
77
54
48
46
68
76
76
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
198
145
70
115
57
8
70
115
141
114
71
115
49
104
71
115
183
102
68
115
102
23
69
115
98
114
71
115
250
0
70
115
15
158
68
115
129
7
70
115
87
153
71
115
149
193
67
115
192
160
68
115
174
0
70
115
236
220
68
115
61
158
68
115
226
71
69
115
70
1
70
115
84
158
68
115
70
2
70
115
176
11
69
115
133
113
71
115
46
147
70
115
42
97
70
115
207
153
67
115
218
147
69
115
229
160
55
115
199
159
68
115
54
8
70
115
37
139
71
115
226
153
67
115
211
147
70
115
137
149
71
115
224
152
67
115
36
70
69
115
201
4
70
115
250
1
70
115
19
117
71
115
107
146
70
115
168
141
71
115
122
1
70
115
122
2
70
115
142
106
69
115
174
1
70
115
233
251
69
115
67
59
64
115
239
56
64
115
116
76
69
115
187
58
64
115
102
57
64
115
123
55
64
115
184
140
71
115
191
163
55
115
140
141
71
115
77
140
71
115
0
145
70
115
116
106
69
115
237
93
71
115
45
237
69
115
132
148
70
115
81
219
69
115
48
106
69
115
251
157
68
115
0
0
0
0
1
0
8
0
130
35
0
17
1
0
8
0
238
35
0
17
4
0
4
0
0
0
0
0
0
0
0
0
186
37
0
17
36
0
20
0
0
0
0
0
0
0
0
0
126
45
0
17
0
0
0
0
56
17
0
17
20
0
0
0
63
38
0
17
70
38
0
17
85
38
0
17
107
38
0
17
148
40
0
17
153
40
0
17
153
40
0
17
109
41
0
17
43
42
0
17
43
42
0
17
139
43
0
17
161
43
0
17
200
43
0
17
206
44
0
17
206
44
0
17
17
45
0
17
39
45
0
17
72
45
0
17
119
45
0
17
119
45
0
17
0
0
0
0
4
0
4
0
0
0
0
0
0
0
0
0
159
46
0
17
38
0
20
0
0
0
0
0
163
61
0
17
65
61
0
17
0
0
0
0
184
17
0
17
19
0
0
0
15
47
0
17
22
47
0
17
37
47
0
17
70
47
0
17
97
48
0
17
60
54
0
17
22
55
0
17
55
55
0
17
196
58
0
17
218
58
0
17
248
58
0
17
11
59
0
17
249
59
0
17
211
60
0
17
231
60
0
17
231
60
0
17
231
60
0
17
5
61
0
17
58
61
0
17
0
0
0
0
0
0
0
0
255
37
92
16
0
17
255
37
136
16
0
17
255
37
148
16
0
17
255
37
68
16
0
17
255
37
52
16
0
17
255
37
160
16
0
17
255
37
28
16
0
17
255
37
176
16
0
17
255
37
76
16
0
17
255
37
172
16
0
17
255
37
164
16
0
17
255
37
144
16
0
17
255
37
112
16
0
17
255
37
140
16
0
17
255
37
36
16
0
17
255
37
4
16
0
17
255
37
220
16
0
17
255
37
0
16
0
17
255
37
240
16
0
17
255
37
152
16
0
17
255
37
88
16
0
17
255
37
124
16
0
17
255
37
236
16
0
17
255
37
232
16
0
17
255
37
104
16
0
17
255
37
204
16
0
17
255
37
72
16
0
17
255
37
116
16
0
17
255
37
40
16
0
17
255
37
128
16
0
17
255
37
84
16
0
17
255
37
228
16
0
17
255
37
216
16
0
17
255
37
20
16
0
17
255
37
248
16
0
17
255
37
12
16
0
17
255
37
32
16
0
17
255
37
56
16
0
17
255
37
224
16
0
17
255
37
100
16
0
17
255
37
48
16
0
17
255
37
64
16
0
17
255
37
168
16
0
17
255
37
80
16
0
17
255
37
8
16
0
17
255
37
108
16
0
17
255
37
60
16
0
17
255
37
24
16
0
17
255
37
244
16
0
17
255
37
44
16
0
17
255
37
188
16
0
17
255
37
208
16
0
17
255
37
156
16
0
17
255
37
212
16
0
17
255
37
16
16
0
17
255
37
132
16
0
17
255
37
96
16
0
17
255
37
120
16
0
17
255
37
180
16
0
17
255
37
196
16
0
17
255
37
192
16
0
17
255
37
184
16
0
17
255
37
200
16
0
17
0
0
90
104
72
84
0
17
104
76
84
0
17
82
233
231
255
255
255
0
0
0
80
0
0
0
48
0
0
0
72
0
0
0
0
0
0
0
147
184
67
228
167
148
226
71
181
13
101
69
217
99
241
239
0
0
0
0
0
0
7
0
0
0
45
48
48
48
48
48
68
114
97
103
65
110
100
68
114
111
112
87
97
116
99
104
101
114
0
73
78
68
79
87
0
92
115
121
115
116
101
109
0
0
0
0
152
0
0
0
0
0
0
0
2
0
0
0
0
0
0
0
28
208
119
81
232
141
95
73
131
191
192
43
165
142
112
145
1
0
0
0
176
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
16
0
0
48
48
0
0
67
48
48
48
45
48
48
48
68
114
97
103
65
110
100
68
114
111
112
67
108
97
115
115
0
46
46
92
80
114
111
103
207
12
252
140
45
102
147
76
142
157
75
199
97
146
102
79
1
0
1
0
28
25
0
17
0
0
0
0
255
255
255
255
255
255
255
255
0
0
0
0
160
25
0
17
28
80
0
17
14
0
0
0
152
20
0
17
0
0
0
0
0
0
0
0
0
0
0
0
152
20
0
17
0
0
0
0
224
0
0
0
14
31
186
14
0
180
9
205
33
184
1
76
205
33
84
104
105
115
32
112
114
111
103
114
97
109
32
99
97
110
110
111
116
32
98
101
32
114
117
110
32
105
110
32
68
79
83
32
7
0
0
0
184
30
0
17
7
0
0
0
104
30
0
17
7
0
0
0
32
30
0
17
7
0
0
0
212
29
0
17
7
0
0
0
136
29
0
17
7
0
0
0
64
29
0
17
7
0
0
0
248
28
0
17
7
0
0
0
180
28
0
17
7
0
0
0
104
28
0
17
7
0
0
0
36
28
0
17
7
0
0
0
224
27
0
17
7
0
0
0
156
27
0
17
7
0
0
0
84
27
0
17
7
0
0
0
16
27
0
17
86
66
53
33
240
31
42
0
0
0
0
0
0
0
0
0
0
0
0
0
126
0
0
0
0
0
0
0
0
0
0
0
0
0
10
0
9
4
0
0
0
0
0
0
0
0
0
0
224
22
0
17
0
240
48
0
0
255
255
255
1
0
0
0
1
0
0
0
0
0
0
0
233
0
0
0
96
20
0
17
96
20
0
17
160
19
0
17
120
0
0
0
139
0
0
0
158
0
0
0
159
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
68
114
97
103
65
110
100
68
114
111
112
87
97
116
99
104
101
114
0
68
114
97
103
65
110
100
68
114
111
112
87
97
116
99
104
101
114
0
0
68
114
97
103
65
110
100
68
114
111
112
87
97
116
99
104
101
114
0
0
0
1
0
0
0
28
25
0
17
0
0
0
0
152
34
0
17
255
255
255
255
0
0
0
0
112
25
0
17
8
80
0
17
0
0
0
0
120
94
32
0
0
0
0
0
0
0
0
0
0
0
0
0
108
22
0
17
1
0
0
0
28
26
0
17
0
0
0
0
108
22
0
17
1
0
0
0
116
22
0
17
0
0
0
0
112
22
0
17
1
0
0
0
116
22
0
17
2
0
0
0
12
0
16
0
156
22
0
17
24
84
0
17
0
0
0
0
80
32
27
0
44
26
0
17
60
26
0
17
64
0
2
0
52
0
0
0
76
26
0
17
255
255
255
255
0
0
0
0
0
0
0
0
164
22
0
17
32
36
27
0
92
26
0
17
255
255
255
255
204
22
0
17
217
22
0
17
0
0
0
0
116
22
0
17
244
21
0
17
90
19
0
17
96
19
0
17
102
19
0
17
0
0
0
0
0
0
0
0
129
108
36
4
255
255
0
0
233
111
12
0
0
129
108
36
4
255
255
0
0
233
210
12
0
0
0
0
244
1
0
0
28
25
0
17
0
0
0
0
48
35
0
17
208
61
0
17
72
4
0
0
8
80
0
17
22
18
0
17
0
80
0
17
42
0
92
0
65
0
67
0
58
0
92
0
78
0
111
0
117
0
118
0
101
0
97
0
117
0
32
0
100
0
111
0
115
0
115
0
105
0
101
0
114
0
32
0
40
0
50
0
41
0
92
0
68
0
114
0
97
0
103
0
65
0
110
0
100
0
68
0
114
0
111
0
112
0
87
0
97
0
116
0
99
0
104
0
101
0
114
0
46
0
118
0
98
0
112
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
208
20
0
17
14
0
0
0
0
0
0
0
112
80
0
17
92
34
0
17
255
255
255
255
0
0
0
0
96
80
0
17
6
24
84
101
142
148
150
79
136
90
183
44
253
184
253
85
14
0
2
0
4
0
2
0
112
25
0
17
0
0
0
0
0
0
0
0
0
0
0
0
220
25
0
17
9
4
0
0
9
8
0
0
0
0
0
0
2
0
0
0
244
21
0
17
255
255
255
255
216
26
0
17
0
0
0
0
0
0
0
0
0
0
0
0
240
25
0
17
2
0
0
0
208
25
0
17
255
255
0
0
3
136
17
0
0
0
0
0
96
20
0
17
255
255
255
255
236
30
0
17
236
31
0
17
36
80
0
17
92
80
0
17
4
26
0
17
18
0
0
0
0
0
0
0
48
0
0
0
1
128
1
0
0
0
0
0
200
26
0
17
208
26
0
17
0
0
0
0
68
114
97
103
65
110
100
68
114
111
112
87
97
116
99
104
101
114
0
0
68
114
97
103
65
110
100
68
114
111
112
67
108
97
115
115
0
0
0
0
77
111
100
117
108
101
49
0
43
61
251
252
250
160
104
16
167
56
8
0
43
51
113
181
28
208
119
81
232
141
95
73
131
191
192
43
165
142
112
145
42
61
251
252
250
160
104
16
167
56
8
0
43
51
113
181
207
12
252
140
45
102
147
76
142
157
75
199
97
146
102
79
33
61
251
252
250
160
104
16
167
56
8
0
43
51
113
181
67
108
97
115
115
0
0
0
33
74
84
234
45
200
209
17
163
228
0
160
201
10
234
130
67
58
92
87
73
78
68
79
87
83
92
115
121
115
116
101
109
51
50
92
109
115
118
98
118
109
54
48
46
100
108
108
92
51
0
0
86
66
82
85
78
0
0
0
100
26
0
17
0
0
0
0
6
0
0
0
9
0
0
0
116
26
0
17
152
26
0
17
104
83
0
17
0
0
0
0
0
0
0
0
104
15
27
0
83
116
97
114
116
0
0
0
70
105
110
105
115
104
0
0
12
0
64
0
0
0
0
0
0
0
0
0
12
0
8
0
0
0
0
0
8
0
4
4
7
0
0
0
117
115
101
114
51
50
0
0
13
0
0
0
83
101
116
67
117
114
115
111
114
80
111
115
0
0
0
0
244
26
0
17
0
27
0
17
0
0
4
0
108
83
0
17
0
0
0
0
0
0
0
0
161
116
83
0
17
11
192
116
2
255
224
104
16
27
0
17
184
160
18
0
17
255
208
255
224
0
0
0
11
0
0
0
68
114
97
103
68
101
116
101
99
116
0
0
244
26
0
17
72
27
0
17
0
0
4
0
120
83
0
17
0
0
0
0
0
0
0
0
161
128
83
0
17
11
192
116
2
255
224
104
84
27
0
17
184
160
18
0
17
255
208
255
224
0
0
0
13
0
0
0
71
101
116
67
117
114
115
111
114
80
111
115
0
0
0
0
244
26
0
17
140
27
0
17
0
0
4
0
132
83
0
17
0
0
0
0
0
0
0
0
161
140
83
0
17
11
192
116
2
255
224
104
156
27
0
17
184
160
18
0
17
255
208
255
224
0
0
0
9
0
0
0
83
101
116
84
105
109
101
114
0
0
0
0
244
26
0
17
212
27
0
17
0
0
4
0
144
83
0
17
0
0
0
0
0
0
0
0
161
152
83
0
17
11
192
116
2
255
224
104
224
27
0
17
184
160
18
0
17
255
208
255
224
0
0
0
10
0
0
0
75
105
108
108
84
105
109
101
114
0
0
0
244
26
0
17
24
28
0
17
0
0
4
0
156
83
0
17
0
0
0
0
0
0
0
0
161
164
83
0
17
11
192
116
2
255
224
104
36
28
0
17
184
160
18
0
17
255
208
255
224
0
0
0
10
0
0
0
71
101
116
67
117
114
115
111
114
0
0
0
244
26
0
17
92
28
0
17
0
0
4
0
168
83
0
17
0
0
0
0
0
0
0
0
161
176
83
0
17
11
192
116
2
255
224
104
104
28
0
17
184
160
18
0
17
255
208
255
224
0
0
0
17
0
0
0
71
101
116
65
115
121
110
99
75
101
121
83
116
97
116
101
0
0
0
0
244
26
0
17
160
28
0
17
0
0
4
0
180
83
0
17
0
0
0
0
0
0
0
0
161
188
83
0
17
11
192
116
2
255
224
104
180
28
0
17
184
160
18
0
17
255
208
255
224
0
0
0
10
0
0
0
83
101
116
67
117
114
115
111
114
0
0
0
244
26
0
17
236
28
0
17
0
0
4
0
192
83
0
17
0
0
0
0
0
0
0
0
161
200
83
0
17
11
192
116
2
255
224
104
248
28
0
17
184
160
18
0
17
255
208
255
224
0
0
0
14
0
0
0
70
105
110
100
87
105
110
100
111
119
69
120
65
0
0
0
244
26
0
17
48
29
0
17
0
0
4
0
204
83
0
17
0
0
0
0
0
0
0
0
161
212
83
0
17
11
192
116
2
255
224
104
64
29
0
17
184
160
18
0
17
255
208
255
224
0
0
0
16
0
0
0
87
105
110
100
111
119
70
114
111
109
80
111
105
110
116
0
244
26
0
17
120
29
0
17
0
0
4
0
216
83
0
17
0
0
0
0
0
0
0
0
161
224
83
0
17
11
192
116
2
255
224
104
136
29
0
17
184
160
18
0
17
255
208
255
224
0
0
0
17
0
0
0
76
111
99
107
87
105
110
100
111
119
85
112
100
97
116
101
0
0
0
0
244
26
0
17
192
29
0
17
0
0
4
0
228
83
0
17
0
0
0
0
0
0
0
0
161
236
83
0
17
11
192
116
2
255
224
104
212
29
0
17
184
160
18
0
17
255
208
255
224
0
0
0
17
0
0
0
71
101
116
68
101
115
107
116
111
112
87
105
110
100
111
119
0
0
0
0
244
26
0
17
12
30
0
17
0
0
4
0
240
83
0
17
0
0
0
0
0
0
0
0
161
248
83
0
17
11
192
116
2
255
224
104
32
30
0
17
184
160
18
0
17
255
208
255
224
0
0
0
16
0
0
0
71
101
116
65
99
116
105
118
101
87
105
110
100
111
119
0
244
26
0
17
88
30
0
17
0
0
4
0
252
83
0
17
0
0
0
0
0
0
0
0
161
4
84
0
17
11
192
116
2
255
224
104
104
30
0
17
184
160
18
0
17
255
208
255
224
0
0
0
9
0
0
0
107
101
114
110
101
108
51
50
0
0
0
0
6
0
0
0
83
108
101
101
112
0
0
0
160
30
0
17
176
30
0
17
0
0
4
0
8
84
0
17
0
0
0
0
0
0
0
0
161
16
84
0
17
11
192
116
2
255
224
104
184
30
0
17
184
160
18
0
17
255
208
255
224
0
0
0
20
0
56
0
0
0
2
0
0
0
0
0
0
0
3
0
16
0
1
0
65
0
112
0
112
0
108
0
105
0
99
0
97
0
116
0
105
0
111
0
110
0
0
0
104
0
119
0
110
0
100
0
0
0
0
0
12
0
0
0
88
0
76
0
68
0
69
0
83
0
75
0
0
0
0
0
12
0
0
0
69
0
88
0
67
0
69
0
76
0
55
0
0
0
0
0
218
8
2
0
0
0
0
0
192
0
0
0
0
0
0
70
65
0
108
0
101
0
114
0
116
0
66
0
101
0
102
0
111
0
114
0
101
0
79
0
118
0
101
0
114
0
119
0
114
0
105
0
116
0
105
0
110
0
103
0
0
0
0
0
0
0
0
0
0
0
0
0
213
8
2
0
0
0
0
0
192
0
0
0
0
0
0
70
10
0
0
0
82
0
97
0
110
0
103
0
101
0
0
0
65
0
100
0
100
0
114
0
101
0
115
0
115
0
0
0
96
8
2
0
0
0
0
0
192
0
0
0
0
0
0
70
79
0
110
0
67
0
101
0
108
0
108
0
68
0
114
0
111
0
112
0
0
0
0
0
12
0
4
0
0
0
0
0
0
0
0
0
86
66
65
54
46
68
76
76
0
0
0
0
95
95
118
98
97
76
97
116
101
77
101
109
67
97
108
108
0
0
0
0
95
95
118
98
97
79
98
106
83
101
116
65
100
100
114
101
102
0
0
0
95
95
118
98
97
76
97
116
101
73
100
67
97
108
108
76
100
0
0
0
95
95
118
98
97
86
97
114
67
109
112
78
101
0
0
0
95
95
118
98
97
86
97
114
65
110
100
0
95
95
118
98
97
66
111
111
108
86
97
114
78
117
108
108
0
0
0
0
95
95
118
98
97
67
97
115
116
79
98
106
0
0
0
0
95
95
118
98
97
83
116
114
77
111
118
101
0
0
0
0
95
95
118
98
97
76
97
116
101
77
101
109
67
97
108
108
76
100
0
0
95
95
118
98
97
83
116
114
86
97
114
77
111
118
101
0
95
95
118
98
97
70
114
101
101
79
98
106
0
0
0
0
95
95
118
98
97
70
114
101
101
86
97
114
0
0
0
0
95
95
118
98
97
70
114
101
101
79
98
106
76
105
115
116
0
0
0
0
95
95
118
98
97
83
116
114
67
109
112
0
95
95
118
98
97
72
114
101
115
117
108
116
67
104
101
99
107
79
98
106
0
0
0
0
95
95
118
98
97
79
110
69
114
114
111
114
0
0
0
0
95
95
118
98
97
83
116
114
67
111
112
121
0
0
0
0
95
95
118
98
97
66
111
111
108
86
97
114
0
0
0
0
95
95
118
98
97
86
97
114
86
97
114
103
78
111
102
114
101
101
0
0
95
95
118
98
97
83
116
114
84
111
65
110
115
105
0
0
95
95
118
98
97
67
97
115
116
79
98
106
86
97
114
0
95
95
118
98
97
79
98
106
83
101
116
0
95
95
118
98
97
70
114
101
101
86
97
114
76
105
115
116
0
0
0
0
95
95
118
98
97
70
114
101
101
83
116
114
0
0
0
0
95
95
118
98
97
83
101
116
83
121
115
116
101
109
69
114
114
111
114
0
95
95
118
98
97
73
52
86
97
114
0
0
95
95
118
98
97
86
97
114
76
97
116
101
77
101
109
67
97
108
108
76
100
82
102
0
95
95
118
98
97
86
97
114
76
97
116
101
77
101
109
67
97
108
108
76
100
0
0
0
95
95
118
98
97
65
112
116
79
102
102
115
101
116
0
0
144
34
0
17
20
34
0
17
56
34
0
17
152
34
0
17
255
255
255
255
4
0
29
0
255
255
0
0
0
0
0
0
0
0
3
96
0
34
0
17
0
0
0
0
0
0
0
0
0
0
0
0
30
47
0
0
0
0
33
0
255
255
0
0
0
0
0
0
1
0
3
96
0
34
0
17
0
0
0
0
0
0
0
0
0
0
0
0
30
0
0
0
0
0
0
0
28
25
0
17
255
255
255
255
0
0
0
0
12
34
0
17
0
0
0
0
0
0
0
0
0
0
0
0
255
255
255
255
0
0
0
0
160
26
0
17
76
26
0
17
20
84
0
17
84
104
105
115
87
75
66
0
0
0
0
0
244
21
0
17
255
255
255
255
0
0
0
0
0
0
0
0
0
0
0
0
4
34
0
17
0
0
0
0
0
34
0
17
0
34
0
17
0
34
0
17
0
0
0
0
0
0
0
0
0
0
0
0
64
0
0
0
4
1
0
0
88
104
64
21
0
17
104
72
84
0
17
104
76
84
0
17
80
233
126
240
255
255
88
104
64
21
0
17
104
72
84
0
17
104
76
84
0
17
80
233
110
240
255
255
88
104
64
21
0
17
104
72
84
0
17
104
76
84
0
17
80
233
94
240
255
255
88
104
64
21
0
17
80
233
88
240
255
255
0
0
204
204
204
204
204
204
204
204
233
233
233
233
204
204
204
204
204
204
204
204
204
204
204
204
85
139
236
131
236
12
104
22
18
0
17
100
161
0
0
0
0
80
100
137
37
0
0
0
0
131
236
8
83
86
87
137
101
244
199
69
248
0
17
0
17
199
69
252
0
0
0
0
139
69
8
80
139
8
255
81
4
139
85
12
82
232
142
0
0
0
139
69
8
80
139
8
255
81
8
139
69
252
139
77
236
95
94
100
137
13
0
0
0
0
91
139
229
93
194
8
0
144
144
144
144
144
144
144
144
144
144
144
144
144
144
144
85
139
236
131
236
12
104
22
18
0
17
100
161
0
0
0
0
80
100
137
37
0
0
0
0
131
236
8
83
86
87
137
101
244
199
69
248
8
17
0
17
199
69
252
0
0
0
0
139
69
8
80
139
8
255
81
4
232
210
9
0
0
139
69
8
80
139
16
255
82
8
139
69
252
139
77
236
95
94
100
137
13
0
0
0
0
91
139
229
93
194
4
0
144
144
144
85
139
236
131
236
8
104
22
18
0
17
100
161
0
0
0
0
80
100
137
37
0
0
0
0
131
236
64
83
86
87
137
101
248
199
69
252
16
17
0
17
51
219
104
28
25
0
17
137
93
236
137
93
220
137
93
204
137
93
188
255
21
16
16
0
17
139
125
8
83
104
24
31
0
17
139
240
83
104
0
31
0
17
141
69
220
87
80
255
21
156
16
0
17
131
196
16
141
77
204
80
81
255
21
212
16
0
17
131
196
16
141
85
236
83
104
40
31
0
17
82
255
21
208
16
0
17
80
141
69
204
83
80
255
21
188
16
0
17
80
232
183
248
255
255
137
69
184
255
21
44
16
0
17
139
77
184
137
142
64
80
0
17
141
77
236
255
21
244
16
0
17
141
85
204
141
69
220
82
80
106
2
255
21
24
16
0
17
131
196
12
141
77
236
83
104
60
31
0
17
81
255
21
208
16
0
17
139
150
64
80
0
17
80
83
82
232
107
248
255
255
137
69
184
255
21
44
16
0
17
139
69
184
141
77
236
137
134
56
80
0
17
255
21
244
16
0
17
104
76
31
0
17
139
215
141
77
188
255
21
8
16
0
17
80
255
21
108
16
0
17
141
142
36
80
0
17
80
81
255
21
60
16
0
17
102
137
158
40
80
0
17
83
104
92
31
0
17
83
104
0
31
0
17
141
85
220
87
82
255
21
156
16
0
17
131
196
16
80
141
69
204
80
255
21
212
16
0
17
131
196
16
80
255
21
80
16
0
17
141
77
204
141
85
220
81
82
106
2
102
137
134
80
80
0
17
255
21
24
16
0
17
131
196
12
186
144
31
0
17
141
142
52
80
0
17
255
21
168
16
0
17
102
57
158
60
80
0
17
117
28
104
240
37
0
17
106
1
83
83
232
83
246
255
255
139
248
255
21
44
16
0
17
137
190
76
80
0
17
104
216
37
0
17
235
29
141
77
236
255
21
244
16
0
17
141
69
204
141
77
220
80
81
106
2
255
21
24
16
0
17
131
196
12
195
195
139
77
240
95
94
100
137
13
0
0
0
0
91
139
229
93
194
4
0
144
144
144
144
144
85
139
236
131
236
24
104
22
18
0
17
100
161
0
0
0
0
80
100
137
37
0
0
0
0
184
164
0
0
0
232
253
235
255
255
83
86
87
137
101
232
199
69
236
32
17
0
17
199
69
240
0
0
0
0
199
69
244
0
0
0
0
104
28
25
0
17
255
21
16
16
0
17
137
133
112
255
255
255
199
69
252
1
0
0
0
199
69
252
2
0
0
0
106
255
255
21
64
16
0
17
199
69
252
3
0
0
0
141
69
216
80
232
79
245
255
255
255
21
44
16
0
17
199
69
252
4
0
0
0
232
9
248
255
255
137
69
176
255
21
44
16
0
17
141
77
208
81
139
149
112
255
255
255
139
130
36
80
0
17
139
141
112
255
255
255
139
145
36
80
0
17
139
10
80
255
81
28
219
226
137
69
160
131
125
160
0
125
38
106
28
104
76
31
0
17
139
149
112
255
255
255
139
130
36
80
0
17
80
139
77
160
81
255
21
48
16
0
17
137
133
104
255
255
255
235
10
199
133
104
255
255
255
0
0
0
0
139
85
208
137
85
156
141
69
172
80
139
77
156
139
17
139
69
156
80
255
146
124
5
0
0
219
226
137
69
152
131
125
152
0
125
32
104
124
5
0
0
104
148
31
0
17
139
77
156
81
139
85
152
82
255
21
48
16
0
17
137
133
100
255
255
255
235
10
199
133
100
255
255
255
0
0
0
0
141
69
204
80
139
141
112
255
255
255
139
145
36
80
0
17
139
133
112
255
255
255
139
136
36
80
0
17
139
1
82
255
80
28
219
226
137
69
148
131
125
148
0
125
38
106
28
104
76
31
0
17
139
141
112
255
255
255
139
145
36
80
0
17
82
139
69
148
80
255
21
48
16
0
17
137
133
96
255
255
255
235
10
199
133
96
255
255
255
0
0
0
0
139
77
204
137
77
144
141
85
200
82
104
9
4
0
0
139
69
144
139
8
139
85
144
82
255
145
176
0
0
0
219
226
137
69
140
131
125
140
0
125
32
104
176
0
0
0
104
148
31
0
17
139
69
144
80
139
77
140
81
255
21
48
16
0
17
137
133
92
255
255
255
235
10
199
133
92
255
255
255
0
0
0
0
139
85
200
137
149
108
255
255
255
199
69
200
0
0
0
0
139
133
108
255
255
255
137
69
192
199
69
184
9
0
0
0
139
77
220
81
139
85
216
82
232
152
245
255
255
137
69
168
255
21
44
16
0
17
139
69
176
51
219
59
69
172
15
149
195
247
219
141
77
184
81
255
21
56
16
0
17
139
208
141
77
212
255
21
224
16
0
17
80
104
168
31
0
17
255
21
100
16
0
17
247
216
27
192
247
216
247
216
102
11
216
139
149
112
255
255
255
139
69
168
51
201
59
130
56
80
0
17
15
149
193
247
217
102
11
217
102
137
93
136
141
77
212
255
21
244
16
0
17
141
85
204
82
141
69
208
80
106
2
255
21
32
16
0
17
131
196
12
141
77
184
255
21
12
16
0
17
15
191
77
136
133
201
116
5
233
222
4
0
0
199
69
252
7
0
0
0
141
85
208
82
139
133
112
255
255
255
139
136
36
80
0
17
139
149
112
255
255
255
139
130
36
80
0
17
139
16
81
255
82
28
219
226
137
69
160
131
125
160
0
125
38
106
28
104
76
31
0
17
139
133
112
255
255
255
139
136
36
80
0
17
81
139
85
160
82
255
21
48
16
0
17
137
133
88
255
255
255
235
10
199
133
88
255
255
255
0
0
0
0
139
69
208
137
69
156
141
77
180
81
104
9
4
0
0
139
85
156
139
2
139
77
156
81
255
144
240
0
0
0
219
226
137
69
152
131
125
152
0
125
32
104
240
0
0
0
104
148
31
0
17
139
85
156
82
139
69
152
80
255
21
48
16
0
17
137
133
84
255
255
255
235
10
199
133
84
255
255
255
0
0
0
0
102
139
77
180
102
137
77
148
141
77
208
255
21
248
16
0
17
15
191
85
148
133
210
15
132
190
0
0
0
199
69
252
8
0
0
0
141
69
208
80
139
141
112
255
255
255
139
145
36
80
0
17
139
133
112
255
255
255
139
136
36
80
0
17
139
1
82
255
80
28
219
226
137
69
160
131
125
160
0
125
38
106
28
104
76
31
0
17
139
141
112
255
255
255
139
145
36
80
0
17
82
139
69
160
80
255
21
48
16
0
17
137
133
80
255
255
255
235
10
199
133
80
255
255
255
0
0
0
0
139
77
208
137
77
156
106
0
104
9
4
0
0
139
85
156
139
2
139
77
156
81
255
144
244
0
0
0
219
226
137
69
152
131
125
152
0
125
32
104
244
0
0
0
104
148
31
0
17
139
85
156
82
139
69
152
80
255
21
48
16
0
17
137
133
76
255
255
255
235
10
199
133
76
255
255
255
0
0
0
0
141
77
208
255
21
248
16
0
17
199
69
252
10
0
0
0
141
77
208
81
139
149
112
255
255
255
139
130
36
80
0
17
139
141
112
255
255
255
139
145
36
80
0
17
139
10
80
255
81
28
219
226
137
69
160
131
125
160
0
125
38
106
28
104
76
31
0
17
139
149
112
255
255
255
139
130
36
80
0
17
80
139
77
160
81
255
21
48
16
0
17
137
133
72
255
255
255
235
10
199
133
72
255
255
255
0
0
0
0
139
85
208
137
85
156
141
69
176
80
139
77
156
139
17
139
69
156
80
255
146
124
5
0
0
219
226
137
69
152
131
125
152
0
125
32
104
124
5
0
0
104
148
31
0
17
139
77
156
81
139
85
152
82
255
21
48
16
0
17
137
133
68
255
255
255
235
10
199
133
68
255
255
255
0
0
0
0
106
0
106
0
139
69
176
80
232
130
240
255
255
137
69
172
255
21
44
16
0
17
139
77
220
81
139
85
216
82
232
160
242
255
255
137
69
168
255
21
44
16
0
17
232
114
241
255
255
137
69
164
255
21
44
16
0
17
106
17
232
174
241
255
255
102
137
69
180
255
21
44
16
0
17
139
133
112
255
255
255
139
77
168
51
210
59
136
56
80
0
17
15
148
194
247
218
15
191
194
139
77
172
35
200
51
210
129
125
164
17
0
1
0
15
148
194
247
218
15
191
194
35
200
51
210
102
131
125
180
0
15
149
194
247
218
15
191
194
11
200
247
217
27
201
247
217
247
217
102
137
77
148
141
77
208
255
21
248
16
0
17
15
191
77
148
133
201
15
132
72
1
0
0
199
69
252
11
0
0
0
139
149
112
255
255
255
102
199
130
40
80
0
17
255
255
199
69
252
12
0
0
0
139
133
112
255
255
255
139
136
52
80
0
17
81
104
144
31
0
17
255
21
100
16
0
17
133
192
15
133
6
1
0
0
199
69
252
13
0
0
0
141
85
208
82
139
133
112
255
255
255
139
136
36
80
0
17
139
149
112
255
255
255
139
130
36
80
0
17
139
16
81
255
82
28
219
226
137
69
160
131
125
160
0
125
38
106
28
104
76
31
0
17
139
133
112
255
255
255
139
136
36
80
0
17
81
139
85
160
82
255
21
48
16
0
17
137
133
64
255
255
255
235
10
199
133
64
255
255
255
0
0
0
0
139
69
208
137
69
156
141
77
204
81
104
9
4
0
0
139
85
156
139
2
139
77
156
81
255
144
176
0
0
0
219
226
137
69
152
131
125
152
0
125
32
104
176
0
0
0
104
148
31
0
17
139
85
156
82
139
69
152
80
255
21
48
16
0
17
137
133
60
255
255
255
235
10
199
133
60
255
255
255
0
0
0
0
106
0
104
180
31
0
17
139
77
204
81
141
85
184
82
255
21
216
16
0
17
131
196
16
80
255
21
20
16
0
17
139
208
139
141
112
255
255
255
129
193
52
80
0
17
255
21
224
16
0
17
141
69
204
80
141
77
208
81
106
2
255
21
32
16
0
17
131
196
12
141
77
184
255
21
12
16
0
17
233
164
0
0
0
199
69
252
15
0
0
0
139
85
220
82
139
69
216
80
232
185
240
255
255
137
69
176
255
21
44
16
0
17
139
141
112
255
255
255
139
85
176
59
145
56
80
0
17
117
118
139
133
112
255
255
255
102
131
184
40
80
0
17
255
117
102
199
69
252
16
0
0
0
139
141
112
255
255
255
102
199
129
40
80
0
17
0
0
199
69
252
17
0
0
0
139
149
112
255
255
255
139
130
76
80
0
17
80
106
0
232
250
238
255
255
255
21
44
16
0
17
199
69
252
18
0
0
0
104
192
46
0
17
106
1
106
0
106
0
232
153
238
255
255
137
69
176
255
21
44
16
0
17
139
141
112
255
255
255
139
85
176
137
145
48
80
0
17
104
169
45
0
17
235
42
141
77
212
255
21
244
16
0
17
141
69
200
80
141
77
204
81
141
85
208
82
106
3
255
21
32
16
0
17
131
196
16
141
77
184
255
21
12
16
0
17
195
195
139
77
224
100
137
13
0
0
0
0
95
94
91
139
229
93
195
204
204
204
204
204
204
85
139
236
131
236
8
104
22
18
0
17
100
161
0
0
0
0
80
100
137
37
0
0
0
0
131
236
24
83
86
87
137
101
248
199
69
252
144
17
0
17
104
28
25
0
17
199
69
236
0
0
0
0
255
21
16
16
0
17
139
240
139
134
76
80
0
17
80
106
0
232
49
238
255
255
255
21
44
16
0
17
139
134
36
80
0
17
141
190
36
80
0
17
141
85
236
139
8
82
80
255
81
28
133
192
219
226
125
17
139
15
106
28
104
76
31
0
17
81
80
255
21
48
16
0
17
139
69
236
102
139
142
80
80
0
17
81
104
9
4
0
0
139
16
80
139
216
255
146
244
0
0
0
133
192
219
226
125
18
104
244
0
0
0
104
148
31
0
17
83
80
255
21
48
16
0
17
141
77
236
255
21
248
16
0
17
104
76
31
0
17
106
0
255
21
228
16
0
17
80
87
255
21
60
16
0
17
102
199
134
60
80
0
17
0
0
104
170
46
0
17
235
10
141
77
236
255
21
248
16
0
17
195
195
139
77
240
95
94
100
137
13
0
0
0
0
91
139
229
93
195
144
144
144
144
144
85
139
236
131
236
24
104
22
18
0
17
100
161
0
0
0
0
80
100
137
37
0
0
0
0
184
236
1
0
0
232
45
227
255
255
83
86
87
137
101
232
199
69
236
160
17
0
17
199
69
240
0
0
0
0
199
69
244
0
0
0
0
104
28
25
0
17
255
21
16
16
0
17
137
133
68
254
255
255
199
69
252
1
0
0
0
199
69
252
2
0
0
0
106
255
255
21
64
16
0
17
199
69
252
3
0
0
0
139
133
68
254
255
255
139
136
48
80
0
17
81
106
0
232
252
236
255
255
255
21
44
16
0
17
199
69
252
4
0
0
0
141
85
212
82
139
133
68
254
255
255
139
136
36
80
0
17
139
149
68
254
255
255
139
130
36
80
0
17
139
16
81
255
82
28
219
226
137
133
132
254
255
255
131
189
132
254
255
255
0
125
41
106
28
104
76
31
0
17
139
133
68
254
255
255
139
136
36
80
0
17
81
139
149
132
254
255
255
82
255
21
48
16
0
17
137
133
56
254
255
255
235
10
199
133
56
254
255
255
0
0
0
0
139
69
212
137
133
128
254
255
255
141
77
208
81
104
9
4
0
0
139
149
128
254
255
255
139
2
139
141
128
254
255
255
81
255
144
176
0
0
0
219
226
137
133
124
254
255
255
131
189
124
254
255
255
0
125
38
104
176
0
0
0
104
148
31
0
17
139
149
128
254
255
255
82
139
133
124
254
255
255
80
255
21
48
16
0
17
137
133
52
254
255
255
235
10
199
133
52
254
255
255
0
0
0
0
106
0
104
180
31
0
17
139
77
208
81
141
85
172
82
255
21
216
16
0
17
131
196
16
80
255
21
20
16
0
17
139
208
141
77
216
255
21
224
16
0
17
141
69
208
80
141
77
212
81
106
2
255
21
32
16
0
17
131
196
12
141
77
172
255
21
12
16
0
17
199
69
252
5
0
0
0
199
133
20
255
255
255
1
0
0
0
199
133
12
255
255
255
2
0
0
0
141
85
212
82
139
133
68
254
255
255
139
136
36
80
0
17
139
149
68
254
255
255
139
130
36
80
0
17
139
16
81
255
82
28
219
226
137
133
132
254
255
255
131
189
132
254
255
255
0
125
41
106
28
104
76
31
0
17
139
133
68
254
255
255
139
136
36
80
0
17
81
139
149
132
254
255
255
82
255
21
48
16
0
17
137
133
48
254
255
255
235
10
199
133
48
254
255
255
0
0
0
0
139
69
212
137
133
128
254
255
255
199
133
36
255
255
255
4
0
2
128
199
133
28
255
255
255
10
0
0
0
139
141
68
254
255
255
139
145
52
80
0
17
137
149
52
255
255
255
199
133
44
255
255
255
8
0
0
0
141
69
208
80
184
16
0
0
0
232
231
224
255
255
139
204
139
149
28
255
255
255
137
17
139
133
32
255
255
255
137
65
4
139
149
36
255
255
255
137
81
8
139
133
40
255
255
255
137
65
12
184
16
0
0
0
232
184
224
255
255
139
204
139
149
44
255
255
255
137
17
139
133
48
255
255
255
137
65
4
139
149
52
255
255
255
137
81
8
139
133
56
255
255
255
137
65
12
139
141
128
254
255
255
139
17
139
133
128
254
255
255
80
255
146
160
0
0
0
219
226
137
133
124
254
255
255
131
189
124
254
255
255
0
125
38
104
160
0
0
0
104
148
31
0
17
139
141
128
254
255
255
81
139
149
124
254
255
255
82
255
21
48
16
0
17
137
133
44
254
255
255
235
10
199
133
44
254
255
255
0
0
0
0
199
133
212
254
255
255
1
0
0
0
199
133
204
254
255
255
2
0
0
0
141
69
204
80
139
141
68
254
255
255
139
145
36
80
0
17
139
133
68
254
255
255
139
136
36
80
0
17
139
1
82
255
80
28
219
226
137
133
120
254
255
255
131
189
120
254
255
255
0
125
41
106
28
104
76
31
0
17
139
141
68
254
255
255
139
145
36
80
0
17
82
139
133
120
254
255
255
80
255
21
48
16
0
17
137
133
40
254
255
255
235
10
199
133
40
254
255
255
0
0
0
0
139
77
204
137
141
116
254
255
255
199
133
228
254
255
255
4
0
2
128
199
133
220
254
255
255
10
0
0
0
139
85
216
137
149
244
254
255
255
199
133
236
254
255
255
8
0
0
0
141
69
200
80
184
16
0
0
0
232
133
223
255
255
139
204
139
149
220
254
255
255
137
17
139
133
224
254
255
255
137
65
4
139
149
228
254
255
255
137
81
8
139
133
232
254
255
255
137
65
12
184
16
0
0
0
232
86
223
255
255
139
204
139
149
236
254
255
255
137
17
139
133
240
254
255
255
137
65
4
139
149
244
254
255
255
137
81
8
139
133
248
254
255
255
137
65
12
139
141
116
254
255
255
139
17
139
133
116
254
255
255
80
255
146
160
0
0
0
219
226
137
133
112
254
255
255
131
189
112
254
255
255
0
125
38
104
160
0
0
0
104
148
31
0
17
139
141
116
254
255
255
81
139
149
112
254
255
255
82
255
21
48
16
0
17
137
133
36
254
255
255
235
10
199
133
36
254
255
255
0
0
0
0
141
69
196
80
139
141
68
254
255
255
139
145
36
80
0
17
139
133
68
254
255
255
139
136
36
80
0
17
139
1
82
255
80
28
219
226
137
133
108
254
255
255
131
189
108
254
255
255
0
125
41
106
28
104
76
31
0
17
139
141
68
254
255
255
139
145
36
80
0
17
82
139
133
108
254
255
255
80
255
21
48
16
0
17
137
133
32
254
255
255
235
10
199
133
32
254
255
255
0
0
0
0
139
77
196
137
141
104
254
255
255
199
133
164
254
255
255
4
0
2
128
199
133
156
254
255
255
10
0
0
0
139
85
216
137
149
180
254
255
255
199
133
172
254
255
255
8
0
0
0
141
69
192
80
184
16
0
0
0
232
55
222
255
255
139
204
139
149
156
254
255
255
137
17
139
133
160
254
255
255
137
65
4
139
149
164
254
255
255
137
81
8
139
133
168
254
255
255
137
65
12
184
16
0
0
0
232
8
222
255
255
139
204
139
149
172
254
255
255
137
17
139
133
176
254
255
255
137
65
4
139
149
180
254
255
255
137
81
8
139
133
184
254
255
255
137
65
12
139
141
104
254
255
255
139
17
139
133
104
254
255
255
80
255
146
160
0
0
0
219
226
137
133
100
254
255
255
131
189
100
254
255
255
0
125
38
104
160
0
0
0
104
148
31
0
17
139
141
104
254
255
255
81
139
149
100
254
255
255
82
255
21
48
16
0
17
137
133
28
254
255
255
235
10
199
133
28
254
255
255
0
0
0
0
106
0
106
118
104
196
31
0
17
106
0
104
56
2
0
0
139
69
192
80
141
141
92
255
255
255
81
255
21
116
16
0
17
131
196
16
80
255
21
108
16
0
17
80
141
85
188
82
255
21
60
16
0
17
80
141
133
76
255
255
255
80
255
21
116
16
0
17
131
196
16
80
255
21
188
16
0
17
131
232
1
247
216
27
192
64
247
216
102
137
133
148
254
255
255
199
133
140
254
255
255
11
0
0
0
106
0
104
180
31
0
17
184
16
0
0
0
232
19
221
255
255
139
204
139
149
12
255
255
255
137
17
139
133
16
255
255
255
137
65
4
139
149
20
255
255
255
137
81
8
139
133
24
255
255
255
137
65
12
106
1
106
0
139
77
208
81
141
85
172
82
255
21
116
16
0
17
131
196
32
80
141
69
140
80
255
21
212
16
0
17
131
196
16
80
106
0
104
180
31
0
17
184
16
0
0
0
232
185
220
255
255
139
204
139
149
204
254
255
255
137
17
139
133
208
254
255
255
137
65
4
139
149
212
254
255
255
137
81
8
139
133
216
254
255
255
137
65
12
106
1
106
0
139
77
200
81
141
85
156
82
255
21
116
16
0
17
131
196
32
80
141
133
124
255
255
255
80
255
21
212
16
0
17
131
196
16
80
141
141
108
255
255
255
81
255
21
40
16
0
17
80
141
149
140
254
255
255
82
141
133
60
255
255
255
80
255
21
128
16
0
17
80
255
21
84
16
0
17
102
137
133
96
254
255
255
141
77
188
81
141
85
192
82
141
69
196
80
141
77
200
81
141
85
204
82
141
69
208
80
141
77
212
81
106
7
255
21
32
16
0
17
131
196
32
141
149
140
254
255
255
82
141
133
76
255
255
255
80
141
141
92
255
255
255
81
141
149
124
255
255
255
82
141
69
140
80
141
77
156
81
141
85
172
82
106
7
255
21
24
16
0
17
131
196
32
15
191
133
96
254
255
255
133
192
15
132
171
6
0
0
199
69
252
6
0
0
0
141
77
212
81
139
149
68
254
255
255
139
130
36
80
0
17
139
141
68
254
255
255
139
145
36
80
0
17
139
10
80
255
81
28
219
226
137
133
132
254
255
255
131
189
132
254
255
255
0
125
41
106
28
104
76
31
0
17
139
149
68
254
255
255
139
130
36
80
0
17
80
139
141
132
254
255
255
81
255
21
48
16
0
17
137
133
24
254
255
255
235
10
199
133
24
254
255
255
0
0
0
0
139
85
212
137
149
128
254
255
255
104
9
4
0
0
139
133
128
254
255
255
139
8
139
149
128
254
255
255
82
255
145
64
4
0
0
219
226
137
133
124
254
255
255
131
189
124
254
255
255
0
125
38
104
64
4
0
0
104
148
31
0
17
139
133
128
254
255
255
80
139
141
124
254
255
255
81
255
21
48
16
0
17
137
133
20
254
255
255
235
10
199
133
20
254
255
255
0
0
0
0
141
77
212
255
21
248
16
0
17
199
69
252
7
0
0
0
139
149
68
254
255
255
139
130
36
80
0
17
80
141
141
92
254
255
255
81
255
21
72
16
0
17
199
69
252
8
0
0
0
141
85
212
82
139
133
92
254
255
255
139
8
139
149
92
254
255
255
82
255
81
28
219
226
137
133
132
254
255
255
131
189
132
254
255
255
0
125
35
106
28
104
76
31
0
17
139
133
92
254
255
255
80
139
141
132
254
255
255
81
255
21
48
16
0
17
137
133
16
254
255
255
235
10
199
133
16
254
255
255
0
0
0
0
139
85
212
137
149
128
254
255
255
199
133
36
255
255
255
4
0
2
128
199
133
28
255
255
255
10
0
0
0
139
133
68
254
255
255
139
136
52
80
0
17
137
141
52
255
255
255
199
133
44
255
255
255
8
0
0
0
141
85
208
82
184
16
0
0
0
232
55
218
255
255
139
196
139
141
28
255
255
255
137
8
139
149
32
255
255
255
137
80
4
139
141
36
255
255
255
137
72
8
139
149
40
255
255
255
137
80
12
184
16
0
0
0
232
8
218
255
255
139
196
139
141
44
255
255
255
137
8
139
149
48
255
255
255
137
80
4
139
141
52
255
255
255
137
72
8
139
149
56
255
255
255
137
80
12
139
133
128
254
255
255
139
8
139
149
128
254
255
255
82
255
145
160
0
0
0
219
226
137
133
124
254
255
255
131
189
124
254
255
255
0
125
38
104
160
0
0
0
104
148
31
0
17
139
133
128
254
255
255
80
139
141
124
254
255
255
81
255
21
48
16
0
17
137
133
12
254
255
255
235
10
199
133
12
254
255
255
0
0
0
0
139
85
208
137
149
64
254
255
255
199
69
208
0
0
0
0
139
133
64
254
255
255
137
69
180
199
69
172
9
0
0
0
141
77
204
81
139
149
92
254
255
255
139
2
139
141
92
254
255
255
81
255
80
28
219
226
137
133
120
254
255
255
131
189
120
254
255
255
0
125
35
106
28
104
76
31
0
17
139
149
92
254
255
255
82
139
133
120
254
255
255
80
255
21
48
16
0
17
137
133
8
254
255
255
235
10
199
133
8
254
255
255
0
0
0
0
139
77
204
137
141
116
254
255
255
199
133
4
255
255
255
4
0
2
128
199
133
252
254
255
255
10
0
0
0
139
85
216
137
149
20
255
255
255
199
133
12
255
255
255
8
0
0
0
141
69
200
80
184
16
0
0
0
232
219
216
255
255
139
204
139
149
252
254
255
255
137
17
139
133
0
255
255
255
137
65
4
139
149
4
255
255
255
137
81
8
139
133
8
255
255
255
137
65
12
184
16
0
0
0
232
172
216
255
255
139
204
139
149
12
255
255
255
137
17
139
133
16
255
255
255
137
65
4
139
149
20
255
255
255
137
81
8
139
133
24
255
255
255
137
65
12
139
141
116
254
255
255
139
17
139
133
116
254
255
255
80
255
146
160
0
0
0
219
226
137
133
112
254
255
255
131
189
112
254
255
255
0
125
38
104
160
0
0
0
104
148
31
0
17
139
141
116
254
255
255
81
139
149
112
254
255
255
82
255
21
48
16
0
17
137
133
4
254
255
255
235
10
199
133
4
254
255
255
0
0
0
0
139
69
200
137
133
60
254
255
255
199
69
200
0
0
0
0
139
141
60
254
255
255
137
77
164
199
69
156
9
0
0
0
141
85
220
137
149
212
254
255
255
199
133
204
254
255
255
11
64
0
0
184
16
0
0
0
232
244
215
255
255
139
196
139
77
172
137
8
139
85
176
137
80
4
139
77
180
137
72
8
139
85
184
137
80
12
184
16
0
0
0
232
209
215
255
255
139
196
139
77
156
137
8
139
85
160
137
80
4
139
77
164
137
72
8
139
85
168
137
80
12
184
16
0
0
0
232
174
215
255
255
139
196
139
141
204
254
255
255
137
8
139
149
208
254
255
255
137
80
4
139
141
212
254
255
255
137
72
8
139
149
216
254
255
255
137
80
12
106
3
104
212
31
0
17
139
133
92
254
255
255
80
255
21
204
16
0
17
131
196
60
141
77
204
81
141
85
212
82
106
2
255
21
32
16
0
17
131
196
12
141
69
156
80
141
77
172
81
106
2
255
21
24
16
0
17
131
196
12
199
69
252
9
0
0
0
106
0
141
149
92
254
255
255
82
255
21
72
16
0
17
199
69
252
10
0
0
0
186
144
31
0
17
139
141
68
254
255
255
129
193
52
80
0
17
255
21
168
16
0
17
199
69
252
11
0
0
0
15
191
69
220
133
192
15
133
220
1
0
0
199
69
252
12
0
0
0
141
77
212
81
139
149
68
254
255
255
139
130
36
80
0
17
139
141
68
254
255
255
139
145
36
80
0
17
139
10
80
255
81
28
219
226
137
133
132
254
255
255
131
189
132
254
255
255
0
125
41
106
28
104
76
31
0
17
139
149
68
254
255
255
139
130
36
80
0
17
80
139
141
132
254
255
255
81
255
21
48
16
0
17
137
133
0
254
255
255
235
10
199
133
0
254
255
255
0
0
0
0
139
85
212
137
149
128
254
255
255
141
133
136
254
255
255
80
139
141
128
254
255
255
139
17
139
133
128
254
255
255
80
255
146
124
5
0
0
219
226
137
133
124
254
255
255
131
189
124
254
255
255
0
125
38
104
124
5
0
0
104
148
31
0
17
139
141
128
254
255
255
81
139
149
124
254
255
255
82
255
21
48
16
0
17
137
133
252
253
255
255
235
10
199
133
252
253
255
255
0
0
0
0
139
133
136
254
255
255
80
232
2
226
255
255
255
21
44
16
0
17
141
77
212
255
21
248
16
0
17
199
69
252
13
0
0
0
141
77
212
81
139
149
68
254
255
255
139
130
36
80
0
17
139
141
68
254
255
255
139
145
36
80
0
17
139
10
80
255
81
28
219
226
137
133
132
254
255
255
131
189
132
254
255
255
0
125
41
106
28
104
76
31
0
17
139
149
68
254
255
255
139
130
36
80
0
17
80
139
141
132
254
255
255
81
255
21
48
16
0
17
137
133
248
253
255
255
235
10
199
133
248
253
255
255
0
0
0
0
139
85
212
137
149
128
254
255
255
104
9
4
0
0
139
133
128
254
255
255
139
8
139
149
128
254
255
255
82
255
145
64
4
0
0
219
226
137
133
124
254
255
255
131
189
124
254
255
255
0
125
38
104
64
4
0
0
104
148
31
0
17
139
133
128
254
255
255
80
139
141
124
254
255
255
81
255
21
48
16
0
17
137
133
244
253
255
255
235
10
199
133
244
253
255
255
0
0
0
0
141
77
212
255
21
248
16
0
17
199
69
252
14
0
0
0
106
0
232
11
225
255
255
255
21
44
16
0
17
199
69
252
17
0
0
0
186
144
31
0
17
139
141
68
254
255
255
129
193
52
80
0
17
255
21
168
16
0
17
199
69
252
18
0
0
0
104
240
37
0
17
106
1
106
0
106
0
232
220
222
255
255
137
133
136
254
255
255
255
21
44
16
0
17
139
149
68
254
255
255
139
133
136
254
255
255
137
130
76
80
0
17
104
185
61
0
17
235
98
141
77
188
81
141
85
192
82
141
69
196
80
141
77
200
81
141
85
204
82
141
69
208
80
141
77
212
81
106
7
255
21
32
16
0
17
131
196
32
141
149
60
255
255
255
82
141
133
76
255
255
255
80
141
141
92
255
255
255
81
141
149
108
255
255
255
82
141
133
124
255
255
255
80
141
77
140
81
141
85
156
82
141
69
172
80
106
8
255
21
24
16
0
17
131
196
36
195
141
141
92
254
255
255
255
21
248
16
0
17
141
77
216
255
21
244
16
0
17
195
139
77
224
100
137
13
0
0
0
0
95
94
91
139
229
93
195
204
204
204
204
204
204
158
158
158
158
252
61
0
0
255
255
255
255
255
255
255
255
252
62
0
0
0
16
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
10
63
0
0
20
63
0
0
34
63
0
0
56
63
0
0
72
63
0
0
90
63
0
0
108
63
0
0
128
63
0
0
144
63
0
0
164
63
0
0
178
63
0
0
194
63
0
0
216
63
0
0
240
63
0
0
79
2
0
128
0
64
0
0
14
64
0
0
30
64
0
0
48
64
0
0
68
64
0
0
86
64
0
0
102
64
0
0
122
64
0
0
132
64
0
0
146
64
0
0
166
64
0
0
180
64
0
0
198
64
0
0
216
64
0
0
230
64
0
0
250
64
0
0
16
65
0
0
26
65
0
0
40
65
0
0
68
65
0
0
90
65
0
0
104
65
0
0
122
65
0
0
142
65
0
0
152
65
0
0
178
65
0
0
196
65
0
0
214
65
0
0
230
65
0
0
248
65
0
0
101
0
0
128
102
0
0
128
6
66
0
0
103
0
0
128
104
0
0
128
105
0
0
128
20
66
0
0
40
66
0
0
58
66
0
0
82
66
0
0
104
66
0
0
114
66
0
0
130
66
0
0
146
66
0
0
156
66
0
0
166
66
0
0
176
66
0
0
192
66
0
0
0
0
0
0
77
83
86
66
86
77
54
48
46
68
76
76
0
0
0
0
95
67
73
99
111
115
0
0
0
0
95
97
100
106
95
102
112
116
97
110
0
0
0
0
95
95
118
98
97
86
97
114
86
97
114
103
78
111
102
114
101
101
0
0
0
0
95
95
118
98
97
70
114
101
101
86
97
114
0
0
0
0
95
95
118
98
97
65
112
116
79
102
102
115
101
116
0
0
0
0
95
95
118
98
97
83
116
114
86
97
114
77
111
118
101
0
0
0
95
95
118
98
97
70
114
101
101
86
97
114
76
105
115
116
0
0
0
0
95
97
100
106
95
102
100
105
118
95
109
54
52
0
0
0
95
95
118
98
97
70
114
101
101
79
98
106
76
105
115
116
0
0
0
0
95
97
100
106
95
102
112
114
101
109
49
0
0
0
95
95
118
98
97
86
97
114
67
109
112
78
101
0
0
0
95
95
118
98
97
83
101
116
83
121
115
116
101
109
69
114
114
111
114
0
0
0
95
95
118
98
97
72
114
101
115
117
108
116
67
104
101
99
107
79
98
106
0
0
0
0
95
97
100
106
95
102
100
105
118
95
109
51
50
0
0
0
95
95
118
98
97
79
98
106
83
101
116
0
0
0
95
95
118
98
97
79
110
69
114
114
111
114
0
0
0
0
95
97
100
106
95
102
100
105
118
95
109
49
54
105
0
0
0
0
95
95
118
98
97
79
98
106
83
101
116
65
100
100
114
101
102
0
0
0
95
97
100
106
95
102
100
105
118
114
95
109
49
54
105
0
0
0
95
95
118
98
97
66
111
111
108
86
97
114
0
0
0
0
95
95
118
98
97
66
111
111
108
86
97
114
78
117
108
108
0
0
0
0
95
67
73
115
105
110
0
0
0
0
95
95
118
98
97
67
104
107
115
116
107
0
0
0
69
86
69
78
84
95
83
73
78
75
95
65
100
100
82
101
102
0
0
0
95
95
118
98
97
83
116
114
67
109
112
0
0
0
68
108
108
70
117
110
99
116
105
111
110
67
97
108
108
0
0
0
95
95
118
98
97
67
97
115
116
79
98
106
86
97
114
0
0
0
95
97
100
106
95
102
112
97
116
97
110
0
0
0
95
95
118
98
97
76
97
116
101
73
100
67
97
108
108
76
100
0
0
0
69
86
69
78
84
95
83
73
78
75
95
82
101
108
101
97
115
101
0
0
0
0
95
67
73
115
113
114
116
0
0
0
95
95
118
98
97
86
97
114
65
110
100
0
0
0
69
86
69
78
84
95
83
73
78
75
95
81
117
101
114
121
73
110
116
101
114
102
97
99
101
0
0
0
95
95
118
98
97
69
120
99
101
112
116
72
97
110
100
108
101
114
0
0
0
0
95
97
100
106
95
102
112
114
101
109
0
0
0
0
95
97
100
106
95
102
100
105
118
114
95
109
54
52
0
0
0
0
95
95
118
98
97
70
80
69
120
99
101
112
116
105
111
110
0
0
0
0
95
67
73
108
111
103
0
0
0
0
95
95
118
98
97
86
97
114
76
97
116
101
77
101
109
67
97
108
108
76
100
82
102
0
0
0
95
97
100
106
95
102
100
105
118
95
109
51
50
105
0
0
0
0
95
97
100
106
95
102
100
105
118
114
95
109
51
50
105
0
0
0
95
95
118
98
97
83
116
114
67
111
112
121
0
0
0
0
95
97
100
106
95
102
100
105
118
114
95
109
51
50
0
0
0
0
95
97
100
106
95
102
100
105
118
95
114
0
0
0
95
95
118
98
97
73
52
86
97
114
0
0
0
0
95
95
118
98
97
76
97
116
101
77
101
109
67
97
108
108
0
0
0
0
95
95
118
98
97
83
116
114
84
111
65
110
115
105
0
0
0
0
95
95
118
98
97
86
97
114
76
97
116
101
77
101
109
67
97
108
108
76
100
0
0
0
95
95
118
98
97
76
97
116
101
77
101
109
67
97
108
108
76
100
0
0
0
0
95
67
73
97
116
97
110
0
0
0
95
95
118
98
97
83
116
114
77
111
118
101
0
0
0
0
95
95
118
98
97
67
97
115
116
79
98
106
0
0
0
0
95
97
108
108
109
117
108
0
0
0
95
67
73
116
97
110
0
0
0
0
95
67
73
101
120
112
0
0
0
0
95
95
118
98
97
70
114
101
101
83
116
114
0
0
0
0
95
95
118
98
97
70
114
101
101
79
98
106
0
0
0
0
0
0
67
177
199
77
0
0
0
0
32
67
0
0
1
0
0
0
4
0
0
0
4
0
0
0
248
66
0
0
8
67
0
0
24
67
0
0
26
35
0
0
238
34
0
0
4
35
0
0
216
34
0
0
55
67
0
0
71
67
0
0
89
67
0
0
107
67
0
0
0
0
1
0
2
0
3
0
68
114
97
103
65
110
100
68
114
111
112
87
97
116
99
104
101
114
46
100
108
108
0
68
108
108
67
97
110
85
110
108
111
97
100
78
111
119
0
68
108
108
71
101
116
67
108
97
115
115
79
98
106
101
99
116
0
68
108
108
82
101
103
105
115
116
101
114
83
101
114
118
101
114
0
68
108
108
85
110
114
101
103
105
115
116
101
114
83
101
114
118
101
114
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
67
177
199
77
16
5
0
0
2
0
1
0
232
0
0
128
88
0
0
128
248
0
0
128
64
0
0
128
16
0
0
0
40
0
0
128
0
0
0
0
67
177
199
77
16
5
0
0
0
0
1
0
1
0
0
0
112
0
0
128
0
0
0
0
67
177
199
77
16
5
0
0
0
0
1
0
1
0
0
0
136
0
0
128
0
0
0
0
67
177
199
77
16
5
0
0
0
0
1
0
1
0
0
0
160
0
0
128
0
0
0
0
67
177
199
77
16
5
0
0
0
0
1
0
9
4
0
0
184
0
0
0
0
0
0
0
67
177
199
77
16
5
0
0
0
0
1
0
0
0
0
0
200
0
0
0
0
0
0
0
67
177
199
77
16
5
0
0
0
0
1
0
0
0
0
0
216
0
0
0
48
97
0
0
76
2
0
0
176
4
0
0
0
0
0
0
124
99
0
0
20
0
0
0
176
4
0
0
0
0
0
0
144
99
0
0
96
6
0
0
176
4
0
0
0
0
0
0
7
0
84
0
89
0
80
0
69
0
76
0
73
0
66
0
21
0
95
0
73
0
73
0
68
0
95
0
68
0
82
0
65
0
71
0
65
0
78
0
68
0
68
0
82
0
79
0
80
0
67
0
76
0
65
0
83
0
83
0
0
0
0
0
0
0
0
0
0
0
0
0
76
2
52
0
0
0
86
0
83
0
95
0
86
0
69
0
82
0
83
0
73
0
79
0
78
0
95
0
73
0
78
0
70
0
79
0
0
0
0
0
189
4
239
254
0
0
1
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
4
0
0
0
2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
68
0
0
0
0
0
86
0
97
0
114
0
70
0
105
0
108
0
101
0
73
0
110
0
102
0
111
0
0
0
0
0
36
0
4
0
0
0
84
0
114
0
97
0
110
0
115
0
108
0
97
0
116
0
105
0
111
0
110
0
0
0
0
0
9
4
176
4
172
1
0
0
1
0
83
0
116
0
114
0
105
0
110
0
103
0
70
0
105
0
108
0
101
0
73
0
110
0
102
0
111
0
0
0
136
1
0
0
1
0
48
0
52
0
48
0
57
0
48
0
52
0
66
0
48
0
0
0
72
0
38
0
1
0
80
0
114
0
111
0
100
0
117
0
99
0
116
0
78
0
97
0
109
0
101
0
0
0
0
0
68
0
114
0
97
0
103
0
65
0
110
0
100
0
68
0
114
0
111
0
112
0
87
0
97
0
116
0
99
0
104
0
101
0
114
0
0
0
0
0
44
0
10
0
1
0
70
0
105
0
108
0
101
0
86
0
101
0
114
0
115
0
105
0
111
0
110
0
0
0
0
0
49
0
46
0
48
0
48
0
0
0
0
0
48
0
10
0
1
0
80
0
114
0
111
0
100
0
117
0
99
0
116
0
86
0
101
0
114
0
115
0
105
0
111
0
110
0
0
0
49
0
46
0
48
0
48
0
0
0
0
0
72
0
38
0
1
0
73
0
110
0
116
0
101
0
114
0
110
0
97
0
108
0
78
0
97
0
109
0
101
0
0
0
68
0
114
0
97
0
103
0
65
0
110
0
100
0
68
0
114
0
111
0
112
0
87
0
97
0
116
0
99
0
104
0
101
0
114
0
0
0
0
0
88
0
46
0
1
0
79
0
114
0
105
0
103
0
105
0
110
0
97
0
108
0
70
0
105
0
108
0
101
0
110
0
97
0
109
0
101
0
0
0
68
0
114
0
97
0
103
0
65
0
110
0
100
0
68
0
114
0
111
0
112
0
87
0
97
0
116
0
99
0
104
0
101
0
114
0
46
0
100
0
108
0
108
0
0
0
0
0
44
0
2
0
1
0
79
0
76
0
69
0
83
0
101
0
108
0
102
0
82
0
101
0
103
0
105
0
115
0
116
0
101
0
114
0
0
0
0
0
0
0
0
0
16
0
0
0
207
12
252
140
45
102
147
76
142
157
75
199
97
146
102
79
77
83
70
84
2
0
1
0
24
0
0
0
9
4
0
0
0
0
0
0
65
0
0
0
7
0
0
0
0
0
0
0
2
0
0
0
255
255
255
255
0
0
0
0
0
0
0
0
6
0
0
0
69
0
0
0
0
0
0
0
255
255
255
255
0
0
0
0
32
0
0
0
128
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
100
0
0
0
76
1
0
0
200
0
0
0
255
255
255
255
15
0
0
0
52
3
0
0
12
0
0
0
255
255
255
255
15
0
0
0
64
3
0
0
28
0
0
0
255
255
255
255
15
0
0
0
36
3
0
0
16
0
0
0
255
255
255
255
15
0
0
0
20
2
0
0
128
0
0
0
255
255
255
255
15
0
0
0
148
2
0
0
144
0
0
0
255
255
255
255
15
0
0
0
92
3
0
0
0
2
0
0
255
255
255
255
15
0
0
0
92
5
0
0
152
0
0
0
255
255
255
255
15
0
0
0
255
255
255
255
0
0
0
0
255
255
255
255
15
0
0
0
244
5
0
0
8
0
0
0
255
255
255
255
15
0
0
0
255
255
255
255
0
0
0
0
255
255
255
255
15
0
0
0
255
255
255
255
0
0
0
0
255
255
255
255
15
0
0
0
252
5
0
0
12
0
0
0
255
255
255
255
15
0
0
0
255
255
255
255
0
0
0
0
255
255
255
255
15
0
0
0
255
255
255
255
0
0
0
0
255
255
255
255
15
0
0
0
52
33
0
0
8
6
0
0
0
0
0
0
0
0
0
0
3
0
0
0
0
0
0
0
2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
120
0
0
0
208
17
0
0
32
0
0
0
1
0
0
0
255
255
255
255
0
0
0
0
0
0
0
0
255
255
255
255
1
0
36
0
4
0
0
0
1
0
0
0
2
0
7
0
0
0
0
0
255
255
255
255
37
33
1
0
96
6
0
0
0
0
0
0
0
0
0
0
3
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
48
0
0
0
2
0
0
0
64
0
0
0
1
0
0
0
255
255
255
255
0
0
0
0
0
0
0
0
255
255
255
255
1
0
0
0
4
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
255
255
255
255
255
255
255
255
255
255
255
255
96
0
0
0
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
48
0
0
0
255
255
255
255
255
255
255
255
24
0
0
0
255
255
255
255
120
0
0
0
255
255
255
255
255
255
255
255
72
0
0
0
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
0
0
0
0
255
255
255
255
0
123
134
80
105
187
208
17
168
255
0
160
201
17
0
89
255
255
255
255
255
255
255
255
147
184
67
228
167
148
226
71
181
13
101
69
217
99
241
239
254
255
255
255
255
255
255
255
28
208
119
81
232
141
95
73
131
191
192
43
165
142
112
145
100
0
0
0
255
255
255
255
48
4
2
0
0
0
0
0
192
0
0
0
0
0
0
70
2
0
0
0
255
255
255
255
0
4
2
0
0
0
0
0
192
0
0
0
0
0
0
70
1
0
0
0
255
255
255
255
207
12
252
140
45
102
147
76
142
157
75
199
97
146
102
79
0
0
0
0
255
255
255
255
0
0
0
0
1
0
0
0
255
255
255
255
255
255
255
255
0
0
1
3
0
0
0
0
96
0
0
0
72
0
0
0
0
0
0
0
2
0
0
0
45
0
115
116
100
111
108
101
50
46
116
108
98
87
87
87
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
64
0
0
0
0
0
0
0
255
255
255
255
255
255
255
255
32
0
0
0
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
92
0
0
0
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
112
0
0
0
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
132
0
0
0
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
18
0
152
209
68
114
97
103
65
110
100
68
114
111
112
87
97
116
99
104
101
114
87
87
0
0
0
0
255
255
255
255
17
56
155
117
95
68
114
97
103
65
110
100
68
114
111
112
67
108
97
115
115
87
87
87
100
0
0
0
255
255
255
255
16
56
151
227
68
114
97
103
65
110
100
68
114
111
112
67
108
97
115
115
0
0
0
0
255
255
255
255
5
0
190
6
83
116
97
114
116
87
87
87
255
255
255
255
255
255
255
255
7
0
205
173
84
104
105
115
87
75
66
87
0
0
0
0
255
255
255
255
6
0
88
142
70
105
110
105
115
104
87
87
26
0
12
64
12
0
12
128
0
0
0
0
233
31
0
140
255
255
255
255
60
0
0
0
36
0
0
0
25
0
25
128
0
0
0
0
29
0
76
0
9
4
0
0
1
0
0
0
0
0
0
0
112
0
0
0
3
0
0
0
24
0
1
0
25
0
25
128
0
0
0
0
33
0
52
0
9
4
1
0
0
0
0
0
0
0
3
96
1
0
3
96
92
0
0
0
132
0
0
0
0
0
0
0
36
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
16
0
0
40
2
0
0
4
49
12
49
28
49
44
49
52
49
60
49
64
49
68
49
72
49
76
49
80
49
84
49
88
49
92
49
96
49
100
49
104
49
108
49
112
49
116
49
120
49
124
49
128
49
132
49
136
49
156
49
168
49
172
49
180
49
188
49
192
49
196
49
200
49
204
49
208
49
212
49
216
49
220
49
224
49
228
49
232
49
236
49
240
49
244
49
248
49
252
49
0
50
4
50
18
50
24
50
30
50
36
50
42
50
48
50
54
50
60
50
66
50
72
50
78
50
84
50
90
50
96
50
102
50
108
50
114
50
120
50
126
50
132
50
138
50
144
50
150
50
156
50
162
50
168
50
174
50
180
50
186
50
192
50
198
50
204
50
210
50
216
50
222
50
228
50
234
50
240
50
246
50
252
50
2
51
8
51
14
51
20
51
26
51
32
51
38
51
44
51
50
51
56
51
62
51
68
51
74
51
80
51
86
51
92
51
98
51
104
51
110
51
116
51
122
51
128
51
134
51
142
51
147
51
100
52
120
52
124
52
132
52
148
52
212
52
220
52
228
52
236
52
244
52
252
52
4
53
12
53
20
53
28
53
36
53
44
53
52
53
60
53
112
53
140
53
144
53
148
53
248
53
0
54
12
54
16
54
40
54
48
54
56
54
64
54
72
54
80
54
92
54
96
54
108
54
112
54
124
54
140
54
148
54
156
54
160
54
168
54
172
54
176
54
180
54
184
54
228
54
236
54
240
54
248
54
252
54
0
55
20
57
32
57
36
57
48
57
76
57
92
57
112
57
120
57
136
57
144
57
160
57
168
57
172
57
176
57
180
57
184
57
208
57
212
57
160
58
176
58
180
58
184
58
16
59
20
59
28
59
41
59
52
59
57
59
84
59
88
59
96
59
109
59
120
59
125
59
156
59
160
59
168
59
181
59
192
59
197
59
224
59
228
59
236
59
249
59
4
60
9
60
36
60
40
60
48
60
61
60
72
60
77
60
104
60
108
60
116
60
129
60
140
60
145
60
180
60
184
60
192
60
205
60
216
60
221
60
248
60
252
60
4
61
17
61
28
61
33
61
64
61
68
61
76
61
89
61
100
61
105
61
136
61
140
61
148
61
161
61
172
61
177
61
212
61
216
61
224
61
237
61
248
61
253
61
32
62
36
62
44
62
57
62
68
62
73
62
104
62
108
62
116
62
129
62
140
62
145
62
184
62
188
62
196
62
209
62
220
62
225
62
0
32
0
0
148
1
0
0
0
50
4
50
8
50
12
50
36
50
72
50
96
50
108
50
132
50
136
50
140
50
156
50
176
50
184
50
188
50
192
50
218
50
223
50
228
50
240
50
245
50
250
50
6
51
11
51
16
51
28
51
71
51
101
51
183
51
213
51
23
52
53
52
60
52
78
52
87
52
95
52
106
52
120
52
132
52
139
52
151
52
166
52
175
52
184
52
200
52
212
52
219
52
225
52
242
52
254
52
4
53
9
53
20
53
27
53
33
53
41
53
48
53
54
53
60
53
71
53
85
53
95
53
112
53
118
53
126
53
132
53
138
53
145
53
152
53
169
53
175
53
180
53
191
53
207
53
247
53
28
54
47
54
53
54
81
54
103
54
124
54
140
54
152
54
176
54
188
54
199
54
7
55
21
55
55
55
67
55
91
55
103
55
114
55
183
55
197
55
13
56
36
56
47
56
53
56
59
56
87
56
108
56
124
56
136
56
172
56
184
56
208
56
220
56
231
56
44
57
58
57
93
57
128
57
140
57
164
57
176
57
187
57
254
57
12
58
39
58
62
58
74
58
98
58
110
58
121
58
185
58
199
58
239
58
5
59
19
59
36
59
53
59
123
59
155
59
176
59
182
59
188
59
219
59
231
59
255
59
11
60
22
60
91
60
105
60
130
60
144
60
154
60
168
60
174
60
190
60
202
60
236
60
251
60
10
61
33
61
54
61
68
61
80
61
100
61
115
61
120
61
131
61
151
61
163
61
199
61
229
61
234
61
247
61
255
61
13
62
19
62
25
62
50
62
58
62
68
62
101
62
109
62
118
62
123
62
131
62
139
62
146
62
153
62
164
62
199
62
236
62
255
62
5
63
33
63
52
63
66
63
89
63
101
63
131
63
143
63
157
63
241
63
0
0
0
48
0
0
212
0
0
0
5
48
30
48
44
48
54
48
65
48
81
48
93
48
136
48
148
48
178
48
190
48
204
48
7
49
169
49
189
49
243
49
255
49
29
50
41
50
55
50
11
51
31
51
65
51
77
51
107
51
119
51
133
51
89
52
109
52
136
52
160
52
170
52
181
52
195
52
205
52
239
52
48
53
62
53
73
53
138
53
155
53
172
53
193
53
200
53
243
53
38
54
79
54
91
54
121
54
133
54
147
54
227
54
247
54
18
55
37
55
51
55
104
55
124
55
183
55
89
56
109
56
205
56
225
56
181
57
201
57
138
58
151
58
170
58
189
58
214
58
226
58
238
58
244
58
30
59
42
59
72
59
84
59
98
59
180
59
200
59
236
59
245
59
12
60
24
60
54
60
66
60
80
60
160
60
180
60
207
60
227
60
239
60
251
60
1
61
13
61
36
61
54
61
59
61
97
61
155
61
171
61
180
61
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
 
Last edited:
Upvote 0
Has anybody tested the workbook and noticed any problems ? would appreciate some feedback before taking this any further.
 
Upvote 0
Nice one - very clever.

It works fine on Excel 2003 and Windows XP, after the following initial setup trouble:

I downloaded your demo workbook and upon opening it got a 'Run-time error 53. File not found: DIRECTcom' message. I downloaded RichClient-Toolset binaries from http://www.thecommon.net/3.html and extracted DirectCOM.dll to C:\Windows\System32. This was needed because you have the following in the demo workbook but not in the posted code:
Code:
Private Const DCOM_DLL_PATH_NAME As String _
= "C:\WINDOWS\system32\DirectCOM.dll"
 
Upvote 0
Thanks John for looking into this and glad it worked for you.

This was needed because you have the following in the demo workbook but not in the posted code:
Thanks for bringing this problem to my attention. I forgot to include the DirectCom bytes in the code. fortunately, being a small dll (under 20 kbs) ,I stored its bytes in the workbook as well.

Hopefully, the code below should now work without the need of any dll registration and more importantly without fearing of crashing the application: (dll bytes are stored in the 'DllBytes' hidden worksheet)

Workbook demo.

Code update (goes in the workbook module):

Code:
Option Explicit
 
Private Const DCOM_DLL_PATH_NAME As String _
= "C:\WINDOWS\system32\DirectCOM.dll"
 
Private Const JAAFAR_DLL_PATH_NAME As String _
= "C:\WINDOWS\system32\DragAndDropWatcher.dll"

'CreateObject-Replacement (FileBased)
Private Declare Function GETINSTANCE Lib "DirectCom" _
(FName As String, ClassName As String) As Object

Private Declare Function UNLOADCOMDLL Lib "DirectCom" _
(FName As String, ClassName As String) As Long

Private oDragAndDropInstance As Object


'=================================================================
'Drag and Drop custom event.
'Event Procedure Must be PUBLIC !!! and located in the workbook module.
'Use the ByRef Cancel argument to prevent the drop operation.

Public Sub OnCellDrop _
(ByVal Source As Range, ByVal Target As Range, ByRef Cancel As Boolean)

    MsgBox "You are trying to drag the Range : " & Source.Address & _
    vbNewLine & " onto the Range : " & Target.Address & vbNewLine _
    & vbNewLine & "This Action is not permitted.", vbCritical
    
    Cancel = True

End Sub
'=====================================================================


Private Sub Workbook_Open()

        'Create the DirectCom & DragAndDropWatcher dlls.
        Call CreateDlls
        
        'load an instance of the 'DragAndDropWatcher.dll' Class.
        Set oDragAndDropInstance = _
        GETINSTANCE(JAAFAR_DLL_PATH_NAME, "DragAndDropClass")
        DoEvents

        If Not oDragAndDropInstance Is Nothing Then
            'start watching the Drop and Drag operations.
            Call oDragAndDropInstance.Start(ThisWorkbook)
        Else
            MsgBox "Unable to load the " & _
            "'DragAndDropWatcher' dll.", vbInformation
        End If
''
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    
    If Not oDragAndDropInstance Is Nothing Then
        oDragAndDropInstance.Finish
        Set oDragAndDropInstance = Nothing
    End If
    
    UNLOADCOMDLL JAAFAR_DLL_PATH_NAME, "DragAndDropClass"

End Sub



'Create the 'DragAndDropWatcher' dll from the
'Bytes stored in the '"DllBytes" hidden worksheet.
Private Sub CreateDlls()
 
    Dim Bytes() As Byte
    Dim lFileNum As Integer
    Dim aVar
    Dim x As Long
 
    On Error Resume Next
    
    If Len(Dir(DCOM_DLL_PATH_NAME)) = 0 Then
    
       With Worksheets("DllBytes")
           aVar = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value
       End With
     
       ReDim Bytes(LBound(aVar) To UBound(aVar))
       For x = LBound(aVar) To UBound(aVar)
           Bytes(x) = CByte(aVar(x, 1))
       Next
    
       lFileNum = FreeFile
       Open JAAFAR_DLL_PATH_NAME For Binary As #lFileNum
           Put #lFileNum, 1, Bytes
       Close lFileNum
    
    End If
    

    If Len(Dir(DCOM_DLL_PATH_NAME)) = 0 Then
    
        Erase Bytes
        
        With Worksheets("dllBytes")
            aVar = .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp)).Value
        End With
        
        ReDim Bytes(LBound(aVar) To UBound(aVar))
        For x = LBound(aVar) To UBound(aVar)
            Bytes(x) = CByte(aVar(x, 1))
        Next
        lFileNum = FreeFile
        Open DCOM_DLL_PATH_NAME For Binary As #lFileNum
            Put #lFileNum, 1, Bytes
        Close lFileNum
        
    End If
    

End Sub
 
Upvote 0
DragAndDrop2.xls from the latest workbook demo works perfectly now.

The only thing I noticed is that your DirectCOM.dll is 20 KB, whereas DirectCOM.dll from http://www.thecommon.net/3.html is 23 KB. Maybe you have an earlier version.

I downloaded it some time ago from somewhere I can't remember. I guess it is an ealier version but is good enough for the task of loading dlls without having to pre-register them.
 
Upvote 0

Forum statistics

Threads
1,224,598
Messages
6,179,814
Members
452,945
Latest member
Bib195

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top