1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
#include <iostream>
#include <list>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;

/*
Przyklad:
2 7 9
1 3 6

odpowiedz:
1 0 1 0 1 1 0 1 2 1
*/

long A, B, C;
long tab[100003];

int wszystkie(){
	for(long int i=0; i<C+1; i++){
		if(tab[i]==-1)
			return 0;
	}
	return 1;
}

void wypisz(){
	for(long int i=0; i<C+1; i++){
		cout << tab[i] << " ";
	}
	cout << endl;
}

void przelewaj(long a, long b, long c, long krok){

	if(krok>C) return;
//	if(wszystkie()==1) return;
	if(tab[a]!=-1 && tab[b]!=-1 && tab[c]!=-1 && tab[a]<krok && tab[b]<krok && tab[c]<krok) return;
		
	if(tab[a]==-1 || tab[a]>krok) tab[a]=krok;
	if(tab[b]==-1 || tab[b]>krok) tab[b]=krok;
	if(tab[c]==-1 || tab[c]>krok) tab[c]=krok;
	
//	wypisz();
	
//	cout << "krok:"<<krok<<" a = "<<a<<" b = "<<b<<" c = "<<c <<" A = "<<A << " B = "<<B<<" C = "<<C<<endl;
	
	//wszelkiego rodzaju przelewania
	//przelewanie:
	//a->b 
	if(a>0 && b<B){
	
//		cout << "krok: "<<krok << "przelewam a->b"<<endl;
		if(B-b < a) przelewaj(a-B+b, B, c, krok+1); //przelewam az B bedzie pelna
		else przelewaj(0, a+b, c, krok+1); //przelewam do konca A
	}
	// b-> a
	if(b>0 && a<A){
//		cout << "krok: "<<krok << "przelewam b->a"<<endl;
		if(A-a < b) przelewaj(A, b-A+a, c, krok+1); //przelewam az A bedzie pelna
		else przelewaj(a+b, 0, c, krok+1); //przelewam do konca B
	}
	//a->c
	if(a>0 && c<C){
//		cout << "krok: "<<krok << "przelewam a->c"<<endl;
		if(C-c < a) przelewaj(a-C+c, b, C, krok+1); //przelewam az C bedzie pelna
		else przelewaj(0, b, a+c, krok+1); //przelewam do konca A
	}
	//c-> a
	if(c>0 && a<A){
	
//		cout << "krok: "<<krok << "przelewam c->a"<<endl;
		if(A-a < c) przelewaj(A, b, c-A+a, krok+1); //przelewam az A bedzie pelna
		else przelewaj(a+c, b, 0, krok+1); //przelewam do konca C
	}
	//b->c
	if(b>0 && c<C){
	
//		cout << "krok: "<<krok << "przelewam b->c"<<endl;
		if(C-c < b) przelewaj(a, b-C+c, C, krok+1); //przelewam az C bedzie pelna
		else przelewaj(a, 0, b+c, krok+1); //przelewam do konca B
	}
	//c->b
	if(c>0 && b<B){
	
//		cout << "krok: "<<krok << "przelewam c->b"<<endl;
		if(B-b < c) przelewaj(a, B, c-B+b, krok+1); //przelewam az B bedzie pelna
		else przelewaj(a, b+c, 0, krok+1); //przelewam do konca C
	}

}

int main(int argc, char** argv) {

	long a, b, c;
	long i;
	
	cin >> A >> B >> C >> a >> b >> c;
	
	for(i=0; i<C+1; i++)
		tab[i]=-1;

	przelewaj(a, b, c, 0);	
	wypisz();
	
	return 0;
}