Go solution with backtracking
\nfunc maxCompatibilitySum(students [][]int, mentors [][]int) int {\n    result, m, mentorVisit := int(0), len(students), make([]bool, len(students))\n    \n   
```\nfunc maxCompatibilitySum(students [][]int, mentors [][]int) int {\n    result, m, mentorVisit := int(0), len(students), make([]bool, len(students))\n    \n    var backtrack func(int, int)\n    backtrack = func(index int, currentCompatibility int) {\n        if index == m {\n            result = max(result, currentCompatibility)\n            return\n        }\n        \n        for i := 0; i < m; i++ {\n            if mentorVisit[i] == false {\n                mentorVisit[i] = true\n                backtrack(index + 1, currentCompatibility + getCompatibility(students[index], mentors[i])) \n                mentorVisit[i] = false\n            }  \n        }\n    }\n    \n    backtrack(0, 0)\n    \n    return result\n}\n\nfunc getCompatibility(sAnswers, mAnswers []int) int {\n    sum := 0\n    \n    for i := 0; i < len(sAnswers); i++ {\n        if sAnswers[i] == mAnswers[i] {\n            sum++\n        }\n    }\n    \n    return sum\n}\n\nfunc max(a, b int) int {\n    if a > b {\n        return a\n    }\n    \n    return b\n}\n```
['Backtracking', 'Recursion', 'Go']