import
java.util.*;
class
GFG
{
static
void
ShortestPath(
int
i,
int
j,
int
k,
int
m,
int
n)
{
Vector<Integer> path1=
new
Vector<Integer>(),
path2=
new
Vector<Integer>();
int
x = m -
1
;
path1.add(i);
while
(x != k)
{
path1.add(i /
2
);
i = i /
2
;
x--;
}
int
y = n -
1
;
path2.add(j);
while
(y != k)
{
path2.add(j /
2
);
j = j /
2
;
y--;
}
for
(
int
l =
0
; l < path1.size(); l++)
System.out.print( path1.get(l) +
" "
);
for
(
int
l = path2.size() -
2
; l >=
0
; l--)
System.out.print( path2.get(l) +
" "
);
System.out.println();
}
static
int
ShortestDistance(
int
i,
int
j)
{
Vector<Integer> v1=
new
Vector<Integer>(),
v2=
new
Vector<Integer>();
int
p1 = i;
int
p2 = j;
while
(i !=
0
)
{
v1.add(i %
2
);
i = i /
2
;
}
while
(j !=
0
)
{
v2.add(j %
2
);
j = j /
2
;
}
Collections.reverse(v1);
Collections.reverse(v2);
int
m = v1.size(), n = v2.size(), k =
0
;
if
(m < n)
{
while
(k < m && v1.get(k) == v2.get(k))
k++;
}
else
{
while
(k < n && v1.get(k) == v2.get(k))
k++;
}
ShortestPath(p1, p2, k -
1
, m, n);
return
m + n -
2
* k;
}
public
static
void
main(String args[])
{
System.out.println( ShortestDistance(
1
,
2
) );
System.out.println(ShortestDistance(
4
,
3
) );
}
}