#include #include #define M (1001*1001) #define N (1001) char vis[N][N]; short pa[M]; short pb[M]; int pret[M]; char pban[M]; int main(void) { int ca, cb, n; int ac; int s, e, a, b; int sa, sb; int ban; int it; it = 1; while (scanf("%d %d %d",&ca,&cb,&n) == 3) { if (it == 0) { memset(vis,0,sizeof(vis)); it = 1; } s = 0; pa[s] = 0; pb[s] = 0; pret[s] = -1; pban[s] = 200; e = 1; if (n == 0) { printf("success\n\n"); continue; } while (1) { sa = pa[s]; sb = pb[s]; ban = pban[s]; /* fprintf(stderr,"%d: %d %d, %d\n",s,sa,sb,ban); fflush(stderr);*/ for (ac = 0; ac < 6; ac++) { if (ac == ban) continue; a = sa; b = sb; switch (ac) { case 0: /*fa*/ a = ca; break; case 1: /*fb*/ b = cb; break; case 2: /*ea*/ a = 0; break; case 3: /*eb*/ b = 0; break; case 4: /*pab*/ if (a > cb - b) { a -= (cb - b); b = cb; } else { b += a; a = 0; } break; case 5: /*pba*/ if (b > ca - a) { b -= (ca - a); a = ca; } else { a += b; b = 0; } break; } if (vis[a][b] != it) { vis[a][b] = it; pa[e] = a; pb[e] = b; pret[e] = s; pban[e] = ac; if (a == n || b == n) goto found; e++; } } s++; } found: /*e holds last */ pa[e] = -1; while (1) { s = pret[e]; if (s == -1) break; pa[s] = e; e = s; } s = e; while (1) { s = pa[s]; if (s == -1) break; ac = pban[s]; switch (ac) { case 0: /*fa*/ printf("fill A\n"); break; case 1: /*fb*/ printf("fill B\n"); break; case 2: /*ea*/ printf("empty A\n"); break; case 3: /*eb*/ printf("empty B\n"); break; case 4: /*pab*/ printf("pour A B\n"); break; case 5: /*pba*/ printf("pour B A\n"); break; } } printf("success\n\n"); it++; } return 0; }