#pragma mode( separator(.,;) integer(h32))
EXPORT ReversiOpt;

LOCAL PyBoard,PyOrdre,PyNbPio=[0,0] ;
LOCAL Sco,BestMov,NbCoups;

CONST HotBib={{52,59,31,32,40,30,49},{52,59,31,32,40,30,58},{52,59,31,32,40,30,68},{52,59,31,32,40,43,49,30,22,39,58,23,29},{52,59,31,32,40,43,49,30,22,39,58,23,33},{52,59,31,32,40,43,49,30,22,39,58,23,60,48,47},{52,59,31,32,40,43,49,30,22,39,58,23,60,48,33,34,47},{52,59,31,32,40,43,49,30,22,39,58,23,60,48,33,34,44},{52,59,31,32,40,43,49,30,22,39,58,60,48},{52,59,31,32,40,43,49,30,22,39,58,60,33},{52,59,31,32,40,43,49,30,22,39,33,60,58},{52,59,31,32,40,43,49,30,22,39,33,60,58,61},{52,59,31,32,40,43,49,30,22,39,33,60,58,44,61},{52,59,31,32,40,43,49,30,22,33,23,39},{52,59,31,32,40,43,49,30,22,33,23,58,39,48},{52,59,31,32,40,43,49,30,22,60,39,34,33,24,44,23,35},{52,59,31,32,40,43,49,30,22,60,39,61,58,57},{52,59,31,32,40,43,49,30,22,60,58,39,48,23,29},{52,59,31,32,40,43,49,30,22,60,58,39,48,23,33,56,13,57},{52,59,31,32,40,43,49,30,22,60,58,39,48,23,33,56,13,68},{52,59,31,32,40,43,49,30,22,60,58,39,48,23,33,56,67},{52,59,31,32,40,43,49,30,22,60,58,39,48,23,33,56,34},{52,59,31,32,40,43,49,30,22,60,58,39,48,23,33,56,61},{52,59,31,32,40,43,49,30,22,60,58,39,48,23,70,67},{52,59,31,32,40,43,49,30,22,60,58,57,39,61,67,48},{52,59,31,32,40,43,49,30,22,60,58,57,39,61,35,48},{52,59,31,32,40,43,49,30,23,39,33},{52,59,31,32,40,43,49,30,23,58,39},{52,59,31,32,40,43,49,30,23,58,48},{52,59,31,32,40,43,49,30,23,58,57},{52,59,31,32,40,43,49,30,23,33,39},{52,59,31,32,40,43,49,30,23,33,22},{52,59,31,32,40,43,49,30,24,58,39},{52,59,31,32,40,43,49,30,24,33},{52,59,31,32,40,43,49,39,30,48,58},{52,59,31,32,40,43,49,39,30,22,68,58},{52,59,31,32,40,43,49,39,30,22,68,67},{52,59,31,32,40,43,49,39,30,58,22},{52,59,31,32,40,43,49,39,30,60,58,48,33,22},{52,59,31,32,40,43,49,39,30,60,58,48,33,24},{52,59,31,32,40,43,49,39,30,60,58,48,33,25,38},{52,59,31,32,40,43,49,39,30,60,58,48,33,25,56,47,68},{52,59,31,32,40,43,49,39,30,60,58,48,33,25,56,23},{52,59,31,32,40,43,49,39,30,60,58,48,33,25,70},{52,59,31,32,40,43,49,39,30,60,33},{52,59,31,32,40,43,49,39,48,58,33,34,30,60,57},{52,59,31,32,40,43,49,39,48,58,34,47,33,22,38,30,56,57,23,29,20,15,68},{52,59,31,32,40,43,49,39,48,58,34,60,33,23,57,47},{52,59,31,32,40,43,49,39,48,58,34,60,33,62,38},{52,59,31,32,40,43,49,39,48,58,34,60,33,62,57,47,68,69,53},{52,59,31,32,40,43,49,39,48,58,34,60,33,62,61,53,68,35,57},{52,59,31,32,40,43,49,39,48,58,34,60,33,62,61,53,68,35,69},{52,59,31,32,40,43,49,39,48,58,34,61,33,44,60,53,68,69,57},{52,59,31,32,40,43,49,39,48,60,34,58},{52,59,31,32,40,43,49,39,58,60,29},{52,59,31,32,40,43,49,39,33},{52,59,31,32,40,43,33,34,60,39,49},{52,59,31,32,40,43,33,34,60,39,58},{52,59,31,32,40,43,33,34,60,58,49,24},{52,59,31,32,40,43,33,34,60,58,44,53},{52,59,31,32,40,43,33,34,60,61,44,49},{52,59,31,32,40,43,33,34,60,61,44,24},{52,59,31,32,40,43,33,34,60,61,44,35},{52,59,31,32,40,43,33,34,44,24,23},{52,59,31,32,40,43,33,34,44,61},{52,59,31,32,40,43,33,34,44,35,61,39},{52,59,31,32,40,43,33,34,44,35,53,61,62},{52,59,31,32,40,43,33,34,44,53},{52,59,31,32,40,43,33,61,58,49,68,67},{52,59,31,32,40,43,33,61,58,49,68,69},{52,59,31,32,40,43,33,61,58,49,68,69,57},{52,59,31,32,40,43,33,61,58,49,68,69,60,76},{52,59,31,32,40,43,33,61,58,49,60,68},{52,59,31,32,40,43,60,30,22,33,23,39,49,58,68,57},{52,59,31,32,40,43,60,30,22,33,23,49},{52,59,31,32,40,43,60,30,23,49},{52,59,31,32,40,43,60,30,23,33,39,49,22},{52,59,31,32,40,43,60,30,24,49},{52,59,31,32,40,43,60,30,24,33},{52,59,31,32,40,43,60,61,33,49,58,48},{52,59,31,32,40,43,60,61,33,49,58,57,67,48,68,69,70},{52,59,31,32,40,43,60,61,33,49,44},{52,59,31,32,40,43,60,61,69},{52,59,31,32,40,43,61,39,22,24},{52,59,31,32,40,43,61,39,22,34},{52,59,31,32,40,43,61,39,34,60,33,53,48},{52,59,31,32,40,43,61,39,34,60,33,53,62},{52,59,31,32,40,43,61,34,33,39,48,24,60,69,58},{52,59,31,32,40,43,61,34,33,39,48,24,60,69,70},{52,59,31,32,40,43,61,34,33,39,48,60,69,53,49},{52,59,31,32,40,43,61,34,33,53,44},{52,59,31,32,40,43,61,34,33,53,62},{52,59,31,32,40,43,61,34,60,69,58,62,79},{52,59,31,32,40,43,61,34,60,69,58,62,79,49},{52,59,31,32,40,43,61,34,60,69,58,62,53},{52,59,31,32,40,43,61,34,60,69,68,49,57},{52,59,31,32,40,43,61,34,60,69,68,49,58,62,77},{52,59,31,32,40,43,61,34,60,69,68,49,58,62,53},{52,59,31,32,40,43,61,34,60,69,68,62,77},{52,59,31,32,40,43,61,34,60,69,68,62,79},{52,59,31,32,40,43,61,34,60,69,68,62,53},{52,59,31,32,40,43,61,34,60,69,70,49,57,39},{52,59,31,32,40,43,61,34,60,69,70,49,57,48},{52,59,31,32,40,43,61,34,60,69,70,49,57,53},{52,59,31,32,40,43,61,34,60,69,70,49,57,62},{52,59,31,32,40,43,61,34,44,35,49},{52,59,31,32,40,43,61,34,44,35,60,30},{52,59,31,32,40,43,61,34,44,53,33},{52,59,31,32,40,43,61,53,58},{52,59,31,32,40,43,61,53,33,34,44,24},{52,59,31,32,40,43,61,53,33,34,44,36,58,35,63},{52,59,31,32,40,43,61,53,33,34,44,36,67},{52,59,31,32,40,43,61,53,33,34,44,36,60,35,62},{52,59,31,32,40,43,61,53,33,34,44,36,35,25,60},{52,59,31,32,40,43,61,53,33,34,62,24,54,49,44,35,25},{52,59,31,32,40,43,61,53,33,34,62,70},{52,59,31,32,40,43,61,53,60,49},{52,59,31,32,40,43,61,53,60,68,33,49,69,34,44},{52,59,31,32,40,43,61,53,60,68,33,49,34,69},{52,59,31,32,40,43,61,53,60,68,33,49,70,69,78},{52,59,31,32,40,43,61,53,60,68,33,69,35},{52,59,31,32,40,43,61,53,60,68,69,49,34},{52,59,31,32,40,43,61,53,60,68,70,49,57,33,58},{52,59,31,32,40,43,61,53,60,70,67,49},{52,59,31,32,40,43,61,53,60,70,68,49,35},{52,59,31,32,40,43,61,53,60,70,33,49,68},{52,59,31,32,40,43,61,53,60,70,62,49},{52,59,31,32,40,43,61,53,60,70,54},{52,59,31,32,40,43,61,53,34},{52,59,31,32,40,43,61,53,62,33,60,49,54},{52,59,31,32,49,43,33},{52,59,31,32,49,43,34},{52,59,31,43},{52,59,31,53},{52,59,40,32,49,39,31,23,57,58,48,60,29,47},{52,59,40,32,49,39,68,43,33,34,31,58,24},{52,59,40,32,49,39,68,43,33,34,44,58},{52,59,40,32,49,43,68},{52,59,40,32,49,43,33,31},{52,59,40,32,49,43,33,34,22,39,48,23,68,67,69,61},{52,59,40,32,49,43,33,34,22,58,68,57},{52,59,40,32,49,43,33,34,22,58,68,61,67,31,23},{52,59,40,32,49,43,33,34,22,58,60,23,44,57,48,31,39,13,25,29,24,47},{52,59,40,32,49,43,33,34,22,58,60,23,44,57,48,31,39,13,25,38,47},{52,59,40,32,49,43,33,34,22,58,60,23,44,57,48,69},{52,59,40,32,49,43,33,34,22,58,60,23,44,57,48,35,67,47,25},{52,59,40,32,49,43,33,34,22,58,60,23,44,57,48,35,14,31,30},{52,59,40,32,49,43,33,34,22,61},{52,59,40,32,49,43,33,34,44,62,60,31,23},{52,59,40,32,49,43,33,34,44,62,53},{52,59,40,32,60},{52,59,40,53},{52,59,49,43,32,40,31,58,33,48},{52,59,49,43,32,40,31,58,33,61},{52,59,49,43,32,40,31,58,60,48},{52,59,49,43,32,40,33,31,60,58},{52,59,49,43,32,40,33,60,31,61},{52,59,49,43,32,40,33,60,61,53,31,69},{52,59,49,43,32,40,33,60,61,53,31,62},{52,59,49,43,32,33,44,35,24,40,60},{52,59,49,43,32,33,44,35,24,61,60},{52,59,49,43,32,33,44,35,60,40},{52,59,49,43,32,33,44,35,60,40,24},{52,59,49,43,32,33,44,35,60,40,25},{52,59,49,43,32,33,44,53,24,40,34},{52,59,49,43,32,33,44,53,60,40},{52,59,49,43,32,33,44,53,60,61},{52,59,49,43,68},{52,59,49,43,33,40},{52,59,49,43,33,58,32,34},{52,59,49,43,33,58,32,61,60,68,69,67,57,34,40,48,39},{52,59,49,43,33,58,32,61,60,68,69,67,40,34,57,48,39},{52,59,49,43,33,58,32,61,60,68,69,67,40,34,77,76,75,24,57,56,70,22},{52,59,49,43,33,58,32,61,60,68,69,67,40,34,77,76,75,24,57,78,79,70,80,22},{52,59,49,43,33,58,32,61,60,68,69,67,40,34,77,76,75,78,79,70,80,24,48,22,53},{52,59,49,43,33,58,32,61,60,68,69,67,40,34,77,76,75,78,79,70,80,24,48,31},{52,59,49,43,33,58,32,61,60,68,69,67,40,34,77,76,70,79,75,24},{52,59,49,43,33,58,32,61,60,68,69,67,40,79,57,48,66},{52,59,49,43,33,58,32,61,60,68,69,67,40,79,77,78},{52,59,49,43,33,58,32,61,60,68,69,67,40,79,53},{52,59,49,43,33,58,32,61,60,68,69,67,77,76,70,34,40,79,75,24},{52,59,49,43,33,58,32,61,60,68,69,67,77,76,70,79,75},{52,59,49,43,33,58,32,61,60,68,69,67,77,34,40},{52,59,49,43,33,58,32,61,60,68,69,34,40,67,57,48,39},{52,59,49,43,33,58,32,61,60,68,69,34,40,67,77},{52,59,49,43,33,58,32,61,60,68,69,34,77,24,48},{52,59,49,43,33,58,32,61,60,68,35,40,39,30,48,38},{52,59,49,43,33,58,32,61,60,68,35,40,39,30,48,47},{52,59,49,43,33,58,32,61,60,68,35,40,39,30,57,29},{52,59,49,43,33,58,32,61,60,68,35,40,39,30,57,48},{52,59,49,43,33,58,32,61,60,68,35,40,39,30,57,31,48,56,53,47,38,29,70},{52,59,49,43,33,58,32,61,60,68,35,40,39,30,53,31,48,47,38,29,57,56,70},{52,59,49,43,33,58,32,61,60,68,35,40,39,30,53,31,48,24,34,23},{52,59,49,43,33,58,32,61,60,68,35,40,39,31},{52,59,49,43,33,58,32,61,60,68,35,40,39,24,34},{52,59,49,43,33,58,32,61,60,68,35,40,69,31,44},{52,59,49,43,33,58,32,61,60,68,35,40,69,31,53},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,30,48,47,38,29,57,56,22},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,30,48,47,38,29,57,56,77},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,30,48,47,38,29,57,56,70,24},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,30,48,47,38,29,57,56,70,25},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,30,48,47,38,29,57,67},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,30,48,24,23},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,30,48,24,34},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,23,24},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,24,30,23,22,48,34,29,16},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,24,30,62,34,23},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,24,30,62,34,54,57},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,24,48,23,67,30,34,62,25},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,24,48,23,67,57,22},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,24,48,23,67,57,78,62,34},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,24,48,23,67,62,34,57,78},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,24,48,23,70,69,34},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,24,48,62,67,34},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,24,48,62,25,23},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,24,23},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,24,34,23},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,39,24,34,62},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,70,23,69,25,76,34,67,36,57,44},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,70,23,69,25,15,34,76,44,67},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,70,23,69,25,15,34,76,36,67,44,45,54,24,62,63,72,26},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,70,23,69,25,15,34,76,36,45,44,67,54,24,62,63,72,26},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,70,23,69,25,24,16,76,34,67,36,57,44},{52,59,49,43,33,58,32,61,60,68,35,40,53,31,70,62,69,24},{52,59,49,43,33,58,32,61,60,68,35,40,62,31,70,23,69,25,76,34},{52,59,49,43,33,58,32,61,60,68,35,40,62,53,63},{52,59,49,43,33,58,32,61,60,68,44,40,39,30,57,29},{52,59,49,43,33,58,32,61,60,68,44,40,39,30,57,48},{52,59,49,43,33,58,32,61,60,68,44,40,39,30,57,31},{52,59,49,43,33,58,32,61,60,68,44,40,39,24},{52,59,49,43,33,58,32,61,60,68,44,40,39,35,53,45,27},{52,59,49,43,33,58,32,61,60,68,44,40,39,35,62,53},{52,59,49,43,33,58,32,61,60,68,44,40,53,31,70,23,13,24,48,35,34,45},{52,59,49,43,33,58,32,61,60,68,44,40,53,31,70,23,13,24,48,35,34,63},{52,59,49,43,33,58,32,61,60,68,44,40,53,31,70,23,13,24,25,16,22,14,69,35,34},{52,59,49,43,33,58,32,61,60,68,44,40,53,31,70,23,13,24,25,62,69,15,76},{52,59,49,43,33,58,32,61,60,68,44,40,53,31,70,23,13,24,25,36},{52,59,49,43,33,58,32,61,60,68,44,40,53,31,70,23,69,25,76,34,67,77,24,35},{52,59,49,43,33,58,32,61,60,68,44,40,53,31,70,23,69,25,76,34,67,77,78,35,24,16},{52,59,49,43,33,58,32,61,60,68,44,40,53,31,70,23,69,25,76,34,67,77,78,35,24,45},{52,59,49,43,33,58,32,61,60,68,44,40,53,31,70,23,69,25,24,16,76,34,13},{52,59,49,43,33,58,32,61,60,68,44,40,53,31,70,23,69,25,24,16,76,34,67},{52,59,49,43,33,58,32,61,60,68,44,40,53,31,70,23,69,25,24,34,13,16,76},{52,59,49,43,33,58,32,61,60,68,44,40,53,31,70,23,69,25,24,34,13,35},{52,59,49,43,33,58,32,61,60,68,44,40,53,31,70,23,69,25,24,34,13,36,45,35,16},{52,59,49,43,33,58,32,61,60,68,44,40,62,31,70,23,69,25,76,34,67,77,78,35,24},{52,59,49,43,33,58,32,61,60,68,44,40,62,53,69,31,70,36,63,54,67},{52,59,49,43,33,58,32,61,60,68,44,40,62,53,69,79,70,63,54,31,72,35,34,36,39,30,48},{52,59,49,43,33,58,32,61,60,68,44,40,62,63,70,78,79,53,69,77,76,67,45},{52,59,49,43,33,58,32,61,60,68,44,35,69},{52,59,49,43,33,58,32,61,60,68,44,35,53,45},{52,59,49,43,33,58,32,61,60,68,44,35,62,34,53,63,70,79,69,67,40,45},{52,59,49,43,33,58,32,61,60,68,44,35,62,53,69},{52,59,49,43,33,58,32,61,60,68,44,35,62,36,69},{52,59,49,43,33,58,32,61,60,68,44,35,62,36,53,63,70,34,69},{52,59,49,43,33,58,32,61,60,68,44,35,62,53,54},{52,59,49,43,33,58,32,53},{52,59,49,43,33,58,68,60,61,32},{52,59,49,43,33,58,60},{52,59,49,43,33,58,34,31,32,40,30},{52,59,49,43,33,58,34,31,32,40,39},{52,59,49,43,33,58,34,32,40,39,31},{52,59,49,43,33,58,34,32,40,24},{52,59,49,43,33,58,34,53,60,61,68,48},{52,59,49,43,33,58,34,53,60,61,68,32},{52,59,49,43,33,58,34,62,60,61,68,48,69},{52,59,49,43,33,58,34,62,61,60,32},{52,59,49,43,33,32},{52,59,58},{52,43,33,61,32,24,34,25,60,23,53,63,44},{52,61,60,43,31,40,32},{52,61,60,43,31,40,53},{52,61,60,43,31,59,34,40,49,39,47,29,58,30,33},{52,61,60,43,31,59,34,40,49,39,47,29,58,30,53},{52,61,60,43,31,59,34,40,49,39,47,29,58,48,56,57,44},{52,61,60,43,31,59,34,40,49,39,47,29,58,48,56,57,53},{52,61,60,43,31,59,34,40,49,39,47,29,58,48,56,33},{52,61,60,43,31,59,34,40,49,57,58,48,69},{52,61,60,43,31,59,34,40,49,57,44,35,69},{52,61,60,43,31,59,34,40,49,57,44,36},{52,61,60,43,31,59,34,40,49,25},{52,61,60,43,31,59,34,33,32,49,44,24,23,40,39,48,22},{52,61,60,43,31,59,34,33,32,58},{52,61,60,43,31,68,33,59,69,40,44},{52,61,60,43,31,68,33,59,69,49,40,32},{52,61,60,43,31,68,33,59,69,49,58},{52,61,60,43,31,68,34,59,53,33,44,40,32,23,70,24,22},{52,61,60,43,31,68,34,59,53,44,33,24,69},{52,61,60,43,31,68,34,59,53,44,33,35,62,25},{52,61,60,43,31,68,34,59,53,44,33,35,45},{52,61,60,43,31,68,34,59,53,44,33,62,69,35,70,40},{52,61,60,43,31,68,34,59,53,44,33,62,69,35,70,79,78,40},{52,61,60,43,31,68,34,59,53,44,33,62,69,35,70,79,78,77,76,75,71},{52,61,60,43,31,68,34,59,53,44,33,62,63},{52,61,60,43,31,68,34,59,53,44,33,54,69,35,62,63,70},{52,61,60,43,31,68,34,59,53,44,33,54,62,35,69,63,70},{52,61,60,43,31,68,34,59,53,44,62,33,69},{52,61,60,43,31,68,34,59,53,44,62,33,25},{52,61,60,43,31,69,34,33,32,24,53,49},{52,61,60,43,32},{52,61,60,43,33,49,40,32},{52,61,60,43,33,49,40,24,62},{52,61,60,43,33,49,40,69,48,32},{52,61,60,43,33,49,40,69,48,24,25,31,32,34,22},{52,61,60,43,33,49,40,69,48,24,25,31,32,34,44},{52,61,60,43,33,49,40,69,48,24,25,23,34,32,31,22,16},{52,61,60,43,33,49,40,69,48,24,25,23,34,32,31,22,44,53},{52,61,60,43,33,49,40,69,48,24,25,23,34,32,53,31,44,59},{52,61,60,43,33,49,40,69,48,24,25,23,34,32,53,31,44,35,13},{52,61,60,43,33,49,40,69,48,24,25,23,34,35},{52,61,60,43,33,49,40,69,48,24,25,23,34,44,53,59,68,62},{52,61,60,43,33,49,40,69,48,24,25,23,34,44,53,59,35,32,31,57,58},{52,61,60,43,33,49,40,69,48,24,25,23,34,44,53,59,36,32,58,30},{52,61,60,43,33,49,40,69,48,24,25,23,34,44,53,59,36,32,58,62,68},{52,61,60,43,33,49,40,69,48,24,34,32},{52,61,60,43,33,49,40,69,48,24,34,25},{52,61,60,43,33,49,40,69,48,24,34,25,44,53},{52,61,60,43,33,49,40,69,48,24,34,25,53,44,62,59,36,32},{52,61,60,43,33,49,40,69,48,24,34,25,53,44,62,59,36,54},{52,61,60,43,33,49,40,69,58,32,31},{52,61,60,43,33,49,40,69,58,24,25,23,34,32},{52,61,60,43,33,49,40,69,58,24,25,23,34,44},{52,61,60,43,33,49,40,69,58,24,34,32,31,23,15,13},{52,61,60,43,33,49,40,69,58,24,34,32,31,23,15,44,16},{52,61,60,43,33,49,40,69,58,24,34,25,44,53,54,59,68},{52,61,60,43,33,49,40,69,58,24,34,25,53,59,68},{52,61,60,43,33,49,40,69,58,24,34,25,53,44,62,59,36,32,70},{52,61,60,43,33,49,40,69,58,24,34,25,53,44,62,59,36,54},{52,61,60,43,33,49,40,69,58,24,34,44,53,59,68},{52,61,60,43,33,49,40,69,58,24,34,44,53,59,78},{52,61,60,43,33,49,40,69,58,24,70,59,53},{52,61,60,43,33,49,40,69,58,24,70,68,34,53},{52,61,60,43,33,49,40,69,44,34,35,32,31,24},{52,61,60,43,33,49,40,69,44,34,35,32,59,48,31,58},{52,61,60,43,33,49,40,69,44,34,35,32,59,31},{52,61,60,43,33,49,40,69,44,34,35,32,59,58},{52,61,60,43,33,49,40,69,44,34,35,32,59,24,25},{52,61,60,43,33,49,40,69,44,34,53,32,22,58},{52,61,60,43,33,49,40,69,44,34,53,32,22,63},{52,61,60,43,33,49,40,69,44,34,53,32,68,62},{52,61,60,43,33,49,40,69,44,35,68,59,34},{52,61,60,43,33,49,40,69,44,35,68,53,78,59,62,32,34,23},{52,61,60,43,33,49,40,69,44,35,68,45},{52,61,60,43,33,49,40,69,44,35,53,34,62},{52,61,60,43,33,49,40,69,44,35,62,53},{52,61,60,43,33,49,40,69,44,35,62,36},{52,61,60,43,33,49,53},{52,61,60,43,33,59},{52,61,60,43,34,49,70},{52,61,60,43,35,59},{52,61,60,43,35,34},{52,61,60,43,35,44},{52,61,60,43,44},{52,61,60,43,53,59,69,44,34,54,33},{52,61,60,43,53,59,69,44,34,54,63,72},{52,61,60,43,53,59,69,62,49,40},{52,61,60,43,53,69,68,59},{52,61,60,43,53,69,33,59,32,44,62,54},{52,61,60,43,53,69,33,34,32,31},{52,61,60,43,53,69,33,34,32,49},{52,61,60,43,53,69,33,34,32,24},{52,61,60,43,53,69,33,44,32,49,62,34,36,40},{52,61,60,43,53,69,33,44,32,49,62,54,63,72,45,36},{52,61,60,43,53,69,33,44,32,58,59},{52,61,60,43,53,69,33,44,32,58,62,34,36,54,63,45,35},{52,61,60,43,53,69,33,44,32,58,62,54,63,72,45,36},{52,61,60,43,53,69,33,44,34},{52,61,60,43,53,69,33,62,32,49,59,40},{52,61,60,43,53,69,33,62,32,49,59,34,44,45},{52,61,60,43,53,69,33,62,59,40,49,48},{52,61,60,43,53,69,33,62,59,40,32},{52,61,60,43,53,69,33,62,59,40,70},{52,61,60,43,53,69,33,62,59,34,70},{52,61,60,43,53,69,33,62,34},{52,61,60,43,53,69,33,62,34,44},{52,61,60,43,53,69,70,49,34,35,36,54},{52,61,60,43,53,69,70,49,34,44},{52,61,60,43,53,69,70,62},{52,61,60,43,53,69,70,54,32,58,68,40,44,45,31},{52,61,60,43,53,69,70,54,32,58,68,40,44,45,59},{52,61,60,43,53,69,70,54,32,58,68,40,44,45,33},{52,61,60,43,53,69,70,54,32,58,33,68,35},{52,61,60,43,53,69,70,54,33,32,34},{52,61,60,43,53,69,70,54,33,32,44,62,34},{52,61,60,43,53,69,70,54,33,32,44,45,34},{52,61,60,43,53,69,70,54,33,32,44,45,35},{52,61,60,43,53,69,70,54,44,62,33,32,34},{52,61,60,43,53,69,70,54,44,62,33,34},{52,61,60,43,53,69,70,54,44,62,33,79},{52,61,60,43,53,69,70,54,44,62,33,45},{52,61,60,43,53,69,70,54,44,45,33,59},{52,61,60,43,53,62,44,69,34},{52,61,60,43,62,49,44,53,33},{52,61,60,43,62,49,44,53,34,33,40},{52,61,60,43,62,49,44,53,34,33,54},{52,61,60,43,62,49,44,53,45,36,34,35,33},{52,61,60,43,62,49,44,53,45,36,34,35,54,63,33},{52,61,60,43,62,49,44,53,45,36,34,54},{52,61,60,43,62,49,44,53,45,63,33},{52,61,60,43,62,49,44,53,45,63,34},{52,61,60,43,62,58,49},{52,61,60,43,62,58,53},{52,61,60,43,62,59},{52,61,60,43,62,59,33,32,44,34,35},{52,61,60,43,62,59,33,32,53},{52,61,60,43,62,59,33,34,44,53,32,24,49},{52,61,60,43,62,59,33,34,44,53,25},{52,61,60,43,62,59,44,70},{52,61,60,43,71}};

