1 #include
2 using namespace std;
3 int a, b, c, ans;
4 const int inf = 0x3f3f3f3f;
5 bool vis[105][105];
6 void dfs(int na, int nb, int cur) {
7 if (vis[na][nb]) return;
8 if (cur > ans) return;
9 if (na == c || nb == c) {
10 ans = min(ans,cur);
11 return;
12 }
13 vis[na][nb] = true;
14 dfs(a,nb,cur+1);
15 dfs(na,b,cur+1);
16 dfs(0,nb,cur+1);
17 dfs(na,0,cur+1);
18 dfs(max(0,na-(b-nb)),min(b,na+nb),cur+1);
19 dfs(min(a,nb+na),max(0,nb-(a-na)),cur+1);
20 vis[na][nb] = false;
21 }
22 int main() {
23 while (scanf("%d%d%d",&a,&b,&c) != EOF) {
24 if (c%__gcd(a,b) != 0) {
25 puts("impossible");
26 continue;
27 }
28 memset(vis,0,sizeof(vis));
29 ans = inf;
30 dfs(0,0,0);
31 printf("%d
",ans);
32 }
33 return 0;
34 }