```#!/usr/local/bin/tclsh
# \$Id: matrix.tcl,v 1.6 2001/01/16 00:34:18 doug Exp \$
# http://www.bagley.org/~doug/shootout/

# This program based on the original from:
# "The What, Why, Who, and Where of Python" By Aaron R. Watters
# http://www.networkcomputing.com/unixworld/tutorial/005/005.html

# modified to avoid matrix size checks
# --Doug

# additional speedups by Kristoffer Lawson and Miguel Sofer

set size 30;

proc mkmatrix {rows cols} {
set count 1;
set mx [list]
for { set i 0 } { \$i < \$rows } { incr i } {
set row [list]
for { set j 0 } { \$j < \$cols } { incr j } {
lappend row \$count;
incr count;
}
lappend mx \$row;
}
return \$mx;
}

proc mmult {m1 m2} {
set cols [lindex \$m2 0]
foreach row1 \$m1 {
set row [list]
set i 0
foreach - \$cols {
set elem 0
foreach elem1 \$row1 row2 \$m2 {
set elem [expr {\$elem + \$elem1 * [lindex \$row2 \$i]}]
}
lappend row \$elem
incr i
}
lappend result \$row
}
return \$result
}

proc main {} {
global argv size
set num [lindex \$argv 0]
if {\$num < 1} {
set num 1
}

set m1 [mkmatrix \$size \$size]
set m2 [mkmatrix \$size \$size]
while {\$num > 0} {
incr num -1
set m [mmult \$m1 \$m2]
}

puts "[lindex [lindex \$m 0] 0] [lindex [lindex \$m 2] 3] [lindex [lindex \$m 3] 2] [lindex [lindex \$m 4] 4]"
}

main
```