CONST BoardI=[9,9,9,9,9,9,9,9,9,
              9,0,0,0,0,0,0,0,0,
              9,0,0,0,0,0,0,0,0,
              9,0,0,0,0,0,0,0,0,
              9,0,0,0,1,2,0,0,0,
              9,0,0,0,2,1,0,0,0,
              9,0,0,0,0,0,0,0,0,
              9,0,0,0,0,0,0,0,0,
              9,0,0,0,0,0,0,0,0,
              9,9,9,9,9,9,9,9,9,9];

CONST OrdreI={11,18,74,81,29,13,56,16,
              36,76,63,79,38,14,47,15,
              45,77,54,78,32,33,59,60,
              40,43,49,52,31,34,58,61,
              22,23,24,25,67,68,69,70,
              30,35,39,44,48,53,57,62,
              12,20,17,27,65,75,80,72,
              21,26,66,71,90};

CONST Cas2Coord=[9, 9, 9, 9, 9, 9, 9, 9, 9,
                 9,11,12,13,14,15,16,17,18,
                 9,21,22,23,24,25,26,27,28,
                 9,31,32,33,34,35,36,37,38,
                 9,41,42,43,44,45,46,47,48,
                 9,51,52,53,54,55,56,57,58,
                 9,61,62,63,64,65,66,67,68,
                 9,71,72,73,74,75,76,77,78,
                 9,81,82,83,84,85,86,87,88,
                 9, 9, 9, 9, 9, 9, 9, 9, 9, 9];

