diff --git a/real/rsa/Main.hs b/real/rsa/Main.hs
index d9234319411f9e1169b9e3e90a3609e1c344ea3f..45d396814fc2997c79554c1d4106621aa79a8161 100644
--- a/real/rsa/Main.hs
+++ b/real/rsa/Main.hs
@@ -7,8 +7,10 @@ import System.Environment
 import NofibUtils
 
 main = do
+  (iters:_) <- getArgs
+  let n = read iters :: Int
   input <- getContents
-  replicateM_ 100 $ do
+  replicateM_ n $ do
     input' <- salt input
     print (hash (encrypt 2036450659413645137870851576872812267542175329986469156678671505255564383842535488743101632280716717779536712424613501441720195827856504007305662157107
                          387784473137902876992546516170169092918207676456888779623592396031349415024943784869634893342729620092877891356118467738167515879252473323905128540213
diff --git a/real/rsa/Makefile b/real/rsa/Makefile
index cf44ea39cbaabf6ae8199bb3347583064b80b25b..0ff7b5f93760d6287de2d6b9b810c9e1c6f67637 100644
--- a/real/rsa/Makefile
+++ b/real/rsa/Makefile
@@ -3,3 +3,7 @@ include $(TOP)/mk/boilerplate.mk
 -include opts.mk
 include $(TOP)/mk/target.mk
 
+FAST_OPTS = 100
+NORM_OPTS = 150
+SLOW_OPTS = 250
+
diff --git a/real/rsa/rsa.faststdin b/real/rsa/rsa.faststdin
index 78be4830ef4d29eb71715db8662cfb4f0358f267..51a999a3c38a833a27dcdfcf7c29cc6d24aa8d5e 100644
--- a/real/rsa/rsa.faststdin
+++ b/real/rsa/rsa.faststdin
@@ -5,3 +5,9 @@ where
 encrypt, decrypt :: Integer -> Integer -> String -> String
 encrypt n e = unlines . map (show . power e n . code) . collect (size n)
 decrypt n d = concat . map (decode . power d n . read) . lines
+
+-------- Converting between Strings and Integers -----------
+
+code :: String -> Integer
+code = foldl accum 0
+  where accum x y = (128 * x) + fromIntegral (fromEnum y)
diff --git a/real/rsa/rsa.faststdout b/real/rsa/rsa.faststdout
index bae373e7a7defc24fa26bf46b84e7fb1ad86af27..41bebc3c9b3e8c1062f5ea1b0c32640bc61f9237 100644
--- a/real/rsa/rsa.faststdout
+++ b/real/rsa/rsa.faststdout
@@ -1,100 +1,100 @@
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
-7070291556905191903
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
+18864594872723566
diff --git a/real/rsa/rsa.slowstdout b/real/rsa/rsa.slowstdout
index db757853f584decc23c76273b6b27794e11c4cb9..8f7dfba71609d33b740fd04f210b9317af6f5e17 100644
--- a/real/rsa/rsa.slowstdout
+++ b/real/rsa/rsa.slowstdout
@@ -98,3 +98,153 @@
 5782777958546550349
 5782777958546550349
 5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
+5782777958546550349
diff --git a/real/rsa/rsa.stdin b/real/rsa/rsa.stdin
index 17d0462370cee04b4602f405b7f9ca5e9ac3f1b2..cefe34c844643a57c852878a9031b442ded324df 100644
--- a/real/rsa/rsa.stdin
+++ b/real/rsa/rsa.stdin
@@ -69,3 +69,69 @@ sqr x = x * x
 This module imports the contents of Densematrix and exports some of the
 functions renaming many of them for use by Matrix. The original %include
 statement(from Matrix) is left as a comment at the foot of this file.
+
+\begin{code}
+
+module AbsDensematrix(Block,Vec,bmult,bvecmult,vecbmult,vecdot,vecnorm,
+                      vecouter,badd,bsub,vecadd,vecsub,bsize,vecsize,bneg,
+                      bxpose,bident,vecneg,svecmult,mkblock,bswaprow,bswapcol,
+                      bdroprow,bgetrow,bgetcol,bsubscript,vecsubscript,bupdate,
+                      vecupdate,vechd,vectl,mergevecs,binverse,showblock,
+                     showvec, mkvec,mkrvec,vecpart,update2,veclist,matlist)
+       where
+
+
+import Densematrix
+
+type Block = Matrix
+type Vec = Vector
+
+bmult = mmult
+bvecmult = matvecmult
+vecbmult = vmmult
+vecdot   = vdot
+
+vecnorm = norm
+vecouter = vouter
+
+badd = madd
+bsub = msub
+vecadd = vadd
+vecsub = vsub
+
+bsize = msize
+vecsize = vsize
+
+bneg = mneg
+bxpose = mxpose
+bident = mident
+
+vecneg = vneg
+svecmult = svmult
+
+mkblock = mkmat
+
+bswaprow = swaprow
+bswapcol = swapcol
+
+bdroprow = droprow
+bgetrow = getrow
+bgetcol = getcol
+
+bsubscript = subscript
+vecsubscript = vsubscript
+
+bupdate = update
+vecupdate = vupdate
+
+vechd = vhd
+vectl = vtl
+
+mergevecs = mergevectors
+
+binverse = minverse
+
+showblock = showmatrix
+showvec = displayvector
+
+\end{code}
diff --git a/real/rsa/rsa.stdout b/real/rsa/rsa.stdout
index fb808adf29d0a3afa4b868afedc2c88c377c6476..9d87bd8962dac1a6c59c91de4429d13ade41d376 100644
--- a/real/rsa/rsa.stdout
+++ b/real/rsa/rsa.stdout
@@ -1,100 +1,150 @@
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
--8068683040965007191
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274
+815920302423014274