using
System;
using
System.Collections.Generic;
class
GFG
{
public
class
pair
{
public
int
first, second;
public
pair(
int
first,
int
second)
{
this
.first = first;
this
.second = second;
}
}
static
int
__gcd(
int
a,
int
b)
{
if
(b == 0)
return
a;
return
__gcd(b, a % b);
}
static
int
minStepsNeeded(
int
k,
int
d1,
int
d2,
int
x)
{
int
gcd = __gcd(d1, d2);
if
((k - x) % gcd != 0)
return
-1;
Queue<pair> q =
new
Queue<pair>();
HashSet<
int
> visited =
new
HashSet<
int
>();
q.Enqueue(
new
pair(k, 0));
visited.Add(k);
while
(q.Count != 0)
{
int
s = q.Peek().first;
int
stp = q.Peek().second;
if
(s == x)
return
stp;
q.Dequeue();
if
(!visited.Contains(s + d1))
{
q.Enqueue(
new
pair(s + d1, stp + 1));
visited.Add(s + d1);
}
if
(!visited.Contains(s + d2))
{
q.Enqueue(
new
pair(s + d2, stp + 1));
visited.Add(s + d2);
}
if
(!visited.Contains(s - d1))
{
q.Enqueue(
new
pair(s - d1, stp + 1));
visited.Add(s - d1);
}
if
(!visited.Contains(s - d2))
{
q.Enqueue(
new
pair(s - d2, stp + 1));
visited.Add(s - d2);
}
}
return
int
.MinValue;
}
public
static
void
Main(String[] args)
{
int
k = 10, d1 = 4, d2 = 6, x = 8;
Console.WriteLine(minStepsNeeded(k, d1, d2, x));
}
}