CONST Coord2Cas=[ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
                 11,12,13,14,15,16,17,18, 9, 9,
                 20,21,22,23,24,25,26,27, 9, 9,
                 29,30,31,32,33,34,35,36, 9, 9,
                 38,39,40,41,42,43,44,45, 9, 9,
                 47,48,49,50,51,52,53,54, 9, 9,
                 56,57,58,59,60,61,62,63, 9, 9,
                 65,66,67,68,69,70,71,72, 9, 9,
                 74,75,76,77,78,79,80,81, 9, 9];
                  
 
CONST Dir=[1,8,9,10,-1,-8,-9,-10]; 
CONST Prof={{2,6,8},{3,7,10},{4,8,12},{5,9,14}};
CONST Blanc=1;
CONST Noir=2;

LOCAL Trait,Hum;
LOCAL PossM,CasRet,HistMov;
LOCAL NbPio=[2,2];
LOCAL Pass,UseBib,BibLow,BibHigh,SymOuv;
LOCAL Score,Depth,MaxDepth;
LOCAL Board,Ordre;
LOCAL SavBoard,SavOrdre,SavHistMov,SavTrait;
LOCAL Aff,Niv,Phase;


LOCAL WaitK()
BEGIN
  LOCAL MM,M1, i1;
  REPEAT 
    MM:=MOUSE();
    M1:=MM(1);
    WAIT(0.1);
  UNTIL (SIZE(M1) = 0); 
