active
fst
0
Z
mark
nil
active
fst
s
X
cons
Y
Z
mark
cons
Y
fst
X
Z
active
from
X
mark
cons
X
from
s
X
active
add
0
X
mark
X
active
add
s
X
Y
mark
s
add
X
Y
active
len
nil
mark
0
active
len
cons
X
Z
mark
s
len
Z
active
cons
X1
X2
cons
active
X1
X2
active
fst
X1
X2
fst
active
X1
X2
active
fst
X1
X2
fst
X1
active
X2
active
from
X
from
active
X
active
add
X1
X2
add
active
X1
X2
active
add
X1
X2
add
X1
active
X2
active
len
X
len
active
X
cons
mark
X1
X2
mark
cons
X1
X2
fst
mark
X1
X2
mark
fst
X1
X2
fst
X1
mark
X2
mark
fst
X1
X2
from
mark
X
mark
from
X
add
mark
X1
X2
mark
add
X1
X2
add
X1
mark
X2
mark
add
X1
X2
len
mark
X
mark
len
X
proper
0
ok
0
proper
s
X
s
proper
X
proper
nil
ok
nil
proper
cons
X1
X2
cons
proper
X1
proper
X2
proper
fst
X1
X2
fst
proper
X1
proper
X2
proper
from
X
from
proper
X
proper
add
X1
X2
add
proper
X1
proper
X2
proper
len
X
len
proper
X
s
ok
X
ok
s
X
cons
ok
X1
ok
X2
ok
cons
X1
X2
fst
ok
X1
ok
X2
ok
fst
X1
X2
from
ok
X
ok
from
X
add
ok
X1
ok
X2
ok
add
X1
X2
len
ok
X
ok
len
X
top
mark
X
top
proper
X
top
ok
X
top
active
X
2.2
active
fst
s
X
cons
Y
Z
fst
X
Z
proper
fst
X1
X2
proper
X1
active
fst
X1
X2
active
X2
proper
add
X1
X2
proper
X2
top
mark
X
proper
X
proper
fst
X1
X2
fst
proper
X1
proper
X2
add
mark
X1
X2
add
X1
X2
proper
from
X
from
proper
X
len
mark
X
len
X
active
cons
X1
X2
active
X1
fst
mark
X1
X2
fst
X1
X2
proper
from
X
proper
X
top
ok
X
top
active
X
from
mark
X
from
X
fst
ok
X1
ok
X2
fst
X1
X2
active
from
X
s
X
active
from
X
active
X
active
add
X1
X2
active
X2
active
fst
X1
X2
active
X1
proper
cons
X1
X2
proper
X2
proper
cons
X1
X2
proper
X1
top
mark
X
top
proper
X
active
from
X
from
active
X
active
add
s
X
Y
s
add
X
Y
proper
s
X
s
proper
X
from
ok
X
from
X
active
cons
X1
X2
cons
active
X1
X2
active
from
X
cons
X
from
s
X
add
X1
mark
X2
add
X1
X2
active
len
X
active
X
top
ok
X
active
X
fst
X1
mark
X2
fst
X1
X2
active
fst
X1
X2
fst
active
X1
X2
proper
add
X1
X2
add
proper
X1
proper
X2
len
ok
X
len
X
proper
fst
X1
X2
proper
X2
active
fst
X1
X2
fst
X1
active
X2
proper
cons
X1
X2
cons
proper
X1
proper
X2
proper
add
X1
X2
proper
X1
active
len
cons
X
Z
len
Z
active
add
X1
X2
active
X1
active
add
s
X
Y
add
X
Y
active
len
X
len
active
X
active
len
cons
X
Z
s
len
Z
add
ok
X1
ok
X2
add
X1
X2
s
ok
X
s
X
active
add
X1
X2
add
active
X1
X2
proper
len
X
len
proper
X
active
fst
s
X
cons
Y
Z
cons
Y
fst
X
Z
cons
mark
X1
X2
cons
X1
X2
active
add
X1
X2
add
X1
active
X2
proper
s
X
proper
X
proper
len
X
proper
X
active
from
X
from
s
X
cons
ok
X1
ok
X2
cons
X1
X2
true
top
mark
X
top
proper
X
top
ok
X
top
active
X
true
len
1
0
cons
2
0
s
1
11650
top
1
0
fst
2
1
2
43209
top
1
1
0
fst
2
0
proper
1
1
0
ok
1
1
0
0
0
5876
from
1
1
41055
s
1
0
nil
0
32018
mark
1
1
1
proper
1
0
from
1
0
active
1
1
0
cons
2
1
41054
active
1
0
add
2
0
add
2
1
2
12280
len
1
1
1
top
ok
X
top
active
X
from
mark
X
mark
from
X
active
add
0
X
mark
X
cons
mark
X1
X2
mark
cons
X1
X2
active
cons
X1
X2
cons
active
X1
X2
active
fst
0
Z
mark
nil
active
from
X
mark
cons
X
from
s
X
fst
mark
X1
X2
mark
fst
X1
X2
len
mark
X
mark
len
X
proper
fst
X1
X2
fst
proper
X1
proper
X2
add
mark
X1
X2
mark
add
X1
X2
fst
ok
X1
ok
X2
ok
fst
X1
X2
fst
X1
mark
X2
mark
fst
X1
X2
proper
from
X
from
proper
X
add
ok
X1
ok
X2
ok
add
X1
X2
proper
0
ok
0
proper
add
X1
X2
add
proper
X1
proper
X2
active
add
s
X
Y
mark
s
add
X
Y
from
ok
X
ok
from
X
active
fst
X1
X2
fst
X1
active
X2
active
len
cons
X
Z
mark
s
len
Z
add
X1
mark
X2
mark
add
X1
X2
proper
cons
X1
X2
cons
proper
X1
proper
X2
s
ok
X
ok
s
X
active
len
X
len
active
X
cons
ok
X1
ok
X2
ok
cons
X1
X2
active
add
X1
X2
add
active
X1
X2
proper
s
X
s
proper
X
proper
nil
ok
nil
active
from
X
from
active
X
active
fst
X1
X2
fst
active
X1
X2
active
add
X1
X2
add
X1
active
X2
active
len
nil
mark
0
len
ok
X
ok
len
X
proper
len
X
len
proper
X
active
fst
s
X
cons
Y
Z
mark
cons
Y
fst
X
Z
top
ok
X
top
active
X
true
len
1
0
cons
2
0
s
1
1
1
top
1
0
fst
2
1
1
top
1
1
0
fst
2
0
proper
1
1
27377
ok
1
1
27377
0
0
1
from
1
1
1
s
1
0
nil
0
32018
mark
1
1
proper
1
0
from
1
0
active
1
1
1
cons
2
1
1
active
1
0
add
2
0
add
2
1
1
len
1
1
0
from
mark
X
mark
from
X
active
add
0
X
mark
X
cons
mark
X1
X2
mark
cons
X1
X2
active
cons
X1
X2
cons
active
X1
X2
active
fst
0
Z
mark
nil
active
from
X
mark
cons
X
from
s
X
fst
mark
X1
X2
mark
fst
X1
X2
len
mark
X
mark
len
X
proper
fst
X1
X2
fst
proper
X1
proper
X2
add
mark
X1
X2
mark
add
X1
X2
fst
ok
X1
ok
X2
ok
fst
X1
X2
fst
X1
mark
X2
mark
fst
X1
X2
proper
from
X
from
proper
X
add
ok
X1
ok
X2
ok
add
X1
X2
proper
0
ok
0
proper
add
X1
X2
add
proper
X1
proper
X2
active
add
s
X
Y
mark
s
add
X
Y
from
ok
X
ok
from
X
active
fst
X1
X2
fst
X1
active
X2
active
len
cons
X
Z
mark
s
len
Z
add
X1
mark
X2
mark
add
X1
X2
proper
cons
X1
X2
cons
proper
X1
proper
X2
s
ok
X
ok
s
X
active
len
X
len
active
X
cons
ok
X1
ok
X2
ok
cons
X1
X2
active
add
X1
X2
add
active
X1
X2
proper
s
X
s
proper
X
proper
nil
ok
nil
active
from
X
from
active
X
active
fst
X1
X2
fst
active
X1
X2
active
add
X1
X2
add
X1
active
X2
active
len
nil
mark
0
len
ok
X
ok
len
X
proper
len
X
len
proper
X
active
fst
s
X
cons
Y
Z
mark
cons
Y
fst
X
Z
top
mark
X
proper
X
false
top
ok
X
active
X
false
proper
len
X
proper
X
proper
s
X
proper
X
proper
cons
X1
X2
proper
X1
proper
cons
X1
X2
proper
X2
proper
from
X
proper
X
proper
add
X1
X2
proper
X1
proper
fst
X1
X2
proper
X2
proper
add
X1
X2
proper
X2
proper
fst
X1
X2
proper
X1
true
len
1
0
cons
2
0
s
1
1
1
top
1
0
fst
2
1
2
1
top
1
1
0
fst
2
0
proper
1
1
0
ok
1
1
0
0
1
from
1
1
11575
s
1
0
nil
0
1
mark
1
625
proper
1
1
0
from
1
0
active
1
1
21027
cons
2
1
2
1
active
1
0
add
2
0
add
2
1
2
1
len
1
1
1
from
mark
X
mark
from
X
active
add
0
X
mark
X
cons
mark
X1
X2
mark
cons
X1
X2
active
cons
X1
X2
cons
active
X1
X2
active
fst
0
Z
mark
nil
active
from
X
mark
cons
X
from
s
X
fst
mark
X1
X2
mark
fst
X1
X2
len
mark
X
mark
len
X
proper
fst
X1
X2
fst
proper
X1
proper
X2
add
mark
X1
X2
mark
add
X1
X2
fst
ok
X1
ok
X2
ok
fst
X1
X2
fst
X1
mark
X2
mark
fst
X1
X2
proper
from
X
from
proper
X
add
ok
X1
ok
X2
ok
add
X1
X2
proper
0
ok
0
proper
add
X1
X2
add
proper
X1
proper
X2
active
add
s
X
Y
mark
s
add
X
Y
from
ok
X
ok
from
X
active
fst
X1
X2
fst
X1
active
X2
active
len
cons
X
Z
mark
s
len
Z
add
X1
mark
X2
mark
add
X1
X2
proper
cons
X1
X2
cons
proper
X1
proper
X2
s
ok
X
ok
s
X
active
len
X
len
active
X
cons
ok
X1
ok
X2
ok
cons
X1
X2
active
add
X1
X2
add
active
X1
X2
proper
s
X
s
proper
X
proper
nil
ok
nil
active
from
X
from
active
X
active
fst
X1
X2
fst
active
X1
X2
active
add
X1
X2
add
X1
active
X2
active
len
nil
mark
0
len
ok
X
ok
len
X
proper
len
X
len
proper
X
active
fst
s
X
cons
Y
Z
mark
cons
Y
fst
X
Z
proper
len
X
len
proper
X
false
proper
s
X
s
proper
X
false
proper
cons
X1
X2
cons
proper
X1
proper
X2
false
proper
add
X1
X2
add
proper
X1
proper
X2
false
proper
from
X
from
proper
X
false
proper
fst
X1
X2
fst
proper
X1
proper
X2
false
active
fst
X1
X2
active
X1
active
add
X1
X2
active
X2
active
from
X
active
X
active
add
X1
X2
active
X1
active
cons
X1
X2
active
X1
active
fst
X1
X2
active
X2
active
len
X
active
X
true
len
1
0
cons
2
0
s
1
1
1
top
1
0
fst
2
1
2
1
top
1
1
0
fst
2
0
proper
1
1
0
ok
1
1
0
0
1
from
1
1
11575
s
1
0
nil
0
1
mark
1
1
proper
1
0
from
1
0
active
1
1
1
cons
2
1
2
1
active
1
1
0
add
2
0
add
2
1
2
1
len
1
1
12063
from
mark
X
mark
from
X
active
add
0
X
mark
X
cons
mark
X1
X2
mark
cons
X1
X2
active
cons
X1
X2
cons
active
X1
X2
active
fst
0
Z
mark
nil
active
from
X
mark
cons
X
from
s
X
fst
mark
X1
X2
mark
fst
X1
X2
len
mark
X
mark
len
X
proper
fst
X1
X2
fst
proper
X1
proper
X2
add
mark
X1
X2
mark
add
X1
X2
fst
ok
X1
ok
X2
ok
fst
X1
X2
fst
X1
mark
X2
mark
fst
X1
X2
proper
from
X
from
proper
X
add
ok
X1
ok
X2
ok
add
X1
X2
proper
0
ok
0
proper
add
X1
X2
add
proper
X1
proper
X2
active
add
s
X
Y
mark
s
add
X
Y
from
ok
X
ok
from
X
active
fst
X1
X2
fst
X1
active
X2
active
len
cons
X
Z
mark
s
len
Z
add
X1
mark
X2
mark
add
X1
X2
proper
cons
X1
X2
cons
proper
X1
proper
X2
s
ok
X
ok
s
X
active
len
X
len
active
X
cons
ok
X1
ok
X2
ok
cons
X1
X2
active
add
X1
X2
add
active
X1
X2
proper
s
X
s
proper
X
proper
nil
ok
nil
active
from
X
from
active
X
active
fst
X1
X2
fst
active
X1
X2
active
add
X1
X2
add
X1
active
X2
active
len
nil
mark
0
len
ok
X
ok
len
X
proper
len
X
len
proper
X
active
fst
s
X
cons
Y
Z
mark
cons
Y
fst
X
Z
active
fst
s
X
cons
Y
Z
cons
Y
fst
X
Z
false
active
fst
s
X
cons
Y
Z
fst
X
Z
false
active
add
X1
X2
add
X1
active
X2
false
active
fst
X1
X2
fst
active
X1
X2
false
active
from
X
from
active
X
false
active
add
X1
X2
add
active
X1
X2
false
active
len
X
len
active
X
false
active
len
cons
X
Z
s
len
Z
false
active
len
cons
X
Z
len
Z
false
len
mark
X
len
X
len
ok
X
len
X
true
len
1
1
0
cons
2
0
s
1
1
1
top
1
0
fst
2
1
1
top
1
1
0
fst
2
0
proper
1
1
1
ok
1
1
1
0
0
1
from
1
1
32570
s
1
0
nil
0
1
mark
1
1
0
proper
1
0
from
1
0
active
1
1
2
cons
2
2
1
active
1
0
add
2
0
add
2
2
44249
len
1
1
0
len
mark
X
len
X
from
mark
X
mark
from
X
active
add
0
X
mark
X
cons
mark
X1
X2
mark
cons
X1
X2
active
cons
X1
X2
cons
active
X1
X2
active
fst
0
Z
mark
nil
active
from
X
mark
cons
X
from
s
X
fst
mark
X1
X2
mark
fst
X1
X2
len
mark
X
mark
len
X
proper
fst
X1
X2
fst
proper
X1
proper
X2
add
mark
X1
X2
mark
add
X1
X2
fst
ok
X1
ok
X2
ok
fst
X1
X2
fst
X1
mark
X2
mark
fst
X1
X2
proper
from
X
from
proper
X
add
ok
X1
ok
X2
ok
add
X1
X2
proper
0
ok
0
proper
add
X1
X2
add
proper
X1
proper
X2
active
add
s
X
Y
mark
s
add
X
Y
from
ok
X
ok
from
X
active
fst
X1
X2
fst
X1
active
X2
active
len
cons
X
Z
mark
s
len
Z
add
X1
mark
X2
mark
add
X1
X2
proper
cons
X1
X2
cons
proper
X1
proper
X2
s
ok
X
ok
s
X
active
len
X
len
active
X
cons
ok
X1
ok
X2
ok
cons
X1
X2
active
add
X1
X2
add
active
X1
X2
proper
s
X
s
proper
X
proper
nil
ok
nil
active
from
X
from
active
X
active
fst
X1
X2
fst
active
X1
X2
active
add
X1
X2
add
X1
active
X2
active
len
nil
mark
0
len
ok
X
ok
len
X
proper
len
X
len
proper
X
active
fst
s
X
cons
Y
Z
mark
cons
Y
fst
X
Z
len
mark
X
len
X
true
len
1
1
0
cons
2
0
s
1
1
1
top
1
0
fst
2
2
1
top
1
0
fst
2
0
proper
1
1
1
ok
1
1
1
0
0
1
from
1
1
1
s
1
0
nil
0
1
mark
1
1
1
proper
1
0
from
1
0
active
1
1
3
cons
2
2
1
active
1
0
add
2
0
add
2
2
1
len
1
1
0
from
mark
X
mark
from
X
active
add
0
X
mark
X
active
fst
0
Z
mark
nil
len
mark
X
mark
len
X
proper
0
ok
0
from
ok
X
ok
from
X
active
len
cons
X
Z
mark
s
len
Z
s
ok
X
ok
s
X
proper
nil
ok
nil
active
len
nil
mark
0
len
ok
X
ok
len
X
active
fst
X1
X2
fst
X1
active
X2
false
fst
ok
X1
ok
X2
fst
X1
X2
fst
mark
X1
X2
fst
X1
X2
fst
X1
mark
X2
fst
X1
X2
true
len
1
0
cons
2
0
s
1
1
1
top
1
0
fst
2
2
1
top
1
0
fst
2
1
0
proper
1
1
1
ok
1
1
1
0
0
1
from
1
1
1
s
1
0
nil
0
3
mark
1
1
1
proper
1
0
from
1
0
active
1
1
3
cons
2
2
1
active
1
0
add
2
0
add
2
2
1
len
1
1
0
fst
X1
mark
X2
fst
X1
X2
from
mark
X
mark
from
X
active
add
0
X
mark
X
active
fst
0
Z
mark
nil
len
mark
X
mark
len
X
proper
0
ok
0
from
ok
X
ok
from
X
active
len
cons
X
Z
mark
s
len
Z
s
ok
X
ok
s
X
proper
nil
ok
nil
active
len
nil
mark
0
len
ok
X
ok
len
X
fst
X1
mark
X2
fst
X1
X2
true
len
1
0
cons
2
0
s
1
1
1
top
1
0
fst
2
2
1
top
1
0
fst
2
2
0
proper
1
1
1
ok
1
1
1
0
0
1
from
1
1
1
s
1
0
nil
0
1
mark
1
1
14756
proper
1
0
from
1
0
active
1
1
14758
cons
2
2
1
active
1
0
add
2
0
add
2
2
1
len
1
1
0
from
mark
X
mark
from
X
active
add
0
X
mark
X
active
fst
0
Z
mark
nil
len
mark
X
mark
len
X
proper
0
ok
0
from
ok
X
ok
from
X
active
len
cons
X
Z
mark
s
len
Z
s
ok
X
ok
s
X
proper
nil
ok
nil
active
len
nil
mark
0
len
ok
X
ok
len
X
active
add
s
X
Y
s
add
X
Y
false
active
add
s
X
Y
add
X
Y
false
add
X1
mark
X2
add
X1
X2
add
ok
X1
ok
X2
add
X1
X2
add
mark
X1
X2
add
X1
X2
true
len
1
0
cons
2
0
s
1
1
31675
top
1
0
fst
2
2
1
top
1
0
fst
2
0
proper
1
1
1
ok
1
1
1
0
0
1
from
1
1
1
s
1
0
nil
0
1
mark
1
1
1
proper
1
0
from
1
0
active
1
1
63039
cons
2
2
31363
active
1
0
add
2
1
2
0
add
2
2
1
len
1
1
0
from
mark
X
mark
from
X
active
add
0
X
mark
X
active
fst
0
Z
mark
nil
len
mark
X
mark
len
X
proper
0
ok
0
from
ok
X
ok
from
X
active
len
cons
X
Z
mark
s
len
Z
s
ok
X
ok
s
X
proper
nil
ok
nil
active
len
nil
mark
0
len
ok
X
ok
len
X
active
from
X
cons
X
from
s
X
false
active
from
X
from
s
X
false
from
ok
X
from
X
from
mark
X
from
X
true
len
1
0
cons
2
0
s
1
1
1
top
1
0
fst
2
2
1
top
1
0
fst
2
0
proper
1
1
1
ok
1
1
1
0
0
1
from
1
1
1
s
1
0
nil
0
1
mark
1
1
1
proper
1
0
from
1
1
0
active
1
1
3
cons
2
2
1
active
1
0
add
2
0
add
2
2
1
len
1
1
0
from
mark
X
mark
from
X
active
add
0
X
mark
X
active
fst
0
Z
mark
nil
len
mark
X
mark
len
X
proper
0
ok
0
from
ok
X
ok
from
X
active
len
cons
X
Z
mark
s
len
Z
s
ok
X
ok
s
X
proper
nil
ok
nil
active
len
nil
mark
0
len
ok
X
ok
len
X
active
from
X
s
X
false
s
ok
X
s
X
true
len
1
0
cons
2
0
s
1
1
1
top
1
0
fst
2
2
1
top
1
0
fst
2
0
proper
1
1
1
ok
1
1
1
0
0
1
from
1
1
16898
s
1
1
0
nil
0
1
mark
1
1
1
proper
1
0
from
1
0
active
1
1
3
cons
2
2
1
active
1
0
add
2
0
add
2
2
1
len
1
1
0
from
mark
X
mark
from
X
active
add
0
X
mark
X
active
fst
0
Z
mark
nil
len
mark
X
mark
len
X
proper
0
ok
0
from
ok
X
ok
from
X
active
len
cons
X
Z
mark
s
len
Z
s
ok
X
ok
s
X
proper
nil
ok
nil
active
len
nil
mark
0
len
ok
X
ok
len
X
active
cons
X1
X2
cons
active
X1
X2
false
cons
ok
X1
ok
X2
cons
X1
X2
cons
mark
X1
X2
cons
X1
X2
true
len
1
0
cons
2
1
0
s
1
1
1
top
1
0
fst
2
2
1
top
1
0
fst
2
0
proper
1
1
1
ok
1
1
1
0
0
1
from
1
1
1
s
1
0
nil
0
1
mark
1
1
1
proper
1
0
from
1
0
active
1
1
3
cons
2
2
1
active
1
0
add
2
0
add
2
2
1
len
1
1
0
from
mark
X
mark
from
X
active
add
0
X
mark
X
active
fst
0
Z
mark
nil
len
mark
X
mark
len
X
proper
0
ok
0
from
ok
X
ok
from
X
active
len
cons
X
Z
mark
s
len
Z
s
ok
X
ok
s
X
proper
nil
ok
nil
active
len
nil
mark
0
len
ok
X
ok
len
X
NaTT
certifiable-1.6