int flag0 = 0;
int flag1 = 0;

proctype P0 {
do
:: true ->
	store(flag0,1);

	if
	:: load(flag1,0) -> skip;
	:: load(flag1,1) -> skip;
	:: load(flag1,2) -> skip;
	fi;
	
	store(flag0,3);

	if
	:: load(flag1,1) -> store(flag0,2);
		if
		:: load(flag1,4) -> skip;
		fi;
	:: load(flag1,0) -> skip;
	:: load(flag1,2) -> skip;
	:: load(flag1,3) -> skip;
	:: load(flag1,4) -> skip;
	fi;
	
	store(flag0,4);
	
	if
	:: load(flag1,0) -> skip;
	:: load(flag1,1) -> skip;
	:: load(flag1,4) -> skip;
	fi;
	
	store(flag0,0);
od;
}

proctype P1 {
do
:: true ->
	store(flag1,1);
	
	if
	:: load(flag0,0) -> skip;
	:: load(flag0,1) -> skip;
	:: load(flag0,2) -> skip;
	fi;
	
	store(flag1,3);
	
	if
	:: load(flag0,1) -> store(flag1,2);
		if
		:: load(flag0,4) -> skip;
		fi;
	:: load(flag0,0) -> skip;
	:: load(flag0,2) -> skip;
	:: load(flag0,3) -> skip;
	:: load(flag0,4) -> skip;
	fi;
	
	store(flag1,4);
	
	if
	:: load(flag0,0) -> skip;
	:: load(flag0,1) -> skip;
	fi;
	
	store(flag1,0);
od;
}