END;

SplashScreen()
BEGIN
  WaitK();
  RECT_P(0,0,320,240,RGB(20,20,20),RGB(20,20,20));
  RECT_P(40,30,150,140,RGB(0,128,0),RGB(0,128,0));
  TEXTOUT_P("Py Reversi",40,170,7,RGB(255,255,255),100,RGB(0,0,0));
  TEXTOUT_P("V 0.01",170,179,3,RGB(255,255,255),160,RGB(0,0,0));
  TEXTOUT_P("Press any key to start",40,220,3,RGB(255,255,255),160,RGB(0,0,0));
  ARC_P(68,58,20,{RGB(255,255,255),RGB(255,255,255)});
  ARC_P(123,58,21,{RGB(0,0,0),RGB(0,0,0)});
  ARC_P(123,113,20,{RGB(255,255,255),RGB(255,255,255)});
  ARC_P(68,113,21,{RGB(0,0,0),RGB(0,0,0)});
  LINE_P(95,30,95,140,RGB(0,0,0)); 
  LINE_P(96,30,96,140,RGB(0,0,0)); 
  LINE_P(40,85,150,85,RGB(0,0,0)); 
  LINE_P(40,86,150,86,RGB(0,0,0)); 
  WHILE GETKEY==-1 DO
     WAIT(0.2);
  END; 
