PARIS — Monaco celebrated its French league title by beating Rennes 3-2 for a 12th straight win on Saturday, finishing the season eight points clear of deposed champion Paris Saint-Germain.

Monaco sealed the title midweek and its players spray-dyed their hair in the club's colours to celebrate.

Monaco scored in its last 32 league games to set a single-season record. It scored 107 league goals — five more than PSG's total last season — and 158 overall.

PSG conceded an injury-time equalizer in a 1-1 home draw with Caen. The result was priceless for the visitors, ensuring survival in a tense relegation fight. Bastia and Nancy were relegated and 18th-placed Lorient faces a playoff against the third-placed team from division two.

Lorient was moments away from staying up until Ronny Rodelin swept in a 91st-minute equalizer for Caen, having earlier missed a penalty. Caen also had a goal controversially disallowed, and when Rodelin did finally score, his goal set off scenes of wild delight.

Marseille striker Bafetimbi Gomis scored his 20th league goal to ensure fifth place for Marseille and a spot in the Europa League, while relegating Bastia.

RENNES 2, MONACO 3

Brazilian players Fabinho, Jemerson, and Jorge scored for Monaco, which always led, and Adama Diakhaby pulled two back for the home side.

PSG 1, CAEN 1

Midfielder Adrien Rabiot put PSG ahead early but striker Edinson Cavani failed to improve on his league-leading 35 goals.

With three minutes to go, Caen midfielder Julien Feret thought he scored but the goal was ruled out because one of his teammate's was adjudged to be offside. But Caen coach Patrice Garande was dancing with delight when Rodelin atoned for a penalty miss to keep Caen in the top flight.

LYON 3, NICE 3

Top scorer Alexandre Lacazette bid the perfect farewell to Lyon, scoring twice to break his own record and reach 100 league goals for the club.

Lacazette came through the youth ranks and made his debut eight years ago. He is leaving, possibly to Atletico Madrid.

Lyon took the lead in the 10th minute when Nice defender Maxime Le Marchand inadvertently turned in forward Memphis Depay's shot.

Greek striker Anastasios Donis equalized five minutes later after being set up by midfielder Vincent Koziello.

Third-placed Nice salvaged a point with the last kick when midfielder Jean-Michael Seri coolly scored a penalty.

OTHER MATCHES

Lorient gave itself a chance of staying up after drawing with Bordeaux 1-1, and meets third-placed Troyes from the second division in a two-way playoff. A defeat would have relegated Lorient and put Nancy into the playoff on goal difference.

Dijon also ensured its safety with a 0-0 draw at Toulouse, and finished in 16th place, ahead of 17th-placed Caen on goal difference.

Nancy's 3-1 home win against Saint-Etienne proved to be in vain.

Striker Nicolas De Preville scored a hat trick as Lille beat Nantes 3-0; Angers won against visiting Montpellier 2-0, and Guingamp beat Metz 1-0.