Randomize Timer Sub printSquare(latin() As Integer, n As Integer) For i As Integer = 0 To n - 1 Print "["; For j As Integer = 0 To n - 1 Print latin(i, j); ","; Next j Print Chr(8); " ]" Next i Print End Sub Sub latinSquare(n As Integer) Dim As Integer i, j, k If n <= 0 Then Print "[]" Exit Sub End If Dim latin(n - 1, n - 1) As Integer For i = 0 To n - 1 For j = 0 To n - 1 latin(i, j) = j Next j Next i ' first row For i = 0 To n - 1 Dim j As Integer = Int(Rnd * n) Swap latin(0, i), latin(0, j) Next i ' middle row(s) For i = 1 To n - 2 Dim shuffled As Integer = 0 While shuffled = 0 For j = 0 To n - 1 Dim k As Integer = Int(Rnd * n) Swap latin(i, j), latin(i, k) Next j shuffled = 1 For k As Integer = 0 To i - 1 For j = 0 To n - 1 If latin(k, j) = latin(i, j) Then shuffled = 0 Exit For End If Next j If shuffled = 0 Then Exit For Next k Wend Next i ' last row For j = 0 To n - 1 Dim used(n - 1) As Integer For i = 0 To n - 2 used(latin(i, j)) = 1 Next i For k = 0 To n - 1 If used(k) = 0 Then latin(n - 1, j) = k Exit For End If Next k Next j printSquare(latin(), n) End Sub latinSquare(5) latinSquare(5) latinSquare(10) ' for good measure Sleep