END;

LOCAL ClkMenu1(X,Y)
BEGIN
  LOCAL M,Col,Lig;
  M:=-1;
  IF Y >= 220
    THEN
      CASE
        IF   0 <= X <=  51 THEN M:=1; END;
        IF  53 <= X <= 104 THEN M:=2; END;
        IF 106 <= X <= 157 THEN M:=3; END;
        IF 159 <= X <= 210 THEN M:=4; END;
        IF 212 <= X <= 263 THEN M:=5; END;
        IF 265 <= X <= 319 THEN M:=6; END;
        DEFAULT M:=0;
      END; 
    END;
  IF (28 < X <= 220) AND (14 < Y <= 206)
    THEN
       Col:=FLOOR((X-28)/24)+1;
       Lig:=FLOOR((Y-14)/24)+1;
       M:=Col+Lig*10;
    END;
  RETURN(M);
END;

LOCAL Menu1(Lib)
BEGIN
  LOCAL MENU,M,M1,I;

  DRAWMENU(Lib(1),Lib(2),Lib(3),Lib(4),Lib(5),Lib(6));

  REPEAT
    MENU:=0;
    WHILE (MENU = 0) AND (GETKEY ≠ 4) DO
      REPEAT
        M:=MOUSE;
        M1:=M(1);
        WAIT(0.1);
      UNTIL (SIZE(M1) > 0) OR (GETKEY == 4);  
      IF (SIZE(M1) > 0)
        THEN 
          MENU:=ClkMenu1(M1(1),M1(2)); 
        ELSE MENU:=99;
      END;  
    END;
  UNTIL (MENU > 0) OR (GETKEY == 4);
  RETURN MENU;
END;

LOCAL NextMov(Bo,Tr,OrdM,ind)
BEGIN
  LOCAL i1,i2,i3,i4,di,cas;
  LOCAL Res,Res1,Res2, Result;
  Res:=0;
  Res2:={}; 
  i1:=ind; 
  WHILE (i1 < SIZE(OrdM)) AND (Res==0) DO
    cas:=OrdM(i1); 
    IF Bo[cas] == 0 
      THEN   
        FOR i3 FROM 1 TO 8 DO
          i2:=1;
          di:=Dir[i3]; 
          Res1:={};
          WHILE Bo[cas+i2*di] == (3-Tr) DO
            Res1:=CONCAT(Res1,{cas+i2*di});
            i2:=i2+1;
          END;  
          IF (i2 > 1) AND (Bo(cas+i2*di) == Tr)
            THEN
              Res:=cas;
              Res2:=CONCAT(Res2,Res1);
            END; 
        END;
      END;
    i1:=i1+1;
  END;
  IF (Aff==1) AND (Res > 0) AND (ReversiOpt(2) =1) AND (Tr=Hum) 
    THEN
      i3:=Cas2Coord(Res);
      i2:=FLOOR(i3/10)-1;
      i4:=i3 MOD 10 -1;
      ARC_P(40+i4*24,26+i2*24,3,{RGB(0,0,224),RGB(0,0,224)});
    END;
  Result:={Res,Res2,i1};
  RETURN(Result);
