using
System;
using
System.Collections.Generic;
class
Gfg
{
static
int
minimumMultiplications(
int
start,
int
end,
int
[] a,
int
n)
{
int
[] ans_start =
new
int
[100001];
int
[] ans_end =
new
int
[100001];
bool
[] visited_start =
new
bool
[100001];
bool
[] visited_end =
new
bool
[100001];
Array.Fill(ans_start, -1);
Array.Fill(ans_end, -1);
Array.Fill(visited_start,
false
);
Array.Fill(visited_end,
false
);
int
mod = 100000;
Queue<
int
> q_start =
new
Queue<
int
>();
Queue<
int
> q_end =
new
Queue<
int
>();
q_start.Enqueue(start % mod);
q_end.Enqueue(end % mod);
ans_start[start] = 0;
ans_end[end] = 0;
visited_start[start] =
true
;
visited_end[end] =
true
;
int
commonNode = -1;
while
(q_start.Count > 0 && q_end.Count > 0)
{
if
(q_start.Count < q_end.Count)
{
int
top = q_start.Dequeue();
if
(visited_end[top])
{
commonNode = top;
break
;
}
for
(
int
i = 0; i < n; i++)
{
int
pushed = top * a[i];
pushed = pushed % mod;
if
(!visited_start[pushed])
{
ans_start[pushed] = ans_start[top] + 1;
q_start.Enqueue(pushed);
visited_start[pushed] =
true
;
}
}
}
else
{
int
top = q_end.Dequeue();
if
(visited_start[top])
{
commonNode = top;
break
;
}
for
(
int
i = 0; i < n; i++)
{
int
pushed = top * a[i];
pushed = pushed % mod;
if
(!visited_end[pushed])
{
ans_end[pushed] = ans_end[top] + 1;
q_end.Enqueue(pushed);
visited_end[pushed] =
true
;
}
}
}
}
if
(commonNode == -1)
return
-1;
return
ans_start[commonNode] + ans_end[commonNode];
}
static
void
Main(
string
[] args)
{
int
start = 7, end = 66175;
int
[] a = { 3, 4, 65 };
int
n = a.Length;
Console.WriteLine(minimumMultiplications(start, end, a, n));
}
}