using
System;
using
System.Collections.Generic;
class
GFG
{
static
int
ans_max = 0;
static
bool
equal(
int
[] a,
int
[] b)
{
for
(
int
i = 0; i < 3; i++)
{
if
(a[i] != b[i])
{
return
false
;
}
}
return
true
;
}
static
int
mulFac(
int
a,
int
b,
int
c,
int
d)
{
if
(b != a && (d - c) % (b - a) == 0)
{
return
(d - c) / (b - a);
}
else
{
return
1;
}
}
static
void
getMinOperations(
int
[] a,
int
[] b,
int
ans,
int
num)
{
if
(num >= ans)
{
return
;
}
if
(equal(a, b))
{
ans = Math.Min(ans, num);
ans_max = ans;
return
;
}
if
(num >= 2)
{
return
;
}
HashSet<
int
> ad =
new
HashSet<
int
>();
ad.Add(b[0] - a[0]);
ad.Add(b[1] - a[1]);
ad.Add(b[2] - a[2]);
HashSet<
int
> mult =
new
HashSet<
int
>();
for
(
int
i = 0; i < 3; i++)
{
if
(a[i] != 0 && b[i] % a[i] == 0)
{
mult.Add(b[i] / a[i]);
}
}
mult.Add(mulFac(a[0], a[1], b[0], b[1]));
mult.Add(mulFac(a[2], a[1], b[2], b[1]));
mult.Add(mulFac(a[0], a[2], b[0], b[2]));
mult.Add(0);
for
(
int
mask = 1; mask <= 7; mask++)
{
List<
int
> subset=
new
List<
int
>();
for
(
int
j = 0; j < 3; j++)
{
if
((mask & (1 << j)) != 0)
{
subset.Add(j);
}
}
foreach
(
int
x
in
ad)
{
int
[] temp =
new
int
[3];
for
(
int
j = 0; j < 3; j++)
{
temp[j] = a[j];
}
foreach
(
int
e
in
subset)
{
temp[e] += x;
}
getMinOperations(temp, b, ans,num + 1);
}
foreach
(
int
x
in
mult)
{
int
[] temp =
new
int
[3];
for
(
int
j = 0; j < 3; j++)
{
temp[j] = a[j];
}
foreach
(
int
e
in
subset)
{
temp[e] *= x;
}
getMinOperations(temp, b,ans, num + 1);
}
}
}
static
public
void
Main ()
{
int
[] a = { 4, 5, 6 };
int
[] b = { 0, 1, 0 };
int
ans = 3;
getMinOperations(a, b, ans, 0);
Console.WriteLine(ans_max);
}
}