END;

LOCAL PossMoves(Bo,Tr,Ord)
BEGIN
  LOCAL i1,tmp;
  PossM:={};
  CasRet:={};
  i1:=1;
  WHILE i1<SIZE(Ord) DO
    tmp:=NextMov(Bo,Tr,Ord,i1);
    IF tmp(1) > 0
      THEN
        PossM:=CONCAT(PossM,{tmp(1)});
        CasRet:=CONCAT(CasRet,{tmp(2)});
        i1:=tmp(3);
      ELSE
        i1:=i1+1; 
      END;
  END;
  RETURN(SIZE(PossM));
END;

LOCAL ExeMov(Bo,Mov,Tr)
BEGIN
  LOCAL i1,i2,i3;
  i1:=POS(PossM,Mov); 
  IF i1 > 0
    THEN
      NbPio[Tr]:=NbPio[Tr]+ SIZE(CasRet(i1))+1;
      NbPio[3-Tr]:=NbPio[3-Tr]-SIZE(CasRet(i1));
      Bo[Mov]:=Tr;
      FOR i2 FROM 1 tO SIZE(CasRet(i1)) DO
        Bo[CasRet(i1,i2)]:=Tr;
      END;
    END;
  IF Tr==(3-Hum)
    THEN
      FOR i1:=1 TO 2 DO
        i2:=FLOOR(Mov/9);
        i3:=Mov MOD 9;
        IF i3==0 THEN i2:=i2-1;i3:=9; END; 
        IF Tr == 1
          THEN ARC_P(40+(i3-2)*24,26+(i2-1)*24,8,{RGB(255,255,255),RGB(255,255,255)});
          ELSE ARC_P(40+(i3-2)*24,26+(i2-1)*24,9,{RGB(0,0,0),RGB(0,0,0)})
          END; 
        WAIT(0.2);
        ARC_P(40+(i3-2)*24,26+(i2-1)*24,9,{RGB(0,128,0),RGB(0,128,0)});
        WAIT(0.1);
  END;  
     END;   
  RETURN(Bo);
END;

LOCAL Symetrie(Mov)
BEGIN
  LOCAL li,co;
  Mov:=Mov-1; 
  li:=FLOOR(Mov/9);
  co:= (Mov MOD 9);
  IF SymOuv == 1 THEN RETURN(Mov+1); END;
  IF SymOuv == 2 THEN RETURN(co*9+li+1); END;
  IF SymOuv == 3 THEN RETURN((9-li)*9 + (9-co)+1); END;
  IF SymOuv == 4 THEN RETURN((9-co)*9 + (9-li)+1); END;
END;

LOCAL Opening()
BEGIN
  LOCAL i1,i2,i3,NrMove,ok,ok1,hb,hm;
  NrMove:=NbPio[1]+NbPio[2]-4;
  IF (NbPio[1]+NbPio[2])==4
    THEN
      i1:=RANDINT(1,4);
      IF i1==1 THEN SymOuv:=1;  
      ELSE IF i1==2 THEN SymOuv:=2;   
      ELSE IF i1==3 THEN SymOuv:=3;  
      ELSE IF i1==4 THEN SymOuv:=4; END;END;END;END;  
      RETURN(52); 
    END;
  i2:=0;
  ok:=0;
  WHILE ok==0 DO
    i2:=i2+1;
    IF i2 > SIZE(HotBib)
      THEN RETURN(0); END;
    IF SIZE(HotBib(i2)) >= NrMove
      THEN
        ok1:=1;
        i1:=1; 
        WHILE ok1 == 1 DO
          hb:=HotBib(i2,i1);
          hm:=HistMov(i1);  
          IF hb <> hm
            THEN
              ok1:=0;
            ELSE
              IF i1 == NrMove
                THEN 
                  ok:=1;
                  BibLow:=i2;
                  ok1:=0;
                END;  
            END;
          i1:=i1+1;
          IF i1 > NrMove THEN ok1:=O; END; 
        END;
      END;
  END; 

  i2:=BibLow;
  ok:=1;
  WHILE ok==1 DO
    IF SIZE(HotBib(i2)) < NrMove
      THEN
        BibHigh:=i2-1;
        ok:=0;
      ELSE
        ok1:=1;
        i1:=1; 
        WHILE ok1 == 1 DO
          hb:=HotBib(i2,i1);
          hm:=HistMov(i1);  
          IF hb <> hm
            THEN
              ok1:=0;
              ok:=0;
              BibHigh:=i2-1;
            ELSE
              IF i1 == NrMove
                THEN 
                  ok1:=0;
                END;  
            END;
          i1:=i1+1;
          IF i1 > NrMove
            THEN ok1:=O; END;
        END; 
      END;
    i2:=i2+1;
    IF i2 > SIZE(HotBib)
      THEN 
        BibHigh:=SIZE(HotBib);
        ok:=0; 
      END;
  END; 
 
  i3:=RANDINT(BibLow,BibHigh);
  IF SIZE(HotBib(i3)) < (NrMove+1)
    THEN RETURN(0);
    ELSE RETURN(HotBib(RANDINT(BibLow,BibHigh),NrMove+1));
    END;
END;

LOCAL ChOpt()
BEGIN
  LOCAL options:={"1: Beginner", "2: Amateur", "3: Intermediate","4: Expert"};
  LOCAL Ch,i,y,m,m1,selection;

  selection:=-1;
  RECT(); // Efface l'écran
  TEXTOUT_P("Level :", 38, 10); 

  REPEAT
    FOR i FROM 1 TO SIZE(options) DO
      y := 38 + 24 * (i - 1);
      IF i == ReversiOpt(1)
        THEN RECT_P(28, y, 216, y + 18, RGB(0,192,0));
        ELSE RECT_P(28, y, 216, y + 18, RGB(192,0,0));
        END;
      TEXTOUT_P(options(i), 34, y + 2,0,RGB(255,255,255));
    END;

    y:=y+48;
    IF ReversiOpt(2) == 1
      THEN RECT_P(28, y, 216, y + 18, RGB(0,192,0));
      ELSE RECT_P(28, y, 216, y + 18, RGB(192,0,0));
      END;
    TEXTOUT_P("Show possible moves", 34, y + 2,0,RGB(255,255,255));

    y:=y+24;
    IF ReversiOpt(3) == 1
      THEN RECT_P(28, y, 216, y + 18, RGB(0,192,0));
      ELSE RECT_P(28, y, 216, y + 18, RGB(192,0,0));
      END;
    TEXTOUT_P("Use opening book", 34, y + 2,0,RGB(255,255,255));

    Ch:=Menu1({"","","","","","OK"});
    IF 21 <= Ch <= 28 THEN ReversiOpt(1):=1; END;
    IF 31 <= Ch <= 38 THEN ReversiOpt(1):=2; END;
    IF 41 <= Ch <= 48 THEN ReversiOpt(1):=3; END;
    IF 51 <= Ch <= 58 THEN ReversiOpt(1):=4; END;
    IF 71 <= Ch <= 78 THEN ReversiOpt(2):=-ReversiOpt(2); END;
    IF 81 <= Ch <= 88 THEN ReversiOpt(3):=-ReversiOpt(3); END;
  UNTIL Ch==6;
  Niv:=ReversiOpt(1); 
  WaitK();

