#include<queue>
#include<stdlib.h>
using namespace std;
int ans = 0;
bool flag[100][100];
struct data
{
int s, n, m;
int ans;
};
bool bfs(int s,int n,int m)
{
queue<data>Q;
data d;
d.m = 0; d.n = 0; d.s = s; d.ans = 0;
Q.push(d);
while (!Q.empty())
{
data q = Q.front();
Q.pop();
if (2 * q.s == s || 2 * q.m == s)
{
ans = q.ans;
return true;
}
if (q.n != n&&q.s>0)
{
data d1;
if (q.s >=(n-q.n)) //判斷s->n是否能將n 倒滿,以下的判斷類似
{
d1.s = q.s - n+q.n;
d1.n = n;
}
else
{
d1.s = 0;
d1.n = q.s+q.n;
}
d1.m = q.m;
d1.ans = q.ans + 1;
if (!flag[d1.m][d1.n])
{
Q.push(d1);
flag[d1.m][d1.n] = true;
}
}
if (q.m !=m&&q.s>0)
{
data d2;
if (q.s>=(m-q.m))
{
d2.s = q.s + q.m-m;
d2.m = m;
}
else {
d2.s = 0;
d2.m = q.s+q.m;
}
d2.n = q.n;
d2.ans = q.ans + 1;
if (!flag[d2.m][d2.n])
{
Q.push(d2);
flag[d2.m][d2.n] = true;
}
}
if (q.n != n)
{
if (q.m >=0)
{
data d3;
d3.s = q.s;
if (q.m >= (n - q.n))
{
d3.n = n;
d3.m = q.m - n + q.n;
}
else
{
d3.n = q.n + q.m;
d3.m = 0;
}
d3.ans = q.ans + 1;
if (!flag[d3.m][d3.n])
{
Q.push(d3);
flag[d3.m][d3.n] = true;
}
}
}
if (q.m > 0 )
{
data d6;
d6.ans = q.ans + 1;
d6.m = 0;
d6.n = q.n;
d6.s = q.s + d6.m;
if (!flag[d6.m][d6.n])
{
Q.push(d6);
flag[d6.m][d6.n] = true;
}
}
if (q.n >0)
{
if (q.m!= m)
{
data d4;
d4.s = q.s;
if (q.n >= (m - q.m))
{
d4.m = m;
d4.n = q.n - m + q.m;
}
else
{
d4.m = q.m + q.n;
d4.n = 0;
}
d4.ans = q.ans + 1;
if (!flag[d4.m][d4.n])
{
Q.push(d4);
flag[d4.m][d4.n] = true;
}
}
if (q.s!= s)
{
data d5;
d5.ans = q.ans + 1;
if (q.n >= (s - q.s))
{
d5.s = s;
d5.n = q.n - s + q.s;
}
else
{
d5.s = q.s + q.n;
d5.n = 0;
}
d5.m = q.m;
if (!flag[d5.m][d5.n])
{
Q.push(d5);
flag[d5.m][d5.n] = true;
}
}
}
if (q.m == q.n&&q.m == q.s)
{
break;
}
}
return false;
}
int main()
{
int S, M, N;
while (cin >> S >> N >> M)
{
if (S == 0 && N == 0 && M == 0)
break;
if (N > M)
{
int temp = N;
N = M;
M = temp;
}
ans = 0;
if (S % 2 != 0)
cout << "NO" << endl;
else
{
if (bfs(S, N, M))
cout << ans << endl;
else cout << "NO" << endl;
}
}
system("pause");
return 0;
}
#include<queue>
#include<string.h>
#include<stdlib.h>
using namespace std;
int ans = 0;
bool flag[100][100];
struct data
{
int s, n, m;
int ans;
};
bool bfs(int s,int n,int m)
{
queue<data>Q;
memset(flag, false, sizeof(flag));
data d;
d.m = 0; d.n = 0; d.s = s; d.ans = 0;
Q.push(d);
while (!Q.empty())
{
data q = Q.front();
Q.pop();
if (q.s == q.m && q.m+q.s == s)
{
ans = q.ans;
return true;
}
if (q.n != n&&q.s>0)
{
data d1;
if (q.s >=(n-q.n))
{
d1.s = q.s - n+q.n;
d1.n = n;
}
else
{
d1.s = 0;
d1.n = q.s+q.n;
}
d1.m = q.m;
d1.ans = q.ans + 1;
if (!flag[d1.m][d1.n])
{
Q.push(d1);
flag[d1.m][d1.n] = true;
}
}
if (q.m !=m&&q.s>0)
{
data d2;
if (q.s>=(m-q.m))
{
d2.s = q.s + q.m-m;
d2.m = m;
}
else {
d2.s = 0;
d2.m = q.s+q.m;
}
d2.n = q.n;
d2.ans = q.ans + 1;
if (!flag[d2.m][d2.n])
{
Q.push(d2);
flag[d2.m][d2.n] = true;
}
}
if (q.n != n)
{
if (q.m >=0)
{
data d3;
d3.s = q.s;
if (q.m >= (n - q.n))
{
d3.n = n;
d3.m = q.m - n + q.n;
}
else
{
d3.n = q.n + q.m;
d3.m = 0;
}
d3.ans = q.ans + 1;
if (!flag[d3.m][d3.n])
{
Q.push(d3);
flag[d3.m][d3.n] = true;
}
}
}
if (q.m > 0 )
{
data d6;
d6.ans = q.ans + 1;
d6.m = 0;
d6.n = q.n;
d6.s = q.s + d6.m;
if (!flag[d6.m][d6.n])
{
Q.push(d6);
flag[d6.m][d6.n] = true;
}
}
if (q.n >0)
{
if (q.m!= m)
{
data d4;
d4.s = q.s;
if (q.n >= (m - q.m))
{
d4.m = m;
d4.n = q.n - m + q.m;
}
else
{
d4.m = q.m + q.n;
d4.n = 0;
}
d4.ans = q.ans + 1;
if (!flag[d4.m][d4.n])
{
Q.push(d4);
flag[d4.m][d4.n] = true;
}
}
if (q.s!= s)
{
data d5;
d5.ans = q.ans + 1;
if (q.n >= (s - q.s))
{
d5.s = s;
d5.n = q.n - s + q.s;
}
else
{
d5.s = q.s + q.n;
d5.n = 0;
}
d5.m = q.m;
if (!flag[d5.m][d5.n])
{
Q.push(d5);
flag[d5.m][d5.n] = true;
}
}
}
if (q.m == q.n&&q.m == q.s)
{
break;
}
}
return false;
}
int main()
{
int S, M, N;
while (cin >> S >> N >> M)
{
if (S == 0 && N == 0 && M == 0)
break;
if (N > M)
{
int temp = N;
N = M;
M = temp;
}
ans = 0;
if (S % 2 != 0)
cout << "NO" << endl;
else
{
if (bfs(S, N, M))
cout << ans << endl;
else cout << "NO" << endl;
}
}
system("pause");
return 0;
}