それがまさにあなたが求めたものかどうかはわかりませんが、ここでは単純な python でそれを取り上げます。(私の例では) 10 人の学生に対して持つことができるそれぞれの一意のグループを吐き出します。
これは私が推測する最速のものではありませんが、実装とフォローは非常に簡単です。
from itertools import permutations
def my_sort(x):
assert type(x) in (tuple, list)
assert len(x)==10
groups = x[0:2],x[2:4],x[4:6],x[6:8],x[8:10]
groups = sorted([sorted(g) for g in groups], key=lambda k:k[0])
return tuple(x for g in groups for x in g )
S = set(my_sort(p) for p in permutations(list(range(10))))
"""
len(S) == 945
list(sorted(S))[-3:] == [(0, 9, 1, 8, 2, 7, 3, 4, 5, 6), (0, 9, 1, 8, 2, 7, 3, 5, 4, 6), (0, 9, 1, 8, 2, 7, 3, 6, 4, 5)]
"""
タプルは行内のすべてのグループを表します: (0, 9, 1, 8, 2, 7, 3, 4, 5, 6) は、0 が 9 でグループ化され、1 が 8 でグループ化されるなどを意味します。