END;

LOCAL DrawBoard(Tr)
BEGIN
  LOCAL i1,i2;
  DRAWMENU("New","Option","Back","Swap","","End");
  RECT_P(0,0,320,240,RGB(0,0,0),RGB(128,128,128));
  RECT_P(28,14,220,206,RGB(0,0,0),RGB(0,128,0));

  FOR i1 FROM 0 TO 7 DO
    FOR i2 FROM 0 TO 7 DO
      IF Board[(i2+1)*9+i1+2] == 1
      THEN 
        ARC_P(40+i1*24,26+i2*24,8,{RGB(255,255,255),RGB(255,255,255)});
      ELSE IF Board[(i2+1)*9+i1+2] == 2
        THEN ARC_P(40+i1*24,26+i2*24,9,{RGB(0,0,0),RGB(0,0,0)});
        END;
      END; 
     END;
    LINE_P(28,38+i1*24,220,38+i1*24,RGB(0,0,0));
    LINE_P(28+i1*24,14,28+i1*24,206,RGB(0,0,0)); 
  END;

  ARC_P(76,62,3,{RGB(0,0,0),RGB(0,0,0)});
  ARC_P(76,158,3,{RGB(0,0,0),RGB(0,0,0)});
  ARC_P(172,62,3,{RGB(0,0,0),RGB(0,0,0)});
  ARC_P(172,158,3,{RGB(0,0,0),RGB(0,0,0)});
  LINE_P(28,14,220,14,RGB(0,0,0)); 
  LINE_P(220,14,220,200,RGB(0,0,0)); 

  TEXTOUT_P("Level : "+STRING(ReversiOpt(1)),235,21,3,RGB(255,255,255),60,RGB(128,128,128));

  ARC_P(241,50,7,{RGB(0,0,0),RGB(0,0,0)});
  ARC_P(241,74,6,{RGB(255,255,255),RGB(255,255,255)});
  TEXTOUT_P(STRING(NbPio[2]),261,42,3,RGB(255,255,255),40,RGB(128,128,128));
  TEXTOUT_P(STRING(NbPio[1]),261,66,3,RGB(255,255,255),40,RGB(128,128,128));
   
  IF Phase==1
     THEN TEXTOUT_P("Opening",235,120,3,RGB(255,255,255),120,RGB(128,128,128));
     END;
  IF Phase==2
     THEN TEXTOUT_P("Score: "+STRING(Score),235,120,3,RGB(255,255,255),120,RGB(128,128,128));
     END;
  IF Phase==3
     THEN 
       IF Score > 0 
         THEN TEXTOUT_P("HP wins",235,120,3,RGB(255,255,255),120,RGB(128,128,128));
       ELSE IF Score=0
         THEN TEXTOUT_P("Draw",235,120,3,RGB(255,255,255),120,RGB(128,128,128));
       ELSE IF Score< 0
         THEN TEXTOUT_P("You win",235,120,3,RGB(255,255,255),120,RGB(128,128,128));
       END;END;END;
     END; 
  IF Phase==4
     THEN 
       TEXTOUT_P("Score: "+STRING(Score),235,120,3,RGB(255,255,255),120,RGB(128,128,128));
       IF Score > 0 
         THEN TEXTOUT_P("HP wins",235,144,3,RGB(255,255,255),120,RGB(128,128,128));
       ELSE IF Score=0
         THEN TEXTOUT_P("Draw",235,144,3,RGB(255,255,255),120,RGB(128,128,128));
       ELSE IF Score< 0
         THEN TEXTOUT_P("You win",235,144,3,RGB(255,255,255),120,RGB(128,128,128));
       END;END;END;
     END;

//  TEXTOUT_P(BibLow,244,144,3,RGB(255,255,255),120,RGB(128,128,128));
//  TEXTOUT_P(BibHigh,244,168,3,RGB(255,255,255),120,RGB(128,128,128));
 
    TEXTOUT_P("# "+STRING(NbCoups),235,96,3,RGB(255,255,255),160,RGB(128,128,128));

  IF Pass==0
    THEN
      IF Tr==Hum
        THEN TEXTOUT_P("Your Turn",235,187,3,RGB(255,255,255),85,RGB(128,128,128));
        ELSE TEXTOUT_P("HP thinking",235,187,3,RGB(255,255,255),85,RGB(128,128,128));
        END; 
    ELSE
      IF Tr == Hum
        THEN TEXTOUT_P("HP pass     ",235,187,3,RGB(255,255,255),200,RGB(128,128,128));
        ELSE TEXTOUT_P("You pass    ",235,187,3,RGB(255,255,255),200,RGB(128,128,128));
        END;
    END; 
END;

LOCAL InitGame()
BEGIN
  BoardI▶Board;
  OrdreI▶Ordre;
  HistMov:={};
  SavBoard:=Board;
  SavOrdre:=Ordre;
  SavHistMov:={}; 
  SavTrait:=Noir;
  Trait:=Noir;
  Hum:=Noir;
  NbPio[1]:=2;
  NbPio[2]:=2;
  PossM:={};
  CasRet:={};
  Score:=0;
  Phase:=1;
  BibLow:=1;
  BibHigh:=SIZE(HotBib);
  IF ReversiOpt(3) == 1
    THEN UseBib:=1;
    ELSE UseBib:=0;
    END;
  Aff:=1;
  DrawBoard(Trait);
  PossMoves(Board,Trait,Ordre);
  Aff:=0;
END;

LOCAL InitProg()
BEGIN
  LOCAL i1,i2,MM,M1;
  PRINT();
  RECT();
  IF SIZE(ReversiOpt) < 3 THEN ReversiOpt:={2,1,1}; END;
  IF ReversiOpt(1) > 4 THEN ReversiOpt(1):=4; END;
  IF ReversiOpt(1) < 1 THEN ReversiOpt(1):=1; END;
  IF (ReversiOpt(2) <> 1) AND (ReversiOpt(2) <> -1) THEN ReversiOpt(2):=1; END;
  IF (ReversiOpt(3) <> 1) AND (ReversiOpt(3) <> -1) THEN ReversiOpt(3):=1; END;
  Niv:=ReversiOpt(1); 

  InitGame();
END;

LOCAL TraitHP()
BEGIN
  LOCAL NbMov,Ch,OK,Struct,alpha,beta;
  REPEAT 
    NbCoups:=0;
    OK:=0;
    DrawBoard(Trait);
    NbMov:=PossMoves(Board,Trait,Ordre);
    IF NbMov==O
      THEN Pass:=1;
      ELSE Pass:=0;
      END; 
    IF ((UseBib==1) AND (ReversiOpt(3)==1)) 
       OR ((NbPio[1]+NbPio[2]) < 7)  
      THEN
        Ch:=Opening();
        IF Ch > 0
          THEN
            Phase:=1;
            Board:=ExeMov(Board,Symetrie(Ch),Trait);
            Ordre:=remove(Symetrie(Ch),Ordre);
            HistMov:=CONCAT(HistMov,Ch);
            OK:=1;
          END;
      END;
    
    IF (NbPio[1]+NbPio[2]) >= (64-Prof(Niv,3)) AND  
       (NbMov>0) 
      THEN 
        IF (NbPio[1]+NbPio[2]) >= (64-Prof(Niv,2))
          THEN alpha:=-65;beta:=65;Phase:=4;
          ELSE alpha:=-1;beta:=1; Phase:=3;
          END; 
        Depth:=26;
        MaxDepth:=Depth;    
        BestMov:=0;  
        print();
        Score:=PyNegamax(Board,Ordre,Trait,NbPio,Pass,Depth,alpha,beta); 
        Board:=ExeMov(Board,BestMov,Trait);
        Ordre:=remove(BestMov,Ordre);
        HistMov:=CONCAT(HistMov,BestMov);
        OK:=1;
      END;

    IF (OK==0) AND (NbMov>0)
      THEN
        Phase:=2; 
        alpha:=-999;
        beta:=999; 
        Depth:=Prof(Niv,1);
        MaxDepth:=Depth;  
        BestMov:=0;
        print();  
        Score:=PyNegamax(Board,Ordre,Trait,NbPio,Pass,Depth,alpha,beta); 
//        Score:=Negamax(Struct,Depth,alpha,beta);
        Board:=ExeMov(Board,BestMov,Trait);
        Ordre:=remove(BestMov,Ordre);
        HistMov:=CONCAT(HistMov,BestMov);
      END;

    Trait:=Hum;
    Aff:=1;
    DrawBoard(Trait);
    NbMov:=PossMoves(Board,Trait,Ordre);
    Aff:=0;
    IF (NbMov==O) AND ((NbPio[1]+NbPio[2]) <  64)
      THEN 
        REPEAT
          TEXTOUT_P("You have to pass",72,104,3,RGB(255,255,255),180,RGB(128,128,128));
          Ch:=Menu1({"","","","","OK",""});
          Wait(0.1);
        UNTIL Ch==5;
        WaitK();
        Pass:=Pass+1; 
        Trait:=3-Trait;
        DrawBoard(Trait); 
      ELSE 
        Pass:=0;
      END;
  UNTIL (NbMov > 0) OR (Pass>=2) OR ((NbPio[1]+NbPio[2])==64);
END;

LOCAL Play(Ch)
BEGIN
  LOCAL NbMov,OK, Mov;
  SavBoard:=Board;
  SavOrdre:=Ordre;
  SavHistMov:=HistMov;
  SavTrait:=Trait;
  Mov:=Coord2Cas[Ch]; 
  IF (NbPio[1]+NbPio[2])==4
    THEN
      IF Mov==52 THEN SymOuv:=1;  
      ELSE IF Mov==60 THEN SymOuv:=2;  
      ELSE IF Mov==40 THEN SymOuv:=3;  
      ELSE IF Mov==32 THEN SymOuv:=4; END;END;END;END;  
    END;
  Board:=ExeMov(Board,Mov,Trait);
  Ordre:=remove(Mov,Ordre);
  HistMov:=CONCAT(HistMov,Symetrie(Mov));
  DrawBoard(Trait);
  IF ((NbPio[1]+NbPio[2])==8) AND
     (HistMov(2)==61)         AND 
     (HistMov(3)==60)         AND 
     (HistMov(4)==59)         
    THEN
      HistMov(4):=43;
      IF SymOuv==1 THEN SymOuv:=2; END;
      IF SymOuv==2 THEN SymOuv:=1; END;
      IF SymOuv==3 THEN SymOuv:=4; END;
      IF SymOuv==4 THEN SymOuv:=3; END;
    END; 
  WaitK();
  Trait:=3-Trait;
  TraitHP(); 
END;

EXPORT Reversi()
BEGIN
  LOCAL Ch,tmp,i1,NbMov;
//  BoardA:=BoardI;
//  OrdreA:=OrdreI;
  SplashScreen();
  InitProg();
  REPEAT
    Ch:=Menu1({"New","Option","Back","Swap","","End"});
    IF Ch == 1 
      THEN 
        InitGame();
        Aff:=1; 
        DrawBoard(Trait);
        NbMov:=PossMoves(Board,Trait,Ordre);
        Aff:=0;
      END;
    IF Ch == 2 
      THEN 
        ChOpt(); 
        Aff:=1; 
        DrawBoard(Trait); 
        NbMov:=PossMoves(Board,Trait,Ordre);
        Aff:=0;
      END;
    IF Ch == 3 
      THEN 
        Board:=SavBoard;
        Ordre:=SavOrdre;
        Trait:=SavTrait;
        Hum:=Trait;
        HistMov:=SavHistMov;
        NbPio[1]:=0;
        NbPio[2]:=0;
        FOR i1 FROM 11 TO 81 DO
          IF Board[i1]==1 THEN NbPio[1]:=NbPio[1]+1; END;  
          IF Board[i1]==2 THEN NbPio[2]:=NbPio[2]+1; END;  
        END; 
        Aff:=1;
        DrawBoard(Trait);
        NbMov:=PossMoves(Board,Trait,Ordre);
        Aff:=0;
        WaitK();
      END;
    IF Ch == 4 
      THEN 
        Hum:=3-Hum;
        Trait:=3-Hum;
        DrawBoard(Trait);
        NbMov:=PossMoves(Board,Trait,Ordre);
        TraitHP();
        WaitK();
      END;
    IF Ch == 5 
      THEN
//        MSGBOX(ResMid); 
        Aff:=1; 
        DrawBoard(Trait); 
        NbMov:=PossMoves(Board,Trait,Ordre);
        Aff:=0;
        WaitK();
      END; 
    IF (10 < Ch < 89) AND (POS(PossM,Coord2Cas[Ch]) > 0)
      THEN 
        Play(Ch); 
        IF Pass==2
          THEN
            TEXTOUT_P("Game ended",235,187,3,RGB(255,255,255),85,RGB(128,128,128));
          END;  
      END;
//    TEXTOUT_P(STRING(tmp),230,44,3,RGB(255,255,255),40,RGB(128,128,128));
//    MSGBOX(STRING(temp(1))+" "+STRING(temp(2))+" "+STRING(SIZE(temp(2))));
  UNTIL Ch==6;
END;
