[SCM] polybori: Polynomials over Boolean Rings branch, master, updated. upstream/0.8.2-50-ge095127
Alexander Dreyer
adreyer at gmx.de
Tue Jan 8 10:23:29 UTC 2013
The following commit has been merged in the master branch:
commit 50c33aa438cd421482d838de7f9813d560a39dae
Author: Alexander Dreyer <adreyer at gmx.de>
Date: Tue Jan 8 10:58:02 2013 +0100
Drop unused files from Cudd due to ensure DFSG
diff --git a/debian/patches/0004-Drop-unused-files-from-Cudd-due-to-possible-license-.patch b/debian/patches/0004-Drop-unused-files-from-Cudd-due-to-possible-license-.patch
new file mode 100644
index 0000000..13df1fa
--- /dev/null
+++ b/debian/patches/0004-Drop-unused-files-from-Cudd-due-to-possible-license-.patch
@@ -0,0 +1,40707 @@
+From: Alexander Dreyer <adreyer at gmx.de>
+Date: Tue, 8 Jan 2013 10:56:35 +0100
+Subject: Drop unused files from Cudd due to possible license issues
+
+---
+ Cudd/cudd/doc/cudd.ps | 5036 ---------------------------------
+ Cudd/dddmp/Makefile | 243 --
+ Cudd/dddmp/README.dddmp | 64 -
+ Cudd/dddmp/README.testdddmp | 79 -
+ Cudd/dddmp/RELEASE_NOTES | 60 -
+ Cudd/dddmp/dddmp.h | 330 ---
+ Cudd/dddmp/dddmpBinary.c | 343 ---
+ Cudd/dddmp/dddmpConvert.c | 180 --
+ Cudd/dddmp/dddmpDbg.c | 166 --
+ Cudd/dddmp/dddmpDdNodeBdd.c | 455 ---
+ Cudd/dddmp/dddmpDdNodeCnf.c | 944 ------
+ Cudd/dddmp/dddmpInt.h | 216 --
+ Cudd/dddmp/dddmpLoad.c | 1486 ----------
+ Cudd/dddmp/dddmpLoadCnf.c | 1072 -------
+ Cudd/dddmp/dddmpNodeAdd.c | 451 ---
+ Cudd/dddmp/dddmpNodeBdd.c | 452 ---
+ Cudd/dddmp/dddmpNodeCnf.c | 932 ------
+ Cudd/dddmp/dddmpStoreAdd.c | 957 -------
+ Cudd/dddmp/dddmpStoreBdd.c | 1114 --------
+ Cudd/dddmp/dddmpStoreCnf.c | 1583 -----------
+ Cudd/dddmp/dddmpStoreMisc.c | 1641 -----------
+ Cudd/dddmp/dddmpUtil.c | 436 ---
+ Cudd/dddmp/doc/cmdIndex.html | 9 -
+ Cudd/dddmp/doc/commands.html | 12 -
+ Cudd/dddmp/doc/credit.html | 15 -
+ Cudd/dddmp/doc/dddmp-2.0-A4.ps | 1261 ---------
+ Cudd/dddmp/doc/dddmp-2.0-Letter.ps | 1260 ---------
+ Cudd/dddmp/doc/dddmpAllAbs.html | 483 ----
+ Cudd/dddmp/doc/dddmpAllByFile.html | 13 -
+ Cudd/dddmp/doc/dddmpAllByFunc.html | 13 -
+ Cudd/dddmp/doc/dddmpAllDet.html | 3704 ------------------------
+ Cudd/dddmp/doc/dddmpAllFile.html | 679 -----
+ Cudd/dddmp/doc/dddmpDesc.html | 28 -
+ Cudd/dddmp/doc/dddmpExt.html | 13 -
+ Cudd/dddmp/doc/dddmpExtAbs.html | 91 -
+ Cudd/dddmp/doc/dddmpExtDet.html | 693 -----
+ Cudd/dddmp/doc/dddmpTitle.html | 17 -
+ Cudd/dddmp/doc/packages.html | 12 -
+ Cudd/dddmp/doc/pkgIndex.html | 13 -
+ Cudd/dddmp/exp/0.add | 21 -
+ Cudd/dddmp/exp/0.bdd | 19 -
+ Cudd/dddmp/exp/0or1.bdd | 119 -
+ Cudd/dddmp/exp/1.add | 28 -
+ Cudd/dddmp/exp/1.bdd | 110 -
+ Cudd/dddmp/exp/2.bdd | 118 -
+ Cudd/dddmp/exp/2and3.bdd | 76 -
+ Cudd/dddmp/exp/3.bdd | 304 --
+ Cudd/dddmp/exp/4.bdd | 50 -
+ Cudd/dddmp/exp/4.bdd.bis1 | 50 -
+ Cudd/dddmp/exp/4.bdd.bis2 | 50 -
+ Cudd/dddmp/exp/4.bdd.bis3 | 50 -
+ Cudd/dddmp/exp/4.bdd.bis4 | 50 -
+ Cudd/dddmp/exp/4.cnf | 130 -
+ Cudd/dddmp/exp/4.cnf.bis | 130 -
+ Cudd/dddmp/exp/4.max1 | 125 -
+ Cudd/dddmp/exp/4.max2 | 125 -
+ Cudd/dddmp/exp/4bis.bdd | 47 -
+ Cudd/dddmp/exp/4xor5.bdd | 120 -
+ Cudd/dddmp/exp/5.bdd | 31 -
+ Cudd/dddmp/exp/composeids.txt | 20 -
+ Cudd/dddmp/exp/one.bdd | 13 -
+ Cudd/dddmp/exp/runAllTest.script | 11 -
+ Cudd/dddmp/exp/s27RP1.bdd | 18 -
+ Cudd/dddmp/exp/s27deltaDddmp1.bdd | 31 -
+ Cudd/dddmp/exp/s27deltaDddmp1.bdd.bis | 31 -
+ Cudd/dddmp/exp/s27deltaDddmp2.bdd | 32 -
+ Cudd/dddmp/exp/test1.script | 26 -
+ Cudd/dddmp/exp/test2.script | 30 -
+ Cudd/dddmp/exp/test3.script | 69 -
+ Cudd/dddmp/exp/test4.script | 56 -
+ Cudd/dddmp/exp/test5.script | 42 -
+ Cudd/dddmp/exp/test6.script | 50 -
+ Cudd/dddmp/exp/test7.script | 150 -
+ Cudd/dddmp/exp/varauxids.ord | 50 -
+ Cudd/dddmp/exp/varnames.ord | 50 -
+ Cudd/dddmp/exp/zero.bdd | 13 -
+ Cudd/dddmp/testdddmp.c | 2279 ---------------
+ Cudd/mnemosyne/Makefile | 53 -
+ Cudd/mnemosyne/README | 39 -
+ Cudd/mnemosyne/mnemalyse.c | 197 --
+ Cudd/mnemosyne/mnemconf.h | 89 -
+ Cudd/mnemosyne/mnemosyne.c | 670 -----
+ Cudd/mnemosyne/mnemosyne.h | 73 -
+ Cudd/mnemosyne/mtest.c | 38 -
+ Cudd/sis/Makefile.sis | 97 -
+ Cudd/sis/cuddBdd.h | 382 ---
+ Cudd/sis/cuddBddPort.c | 1954 -------------
+ Cudd/sis/cuddPwPt.c | 147 -
+ Cudd/sis/st.c | 554 ----
+ Cudd/sis/st.h | 97 -
+ Cudd/st/Makefile | 64 -
+ Cudd/st/doc/stAllAbs.html | 96 -
+ Cudd/st/doc/stAllDet.html | 462 ---
+ Cudd/st/doc/stExtAbs.html | 96 -
+ Cudd/st/doc/stExtDet.html | 463 ---
+ Cudd/st/st.c | 1065 -------
+ Cudd/st/st.h | 232 --
+ Cudd/util/Makefile | 64 -
+ Cudd/util/cpu_stats.c | 89 -
+ Cudd/util/cpu_time.c | 76 -
+ Cudd/util/datalimit.c | 50 -
+ Cudd/util/getopt.c | 72 -
+ Cudd/util/pathsearch.c | 94 -
+ Cudd/util/pipefork.c | 93 -
+ Cudd/util/prtime.c | 21 -
+ Cudd/util/ptime.c | 9 -
+ Cudd/util/restart.c | 137 -
+ Cudd/util/safe_mem.c | 97 -
+ Cudd/util/saveimage.c | 229 --
+ Cudd/util/state.c | 82 -
+ Cudd/util/strsav.c | 14 -
+ Cudd/util/stub.c | 82 -
+ Cudd/util/test-res.c | 57 -
+ Cudd/util/test-sav.c | 39 -
+ Cudd/util/texpand.c | 57 -
+ Cudd/util/tmpfile.c | 44 -
+ Cudd/util/util.h | 209 --
+ 117 files changed, 39763 deletions(-)
+ delete mode 100644 Cudd/cudd/doc/cudd.ps
+ delete mode 100644 Cudd/dddmp/Makefile
+ delete mode 100644 Cudd/dddmp/README.dddmp
+ delete mode 100644 Cudd/dddmp/README.testdddmp
+ delete mode 100644 Cudd/dddmp/RELEASE_NOTES
+ delete mode 100644 Cudd/dddmp/dddmp.h
+ delete mode 100644 Cudd/dddmp/dddmpBinary.c
+ delete mode 100644 Cudd/dddmp/dddmpConvert.c
+ delete mode 100644 Cudd/dddmp/dddmpDbg.c
+ delete mode 100644 Cudd/dddmp/dddmpDdNodeBdd.c
+ delete mode 100644 Cudd/dddmp/dddmpDdNodeCnf.c
+ delete mode 100644 Cudd/dddmp/dddmpInt.h
+ delete mode 100644 Cudd/dddmp/dddmpLoad.c
+ delete mode 100644 Cudd/dddmp/dddmpLoadCnf.c
+ delete mode 100644 Cudd/dddmp/dddmpNodeAdd.c
+ delete mode 100644 Cudd/dddmp/dddmpNodeBdd.c
+ delete mode 100644 Cudd/dddmp/dddmpNodeCnf.c
+ delete mode 100644 Cudd/dddmp/dddmpStoreAdd.c
+ delete mode 100644 Cudd/dddmp/dddmpStoreBdd.c
+ delete mode 100644 Cudd/dddmp/dddmpStoreCnf.c
+ delete mode 100644 Cudd/dddmp/dddmpStoreMisc.c
+ delete mode 100644 Cudd/dddmp/dddmpUtil.c
+ delete mode 100644 Cudd/dddmp/doc/cmdIndex.html
+ delete mode 100644 Cudd/dddmp/doc/commands.html
+ delete mode 100644 Cudd/dddmp/doc/credit.html
+ delete mode 100644 Cudd/dddmp/doc/dddmp-2.0-A4.ps
+ delete mode 100644 Cudd/dddmp/doc/dddmp-2.0-Letter.ps
+ delete mode 100644 Cudd/dddmp/doc/dddmpAllAbs.html
+ delete mode 100644 Cudd/dddmp/doc/dddmpAllByFile.html
+ delete mode 100644 Cudd/dddmp/doc/dddmpAllByFunc.html
+ delete mode 100644 Cudd/dddmp/doc/dddmpAllDet.html
+ delete mode 100644 Cudd/dddmp/doc/dddmpAllFile.html
+ delete mode 100644 Cudd/dddmp/doc/dddmpDesc.html
+ delete mode 100644 Cudd/dddmp/doc/dddmpExt.html
+ delete mode 100644 Cudd/dddmp/doc/dddmpExtAbs.html
+ delete mode 100644 Cudd/dddmp/doc/dddmpExtDet.html
+ delete mode 100644 Cudd/dddmp/doc/dddmpTitle.html
+ delete mode 100644 Cudd/dddmp/doc/packages.html
+ delete mode 100644 Cudd/dddmp/doc/pkgIndex.html
+ delete mode 100644 Cudd/dddmp/exp/0.add
+ delete mode 100644 Cudd/dddmp/exp/0.bdd
+ delete mode 100644 Cudd/dddmp/exp/0or1.bdd
+ delete mode 100644 Cudd/dddmp/exp/1.add
+ delete mode 100644 Cudd/dddmp/exp/1.bdd
+ delete mode 100644 Cudd/dddmp/exp/2.bdd
+ delete mode 100644 Cudd/dddmp/exp/2and3.bdd
+ delete mode 100644 Cudd/dddmp/exp/3.bdd
+ delete mode 100644 Cudd/dddmp/exp/4.bdd
+ delete mode 100644 Cudd/dddmp/exp/4.bdd.bis1
+ delete mode 100644 Cudd/dddmp/exp/4.bdd.bis2
+ delete mode 100644 Cudd/dddmp/exp/4.bdd.bis3
+ delete mode 100644 Cudd/dddmp/exp/4.bdd.bis4
+ delete mode 100644 Cudd/dddmp/exp/4.cnf
+ delete mode 100644 Cudd/dddmp/exp/4.cnf.bis
+ delete mode 100644 Cudd/dddmp/exp/4.max1
+ delete mode 100644 Cudd/dddmp/exp/4.max2
+ delete mode 100644 Cudd/dddmp/exp/4bis.bdd
+ delete mode 100644 Cudd/dddmp/exp/4xor5.bdd
+ delete mode 100644 Cudd/dddmp/exp/5.bdd
+ delete mode 100644 Cudd/dddmp/exp/composeids.txt
+ delete mode 100644 Cudd/dddmp/exp/one.bdd
+ delete mode 100755 Cudd/dddmp/exp/runAllTest.script
+ delete mode 100644 Cudd/dddmp/exp/s27RP1.bdd
+ delete mode 100644 Cudd/dddmp/exp/s27deltaDddmp1.bdd
+ delete mode 100644 Cudd/dddmp/exp/s27deltaDddmp1.bdd.bis
+ delete mode 100644 Cudd/dddmp/exp/s27deltaDddmp2.bdd
+ delete mode 100755 Cudd/dddmp/exp/test1.script
+ delete mode 100755 Cudd/dddmp/exp/test2.script
+ delete mode 100755 Cudd/dddmp/exp/test3.script
+ delete mode 100755 Cudd/dddmp/exp/test4.script
+ delete mode 100755 Cudd/dddmp/exp/test5.script
+ delete mode 100755 Cudd/dddmp/exp/test6.script
+ delete mode 100755 Cudd/dddmp/exp/test7.script
+ delete mode 100644 Cudd/dddmp/exp/varauxids.ord
+ delete mode 100644 Cudd/dddmp/exp/varnames.ord
+ delete mode 100644 Cudd/dddmp/exp/zero.bdd
+ delete mode 100644 Cudd/dddmp/testdddmp.c
+ delete mode 100644 Cudd/mnemosyne/Makefile
+ delete mode 100644 Cudd/mnemosyne/README
+ delete mode 100644 Cudd/mnemosyne/mnemalyse.c
+ delete mode 100644 Cudd/mnemosyne/mnemconf.h
+ delete mode 100644 Cudd/mnemosyne/mnemosyne.c
+ delete mode 100644 Cudd/mnemosyne/mnemosyne.h
+ delete mode 100644 Cudd/mnemosyne/mtest.c
+ delete mode 100644 Cudd/sis/Makefile.sis
+ delete mode 100644 Cudd/sis/cuddBdd.h
+ delete mode 100644 Cudd/sis/cuddBddPort.c
+ delete mode 100644 Cudd/sis/cuddPwPt.c
+ delete mode 100644 Cudd/sis/st.c
+ delete mode 100644 Cudd/sis/st.h
+ delete mode 100644 Cudd/st/Makefile
+ delete mode 100644 Cudd/st/doc/stAllAbs.html
+ delete mode 100644 Cudd/st/doc/stAllDet.html
+ delete mode 100644 Cudd/st/doc/stExtAbs.html
+ delete mode 100644 Cudd/st/doc/stExtDet.html
+ delete mode 100644 Cudd/st/st.c
+ delete mode 100644 Cudd/st/st.h
+ delete mode 100644 Cudd/util/Makefile
+ delete mode 100644 Cudd/util/cpu_stats.c
+ delete mode 100644 Cudd/util/cpu_time.c
+ delete mode 100644 Cudd/util/datalimit.c
+ delete mode 100644 Cudd/util/getopt.c
+ delete mode 100644 Cudd/util/pathsearch.c
+ delete mode 100644 Cudd/util/pipefork.c
+ delete mode 100644 Cudd/util/prtime.c
+ delete mode 100644 Cudd/util/ptime.c
+ delete mode 100644 Cudd/util/restart.c
+ delete mode 100644 Cudd/util/safe_mem.c
+ delete mode 100644 Cudd/util/saveimage.c
+ delete mode 100644 Cudd/util/state.c
+ delete mode 100644 Cudd/util/strsav.c
+ delete mode 100644 Cudd/util/stub.c
+ delete mode 100644 Cudd/util/test-res.c
+ delete mode 100644 Cudd/util/test-sav.c
+ delete mode 100644 Cudd/util/texpand.c
+ delete mode 100644 Cudd/util/tmpfile.c
+ delete mode 100644 Cudd/util/util.h
+
+diff --git a/Cudd/cudd/doc/cudd.ps b/Cudd/cudd/doc/cudd.ps
+deleted file mode 100644
+index 0a12057..0000000
+--- a/Cudd/cudd/doc/cudd.ps
++++ /dev/null
+@@ -1,5036 +0,0 @@
+-%!PS-Adobe-2.0
+-%%Creator: dvips(k) 5.92b Copyright 2002 Radical Eye Software
+-%%Title: cudd.dvi
+-%%Pages: 48
+-%%PageOrder: Ascend
+-%%BoundingBox: 0 0 612 792
+-%%DocumentFonts: Times-Roman CMMI12 Times-Bold Times-Italic CMSY10 CMR10
+-%%+ CMMI10 CMMI8 Courier CMSY8 CMR8 Times-BoldItalic
+-%%EndComments
+-%DVIPSWebPage: (www.radicaleye.com)
+-%DVIPSCommandLine: dvips -o cudd.ps cudd
+-%DVIPSParameters: dpi=600, compressed
+-%DVIPSSource: TeX output 2012.02.04:1929
+-%%BeginProcSet: texc.pro
+-%!
+-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+-1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
+-1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
+-0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
+-sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
+-rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
+-gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
+-/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
+-/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
+-A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
+-get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
+-ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
+-fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
+-{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
+-chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
+-1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
+-forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+-(LaserWriter 16/600)]{A length product length le{A length product exch 0
+-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+-
+-%%EndProcSet
+-%%BeginProcSet: 8r.enc
+-% File 8r.enc as of 2002-03-12 for PSNFSS 9
+-%
+-% This is the encoding vector for Type1 and TrueType fonts to be used
+-% with TeX. This file is part of the PSNFSS bundle, version 9
+-%
+-% Authors: S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry, W. Schmidt
+-%
+-% Idea is to have all the characters normally included in Type 1 fonts
+-% available for typesetting. This is effectively the characters in Adobe
+-% Standard Encoding + ISO Latin 1 + extra characters from Lucida + Euro.
+-%
+-% Character code assignments were made as follows:
+-%
+-% (1) the Windows ANSI characters are almost all in their Windows ANSI
+-% positions, because some Windows users cannot easily reencode the
+-% fonts, and it makes no difference on other systems. The only Windows
+-% ANSI characters not available are those that make no sense for
+-% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
+-% (173). quotesingle and grave are moved just because it's such an
+-% irritation not having them in TeX positions.
+-%
+-% (2) Remaining characters are assigned arbitrarily to the lower part
+-% of the range, avoiding 0, 10 and 13 in case we meet dumb software.
+-%
+-% (3) Y&Y Lucida Bright includes some extra text characters; in the
+-% hopes that other PostScript fonts, perhaps created for public
+-% consumption, will include them, they are included starting at 0x12.
+-%
+-% (4) Remaining positions left undefined are for use in (hopefully)
+-% upward-compatible revisions, if someday more characters are generally
+-% available.
+-%
+-% (5) hyphen appears twice for compatibility with both ASCII and Windows.
+-%
+-% (6) /Euro is assigned to 128, as in Windows ANSI
+-%
+-/TeXBase1Encoding [
+-% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
+- /.notdef /dotaccent /fi /fl
+- /fraction /hungarumlaut /Lslash /lslash
+- /ogonek /ring /.notdef
+- /breve /minus /.notdef
+-% These are the only two remaining unencoded characters, so may as
+-% well include them.
+- /Zcaron /zcaron
+-% 0x10
+- /caron /dotlessi
+-% (unusual TeX characters available in, e.g., Lucida Bright)
+- /dotlessj /ff /ffi /ffl
+- /.notdef /.notdef /.notdef /.notdef
+- /.notdef /.notdef /.notdef /.notdef
+- % very contentious; it's so painful not having quoteleft and quoteright
+- % at 96 and 145 that we move the things normally found there down to here.
+- /grave /quotesingle
+-% 0x20 (ASCII begins)
+- /space /exclam /quotedbl /numbersign
+- /dollar /percent /ampersand /quoteright
+- /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+-% 0x30
+- /zero /one /two /three /four /five /six /seven
+- /eight /nine /colon /semicolon /less /equal /greater /question
+-% 0x40
+- /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+-% 0x50
+- /P /Q /R /S /T /U /V /W
+- /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+-% 0x60
+- /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+-% 0x70
+- /p /q /r /s /t /u /v /w
+- /x /y /z /braceleft /bar /braceright /asciitilde
+- /.notdef % rubout; ASCII ends
+-% 0x80
+- /Euro /.notdef /quotesinglbase /florin
+- /quotedblbase /ellipsis /dagger /daggerdbl
+- /circumflex /perthousand /Scaron /guilsinglleft
+- /OE /.notdef /.notdef /.notdef
+-% 0x90
+- /.notdef /.notdef /.notdef /quotedblleft
+- /quotedblright /bullet /endash /emdash
+- /tilde /trademark /scaron /guilsinglright
+- /oe /.notdef /.notdef /Ydieresis
+-% 0xA0
+- /.notdef % nobreakspace
+- /exclamdown /cent /sterling
+- /currency /yen /brokenbar /section
+- /dieresis /copyright /ordfeminine /guillemotleft
+- /logicalnot
+- /hyphen % Y&Y (also at 45); Windows' softhyphen
+- /registered
+- /macron
+-% 0xD0
+- /degree /plusminus /twosuperior /threesuperior
+- /acute /mu /paragraph /periodcentered
+- /cedilla /onesuperior /ordmasculine /guillemotright
+- /onequarter /onehalf /threequarters /questiondown
+-% 0xC0
+- /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+- /Egrave /Eacute /Ecircumflex /Edieresis
+- /Igrave /Iacute /Icircumflex /Idieresis
+-% 0xD0
+- /Eth /Ntilde /Ograve /Oacute
+- /Ocircumflex /Otilde /Odieresis /multiply
+- /Oslash /Ugrave /Uacute /Ucircumflex
+- /Udieresis /Yacute /Thorn /germandbls
+-% 0xE0
+- /agrave /aacute /acircumflex /atilde
+- /adieresis /aring /ae /ccedilla
+- /egrave /eacute /ecircumflex /edieresis
+- /igrave /iacute /icircumflex /idieresis
+-% 0xF0
+- /eth /ntilde /ograve /oacute
+- /ocircumflex /otilde /odieresis /divide
+- /oslash /ugrave /uacute /ucircumflex
+- /udieresis /yacute /thorn /ydieresis
+-] def
+-
+-%%EndProcSet
+-%%BeginProcSet: texps.pro
+-%!
+-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0
+-ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{
+-pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get
+-div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type
+-/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end
+-definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup
+-sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll
+-mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[
+-exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if}
+-forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def
+-end
+-
+-%%EndProcSet
+-%%BeginProcSet: special.pro
+-%!
+-TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+-/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+-/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+-/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+-/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+-X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+-/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+-/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+-{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+-maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+-/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+-atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+-itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+-transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+-curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+-pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+-if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+--1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+-get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+-yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+-neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+-noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+-90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+-neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+-1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+-2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+--1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+-TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+-Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+-}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+-save N userdict maxlength dict begin/magscale true def normalscale
+-currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+-/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+-psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+-psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+-TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def
+- at MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll
+-newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto
+-closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N
+-/@beginspecial{SDict begin/SpecialSave save N gsave normalscale
+-currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}
+-N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs
+-neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate
+-rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse
+-scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg
+-lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx
+-ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N
+-/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{
+-pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave
+-restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B
+-/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1
+-setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY
+-moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix
+-matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc
+-savematrix setmatrix}N end
+-
+-%%EndProcSet
+-%%BeginProcSet: color.pro
+-%!
+-TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
+-setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
+-}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
+-/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
+-setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
+-/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
+-known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
+-/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
+-/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
+-setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
+-setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
+-0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
+-/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
+-setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
+-0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
+-0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
+-0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
+-/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
+-setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
+-setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
+-0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
+-/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
+-setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
+-0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
+-0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
+-0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
+-/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
+-setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
+-/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
+-0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
+-0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
+-0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
+-setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
+-0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
+-/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
+-setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
+-0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
+-1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
+-/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
+-setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
+-0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
+-DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
+-setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
+-setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
+-setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
+-
+-%%EndProcSet
+-%%BeginFont: CMR8
+-%!PS-AdobeFont-1.1: CMR8 1.0
+-%%CreationDate: 1991 Aug 20 16:39:40
+-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+-11 dict begin
+-/FontInfo 7 dict dup begin
+-/version (1.0) readonly def
+-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+-/FullName (CMR8) readonly def
+-/FamilyName (Computer Modern) readonly def
+-/Weight (Medium) readonly def
+-/ItalicAngle 0 def
+-/isFixedPitch false def
+-end readonly def
+-/FontName /CMR8 def
+-/PaintType 0 def
+-/FontType 1 def
+-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+-/Encoding 256 array
+-0 1 255 {1 index exch /.notdef put} for
+-dup 48 /zero put
+-dup 49 /one put
+-dup 50 /two put
+-dup 51 /three put
+-readonly def
+-/FontBBox{-36 -250 1070 750}readonly def
+-/UniqueID 5000791 def
+-currentdict end
+-currentfile eexec
+-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+-2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169CD5365D6ECED5D768D66D6C
+-68618B8C482B341F8CA38E9BB9BAFCFAAD9C2F3FD033B62690986ED43D9C9361
+-3645B82392D5CAE11A7CB49D7E2E82DCD485CBA1772CE422BB1D7283AD675B65
+-48A7EA0069A883EC1DAA3E1F9ECE7586D6CF0A128CD557C7E5D7AA3EA97EBAD3
+-9619D1BFCF4A6D64768741EDEA0A5B0EFBBF347CDCBE2E03D756967A16B613DB
+-0FC45FA2A3312E0C46A5FD0466AB097C58FFEEC40601B8395E52775D0AFCD7DB
+-8AB317333110531E5C44A4CB4B5ACD571A1A60960B15E450948A5EEA14DD330F
+-EA209265DB8E1A1FC80DCD3860323FD26C113B041A88C88A21655878680A4466
+-FA10403D24BB97152A49B842C180E4D258C9D48F21D057782D90623116830BA3
+-9902B3C5F2F2DD01433B0D7099C07DBDE268D0FFED5169BCD03D48B2F058AD62
+-D8678C626DC7A3F352152C99BA963EF95F8AD11DB8B0D351210A17E4C2C55AD8
+-9EB64172935D3C20A398F3EEEEC31551966A7438EF3FEE422C6D4E05337620D5
+-ACC7B52BED984BFAAD36EF9D20748B05D07BE4414A63975125D272FAD83F76E6
+-10FFF8363014BE526D580873C5A42B70FA911EC7B86905F13AFE55EB0273F582
+-83158793B8CC296B8DE1DCCF1250FD57CB0E035C7EDA3B0092ED940D37A05493
+-2EC54E09B984FCA4AB7D2EA182BCF1263AA244B07EC0EA901C077A059F709F30
+-4384CB5FA748F2054FAD9A7A43D4EA427918BD414F766531136B60C3477C6632
+-BEFE3897B58C19276A301926C2AEF2756B367319772C9B201C49B4D935A8267B
+-041D6F1783B6AEA4DAC4F5B3507D7032AA640AAB12E343A4E9BDCF419C04A721
+-3888B25AF4E293AACED9A6BDC78E61DA1C424C6503CC1885F762BE0618B16C14
+-7386EB4C4B9B3142B9662F48CF5B55DC44261F9F0F975611120F7B9846423136
+-B3A568B97F5822B76CF10ECD4CD0C64DC55413CC2E843FB37053EAFE985A98CF
+-9E408707AB2BBD2F036B622F74397BE4BEFA06A0CC51A30C326C3654B5E548B5
+-FD5BE6BFFD05A02E81F12A94892139862012A6776D80F0B7C3E90F8E34918601
+-8A6B25676CDD71F0DBD7CF514F0363B15B6C7E62EF9BE227EB164481CC0EF812
+-8B8B5FDD0FA1815E629760FDEAA026094F96B05BE963194E99D2E5444F62C26B
+-1BBAD76672EEC98948B7D9C81CAEBBB7C9CBA16CBDFC595D7AD3F92651B63D50
+-CC7E92F4E96C4DE2721AFEE94FBFE5843979D30068BC1F11E5374F6F6EF4586C
+-AB699727770D97A8681D2E75E907027302832D0834FD7BB48EE89D7F0A39E263
+-C34F09602BDEF782A7BCF182CB6D8603E31EF82E669B294BBE9B5AD29CD12FA9
+-DD1CAAC8AB4DBB663F8C50472C9D7CF3CFB9AE712D83B306991B89F75A87A6C8
+-CF7901236E9EE16204F26C79404A6EB87AC532A29C47C9455D0F3DCCA48E2B26
+-1240EB3CD115047EC6C4E3F5B3680127DF7509CD26BEF7C542D0332B2A2F680F
+-ECAC3A2C958DC3F17576DEBDB9478343EE622DF8C8F7C488ED049690697A6B1D
+-BAFF45A781099100DD7B0A0598A4A93E088E8B44198EB0DE3761F141AEF45C92
+-1A71F32189FEFCC7978570BEBD53305BFB9B68829998196345770721ABAE7410
+-50A99976446ABBBF31130CE1A85B4F37B85BBCCD2E31C072B96F005E7506BA7B
+-6AF46E32CEAB608411DACC4D93ECE77BC4C4282DE8FC4189C8661A93F0A3C0CC
+-B09077804522B3675B87F45E9E0AB99AFC3F6A979FB2030642DB80CBB4A92BA9
+-8FEADF534577FE567839008FEB0F6CD811ACB7CEDCEFC98807636A24B6EDAD43
+-83CE013C9E660F3F3DB842554D04B5D8277640A931ED4CC700F8BCFF901775C6
+-DBE1A76EE8ADC5601FF1DC4EC663E3E960064875BBCA81F5B82118A055D48C9D
+-C2DC4C00BB1B42B6C3D00354040080ACAD10EE6A464E5F62E5AC4236FF2D2A6A
+-BBFE55CD6E55990D15C6A13229F0AB706D61C746EF99E2AF9365
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-cleartomark
+-%%EndFont
+-%%BeginFont: CMSY8
+-%!PS-AdobeFont-1.1: CMSY8 1.0
+-%%CreationDate: 1991 Aug 15 07:22:10
+-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+-11 dict begin
+-/FontInfo 7 dict dup begin
+-/version (1.0) readonly def
+-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+-/FullName (CMSY8) readonly def
+-/FamilyName (Computer Modern) readonly def
+-/Weight (Medium) readonly def
+-/ItalicAngle -14.035 def
+-/isFixedPitch false def
+-end readonly def
+-/FontName /CMSY8 def
+-/PaintType 0 def
+-/FontType 1 def
+-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+-/Encoding 256 array
+-0 1 255 {1 index exch /.notdef put} for
+-dup 0 /minus put
+-dup 48 /prime put
+-readonly def
+-/FontBBox{-30 -955 1185 779}readonly def
+-/UniqueID 5000818 def
+-currentdict end
+-currentfile eexec
+-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+-221A37D9A807DD01161779DDE7D5FC1B2109839E5B52DFBB2A7C1B5D8E7E8AA0
+-5B10EA43D6A8ED61AF5B23D49920D8F79DAB6A59062134D84AC0100187A6CD1F
+-80F5DDD9D222ACB1C23326A7656A635C4A241CCD32CBFDF8363206B8AA36E107
+-1477F5496111E055C7491002AFF272E46ECC46422F0380D093284870022523FB
+-DA1716CC4F2E2CCAD5F173FCBE6EDDB874AD255CD5E5C0F86214393FCB5F5C20
+-9C3C2BB5886E36FC3CCC21483C3AC193485A46E9D22BD7201894E4D45ADD9BF1
+-CC5CF6A5010B5654AC0BE0DA903DB563B13840BA3015F72E51E3BC80156388BA
+-F83C7D393392BCBC227771CDCB976E93302530FA3F4BEF341997D4302A48384A
+-CEFFC1559462EA5F60DC05245E8499D8E61397B2C094CEED1AF26EE15A837209
+-ECE64FEF41ABE8DDA7BE1F351CF14E07BA8FD40CEFBFC3CE7B9D4912D6FE752D
+-9CF163084E688DDCC4B5AAEDEB6E94DDDE34330BA35394A8B485E767F0F94A71
+-4532F3B89C51AC3FD1C082EF41EA489B9595B4120FDCA2F599C88F5058126CD1
+-4C7F96B4FE22BAB1A5E16F215DECBCE4186C68B6263BD5331CDC1FF9F30332A7
+-7B831255A41A642C5719272C6B5993171CA395A0D11B6376457EC30E1CDE47A4
+-9B9EE95D112C64084901B6357E881C0DEB6836B80F21E57B660388BA4F7B89EB
+-9AF7DE8AEA702FC5B765552F78058A20E424277F667A4E9955A797593CE44E19
+-A98F149CA17D6379040A1C836CA18234278DFDA205EFD55D527C7F38766D4C97
+-
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-cleartomark
+-%%EndFont
+-%%BeginFont: CMMI8
+-%!PS-AdobeFont-1.1: CMMI8 1.100
+-%%CreationDate: 1996 Jul 23 07:53:54
+-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+-11 dict begin
+-/FontInfo 7 dict dup begin
+-/version (1.100) readonly def
+-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+-/FullName (CMMI8) readonly def
+-/FamilyName (Computer Modern) readonly def
+-/Weight (Medium) readonly def
+-/ItalicAngle -14.04 def
+-/isFixedPitch false def
+-end readonly def
+-/FontName /CMMI8 def
+-/PaintType 0 def
+-/FontType 1 def
+-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+-/Encoding 256 array
+-0 1 255 {1 index exch /.notdef put} for
+-dup 110 /n put
+-readonly def
+-/FontBBox{-24 -250 1110 750}readonly def
+-/UniqueID 5087383 def
+-currentdict end
+-currentfile eexec
+-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
+-5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
+-4391C9DF440285B8FC159D0E98D4258FC57892DDF753642CD526A96ACEDA4120
+-788F22B1D09F149794E66DD1AC2C2B3BC6FEC59D626F427CD5AE9C54C7F78F62
+-C36F49B3C2E5E62AFB56DCEE87445A12A942C14AE618D1FE1B11A9CF9FAA1F32
+-617B598CE5058715EF3051E228F72F651040AD99A741F247C68007E68C84E9D1
+-D0BF99AA5D777D88A7D3CED2EA67F4AE61E8BC0495E7DA382E82DDB2B009DD63
+-532C74E3BE5EC555A014BCBB6AB31B8286D7712E0E926F8696830672B8214E9B
+-5D0740C16ADF0AFD47C4938F373575C6CA91E46D88DE24E682DEC44B57EA8AF8
+-4E57D45646073250D82C4B50CBBB0B369932618301F3D4186277103B53B3C9E6
+-DB42D6B30115F67B9D078220D5752644930643BDF9FACF684EBE13E39B65055E
+-B1BD054C324962025EC79E1D155936FE32D9F2224353F2A46C3558EF216F6BB2
+-A304BAF752BEEC36C4440B556AEFECF454BA7CBBA7537BCB10EBC21047333A89
+-8936419D857CD9F59EBA20B0A3D9BA4A0D3395336B4CDA4BA6451B6E4D1370FA
+-D9BDABB7F271BC1C6C48D9DF1E5A6FAE788F5609DE3C48D47A67097C547D9817
+-AD3A7CCE2B771843D69F860DA4059A71494281C0AD8D4BAB3F67BB6739723C04
+-AE05F9E35B2B2CB9C7874C114F57A185C8563C0DCCA93F8096384D71A2994748
+-A3C7C8B8AF54961A8838AD279441D9A5EB6C1FE26C98BD025F353124DA68A827
+-AE2AF8D25CA48031C242AA433EEEBB8ABA4B96821786C38BACB5F58C3D5DA011
+-85B385124C2B6534F3CD1866AF92009D93B97F763AA3CF46C60636D7FC1564CF
+-1DDFBC12CA37D27A79B11F2AFF2D70DBEE03CF1DFA5B864A2DC22266E4FA43DC
+-3F2CC229231F1F72874E6A74A90E8003B9AF1BFAA55C071FDDE5C94E4AE3C5BF
+-936EDFD4164624881410AB9EF0593F823D40BA7D059992104D08E41EBAD8F276
+-A84EE2C9AEBC7CCB72AA6B6E6FE52293DC7BC34C2D1B69418392608FC5920291
+-733654FA401E05F3E647B1C6AF4BECC3E802F9963344B05EC3DE8C774293CDB4
+-3F057D6F258BD341848FA7FDCFD4D1923FCAB51FA8ADAE6D9F19C1FFA6EB5E9F
+-ECF844CEC6C1320D3F00C7259EF5812526F58248C61F89A42D9C9288CA8076FA
+-77E1C950940D8D6A7D852A0D0ABEBF2EDEDCDF6DDE0C8CCAC8DA9B28207D9CF8
+-46446E1153D8D8795EE914B12349137D4BE461BCF5A6A3CF15FA5B9E91EB9B90
+-0483916D0CD40EDC29EB0B996B16462A64F3B19B57802D9AFE3F1D91D9A8553C
+-531EB8B4E975037ED620EED3020388BFE705958B1E3AD4638B9CC8644C2F4024
+-5DACD97151C3DF7A448CC3
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-cleartomark
+-%%EndFont
+-%%BeginFont: CMMI10
+-%!PS-AdobeFont-1.1: CMMI10 1.100
+-%%CreationDate: 1996 Jul 23 07:53:57
+-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+-11 dict begin
+-/FontInfo 7 dict dup begin
+-/version (1.100) readonly def
+-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+-/FullName (CMMI10) readonly def
+-/FamilyName (Computer Modern) readonly def
+-/Weight (Medium) readonly def
+-/ItalicAngle -14.04 def
+-/isFixedPitch false def
+-end readonly def
+-/FontName /CMMI10 def
+-/PaintType 0 def
+-/FontType 1 def
+-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+-/Encoding 256 array
+-0 1 255 {1 index exch /.notdef put} for
+-dup 59 /comma put
+-dup 76 /L put
+-dup 85 /U put
+-dup 102 /f put
+-dup 103 /g put
+-dup 104 /h put
+-dup 105 /i put
+-dup 110 /n put
+-dup 120 /x put
+-readonly def
+-/FontBBox{-32 -250 1048 750}readonly def
+-/UniqueID 5087385 def
+-currentdict end
+-currentfile eexec
+-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+-D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958
+-9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321
+-990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E
+-6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB
+-DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721
+-59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823
+-D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF
+-8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808
+-6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9
+-1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE
+-03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909
+-95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1
+-74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2
+-3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8
+-47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19
+-AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8
+-42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8
+-40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837
+-B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53
+-95601766758C197F327101A9C9BF396ED625E27A7791ADF7474135C50F2F927A
+-5B5E332A003F858399565E4C02931D19AC2866CEFAB2288ACA215F2B7BE37156
+-89009B14D623E0A872AC17AA52D29EA6E8D725A05A300AAD937745F61803544E
+-978846734C4C8FEA576A5D77903920CF4531C051776BBDF99ABD8C09849E586C
+-ED0E1D51A0047D2FF9097EA10DE0E397D69BC302D7A949CC435EE46C508FB6D6
+-DAA66F2EDD3A6881D50A440A702018A99102DE5039F7CA1EF9F4C36D5C66AA4C
+-97C81079C961F48C6EC9E1C26E3740945443C9A262373410B96043CF52CA074A
+-D18DAFCE0ADE27C2C4A109C21C1B2A8E2F9DF1F14ED57195984F76A5B4213F69
+-53C017777402DB63066D528BD2C690959CFE72FAE34C98CA3E797C3CE2B8544E
+-143B2BB6D7ED137528BC8BB4AB4BB49A295C43C96E92D2D4AA0157DD37CFE2DA
+-921259A6876045871A994E1316BD39142279BEED0AFCAE7F8D847650D409C934
+-D8D16486AC153C8C6F5849270F71DBB5A744A258D5EF64F8819025F49B5A3D29
+-889F9CE6CAFB1A44F503559B63B9BEB727C9FD6F99F1E618DEC55C349E1D24BA
+-3E4599AC645E89E2852D0E152DC94465071B3835EDC93C2924778DFAC1664734
+-98F5583DDF83315203AAF78897CE1768F22083276F6D29D07C72CE4B3FF6F293
+-28DC673F80626F8654E4FCF6A0263C1DB7AC8F63790729256F9B969908F3A176
+-05D7AD6ED5F8E8AF79890282AE7B4C55AEE6526920983A72C5876DE620CF4E3A
+-7D1376FEF0B296F62C5C29D8D9BEE6B622AAFB66335001F92DAA1E119CFD5101
+-08FCB0F238A64FCF56A62C7C08C0871C8D15DB0374C53D39CCD8B1058BAA3FAF
+-F9785E2D17FCE278B5179EB8AE77B6F1ADBDA6284B0658A07D91B044ABD82EE8
+-C9F1763A966496728615DD1EBAB159D7CF6168DBB2582815DA6733785828DF75
+-D6848392D3E479E5527DFC967F36D3D66CA6FE01FC6FA9BF6AD401051013DE6A
+-C69971B1271DFE6ED6A8B53B394CE11FEE75CB1F9AB278A74FD2765FFA3773F9
+-F61B5B11C462CE38287536B946E7BD1F8AE0C8F5804B04AFDBB624A2489DAE07
+-903F90656C96D1E1C2101FBB9B48C66BFED1B572CEEA04A16AAFE734E754251F
+-EC12CAF4D56AA5A936D40CBB44E76FF4780B8594967138A1E3092254DB2D4C2C
+-CDECE9AF76FAF9B3DED9847C79C1723CDD328E4B0B15566C6CD8490ADFEB9169
+-418B34C36EF4FB43EF7FB5F1BFE7F795E85FEBA443DCABD076418BA94DAE6505
+-D4E6075D792C0C1A6BDFF56326FBA965DFB9519F072BBB8CA486D4C9AA6FCF62
+-3CDACB91B41C69837DB4E6DACD0AC582A044D526E340343720AED1742DC4E52F
+-67579B3A625C4B5E508BCFF3DA667DAE69B25F9D50996033797C42D7CBD85F99
+-AB2CDCF739E3B2C6AEA3C315AC2D0F0D48B293B1397A9C1E304260CD8D0C3497
+-27385284419D6B3BFCD701C367149332FA1A58EAA22A193C24375D40482129C0
+-55BD4147CF597B64FD1F3F3545A03235B6918790D39B7473FE8AE5ED218500D2
+-1F6B8EE7632762D06578544C16D9D3866B4A8295904C95CE224E15044770C7B8
+-F7408C215A0FA286CAE554D3C51D6BF20B33F4890784816A1AD1B202C381DA82
+-01CBEFC0B043181DCD849BCCF035C87708B6E3A9CE4D68B61E35B9CF54123A30
+-0939400BA136E6CD4D30F42259ADDAAC17D613E6998BBE4F37C414F397D802AF
+-83EB5B4247C648B834C3F59C566F252EACE08706E410299F72BEAB9A49274E5E
+-74F834B4A5983F4C00932124B5D9DFA54E5EF7C1CB9A97C29B49BBCE6F00AE13
+-E9CB172D2033E719841728DAB47C858BA8C0687B844B7FC5C2513F5A88A9E5DF
+-436A28193F1C9A42F840634CCB6681EFC5249080769728E330520A5D6D50164C
+-0C9A8456535BC89E45BDA70C62CC42C5E750470EFAE512202D95E5BAF604352E
+-8001E29161B7D6FB6CAD331E42E636021B2854923894715B496038F4AEDBD1E9
+-12CC6F15B440C87B8633C43B5D696AFE0C8ACDDC98503A6B3F8685987D178FD6
+-E3E8DC9763CCB10ED3D8E065CF3354496D648053B2F0B7B5596528AA91EB6F7D
+-F7E856ECB8DDB8523CAB5CB6349827450C58A3B007CB9928AF1E98DF77D84B4A
+-A97B85CEC023289C82A2189AB947C56BAA64911653C2FFFB4D546F3A08821136
+-14E904163C9F1CBC64BCC368CBE5764423BB308364B8CA907F38687A153BB01F
+-6BAE773B21DB3FFE55F9523A52C6286FA2C090F4B8EA11A7C793AC55AAEDDF0C
+-5E9219B11A940F1ACDE2E124F42F040C9B29D8A56099B0592E1FC33C42B5BAF5
+-5CD5E0997B66D81132C4DEE5A9B34AB0761164E23B1418D9AF2EF466EE648BF7
+-B550A0559B37AA4EEFE096D5B7B65A891FBB0364CDB8FAC49A7011152CA04B0C
+-4A91E982CF0E718DBDCAE97F90BC2D22EEA14CDE4003702563D5E02D758A3839
+-4A4DDC3DF05069E1F23CB5B5ED68DBFDD1E26FF41967D5158056D86DE8BFAE94
+-407645A693988C796417224C91661505FA3983863E2563E4228A5E76BA5E72B9
+-10C08AF95D0C4C29E812EF8B3E2CD401562C1C7A35E49054D492DE9712D89C49
+-FCB524E3D479A05DABA3D774E30F247A9287407468809AB93E53C3F9B5F5A6D7
+-74F447C46BDA6AC95BBFF5A39268259C1E4A4C16FBE30C2DAD58C1D3F9DF5887
+-CFE667D2E29DDBA05CE796355F0E1EC3A10FA0421074651E0B584FBD4A04D4C1
+-3B4E8E729EB0F7676958F4A3677504132AEAF0DF00F781E4CC4E055917D0F363
+-327C3C8E48E75675D425B02D4387269FC8487A325155B0335D
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-cleartomark
+-%%EndFont
+-%%BeginFont: CMR10
+-%!PS-AdobeFont-1.1: CMR10 1.00B
+-%%CreationDate: 1992 Feb 19 19:54:52
+-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+-11 dict begin
+-/FontInfo 7 dict dup begin
+-/version (1.00B) readonly def
+-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+-/FullName (CMR10) readonly def
+-/FamilyName (Computer Modern) readonly def
+-/Weight (Medium) readonly def
+-/ItalicAngle 0 def
+-/isFixedPitch false def
+-end readonly def
+-/FontName /CMR10 def
+-/PaintType 0 def
+-/FontType 1 def
+-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+-/Encoding 256 array
+-0 1 255 {1 index exch /.notdef put} for
+-dup 40 /parenleft put
+-dup 41 /parenright put
+-dup 43 /plus put
+-dup 48 /zero put
+-dup 49 /one put
+-dup 50 /two put
+-dup 53 /five put
+-dup 61 /equal put
+-readonly def
+-/FontBBox{-251 -250 1009 969}readonly def
+-/UniqueID 5000793 def
+-currentdict end
+-currentfile eexec
+-D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891
+-016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171
+-9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F
+-D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758
+-469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8
+-2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4
+-87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F
+-D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0
+-92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C
+-295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75
+-409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C
+-4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF
+-2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E
+-0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E
+-B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008
+-24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B
+-43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF
+-D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575
+-5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC
+-96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3
+-7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC390E75D51F36C3E61E
+-E84B5AD036ADADEBD4F8D399AA559B34270D370DEDF077D1D49253F313C333CB
+-F22FD740EDE076FE3383503F159888E77132A06528CEBA5BB0E57C07D36B73D7
+-C81B71200D95D73A1AD33BBA5CA3E34B94447EAB8D27625CBFF13B56F87A9B74
+-4B52A09BAB0AABD5E398B1E5E9868BC080EFC7ECBDA4D6817C3255A51A814A04
+-0839172E2CCECB4F6E7B5B6B3B61D5858256AD27D93969EBB34C7EE68BF805D0
+-39CA6AC7DECCD1A395E7BA297AB0E97B3290EDAED775EAB0D7D553F222A3B014
+-FFA358EE448BBB24E1B44CE0BB474DFA01B0F4C4964248444FCA4DDEA8FDA9B8
+-82F96DCBEF94CAC9C8F48922899CB1E7D70F650E6471E5408C44554E72599D97
+-BC1D32360ECFB378192605E726A3DDA7E5B02736CEB7BE8A5C27AE952F4946D0
+-1DD1D65C1D50D0317984B781D64B6075D35EC1E3507FD4FE2E7097A0EE116EEC
+-3497D2D84B19F68EBF7125FB02920466AE4FE25A3C3068A83A513556D05359A3
+-93B6C6929BA47044787EEBA3A38E8266CF1D13DB69779644DF8AFE2C2C5C81F9
+-75CBC9CA07E6CB70211CA62FD7CF596132333970E5233AAFBF984EC110664810
+-AEFBADCE663CADF91D36D1587C5D7E7F63E3A674856AD7CDB99CD276D3659ED0
+-CA0FDC17251E69BA7F2F3AC57257831C31AFBB0DADF44F7E6EF84D63C03E75FF
+-886FFDAF8153EA8E0779E46935AB0AEFC84AC2061291D39E5F67FB75BEA48EDA
+-030512CDB14B16D466CFBC58D3764B83AF5C00D05A3F052F53BBE4E1417773CA
+-BDBEAC50BB7BFF981255BDA6650870E4D67BCB80A63BA050F2650934CB6E742B
+-B2B2A115C1F9827C979E8F2E92C0A1F428288643C8A27B7105587366E1BFF1FB
+-056DE92CAD4A7F391A483DE4E9930E8C5BA9B215F1E3FA4798A1740A9B72810A
+-44CD1D1ECAC8ED7BA3655C4EEF6BF28A2B0B23B0BF783A4FBDDB1246B5EEA601
+-6440F98C0A3B6ED360561479EA83990A78A0F4608698B30FE6476AED9349D11F
+-FB467D3C19D7A3539B8A2DA0C54454A231B87FB441A1BE6893E0F67081E8FF09
+-FC20412C452D8227D4BA7665EA8F14A1987845CF8570EDD926F4EF5F2D85DB99
+-736D7A939D4313F589033FA135D6366EB8B63C026357360A9E8717656ADABA76
+-11B9D672B7D57F1422CAEA295A774CB1F6BEAE51A7A9F7EACF6F22CC6412F1D6
+-9DDF884EB94F91B5F301039EE962C51F7FCEF8319CE80F46A7E3187EE60342DB
+-4057C2374CF68AAD30B5979B24D41ED8A803A1E6EA845D7E7675031A2D4257D8
+-4BE91A75006673CE3C24AA4C4138EED6DE5147FD16049BC523D54F26BF951AAC
+-85157DB39E8B38798267AE2E5266331CFAA0E4D18D2F5C50277BE056498E569E
+-90AB0A7127F94F0EEC3FC2DC7BF421A2A855318646BACC78EC03D14CC41AB9CA
+-61649659F81614F8FA9E052F37445DBAF2B0873A06015E16A268544FB047AD0A
+-E9EF324844E8CA272D00944D54B691CA137E1CF59B69F59D5F9A40EEA081C9EC
+-6AD88DB832E588F5AACA900198105A8D59C215DCD387B32FE34E9B8476AB5C7A
+-B739EEE6840ACBFDC79501A04FFB2A57D3A4D3D181D68F074DFB0E828C41FBE3
+-E7D0F2A7CE0AC1C7ED09FD9C6E085C89E8BC46BA83A8CED54EDB6EDE1B55B349
+-84C37F33BB71994A8EF29050A902448E21CA0B2B5E9DDCF43ACBB79CC841E7EA
+-5D8BA0D8C18DDFB3B72559BF6251A5F026FAEB035509D20058FEC5FDB1B7E329
+-3E299B4FBDF2BD3A5D27035BB8732C3688C3C203D1664522CEBC8BCAC7D4E643
+-6490E8CAE79FB51F9285A64099719EA841CD4710392D94660920608397214CEA
+-588A9CFC233DA75C7C8F381ECEA4065F431122D472D333B2E260DB32F5CCCB15
+-56BB953DEC3B6E451B212ABBE079888B73C48744CF5A9C1DCB47C423C647A94F
+-2B4358B020B2C5FDF1D4B7BE081BC0F4EA86359DFE9BDCC1CBDA475618A71ED4
+-F61834FCC9DAA616C7C8D2407333ECE57AD5F5F43FD077EB12C2310BF7EB1EFC
+-1EAEE06F0891DEFD32AF69082D203207524CA6DC8005C22C1C1CE2C6CBED42B3
+-122148A0A6BAFC0DEEEC37594B68494BB5EF16E510C1CD4BF3F6597F98E5362C
+-544F51DC368425AD6A867D1E6E9AB208C77982536D56581A539597DC172F1D09
+-BF027427518C4CCD96BD4321DD8FF54C8D034F66F32F3A2DDFA05E33E5C5408B
+-8C8511FE0E8F52F38475B84E2A2F5F7B09F8F92D8E1DE2754E683A39EE71BD78
+-EFFA9E0804386F6B98CB37112C4A8844C8E2F26C8920CD18089BE16D20922DD4
+-AF2EFCE40BCFFB79A001E1DFF89AC67B02FFB09FD38354B57A5FAD9BA3640064
+-E4CB7CFC355B5384699A57E86513CA2F89B938688A3F42A6FDBC6E92D50C050E
+-B96AFCE7691A96AEC83213FC00BD81EA3895
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-cleartomark
+-%%EndFont
+-%%BeginFont: CMSY10
+-%!PS-AdobeFont-1.1: CMSY10 1.0
+-%%CreationDate: 1991 Aug 15 07:20:57
+-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+-11 dict begin
+-/FontInfo 7 dict dup begin
+-/version (1.0) readonly def
+-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+-/FullName (CMSY10) readonly def
+-/FamilyName (Computer Modern) readonly def
+-/Weight (Medium) readonly def
+-/ItalicAngle -14.035 def
+-/isFixedPitch false def
+-end readonly def
+-/FontName /CMSY10 def
+-/PaintType 0 def
+-/FontType 1 def
+-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+-/Encoding 256 array
+-0 1 255 {1 index exch /.notdef put} for
+-dup 1 /periodcentered put
+-dup 15 /bullet put
+-dup 102 /braceleft put
+-dup 103 /braceright put
+-readonly def
+-/FontBBox{-29 -960 1116 775}readonly def
+-/UniqueID 5000820 def
+-currentdict end
+-currentfile eexec
+-D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964
+-7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4
+-A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85
+-E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A
+-221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A
+-27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF
+-5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09
+-0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730
+-DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A
+-71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09
+-4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C
+-515DB70A8D4F6146FE068DC1E5DE8BC57030ACE57A0A31C99BEDB251A0ECAD78
+-253AB3339E847FBB1AF693606A973F6ECD887C325CA59C6A4A9AC48AF5551D10
+-EE26B8C4DA13F670D3F0C09187B9AB37F2BA6A32F8D363393D22215650EEE7F8
+-DFB1378390C44F36098EA2DA6CB943DACFB8AECD62E46F120BE7A15C19200094
+-7975CA278BAF5E155531F90FCBFE67D2AC15BA6E3B15FEF09F697956F198D111
+-16292151DECACDAF2B2CF42B82DE6D4515735744887745770F8D8656BAEEFC04
+-2F6A832F466D4244F1F9998BF49A413F094108FC90F586AEB324888BD885F2A1
+-C749504E6DCB10F6A2B797826939AFA46BD208A268FB4C6635264B2B39F6E11E
+-34ED5B3D02E6C9178BFE61AE0A0B6B789E394F8A33730EC5E4484F2D962268F5
+-8FD36EAD6CF68C7120E82FD8B2EA91095227CFF985054557361FD9B1E8FACB8C
+-A17AD35513D4D69B5D52470A6B4796299442430E66AAB39A574CF4C4D0838C52
+-B675FB04C646FE52C599EA039302B200CEA102986E6549225D22F30455B7947B
+-5DCF0190B5296E12FA026272B1D2076B630CABB8F71589ECB69B95486A650A09
+-05D11C00F0909A7228A107C7D27074FC6B5380FB3534816E122D65369D70C68E
+-98E1951DA9756B3CD665F378B661506661175A89D37889CDB07D1692988875EE
+-878DC0771EF29DDB382287584FE12E47FD7CEE6C130E2D2B3028C8C54B83C977
+-26845C0960D62A50B290605368BE2568340524244ABCEE470B683E92456DEE76
+-228DCCBDBC688458DF63F2C1E4D8BA46657CB79B9E28179AD2459603874FC200
+-CAB2ABDBD725DB89EB7E7C5DFE03826FC7EA65F57CF87E382A976D70F44596B5
+-53C6DC34FE7F2B295D67AA8A550F1DF1D040237352D42F14D1D0E7A23318E53B
+-BA0958CC11E47508EE8D9DCAB8116452978F0963222D14739F8E890A39AB41BC
+-B66B92570A18
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-cleartomark
+-%%EndFont
+-%%BeginFont: CMMI12
+-%!PS-AdobeFont-1.1: CMMI12 1.100
+-%%CreationDate: 1996 Jul 27 08:57:55
+-% Copyright (C) 1997 American Mathematical Society. All Rights Reserved.
+-11 dict begin
+-/FontInfo 7 dict dup begin
+-/version (1.100) readonly def
+-/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def
+-/FullName (CMMI12) readonly def
+-/FamilyName (Computer Modern) readonly def
+-/Weight (Medium) readonly def
+-/ItalicAngle -14.04 def
+-/isFixedPitch false def
+-end readonly def
+-/FontName /CMMI12 def
+-/PaintType 0 def
+-/FontType 1 def
+-/FontMatrix [0.001 0 0 0.001 0 0] readonly def
+-/Encoding 256 array
+-0 1 255 {1 index exch /.notdef put} for
+-dup 60 /less put
+-dup 62 /greater put
+-readonly def
+-/FontBBox{-30 -250 1026 750}readonly def
+-/UniqueID 5087386 def
+-currentdict end
+-currentfile eexec
+-D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE
+-3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B
+-532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470
+-B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B
+-986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE
+-D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5
+-5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC
+-4391C9DF440285B8FC159D0E98D4258FC57892DCC57F7903449E07914FBE9E67
+-3C15C2153C061EB541F66C11E7EE77D5D77C0B11E1AC55101DA976CCACAB6993
+-EED1406FBB7FF30EAC9E90B90B2AF4EC7C273CA32F11A5C1426FF641B4A2FB2F
+-4E68635C93DB835737567FAF8471CBC05078DCD4E40E25A2F4E5AF46C234CF59
+-2A1CE8F39E1BA1B2A594355637E474167EAD4D97D51AF0A899B44387E1FD933A
+-323AFDA6BA740534A510B4705C0A15647AFBF3E53A82BF320DD96753639BE49C
+-2F79A1988863EF977B800C9DB5B42039C23EB86953713F730E03EA22FF7BB2C1
+-D97D33FD77B1BDCC2A60B12CF7805CFC90C5B914C0F30A673DF9587F93E47CEA
+-5932DD1930560C4F0D97547BCD805D6D854455B13A4D7382A22F562D7C55041F
+-0FD294BDAA1834820F894265A667E5C97D95FF152531EF97258F56374502865D
+-A1E7C0C5FB7C6FB7D3C43FEB3431095A59FBF6F61CEC6D6DEE09F4EB0FD70D77
+-2A8B0A4984C6120293F6B947944BE23259F6EB64303D627353163B6505FC8A60
+-00681F7A3968B6CBB49E0420A691258F5E7B07B417157803FCBE9B9FB1F80FD8
+-CA0DA1186446DD565542BCCC7D339A1EB34C7F49246E8D72E987EB477C6DB757
+-99AF86CEBCD7605C487A00CD2CD093098182DC57B20D78ECE0BECF3A0BF88EBA
+-C866DB19F34BBBED6634AFC0F08D2AFB2A92578A6F8B4ADCD6594737FF6EED7D
+-5B536DA9E3E2CADB40DB7C600EA4D100D33C3B92B1CF857E012C4EB370BA8295
+-55B50047CD58E912E67E22C1B92F41D0BEE742201DF198F3766AE35EA71D8195
+-A8C94D661C40D718CB09497485FAA34204229AECFE644C93FFDA54C789E4F751
+-3D2519F7CB9E79B2ABE3101DF2EBFAD375469CDC687FB3DC2833EDC0F946B41F
+-F28D72FFF2A9B8B0D76DC542537612E2BE0F3FB9601C897386359C55E867A547
+-F872005F5C56C6EC5E9685E03D7A82653BE8B69741C4DF332AEEB2AA450B23F3
+-EABD5ED060606CC7DB1762632EC3C6C4A66ADAF61A97D949DEA5156B4CF34765
+-67AC3F10AE17199A710A882D47979F9D41AA2CB794648BE47479F0B00E18BF04
+-923F54CEC1214BAFA39BB65ECB013875899E9901B7882D16D2E2C97AD3353668
+-A6070081E4DC627AF9192599F5876369908FBDFA11E8D6CB2E83896E9C897CEC
+-FD1D25651D66A333AF531FF74E1B0DEB1E3D1B5B7D3FB9D1C8BF60517B31C8D2
+-1C264F44BC9AF3D9BA5280D1618EED96C11ED24F789FAA263394C658DFCA8DE9
+-D47D9E188E212F9EC1DCF449DFDAB8437FAB9EA9AF01AE1714E8F932855182
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-0000000000000000000000000000000000000000000000000000000000000000
+-cleartomark
+-%%EndFont
+-TeXDict begin 40258431 52099146 1000 600 600 (cudd.dvi)
+- at start /Fa 137[40 51 1[35 35 8[25 2[30 40 45 40 16[61
+-13[66 61 67[{ TeXBase1Encoding ReEncodeFont }12 90.9091
+-/Times-BoldItalic rf /Fb 136[50 7[37 2[21 108[{
+- TeXBase1Encoding ReEncodeFont }3 74.7198 /Times-Italic
+-rf /Fc 204[35 35 35 35 48[{}4 66.4176 /CMR8 rf /Fd 207[19
+-47[55{}2 66.4176 /CMSY8 rf /Fe 133[33 37 37 54 37 37
+-21 29 25 1[37 37 37 58 21 37 1[21 37 37 25 33 37 33 37
+-33 9[71 54 54 46 11[54 2[46 54 50 7[21 21 10[21 19 25
+-19 41[42 2[{ TeXBase1Encoding ReEncodeFont }39 74.7198
+-/Times-Roman rf /Ff 201[25 25 25 25 25 25 49[{
+- TeXBase1Encoding ReEncodeFont }6 49.8132 /Times-Roman
+-rf /Fg 201[33 33 33 33 33 33 49[{ TeXBase1Encoding ReEncodeFont }6
+-66.4176 /Times-Roman rf /Fh 130[55 55 55 55 55 55 55
+-55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55
+-55 55 55 55 1[55 1[55 55 55 55 1[55 1[55 55 55 55 55
+-55 55 55 55 55 55 2[55 55 55 55 55 55 55 55 55 55 55
+-55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55
+-55 55 55 55 55 2[55 1[55 55 55 33[{ TeXBase1Encoding ReEncodeFont }84
+-90.9091 /Courier rf /Fi 133[44 50 1[72 50 55 33 39 44
+-55 55 50 55 83 28 55 1[28 55 50 33 44 55 44 55 50 6[66
+-2[100 72 72 66 55 72 1[61 78 1[94 66 78 1[39 78 78 61
+-1[72 72 66 72 7[50 50 50 50 50 50 50 50 50 50 28 25 46[{
+- TeXBase1Encoding ReEncodeFont }56 99.6264 /Times-Bold
+-rf /Fj 145[43 110[{}1 66.4176 /CMMI8 rf /Fk 135[52 9[55
+-4[31 52 43 45 16[62 8[62 16[25 59[{}9 90.9091 /CMMI10
+-rf /Fl 194[71 7[45 2[45 45 45 4[71 1[35 35 40[{}8 90.9091
+-/CMR10 rf /Fm 152[45 45 86[45 13[25 1[{}4 90.9091 /CMSY10
+-rf /Fn 133[35 40 40 61 40 45 25 35 35 45 45 45 45 66
+-25 40 25 25 45 45 25 40 45 40 45 45 6[51 1[56 76 56 66
+-51 45 56 66 56 66 61 76 51 61 40 30 66 66 56 56 66 61
+-56 56 7[45 1[45 3[45 45 45 2[23 30 3[30 30 30 35[45 45
+-2[{ TeXBase1Encoding ReEncodeFont }63 90.9091 /Times-Italic
+-rf /Fo 87[30 16[91 45 1[40 40 24[40 45 45 66 45 45 25
+-35 30 45 45 45 45 71 25 45 25 25 45 45 30 40 45 40 45
+-40 3[30 1[30 56 66 66 86 66 66 56 51 61 66 51 66 66 81
+-56 66 35 30 66 66 51 56 66 61 61 66 5[25 25 45 45 45
+-45 45 45 45 45 45 45 25 23 30 23 51 1[30 30 30 1[76 33[51
+-51 2[{ TeXBase1Encoding ReEncodeFont }82 90.9091 /Times-Roman
+-rf /Fp 105[45 27[40 45 45 66 45 51 30 35 40 1[51 45 51
+-76 25 51 1[25 51 45 30 40 51 40 51 45 6[61 66 66 91 66
+-66 61 51 66 1[56 71 66 86 61 2[35 71 71 56 61 66 66 61
+-66 5[30 30 1[45 1[45 45 45 45 45 45 45 1[23 1[23 52 3[30
+-36[51 2[{ TeXBase1Encoding ReEncodeFont }63 90.9091 /Times-Bold
+-rf /Fq 135[60 86 1[66 40 47 53 2[60 66 100 33 66 1[33
+-66 60 40 53 66 53 1[60 11[86 80 1[86 1[73 2[113 3[47
+-93 93 2[86 86 1[86 10[60 60 60 60 60 60 5[68 3[40 39[{
+- TeXBase1Encoding ReEncodeFont }38 119.552 /Times-Bold
+-rf /Fr 193[76 1[76 60[{}2 99.6264 /CMMI12 rf /Fs 133[44
+-50 2[50 50 28 39 33 1[50 50 50 78 28 2[28 1[50 33 44
+-50 44 50 44 11[72 1[55 12[55 61 72 66 66 1[92 11[50 1[50
+-50 50 1[25 1[25 44[{ TeXBase1Encoding ReEncodeFont }34
+-99.6264 /Times-Roman rf /Ft 140[56 48 2[72 72 112 40
+-72 1[40 1[72 1[64 1[64 1[64 11[104 2[96 1[80 11[104 96
+-8[40 4[72 2[72 1[72 1[36 46[{ TeXBase1Encoding ReEncodeFont }22
+-143.462 /Times-Roman rf end
+-%%EndProlog
+-%%BeginSetup
+-%%Feature: *Resolution 600dpi
+-TeXDict begin
+- end
+-%%EndSetup
+-%%Page: 1 1
+-TeXDict begin 1 0 bop Black Black Black Black 804 937
+-a Ft(CUDD:)34 b(CU)i(Decision)d(Diagram)h(P)n(ackage)1558
+-1120 y(Release)g(2.5.0)1643 1373 y Fs(F)o(abio)25 b(Somenzi)720
+-1489 y(Department)f(of)h(Electrical,)g(Computer)l(,)f(and)h(Ener)n(gy)g
+-(Engineering)1261 1605 y(Uni)n(v)o(ersity)e(of)i(Colorado)f(at)h
+-(Boulder)1408 1721 y Fr(<)p Fs(F)o(abio at Colorado.EDU)p
+-Fr(>)1601 1923 y Fs(February)h(4,)e(2012)448 2316 y Fq(Contents)448
+-2523 y Fp(1)92 b(Intr)n(oduction)2315 b(4)448 2726 y(2)92
+-b(Ho)o(w)22 b(to)i(Get)f(CUDD)2077 b(5)585 2839 y Fo(2.1)96
+-b(The)23 b(CUDD)e(P)o(ackage)92 b(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)
+-f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p
+-Black 171 w(5)p Black 585 2952 a(2.2)96 b(CUDD)21 b(Friends)81
+-b(.)45 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+-h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 171 w(5)p
+-Black 448 3156 a Fp(3)92 b(User')m(s)23 b(Manual)2238
+-b(5)585 3269 y Fo(3.1)96 b(Compiling)24 b(and)g(Linking)53
+-b(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+-g(.)h(.)f(.)g(.)g(.)g(.)p Black 171 w(6)p Black 585 3382
+-a(3.2)96 b(Basic)23 b(Data)h(Structures)51 b(.)45 b(.)g(.)h(.)f(.)g(.)g
+-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+-p Black 171 w(6)p Black 794 3495 a(3.2.1)110 b(Nodes)41
+-b(.)46 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+-g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 171
+-w(6)p Black 794 3608 a(3.2.2)110 b(The)23 b(Manager)60
+-b(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+-g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 171 w(7)p Black 794
+-3721 a(3.2.3)110 b(Cache)46 b(.)g(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+-p Black 171 w(8)p Black 585 3833 a(3.3)96 b(Initializing)26
+-b(and)e(Shutting)h(Do)n(wn)e(a)g(DdManager)78 b(.)46
+-b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 171 w(8)p
+-Black 585 3946 a(3.4)96 b(Setting)24 b(P)o(arameters)87
+-b(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 171 w(9)p Black
+-585 4059 a(3.5)96 b(Constant)25 b(Functions)66 b(.)45
+-b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+-(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 171 w(9)p Black 794
+-4172 a(3.5.1)110 b(One,)23 b(Logic)g(Zero,)g(and)h(Arithmetic)h(Zero)41
+-b(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black
+-171 w(9)p Black 794 4285 a(3.5.2)110 b(Prede\002ned)24
+-b(Constants)51 b(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+-(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 125 w(10)p Black 794
+-4398 a(3.5.3)110 b(Background)36 b(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+-(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p
+-Black 125 w(10)p Black 794 4511 a(3.5.4)110 b(Ne)n(w)22
+-b(Constants)65 b(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+-(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 125 w(11)p
+-Black 585 4624 a(3.6)96 b(Creating)25 b(V)-10 b(ariables)28
+-b(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+-f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 125 w(11)p
+-Black 794 4737 a(3.6.1)110 b(Ne)n(w)22 b(BDD)f(and)j(ADD)e(V)-10
+-b(ariables)43 b(.)i(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+-(.)p Black 125 w(11)p Black 794 4850 a(3.6.2)110 b(Ne)n(w)22
+-b(ZDD)f(V)-10 b(ariables)81 b(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+-h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 125 w(12)p
+-Black 585 4963 a(3.7)96 b(Basic)23 b(BDD)f(Manipulation)47
+-b(.)f(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+-(.)f(.)g(.)g(.)g(.)p Black 125 w(12)p Black Black 1920
+-5225 a(1)p Black eop end
+-%%Page: 2 2
+-TeXDict begin 2 1 bop Black Black 585 573 a Fo(3.8)96
+-b(Basic)23 b(ADD)f(Manipulation)42 b(.)k(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)
+-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p
+-Black 125 w(13)p Black 585 686 a(3.9)96 b(Basic)23 b(ZDD)f
+-(Manipulation)52 b(.)46 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+-(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 125 w(14)p
+-Black 585 799 a(3.10)51 b(Con)l(v)o(erting)26 b(ADDs)c(to)h(BDDs)f(and)
+-i(V)-5 b(ice)23 b(V)-10 b(ersa)85 b(.)45 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+-(.)g(.)g(.)g(.)p Black 125 w(15)p Black 585 912 a(3.11)51
+-b(Con)l(v)o(erting)26 b(BDDs)c(to)h(ZDDs)f(and)i(V)-5
+-b(ice)23 b(V)-10 b(ersa)27 b(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+-(.)g(.)g(.)p Black 125 w(15)p Black 585 1024 a(3.12)51
+-b(V)-10 b(ariable)24 b(Reordering)i(for)e(BDDs)e(and)i(ADDs)63
+-b(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p
+-Black 125 w(16)p Black 585 1137 a(3.13)51 b(Grouping)25
+-b(V)-10 b(ariables)61 b(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p
+-Black 125 w(19)p Black 585 1250 a(3.14)51 b(V)-10 b(ariable)24
+-b(Reordering)i(for)e(ZDDs)68 b(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+-(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 125 w(20)p
+-Black 585 1363 a(3.15)51 b(K)n(eeping)24 b(Consistent)i(V)-10
+-b(ariable)24 b(Orders)h(for)e(BDDs)f(and)i(ZDDs)46 b(.)f(.)g(.)g(.)g(.)
+-p Black 125 w(21)p Black 585 1476 a(3.16)51 b(Hooks)k(.)45
+-b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g
+-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p
+-Black 125 w(21)p Black 585 1589 a(3.17)51 b(T)m(imeouts)24
+-b(and)g(Limits)82 b(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+-(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black
+-125 w(22)p Black 585 1702 a(3.18)51 b(The)23 b(SIS/VIS)f(Interf)o(ace)
+-27 b(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 125 w(22)p Black
+-794 1815 a(3.18.1)65 b(Using)24 b(the)f(CUDD)f(P)o(ackage)i(in)f(SIS)h
+-(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p
+-Black 125 w(22)p Black 585 1928 a(3.19)51 b(Writing)24
+-b(Decision)h(Diagrams)f(to)g(a)f(File)57 b(.)45 b(.)g(.)g(.)g(.)g(.)h
+-(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 125 w(24)p
+-Black 585 2041 a(3.20)51 b(Sa)n(ving)24 b(and)g(Restoring)h(BDDs)78
+-b(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
+-g(.)g(.)g(.)p Black 125 w(24)p Black 448 2245 a Fp(4)92
+-b(Pr)n(ogrammer')m(s)25 b(Manual)1870 b(24)585 2357 y
+-Fo(4.1)96 b(Compiling)24 b(and)g(Linking)53 b(.)45 b(.)h(.)f(.)g(.)g(.)
+-g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p
+-Black 125 w(24)p Black 585 2470 a(4.2)96 b(Reference)25
+-b(Counts)53 b(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+-g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black
+-125 w(26)p Black 794 2583 a(4.2.1)110 b(NULL)21 b(Return)j(V)-10
+-b(alues)42 b(.)j(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+-h(.)f(.)g(.)g(.)g(.)p Black 125 w(27)p Black 794 2696
+-a(4.2.2)110 b Fn(Cudd)p 1286 2696 28 4 v 33 w(Recur)o(siveDer)m(ef)40
+-b Fo(vs.)23 b Fn(Cudd)p 2239 2696 V 34 w(Der)m(ef)45
+-b Fo(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black
+-125 w(27)p Black 794 2809 a(4.2.3)110 b(When)23 b(Increasing)k(the)d
+-(Reference)h(Count)f(is)f(Unnecessary)90 b(.)45 b(.)p
+-Black 125 w(27)p Black 794 2922 a(4.2.4)110 b(Saturating)25
+-b(Increments)h(and)e(Decrements)91 b(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+-(.)g(.)p Black 125 w(28)p Black 585 3035 a(4.3)96 b(Complement)24
+-b(Arcs)37 b(.)45 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+-(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black
+-125 w(28)p Black 585 3148 a(4.4)96 b(The)23 b(Cache)37
+-b(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)
+-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p
+-Black 125 w(29)p Black 794 3261 a(4.4.1)110 b(Cache)24
+-b(Sizing)64 b(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+-h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 125 w(29)p
+-Black 794 3374 a(4.4.2)110 b(Local)23 b(Caches)55 b(.)45
+-b(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+-(.)h(.)f(.)g(.)g(.)g(.)p Black 125 w(30)p Black 585 3487
+-a(4.5)96 b(The)23 b(Unique)h(T)-7 b(able)47 b(.)e(.)g(.)g(.)g(.)h(.)f
+-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)
+-g(.)g(.)p Black 125 w(31)p Black 585 3599 a(4.6)96 b(Allo)n(wing)24
+-b(Asynchronous)j(Reordering)64 b(.)45 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+-(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 125 w(32)p Black 585
+-3712 a(4.7)96 b(Deb)n(ugging)28 b(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+-h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f
+-(.)g(.)g(.)g(.)p Black 125 w(33)p Black 585 3825 a(4.8)96
+-b(Gathering)25 b(and)f(Interpreting)j(Statistics)64 b(.)45
+-b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p
+-Black 125 w(34)p Black 794 3938 a(4.8.1)110 b(Non)23
+-b(Modi\002able)i(P)o(arameters)89 b(.)45 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 125 w(34)p Black
+-794 4051 a(4.8.2)110 b(Modi\002able)24 b(P)o(arameters)64
+-b(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)
+-g(.)g(.)p Black 125 w(37)p Black 794 4164 a(4.8.3)110
+-b(Extended)25 b(Statistics)g(and)f(Reporting)63 b(.)45
+-b(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black
+-125 w(39)p Black 585 4277 a(4.9)96 b(Guidelines)25 b(for)f
+-(Documentation)75 b(.)45 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+-(.)g(.)h(.)f(.)g(.)g(.)g(.)p Black 125 w(39)p Black 448
+-4481 a Fp(5)92 b(The)22 b(C++)g(Interface)2044 b(40)585
+-4594 y Fo(5.1)96 b(Compiling)24 b(and)g(Linking)53 b(.)45
+-b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h
+-(.)f(.)g(.)g(.)g(.)p Black 125 w(40)p Black 585 4707
+-a(5.2)96 b(Basic)23 b(Manipulation)58 b(.)45 b(.)g(.)g(.)h(.)f(.)g(.)g
+-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+-p Black 125 w(40)p Black 448 4910 a Fp(6)92 b(Ackno)o(wledgments)2050
+-b(41)p Black 1920 5225 a Fo(2)p Black eop end
+-%%Page: 3 3
+-TeXDict begin 3 2 bop Black Black 585 573 a Fp(Refer)n(ences)2341
+-b(41)585 777 y(Index)2539 b(43)p Black 1920 5225 a Fo(3)p
+-Black eop end
+-%%Page: 4 4
+-TeXDict begin 4 3 bop Black Black 448 573 a Fq(1)120
+-b(Intr)n(oduction)448 780 y Fo(The)28 b(CUDD)d(package)30
+-b(pro)o(vides)g(functions)g(to)e(manipulate)i(Binary)e(Decision)i
+-(Diagrams)448 893 y(\(BDDs\))35 b([5,)f(3)q(],)j(Algebraic)g(Decision)g
+-(Diagrams)e(\(ADDs\))g([1],)j(and)d(Zero-suppressed)448
+-1006 y(Binary)f(Decision)g(Diagrams)g(\(ZDDs\))e([12)q(].)56
+-b(BDDs)32 b(are)h(used)g(to)g(represent)j(switching)448
+-1119 y(functions;)i(ADDs)30 b(are)h(used)h(to)g(represent)h(function)h
+-(from)d Fm(f)p Fl(0)p Fk(;)15 b Fl(1)p Fm(g)2673 1086
+-y Fj(n)2753 1119 y Fo(to)31 b(an)g(arbitrary)i(set.)448
+-1231 y(ZDDs)20 b(represent)j(switching)g(functions)g(lik)o(e)f(BDDs;)e
+-(ho)n(we)n(v)o(er)l(,)i(the)o(y)g(are)f(much)g(more)g(ef)n(\002-)448
+-1344 y(cient)27 b(than)f(BDDs)e(when)i(the)g(functions)i(to)d(be)h
+-(represented)j(are)c(characteristic)30 b(functions)448
+-1457 y(of)h(cube)g(sets,)i(or)d(in)h(general,)i(when)e(the)g(ON-set)f
+-(of)g(the)h(function)i(to)d(be)h(represented)i(is)448
+-1570 y(v)o(ery)24 b(sparse.)30 b(The)o(y)23 b(are)h(inferior)i(to)d
+-(BDDs)f(in)h(other)i(cases.)589 1683 y(The)30 b(package)h(pro)o(vides)h
+-(a)d(lar)n(ge)i(set)f(of)f(operations)k(on)c(BDDs,)h(ADDs,)f(and)h
+-(ZDDs,)448 1796 y(functions)d(to)d(con)l(v)o(ert)h(BDDs)e(into)h(ADDs)f
+-(or)g(ZDDs)g(and)h(vice)g(v)o(ersa,)h(and)f(a)g(lar)n(ge)h(assort-)448
+-1909 y(ment)f(of)f(v)n(ariable)j(reordering)g(methods.)589
+-2022 y(The)e(CUDD)d(package)k(can)f(be)g(used)g(in)g(three)g(w)o(ays:)p
+-Black 585 2190 a Fm(\017)p Black 46 w Fo(As)17 b(a)h(black)h(box.)28
+-b(In)18 b(this)h(case,)g(the)g(application)i(program)f(that)f(needs)g
+-(to)f(manipulate)676 2303 y(decision)25 b(diagrams)f(only)g(uses)g(the)
+-g(e)o(xported)h(functions)g(of)e(the)h(package.)30 b(The)23
+-b(rich)676 2416 y(set)g(of)h(functions)i(included)g(in)d(the)h(CUDD)d
+-(package)26 b(allo)n(ws)e(man)o(y)f(applications)k(to)676
+-2529 y(be)21 b(written)i(in)f(this)g(w)o(ay)-6 b(.)28
+-b(Section)23 b(3)e(describes)k(ho)n(w)c(to)h(use)g(the)g(e)o(xported)i
+-(functions)676 2642 y(of)g(the)h(package.)33 b(An)24
+-b(application)k(written)d(in)f(terms)h(of)f(the)h(e)o(xported)h
+-(functions)h(of)676 2755 y(the)f(package)j(needs)e(not)g(concern)i
+-(itself)e(with)f(the)h(details)h(of)f(v)n(ariable)h(reordering,)676
+-2868 y(which)23 b(may)h(tak)o(e)g(place)h(behind)g(the)f(scenes.)p
+-Black 585 3047 a Fm(\017)p Black 46 w Fo(As)h(a)g(clear)i(box.)36
+-b(When)26 b(writing)g(a)g(sophisticated)j(application)g(based)e(on)f
+-(decision)676 3160 y(diagrams,)35 b(ef)n(\002cienc)o(y)e(often)g
+-(dictates)h(that)f(some)f(functions)i(be)e(implemented)i(as)676
+-3273 y(direct)h(recursi)n(v)o(e)h(manipulation)i(of)c(the)h(diagrams,)j
+-(instead)e(of)f(being)g(written)g(in)676 3386 y(terms)e(of)g(e)o
+-(xisting)i(primiti)n(v)o(e)f(functions.)60 b(Section)35
+-b(4)d(e)o(xplains)j(ho)n(w)e(to)g(add)h(ne)n(w)676 3499
+-y(functions)j(to)f(the)f(CUDD)e(package.)66 b(It)35 b(also)h(details)h
+-(ho)n(w)d(to)i(write)f(a)g(recursi)n(v)o(e)676 3612 y(function)25
+-b(that)f(can)g(be)g(interrupted)i(by)e(dynamic)h(v)n(ariable)g
+-(reordering.)p Black 585 3792 a Fm(\017)p Black 46 w
+-Fo(Through)c(an)f(interf)o(ace.)30 b(Object-oriented)23
+-b(languages)g(lik)o(e)e(C++)e(and)h(Perl5)g(can)h(free)676
+-3905 y(the)k(programmer)h(from)f(the)h(b)n(urden)h(of)e(memory)g
+-(management.)35 b(A)24 b(C++)g(interf)o(ace)676 4018
+-y(is)k(included)i(in)e(the)h(distrib)n(ution)j(of)c(CUDD.)d(It)j
+-(automatically)k(frees)d(decision)h(di-)676 4131 y(agrams)g(that)f(are)
+-h(no)f(longer)i(used)f(by)f(the)h(application)i(and)e(o)o(v)o(erloads)h
+-(operators.)676 4244 y(Almost)i(all)h(the)g(functionality)k(pro)o
+-(vided)e(by)e(the)g(CUDD)d(e)o(xported)36 b(functions)g(is)676
+-4356 y(a)n(v)n(ailable)d(through)g(the)e(C++)f(interf)o(ace,)35
+-b(which)c(is)g(especially)j(recommended)f(for)676 4469
+-y(f)o(ast)e(prototyping.)56 b(Section)32 b(5)f(e)o(xplains)j(ho)n(w)c
+-(to)i(use)f(the)h(interf)o(ace.)54 b(A)31 b(Perl5)g(in-)676
+-4582 y(terf)o(ace)38 b(also)g(e)o(xists)g(and)f(is)g(ditrib)n(uted)j
+-(separately)-6 b(.)71 b(\(See)37 b(Section)h(2.2.\))69
+-b(Some)676 4695 y(applications)27 b(de\002ne)d(their)g(o)n(wn)f(interf)
+-o(aces.)31 b(See)23 b(for)h(e)o(xample)g(Section)h(3.18.)448
+-4863 y(In)k(the)h(follo)n(wing,)i(the)d(reader)i(is)e(supposed)j(to)d
+-(be)g(f)o(amiliar)h(with)f(the)h(basic)g(ideas)g(about)448
+-4976 y(decision)c(diagrams,)f(as)e(found,)i(for)e(instance,)j(in)d([3)q
+-(].)p Black 1920 5225 a(4)p Black eop end
+-%%Page: 5 5
+-TeXDict begin 5 4 bop Black Black 448 573 a Fq(2)120
+-b(Ho)o(w)29 b(to)h(Get)g(CUDD)448 783 y Fi(2.1)99 b(The)26
+-b(CUDD)f(P)o(ackage)448 957 y Fo(The)36 b(CUDD)e(package)39
+-b(is)d(a)n(v)n(ailable)j(via)d(anon)o(ymous)j(FTP)34
+-b(from)i(vlsi.Colorado.EDU.)448 1070 y(A)29 b(compressed)j(tar)e
+-(\002le)f(named)h Fh(cudd-2.5.0.tar.)o(gz)22 b Fo(can)31
+-b(be)e(found)i(in)f(directory)448 1183 y Fh(pub)p Fo(.)d(Once)c(you)h
+-(ha)n(v)o(e)h(this)f(\002le,)p Black Black 676 1371 a
+-Fh(gzip)52 b(-dc)i(cudd-2.5.0.tar)o(.g)o(z)48 b(|)54
+-b(tar)g(xvf)f(-)448 1559 y Fo(will)27 b(create)g(directory)j
+-Fh(cudd-2.5.0)21 b Fo(and)27 b(its)g(subdirectories.)42
+-b(These)27 b(directories)j(con-)448 1671 y(tain)h(the)g(decision)i
+-(diagram)f(package,)i(a)c(fe)n(w)g(support)j(libraries,)h(and)d(a)f(to)
+-o(y)h(application)448 1784 y(based)23 b(on)f(the)h(decision)h(diagram)f
+-(package.)30 b(There)22 b(is)g(a)f(README)e(\002le)i(with)h
+-(instructions)448 1897 y(on)33 b(con\002guration)j(and)d(installation)j
+-(in)d Fh(cudd-2.5.0)p Fo(.)51 b(Y)-10 b(ou)32 b(can)i(use)f(a)f
+-(compiler)i(for)448 2010 y(either)25 b(ANSI)d(C)g(or)i(C++.)589
+-2123 y(Once)g(you)g(ha)n(v)o(e)g(made)g(the)g(libraries)h(and)f
+-(program,)h(you)f(can)g(type:)p Black Black 676 2311
+-a Fh(cd)53 b(nanotrav)676 2424 y(nanotrav)e(-p)i(1)h(-autodyn)d
+-(-reordering)f(sifting)h(-trav)676 2537 y(mult32a.blif)448
+-2724 y Fo(This)26 b(will)g(run)h(a)e(simple-minded)k(FSM)c(tra)n(v)o
+-(ersal)j(program.)38 b(\(On)25 b(a)h(2.4)g(GHz)f(Pentium)i(4)448
+-2837 y(\(TM\),)g(it)h(tak)o(es)h(about)h(0.5)e(s.\))42
+-b(The)28 b(output)i(produced)g(by)f(the)f(program)h(can)g(be)f(check)o
+-(ed)448 2950 y(against)35 b Fh(cudd-2.5.0/nano)o(tra)o(v/)o(mu)o(lt)o
+-(32)o(a.o)o(ut)o Fo(.)52 b(More)34 b(information)i(on)e(the)448
+-3063 y Fh(nanotrav)19 b Fo(program)25 b(can)f(be)g(found)g(in)g
+-Fh(cudd-2.5.0/nan)o(otr)o(av)o(/R)o(EA)o(DM)o(E)p Fo(.)589
+-3176 y(If)i(you)h(w)o(ant)f(to)g(be)g(noti\002ed)h(of)f(ne)n(w)f
+-(releases)j(of)e(the)h(CUDD)c(package,)29 b(send)e(a)e(mes-)448
+-3289 y(sage)g(to)e Fh(Fabio at Colorado.)o(ED)o(U)p Fo(.)448
+-3538 y Fi(2.2)99 b(CUDD)25 b(Friends)448 3712 y Fo(T)-7
+-b(w)o(o)18 b(CUDD)g(e)o(xtensions)k(are)e(a)n(v)n(ailable)h(via)f(anon)
+-o(ymous)i(FTP)17 b(from)i(vlsi.Colorado.EDU.)p Black
+-585 3900 a Fm(\017)p Black 46 w Fn(P)-7 b(erlDD)27 b
+-Fo(is)i(an)f(object-oriented)34 b(Perl5)29 b(interf)o(ace)i(to)d(CUDD.)
+-f(It)h(is)h(or)n(ganized)i(as)e(a)676 4013 y(standard)f(Perl)e(e)o
+-(xtension)j(module.)39 b(The)26 b(Perl)g(interf)o(ace)j(is)d(at)h(a)f
+-(some)n(what)h(higher)676 4126 y(le)n(v)o(el)c(than)i(the)e(C++)g
+-(interf)o(ace,)j(b)n(ut)e(it)f(is)h(not)g(as)f(complete.)p
+-Black 585 4313 a Fm(\017)p Black 46 w Fn(DDcal)g Fo(is)h(a)g(graphic)h
+-(BDD)e(calculator)j(based)f(on)f(CUDD,)e(Perl-Tk,)i(and)g(dot.)31
+-b(\(See)676 4426 y(Section)24 b(3.19)g(for)g(information)i(on)d
+-Fn(dot)p Fo(.\))448 4719 y Fq(3)120 b(User')l(s)28 b(Manual)448
+-4926 y Fo(This)c(section)h(describes)h(the)e(use)g(of)f(the)h(CUDD)d
+-(package)26 b(as)d(a)g(black)i(box.)p Black 1920 5225
+-a(5)p Black eop end
+-%%Page: 6 6
+-TeXDict begin 6 5 bop Black Black 448 573 a Fi(3.1)99
+-b(Compiling)25 b(and)g(Linking)448 747 y Fo(T)-7 b(o)23
+-b(b)n(uild)i(an)e(application)k(that)d(uses)g(the)g(CUDD)d(package,)26
+-b(you)e(should)h(add)p Black Black 448 935 a Fh(#include)51
+-b("util.h")448 1048 y(#include)g("cudd.h")448 1235 y
+-Fo(to)32 b(your)g(source)h(\002les,)g(and)g(should)g(link)f
+-Fh(libcudd.a)p Fo(,)d Fh(libmtr.a)p Fo(,)f Fh(libst.a)p
+-Fo(,)i(and)448 1348 y Fh(libutil.a)23 b Fo(to)28 b(your)h(e)o(x)o
+-(ecutable.)43 b(\(All)28 b(these)h(libraries)g(are)f(part)h(of)f(the)g
+-(distrib)n(ution.\))448 1461 y(Some)20 b(platforms)h(require)h
+-(speci\002c)e(compiler)i(and)e(link)o(er)h(\003ags.)28
+-b(Refer)20 b(to)g(the)g Fh(Makefile)448 1574 y Fo(in)k(the)g(top)f(le)n
+-(v)o(el)h(directory)i(of)e(the)f(distrib)n(ution.)589
+-1687 y(K)n(eep)d(in)g(mind)g(that)h(whate)n(v)o(er)g(\003ags)e(af)n
+-(fect)i(the)g(size)f(of)g(data)h(structures\227for)i(instance)448
+-1800 y(the)e(\003ags)f(used)g(to)g(use)h(64-bit)g(pointers)h(where)f(a)
+-n(v)n(ailable\227must)i(be)d(speci\002ed)h(when)f(com-)448
+-1913 y(piling)25 b(both)g(CUDD)c(and)j(the)g(\002les)f(that)h(include)h
+-(its)f(header)h(\002les.)448 2162 y Fi(3.2)99 b(Basic)25
+-b(Data)g(Structur)n(es)448 2336 y Fp(3.2.1)92 b(Nodes)448
+-2510 y Fo(BDDs,)24 b(ADDs,)h(and)h(ZDDs)d(are)j(made)g(of)f(DdNode')-5
+-b(s.)35 b(A)25 b(DdNode)g(\(node)i(for)f(short\))g(is)g(a)448
+-2623 y(structure)j(with)d(se)n(v)o(eral)i(\002elds.)37
+-b(Those)27 b(that)g(are)f(of)h(interest)h(to)e(the)h(application)j
+-(that)d(uses)448 2736 y(the)e(CUDD)d(package)27 b(as)d(a)g(black)i(box)
+-f(are)f(the)h(v)n(ariable)h(inde)o(x,)g(the)e(reference)j(count,)f(and)
+-448 2849 y(the)f(v)n(alue.)33 b(The)24 b(remaining)i(\002elds)f(are)f
+-(pointers)j(that)e(connect)i(nodes)e(among)g(themselv)o(es)448
+-2962 y(and)f(that)g(are)g(used)g(to)g(implement)h(the)e(unique)j
+-(table.)j(\(See)23 b(Section)i(3.2.2.\))589 3075 y(The)h
+-Fn(inde)n(x)i Fo(\002eld)e(holds)h(the)g(name)f(of)g(the)h(v)n(ariable)
+-h(that)e(labels)i(the)e(node.)38 b(The)25 b(inde)o(x)448
+-3188 y(of)37 b(a)f(v)n(ariable)i(is)f(a)f(permanent)j(attrib)n(ute)g
+-(that)e(re\003ects)g(the)g(order)h(of)e(creation.)70
+-b(Inde)o(x)448 3301 y(0)26 b(corresponds)k(to)c(the)g(v)n(ariable)i
+-(created)g(\002rst.)36 b(On)25 b(a)h(machine)h(with)f(32-bit)h
+-(pointers,)i(the)448 3414 y(maximum)21 b(number)h(of)e(v)n(ariables)j
+-(is)d(the)h(lar)n(gest)i(v)n(alue)e(that)h(can)f(be)f(stored)j(in)d(an)
+-h(unsigned)448 3527 y(short)27 b(inte)o(ger)g(minus)f(1.)35
+-b(The)25 b(lar)n(gest)j(inde)o(x)f(is)e(reserv)o(ed)j(for)e(the)g
+-(constant)h(nodes.)37 b(When)448 3640 y(64-bit)24 b(pointers)g(are)e
+-(used,)h(the)f(maximum)g(number)h(of)f(v)n(ariables)i(is)e(the)g(lar)n
+-(gest)i(v)n(alue)f(that)448 3752 y(can)h(be)g(stored)h(in)e(an)h
+-(unsigned)i(inte)o(ger)e(minus)g(1.)589 3865 y(When)k(v)n(ariables)i
+-(are)e(reordered)i(to)e(reduce)h(the)f(size)g(of)f(the)h(decision)i
+-(diagrams,)g(the)448 3978 y(v)n(ariables)h(may)e(shift)h(in)f(the)g
+-(order)l(,)i(b)n(ut)f(the)o(y)f(retain)h(their)g(indices.)47
+-b(The)28 b(package)j(k)o(eeps)448 4091 y(track)d(of)e(the)h(v)n
+-(ariable)h(permutation)h(\(and)e(its)g(in)l(v)o(erse\).)40
+-b(The)26 b(application)j(is)e(not)g(af)n(fected)448 4204
+-y(by)d(v)n(ariable)h(reordering,)h(e)o(xcept)f(in)e(the)h(follo)n(wing)
+-h(cases.)p Black 585 4392 a Fm(\017)p Black 46 w Fo(If)17
+-b(the)i(application)i(uses)e(generators)i(\()p Fn(Cudd)p
+-2104 4392 28 4 v 34 w(F)-10 b(or)m(eac)o(hCube)20 b Fo(and)e
+-Fn(Cudd)p 2985 4392 V 34 w(F)-10 b(or)m(eac)o(hNode)p
+-Fo(\))676 4505 y(and)20 b(reordering)j(is)d(enabled,)j(then)e(it)f
+-(must)g(tak)o(e)h(care)f(not)h(to)f(call)h(an)o(y)f(operation)j(that)
+-676 4618 y(may)29 b(create)i(ne)n(w)e(nodes)j(\(and)e(hence)h(possibly)
+-h(trigger)g(reordering\).)51 b(This)29 b(is)h(be-)676
+-4730 y(cause)j(the)g(cubes)h(\(i.e.,)g(paths\))g(and)f(nodes)h(of)e(a)g
+-(diagram)i(change)g(as)f(a)f(result)h(of)676 4843 y(reordering.)p
+-Black 1920 5225 a(6)p Black eop end
+-%%Page: 7 7
+-TeXDict begin 7 6 bop Black Black Black 585 573 a Fm(\017)p
+-Black 46 w Fo(If)26 b(the)h(application)j(uses)d Fn(Cudd)p
+-1712 573 28 4 v 34 w(bddConstr)o(ain)j Fo(and)d(reordering)i(tak)o(es)f
+-(place,)h(then)676 686 y(the)23 b(property)j(of)e Fn(Cudd)p
+-1440 686 V 33 w(bddConstr)o(ain)j Fo(of)c(being)i(an)e(image)h
+-(restrictor)i(is)e(lost.)589 873 y(The)j(CUDD)f(package)j(relies)g(on)e
+-(garbage)i(collection)h(to)e(reclaim)g(the)g(memory)f(used)448
+-986 y(by)35 b(diagrams)i(that)e(are)h(no)f(longer)h(in)f(use.)64
+-b(The)34 b(scheme)i(emplo)o(yed)h(for)e(garbage)i(col-)448
+-1099 y(lection)32 b(is)d(based)i(on)f(k)o(eeping)h(a)e(reference)j
+-(count)f(for)f(each)g(node.)48 b(The)29 b(references)k(that)448
+-1212 y(are)26 b(counted)i(are)e(both)h(the)f(internal)h(references)i
+-(\(references)f(from)e(other)h(nodes\))g(and)f(e)o(x-)448
+-1325 y(ternal)37 b(references)h(\(typically)g(references)g(from)d(the)g
+-(calling)i(en)l(vironment\).)68 b(When)35 b(an)448 1438
+-y(application)25 b(creates)f(a)d(ne)n(w)g(BDD,)f(ADD,)f(or)j(ZDD,)d(it)
+-j(must)f(increase)j(its)e(reference)i(count)448 1551
+-y(e)o(xplicitly)-6 b(,)40 b(through)d(a)e(call)g(to)g
+-Fn(Cudd)p 1707 1551 V 34 w(Ref)13 b Fo(.)62 b(Similarly)-6
+-b(,)38 b(when)e(a)e(diagram)i(is)f(no)g(longer)448 1664
+-y(needed,)28 b(the)e(application)i(must)e(call)g Fn(Cudd)p
+-1877 1664 V 34 w(Recur)o(siveDer)m(ef)41 b Fo(\(for)26
+-b(BDDs)e(and)i(ADDs\))e(or)448 1777 y Fn(Cudd)p 649 1777
+-V 34 w(Recur)o(siveDer)m(efZdd)29 b Fo(\(for)24 b(ZDDs\))e(to)h
+-(\223rec)o(ycle\224)j(the)e(nodes)h(of)e(the)h(diagram.)589
+-1890 y(T)-6 b(erminal)37 b(nodes)h(carry)g(a)e(v)n(alue.)69
+-b(This)36 b(is)h(especially)i(important)g(for)d(ADDs.)67
+-b(By)448 2002 y(def)o(ault,)29 b(the)f(v)n(alue)f(is)g(a)f(double.)41
+-b(T)-7 b(o)25 b(change)k(to)d(something)j(dif)n(ferent)g(\(e.g.,)e(an)g
+-(inte)o(ger\),)448 2115 y(the)21 b(package)i(must)d(be)h(modi\002ed)g
+-(and)g(recompiled.)30 b(Support)21 b(for)g(this)g(process)i(is)d
+-(currently)448 2228 y(v)o(ery)k(rudimentary)-6 b(.)448
+-2474 y Fp(3.2.2)92 b(The)22 b(Manager)448 2648 y Fo(All)27
+-b(nodes)i(used)g(in)f(BDDs,)f(ADDs,)g(and)h(ZDDs)e(are)i(k)o(ept)g(in)g
+-(special)h(hash)g(tables)g(called)448 2761 y(the)36 b
+-Fn(unique)i(tables)p Fo(.)66 b(Speci\002cally)-6 b(,)40
+-b(BDDs)35 b(and)h(ADDs)e(share)j(the)f(same)f(unique)j(table,)448
+-2874 y(whereas)24 b(ZDDs)d(ha)n(v)o(e)j(their)f(o)n(wn)f(table.)30
+-b(As)22 b(the)h(name)f(implies,)i(the)f(main)g(purpose)h(of)f(the)448
+-2987 y(unique)i(table)e(is)g(to)f(guarantee)k(that)d(each)g(node)h(is)e
+-(unique;)j(that)e(is,)g(there)g(is)g(no)g(other)g(node)448
+-3100 y(labeled)h(by)e(the)h(same)f(v)n(ariable)i(and)e(with)g(the)g
+-(same)h(children.)30 b(This)22 b(uniqueness)j(property)448
+-3213 y(mak)o(es)34 b(decision)i(diagrams)f(canonical.)61
+-b(The)33 b(unique)i(tables)f(and)g(some)g(auxiliary)i(data)448
+-3326 y(structures)e(mak)o(e)d(up)g(the)g(DdManager)h(\(manager)h(for)e
+-(short\).)52 b(Though)32 b(the)f(application)448 3439
+-y(that)c(uses)h(only)f(the)g(e)o(xported)h(functions)h(needs)f(not)f
+-(be)f(concerned)j(with)e(most)f(details)i(of)448 3552
+-y(the)20 b(manager)l(,)h(it)e(has)h(to)f(deal)h(with)f(the)h(manager)g
+-(in)g(the)f(follo)n(wing)i(sense.)28 b(The)19 b(application)448
+-3665 y(must)28 b(initialize)h(the)f(manager)h(by)e(calling)i(an)e
+-(appropriate)k(function.)42 b(\(See)27 b(Section)h(3.3.\))448
+-3778 y(Subsequently)-6 b(,)25 b(it)c(must)h(pass)g(a)f(pointer)j(to)d
+-(the)h(manager)h(to)e(all)h(the)f(functions)j(that)f(operate)448
+-3890 y(on)h(decision)i(diagrams.)589 4003 y(W)l(ith)k(the)g(e)o
+-(xception)i(of)d(a)g(fe)n(w)g(statistical)j(counters,)h(there)d(are)g
+-(no)f(global)i(v)n(ariables)448 4116 y(in)f(the)g(CUDD)d(package.)50
+-b(Therefore,)32 b(it)e(is)f(quite)i(possible)h(to)d(ha)n(v)o(e)i
+-(multiple)g(managers)448 4229 y(simultaneously)h(acti)n(v)o(e)d(in)f
+-(the)g(same)g(application.)2140 4196 y Fg(1)2223 4229
+-y Fo(It)g(is)g(the)g(pointers)i(to)e(the)h(managers)448
+-4342 y(that)24 b(tell)g(the)g(functions)i(on)e(what)f(data)h(the)o(y)g
+-(should)i(operate.)p Black 448 4423 1196 4 v 554 4479
+-a Ff(1)583 4511 y Fe(The)18 b(global)h(statistical)e(counters)i(are)f
+-(used)h(locally;)g(hence)g(the)o(y)f(are)h(compatible)g(with)e(the)i
+-(use)f(of)g(multi-)448 4602 y(ple)h(managers.)p Black
+-Black 1920 5225 a Fo(7)p Black eop end
+-%%Page: 8 8
+-TeXDict begin 8 7 bop Black Black 448 573 a Fp(3.2.3)92
+-b(Cache)448 747 y Fo(Ef)n(\002cient)23 b(recursi)n(v)o(e)i
+-(manipulation)h(of)e(decision)h(diagrams)f(requires)i(the)d(use)h(of)f
+-(a)f(table)i(to)448 860 y(store)i(computed)g(results.)34
+-b(This)24 b(table)i(is)e(called)i(here)g(the)e Fn(cac)o(he)i
+-Fo(because)g(it)f(is)f(ef)n(fecti)n(v)o(ely)448 973 y(handled)g(lik)o
+-(e)f(a)e(cache)i(of)f(v)n(ariable)i(b)n(ut)e(limited)h(capacity)-6
+-b(.)30 b(The)22 b(CUDD)d(package)24 b(starts)f(by)448
+-1086 y(def)o(ault)31 b(with)e(a)g(small)g(cache,)i(and)f(increases)h
+-(its)e(size)h(until)g(either)g(no)f(further)i(bene\002t)e(is)448
+-1199 y(achie)n(v)o(ed,)c(or)f(a)f(limit)g(size)h(is)f(reached.)31
+-b(The)23 b(user)h(can)g(in\003uence)h(this)f(polic)o(y)g(by)g(choosing)
+-448 1312 y(initial)h(and)f(limit)g(v)n(alues)g(for)g(the)g(cache)h
+-(size.)589 1425 y(T)-7 b(oo)22 b(small)g(a)f(cache)i(will)e(cause)i
+-(frequent)h(o)o(v)o(erwriting)f(of)f(useful)h(results.)30
+-b(T)-7 b(oo)21 b(lar)n(ge)i(a)448 1537 y(cache)h(will)d(cause)j(o)o(v)o
+-(erhead,)g(because)g(the)e(whole)h(cache)g(is)f(scanned)i(e)n(v)o(ery)f
+-(time)f(garbage)448 1650 y(collection)27 b(tak)o(es)f(place.)32
+-b(The)24 b(optimal)h(parameters)i(depend)f(on)e(the)h(speci\002c)g
+-(application.)448 1763 y(The)e(def)o(ault)j(parameters)f(w)o(ork)f
+-(reasonably)i(well)e(for)f(a)g(lar)n(ge)i(spectrum)g(of)f
+-(applications.)589 1876 y(The)32 b(cache)h(of)f(the)h(CUDD)d(package)k
+-(is)e(used)h(by)f(most)g(recursi)n(v)o(e)i(functions)h(of)d(the)448
+-1989 y(package,)26 b(and)e(can)f(be)h(used)g(by)g(user)n(-supplied)k
+-(functions)e(as)d(well.)29 b(\(See)23 b(Section)h(4.4.\))448
+-2236 y Fi(3.3)99 b(Initializing)24 b(and)i(Shutting)g(Do)o(wn)f(a)g
+-(DdManager)448 2411 y Fo(T)-7 b(o)27 b(use)g(the)h(functions)i(in)d
+-(the)h(CUDD)d(package,)30 b(one)e(has)g(\002rst)f(to)g(initialize)j
+-(the)d(package)448 2524 y(itself)e(by)e(calling)j Fn(Cudd)p
+-1238 2524 28 4 v 33 w(Init)r Fo(.)j(This)24 b(function)h(tak)o(es)g
+-(four)f(parameters:)p Black 585 2702 a Fm(\017)p Black
+-46 w Fo(numV)-10 b(ars:)28 b(It)21 b(is)h(the)f(initial)i(number)f(of)g
+-(v)n(ariables)h(for)f(BDDs)e(and)i(ADDs.)k(If)21 b(the)h(to-)676
+-2815 y(tal)e(number)i(of)f(v)n(ariables)h(needed)h(by)d(the)h
+-(application)j(is)d(kno)n(wn,)g(then)g(it)g(is)f(slightly)676
+-2928 y(more)h(ef)n(\002cient)h(to)f(create)i(a)e(manager)i(with)e(that)
+-h(number)g(of)f(v)n(ariables.)30 b(If)22 b(the)f(num-)676
+-3041 y(ber)g(is)g(unkno)n(wn,)i(it)e(can)h(be)f(set)g(to)g(0,)h(or)f
+-(to)g(an)o(y)g(other)i(lo)n(wer)e(bound)h(on)g(the)f(number)676
+-3154 y(of)28 b(v)n(ariables.)47 b(Requesting)31 b(more)e(v)n(ariables)i
+-(than)f(are)f(actually)i(needed)f(is)f(not)g(in-)676
+-3267 y(correct,)24 b(b)n(ut)g(is)g(not)g(ef)n(\002cient.)p
+-Black 585 3450 a Fm(\017)p Black 46 w Fo(numV)-10 b(arsZ:)27
+-b(It)h(is)f(the)h(initial)h(number)f(of)g(v)n(ariables)i(for)d(ZDDs.)40
+-b(See)27 b(Sections)h(3.9)676 3563 y(and)c(3.11)f(for)h(a)f(discussion)
+-k(of)c(the)h(v)n(alue)g(of)g(this)g(ar)n(gument.)p Black
+-585 3747 a Fm(\017)p Black 46 w Fo(numSlots:)42 b(Determines)31
+-b(the)f(initial)h(size)f(of)g(each)h(subtable)h(of)d(the)h(unique)i
+-(table.)676 3860 y(There)c(is)g(a)f(subtable)j(for)f(each)f(v)n
+-(ariable.)44 b(The)28 b(size)g(of)g(each)h(subtable)h(is)e(dynami-)676
+-3973 y(cally)e(adjusted)i(to)e(re\003ect)g(the)g(number)h(of)f(nodes.)
+-37 b(It)25 b(is)h(normally)h(O.K.)d(to)i(use)g(the)676
+-4086 y(def)o(ault)f(v)n(alue)f(for)g(this)g(parameter)l(,)h(which)f(is)
+-g(CUDD)p 2448 4086 V 31 w(UNIQ)o(UE)p 2828 4086 V 31
+-w(SLO)l(TS.)p Black 585 4270 a Fm(\017)p Black 46 w Fo(cacheSize:)39
+-b(It)28 b(is)g(the)g(initial)h(size)g(\(number)g(of)f(entries\))h(of)f
+-(the)h(cache.)43 b(Its)28 b(def)o(ault)676 4383 y(v)n(alue)c(is)f(CUDD)
+-p 1240 4383 V 32 w(CA)l(CHE)p 1578 4383 V 31 w(SLO)l(TS.)p
+-Black 585 4567 a Fm(\017)p Black 46 w Fo(maxMemory:)29
+-b(It)23 b(is)g(the)h(tar)n(get)g(v)n(alue)g(for)f(the)h(maximum)f
+-(memory)g(occupation)j(\(in)676 4680 y(bytes\).)k(The)23
+-b(package)i(uses)g(this)f(v)n(alue)g(to)f(decide)i(tw)o(o)f
+-(parameters.)p Black 785 4863 a Fp(\226)p Black 46 w
+-Fo(the)29 b(maximum)f(size)i(to)e(which)i(the)f(cache)h(will)e(gro)n(w)
+--6 b(,)30 b(re)o(gardless)g(of)f(the)g(hit)876 4976 y(rate)24
+-b(or)f(the)h(size)g(of)f(the)h(unique)h(table.)p Black
+-1920 5225 a(8)p Black eop end
+-%%Page: 9 9
+-TeXDict begin 9 8 bop Black Black Black 785 573 a Fp(\226)p
+-Black 46 w Fo(the)19 b(maximum)g(size)h(to)f(which)h(gro)n(wth)f(of)g
+-(the)h(unique)h(table)f(will)f(be)g(preferred)876 686
+-y(to)k(garbage)i(collection.)676 873 y(If)j(maxMemory)h(is)g(set)g(to)f
+-(0,)h(CUDD)e(tries)i(to)g(guess)g(a)f(good)i(v)n(alue)g(based)f(on)g
+-(the)676 986 y(a)n(v)n(ailable)c(memory)-6 b(.)448 1174
+-y(A)23 b(typical)i(call)f(to)f Fn(Cudd)p 1255 1174 28
+-4 v 34 w(Init)j Fo(may)d(look)h(lik)o(e)g(this:)p Black
+-Black 557 1362 a Fh(manager)52 b(=)i(Cudd_Init\(0,0,)o(CUD)o(D_)o(UN)o
+-(IQ)o(UE)o(_SL)o(OT)o(S,)o(CU)o(DD)o(_CA)o(CH)o(E_)o(SL)o(OT)o(S,0)o
+-(\);)448 1549 y Fo(T)-7 b(o)34 b(reclaim)i(all)f(the)g(memory)g
+-(associated)j(with)d(a)f(manager)l(,)39 b(an)c(application)j(must)d
+-(call)448 1662 y Fn(Cudd)p 649 1662 V 34 w(Quit)r Fo(.)28
+-b(This)c(is)f(normally)i(done)f(before)h(e)o(xiting.)448
+-1911 y Fi(3.4)99 b(Setting)26 b(P)o(arameters)448 2086
+-y Fo(The)i(package)j(pro)o(vides)f(se)n(v)o(eral)g(functions)h(to)d
+-(set)h(the)g(parameters)h(that)f(control)i(v)n(arious)448
+-2198 y(functions.)g(F)o(or)22 b(instance,)j(the)e(package)i(has)f(an)f
+-(automatic)h(w)o(ay)f(of)g(determining)i(whether)448
+-2311 y(a)f(lar)n(ger)i(unique)f(table)g(w)o(ould)g(mak)o(e)f(the)g
+-(application)k(run)c(f)o(aster)-5 b(.)32 b(In)24 b(that)g(case,)h(the)f
+-(pack-)448 2424 y(age)19 b(enters)h(a)e(\223f)o(ast)i(gro)n(wth\224)f
+-(mode)g(in)g(which)g(resizing)i(of)d(the)h(unique)h(subtables)i(is)c(f)
+-o(a)n(v)n(ored)448 2537 y(o)o(v)o(er)25 b(garbage)h(collection.)36
+-b(When)25 b(the)g(unique)h(table)g(reaches)g(a)f(gi)n(v)o(en)g(size,)h
+-(ho)n(we)n(v)o(er)l(,)f(the)448 2650 y(package)d(returns)e(to)g(the)f
+-(normal)h(\223slo)n(w)f(gro)n(wth\224)i(mode,)f(e)n(v)o(en)f(though)i
+-(the)e(conditions)k(that)448 2763 y(caused)k(the)f(transition)i(to)d(f)
+-o(ast)h(gro)n(wth)f(still)h(pre)n(v)n(ail.)35 b(The)25
+-b(limit)g(size)h(for)f(f)o(ast)h(gro)n(wth)g(can)448
+-2876 y(be)k(read)h(by)f Fn(Cudd)p 1070 2876 V 33 w(ReadLooseUpT)-8
+-b(o)31 b Fo(and)g(changed)h(by)e Fn(Cudd)p 2544 2876
+-V 33 w(SetLooseUpT)-8 b(o)p Fo(.)49 b(Similar)448 2989
+-y(pairs)25 b(of)e(functions)j(e)o(xist)e(for)g(se)n(v)o(eral)h(other)f
+-(parameters.)31 b(See)23 b(also)h(Section)h(4.8.)448
+-3238 y Fi(3.5)99 b(Constant)26 b(Functions)448 3412 y
+-Fo(The)18 b(CUDD)e(P)o(ackage)j(de\002nes)g(se)n(v)o(eral)h(constant)g
+-(functions.)30 b(These)18 b(functions)j(are)e(created)448
+-3525 y(when)24 b(the)g(manager)g(is)g(initialized,)i(and)e(are)g
+-(accessible)i(through)f(the)f(manager)h(itself.)448 3771
+-y Fp(3.5.1)92 b(One,)22 b(Logic)i(Zer)n(o,)g(and)e(Arithmetic)i(Zer)n
+-(o)448 3945 y Fo(The)36 b(constant)i(1)d(\(returned)j(by)e
+-Fn(Cudd)p 1738 3945 V 34 w(ReadOne)p Fo(\))g(is)g(common)g(to)g(BDDs,)h
+-(ADDs,)g(and)448 4058 y(ZDDs.)42 b(Ho)n(we)n(v)o(er)l(,)29
+-b(its)f(meaning)i(is)e(dif)n(ferent)i(for)f(ADDs)d(and)j(BDDs,)f(on)g
+-(the)h(one)g(hand,)448 4171 y(and)c(ZDDs,)f(on)g(the)h(other)h(hand.)33
+-b(The)25 b(diagram)g(consisting)j(of)d(the)g(constant)h(1)f(node)g
+-(only)448 4284 y(represents)33 b(the)d(constant)i(1)e(function)i(for)e
+-(ADDs)f(and)h(BDDs.)46 b(F)o(or)29 b(ZDDs,)h(its)g(meaning)448
+-4397 y(depends)i(on)d(the)g(number)i(of)e(v)n(ariables:)42
+-b(It)29 b(is)g(the)h(conjunction)j(of)c(the)g(complements)i(of)448
+-4510 y(all)j(v)n(ariables.)63 b(Con)l(v)o(ersely)-6 b(,)38
+-b(the)d(representation)j(of)c(the)g(constant)i(1)e(function)i(depends)
+-448 4623 y(on)28 b(the)f(number)h(of)f(v)n(ariables.)42
+-b(The)26 b(constant)k(1)c(function)k(of)d Fk(n)f Fo(v)n(ariables)j(is)e
+-(returned)i(by)448 4736 y Fn(Cudd)p 649 4736 V 34 w(ReadZddOne)p
+-Fo(.)p Black 1920 5225 a(9)p Black eop end
+-%%Page: 10 10
+-TeXDict begin 10 9 bop Black Black 589 573 a Fo(The)29
+-b(constant)j(0)c(is)h(common)h(to)f(ADDs)f(and)h(ZDDs,)g(b)n(ut)h(not)f
+-(to)g(BDDs.)44 b(The)29 b(BDD)448 686 y(logic)21 b(0)f(is)g
+-Fp(not)g Fo(associated)i(with)e(the)h(constant)h(0)e(function:)29
+-b(It)20 b(is)g(obtained)i(by)f(complemen-)448 799 y(tation)26
+-b(\()p Fn(Cudd)p 910 799 28 4 v 34 w(Not)r Fo(\))e(of)h(the)g(constant)
+-i(1.)32 b(\(It)24 b(is)h(also)g(returned)i(by)e Fn(Cudd)p
+-2795 799 V 33 w(ReadLo)o(gicZer)l(o)p Fo(.\))448 912
+-y(All)e(other)i(constants)h(are)e(speci\002c)g(to)f(ADDs.)448
+-1157 y Fp(3.5.2)92 b(Pr)n(ede\002ned)22 b(Constants)448
+-1332 y Fo(Besides)34 b(0)e(\(returned)j(by)d Fn(Cudd)p
+-1528 1332 V 34 w(ReadZer)l(o)p Fo(\))h(and)g(1,)h(the)f(follo)n(wing)h
+-(constant)h(functions)448 1445 y(are)24 b(created)h(at)f
+-(initialization)j(time.)p Black 562 1632 a(1.)p Black
+-46 w(PlusIn\002nity)f(and)g(MinusIn\002nity:)34 b(On)25
+-b(computers)i(implementing)g(the)e(IEEE)e(stan-)676 1745
+-y(dard)39 b(754)g(for)f(\003oating-point)k(arithmetic,)h(these)d(tw)o
+-(o)e(constants)j(are)d(set)h(to)f(the)676 1858 y(signed)19
+-b(in\002nities.)29 b(On)17 b(the)h(DEC)e(Alphas,)k(the)e(option)i
+-Fh(-ieee_with_no_i)o(ne)o(xa)o(ct)676 1971 y Fo(or)33
+-b Fh(-ieee_with_inexa)o(ct)26 b Fo(must)34 b(be)g(passed)h(to)f(the)g
+-(DEC)e(compiler)j(to)f(get)676 2084 y(support)26 b(of)e(the)h(IEEE)d
+-(standard.)34 b(\(The)24 b(compiler)i(still)f(produces)h(a)e(w)o
+-(arning,)i(b)n(ut)f(it)676 2197 y(can)30 b(be)h(ignored.\))52
+-b(Compiling)32 b(with)e(those)i(options)g(may)e(cause)i(substantial)i
+-(per)n(-)676 2310 y(formance)39 b(de)o(gradation)j(on)c(the)g(Ev)n
+-(olution)j(IV)c(CPUs.)71 b(\(Especially)41 b(if)d(the)g(ap-)676
+-2423 y(plication)d(does)f(use)f(the)g(in\002nities.\))58
+-b(The)33 b(problem)h(is)e(reportedly)k(solv)o(ed)e(in)f(the)676
+-2536 y(Ev)n(olution)h(V)d(CPUs.)55 b(If)32 b Fh(gcc)e
+-Fo(is)j(used)g(to)f(compile)i(CUDD)c(on)j(the)g(Alphas,)i(the)676
+-2648 y(symbol)26 b Fh(HAVE)p 1193 2648 V 31 w(IEEE)p
+-1444 2648 V 31 w(754)d Fo(must)j(be)f(unde\002ned.)37
+-b(\(See)25 b(the)h(Mak)o(e\002le)g(for)f(the)h(de-)676
+-2761 y(tails.\))39 b(The)26 b(v)n(alues)i(of)e(these)i(constants)h(are)
+-e(returned)i(by)d Fn(Cudd)p 2802 2761 V 34 w(ReadPlusIn\002nity)676
+-2874 y Fo(and)e Fn(Cudd)p 1031 2874 V 33 w(ReadMinusIn\002nity)p
+-Fo(.)p Black 562 3062 a(2.)p Black 46 w(Epsilon:)38 b(This)28
+-b(constant,)j(initially)f(set)e(to)f Fl(10)2183 3029
+-y Fd(\000)p Fc(12)2314 3062 y Fo(,)h(is)f(used)i(in)f(comparing)h
+-(\003oating)676 3175 y(point)e(v)n(alues)g(for)f(equality)-6
+-b(.)39 b(Its)26 b(v)n(alue)h(is)f(returned)j(by)d Fn(Cudd)p
+-2688 3175 V 34 w(ReadEpsilon)p Fo(,)i(and)f(it)676 3288
+-y(can)h(be)g(modi\002ed)h(by)g(calling)g Fn(Cudd)p 1887
+-3288 V 34 w(SetEpsilon)p Fo(.)45 b(Unlik)o(e)29 b(the)g(other)g
+-(constants,)j(it)676 3401 y(does)24 b(not)g(correspond)i(to)e(a)f
+-(node.)448 3646 y Fp(3.5.3)92 b(Backgr)n(ound)448 3821
+-y Fo(The)22 b(background)k(v)n(alue)e(is)e(a)g(constant)j(typically)g
+-(used)e(to)g(represent)h(non-e)o(xisting)i(arcs)d(in)448
+-3934 y(graphs.)31 b(Consider)26 b(a)d(shortest)j(path)e(problem.)31
+-b(T)-7 b(w)o(o)22 b(nodes)j(that)g(are)f(not)g(connected)i(by)e(an)448
+-4047 y(arc)31 b(can)f(be)g(re)o(garded)i(as)e(being)h(joined)h(by)e(an)
+-g(arc)g(of)g(in\002nite)h(length.)50 b(In)30 b(shortest)j(path)448
+-4159 y(problems,)27 b(it)d(is)g(therefore)j(con)l(v)o(enient)h(to)d
+-(set)g(the)g(background)j(v)n(alue)d(to)g(PlusIn\002nity.)33
+-b(In)448 4272 y(netw)o(ork)26 b(\003o)n(w)e(problems,)i(on)f(the)g
+-(other)h(hand,)g(tw)o(o)e(nodes)i(not)g(connected)h(by)e(an)g(arc)g
+-(can)448 4385 y(be)j(re)o(garded)h(as)f(joined)h(by)f(an)g(arc)g(of)f
+-(0)h(capacity)-6 b(.)43 b(F)o(or)27 b(these)i(problems,)h(therefore,)h
+-(it)c(is)448 4498 y(more)i(con)l(v)o(enient)j(to)c(set)h(the)g
+-(background)j(v)n(alue)d(to)g(0.)43 b(In)29 b(general,)i(when)e
+-(representing)448 4611 y(sparse)c(matrices,)g(the)e(background)k(v)n
+-(alue)e(is)e(the)h(v)n(alue)g(that)g(is)g(assumed)h(implicitly)-6
+-b(.)589 4724 y(At)18 b(initialization,)k(the)d(background)i(v)n(alue)e
+-(is)f(set)g(to)g(0.)27 b(It)18 b(can)g(be)g(read)h(with)f
+-Fn(Cudd)p 3237 4724 V 34 w(ReadBac)n(kgr)l(ound)r Fo(,)448
+-4837 y(and)k(modi\002ed)f(with)f Fn(Cudd)p 1325 4837
+-V 34 w(SetBac)n(kgr)l(ound)p Fo(.)31 b(The)21 b(background)j(v)n(alue)d
+-(af)n(fects)h(procedures)p Black 1897 5225 a(10)p Black
+-eop end
+-%%Page: 11 11
+-TeXDict begin 11 10 bop Black Black 448 573 a Fo(that)34
+-b(read)f(sparse)i(matrices/graphs)h(\()p Fn(Cudd)p 1903
+-573 28 4 v 34 w(addRead)h Fo(and)c Fn(Cudd)p 2654 573
+-V 34 w(addHarwell)p Fo(\),)k(proce-)448 686 y(dures)31
+-b(that)f(print)g(out)f(sum-of-product)34 b(e)o(xpressions)e(for)d(ADDs)
+-f(\()p Fn(Cudd)p 2855 686 V 34 w(PrintMinterm)p Fo(\),)448
+-799 y(generators)43 b(of)d(cubes)h(\()p Fn(Cudd)p 1458
+-799 V 34 w(F)-10 b(or)m(eac)o(hCube)p Fo(\),)46 b(and)40
+-b(procedures)j(that)e(count)g(minterms)448 912 y(\()p
+-Fn(Cudd)p 679 912 V 34 w(CountMinterm)p Fo(\).)448 1157
+-y Fp(3.5.4)92 b(New)22 b(Constants)448 1332 y Fo(Ne)n(w)d(constant)j
+-(can)f(be)f(created)i(by)e(calling)i Fn(Cudd)p 2070 1332
+-V 34 w(addConst)r Fo(.)29 b(This)20 b(function)i(will)e(retrie)n(v)o(e)
+-448 1445 y(the)31 b(ADD)e(for)i(the)g(desired)h(constant,)i(if)d(it)f
+-(already)i(e)o(xist,)h(or)e(it)f(will)g(create)i(a)e(ne)n(w)g(one.)448
+-1558 y(Ob)o(viously)-6 b(,)25 b(ne)n(w)e(constants)j(should)f(only)g
+-(be)e(used)i(when)e(manipulating)k(ADDs.)448 1807 y Fi(3.6)99
+-b(Cr)n(eating)26 b(V)-9 b(ariables)448 1981 y Fo(Decision)28
+-b(diagrams)g(are)e(typically)j(created)f(by)e(combining)i(simpler)g
+-(decision)g(diagrams.)448 2094 y(The)22 b(simplest)h(decision)h
+-(diagrams,)g(of)e(course,)h(cannot)h(be)e(created)h(in)f(that)h(w)o(ay)
+--6 b(.)28 b(Constant)448 2207 y(functions)e(ha)n(v)o(e)e(been)g
+-(discussed)h(in)e(Section)h(3.5.)29 b(In)23 b(this)g(section)i(we)d
+-(discuss)j(the)f(simple)448 2320 y(v)n(ariable)i(functions,)f(also)g
+-(kno)n(wn)e(as)h Fn(pr)l(ojection)i(functions)p Fo(.)448
+-2566 y Fp(3.6.1)92 b(New)22 b(BDD)g(and)g(ADD)g(V)-8
+-b(ariables)448 2740 y Fo(The)27 b(projection)j(functions)g(are)e
+-(distinct)h(for)f(BDDs)d(and)j(ADDs.)39 b(A)26 b(projection)k(function)
+-448 2853 y(for)24 b(BDDs)d(consists)k(of)e(an)h(internal)h(node)f(with)
+-f(both)h(outgoing)h(arcs)f(pointing)h(to)e(the)h(con-)448
+-2966 y(stant)h(1.)j(The)23 b Fn(else)h Fo(arc)g(is)f(complemented.)589
+-3079 y(An)e(ADD)e(projection)k(function,)h(on)d(the)g(other)h(hand,)g
+-(has)f(the)g Fn(else)h Fo(pointer)g(directed)h(to)448
+-3192 y(the)35 b(arithmetic)h(zero)f(function.)64 b(One)34
+-b(should)i(ne)n(v)o(er)f(mix)f(the)h(tw)o(o)f(types)h(of)f(v)n
+-(ariables.)448 3304 y(BDD)k(v)n(ariables)k(should)g(be)e(used)h(when)f
+-(manipulating)j(BDDs,)f(and)e(ADD)e(v)n(ariables)448
+-3417 y(should)c(be)e(used)h(when)f(manipulating)j(ADDs.)53
+-b(Three)33 b(functions)h(are)f(pro)o(vided)h(to)e(cre-)448
+-3530 y(ate)24 b(BDD)e(v)n(ariables:)p Black 585 3718
+-a Fm(\017)p Black 46 w Fn(Cudd)p 877 3718 V 33 w(bddIthV)-10
+-b(ar)r Fo(:)40 b(Returns)29 b(the)f(projection)j(function)f(with)e
+-(inde)o(x)h Fk(i)p Fo(.)41 b(If)28 b(the)g(func-)676
+-3831 y(tion)c(does)g(not)g(e)o(xist,)g(it)f(is)g(created.)p
+-Black 585 4018 a Fm(\017)p Black 46 w Fn(Cudd)p 877 4018
+-V 33 w(bddNe)o(wV)-10 b(ar)r Fo(:)49 b(Returns)35 b(a)d(ne)n(w)h
+-(projection)j(function,)i(whose)c(inde)o(x)g(is)f(the)676
+-4131 y(lar)n(gest)25 b(inde)o(x)f(in)g(use)g(at)f(the)h(time)f(of)h
+-(the)g(call,)f(plus)i(1.)p Black 585 4319 a Fm(\017)p
+-Black 46 w Fn(Cudd)p 877 4319 V 33 w(bddNe)o(wV)-10 b(arAtLe)o(vel)p
+-Fo(:)50 b(Similar)34 b(to)f Fn(Cudd)p 2283 4319 V 34
+-w(bddNe)o(wV)-10 b(ar)r Fo(.)59 b(In)34 b(addition)i(it)d(al-)676
+-4432 y(lo)n(ws)27 b(to)h(specify)i(the)e(position)i(in)e(the)g(v)n
+-(ariable)h(order)g(at)f(which)g(the)g(ne)n(w)g(v)n(ariable)676
+-4545 y(should)i(be)f(inserted.)47 b(In)29 b(contrast,)j
+-Fn(Cudd)p 2060 4545 V 33 w(bddNe)o(wV)-10 b(ar)32 b Fo(adds)d(the)h(ne)
+-n(w)e(v)n(ariable)i(at)676 4658 y(the)23 b(end)h(of)g(the)g(order)-5
+-b(.)448 4845 y(The)33 b(analogous)j(functions)g(for)d(ADDs)f(are)i
+-Fn(Cudd)p 2142 4845 V 33 w(addIthV)-10 b(ar)r Fo(,)38
+-b Fn(Cudd)p 2795 4845 V 33 w(addNe)o(wV)-10 b(ar)r Fo(,)36
+-b(and)448 4958 y Fn(Cudd)p 649 4958 V 34 w(addNe)o(wV)-10
+-b(arAtLe)o(vel)p Fo(.)p Black 1897 5225 a(11)p Black
+-eop end
+-%%Page: 12 12
+-TeXDict begin 12 11 bop Black Black 448 573 a Fp(3.6.2)92
+-b(New)22 b(ZDD)g(V)-8 b(ariables)448 747 y Fo(Unlik)o(e)33
+-b(the)f(projection)i(functions)g(of)e(BDDs)e(and)i(ADDs,)g(the)g
+-(projection)i(functions)g(of)448 860 y(ZDDs)20 b(ha)n(v)o(e)j(diagrams)
+-g(with)e Fk(n)13 b Fl(+)g(1)22 b Fo(nodes,)h(where)f
+-Fk(n)e Fo(is)i(the)f(number)i(of)f(v)n(ariables.)30 b(There-)448
+-973 y(fore)g(the)f(ZDDs)e(of)h(the)h(projection)j(functions)f(change)g
+-(when)d(ne)n(w)h(v)n(ariables)h(are)f(added.)448 1086
+-y(This)21 b(will)g(be)h(discussed)i(in)d(Section)h(3.9.)28
+-b(Here)21 b(we)g(assume)h(that)g(the)g(number)g(of)f(v)n(ariables)448
+-1199 y(is)j(\002x)o(ed.)k(The)23 b(ZDD)f(of)h(the)h Fk(i)p
+-Fo(-th)g(projection)i(function)g(is)d(returned)j(by)e
+-Fn(Cudd)p 2965 1199 28 4 v 33 w(zddIthV)-10 b(ar)r Fo(.)448
+-1448 y Fi(3.7)99 b(Basic)25 b(BDD)h(Manipulation)448
+-1622 y Fo(Common)34 b(manipulations)j(of)d(BDDs)e(can)i(be)g
+-(accomplished)j(by)d(calling)h Fn(Cudd)p 3153 1622 V
+-34 w(bddIte)p Fo(.)448 1735 y(This)19 b(function)i(tak)o(es)e(three)h
+-(BDDs,)d Fk(f)10 b Fo(,)18 b Fk(g)s Fo(,)h(and)g Fk(h)p
+-Fo(,)g(as)g(ar)n(guments)i(and)e(computes)h Fk(f)12 b
+-Fm(\001)r Fk(g)5 b Fl(+)r Fk(f)3311 1702 y Fd(0)3335
+-1735 y Fm(\001)r Fk(h)p Fo(.)448 1848 y(Lik)o(e)29 b(all)g(the)g
+-(functions)j(that)d(create)h(ne)n(w)f(BDDs)e(or)i(ADDs,)f
+-Fn(Cudd)p 2698 1848 V 34 w(bddIte)i Fo(returns)h(a)d(re-)448
+-1961 y(sult)j(that)g(must)f(be)g(e)o(xplicitly)i(referenced)h(by)d(the)
+-h(caller)-5 b(.)49 b Fn(Cudd)p 2609 1961 V 34 w(bddIte)32
+-b Fo(can)e(be)g(used)h(to)448 2074 y(implement)i(all)e(tw)o(o-ar)n
+-(gument)k(boolean)e(functions.)55 b(Ho)n(we)n(v)o(er)l(,)33
+-b(the)f(package)i(also)e(pro-)448 2187 y(vides)24 b Fn(Cudd)p
+-863 2187 V 33 w(bddAnd)i Fo(as)c(well)g(as)g(the)h(other)g(tw)o
+-(o-operand)i(boolean)f(functions,)h(which)d(are)448 2300
+-y(slightly)32 b(more)f(ef)n(\002cient)f(when)h(a)e(tw)o(o-operand)k
+-(function)f(is)e(called)i(for)-5 b(.)48 b(The)30 b(follo)n(wing)448
+-2413 y(fragment)24 b(of)f(code)h(illustrates)h(ho)n(w)d(to)h(b)n(uild)h
+-(the)f(BDD)e(for)h(the)h(function)i Fk(f)35 b Fl(=)25
+-b Fk(x)3101 2380 y Fd(0)3101 2436 y Fc(0)3140 2413 y
+-Fk(x)3192 2380 y Fd(0)3192 2436 y Fc(1)3232 2413 y Fk(x)3284
+-2380 y Fd(0)3284 2436 y Fc(2)3323 2413 y Fk(x)3375 2380
+-y Fd(0)3375 2436 y Fc(3)3414 2413 y Fo(.)p Black Black
+-448 2600 a Fh(DdManager)51 b(*manager;)448 2713 y(DdNode)h(*f,)h(*var,)
+-g(*tmp;)448 2826 y(int)h(i;)448 3052 y(...)448 3278 y(f)g(=)h
+-(Cudd_ReadOne\(m)o(an)o(ag)o(er)o(\);)448 3391 y(Cudd_Ref\(f\);)448
+-3504 y(for)f(\(i)f(=)h(3;)g(i)g(>=)g(0;)f(i--\))g({)667
+-3616 y(var)g(=)h(Cudd_bddIthVar)o(\(m)o(ana)o(ge)o(r,)o(i\))o(;)667
+-3729 y(tmp)f(=)h(Cudd_bddAnd\(ma)o(na)o(ger)o(,C)o(ud)o(d_)o(No)o(t\(v)
+-o(ar)o(\),)o(f\))o(;)667 3842 y(Cudd_Ref\(tmp\);)667
+-3955 y(Cudd_Recursive)o(De)o(re)o(f\()o(ma)o(nag)o(er)o(,f)o(\);)667
+-4068 y(f)g(=)g(tmp;)448 4181 y(})448 4369 y Fo(This)24
+-b(e)o(xample)g(illustrates)i(the)e(follo)n(wing)h(points:)p
+-Black 585 4556 a Fm(\017)p Black 46 w Fo(Intermediate)40
+-b(results)g(must)d(be)h(\223referenced\224)k(and)c(\223dereferenced.)-6
+-b(\224)76 b(Ho)n(we)n(v)o(er)l(,)676 4669 y Fh(var)25
+-b Fo(is)j(a)f(projection)k(function,)g(and)d(its)g(reference)i(count)f
+-(is)f(al)o(w)o(ays)g(greater)i(than)676 4782 y(0.)e(Therefore,)d(there)
+-f(is)g(no)f(call)h(to)g Fn(Cudd)p 2026 4782 V 33 w(Ref)13
+-b Fo(.)p Black 1897 5225 a(12)p Black eop end
+-%%Page: 13 13
+-TeXDict begin 13 12 bop Black Black Black 585 573 a Fm(\017)p
+-Black 46 w Fo(The)24 b(ne)n(w)g Fh(f)f Fo(must)i(be)f(assigned)j(to)e
+-(a)f(temporary)j(v)n(ariable)f(\()p Fh(tmp)d Fo(in)h(this)h(e)o
+-(xample\).)676 686 y(If)c(the)g(result)i(of)e Fn(Cudd)p
+-1408 686 28 4 v 34 w(bddAnd)k Fo(were)c(assigned)i(directly)h(to)d
+-Fh(f)p Fo(,)f(the)i(old)f Fh(f)f Fo(w)o(ould)i(be)676
+-799 y(lost,)h(and)h(there)h(w)o(ould)f(be)f(no)h(w)o(ay)f(to)h(free)g
+-(its)f(nodes.)p Black 585 983 a Fm(\017)p Black 46 w
+-Fo(The)g(statement)i Fh(f)54 b(=)g(tmp)21 b Fo(has)j(the)g(same)g(ef)n
+-(fect)g(as:)p Black Black 894 1197 a Fh(f)54 b(=)g(tmp;)894
+-1310 y(Cudd_Ref\(f\);)894 1423 y(Cudd_Recursive)o(De)o(ref)o(\(m)o(an)o
+-(ag)o(er)o(,tm)o(p\))o(;)676 1637 y Fo(b)n(ut)27 b(is)f(more)h(ef)n
+-(\002cient.)39 b(The)26 b(reference)j(is)d(\223passed\224)j(from)e
+-Fh(tmp)d Fo(to)j Fh(f)p Fo(,)f(and)h Fh(tmp)d Fo(is)676
+-1750 y(no)n(w)f(ready)h(to)g(be)f(reutilized.)p Black
+-585 1934 a Fm(\017)p Black 46 w Fo(It)31 b(is)g(normally)h(more)g(ef)n
+-(\002cient)g(to)f(b)n(uild)h(BDDs)e(\223bottom-up.)-6
+-b(\224)54 b(This)31 b(is)g(why)g(the)676 2047 y(loop)22
+-b(goes)g(from)f(3)g(to)g(0.)28 b(Notice,)22 b(ho)n(we)n(v)o(er)l(,)g
+-(that)g(after)g(v)n(ariable)h(reordering,)h(higher)676
+-2160 y(inde)o(x)30 b(does)h(not)f(necessarily)i(mean)e(\223closer)h(to)
+-f(the)g(bottom.)-6 b(\224)48 b(Of)29 b(course,)j(in)e(this)676
+-2273 y(simple)24 b(e)o(xample,)g(ef)n(\002cienc)o(y)g(is)g(not)g(a)f
+-(concern.)p Black 585 2457 a Fm(\017)p Black 46 w Fo(Had)31
+-b(we)g(w)o(anted)h(to)g(conjoin)i(the)e(v)n(ariables)h(in)f(a)f
+-(bottom-up)j(f)o(ashion)g(e)n(v)o(en)e(after)676 2569
+-y(reordering,)26 b(we)c(should)j(ha)n(v)o(e)f(used)g
+-Fn(Cudd)p 2074 2569 V 34 w(ReadIn)l(vP)-7 b(erm)p Fo(.)30
+-b(One)23 b(has)g(to)h(be)f(careful,)676 2682 y(though,)28
+-b(to)e(\002x)f(the)i(order)g(of)f(conjunction)j(before)f(entering)g
+-(the)e(loop.)38 b(Otherwise,)676 2795 y(if)33 b(reordering)j(tak)o(es)e
+-(place,)i(it)d(is)h(possible)h(to)e(use)h(one)f(v)n(ariable)i(twice)f
+-(and)g(skip)676 2908 y(another)25 b(v)n(ariable.)448
+-3156 y Fi(3.8)99 b(Basic)25 b(ADD)g(Manipulation)448
+-3330 y Fo(The)f(most)f(common)h(w)o(ay)g(to)f(manipulate)j(ADDs)c(is)i
+-(via)g Fn(Cudd)p 2521 3330 V 34 w(addApply)p Fo(.)31
+-b(This)23 b(function)448 3443 y(can)35 b(apply)g(a)e(wide)h(v)n(ariety)
+-h(of)f(operators)i(to)e(a)f(pair)h(of)g(ADDs.)58 b(Among)34
+-b(the)g(a)n(v)n(ailable)448 3556 y(operators)27 b(are)d(addition,)i
+-(multiplication,)h(di)n(vision,)f(minimum,)d(maximum,)h(and)g(boolean)
+-448 3669 y(operators)i(that)e(w)o(ork)g(on)g(ADDs)e(whose)i(lea)n(v)o
+-(es)g(are)g(restricted)i(to)e(0)f(and)h(1)f(\(0-1)h(ADDs\).)589
+-3782 y(The)g(follo)n(wing)h(fragment)g(of)f(code)h(illustrates)h(ho)n
+-(w)d(to)h(b)n(uild)h(the)f(ADD)e(for)i(the)g(func-)448
+-3894 y(tion)g Fk(f)35 b Fl(=)25 b(5)p Fk(x)885 3908 y
+-Fc(0)925 3894 y Fk(x)977 3908 y Fc(1)1016 3894 y Fk(x)1068
+-3908 y Fc(2)1108 3894 y Fk(x)1160 3908 y Fc(3)1199 3894
+-y Fo(.)p Black Black 448 4073 a Fh(DdManager)51 b(*manager;)448
+-4186 y(DdNode)h(*f,)h(*var,)g(*tmp;)448 4299 y(int)h(i;)448
+-4525 y(...)448 4751 y(f)g(=)h(Cudd_addConst\()o(ma)o(na)o(ge)o(r,)o
+-(5\);)448 4863 y(Cudd_Ref\(f\);)448 4976 y(for)f(\(i)f(=)h(3;)g(i)g(>=)
+-g(0;)f(i--\))g({)p Black 1897 5225 a Fo(13)p Black eop
+-end
+-%%Page: 14 14
+-TeXDict begin 14 13 bop Black Black 667 573 a Fh(var)53
+-b(=)h(Cudd_addIthVar)o(\(m)o(ana)o(ge)o(r,)o(i\))o(;)667
+-686 y(Cudd_Ref\(var\);)667 799 y(tmp)f(=)h(Cudd_addApply\()o(ma)o(nag)o
+-(er)o(,C)o(ud)o(d_)o(add)o(Ti)o(me)o(s,)o(va)o(r,f)o(\);)667
+-912 y(Cudd_Ref\(tmp\);)667 1024 y(Cudd_Recursive)o(De)o(re)o(f\()o(ma)o
+-(nag)o(er)o(,f)o(\);)667 1137 y(Cudd_Recursive)o(De)o(re)o(f\()o(ma)o
+-(nag)o(er)o(,v)o(ar)o(\);)667 1250 y(f)g(=)g(tmp;)448
+-1363 y(})448 1538 y Fo(This)25 b(e)o(xample,)i(contrasted)h(to)d(the)g
+-(e)o(xample)h(of)g(BDD)d(manipulation,)28 b(illustrates)g(the)e(fol-)
+-448 1651 y(lo)n(wing)e(points:)p Black 585 1826 a Fm(\017)p
+-Black 46 w Fo(The)d(ADD)f(projection)25 b(function)f(are)e(not)g
+-(maintained)i(by)e(the)g(manager)-5 b(.)30 b(It)21 b(is)h(there-)676
+-1939 y(fore)i(necessary)i(to)d(reference)j(and)e(dereference)j(them.)p
+-Black 585 2122 a Fm(\017)p Black 46 w Fo(The)17 b(product)j(of)e(tw)o
+-(o)g(ADDs)e(is)i(computed)i(by)e(calling)i Fn(Cudd)p
+-2652 2122 28 4 v 34 w(addApply)g Fo(with)d Fn(Cudd)p
+-3426 2122 V 34 w(addT)-5 b(imes)676 2235 y Fo(as)19 b(parameter)-5
+-b(.)29 b(There)20 b(is)f(no)h(\223apply\224)i(function)f(for)f(BDDs,)f
+-(because)i Fn(Cudd)p 3123 2235 V 34 w(bddAnd)676 2348
+-y Fo(and)g Fn(Cudd)p 1028 2348 V 34 w(bddXor)i Fo(plus)f
+-(complementation)i(are)d(suf)n(\002cient)h(to)f(implement)h(all)e(tw)o
+-(o-)676 2461 y(ar)n(gument)25 b(boolean)h(functions.)448
+-2707 y Fi(3.9)99 b(Basic)25 b(ZDD)h(Manipulation)448
+-2882 y Fo(ZDDs)21 b(are)i(often)h(generated)h(by)e(con)l(v)o(erting)j
+-(e)o(xisting)e(BDDs.)j(\(See)c(Section)g(3.11.\))29 b(Ho)n(w-)448
+-2995 y(e)n(v)o(er)l(,)20 b(it)e(is)g(also)h(possible)h(to)e(b)n(uild)i
+-(ZDDs)d(by)h(applying)j(boolean)f(operators)h(to)d(other)h(ZDDs,)448
+-3108 y(starting)29 b(from)e(constants)i(and)e(projection)j(functions.)
+-41 b(The)26 b(follo)n(wing)j(fragment)f(of)e(code)448
+-3220 y(illustrates)34 b(ho)n(w)d(to)h(b)n(uild)g(the)g(ZDD)d(for)j(the)
+-g(function)h Fk(f)49 b Fl(=)40 b Fk(x)2562 3187 y Fd(0)2562
+-3244 y Fc(0)2627 3220 y Fl(+)26 b Fk(x)2776 3187 y Fd(0)2776
+-3244 y Fc(1)2841 3220 y Fl(+)g Fk(x)2990 3187 y Fd(0)2990
+-3244 y Fc(2)3056 3220 y Fl(+)f Fk(x)3204 3187 y Fd(0)3204
+-3244 y Fc(3)3244 3220 y Fo(.)51 b(W)-7 b(e)448 3333 y(assume)25
+-b(that)g(the)f(four)h(v)n(ariables)h(already)f(e)o(xist)g(in)f(the)g
+-(manager)h(when)g(the)f(ZDD)e(for)i Fk(f)32 b Fo(is)448
+-3446 y(b)n(uilt.)e(Note)24 b(the)f(use)h(of)g(De)e(Mor)n(gan')-5
+-b(s)26 b(la)o(w)-6 b(.)p Black Black 448 3621 a Fh(DdManager)51
+-b(*manager;)448 3734 y(DdNode)h(*f,)h(*var,)g(*tmp;)448
+-3847 y(int)h(i;)448 4073 y(manager)e(=)i(Cudd_Init\(0,4,)o(CU)o(DD_)o
+-(UN)o(IQ)o(UE)o(_S)o(LOT)o(S,)667 4186 y(CUDD_CACHE_SLO)o(TS)o(,0)o
+-(\);)448 4299 y(...)448 4525 y(tmp)g(=)g(Cudd_ReadZddOn)o(e\()o(ma)o
+-(na)o(ger)o(,0)o(\);)448 4638 y(Cudd_Ref\(tmp\);)448
+-4751 y(for)g(\(i)f(=)h(3;)g(i)g(>=)g(0;)f(i--\))g({)667
+-4863 y(var)g(=)h(Cudd_zddIthVar)o(\(m)o(ana)o(ge)o(r,)o(i\))o(;)667
+-4976 y(Cudd_Ref\(var\);)p Black 1897 5225 a Fo(14)p Black
+-eop end
+-%%Page: 15 15
+-TeXDict begin 15 14 bop Black Black 667 573 a Fh(f)54
+-b(=)g(Cudd_zddInters)o(ec)o(t\()o(man)o(ag)o(er)o(,v)o(ar)o(,tm)o(p\))o
+-(;)667 686 y(Cudd_Ref\(f\);)667 799 y(Cudd_Recursive)o(De)o(re)o(fZ)o
+-(dd)o(\(ma)o(na)o(ge)o(r,)o(tm)o(p\);)667 912 y(Cudd_Recursive)o(De)o
+-(re)o(fZ)o(dd)o(\(ma)o(na)o(ge)o(r,)o(va)o(r\);)667 1024
+-y(tmp)f(=)h(f;)448 1137 y(})448 1250 y(f)g(=)h(Cudd_zddDiff\(m)o(an)o
+-(ag)o(er)o(,C)o(udd)o(_R)o(ea)o(dZ)o(dd)o(One)o(\(m)o(an)o(ag)o(er)o
+-(,0\))o(,t)o(mp)o(\);)448 1363 y(Cudd_Ref\(f\);)448 1476
+-y(Cudd_RecursiveD)o(ere)o(fZ)o(dd)o(\(m)o(an)o(age)o(r,)o(tm)o(p\))o(;)
+-448 1664 y Fo(This)24 b(e)o(xample)g(illustrates)i(the)e(follo)n(wing)h
+-(points:)p Black 585 1851 a Fm(\017)p Black 46 w Fo(The)e(projection)k
+-(functions)f(are)e(referenced,)j(because)f(the)o(y)e(are)g(not)g
+-(maintained)i(by)676 1964 y(the)d(manager)-5 b(.)p Black
+-585 2152 a Fm(\017)p Black 46 w Fo(Complementation)26
+-b(is)d(obtained)j(by)e(subtracting)i(from)e(the)g(constant)h(1)f
+-(function.)p Black 585 2340 a Fm(\017)p Black 46 w Fo(The)f(result)h
+-(of)g Fn(Cudd)p 1364 2340 28 4 v 34 w(ReadZddOne)g Fo(does)g(not)g
+-(require)h(referencing.)448 2527 y(CUDD)31 b(pro)o(vides)j(functions)i
+-(for)d(the)g(manipulation)i(of)e(co)o(v)o(ers)g(represented)j(by)d
+-(ZDDs.)448 2640 y(F)o(or)40 b(instance,)47 b Fn(Cudd)p
+-1179 2640 V 33 w(zddIsop)c Fo(b)n(uilds)f(a)e(ZDD)f(representing)44
+-b(an)c(irredundant)k(sum)c(of)448 2753 y(products)31
+-b(for)e(the)g(incompletely)i(speci\002ed)f(function)h(de\002ned)e(by)f
+-(the)h(tw)o(o)f(BDDs)f Fk(L)h Fo(and)448 2866 y Fk(U)10
+-b Fo(.)45 b Fn(Cudd)p 789 2866 V 33 w(zddW)-8 b(eakDiv)31
+-b Fo(performs)f(the)f(weak)g(di)n(vision)i(of)e(tw)o(o)g(co)o(v)o(ers)h
+-(gi)n(v)o(en)f(as)g(ZDDs.)448 2979 y(These)c(functions)h(e)o(xpect)f
+-(the)f(tw)o(o)g(ZDD)e(v)n(ariables)k(corresponding)i(to)c(the)g(tw)o(o)
+-g(literals)h(of)448 3092 y(the)30 b(function)j(v)n(ariable)e(to)f(be)g
+-(adjacent.)50 b(One)29 b(has)h(to)g(create)h(v)n(ariable)h(groups)f
+-(\(see)g(Sec-)448 3205 y(tion)23 b(3.14\))g(for)g(reordering)i(of)d
+-(the)h(ZDD)e(v)n(ariables)j(to)e(w)o(ork.)29 b(BDD)20
+-b(automatic)k(reordering)448 3318 y(is)31 b(safe)h(e)n(v)o(en)f
+-(without)h(groups:)45 b(If)31 b(realignment)i(of)e(ZDD)e(and)i(ADD/BDD)
+-d(v)n(ariables)33 b(is)448 3430 y(requested)26 b(\(see)e(Section)h
+-(3.15\))f(groups)h(will)e(be)h(k)o(ept)g(adjacent.)448
+-3680 y Fi(3.10)99 b(Con)l(v)o(erting)26 b(ADDs)e(to)h(BDDs)g(and)h(V)l
+-(ice)f(V)-10 b(ersa)448 3854 y Fo(Se)n(v)o(eral)25 b(procedures)i(are)d
+-(pro)o(vided)i(to)e(con)l(v)o(ert)i(ADDs)d(to)h(BDDs,)f(according)j(to)
+-e(dif)n(ferent)448 3967 y(criteria.)29 b(\()p Fn(Cudd)p
+-986 3967 V 34 w(addBddP)-7 b(attern)p Fo(,)21 b Fn(Cudd)p
+-1805 3967 V 34 w(addBddInterval)p Fo(,)i(and)18 b Fn(Cudd)p
+-2795 3967 V 34 w(addBddThr)m(eshold)r Fo(.\))448 4080
+-y(The)34 b(con)l(v)o(ersion)i(from)e(BDDs)e(to)h(ADDs)g(\()p
+-Fn(Cudd)p 2119 4080 V 34 w(BddT)-8 b(oAdd)r Fo(\))34
+-b(is)f(based)i(on)f(the)g(simple)448 4193 y(principle)26
+-b(of)e(mapping)h(the)f(logical)i(0)d(and)h(1)g(on)f(the)h(arithmetic)i
+-(0)d(and)i(1.)k(It)23 b(is)h(also)g(possi-)448 4306 y(ble)g(to)g(con)l
+-(v)o(ert)h(an)f(ADD)e(with)h(inte)o(ger)i(v)n(alues)g(\(more)f
+-(precisely)-6 b(,)26 b(\003oating)e(point)h(numbers)448
+-4418 y(with)f(0)f(fractional)j(part\))e(to)g(an)f(array)i(of)e(BDDs)f
+-(by)i(repeatedly)i(calling)f Fn(Cudd)p 3012 4418 V 34
+-w(addIthBit)r Fo(.)448 4668 y Fi(3.11)99 b(Con)l(v)o(erting)26
+-b(BDDs)f(to)g(ZDDs)g(and)g(V)l(ice)g(V)-10 b(ersa)448
+-4842 y Fo(Man)o(y)22 b(applications)k(\002rst)21 b(b)n(uild)j(a)d(set)h
+-(of)g(BDDs)f(and)h(then)h(deri)n(v)o(e)g(ZDDs)d(from)i(the)g(BDDs.)448
+-4955 y(These)i(applications)j(should)e(create)f(the)g(manager)g(with)f
+-(0)g(ZDD)e(v)n(ariables)26 b(and)e(create)g(the)p Black
+-1897 5225 a(15)p Black eop end
+-%%Page: 16 16
+-TeXDict begin 16 15 bop Black Black 448 573 a Fo(BDDs.)40
+-b(Then)27 b(the)o(y)h(should)h(call)f Fn(Cudd)p 1762
+-573 28 4 v 34 w(zddV)-10 b(ar)o(sF)-5 b(r)l(omBddV)-10
+-b(ar)o(s)30 b Fo(to)d(create)i(the)f(necessary)448 686
+-y(ZDD)j(v)n(ariables\227whose)36 b(number)e(is)e(lik)o(ely)i(to)f(be)g
+-(kno)n(wn)g(once)g(the)g(BDDs)e(are)i(a)n(v)n(ail-)448
+-799 y(able.)g(This)24 b(approach)j(eliminates)f(the)f(dif)n
+-(\002culties)i(that)e(arise)g(when)g(the)f(number)i(of)e(ZDD)448
+-912 y(v)n(ariables)i(changes)f(while)f(ZDDs)e(are)i(being)h(b)n(uilt.)
+-589 1024 y(The)h(simplest)h(con)l(v)o(ersion)h(from)e(BDDs)e(to)h(ZDDs)
+-f(is)i(a)f(simple)h(change)h(of)f(represen-)448 1137
+-y(tation,)39 b(which)c(preserv)o(es)i(the)f(functions.)65
+-b(Simply)35 b(put,)j(gi)n(v)o(en)d(a)g(BDD)e(for)i Fk(f)10
+-b Fo(,)36 b(a)e(ZDD)448 1250 y(for)g Fk(f)42 b Fo(is)34
+-b(requested.)61 b(In)34 b(this)g(case)h(the)e(correspondence)39
+-b(between)c(the)e(BDD)f(v)n(ariables)448 1363 y(and)g(ZDD)e(v)n
+-(ariables)j(is)e(one-to-one.)55 b(Hence,)34 b Fn(Cudd)p
+-2232 1363 V 34 w(zddV)-10 b(ar)o(sF)-5 b(r)l(omBddV)-10
+-b(ar)o(s)33 b Fo(should)g(be)448 1476 y(called)c(with)e(the)g
+-Fn(multiplicity)j Fo(parameter)f(equal)f(to)g(1.)39 b(The)27
+-b(con)l(v)o(ersion)j(proper)f(can)f(then)448 1589 y(be)37
+-b(performed)h(by)f(calling)h Fn(Cudd)p 1595 1589 V 33
+-w(zddP)-7 b(ortF)i(r)l(omBdd)r Fo(.)69 b(The)36 b(in)l(v)o(erse)j
+-(transformation)g(is)448 1702 y(performed)26 b(by)d Fn(Cudd)p
+-1164 1702 V 34 w(zddP)-7 b(ortT)f(oBdd)r Fo(.)589 1815
+-y(ZDDs)28 b(are)i(quite)h(often)f(used)h(for)e(the)h(representation)k
+-(of)c Fn(co)o(ver)o(s)p Fo(.)48 b(This)29 b(is)h(normally)448
+-1928 y(done)36 b(by)g(associating)i(tw)o(o)d(ZDD)e(v)n(ariables)38
+-b(to)d(each)h(v)n(ariable)h(of)e(the)g(function.)66 b(\(And)448
+-2041 y(hence,)28 b(typically)-6 b(,)28 b(to)e(each)g(BDD)e(v)n
+-(ariable.\))38 b(One)25 b(ZDD)f(v)n(ariable)j(is)f(associated)i(with)e
+-(the)448 2154 y(positi)n(v)o(e)35 b(literal)f(of)f(the)g(BDD)e(v)n
+-(ariable,)37 b(while)d(the)f(other)h(ZDD)d(v)n(ariable)k(is)d
+-(associated)448 2267 y(with)i(the)f(ne)o(gati)n(v)o(e)h(literal.)60
+-b(A)32 b(call)i(to)f Fn(Cudd)p 1980 2267 V 34 w(zddV)-10
+-b(ar)o(sF)-5 b(r)l(omBddV)-10 b(ar)o(s)36 b Fo(with)d
+-Fn(multiplicity)448 2379 y Fo(equal)25 b(to)e(2)h(will)f(associate)j
+-(to)d(BDD)f(v)n(ariable)j Fk(i)e Fo(the)h(tw)o(o)f(ZDD)f(v)n(ariables)j
+-Fl(2)p Fk(i)f Fo(and)g Fl(2)p Fk(i)d Fl(+)f(1)p Fo(.)589
+-2492 y(If)j(a)f(BDD)f(v)n(ariable)j(group)g(tree)f(e)o(xists)h(when)f
+-Fn(Cudd)p 2300 2492 V 34 w(zddV)-10 b(ar)o(sF)-5 b(r)l(omBddV)-10
+-b(ar)o(s)25 b Fo(is)d(called)448 2605 y(\(see)29 b(Section)f(3.13\))g
+-(the)g(function)i(generates)g(a)e(ZDD)d(v)n(ariable)30
+-b(group)f(tree)f(consistent)i(to)448 2718 y(it.)57 b(In)33
+-b(an)o(y)h(case,)h(all)f(the)f(ZDD)e(v)n(ariables)k(deri)n(v)o(ed)g
+-(from)e(the)g(same)g(BDD)e(v)n(ariable)k(are)448 2831
+-y(clustered)26 b(into)e(a)f(group.)589 2944 y(If)i(the)f(ZDD)e(for)j
+-Fk(f)33 b Fo(is)24 b(created)i(and)f(later)g(a)f(ne)n(w)f(ZDD)g(v)n
+-(ariable)j(is)e(added)h(to)g(the)f(man-)448 3057 y(ager)l(,)f(the)e
+-(function)i(represented)i(by)c(the)h(e)o(xisting)g(ZDD)e(changes.)29
+-b(Suppose,)23 b(for)e(instance,)448 3170 y(that)26 b(tw)o(o)f(v)n
+-(ariables)i(are)e(initially)i(created,)g(and)e(that)h(the)f(ZDD)e(for)i
+-Fk(f)38 b Fl(=)27 b Fk(x)2896 3184 y Fc(0)2957 3170 y
+-Fl(+)21 b Fk(x)3101 3184 y Fc(1)3165 3170 y Fo(is)j(b)n(uilt.)448
+-3283 y(If)33 b(a)g(third)h(v)n(ariable)h(is)e(added,)k(say)c
+-Fk(x)1714 3297 y Fc(2)1753 3283 y Fo(,)i(then)f(the)f(ZDD)e(represents)
+-36 b Fk(g)47 b Fl(=)c(\()p Fk(x)3054 3297 y Fc(0)3121
+-3283 y Fl(+)27 b Fk(x)3271 3297 y Fc(1)3310 3283 y Fl(\))p
+-Fk(x)3397 3250 y Fd(0)3397 3306 y Fc(2)448 3396 y Fo(instead.)36
+-b(This)25 b(change)i(in)e(function)j(ob)o(viously)g(applies)f(re)o
+-(gardless)g(of)e(what)g(use)h(is)f(made)448 3509 y(of)j(the)g(ZDD.)39
+-b(Ho)n(we)n(v)o(er)l(,)29 b(if)e(the)h(ZDD)e(is)h(used)i(to)e
+-(represent)k(a)c(co)o(v)o(er,)i(the)f(co)o(v)o(er)g(itself)g(is)448
+-3621 y(not)i(changed)h(by)e(the)g(addition)j(of)c(ne)n(w)h(v)n
+-(ariable.)47 b(\(What)29 b(changes)i(is)e(the)g(characteristic)448
+-3734 y(function)d(of)d(the)h(co)o(v)o(er)-5 b(.\))448
+-3984 y Fi(3.12)99 b(V)-9 b(ariable)25 b(Reordering)h(f)n(or)e(BDDs)h
+-(and)h(ADDs)448 4158 y Fo(The)20 b(CUDD)d(package)22
+-b(pro)o(vides)g(a)d(rich)h(set)g(of)g(dynamic)h(reordering)i
+-(algorithms.)29 b(Some)19 b(of)448 4271 y(them)24 b(are)g(slight)g(v)n
+-(ariations)i(of)e(e)o(xisting)h(techniques)i([16)q(,)22
+-b(6)q(,)g(2)q(,)g(10)q(,)h(15)q(,)f(11)q(];)h(some)h(others)448
+-4384 y(ha)n(v)o(e)h(been)f(de)n(v)o(eloped)i(speci\002cally)f(for)f
+-(this)g(package)i([14)q(,)c(13)q(].)589 4497 y(Reordering)33
+-b(af)n(fects)e(a)f(unique)i(table.)50 b(This)30 b(means)h(that)g(BDDs)e
+-(and)i(ADDs,)f(which)448 4609 y(share)36 b(the)g(same)f(unique)i(table)
+-f(are)f(simultaneously)k(reordered.)66 b(ZDDs,)36 b(on)f(the)g(other)
+-448 4722 y(hand,)22 b(are)f(reordered)i(separately)-6
+-b(.)31 b(In)20 b(the)h(follo)n(wing)h(we)e(discuss)i(the)f(reordering)i
+-(of)e(BDDs)448 4835 y(and)j(ADDs.)j(Reordering)f(for)e(ZDDs)e(is)h(the)
+-h(subject)h(of)f(Section)g(3.14.)p Black 1897 5225 a(16)p
+-Black eop end
+-%%Page: 17 17
+-TeXDict begin 17 16 bop Black Black 589 573 a Fo(Reordering)28
+-b(of)d(the)g(v)n(ariables)i(can)f(be)f(in)l(v)n(ok)o(ed)j(directly)f
+-(by)e(the)g(application)j(by)e(call-)448 686 y(ing)g
+-Fn(Cudd)p 790 686 28 4 v 34 w(ReduceHeap)p Fo(.)35 b(Or)24
+-b(it)h(can)h(be)f(automatically)k(triggered)e(by)e(the)h(package)h
+-(when)448 799 y(the)k(number)g(of)g(nodes)g(has)g(reached)h(a)e(gi)n(v)
+-o(en)h(threshold.)52 b(\(The)30 b(threshold)j(is)d(initialized)448
+-912 y(and)h(automatically)j(adjusted)f(after)e(each)h(reordering)h(by)e
+-(the)g(package.\))52 b(T)-7 b(o)30 b(enable)i(au-)448
+-1024 y(tomatic)c(dynamic)h(reordering)h(\(also)e(called)g
+-Fn(async)o(hr)l(onous)j Fo(dynamic)e(reordering)h(in)d(this)448
+-1137 y(document\))37 b(the)f(application)i(must)d(call)h
+-Fn(Cudd)p 2033 1137 V 34 w(A)n(utodynEnable)p Fo(.)66
+-b(Automatic)36 b(dynamic)448 1250 y(reordering)27 b(can)d(subsequently)
+-j(be)d(disabled)h(by)f(calling)h Fn(Cudd)p 2515 1250
+-V 34 w(A)n(utodynDisable)p Fo(.)589 1363 y(All)18 b(reordering)j
+-(methods)e(are)f(a)n(v)n(ailable)j(in)d(both)h(the)f(case)h(of)f
+-(direct)h(call)g(to)f Fn(Cudd)p 3238 1363 V 33 w(ReduceHeap)448
+-1476 y Fo(and)23 b(the)g(case)g(of)g(automatic)h(in)l(v)n(ocation.)32
+-b(F)o(or)21 b(man)o(y)i(methods,)h(the)e(reordering)k(procedure)448
+-1589 y(is)34 b(iterated)h(until)f(no)f(further)i(impro)o(v)o(ement)g
+-(is)e(obtained.)61 b(W)-7 b(e)32 b(call)i(these)g(methods)h(the)448
+-1702 y Fn(con)l(ver)m(ging)40 b Fo(methods.)68 b(When)37
+-b(constraints)i(are)e(imposed)g(on)g(the)f(relati)n(v)o(e)i(position)g
+-(of)448 1815 y(v)n(ariables)31 b(\(see)d(Section)h(3.13\))g(the)f
+-(reordering)j(methods)f(apply)f(inside)g(the)g(groups.)44
+-b(The)448 1928 y(groups)33 b(themselv)o(es)g(are)e(reordered)i(by)e
+-(sifting.)53 b(Each)31 b(method)h(is)e(identi\002ed)j(by)e(a)g(con-)448
+-2041 y(stant)24 b(of)f(the)h(enumerated)h(type)f Fn(Cudd)p
+-1700 2041 V 34 w(Reor)m(deringT)-7 b(ype)26 b Fo(de\002ned)e(in)f
+-Fn(cudd.h)h Fo(\(the)g(e)o(xternal)448 2154 y(header)h(\002le)e(of)h
+-(the)f(CUDD)f(package\):)p Black 448 2366 a Fp(CUDD)p
+-717 2366 V 32 w(REORDER)p 1206 2366 V 30 w(NONE:)p Black
+-44 w Fo(This)i(method)g(causes)h(no)f(reordering.)p Black
+-448 2554 a Fp(CUDD)p 717 2554 V 32 w(REORDER)p 1206 2554
+-V 30 w(SAME:)p Black 44 w Fo(If)18 b(passed)i(to)e Fn(Cudd)p
+-2196 2554 V 33 w(A)n(utodynEnable)p Fo(,)k(this)d(method)g(lea)n(v)o
+-(es)676 2667 y(the)f(current)i(method)f(for)f(automatic)i(reordering)h
+-(unchanged.)30 b(If)17 b(passed)j(to)e Fn(Cudd)p 3333
+-2667 V 34 w(ReduceHeap)p Fo(,)676 2780 y(this)24 b(method)g(causes)h
+-(the)f(current)h(method)g(for)e(automatic)j(reordering)g(to)d(be)h
+-(used.)p Black 448 2967 a Fp(CUDD)p 717 2967 V 32 w(REORDER)p
+-1206 2967 V 30 w(RANDOM:)p Black 44 w Fo(P)o(airs)17
+-b(of)h(v)n(ariables)j(are)d(randomly)i(chosen,)g(and)f(sw)o(apped)676
+-3080 y(in)29 b(the)h(order)-5 b(.)48 b(The)29 b(sw)o(ap)h(is)f
+-(performed)i(by)f(a)f(series)i(of)f(sw)o(aps)g(of)f(adjacent)j(v)n
+-(ari-)676 3193 y(ables.)c(The)18 b(best)h(order)g(among)g(those)h
+-(obtained)g(by)f(the)g(series)g(of)f(sw)o(aps)h(is)g(retained.)676
+-3306 y(The)24 b(number)i(of)f(pairs)h(chosen)h(for)e(sw)o(apping)i
+-(equals)f(the)f(number)h(of)f(v)n(ariables)i(in)676 3419
+-y(the)c(diagram.)p Black 448 3606 a Fp(CUDD)p 717 3606
+-V 32 w(REORDER)p 1206 3606 V 30 w(RANDOM)p 1657 3606
+-V 31 w(PIV)l(O)l(T:)p Black 45 w Fo(Same)17 b(as)h(CUDD)p
+-2615 3606 V 31 w(REORDER)p 3073 3606 V 30 w(RANDOM,)676
+-3719 y(b)n(ut)30 b(the)g(tw)o(o)f(v)n(ariables)j(are)d(chosen)j(so)d
+-(that)h(the)g(\002rst)g(is)f(abo)o(v)o(e)h(the)g(v)n(ariable)h(with)676
+-3832 y(the)d(lar)n(gest)h(number)g(of)e(nodes,)j(and)e(the)g(second)i
+-(is)d(belo)n(w)h(that)g(v)n(ariable.)43 b(In)28 b(case)676
+-3945 y(there)h(are)g(se)n(v)o(eral)h(v)n(ariables)h(tied)e(for)g(the)g
+-(maximum)g(number)g(of)g(nodes,)i(the)e(one)676 4058
+-y(closest)c(to)e(the)h(root)g(is)g(used.)p Black 448
+-4246 a Fp(CUDD)p 717 4246 V 32 w(REORDER)p 1206 4246
+-V 30 w(SIFT:)p Black 45 w Fo(This)g(method)h(is)g(an)f(implementation)k
+-(of)c(Rudell')-5 b(s)26 b(sifting)676 4359 y(algorithm)i([16)q(].)39
+-b(A)26 b(simpli\002ed)i(description)i(of)d(sifting)h(is)f(as)g(follo)n
+-(ws:)37 b(Each)27 b(v)n(ari-)676 4472 y(able)32 b(is)g(considered)j(in)
+-d(turn.)55 b(A)30 b(v)n(ariable)k(is)e(mo)o(v)o(ed)g(up)g(and)g(do)n
+-(wn)g(in)g(the)g(order)676 4584 y(so)26 b(that)h(it)e(tak)o(es)j(all)e
+-(possible)i(positions.)40 b(The)25 b(best)i(position)i(is)d
+-(identi\002ed)h(and)g(the)676 4697 y(v)n(ariable)e(is)e(returned)j(to)d
+-(that)h(position.)676 4848 y(In)30 b(reality)-6 b(,)34
+-b(things)e(are)f(a)g(bit)g(more)f(complicated.)53 b(F)o(or)30
+-b(instance,)35 b(there)c(is)g(a)f(limit)676 4961 y(on)g(the)g(number)h
+-(of)f(v)n(ariables)i(that)f(will)f(be)g(sifted.)49 b(This)30
+-b(limit)g(can)h(be)f(read)g(with)p Black 1897 5225 a(17)p
+-Black eop end
+-%%Page: 18 18
+-TeXDict begin 18 17 bop Black Black 676 573 a Fn(Cudd)p
+-877 573 28 4 v 33 w(ReadSiftMaxV)-10 b(ar)29 b Fo(and)d(set)f(with)g
+-Fn(Cudd)p 2195 573 V 34 w(SetSiftMaxV)-10 b(ar)r Fo(.)35
+-b(In)25 b(addition,)i(if)e(the)676 686 y(diagram)31 b(gro)n(ws)g(too)g
+-(much)g(while)g(mo)o(ving)h(a)e(v)n(ariable)j(up)d(or)h(do)n(wn,)h
+-(that)g(mo)o(v)o(e-)676 799 y(ment)37 b(is)f(terminated)j(before)g(the)
+-e(v)n(ariable)i(has)e(reached)i(one)e(end)g(of)g(the)h(order)-5
+-b(.)676 912 y(The)27 b(maximum)g(ratio)i(by)f(which)g(the)g(diagram)h
+-(is)e(allo)n(wed)i(to)e(gro)n(w)h(while)f(a)h(v)n(ari-)676
+-1024 y(able)35 b(is)f(being)h(sifted)h(can)f(be)f(read)h(with)g
+-Fn(Cudd)p 2292 1024 V 33 w(ReadMaxGr)l(owth)h Fo(and)f(set)f(with)676
+-1137 y Fn(Cudd)p 877 1137 V 33 w(SetMaxGr)l(owth)p Fo(.)p
+-Black 448 1318 a Fp(CUDD)p 717 1318 V 32 w(REORDER)p
+-1206 1318 V 30 w(SIFT)p 1439 1318 V 32 w(CONVERGE:)p
+-Black 43 w Fo(This)18 b(is)f(the)i(con)l(v)o(er)n(ging)i(v)n(ariant)f
+-(of)e(CUDD-)p 676 1431 V 703 1431 a(REORDER)p 1135 1431
+-V 30 w(SIFT)-7 b(.)p Black 448 1612 a Fp(CUDD)p 717 1612
+-V 32 w(REORDER)p 1206 1612 V 30 w(SYMM)p 1525 1612 V
+-31 w(SIFT:)p Black 45 w Fo(This)34 b(method)h(is)f(an)g(implementation)
+-i(of)e(sym-)676 1725 y(metric)27 b(sifting)i([14)q(].)39
+-b(It)26 b(is)h(similar)h(to)f(sifting,)i(with)e(one)h(addition:)38
+-b(V)-10 b(ariables)29 b(that)676 1837 y(become)23 b(adjacent)i(during)f
+-(sifting)g(are)f(tested)h(for)f(symmetry.)29 b(If)22
+-b(the)o(y)h(are)g(symmet-)676 1950 y(ric,)34 b(the)o(y)f(are)f(link)o
+-(ed)i(in)f(a)f(group.)56 b(Sifting)33 b(then)g(continues)i(with)e(a)e
+-(group)j(being)676 2063 y(mo)o(v)o(ed,)d(instead)h(of)f(a)e(single)j(v)
+-n(ariable.)51 b(After)30 b(symmetric)i(sifting)f(has)g(been)g(run,)676
+-2176 y Fn(Cudd)p 877 2176 V 33 w(SymmPr)l(o\002le)h Fo(can)g(be)g
+-(called)g(to)g(report)h(on)e(the)h(symmetry)g(groups)h(found.)676
+-2289 y(\(Both)23 b(positi)n(v)o(e)i(and)f(ne)o(gati)n(v)o(e)h
+-(symmetries)g(are)e(reported.\))p Black 448 2470 a Fp(CUDD)p
+-717 2470 V 32 w(REORDER)p 1206 2470 V 30 w(SYMM)p 1525
+-2470 V 31 w(SIFT)p 1759 2470 V 32 w(CONV:)p Black 45
+-w Fo(This)17 b(is)h(the)h(con)l(v)o(er)n(ging)i(v)n(ariant)f(of)e
+-(CUDD-)p 676 2583 V 703 2583 a(REORDER)p 1135 2583 V
+-30 w(SYMM)p 1444 2583 V 31 w(SIFT)-7 b(.)p Black 448
+-2763 a Fp(CUDD)p 717 2763 V 32 w(REORDER)p 1206 2763
+-V 30 w(GR)m(OUP)p 1563 2763 V 31 w(SIFT:)p Black 45 w
+-Fo(This)22 b(method)i(is)e(an)h(implementation)i(of)e(group)676
+-2876 y(sifting)c([13)r(].)26 b(It)18 b(is)g(similar)h(to)f(symmetric)i
+-(sifting,)g(b)n(ut)f(aggre)o(gation)i(is)d(not)h(restricted)676
+-2989 y(to)k(symmetric)i(v)n(ariables.)p Black 448 3170
+-a Fp(CUDD)p 717 3170 V 32 w(REORDER)p 1206 3170 V 30
+-w(GR)m(OUP)p 1563 3170 V 31 w(SIFT)p 1797 3170 V 32 w(CONV:)p
+-Black 44 w Fo(This)36 b(method)h(repeats)g(until)g(con)l(v)o(er)n(-)676
+-3283 y(gence)h(the)f(combination)j(of)d(CUDD)p 1938 3283
+-V 31 w(REORDER)p 2396 3283 V 30 w(GR)l(OUP)p 2732 3283
+-V 32 w(SIFT)e(and)i(CUDD-)p 676 3396 V 703 3396 a(REORDER)p
+-1135 3396 V 30 w(WINDO)m(W4.)p Black 448 3576 a Fp(CUDD)p
+-717 3576 V 32 w(REORDER)p 1206 3576 V 30 w(WINDO)-5 b(W2:)p
+-Black 46 w Fo(This)30 b(method)h(implements)h(the)e(windo)n(w)h(permu-)
+-676 3689 y(tation)j(approach)i(of)d(Fujita)h([8)q(])f(and)g(Ishiura)j
+-([10)q(].)57 b(The)33 b(size)h(of)g(the)f(windo)n(w)g(is)676
+-3802 y(2.)p Black 448 3983 a Fp(CUDD)p 717 3983 V 32
+-w(REORDER)p 1206 3983 V 30 w(WINDO)-5 b(W3:)p Black 46
+-w Fo(Similar)18 b(to)g(CUDD)p 2404 3983 V 31 w(REORDER)p
+-2862 3983 V 30 w(WINDO)m(W2,)f(b)n(ut)676 4096 y(with)23
+-b(a)g(windo)n(w)g(of)h(size)g(3.)p Black 448 4276 a Fp(CUDD)p
+-717 4276 V 32 w(REORDER)p 1206 4276 V 30 w(WINDO)-5 b(W4:)p
+-Black 46 w Fo(Similar)18 b(to)g(CUDD)p 2404 4276 V 31
+-w(REORDER)p 2862 4276 V 30 w(WINDO)m(W2,)f(b)n(ut)676
+-4389 y(with)23 b(a)g(windo)n(w)g(of)h(size)g(4.)p Black
+-448 4570 a Fp(CUDD)p 717 4570 V 32 w(REORDER)p 1206 4570
+-V 30 w(WINDO)-5 b(W2)p 1696 4570 V 33 w(CONV:)p Black
+-44 w Fo(This)18 b(is)g(the)g(con)l(v)o(er)n(ging)k(v)n(ariant)d(of)f
+-(CUDD-)p 676 4683 V 703 4683 a(REORDER)p 1135 4683 V
+-30 w(WINDO)m(W2.)p Black 448 4863 a Fp(CUDD)p 717 4863
+-V 32 w(REORDER)p 1206 4863 V 30 w(WINDO)-5 b(W3)p 1696
+-4863 V 33 w(CONV:)p Black 44 w Fo(This)18 b(is)g(the)g(con)l(v)o(er)n
+-(ging)k(v)n(ariant)d(of)f(CUDD-)p 676 4976 V 703 4976
+-a(REORDER)p 1135 4976 V 30 w(WINDO)m(W3.)p Black 1897
+-5225 a(18)p Black eop end
+-%%Page: 19 19
+-TeXDict begin 19 18 bop Black Black Black 448 573 a Fp(CUDD)p
+-717 573 28 4 v 32 w(REORDER)p 1206 573 V 30 w(WINDO)-5
+-b(W4)p 1696 573 V 33 w(CONV:)p Black 44 w Fo(This)18
+-b(is)g(the)g(con)l(v)o(er)n(ging)k(v)n(ariant)d(of)f(CUDD-)p
+-676 686 V 703 686 a(REORDER)p 1135 686 V 30 w(WINDO)m(W4.)p
+-Black 448 867 a Fp(CUDD)p 717 867 V 32 w(REORDER)p 1206
+-867 V 30 w(ANNEALING:)p Black 43 w Fo(This)24 b(method)h(is)f(an)h
+-(implementation)i(of)d(simu-)676 980 y(lated)e(annealing)h(for)f(v)n
+-(ariable)h(ordering,)g(v)n(aguely)g(resemblant)g(of)e(the)h(algorithm)g
+-(of)676 1093 y([2].)28 b(This)c(method)g(is)g(potentially)i(v)o(ery)e
+-(slo)n(w)-6 b(.)p Black 448 1275 a Fp(CUDD)p 717 1275
+-V 32 w(REORDER)p 1206 1275 V 30 w(GENETIC:)p Black 44
+-w Fo(This)26 b(method)i(is)e(an)h(implementation)j(of)c(a)h(genetic)676
+-1388 y(algorithm)g(for)e(v)n(ariable)j(ordering,)f(inspired)h(by)d(the)
+-h(w)o(ork)g(of)f(Drechsler)i([6)q(].)33 b(This)676 1501
+-y(method)24 b(is)f(potentially)k(v)o(ery)d(slo)n(w)-6
+-b(.)p Black 448 1682 a Fp(CUDD)p 717 1682 V 32 w(REORDER)p
+-1206 1682 V 30 w(EXA)h(CT:)p Black 44 w Fo(This)22 b(method)i
+-(implements)h(a)d(dynamic)i(programming)676 1795 y(approach)d(to)f(e)o
+-(xact)g(reordering)i([9)q(,)c(7)q(,)g(10)q(],)h(with)h(impro)o(v)o
+-(ements)h(described)h(in)d([11)q(].)676 1908 y(It)33
+-b(only)h(stores)g(one)g(BDD)d(at)j(the)f(time.)58 b(Therefore,)37
+-b(it)c(is)g(relati)n(v)o(ely)i(ef)n(\002cient)f(in)676
+-2021 y(terms)29 b(of)g(memory)-6 b(.)45 b(Compared)29
+-b(to)g(other)h(reordering)i(strate)o(gies,)g(it)d(is)g(v)o(ery)g(slo)n
+-(w)-6 b(,)676 2134 y(and)24 b(is)f(not)h(recommended)i(for)d(more)h
+-(than)g(16)g(v)n(ariables.)448 2329 y(So)f(f)o(ar)h(we)e(ha)n(v)o(e)i
+-(described)i(methods)f(whereby)g(the)e(package)j(selects)f(an)e(order)i
+-(automati-)448 2442 y(cally)-6 b(.)28 b(A)17 b(gi)n(v)o(en)i(order)g
+-(of)f(the)g(v)n(ariables)i(can)f(also)g(be)f(imposed)h(by)f(calling)i
+-Fn(Cudd)p 3050 2442 V 34 w(Shuf)n(\003eHeap)p Fo(.)448
+-2688 y Fi(3.13)99 b(Gr)n(ouping)26 b(V)-9 b(ariables)448
+-2862 y Fo(CUDD)29 b(allo)n(ws)i(the)g(application)j(to)d(specify)h
+-(constraints)i(on)d(the)g(positions)j(of)c(group)i(of)448
+-2975 y(v)n(ariables.)63 b(It)34 b(is)g(possible)j(to)d(request)i(that)f
+-(a)f(group)h(of)f(contiguous)k(v)n(ariables)e(be)e(k)o(ept)448
+-3088 y(contiguous)39 b(by)d(the)g(reordering)i(procedures.)68
+-b(It)35 b(is)g(also)h(possible)i(to)e(request)h(that)f(the)448
+-3201 y(relati)n(v)o(e)31 b(order)f(of)g(some)f(groups)j(of)d(v)n
+-(ariables)j(be)d(left)h(unchanged.)50 b(The)29 b(constraints)j(on)448
+-3314 y(the)24 b(order)h(are)e(speci\002ed)i(by)f(means)g(of)f(a)g
+-(tree,)h(which)g(is)f(created)j(in)d(one)h(of)g(tw)o(o)f(w)o(ays:)p
+-Black 585 3486 a Fm(\017)p Black 46 w Fo(By)f(calling)k
+-Fn(Cudd)p 1276 3486 V 33 w(Mak)o(eT)-5 b(r)m(eeNode)p
+-Fo(.)p Black 585 3668 a Fm(\017)p Black 46 w Fo(By)21
+-b(calling)j(the)f(functions)i(of)d(the)h(MTR)e(library)j(\(part)f(of)f
+-(the)h(distrib)n(ution\),)j(and)d(by)676 3781 y(re)o(gistering)i(the)d
+-(result)i(with)e(the)g(manager)i(using)f Fn(Cudd)p 2510
+-3781 V 34 w(SetT)-5 b(r)m(ee)p Fo(.)29 b(The)22 b(current)i(tree)676
+-3894 y(re)o(gistered)h(with)f(the)g(manager)g(can)g(be)g(read)g(with)f
+-Fn(Cudd)p 2531 3894 V 34 w(ReadT)-5 b(r)m(ee)p Fo(.)589
+-4067 y(Each)36 b(node)h(in)f(the)g(tree)h(represents)h(a)e(range)h(of)f
+-(v)n(ariables.)68 b(The)35 b(lo)n(wer)h(bound)h(of)448
+-4180 y(the)29 b(range)g(is)f(gi)n(v)o(en)h(by)f(the)h
+-Fn(low)e Fo(\002eld)h(of)g(the)h(node,)h(and)f(the)f(size)h(of)f(the)g
+-(group)i(is)e(gi)n(v)o(en)448 4293 y(by)33 b(the)g Fn(size)g
+-Fo(\002eld)g(of)g(the)g(node.)1525 4260 y Fg(2)1619 4293
+-y Fo(The)f(v)n(ariables)j(in)e(each)g(range)h(are)f(k)o(ept)g
+-(contiguous.)448 4405 y(Furthermore,)22 b(if)e(a)f(node)i(is)f(mark)o
+-(ed)g(with)g(the)g(MTR)p 2159 4405 V 32 w(FIXED)e(\003ag,)i(then)g(the)
+-g(relati)n(v)o(e)h(order)448 4518 y(of)32 b(the)g(v)n(ariable)i(ranges)
+-g(associated)g(to)e(its)g(children)i(is)e(not)h(changed.)56
+-b(As)31 b(an)h(e)o(xample,)448 4631 y(suppose)26 b(the)e(initial)h(v)n
+-(ariable)g(order)f(is:)p Black 448 4706 1196 4 v 554
+-4762 a Ff(2)583 4794 y Fe(When)18 b(the)g(v)n(ariables)h(in)f(a)g
+-(group)h(are)f(reordered,)h(the)g(association)g(between)f(the)h
+-Fb(low)e Fe(\002eld)h(and)h(the)f(inde)o(x)448 4885 y(of)k(the)h
+-(\002rst)e(v)n(ariable)h(in)g(the)h(group)g(is)f(lost.)32
+-b(The)22 b(package)i(updates)f(the)f(tree)g(to)g(k)o(eep)h(track)f(of)h
+-(the)f(changes.)448 4976 y(Ho)n(we)n(v)o(er)m(,)e(the)f(application)g
+-(cannot)h(rely)f(on)h Fb(low)e Fe(to)h(determine)g(the)g(position)h(of)
+-f(v)n(ariables.)p Black Black 1897 5225 a Fo(19)p Black
+-eop end
+-%%Page: 20 20
+-TeXDict begin 20 19 bop Black Black Black Black 448 573
+-a Fh(x0,)54 b(y0,)f(z0,)g(x1,)g(y1,)g(z1,)g(...)h(,)g(x9,)f(y9,)g(z9.)
+-448 748 y Fo(Suppose)27 b(we)f(w)o(ant)f(to)h(k)o(eep)h(each)g(group)g
+-(of)f(three)g(v)n(ariables)i(with)e(the)g(same)g(inde)o(x)h(\(e.g.,)448
+-861 y Fh(x3,)54 b(y3,)f(z3)p Fo(\))21 b(contiguous,)27
+-b(while)c(allo)n(wing)h(the)g(package)h(to)e(change)i(the)f(order)g(of)
+-f(the)448 974 y(groups.)31 b(W)-7 b(e)22 b(can)i(accomplish)i(this)e
+-(with)f(the)h(follo)n(wing)h(code:)p Black Black 448
+-1150 a Fh(for)54 b(\(i)f(=)h(0;)g(i)g(<)g(10;)f(i++\))g({)667
+-1262 y(\(void\))e(Cudd_MakeTreeNo)o(de\()o(ma)o(na)o(ge)o(r,)o(i*3)o
+-(,3)o(,M)o(TR)o(_D)o(EFA)o(UL)o(T\))o(;)448 1375 y(})448
+-1551 y Fo(If)26 b(we)f(w)o(ant)h(to)g(k)o(eep)h(the)f(order)h(within)g
+-(each)g(group)g(of)f(v)n(ariables)i(\002x)o(ed)e(\(i.e.,)f
+-Fh(x)g Fo(before)j Fh(y)448 1664 y Fo(before)d Fh(z)p
+-Fo(\))e(we)f(need)j(to)e(change)i(MTR)p 1710 1664 28
+-4 v 32 w(DEF)-7 b(A)i(UL)d(T)20 b(into)k(MTR)p 2521 1664
+-V 32 w(FIXED.)589 1777 y(The)32 b Fn(low)f Fo(parameter)i(passed)g(to)f
+-Fn(Cudd)p 1894 1777 V 33 w(Mak)o(eT)-5 b(r)m(eeNode)33
+-b Fo(is)f(the)g(inde)o(x)g(of)f(a)h(v)n(ariable)448 1890
+-y(\(as)27 b(opposed)i(to)e(its)f(le)n(v)o(el)h(or)g(position)i(in)d
+-(the)h(order\).)39 b(The)27 b(group)g(tree)h(can)f(be)f(created)i(at)
+-448 2003 y(an)o(y)g(time.)40 b(The)27 b(result)h(ob)o(viously)i
+-(depends)f(on)f(the)f(v)n(ariable)i(order)g(in)e(ef)n(fect)h(at)f
+-(creation)448 2115 y(time.)589 2228 y(It)20 b(is)g(possible)i(to)e
+-(create)h(a)e(v)n(ariable)j(group)f(tree)f(also)h(before)g(the)f(v)n
+-(ariables)i(themselv)o(es)448 2341 y(are)f(created.)29
+-b(The)21 b(package)h(assumes)g(in)e(this)i(case)f(that)g(the)g(inde)o
+-(x)g(of)g(the)f(v)n(ariables)j(not)e(yet)448 2454 y(in)h(e)o(xistence)i
+-(will)e(equal)g(their)h(position)h(in)e(the)g(order)h(when)f(the)o(y)g
+-(are)g(created.)30 b(Therefore,)448 2567 y(applications)g(that)c(rely)h
+-(on)f Fn(Cudd)p 1558 2567 V 34 w(bddNe)o(wV)-10 b(arAtLe)o(vel)26
+-b Fo(or)g Fn(Cudd)p 2613 2567 V 34 w(addNe)o(wV)-10 b(arAtLe)o(vel)26
+-b Fo(to)448 2680 y(create)f(ne)n(w)e(v)n(ariables)j(ha)n(v)o(e)e(to)f
+-(create)i(the)f(v)n(ariables)h(before)g(the)o(y)f(group)h(them.)589
+-2793 y(The)31 b(reordering)j(procedure)g(will)d(skip)h(all)g(groups)h
+-(whose)e(v)n(ariables)j(are)d(not)h(yet)f(in)448 2906
+-y(e)o(xistence.)h(F)o(or)24 b(groups)h(that)g(are)f(only)h(partially)h
+-(in)e(e)o(xistence,)i(the)e(reordering)j(procedure)448
+-3019 y(will)18 b(try)h(to)f(reorder)i(the)e(v)n(ariables)i(already)g
+-(instantiated,)j(without)c(violating)i(the)d(adjacenc)o(y)448
+-3132 y(constraints.)448 3378 y Fi(3.14)99 b(V)-9 b(ariable)25
+-b(Reordering)h(f)n(or)e(ZDDs)448 3553 y Fo(Reordering)h(of)d(ZDDs)f(is)
+-h(done)h(in)g(much)f(the)h(same)f(w)o(ay)h(as)f(the)g(reordering)k(of)c
+-(BDDs)f(and)448 3666 y(ADDs.)28 b(The)23 b(functions)j(corresponding)i
+-(to)c Fn(Cudd)p 2095 3666 V 33 w(ReduceHeap)i Fo(and)e
+-Fn(Cudd)p 2966 3666 V 33 w(Shuf)n(\003eHeap)448 3778
+-y Fo(are)h Fn(Cudd)p 784 3778 V 33 w(zddReduceHeap)i
+-Fo(and)e Fn(Cudd)p 1782 3778 V 34 w(zddShuf)n(\003eHeap)p
+-Fo(.)34 b(T)-7 b(o)23 b(enable)j(dynamic)f(reorder)n(-)448
+-3891 y(ing,)36 b(the)e(application)j(must)c(call)h Fn(Cudd)p
+-1777 3891 V 34 w(A)n(utodynEnableZdd)r Fo(,)39 b(and)34
+-b(to)g(disable)h(dynamic)448 4004 y(reordering,)29 b(it)d(must)g(call)g
+-Fn(Cudd)p 1510 4004 V 34 w(A)n(utodynDisableZdd)r Fo(.)39
+-b(In)26 b(the)g(current)i(implementation,)448 4117 y(ho)n(we)n(v)o(er)l
+-(,)c(the)f(choice)h(of)f(reordering)j(methods)e(for)g(ZDDs)d(is)i(more)
+-g(limited.)29 b(Speci\002cally)-6 b(,)448 4230 y(these)25
+-b(methods)g(are)e(a)n(v)n(ailable:)p Black 448 4428 a
+-Fp(CUDD)p 717 4428 V 32 w(REORDER)p 1206 4428 V 30 w(NONE;)p
+-Black Black 448 4611 a(CUDD)p 717 4611 V 32 w(REORDER)p
+-1206 4611 V 30 w(SAME;)p Black Black 448 4794 a(CUDD)p
+-717 4794 V 32 w(REORDER)p 1206 4794 V 30 w(RANDOM;)p
+-Black Black 448 4976 a(CUDD)p 717 4976 V 32 w(REORDER)p
+-1206 4976 V 30 w(RANDOM)p 1657 4976 V 31 w(PIV)l(O)l(T;)p
+-Black Black 1897 5225 a Fo(20)p Black eop end
+-%%Page: 21 21
+-TeXDict begin 21 20 bop Black Black Black 448 573 a Fp(CUDD)p
+-717 573 28 4 v 32 w(REORDER)p 1206 573 V 30 w(SIFT;)p
+-Black Black 448 760 a(CUDD)p 717 760 V 32 w(REORDER)p
+-1206 760 V 30 w(SIFT)p 1439 760 V 32 w(CONVERGE;)p Black
+-Black 448 948 a(CUDD)p 717 948 V 32 w(REORDER)p 1206
+-948 V 30 w(SYMM)p 1525 948 V 31 w(SIFT;)p Black Black
+-448 1136 a(CUDD)p 717 1136 V 32 w(REORDER)p 1206 1136
+-V 30 w(SYMM)p 1525 1136 V 31 w(SIFT)p 1759 1136 V 32
+-w(CONV.)p Black 589 1348 a Fo(T)-7 b(o)20 b(create)j(ZDD)c(v)n(ariable)
+-k(groups,)g(the)e(application)j(calls)e Fn(Cudd)p 2693
+-1348 V 34 w(Mak)o(eZddT)-5 b(r)m(eeNode)p Fo(.)448 1597
+-y Fi(3.15)99 b(K)n(eeping)25 b(Consistent)g(V)-9 b(ariable)25
+-b(Orders)g(f)n(or)g(BDDs)g(and)g(ZDDs)448 1772 y Fo(Se)n(v)o(eral)f
+-(applications)i(that)e(manipulate)i(both)e(BDDs)d(and)j(ZDDs)d
+-(bene\002t)j(from)f(k)o(eeping)j(a)448 1885 y(\002x)o(ed)e
+-(correspondence)29 b(between)d(the)f(order)g(of)f(the)h(BDD)d(v)n
+-(ariables)27 b(and)e(the)f(order)i(of)e(the)448 1998
+-y(ZDD)k(v)n(ariables.)51 b(If)30 b(each)h(BDD)d(v)n(ariable)k
+-(corresponds)h(to)d(a)g(group)h(of)f(ZDD)e(v)n(ariables,)448
+-2110 y(then)34 b(it)e(is)g(often)i(desirable)h(that)e(the)g(groups)h
+-(of)f(ZDD)d(v)n(ariables)35 b(be)d(in)h(the)g(same)f(order)448
+-2223 y(as)g(the)g(corresponding)37 b(BDD)30 b(v)n(ariables.)55
+-b(CUDD)30 b(allo)n(ws)i(the)h(ZDD)c(order)k(to)f(track)h(the)448
+-2336 y(BDD)27 b(order)j(and)f(vice)g(v)o(ersa.)45 b(T)-7
+-b(o)27 b(ha)n(v)o(e)j(the)f(ZDD)d(order)k(track)f(the)g(BDD)e(order)l
+-(,)k(the)e(ap-)448 2449 y(plication)g(calls)e Fn(Cudd)p
+-1185 2449 V 34 w(zddRealignEnable)p Fo(.)41 b(The)26
+-b(ef)n(fect)i(of)e(this)h(call)g(can)g(be)f(re)n(v)o(ersed)i(by)448
+-2562 y(calling)j Fn(Cudd)p 925 2562 V 34 w(zddRealignDisable)p
+-Fo(.)48 b(When)29 b(ZDD)e(realignment)k(is)e(in)g(ef)n(fect,)i
+-(automatic)448 2675 y(reordering)c(of)c(ZDDs)f(should)j(be)f(disabled.)
+-448 2924 y Fi(3.16)99 b(Hooks)448 3098 y Fo(Hooks)22
+-b(in)f(CUDD)d(are)k(lists)f(of)g(application-speci\002ed)27
+-b(functions)c(to)e(be)g(run)g(on)h(certain)g(oc-)448
+-3211 y(casions.)29 b(Each)18 b(hook)h(is)f(identi\002ed)i(by)e(a)g
+-(constant)i(of)e(the)g(enumerated)j(type)d Fn(Cudd)p
+-3125 3211 V 34 w(HookT)-7 b(ype)p Fo(.)448 3324 y(In)24
+-b(V)-10 b(ersion)24 b(2.5.0)g(hooks)h(are)e(de\002ned)i(for)e(these)i
+-(occasions:)p Black 585 3512 a Fm(\017)p Black 46 w Fo(before)f
+-(garbage)h(collection)i(\(CUDD)p 1916 3512 V 31 w(PRE)p
+-2115 3512 V 32 w(GC)p 2274 3512 V 32 w(HOOK\);)p Black
+-585 3700 a Fm(\017)p Black 46 w Fo(after)d(garbage)h(collection)h
+-(\(CUDD)p 1850 3700 V 32 w(POST)p 2106 3700 V 31 w(GC)p
+-2264 3700 V 32 w(HOOK\);)p Black 585 3887 a Fm(\017)p
+-Black 46 w Fo(before)e(v)n(ariable)i(reordering)g(\(CUDD)p
+-1939 3887 V 32 w(PRE)p 2139 3887 V 31 w(REORDERING)p
+-2759 3887 V 30 w(HOOK\);)p Black 585 4075 a Fm(\017)p
+-Black 46 w Fo(after)e(v)n(ariable)h(reordering)h(\(CUDD)p
+-1873 4075 V 32 w(POST)p 2129 4075 V 31 w(REORDERING)p
+-2749 4075 V 30 w(HOOK\).)448 4262 y(The)e(current)i(implementation)i
+-(of)c(hooks)i(is)e(e)o(xperimental.)34 b(A)24 b(function)i(added)g(to)e
+-(a)g(hook)448 4375 y(recei)n(v)o(es)c(a)e(pointer)i(to)e(the)g(manager)
+-l(,)j(a)d(pointer)i(to)e(a)g(constant)i(string,)h(and)d(a)g(pointer)i
+-(to)e(v)n(oid)448 4488 y(as)27 b(ar)n(guments;)j(it)d(must)f(return)i
+-(1)e(if)g(successful;)31 b(0)c(otherwise.)39 b(The)26
+-b(second)i(ar)n(gument)g(is)448 4601 y(one)21 b(of)f(\223DD,)-6
+-b(\224)19 b(\223BDD,)-6 b(\224)18 b(and)j(\223ZDD.)-6
+-b(\224)18 b(This)i(allo)n(ws)h(the)f(hook)h(functions)i(to)d(tell)h
+-(the)f(type)h(of)448 4714 y(diagram)f(for)f(which)h(reordering)h(or)e
+-(garbage)h(collection)i(tak)o(es)e(place.)28 b(The)19
+-b(third)g(ar)n(gument)448 4827 y(v)n(aries)30 b(depending)h(on)e(the)g
+-(hook.)45 b(The)28 b(hook)h(functions)i(called)f(before)g(or)f(after)g
+-(garbage)448 4940 y(collection)d(do)d(not)g(use)g(it.)28
+-b(The)23 b(hook)h(functions)h(called)f(before)g(reordering)i(are)d
+-(passed,)h(in)p Black 1897 5225 a(21)p Black eop end
+-%%Page: 22 22
+-TeXDict begin 22 21 bop Black Black 448 573 a Fo(addition)32
+-b(to)d(the)h(pointer)h(to)f(the)g(manager)l(,)i(also)e(the)g(method)g
+-(used)h(for)e(reordering.)50 b(The)448 686 y(hook)27
+-b(functions)h(called)f(after)f(reordering)j(are)d(passed)h(the)f(start)
+-g(time.)35 b(T)-7 b(o)25 b(add)h(a)f(function)448 799
+-y(to)e(a)g(hook,)g(one)h(uses)f Fn(Cudd)p 1363 799 28
+-4 v 34 w(AddHook)r Fo(.)29 b(The)22 b(function)j(of)e(a)g(gi)n(v)o(en)g
+-(hook)h(are)f(called)h(in)f(the)448 912 y(order)k(in)e(which)h(the)o(y)
+-g(were)f(added)i(to)f(the)f(hook.)36 b(F)o(or)25 b(sample)h(hook)g
+-(functions,)j(one)d(may)448 1024 y(look)f(at)e Fn(Cudd)p
+-922 1024 V 34 w(StdPr)m(eReor)m(dHook)k Fo(and)d Fn(Cudd)p
+-1990 1024 V 34 w(StdP)-7 b(ostReor)m(dHook)r Fo(.)448
+-1274 y Fi(3.17)99 b(T)n(imeouts)26 b(and)f(Limits)448
+-1448 y Fo(It)19 b(is)h(possible)h(to)f(set)f(a)g(time)g(limit)h(for)f
+-(a)g(manger)h(with)g Fn(Cudd)p 2413 1448 V 33 w(SetT)-5
+-b(imeLimit)r Fo(.)27 b(Once)20 b(set,)g(the)448 1561
+-y(time)g(a)n(v)n(ailable)i(to)e(the)h(manager)g(can)f(be)g(modi\002ed)h
+-(through)h(other)f(API)d(functions.)31 b(CUDD)448 1674
+-y(checks)e(for)e(e)o(xpiration)i(periodically)-6 b(.)43
+-b(When)27 b(time)g(has)g(e)o(xpired,)j(it)c(returns)j(NULL)24
+-b(from)448 1787 y(the)29 b(call)h(in)e(progress,)k(b)n(ut)e(it)e(lea)n
+-(v)o(es)i(the)f(manager)h(in)f(a)f(consistent)k(state.)45
+-b(The)28 b(in)l(v)n(oking)448 1900 y(application)f(must)d(be)f
+-(designed)j(to)d(handle)j(the)d(NULL)e(v)n(alues)k(returned.)589
+-2013 y(When)35 b(reordering,)k(if)34 b(a)g(timout)h(is)f(approaching,)
+-41 b(CUDD)31 b(will)j(quit)h(reordering)i(to)448 2125
+-y(gi)n(v)o(e)24 b(the)g(application)i(a)e(chance)h(to)e(\002nish)h
+-(some)g(computation.)589 2238 y(It)31 b(is)h(also)f(possible)j(to)d(in)
+-l(v)n(ok)o(e)j(some)d(functions)j(that)e(return)g(NULL)d(if)i(the)o(y)h
+-(cannot)448 2351 y(complete)k(without)f(creating)i(more)d(than)h(a)f
+-(set)g(number)h(of)g(nodes.)62 b(See,)36 b(for)e(instance,)448
+-2464 y Fn(Cudd)p 649 2464 V 34 w(bddAndLimit)r Fo(.)448
+-2713 y Fi(3.18)99 b(The)26 b(SIS/VIS)f(Interface)448
+-2888 y Fo(The)j(CUDD)d(package)30 b(contains)f(interf)o(ace)h
+-(functions)h(that)d(emulate)g(the)g(beha)n(vior)i(of)e(the)448
+-3001 y(original)i(BDD)c(package)k(used)f(in)f(SIS)e([17)q(])i(and)g(in)
+-g(the)g(ne)n(wer)g(VIS)2719 2968 y Fg(3)2783 3001 y Fo([4].)42
+-b(Ho)n(w)26 b(to)i(b)n(uild)448 3113 y(VIS)i(with)i(CUDD)d(is)i
+-(described)j(in)e(the)f(installation)k(documents)f(of)d(VIS.)f(\(V)-10
+-b(ersion)32 b(1.1)448 3226 y(and)24 b(later)-5 b(.\))448
+-3472 y Fp(3.18.1)93 b(Using)22 b(the)h(CUDD)f(P)o(ackage)i(in)e(SIS)448
+-3646 y Fo(This)32 b(section)h(describes)h(ho)n(w)d(to)h(b)n(uild)g(SIS)
+-f(with)g(the)h(CUDD)d(package.)55 b(Let)31 b Fh(SISDIR)448
+-3759 y Fo(designate)41 b(the)d(root)h(of)f(the)g(directory)j(hierarchy)
+-f(where)e(the)h(sources)g(for)g(SIS)d(reside.)448 3872
+-y(Let)27 b Fh(CUDDDIR)d Fo(be)j(the)h(root)g(of)g(the)f(directory)j
+-(hierarchy)g(where)e(the)f(distrib)n(ution)32 b(of)27
+-b(the)448 3985 y(CUDD)21 b(package)k(resides.)30 b(T)-7
+-b(o)22 b(b)n(uild)i(SIS)d(with)i(the)g(CUDD)e(package,)k(follo)n(w)e
+-(these)h(steps.)p Black 562 4173 a(1.)p Black 46 w(Create)g
+-(directories)i Fh(SISDIR/sis/cudd)16 b Fo(and)24 b Fh(SISDIR/sis/mtr)p
+-Fo(.)p Black 562 4360 a(2.)p Black 46 w(Cop)o(y)18 b(all)g(\002les)g
+-(from)g Fh(CUDDDIR/cudd)12 b Fo(and)18 b Fh(CUDDDIR/sis)13
+-b Fo(to)18 b Fh(SISDIR/sis/cud)o(d)676 4473 y Fo(and)24
+-b(all)f(\002les)g(from)h Fh(CUDDDIR/mtr)18 b Fo(to)23
+-b Fh(SISDIR/sis/mtr)p Fo(.)p Black 562 4661 a(3.)p Black
+-46 w(Cop)o(y)35 b Fh(CUDDDIR/cudd/d)o(oc)o(/c)o(ud)o(d.d)o(oc)27
+-b Fo(to)35 b Fh(SISDIR/sis/cud)o(d)p Fo(;)f(also)676
+-4774 y(cop)o(y)24 b Fh(CUDDDIR/mtr/doc)o(/m)o(tr)o(.do)o(c)16
+-b Fo(to)24 b Fh(SISDIR/sis/mtr)o Fo(.)p Black 448 4855
+-1196 4 v 554 4911 a Ff(3)583 4942 y Fe(http://vlsi.Colorado.EDU/)18
+-b(vis/)p Black Black 1897 5225 a Fo(22)p Black eop end
+-%%Page: 23 23
+-TeXDict begin 23 22 bop Black Black Black 562 573 a Fo(4.)p
+-Black 46 w(In)38 b Fh(SISDIR/sis/cud)o(d)31 b Fo(mak)o(e)39
+-b Fh(bdd.h)c Fo(a)j(symbolic)h(link)g(to)f Fh(cuddBdd.h)p
+-Fo(.)676 686 y(\(That)23 b(is:)29 b Fh(ln)54 b(-s)g(cuddBdd.h)c(bdd.h)p
+-Fo(.\))p Black 562 873 a(5.)p Black 46 w(In)27 b Fh(SISDIR/sis/cudd)20
+-b Fo(delete)29 b Fh(Makefile)23 b Fo(and)28 b(rename)h
+-Fh(Makefile.sis)676 986 y Fo(as)23 b Fh(Makefile)p Fo(.)h(Do)f(the)h
+-(same)f(in)h Fh(SISDIR/sis/mtr)p Fo(.)p Black 562 1174
+-a(6.)p Black 46 w(Cop)o(y)18 b Fh(CUDDDIR/sis/st.)o([c)o(h])11
+-b Fo(and)18 b Fh(CUDDDIR/st/doc/)o(st)o(.d)o(oc)11 b
+-Fo(to)18 b Fh(SISDIR/sis/st)p Fo(.)676 1287 y(\(This)29
+-b(will)h(o)o(v)o(erwrite)h(the)f(original)h(\002les:)42
+-b(Y)-10 b(ou)29 b(may)h(w)o(ant)g(to)g(sa)n(v)o(e)g(them)g(before-)676
+-1400 y(hand.\))p Black 562 1587 a(7.)p Black 46 w(From)17
+-b Fh(CUDDDIR/util)12 b Fo(cop)o(y)19 b Fh(datalimit.c)12
+-b Fo(to)18 b Fh(SISDIR/sis/util)o Fo(.)i(Up-)676 1700
+-y(date)30 b Fh(util.h)d Fo(and)k Fh(Makefile)26 b Fo(in)k
+-Fh(SISDIR/sis/uti)o(l)p Fo(.)42 b(Speci\002cally)-6 b(,)33
+-b(add)676 1813 y(the)38 b(declaration)k Fh(EXTERN)52
+-b(long)g(getSoftDataLimi)o(t\(\))o(;)39 b Fo(to)f Fh(util.h)676
+-1926 y Fo(and)24 b(add)g Fh(datalimit.c)17 b Fo(to)24
+-b(the)g(list)f(of)h(source)h(\002les)e(\(PSRC\))f(in)h
+-Fh(Makefile)p Fo(.)p Black 562 2114 a(8.)p Black 46 w(In)g
+-Fh(SISDIR/sis)17 b Fo(remo)o(v)o(e)23 b(the)h(link)f(from)g
+-Fh(bdd)e Fo(to)i Fh(bdd)p 2578 2114 28 4 v 31 w(cmu)e
+-Fo(or)i Fh(bdd)p 3058 2114 V 32 w(ucb)d Fo(\(that)676
+-2227 y(is,)36 b Fh(rm)54 b(bdd)p Fo(\))32 b(and)j(mak)o(e)f
+-Fh(bdd)e Fo(a)i(symbolic)i(link)f(to)f Fh(cudd)p Fo(.)58
+-b(\(That)35 b(is:)50 b Fh(ln)k(-s)676 2340 y(cudd)e(bdd)p
+-Fo(.\))p Black 562 2527 a(9.)p Black 46 w(Still)17 b(in)h
+-Fh(SISDIR/sis)p Fo(,)c(edit)19 b Fh(Makefile)p Fo(,)14
+-b Fh(Makefile.oct)p Fo(,)f(and)18 b Fh(Makefile.nooct)p
+-Fo(.)676 2640 y(In)23 b(all)h(three)g(\002les)f(add)h(mtr)f(to)h(the)g
+-(list)g(of)f(directories)j(to)e(be)f(made)h(\(DIRS\).)p
+-Black 517 2828 a(10.)p Black 46 w(In)18 b Fh(SISDIR/sis/inc)o(lu)o(de)
+-11 b Fo(mak)o(e)18 b Fh(mtr.h)d Fo(a)j(symbolic)h(link)g(to)f
+-Fh(../mtr/mtr.h)p Fo(.)p Black 517 3015 a(11.)p Black
+-46 w(In)g Fh(SISDIR/sis/doc)10 b Fo(mak)o(e)19 b Fh(cudd.doc)13
+-b Fo(a)18 b(symbolic)i(link)e(to)g Fh(../cudd/cudd.doc)676
+-3128 y Fo(and)32 b Fh(mtr.doc)d Fo(a)j(symbolic)h(link)g(to)g
+-Fh(../mtr/mtr.doc)o Fo(.)48 b(\(That)33 b(is:)46 b Fh(ln)54
+-b(-s)676 3241 y(../cudd/cudd.d)o(oc)48 b(.;)53 b(ln)h(-s)g
+-(../mtr/mtr.doc)48 b(.)p Fo(.\))p Black 517 3429 a(12.)p
+-Black 46 w(From)25 b Fh(SISDIR)e Fo(do)j Fh(make)53 b(clean)23
+-b Fo(follo)n(wed)k(by)f Fh(make)53 b(-i)p Fo(.)35 b(This)26
+-b(should)i(cre-)676 3542 y(ate)23 b(a)g(w)o(orking)i(cop)o(y)g(of)e
+-(SIS)f(that)i(uses)h(the)e(CUDD)f(package.)589 3729 y(The)35
+-b(replacement)j(for)d(the)h Fh(st)d Fo(library)k(is)e(because)i(the)e
+-(v)o(ersion)i(shipped)g(with)e(the)448 3842 y(CUDD)22
+-b(package)27 b(tests)e(for)f(out-of-memory)j(conditions.)35
+-b(Notice)24 b(that)h(the)g(v)o(ersion)h(of)e(the)448
+-3955 y Fh(st)32 b Fo(library)k(to)e(be)f(used)i(for)f(replacement)j(is)
+-c(not)h(the)h(one)f(used)h(for)f(the)g(normal)g(b)n(uild,)448
+-4068 y(because)26 b(the)e(latter)g(has)g(been)h(modi\002ed)f(for)g(C++)
+-f(compatibility)-6 b(.)32 b(The)23 b(abo)o(v)o(e)h(installation)448
+-4181 y(procedure)34 b(has)e(been)h(tested)f(on)g(SIS)e(1.3.)52
+-b(SIS)30 b(can)i(be)g(obtained)h(via)f(anon)o(ymous)h(FTP)448
+-4294 y(from)18 b Fh(ic.eecs.berkele)o(y.e)o(du)o Fo(.)i(T)-7
+-b(o)17 b(b)n(uild)j(SIS)c(1.3,)j(you)g(need)g Fh(sis-1.2.tar.Z)448
+-4407 y Fo(and)g Fh(sis-1.2.patch1.Z)o Fo(.)12 b(When)19
+-b(compiling)h(on)f(a)f(DEC)f(Alpha,)i(you)h(should)g(add)f(the)448
+-4520 y Fh(-ieee)p 728 4520 V 31 w(with)p 979 4520 V 31
+-w(no)p 1120 4520 V 31 w(inexact)e Fo(\003ag.)27 b(\(See)20
+-b(Section)h(3.5.2.\))28 b(Refer)20 b(to)g(the)h Fh(Makefile)15
+-b Fo(in)448 4633 y(the)24 b(top)g(le)n(v)o(el)g(directory)i(of)d(the)h
+-(distrib)n(ution)j(for)d(ho)n(w)f(to)g(compile)i(with)e(32-bit)i
+-(pointers.)p Black 1897 5225 a(23)p Black eop end
+-%%Page: 24 24
+-TeXDict begin 24 23 bop Black Black 448 573 a Fi(3.19)99
+-b(Writing)25 b(Decision)f(Diagrams)g(to)h(a)g(File)448
+-747 y Fo(The)c(CUDD)e(package)k(pro)o(vides)g(se)n(v)o(eral)f
+-(functions)i(to)d(write)g(decision)j(diagrams)e(to)f(a)g(\002le.)448
+-860 y Fn(Cudd)p 649 860 28 4 v 34 w(DumpBlif)35 b Fo(writes)23
+-b(a)f(\002le)g(in)g Fn(blif)37 b Fo(format.)28 b(It)23
+-b(is)f(restricted)j(to)d(BDDs.)27 b(The)22 b(diagrams)448
+-973 y(are)j(written)g(as)f(a)g(netw)o(ork)i(of)e(multiple)o(x)o(ers,)i
+-(one)f(multiple)o(x)o(er)h(for)f(each)g(internal)h(node)f(of)448
+-1086 y(the)f(BDD.)589 1199 y Fn(Cudd)p 790 1199 V 34
+-w(DumpDot)37 b Fo(produces)i(input)e(suitable)h(to)e(the)g(graph-dra)o
+-(wing)j(program)e Fn(dot)3399 1166 y Fg(4)448 1312 y
+-Fo(written)29 b(by)g(Eleftherios)h(K)m(outso\002os)g(and)f(Stephen)g
+-(C.)e(North.)43 b(An)28 b(e)o(xample)h(of)g(dra)o(wing)448
+-1425 y(produced)f(by)d(dot)g(from)g(the)g(output)h(of)f
+-Fn(Cudd)p 1959 1425 V 34 w(DumpDot)h Fo(is)e(sho)n(wn)i(in)e(Figure)i
+-(1.)32 b(It)25 b(is)f(re-)448 1537 y(stricted)j(to)d(BDDs)f(and)h
+-(ADDs.)30 b Fn(Cudd)p 1726 1537 V 34 w(zddDumpDot)d Fo(is)d(the)h
+-(analog)h(of)e Fn(Cudd)p 3050 1537 V 34 w(DumpDot)448
+-1650 y Fo(for)g(ZDDs.)589 1763 y Fn(Cudd)p 790 1763 V
+-34 w(DumpDaV)-7 b(inci)41 b Fo(produces)i(input)f(suitable)g(to)f(the)g
+-(graph-dra)o(wing)i(program)448 1876 y Fn(daV)-7 b(inci)722
+-1843 y Fg(5)799 1876 y Fo(de)n(v)o(eloped)40 b(at)d(the)i(Uni)n(v)o
+-(ersity)g(of)f(Bremen.)71 b(It)38 b(is)f(restricted)k(to)d(BDDs)e(and)
+-448 1989 y(ADDs.)589 2102 y(Functions)f(are)d(also)h(a)n(v)n(ailable)h
+-(to)f(produce)h(the)e(input)i(format)f(of)f Fn(DDcal)g
+-Fo(\(see)h(Sec-)448 2215 y(tion)24 b(2.2\))g(and)g(f)o(actored)i
+-(forms.)448 2464 y Fi(3.20)99 b(Sa)n(ving)25 b(and)g(Restoring)g(BDDs)
+-448 2638 y Fo(The)e Fn(dddmp)858 2605 y Fg(6)919 2638
+-y Fo(library)i(by)e(Gianpiero)i(Cabodi)f(and)g(Stef)o(ano)g(Quer)f
+-(allo)n(ws)g(a)g(CUDD)e(appli-)448 2751 y(cation)30 b(to)e(sa)n(v)o(e)h
+-(BDDs)d(to)j(disk)g(in)f(compact)h(form)f(for)h(later)g(retrie)n(v)n
+-(al.)44 b(See)28 b(the)g(library')-5 b(s)448 2864 y(o)n(wn)23
+-b(documentation)k(for)d(the)g(details.)448 3157 y Fq(4)120
+-b(Pr)n(ogrammer')l(s)27 b(Manual)448 3364 y Fo(This)g(section)i(pro)o
+-(vides)g(additional)h(detail)e(on)f(the)g(w)o(orking)i(of)e(the)g(CUDD)
+-e(package)k(and)448 3477 y(on)37 b(the)g(programming)h(con)l(v)o
+-(entions)i(follo)n(wed)e(in)e(its)h(writing.)68 b(The)36
+-b(additional)j(detail)448 3590 y(should)21 b(help)f(those)h(who)e(w)o
+-(ant)g(to)h(write)f(procedures)j(that)e(directly)h(manipulate)h(the)e
+-(CUDD)448 3703 y(data)k(structures.)448 3952 y Fi(4.1)99
+-b(Compiling)25 b(and)g(Linking)448 4126 y Fo(If)32 b(you)h(plan)h(to)e
+-(use)h(the)f(CUDD)f(package)j(as)e(a)g(clear)i(box)f(\(for)f(instance,)
+-37 b(you)c(w)o(ant)f(to)448 4239 y(write)24 b(a)f(procedure)j(that)e
+-(tra)n(v)o(erses)i(a)d(decision)j(diagram\))f(you)f(need)g(to)f(add)p
+-Black Black 448 4427 a Fh(#include)51 b("cuddInt.h")p
+-Black 448 4491 1196 4 v 554 4546 a Ff(4)583 4578 y Fe(http://www)-5
+-b(.research.att.com/sw/tools/graphviz)554 4640 y Ff(5)583
+-4671 y Fe(ftp://ftp.uni-bremen.de/pub/graphics/daV)l(inci)554
+-4733 y Ff(6)583 4764 y Fe(ftp://ftp.polito.it/pub/research/dddmp/)p
+-Black Black 1897 5225 a Fo(24)p Black eop end
+-%%Page: 25 25
+-TeXDict begin 25 24 bop Black Black Black 721 4226 a
+- at beginspecial 66 @llx 36 @lly 547 @urx 757 @ury 4393
+- at rhi @setspecial
+-%%BeginDocument: phase.ps
+-%!PS-Adobe-2.0
+-%%Creator: dot version 95 (4-10-95)
+-%%For: (fabio) Fabio Somenzi,OT4-11,2-3466,ECE faculty
+-%%Title: DD
+-%%Pages: (atend)
+-%%BoundingBox: 66 36 547 757
+-%%EndComments
+-%%BeginProlog
+-save
+-/DotDict 200 dict def
+-DotDict begin
+-
+-%%BeginResource: procset
+-/coord-font-family /Times-Roman def
+-/default-font-family /Times-Roman def
+-/coordfont coord-font-family findfont 8 scalefont def
+-
+-/InvScaleFactor 1.0 def
+-/set_scale {
+- dup 1 exch div /InvScaleFactor exch def
+- dup scale
+-} bind def
+-
+-% styles
+-/solid { } bind def
+-/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+-/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+-/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+-/bold { 2 setlinewidth } bind def
+-/filled { } bind def
+-/unfilled { } bind def
+-/rounded { } bind def
+-/diagonals { } bind def
+-
+-% hooks for setting color
+-/nodecolor { sethsbcolor } bind def
+-/edgecolor { sethsbcolor } bind def
+-/graphcolor { sethsbcolor } bind def
+-/nopcolor {pop pop pop} bind def
+-
+-/beginpage { % i j npages
+- /npages exch def
+- /j exch def
+- /i exch def
+- /str 10 string def
+- npages 1 gt {
+- gsave
+- coordfont setfont
+- 0 0 moveto
+- (() show i str cvs show (,) show j str cvs show ()) show
+- grestore
+- } if
+-} bind def
+-
+-/set_font {
+- findfont exch
+- scalefont setfont
+-} def
+-
+-/arrowhead {
+- /arrowwidth exch def
+- /arrowlength exch def
+- gsave
+- 3 1 roll
+- translate
+- rotate
+- newpath
+- arrowlength arrowwidth 2 div moveto
+- 0 0 lineto
+- arrowlength arrowwidth -2 div lineto
+- closepath fill
+- stroke
+- grestore
+-} def
+-
+-% draw aligned label in bounding box aligned to current point
+-% alignfactor tells what fraction to place on the left.
+-% -.5 is centered.
+-/alignedtext { % text labelwidth fontsz alignfactor
+- /alignfactor exch def
+- /fontsz exch def
+- /width exch def
+- /text exch def
+- gsave
+- % even if node or edge is dashed, don't paint text with dashes
+- [] 0 setdash
+- currentpoint newpath moveto
+- text stringwidth pop
+- alignfactor mul fontsz -.3 mul rmoveto
+- text show
+- grestore
+-} def
+-
+-/boxprim { % xcorner ycorner xsize ysize
+- 4 2 roll
+- moveto
+- 2 copy
+- exch 0 rlineto
+- 0 exch rlineto
+- pop neg 0 rlineto
+- closepath
+-} bind def
+-
+-/ellipse_path {
+- /ry exch def
+- /rx exch def
+- /y exch def
+- /x exch def
+- matrix currentmatrix
+- newpath
+- x y translate
+- rx ry scale
+- 0 0 1 0 360 arc
+- setmatrix
+-} bind def
+-
+-/endpage { showpage } bind def
+-
+-/layercolorseq
+- [ % layer color sequence - darkest to lightest
+- [0 0 0]
+- [.2 .8 .8]
+- [.4 .8 .8]
+- [.6 .8 .8]
+- [.8 .8 .8]
+- ]
+-def
+-
+-/setlayer {/maxlayer exch def /curlayer exch def
+- layercolorseq curlayer get
+- aload pop sethsbcolor
+- /nodecolor {nopcolor} def
+- /edgecolor {nopcolor} def
+- /graphcolor {nopcolor} def
+-} bind def
+-
+-/onlayer { curlayer ne {invis} if } def
+-
+-/onlayers {
+- /myupper exch def
+- /mylower exch def
+- curlayer mylower lt
+- curlayer myupper gt
+- or
+- {invis} if
+-} def
+-
+-/curlayer 0 def
+-
+-%%EndResource
+-%%EndProlog
+-%%BeginSetup
+-14 default-font-family set_font
+-% /arrowlength 10 def
+-% /arrowwidth 5 def
+-%%EndSetup
+-%%Page: 1 (atend)
+-%%PageBoundingBox: 66 36 547 757
+-gsave
+-65 35 482 722 boxprim clip newpath
+-66 36 translate
+-0 0 1 beginpage
+-0.7407 set_scale
+-0 0 translate 0 rotate
+-0.000 0.000 0.000 graphcolor
+-14.00 /Times-Roman set_font
+-
+-% CONST NODES
+-gsave 10 dict begin
+-invis
+-gsave 10 dict begin
+-55 19 moveto (CONST NODES) 96 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a110
+-gsave 10 dict begin
+-gsave 10 dict begin
+-55 883 moveto (a110) 27 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a111
+-gsave 10 dict begin
+-gsave 10 dict begin
+-55 811 moveto (a111) 27 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a110 -> a111
+-gsave 10 dict begin
+-invis
+-newpath 55 864 moveto
+-55 853 55 839 55 828 curveto
+-stroke
+-end grestore
+-
+-% a210
+-gsave 10 dict begin
+-gsave 10 dict begin
+-55 739 moveto (a210) 27 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a111 -> a210
+-gsave 10 dict begin
+-invis
+-newpath 55 792 moveto
+-55 781 55 767 55 756 curveto
+-stroke
+-end grestore
+-
+-% a211
+-gsave 10 dict begin
+-gsave 10 dict begin
+-55 667 moveto (a211) 27 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a210 -> a211
+-gsave 10 dict begin
+-invis
+-newpath 55 720 moveto
+-55 709 55 695 55 684 curveto
+-stroke
+-end grestore
+-
+-% a310
+-gsave 10 dict begin
+-gsave 10 dict begin
+-55 595 moveto (a310) 27 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a211 -> a310
+-gsave 10 dict begin
+-invis
+-newpath 55 648 moveto
+-55 637 55 623 55 612 curveto
+-stroke
+-end grestore
+-
+-% a311
+-gsave 10 dict begin
+-gsave 10 dict begin
+-55 523 moveto (a311) 27 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a310 -> a311
+-gsave 10 dict begin
+-invis
+-newpath 55 576 moveto
+-55 565 55 551 55 540 curveto
+-stroke
+-end grestore
+-
+-% a410
+-gsave 10 dict begin
+-gsave 10 dict begin
+-55 451 moveto (a410) 27 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a311 -> a410
+-gsave 10 dict begin
+-invis
+-newpath 55 504 moveto
+-55 493 55 479 55 468 curveto
+-stroke
+-end grestore
+-
+-% a411
+-gsave 10 dict begin
+-gsave 10 dict begin
+-55 379 moveto (a411) 27 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a410 -> a411
+-gsave 10 dict begin
+-invis
+-newpath 55 432 moveto
+-55 421 55 407 55 396 curveto
+-stroke
+-end grestore
+-
+-% a510
+-gsave 10 dict begin
+-gsave 10 dict begin
+-55 307 moveto (a510) 27 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a411 -> a510
+-gsave 10 dict begin
+-invis
+-newpath 55 360 moveto
+-55 349 55 335 55 324 curveto
+-stroke
+-end grestore
+-
+-% a511
+-gsave 10 dict begin
+-gsave 10 dict begin
+-55 235 moveto (a511) 27 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a510 -> a511
+-gsave 10 dict begin
+-invis
+-newpath 55 288 moveto
+-55 277 55 263 55 252 curveto
+-stroke
+-end grestore
+-
+-% a610
+-gsave 10 dict begin
+-gsave 10 dict begin
+-55 163 moveto (a610) 27 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a511 -> a610
+-gsave 10 dict begin
+-invis
+-newpath 55 216 moveto
+-55 205 55 191 55 180 curveto
+-stroke
+-end grestore
+-
+-% a611
+-gsave 10 dict begin
+-gsave 10 dict begin
+-55 91 moveto (a611) 27 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a610 -> a611
+-gsave 10 dict begin
+-invis
+-newpath 55 144 moveto
+-55 133 55 119 55 108 curveto
+-stroke
+-end grestore
+-
+-% a611 -> CONST NODES
+-gsave 10 dict begin
+-invis
+-newpath 55 72 moveto
+-55 61 55 47 55 36 curveto
+-stroke
+-end grestore
+-
+-% o
+-gsave 10 dict begin
+-newpath 511 972 moveto
+-457 972 lineto
+-457 936 lineto
+-511 936 lineto
+-closepath
+-stroke
+-gsave 10 dict begin
+-484 955 moveto (o) 7 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a00
+-gsave 10 dict begin
+-484 882 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-484 883 moveto (a00) 20 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% o -> a00
+-gsave 10 dict begin
+-solid
+-newpath 484 936 moveto
+-484 925 484 911 484 900 curveto
+-stroke
+-end grestore
+-
+-% 9fc
+-gsave 10 dict begin
+-448 810 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-448 811 moveto (9fc) 17 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a00 -> 9fc
+-newpath 475 865 moveto
+-470 853 462 839 457 827 curveto
+-stroke
+-
+-% 9ff
+-gsave 10 dict begin
+-520 810 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-520 811 moveto (9ff) 16 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% a00 -> 9ff
+-gsave 10 dict begin
+-dashed
+-newpath 493 865 moveto
+-498 853 506 839 511 827 curveto
+-stroke
+-end grestore
+-
+-% 995
+-gsave 10 dict begin
+-453 738 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-453 739 moveto (995) 21 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9fc -> 995
+-gsave 10 dict begin
+-dashed
+-newpath 449 792 moveto
+-450 781 451 767 452 756 curveto
+-stroke
+-end grestore
+-
+-% 9fb
+-gsave 10 dict begin
+-381 738 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-381 739 moveto (9fb) 18 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9fc -> 9fb
+-newpath 433 794 moveto
+-422 782 407 765 396 753 curveto
+-stroke
+-
+-% 9fe
+-gsave 10 dict begin
+-584 738 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-584 739 moveto (9fe) 17 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9ff -> 9fe
+-gsave 10 dict begin
+-dashed
+-newpath 534 794 moveto
+-545 782 560 765 570 753 curveto
+-stroke
+-end grestore
+-
+-% 95f
+-gsave 10 dict begin
+-512 666 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-512 667 moveto (95f) 18 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9ff -> 95f
+-newpath 519 792 moveto
+-518 764 515 712 513 684 curveto
+-stroke
+-
+-% 994
+-gsave 10 dict begin
+-347 594 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-347 595 moveto (994) 21 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 995 -> 994
+-newpath 432 727 moveto
+-407 714 370 693 363 684 curveto
+-356 675 351 636 349 612 curveto
+-stroke
+-
+-% 946
+-gsave 10 dict begin
+-newpath 401 36 moveto
+-347 36 lineto
+-347 0 lineto
+-401 0 lineto
+-closepath
+-stroke
+-gsave 10 dict begin
+-374 19 moveto (1) 7 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 995 -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 584 594 moveto
+-589 570 587 545 584 522 curveto
+-stroke
+-newpath 453 720 moveto
+-454 698 458 662 473 648 curveto
+-498 621 544 628 577 612 curveto
+-582 609 582 600 584 594 curveto
+-stroke
+-end grestore
+-
+-% 9f7
+-gsave 10 dict begin
+-292 666 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-292 667 moveto (9f7) 18 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9fb -> 9f7
+-newpath 363 724 moveto
+-347 711 325 693 309 680 curveto
+-stroke
+-
+-% 9fa
+-gsave 10 dict begin
+-402 666 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-402 667 moveto (9fa) 17 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9fb -> 9fa
+-gsave 10 dict begin
+-dashed
+-newpath 386 720 moveto
+-389 709 393 695 397 684 curveto
+-stroke
+-end grestore
+-
+-% 9fd
+-gsave 10 dict begin
+-584 666 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-584 667 moveto (9fd) 18 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9fe -> 9fd
+-newpath 584 720 moveto
+-584 709 584 695 584 684 curveto
+-stroke
+-
+-% 9fe -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 600 723 moveto
+-611 711 625 696 632 684 curveto
+-637 673 637 658 632 648 curveto
+-632 648 584 594 584 594 curveto
+-stroke
+-end grestore
+-
+-% 9f7 -> 994
+-gsave 10 dict begin
+-dashed
+-newpath 304 650 moveto
+-313 638 326 622 335 610 curveto
+-stroke
+-end grestore
+-
+-% 9f6
+-gsave 10 dict begin
+-275 594 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-275 595 moveto (9f6) 18 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9f7 -> 9f6
+-newpath 288 648 moveto
+-285 637 282 623 279 612 curveto
+-stroke
+-
+-% 9f9
+-gsave 10 dict begin
+-529 594 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-529 595 moveto (9f9) 18 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9fa -> 9f9
+-gsave 10 dict begin
+-dashed
+-newpath 423 654 moveto
+-447 641 485 619 508 606 curveto
+-stroke
+-end grestore
+-
+-% 95e
+-gsave 10 dict begin
+-457 522 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-457 523 moveto (95e) 20 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9fa -> 95e
+-newpath 465 594 moveto
+-464 579 462 556 460 540 curveto
+-stroke
+-newpath 420 652 moveto
+-439 638 464 614 465 594 curveto
+-stroke
+-
+-% 95f -> 95e
+-newpath 497 651 moveto
+-483 636 464 612 465 594 curveto
+-stroke
+-
+-% 95f -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 531 653 moveto
+-551 639 579 615 584 594 curveto
+-stroke
+-end grestore
+-
+-% 9fd -> 9f9
+-newpath 572 650 moveto
+-563 638 550 622 541 610 curveto
+-stroke
+-
+-% 9fd -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 582 648 moveto
+-581 631 580 608 584 594 curveto
+-stroke
+-end grestore
+-
+-% 993
+-gsave 10 dict begin
+-292 450 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-292 451 moveto (993) 21 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 994 -> 993
+-newpath 333 578 moveto
+-323 566 312 551 308 540 curveto
+-301 521 296 489 294 468 curveto
+-stroke
+-
+-% 994 -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 357 577 moveto
+-371 556 396 519 418 504 curveto
+-447 482 489 484 522 468 curveto
+-527 465 527 456 529 450 curveto
+-stroke
+-newpath 529 450 moveto
+-534 426 532 401 529 378 curveto
+-stroke
+-end grestore
+-
+-% 9f5
+-gsave 10 dict begin
+-347 522 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-347 523 moveto (9f5) 18 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9f6 -> 9f5
+-gsave 10 dict begin
+-dashed
+-newpath 290 579 moveto
+-302 567 319 550 332 537 curveto
+-stroke
+-end grestore
+-
+-% 9f2
+-gsave 10 dict begin
+-237 522 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-237 523 moveto (9f2) 18 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9f6 -> 9f2
+-newpath 266 577 moveto
+-260 566 252 551 246 539 curveto
+-stroke
+-
+-% 9f8
+-gsave 10 dict begin
+-529 522 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-529 523 moveto (9f8) 18 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9f9 -> 9f8
+-newpath 529 576 moveto
+-529 565 529 551 529 540 curveto
+-stroke
+-
+-% 9f9 -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 546 580 moveto
+-563 565 587 541 584 522 curveto
+-stroke
+-newpath 584 522 moveto
+-579 492 522 479 529 450 curveto
+-stroke
+-end grestore
+-
+-% 9f4
+-gsave 10 dict begin
+-474 450 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-474 451 moveto (9f4) 18 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9f5 -> 9f4
+-gsave 10 dict begin
+-dashed
+-newpath 368 510 moveto
+-392 497 430 475 453 462 curveto
+-stroke
+-end grestore
+-
+-% 95d
+-gsave 10 dict begin
+-402 378 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-402 379 moveto (95d) 21 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9f5 -> 95d
+-newpath 365 508 moveto
+-384 494 409 470 410 450 curveto
+-stroke
+-newpath 410 450 moveto
+-409 435 407 412 405 396 curveto
+-stroke
+-
+-% 9f2 -> 993
+-gsave 10 dict begin
+-dashed
+-newpath 249 506 moveto
+-258 494 271 478 280 466 curveto
+-stroke
+-end grestore
+-
+-% 9f1
+-gsave 10 dict begin
+-220 450 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-220 451 moveto (9f1) 18 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9f2 -> 9f1
+-newpath 233 504 moveto
+-230 493 227 479 224 468 curveto
+-stroke
+-
+-% 95e -> 95d
+-newpath 442 507 moveto
+-428 492 409 468 410 450 curveto
+-stroke
+-
+-% 95e -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 476 509 moveto
+-496 495 524 471 529 450 curveto
+-stroke
+-end grestore
+-
+-% 9f8 -> 9f4
+-newpath 517 506 moveto
+-508 494 495 478 486 466 curveto
+-stroke
+-
+-% 9f8 -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 527 504 moveto
+-526 487 525 464 529 450 curveto
+-stroke
+-end grestore
+-
+-% 992
+-gsave 10 dict begin
+-237 306 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-237 307 moveto (992) 21 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 993 -> 992
+-newpath 278 434 moveto
+-268 422 257 407 253 396 curveto
+-246 377 241 345 239 324 curveto
+-stroke
+-
+-% 993 -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 474 306 moveto
+-474 306 474 234 474 234 curveto
+-stroke
+-newpath 302 433 moveto
+-316 412 341 375 363 360 curveto
+-392 338 434 340 467 324 curveto
+-472 321 472 312 474 306 curveto
+-stroke
+-end grestore
+-
+-% 9ed
+-gsave 10 dict begin
+-182 378 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-182 379 moveto (9ed) 20 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9f1 -> 9ed
+-newpath 211 433 moveto
+-205 422 197 407 191 395 curveto
+-stroke
+-
+-% 9f0
+-gsave 10 dict begin
+-292 378 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-292 379 moveto (9f0) 18 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9f1 -> 9f0
+-gsave 10 dict begin
+-dashed
+-newpath 235 435 moveto
+-247 423 264 406 277 393 curveto
+-stroke
+-end grestore
+-
+-% 9f3
+-gsave 10 dict begin
+-474 378 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-474 379 moveto (9f3) 18 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9f4 -> 9f3
+-newpath 474 432 moveto
+-474 421 474 407 474 396 curveto
+-stroke
+-
+-% 9f4 -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 491 436 moveto
+-508 421 532 397 529 378 curveto
+-stroke
+-newpath 529 378 moveto
+-528 371 525 365 522 360 curveto
+-522 360 474 306 474 306 curveto
+-stroke
+-end grestore
+-
+-% 9ed -> 992
+-gsave 10 dict begin
+-dashed
+-newpath 194 362 moveto
+-203 350 216 334 225 322 curveto
+-stroke
+-end grestore
+-
+-% 9ec
+-gsave 10 dict begin
+-165 306 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-165 307 moveto (9ec) 19 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9ed -> 9ec
+-newpath 178 360 moveto
+-175 349 172 335 169 324 curveto
+-stroke
+-
+-% 9ef
+-gsave 10 dict begin
+-419 306 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-419 307 moveto (9ef) 17 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9f0 -> 9ef
+-gsave 10 dict begin
+-dashed
+-newpath 313 366 moveto
+-337 353 375 331 398 318 curveto
+-stroke
+-end grestore
+-
+-% 95c
+-gsave 10 dict begin
+-347 234 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-347 235 moveto (95c) 20 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9f0 -> 95c
+-newpath 310 364 moveto
+-329 350 354 326 355 306 curveto
+-stroke
+-newpath 355 306 moveto
+-354 291 352 268 350 252 curveto
+-stroke
+-
+-% 95d -> 95c
+-newpath 387 363 moveto
+-373 348 354 324 355 306 curveto
+-stroke
+-
+-% 95d -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 421 365 moveto
+-441 351 469 327 474 306 curveto
+-stroke
+-end grestore
+-
+-% 9f3 -> 9ef
+-newpath 462 362 moveto
+-453 350 440 334 431 322 curveto
+-stroke
+-
+-% 9f3 -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 472 360 moveto
+-471 343 470 320 474 306 curveto
+-stroke
+-end grestore
+-
+-% 954
+-gsave 10 dict begin
+-165 162 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-165 163 moveto (954) 21 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 992 -> 954
+-newpath 220 234 moveto
+-214 216 194 192 180 177 curveto
+-stroke
+-newpath 233 288 moveto
+-230 272 224 248 220 234 curveto
+-stroke
+-
+-% 992 -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 220 234 moveto
+-220 234 213 144 213 144 curveto
+-213 144 193 90 193 90 curveto
+-stroke
+-end grestore
+-
+-% 987
+-gsave 10 dict begin
+-165 234 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-165 235 moveto (987) 21 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9ec -> 987
+-newpath 165 288 moveto
+-165 277 165 263 165 252 curveto
+-stroke
+-
+-% 9eb
+-gsave 10 dict begin
+-275 234 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-275 235 moveto (9eb) 20 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9ec -> 9eb
+-gsave 10 dict begin
+-dashed
+-newpath 184 293 moveto
+-204 280 236 260 256 247 curveto
+-stroke
+-end grestore
+-
+-% 9ee
+-gsave 10 dict begin
+-419 234 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-419 235 moveto (9ee) 19 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9ef -> 9ee
+-newpath 419 288 moveto
+-419 277 419 263 419 252 curveto
+-stroke
+-
+-% 9ef -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 474 234 moveto
+-477 210 461 184 469 162 curveto
+-stroke
+-newpath 435 291 moveto
+-450 276 471 252 474 234 curveto
+-stroke
+-end grestore
+-
+-% 987 -> 954
+-gsave 10 dict begin
+-dashed
+-newpath 165 216 moveto
+-165 205 165 191 165 180 curveto
+-stroke
+-end grestore
+-
+-% 987 -> 946
+-newpath 193 90 moveto
+-225 56 305 34 347 24 curveto
+-stroke
+-newpath 152 218 moveto
+-136 197 113 162 126 144 curveto
+-144 120 173 110 193 90 curveto
+-stroke
+-
+-% 9ea
+-gsave 10 dict begin
+-410 162 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-410 163 moveto (9ea) 19 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9eb -> 9ea
+-gsave 10 dict begin
+-dashed
+-newpath 296 223 moveto
+-321 210 363 187 389 174 curveto
+-stroke
+-end grestore
+-
+-% 955
+-gsave 10 dict begin
+-374 90 27 18 ellipse_path
+-stroke
+-gsave 10 dict begin
+-374 91 moveto (955) 21 14.00 -0.50 alignedtext
+-end grestore
+-end grestore
+-
+-% 9eb -> 955
+-newpath 293 220 moveto
+-311 206 338 182 347 162 curveto
+-stroke
+-newpath 347 162 moveto
+-353 147 362 124 368 108 curveto
+-stroke
+-
+-% 95c -> 955
+-newpath 344 216 moveto
+-342 199 341 175 347 162 curveto
+-stroke
+-
+-% 95c -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 368 222 moveto
+-372 220 376 217 380 216 curveto
+-407 203 436 195 462 180 curveto
+-467 176 466 168 469 162 curveto
+-stroke
+-newpath 469 162 moveto
+-476 139 475 113 469 90 curveto
+-stroke
+-end grestore
+-
+-% 9ee -> 9ea
+-newpath 417 216 moveto
+-415 205 414 191 412 180 curveto
+-stroke
+-
+-% 9ee -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 432 218 moveto
+-442 206 454 190 462 180 curveto
+-465 174 466 168 469 162 curveto
+-stroke
+-end grestore
+-
+-% 954 -> 946
+-newpath 169 144 moveto
+-174 127 182 101 193 90 curveto
+-stroke
+-
+-% 954 -> 946
+-gsave 10 dict begin
+-dotted
+-end grestore
+-
+-% 9ea -> 955
+-newpath 401 145 moveto
+-396 133 388 119 383 107 curveto
+-stroke
+-
+-% 9ea -> 946
+-gsave 10 dict begin
+-dotted
+-newpath 429 149 moveto
+-448 133 474 109 469 90 curveto
+-stroke
+-newpath 469 90 moveto
+-462 66 427 44 401 30 curveto
+-stroke
+-end grestore
+-
+-% 955 -> 946
+-newpath 374 72 moveto
+-374 61 374 47 374 36 curveto
+-stroke
+-
+-% 955 -> 946
+-gsave 10 dict begin
+-dotted
+-end grestore
+-endpage
+-grestore
+-%%PageTrailer
+-%%Trailer
+-%%Pages: 1
+-end
+-restore
+-%%EOF
+-
+-%%EndDocument
+- @endspecial 448 4422 a Fo(Figure)34 b(1:)49 b(A)32 b(BDD)f
+-(representing)37 b(a)c(phase)h(constraint)i(for)e(the)f(optimization)j
+-(of)d(\002x)o(ed-)448 4535 y(polarity)27 b(Reed-Muller)g(forms.)33
+-b(The)24 b(label)i(of)f(each)h(node)f(is)g(the)g(unique)i(part)e(of)g
+-(the)g(node)448 4648 y(address.)31 b(All)21 b(nodes)j(on)f(the)g(same)f
+-(le)n(v)o(el)h(correspond)i(to)e(the)g(same)f(v)n(ariable,)i(whose)f
+-(name)448 4761 y(is)f(sho)n(wn)h(at)f(the)g(left)g(of)g(the)h(diagram.)
+-29 b(Dotted)23 b(lines)g(indicate)h(complement)g(arcs.)k(Dashed)448
+-4874 y(lines)d(indicate)g(re)o(gular)g(\223else\224)g(arcs.)p
+-Black Black 1897 5225 a(25)p Black eop end
+-%%Page: 26 26
+-TeXDict begin 26 25 bop Black Black 448 573 a Fo(to)24
+-b(your)h(source)h(\002les.)k(In)24 b(addition,)i(you)f(should)h(link)e
+-Fh(libcudd.a)19 b Fo(to)24 b(your)h(e)o(x)o(ecutable.)448
+-686 y(Some)20 b(platforms)h(require)h(speci\002c)e(compiler)i(and)e
+-(link)o(er)h(\003ags.)28 b(Refer)20 b(to)g(the)g Fh(Makefile)448
+-799 y Fo(in)k(the)g(top)f(le)n(v)o(el)h(directory)i(of)e(the)f(distrib)
+-n(ution.)448 1040 y Fi(4.2)99 b(Refer)n(ence)27 b(Counts)448
+-1214 y Fo(Garbage)d(collection)i(in)d(the)g(CUDD)d(package)25
+-b(is)e(based)h(on)f(reference)i(counts.)30 b(Each)22
+-b(node)448 1327 y(stores)j(the)f(sum)f(of)g(the)h(e)o(xternal)h
+-(references)h(and)e(internal)h(references.)31 b(An)23
+-b(internal)i(BDD)448 1440 y(or)33 b(ADD)e(node)i(is)g(created)h(by)f(a)
+-g(call)g(to)f Fn(cuddUniqueInter)r Fo(,)40 b(an)32 b(internal)j(ZDD)c
+-(node)i(is)448 1553 y(created)c(by)e(a)g(call)g(to)g
+-Fn(cuddUniqueInterZdd)r Fo(,)33 b(and)28 b(a)e(terminal)j(node)e(is)g
+-(created)i(by)e(a)g(call)448 1666 y(to)g Fn(cuddUniqueConst)r
+-Fo(.)40 b(If)27 b(the)f(node)i(returned)g(by)f(these)g(functions)i(is)d
+-(ne)n(w)-6 b(,)27 b(its)f(reference)448 1779 y(count)32
+-b(is)e(zero.)51 b(The)30 b(function)i(that)g(calls)f
+-Fn(cuddUniqueInter)r Fo(,)36 b Fn(cuddUniqueInterZdd)r
+-Fo(,)h(or)448 1892 y Fn(cuddUniqueConst)j Fo(is)35 b(responsible)j(for)
+-d(increasing)i(the)e(reference)i(count)f(of)f(the)g(node.)448
+-2005 y(This)24 b(is)f(accomplished)k(by)c(calling)i Fn(Cudd)p
+-1823 2005 28 4 v 34 w(Ref)13 b Fo(.)589 2118 y(When)22
+-b(a)f(function)i(is)e(no)g(longer)i(needed)f(by)g(an)f(application,)j
+-(the)e(memory)f(used)h(by)f(its)448 2231 y(diagram)32
+-b(can)g(be)f(rec)o(ycled)i(by)e(calling)i Fn(Cudd)p 1986
+-2231 V 33 w(Recur)o(siveDer)m(ef)47 b Fo(\(BDDs)30 b(and)i(ADDs\))d(or)
+-448 2344 y Fn(Cudd)p 649 2344 V 34 w(Recur)o(siveDer)m(efZdd)36
+-b Fo(\(ZDDs\).)49 b(These)31 b(functions)i(decrease)g(the)e(reference)i
+-(count)448 2456 y(of)h(the)h(node)g(passed)g(to)f(them.)61
+-b(If)34 b(the)g(reference)i(count)g(becomes)f(0,)h(then)f(tw)o(o)f
+-(things)448 2569 y(happen:)p Black 562 2718 a(1.)p Black
+-46 w(The)23 b(node)i(is)f(declared)i(\223dead;\224)g(this)e(entails)h
+-(increasing)i(the)d(counters)i(of)e(the)g(dead)676 2831
+-y(nodes.)56 b(\(One)32 b(counter)i(for)f(the)f(subtable)j(to)d(which)h
+-(the)g(node)g(belongs,)j(and)d(one)676 2944 y(global)f(counter)h(for)f
+-(the)f(unique)i(table)f(to)f(which)h(the)f(node)i(belongs.\))54
+-b(The)30 b(node)676 3057 y(itself)24 b(is)f(not)h(af)n(fected.)p
+-Black 562 3229 a(2.)p Black 46 w(The)f(function)i(is)f(recursi)n(v)o
+-(ely)i(called)f(on)e(the)h(tw)o(o)f(children)j(of)d(the)h(node.)448
+-3378 y(F)o(or)35 b(instance,)41 b(if)36 b(the)g(diagram)h(of)f(a)f
+-(function)j(does)f(not)f(share)h(an)o(y)f(nodes)i(with)d(other)448
+-3491 y(diagrams,)k(then)c(calling)h Fn(Cudd)p 1513 3491
+-V 33 w(Recur)o(siveDer)m(ef)50 b Fo(or)34 b Fn(Cudd)p
+-2459 3491 V 34 w(Recur)o(siveDer)m(efZdd)40 b Fo(on)34
+-b(its)448 3603 y(root)24 b(will)g(cause)g(all)g(the)g(nodes)h(of)e(the)
+-h(diagram)g(to)g(become)g(dead.)589 3716 y(When)d(the)f(number)g(of)g
+-(dead)h(nodes)g(reaches)g(a)f(gi)n(v)o(en)g(le)n(v)o(el)g
+-(\(dynamically)j(determined)448 3829 y(by)33 b(the)f(package\))j
+-(garbage)e(collection)i(tak)o(es)f(place.)56 b(During)33
+-b(garbage)g(collection)i(dead)448 3942 y(nodes)25 b(are)f(returned)h
+-(to)f(the)g(node)g(free)g(list.)589 4055 y(When)37 b(a)e(ne)n(w)g(node)
+-i(is)f(created,)k(it)c(is)g(important)h(to)f(increase)i(its)e
+-(reference)i(count)448 4168 y(before)25 b(one)f(of)g(the)f(tw)o(o)h
+-(follo)n(wing)h(e)n(v)o(ents)f(occurs:)p Black 562 4317
+-a(1.)p Black 46 w(A)19 b(call)j(to)e Fn(cuddUniqueInter)r
+-Fo(,)26 b(to)21 b Fn(cuddUniqueInterZdd)r Fo(,)26 b(to)21
+-b Fn(cuddUniqueConst)r Fo(,)j(or)676 4430 y(to)f(a)g(function)j(that)e
+-(may)f(e)n(v)o(entually)j(cause)f(a)e(call)h(to)f(them.)p
+-Black 562 4602 a(2.)p Black 46 w(A)28 b(call)i(to)f Fn(Cudd)p
+-1230 4602 V 34 w(Recur)o(siveDer)m(ef)13 b Fo(,)33 b(to)c
+-Fn(Cudd)p 2186 4602 V 34 w(Recur)o(siveDer)m(efZdd)r
+-Fo(,)34 b(or)29 b(to)g(a)g(func-)676 4715 y(tion)24 b(that)g(may)f(e)n
+-(v)o(entually)j(cause)f(a)e(call)h(to)f(them.)448 4863
+-y(In)31 b(practice,)j(it)d(is)f(recommended)j(to)e(increase)i(the)e
+-(reference)i(count)f(as)f(soon)g(as)g(the)g(re-)448 4976
+-y(turned)25 b(pointer)h(has)d(been)i(tested)g(for)e(not)h(being)h
+-(NULL.)p Black 1897 5225 a(26)p Black eop end
+-%%Page: 27 27
+-TeXDict begin 27 26 bop Black Black 448 573 a Fp(4.2.1)92
+-b(NULL)21 b(Retur)o(n)h(V)-8 b(alues)448 747 y Fo(The)25
+-b(interf)o(ace)i(to)e(the)g(memory)g(management)i(functions)g(\(e.g.,)e
+-(malloc\))h(used)g(by)f(CUDD)448 860 y(intercepts)k(NULL)c(return)i(v)n
+-(alues)h(and)f(calls)g(a)f(handler)-5 b(.)40 b(The)26
+-b(def)o(ault)i(handler)g(e)o(xits)f(with)448 973 y(an)i(error)h
+-(message.)47 b(If)29 b(the)g(application)k(does)d(not)f(install)i
+-(another)g(handler)l(,)h(therefore,)h(a)448 1086 y(NULL)21
+-b(return)k(v)n(alue)g(from)e(an)h(e)o(xported)h(function)h(of)d(CUDD)e
+-(signals)26 b(an)d(internal)j(error)-5 b(.)589 1199 y(If)23
+-b(the)f(aplication,)j(ho)n(we)n(v)o(er)l(,)e(installs)i(another)f
+-(handler)g(that)f(lets)g(e)o(x)o(ecution)h(continue,)448
+-1312 y(a)i(NULL)f(pointer)j(returned)g(by)f(an)g(e)o(xported)h
+-(function)h(typically)g(indicates)g(that)e(the)g(pro-)448
+-1425 y(cess)32 b(has)g(run)g(out)g(of)f(memory)-6 b(.)53
+-b Fn(Cudd)p 1760 1425 28 4 v 33 w(ReadErr)l(orCode)34
+-b Fo(can)d(be)h(used)g(to)f(ascertain)j(the)448 1537
+-y(nature)25 b(of)f(the)f(problem.)589 1650 y(An)37 b(application)j
+-(that)d(tests)h(for)f(the)h(result)g(being)g(NULL)c(can)k(try)f(some)g
+-(remedial)448 1763 y(action,)25 b(if)e(it)g(runs)h(out)g(of)g(memory)-6
+-b(.)28 b(F)o(or)23 b(instance,)i(it)e(may)h(free)g(some)f(memory)h
+-(that)g(is)f(not)448 1876 y(strictly)29 b(necessary)-6
+-b(,)31 b(or)c(try)g(a)g(slo)n(wer)g(algorithm)i(that)f(tak)o(es)g(less)
+-g(space.)40 b(As)27 b(an)g(e)o(xample,)448 1989 y(CUDD)e(o)o(v)o
+-(errides)k(the)f(def)o(ault)h(handler)g(when)f(trying)g(to)g(enlar)n
+-(ge)h(the)f(cache)g(or)f(increase)448 2102 y(the)i(number)g(of)f(slots)
+-h(of)f(the)h(unique)h(table.)43 b(If)28 b(the)h(allocation)h(f)o(ails,)
+-g(the)f(package)h(prints)448 2215 y(out)24 b(a)f(message)i(and)f
+-(continues)i(without)f(resizing)g(the)f(cache.)448 2461
+-y Fp(4.2.2)92 b Fa(Cudd)p 928 2461 V 33 w(Recursiv)o(eDeref)35
+-b Fp(vs.)23 b Fa(Cudd)p 1901 2461 V 33 w(Deref)448 2635
+-y Fo(It)36 b(is)f(often)i(the)f(case)g(that)h(a)e(recursi)n(v)o(e)i
+-(procedure)i(has)d(to)g(protect)h(the)f(result)h(it)e(is)h(go-)448
+-2748 y(ing)j(to)g(return,)k(while)c(it)f(disposes)j(of)d(intermediate)j
+-(results.)75 b(\(See)38 b(the)h(pre)n(vious)i(dis-)448
+-2861 y(cussion)i(on)d(when)h(to)f(increase)j(reference)g(counts.\))81
+-b(Once)41 b(the)g(intermediate)i(results)448 2974 y(ha)n(v)o(e)37
+-b(been)f(properly)i(disposed)f(of,)i(the)c(\002nal)h(result)h(must)e
+-(be)h(returned)h(to)f(its)f(pristine)448 3087 y(state,)h(in)d(which)g
+-(the)g(root)h(node)g(may)e(ha)n(v)o(e)i(a)e(reference)k(count)e(of)e
+-(0.)57 b(One)32 b(cannot)j(use)448 3200 y Fn(Cudd)p 649
+-3200 V 34 w(Recur)o(siveDer)m(ef)49 b Fo(\(or)33 b Fn(Cudd)p
+-1624 3200 V 34 w(Recur)o(siveDer)m(efZdd)r Fo(\))j(for)d(this)h
+-(purpose,)j(because)e(it)448 3313 y(may)22 b(erroneously)j(mak)o(e)d
+-(some)g(nodes)h(dead.)29 b(Therefore,)24 b(the)e(package)i(pro)o(vides)
+-g(a)d(dif)n(fer)n(-)448 3425 y(ent)k(function:)35 b Fn(Cudd)p
+-1144 3425 V 33 w(Der)m(ef)13 b Fo(.)33 b(This)25 b(function)i(is)d(not)
+-i(recursi)n(v)o(e,)g(and)g(does)f(not)h(change)g(the)448
+-3538 y(dead)g(node)f(counts.)34 b(Its)25 b(use)g(is)f(almost)h(e)o
+-(xclusi)n(v)o(ely)i(the)e(one)g(just)g(described:)34
+-b(Decreasing)448 3651 y(the)26 b(reference)h(count)g(of)e(the)g(root)h
+-(of)f(the)h(\002nal)f(result)h(before)h(returning)h(from)d(a)g(recursi)
+-n(v)o(e)448 3764 y(procedure.)448 4010 y Fp(4.2.3)92
+-b(When)22 b(Incr)n(easing)j(the)e(Refer)n(ence)i(Count)d(is)h
+-(Unnecessary)448 4184 y Fo(When)29 b(a)f(cop)o(y)h(of)f(a)g
+-(prede\002ned)i(constant)h(or)d(of)g(a)g(simple)h(BDD)d(v)n(ariable)k
+-(is)e(needed)i(for)448 4297 y(comparison)g(purposes,)g(then)f(calling)g
+-Fn(Cudd)p 1931 4297 V 33 w(Ref)40 b Fo(is)27 b(not)h(necessary)-6
+-b(,)31 b(because)e(these)f(sim-)448 4410 y(ple)j(functions)i(are)d
+-(guaranteed)k(to)c(ha)n(v)o(e)h(reference)i(counts)f(greater)g(than)f
+-(0)f(at)g(all)g(times.)448 4523 y(If)35 b(no)g(call)g(to)f
+-Fn(Cudd)p 1138 4523 V 34 w(Ref)47 b Fo(is)35 b(made,)i(then)f(no)f
+-(attempt)g(to)g(free)g(the)g(diagram)h(by)f(calling)448
+-4636 y Fn(Cudd)p 649 4636 V 34 w(Recur)o(siveDer)m(ef)k
+-Fo(or)24 b Fn(Cudd)p 1575 4636 V 33 w(Recur)o(siveDer)m(efZdd)29
+-b Fo(should)c(be)f(made.)p Black 1897 5225 a(27)p Black
+-eop end
+-%%Page: 28 28
+-TeXDict begin 28 27 bop Black Black 448 573 a Fp(4.2.4)92
+-b(Saturating)24 b(Incr)n(ements)g(and)f(Decr)n(ements)448
+-747 y Fo(On)30 b(32-bit)i(machines,)i(the)d(CUDD)d(package)33
+-b(stores)f(the)f(reference)i(counts)f(in)f(unsigned)448
+-860 y(short)38 b(int')-5 b(s.)68 b(F)o(or)36 b(lar)n(ge)i(diagrams,)j
+-(it)36 b(is)g(possible)j(for)e(some)f(reference)j(counts)f(to)e(e)o(x-)
+-448 973 y(ceed)27 b(the)g(capacity)h(of)f(an)f(unsigned)j(short)e(int.)
+-38 b(Therefore,)28 b(increments)g(and)f(decrements)448
+-1086 y(of)34 b(reference)j(counts)f(are)e Fn(satur)o(ating)p
+-Fo(.)64 b(This)34 b(means)g(that)h(once)g(a)f(reference)j(count)e(has)
+-448 1199 y(reached)24 b(the)e(maximum)f(possible)j(v)n(alue,)f(it)e(is)
+-h(no)g(longer)h(changed)h(by)d(calls)i(to)e Fn(Cudd)p
+-3264 1199 28 4 v 34 w(Ref)p Fo(,)448 1312 y Fn(Cudd)p
+-649 1312 V 34 w(Recur)o(siveDer)m(ef)13 b Fo(,)46 b Fn(Cudd)p
+-1519 1312 V 34 w(Recur)o(siveDer)m(efZdd)r Fo(,)h(or)40
+-b Fn(Cudd)p 2635 1312 V 34 w(Der)m(ef)13 b Fo(.)77 b(As)39
+-b(a)h(conse-)448 1425 y(quence,)30 b(some)d(nodes)i(that)e(ha)n(v)o(e)h
+-(no)f(references)j(may)d(not)h(be)f(declared)i(dead.)41
+-b(This)27 b(may)448 1537 y(result)j(in)e(a)g(small)h(w)o(aste)f(of)h
+-(memory)-6 b(,)29 b(which)g(is)f(normally)i(more)f(than)g(of)n(fset)g
+-(by)g(the)f(re-)448 1650 y(duction)e(in)d(size)h(of)g(the)g(node)g
+-(structure.)589 1763 y(When)j(using)h(64-bit)f(pointers,)i(there)f(is)e
+-(normally)i(no)e(memory)h(adv)n(antage)i(from)d(us-)448
+-1876 y(ing)e(short)h(int')-5 b(s)24 b(instead)h(of)e(int')-5
+-b(s)25 b(in)e(a)g(DdNode.)29 b(Therefore,)c(increments)g(and)f
+-(decrements)448 1989 y(are)31 b(not)h(saturating)h(in)e(that)h(case.)51
+-b(What)31 b(option)i(is)e(in)f(ef)n(fect)i(depends)h(on)e(tw)o(o)g
+-(macros,)448 2102 y(SIZEOF)p 763 2102 V 31 w(V)l(OID)p
+-1018 2102 V 32 w(P)f(and)h(SIZEOF)p 1602 2102 V 30 w(INT,)e(de\002ned)j
+-(in)e(the)h(e)o(xternal)h(header)g(\002le)e(\()p Fn(cudd.h)p
+-Fo(\).)448 2215 y(The)g(increments)i(and)e(decrements)i(of)e(the)g
+-(reference)i(counts)f(are)f(performed)i(using)f(tw)o(o)448
+-2328 y(macros:)d Fn(cuddSatInc)21 b Fo(and)d Fn(cuddSatDec)p
+-Fo(,)k(whose)c(de\002nitions)i(depend)g(on)e(SIZEOF)p
+-3170 2328 V 31 w(V)l(OID)p 3425 2328 V 33 w(P)448 2441
+-y(and)24 b(SIZEOF)p 917 2441 V 31 w(INT.)448 2690 y Fi(4.3)99
+-b(Complement)26 b(Ar)n(cs)448 2864 y Fo(If)j(ADDs)f(are)h(restricted)j
+-(to)d(use)g(only)h(the)g(constants)i(0)c(and)i(1,)g(the)o(y)f(beha)n(v)
+-o(e)i(lik)o(e)f(BDDs)448 2977 y(without)d(complement)h(arcs.)36
+-b(It)25 b(is)h(normally)h(easier)g(to)f(write)g(code)g(that)h
+-(manipulates)h(0-1)448 3090 y(ADDs,)33 b(than)h(to)e(write)h(code)g
+-(for)g(BDDs.)54 b(Ho)n(we)n(v)o(er)l(,)34 b(complementation)i(is)d(tri)
+-n(vial)g(with)448 3203 y(complement)c(arcs,)g(and)f(is)f(not)h(tri)n
+-(vial)g(without.)41 b(As)27 b(a)g(consequence,)k(with)d(complement)448
+-3316 y(arcs)h(it)g(is)f(possible)j(to)d(check)i(for)f(more)f(terminal)i
+-(cases)g(and)f(it)f(is)g(possible)j(to)d(apply)i(De)448
+-3429 y(Mor)n(gan')-5 b(s)25 b(la)o(ws)d(to)g(reduce)j(problems)f(that)f
+-(are)g(essentially)j(identical)f(to)d(a)h(standard)i(form.)448
+-3542 y(This)f(in)f(turn)h(increases)i(the)e(utilization)i(of)e(the)g
+-(cache.)589 3655 y(The)38 b(complement)h(attrib)n(ute)h(is)d(stored)i
+-(in)e(the)h(least)h(signi\002cant)g(bit)f(of)f(the)h(\223else\224)448
+-3768 y(pointer)25 b(of)f(each)g(node.)29 b(An)23 b(e)o(xternal)i
+-(pointer)g(to)e(a)g(function)j(can)e(also)g(be)f(complemented.)448
+-3880 y(The)d(\223then\224)j(pointer)f(to)e(a)h(node,)g(on)g(the)g
+-(other)g(hand,)h(is)f(al)o(w)o(ays)g Fn(r)m(e)l(gular)p
+-Fo(.)30 b(It)20 b(is)h(a)f(mistak)o(e)h(to)448 3993 y(use)f(a)f
+-(complement)i(pointer)g(as)f(it)f(is)g(to)g(address)j(memory)-6
+-b(.)27 b(Instead,)22 b(it)d(is)g(al)o(w)o(ays)i(necessary)448
+-4106 y(to)28 b(obtain)i(a)e(re)o(gular)h(v)o(ersion)h(of)e(it.)42
+-b(This)28 b(is)g(normally)h(done)g(by)g(calling)g Fn(Cudd)p
+-3094 4106 V 34 w(Re)l(gular)r Fo(.)448 4219 y(It)f(is)f(also)h(a)f
+-(mistak)o(e)i(to)e(call)h Fn(cuddUniqueInter)34 b Fo(with)27
+-b(a)g(complemented)j(\223then\224)f(child)f(as)448 4332
+-y(ar)n(gument.)i(The)22 b(calling)i(procedure)h(must)d(apply)h(De)e
+-(Mor)n(gan')-5 b(s)24 b(la)o(ws)d(by)h(complementing)448
+-4445 y(both)32 b(pointers)i(passed)f(to)e Fn(cuddUniqueInter)38
+-b Fo(and)31 b(then)h(taking)h(the)f(complement)h(of)e(the)448
+-4558 y(result.)p Black 1897 5225 a(28)p Black eop end
+-%%Page: 29 29
+-TeXDict begin 29 28 bop Black Black 448 573 a Fi(4.4)99
+-b(The)26 b(Cache)448 747 y Fo(Each)38 b(entry)g(of)g(the)f(cache)i
+-(consists)g(of)f(\002)n(v)o(e)e(\002elds:)57 b(The)37
+-b(operator)l(,)43 b(three)c(pointers)g(to)448 860 y(operands)d(and)e(a)
+-f(pointer)i(to)e(the)h(result.)60 b(The)33 b(operator)i(and)f(the)g
+-(three)g(pointers)i(to)d(the)448 973 y(operands)26 b(are)e(combined)h
+-(to)f(form)f(three)i(w)o(ords.)k(The)23 b(combination)j(relies)f(on)e
+-(tw)o(o)h(f)o(acts:)p Black 585 1155 a Fm(\017)p Black
+-46 w Fo(Most)i(operations)k(ha)n(v)o(e)d(one)h(or)e(tw)o(o)h(operands.)
+-40 b(A)26 b(fe)n(w)g(bits)h(are)g(suf)n(\002cient)h(to)f(dis-)676
+-1268 y(criminate)e(all)e(three-operands)28 b(operations.)p
+-Black 585 1454 a Fm(\017)p Black 46 w Fo(All)h(nodes)h(are)g(aligned)h
+-(to)f(16-byte)h(boundaries.)50 b(\(32-byte)32 b(boundaries)h(if)c
+-(64-bit)676 1567 y(pointers)j(are)f(used.\))51 b(Hence,)33
+-b(there)e(are)g(a)g(fe)n(w)e(bits)j(a)n(v)n(ailable)h(to)d(distinguish)
+-k(the)676 1679 y(three-operand)27 b(operations)g(from)c(te)g(others)i
+-(and)f(to)g(assign)h(unique)g(codes)g(to)e(them.)589
+-1862 y(The)30 b(cache)h(does)f(not)g(contrib)n(ute)j(to)d(the)g
+-(reference)i(counts)f(of)f(the)g(nodes.)48 b(The)30 b(f)o(act)448
+-1975 y(that)h(the)g(cache)g(contains)h(a)e(pointer)i(to)e(a)g(node)h
+-(does)g(not)f(imply)h(that)g(the)f(node)h(is)f(ali)n(v)o(e.)448
+-2088 y(Instead,)k(when)d(garbage)h(collection)h(tak)o(es)e(place,)i
+-(all)e(entries)h(of)e(the)h(cache)h(pointing)g(to)448
+-2201 y(dead)25 b(nodes)f(are)g(cleared.)589 2313 y(The)f(cache)i(is)e
+-(also)h(cleared)h(\(of)f(all)f(entries\))j(when)d(dynamic)i(reordering)
+-h(tak)o(es)f(place.)448 2426 y(In)f(both)g(cases,)g(the)g(entries)h
+-(remo)o(v)o(ed)f(from)g(the)g(cache)g(are)g(about)h(to)e(become)i(in)l
+-(v)n(alid.)589 2539 y(All)30 b(operands)j(and)e(results)i(in)d(a)g
+-(cache)i(entry)g(must)e(be)h(pointers)h(to)f(DdNodes.)50
+-b(If)31 b(a)448 2652 y(function)f(produces)f(more)f(than)g(one)f
+-(result,)j(or)d(uses)h(more)f(than)h(three)g(ar)n(guments,)i(there)448
+-2765 y(are)24 b(currently)i(tw)o(o)d(solutions:)p Black
+-585 2947 a Fm(\017)p Black 46 w Fo(Build)g(a)g(separate,)j(local,)e
+-(cache.)30 b(\(Using,)24 b(for)f(instance,)j(the)e Fn(st)h
+-Fo(library.\))p Black 585 3133 a Fm(\017)p Black 46 w
+-Fo(Combine)33 b(multiple)h(results,)i(or)c(multiple)i(operands,)j(into)
+-c(a)g(single)h(diagram,)h(by)676 3246 y(b)n(uilding)26
+-b(a)d(\223multiple)o(xing)j(structure\224)g(with)e(reserv)o(ed)h(v)n
+-(ariables.)448 3428 y(Support)35 b(of)f(the)h(former)f(solution)j(is)c
+-(under)j(de)n(v)o(elopment.)62 b(\(See)34 b Fh(cuddLCache.c)p
+-Fo(..\))448 3541 y(Support)25 b(for)f(the)f(latter)i(solution)h(may)d
+-(be)h(pro)o(vided)h(in)f(future)g(v)o(ersions)i(of)d(the)h(package.)589
+-3654 y(There)e(are)g(three)h(sets)g(of)e(interf)o(ace)j(functions)h(to)
+-c(the)i(cache.)29 b(The)21 b(\002rst)h(set)g(is)f(for)h(func-)448
+-3767 y(tions)31 b(with)f(three)i(operands:)44 b Fn(cuddCac)o(heInsert)
+-36 b Fo(and)31 b Fn(cuddCac)o(heLookup)p Fo(.)52 b(The)30
+-b(second)448 3880 y(set)21 b(is)g(for)g(functions)j(with)c(tw)o(o)h
+-(operands:)30 b Fn(cuddCac)o(heInsert2)25 b Fo(and)d
+-Fn(cuddCac)o(heLookup2)p Fo(.)448 3993 y(The)33 b(second)i(set)f(is)f
+-(for)h(functions)i(with)d(one)h(operand:)51 b Fn(cuddCac)o(heInsert1)38
+-b Fo(and)c Fn(cudd-)448 4106 y(Cac)o(heLookup1)p Fo(.)42
+-b(The)26 b(second)j(set)e(is)g(slightly)i(f)o(aster)f(than)g(the)f
+-(\002rst,)h(and)f(the)g(third)h(set)f(is)448 4219 y(slightly)f(f)o
+-(aster)f(than)f(the)g(second.)448 4463 y Fp(4.4.1)92
+-b(Cache)23 b(Sizing)448 4638 y Fo(The)e(size)i(of)e(the)h(cache)h(can)f
+-(increase)h(during)h(the)d(e)o(x)o(ecution)j(of)e(an)f(application.)31
+-b(\(There)22 b(is)448 4751 y(currently)27 b(no)d(w)o(ay)g(to)g
+-(decrease)i(the)e(size)h(of)f(the)g(cache,)i(though)f(it)f(w)o(ould)h
+-(not)f(be)g(dif)n(\002cult)448 4863 y(to)33 b(do)g(it.\))57
+-b(When)33 b(a)g(cache)h(miss)f(occurs,)j(the)e(package)g(uses)g(the)f
+-(follo)n(wing)i(criteria)f(to)448 4976 y(decide)25 b(whether)g(to)e
+-(resize)i(the)f(cache:)p Black 1897 5225 a(29)p Black
+-eop end
+-%%Page: 30 30
+-TeXDict begin 30 29 bop Black Black Black 562 573 a Fo(1.)p
+-Black 46 w(If)28 b(the)h(cache)g(already)i(e)o(xceeds)f(the)f(limit)f
+-(gi)n(v)o(en)h(by)g(the)g Fh(maxCache)24 b Fo(\002eld)29
+-b(of)f(the)676 686 y(manager)l(,)i(no)f(resizing)h(tak)o(es)f(place.)44
+-b(The)28 b(limit)g(is)g(the)h(minimum)f(of)g(tw)o(o)g(v)n(alues:)676
+-799 y(a)k(v)n(alue)i(set)f(at)f(initialization)37 b(time)c(and)g
+-(possibly)i(modi\002ed)e(by)g(the)g(application,)676
+-912 y(which)g(constitutes)i(the)e(hard)h(limit)e(be)o(yond)i(which)f
+-(the)g(cache)h(will)e(ne)n(v)o(er)h(gro)n(w;)676 1024
+-y(and)23 b(a)f(number)i(that)f(depends)i(on)e(the)g(current)h(total)g
+-(number)g(of)e(slots)i(in)f(the)g(unique)676 1137 y(table.)p
+-Black 562 1325 a(2.)p Black 46 w(If)f(the)h(cache)h(is)f(not)g(too)g
+-(lar)n(ge)h(already)-6 b(,)25 b(resizing)g(is)d(decided)j(based)f(on)f
+-(the)g(hit)g(rate.)676 1438 y(The)28 b(polic)o(y)i(adopted)h(by)e(the)h
+-(CUDD)c(package)31 b(is)e(\223re)n(w)o(ard-based.)-6
+-b(\224)48 b(If)29 b(the)g(cache)676 1551 y(hit)23 b(rate)h(is)g(high,)g
+-(then)g(it)f(is)h(w)o(orthwhile)h(to)e(increase)j(the)d(size)h(of)g
+-(the)g(cache.)448 1738 y(When)i(resizing)h(tak)o(es)f(place,)g(the)g
+-(statistical)h(counters)h(used)e(to)f(compute)h(the)f(hit)h(rate)f(are)
+-448 1851 y(reinitialized)g(so)c(as)g(to)g(pre)n(v)o(ent)h(immediate)g
+-(resizing.)30 b(The)21 b(number)h(of)f(entries)i(is)d(doubled.)589
+-1964 y(The)k(rationale)i(for)e(the)g(\223re)n(w)o(ard-based\224)j
+-(polic)o(y)e(is)e(as)h(follo)n(ws.)30 b(In)23 b(man)o(y)h(BDD/ADD)448
+-2077 y(applications)j(the)c(hit)g(rate)g(is)g(not)g(v)o(ery)g(sensiti)n
+-(v)o(e)i(to)d(the)h(size)h(of)e(the)i(cache:)30 b(It)22
+-b(is)h(primarily)448 2190 y(a)i(function)j(of)e(the)g(problem)g
+-(instance)i(at)d(hand.)36 b(If)25 b(a)h(lar)n(ge)g(hit)g(rate)g(is)g
+-(observ)o(ed,)h(chances)448 2303 y(are)c(that)g(by)g(using)g(a)f(lar)n
+-(ge)i(cache,)g(the)e(results)i(of)f(lar)n(ge)h(problems)g(\(those)f
+-(that)h(w)o(ould)f(tak)o(e)448 2416 y(longer)31 b(to)f(solv)o(e\))g
+-(will)g(survi)n(v)o(e)g(in)g(the)g(cache)h(without)f(being)h(o)o(v)o
+-(erwritten)g(long)f(enough)448 2529 y(to)i(cause)i(a)d(v)n(aluable)k
+-(cache)e(hit.)55 b(Notice)32 b(that)h(when)f(a)g(lar)n(ge)i(problem)f
+-(is)f(solv)o(ed)h(more)448 2642 y(than)c(once,)g(so)f(are)g(its)g
+-(recursi)n(v)o(ely)i(generated)g(subproblems.)44 b(If)28
+-b(the)g(hit)f(rate)i(is)e(lo)n(w)-6 b(,)28 b(the)448
+-2755 y(probability)f(of)c(lar)n(ge)i(problems)g(being)g(solv)o(ed)g
+-(more)e(than)i(once)f(is)f(lo)n(w)-6 b(.)589 2868 y(The)20
+-b(other)h(observ)n(ation)j(about)d(the)f(cache)i(sizing)f(polic)o(y)g
+-(is)f(that)h(there)g(is)f(little)h(point)g(in)448 2980
+-y(k)o(eeping)k(a)d(cache)h(which)g(is)f(much)h(lar)n(ger)h(than)f(the)g
+-(unique)h(table.)29 b(Ev)o(ery)23 b(time)f(the)h(unique)448
+-3093 y(table)29 b(\223\002lls)g(up,)-6 b(\224)29 b(garbage)g
+-(collection)i(is)d(in)l(v)n(ok)o(ed)j(and)e(the)f(cache)h(is)f(cleared)
+-i(of)e(all)g(dead)448 3206 y(entries.)h(A)19 b(cache)i(that)g(is)f
+-(much)g(lar)n(ger)i(than)f(the)f(unique)i(table)f(is)f(therefore)i
+-(less)f(than)f(fully)448 3319 y(utilized.)448 3565 y
+-Fp(4.4.2)92 b(Local)24 b(Caches)448 3739 y Fo(Sometimes)k(it)f(may)f
+-(be)i(necessary)h(or)e(con)l(v)o(enient)j(to)d(use)h(a)f(local)h
+-(cache.)40 b(A)26 b(local)i(cache)448 3852 y(can)f(be)g(lossless)i
+-(\(no)e(results)h(are)e(e)n(v)o(er)h(o)o(v)o(erwritten\),)i(or)e(it)f
+-(may)g(store)i(objects)g(for)f(which)448 3965 y(canonical)36
+-b(representations)h(are)c(not)g(a)n(v)n(ailable.)59 b(One)33
+-b(important)h(f)o(act)g(to)f(k)o(eep)g(in)g(mind)448
+-4078 y(when)d(using)g(a)f(local)h(cache)h(is)e(that)h(local)g(caches)h
+-(are)e(not)h(cleared)h(during)g(garbage)g(col-)448 4191
+-y(lection)e(or)e(before)i(reordering.)42 b(Therefore,)29
+-b(it)e(is)g(necessary)j(to)d(increment)i(the)e(reference)448
+-4304 y(count)22 b(of)d(all)i(nodes)g(pointed)h(by)e(a)g(local)h(cache.)
+-28 b(\(Unless)21 b(their)g(reference)h(counts)g(are)e(guar)n(-)448
+-4417 y(anteed)25 b(positi)n(v)o(e)h(in)d(some)h(other)h(w)o(ay)-6
+-b(.)29 b(One)23 b(such)i(w)o(ay)e(is)h(by)f(including)k(all)d(partial)h
+-(results)448 4530 y(in)i(the)g(global)i(result.\))40
+-b(Before)27 b(disposing)j(of)d(the)g(local)h(cache,)g(all)f(elements)i
+-(stored)f(in)f(it)448 4643 y(must)20 b(be)g(passed)h(to)e
+-Fn(Cudd)p 1300 4643 28 4 v 34 w(Recur)o(siveDer)m(ef)13
+-b Fo(.)30 b(As)19 b(consequence)k(of)d(the)g(f)o(act)g(that)g(all)g
+-(results)448 4756 y(in)i(a)g(local)h(cache)g(are)g(referenced,)i(it)d
+-(is)g(generally)i(con)l(v)o(enient)h(to)e(store)g(in)f(the)g(local)h
+-(cache)448 4868 y(also)h(the)e(result)i(of)f(tri)n(vial)g(problems,)h
+-(which)f(are)g(not)g(usually)h(stored)g(in)f(the)f(global)i(cache.)p
+-Black 1897 5225 a(30)p Black eop end
+-%%Page: 31 31
+-TeXDict begin 31 30 bop Black Black 448 573 a Fo(Otherwise,)35
+-b(after)d(a)g(recursi)n(v)o(e)h(call,)i(it)c(is)h(dif)n(\002cult)g(to)g
+-(tell)h(whether)f(the)h(result)g(is)e(in)h(the)448 686
+-y(cache,)25 b(and)f(therefore)h(referenced,)h(or)e(not)g(in)f(the)h
+-(cache,)g(and)g(therefore)i(not)e(referenced.)589 799
+-y(An)19 b(alternati)n(v)o(e)i(approach)g(to)e(referencing)j(the)d
+-(results)i(in)e(the)g(local)h(caches)g(is)f(to)g(install)448
+-912 y(hook)25 b(functions)h(\(see)e(Section)g(3.16\))h(to)e(be)h(e)o(x)
+-o(ecuted)h(before)g(garbage)g(collection.)448 1158 y
+-Fi(4.5)99 b(The)26 b(Unique)g(T)-9 b(able)448 1333 y
+-Fo(A)29 b(recursi)n(v)o(e)j(procedure)h(typically)f(splits)g(the)e
+-(operands)j(by)d(e)o(xpanding)j(with)d(respect)h(to)448
+-1445 y(the)d(topmost)h(v)n(ariable.)43 b(T)-7 b(opmost)28
+-b(in)g(this)g(conte)o(xt)h(refers)g(to)e(the)h(v)n(ariable)i(that)e(is)
+-g(closest)448 1558 y(to)i(the)f(roots)i(in)e(the)h(current)h(v)n
+-(ariable)g(order)-5 b(.)47 b(The)29 b(nodes,)j(on)d(the)h(other)g
+-(hand,)i(hold)e(the)448 1671 y(inde)o(x,)c(which)f(is)g(in)l(v)n
+-(ariant)i(with)e(reordering.)36 b(Therefore,)26 b(when)f(splitting,)j
+-(one)d(must)g(use)448 1784 y(the)j(permutation)i(array)e(maintained)i
+-(by)d(the)h(package)i(to)d(get)h(the)f(right)i(le)n(v)o(el.)40
+-b(Access)28 b(to)448 1897 y(the)22 b(permutation)i(array)e(is)f(pro)o
+-(vided)i(by)f(the)f(macro)h Fn(cuddI)27 b Fo(for)21 b(BDDs)f(and)i
+-(ADDs,)d(and)j(by)448 2010 y(the)i(macro)g Fn(cuddIZ)29
+-b Fo(for)24 b(ZDDs.)589 2123 y(The)i(unique)i(table)f(consists)h(of)e
+-(as)g(man)o(y)g(hash)h(tables)h(as)e(there)h(are)f(v)n(ariables)i(in)e
+-(use.)448 2236 y(These)e(has)f(tables)h(are)g(called)g
+-Fn(unique)h(subtables)p Fo(.)31 b(The)23 b(sizes)g(of)g(the)h(unique)h
+-(subtables)g(are)448 2349 y(determined)h(by)e(tw)o(o)f(criteria:)p
+-Black 562 2524 a(1.)p Black 46 w(The)g(collision)j(lists)e(should)h(be)
+-f(short)g(to)g(k)o(eep)g(access)h(time)e(do)n(wn.)p Black
+-562 2707 a(2.)p Black 46 w(There)18 b(should)i(be)e(enough)i(room)e
+-(for)g(dead)h(nodes,)h(to)e(pre)n(v)o(ent)h(too)g(frequent)h(garbage)
+-676 2819 y(collections.)448 2995 y(While)30 b(the)g(\002rst)g
+-(criterion)i(is)d(f)o(airly)i(straightforw)o(ard)j(to)c(implement,)i
+-(the)e(second)h(lea)n(v)o(es)448 3108 y(more)22 b(room)g(to)f(creati)n
+-(vity)-6 b(.)31 b(The)21 b(CUDD)e(package)24 b(tries)f(to)e(\002gure)h
+-(out)g(whether)h(more)e(dead)448 3220 y(node)j(should)h(be)e(allo)n
+-(wed)g(to)g(increase)i(performance.)31 b(\(See)23 b(also)h(Section)f
+-(3.4.\))29 b(There)23 b(are)448 3333 y(tw)o(o)k(reasons)h(for)f(not)g
+-(doing)h(garbage)g(collection)h(too)e(often.)39 b(The)26
+-b(ob)o(vious)j(one)e(is)f(that)i(it)448 3446 y(is)21
+-b(e)o(xpensi)n(v)o(e.)30 b(The)21 b(second)i(is)e(that)h(dead)g(nodes)g
+-(may)f(be)g(reclaimed,)j(if)d(the)o(y)g(are)h(the)f(result)448
+-3559 y(of)k(a)g(successful)j(cache)f(lookup.)35 b(Hence)26
+-b(dead)g(nodes)g(may)f(pro)o(vide)i(a)e(substantial)j(speed-)448
+-3672 y(up)35 b(if)f(the)o(y)g(are)h(k)o(ept)g(around)g(long)h(enough.)
+-62 b(The)34 b(usefulness)j(of)d(k)o(eeping)i(man)o(y)e(dead)448
+-3785 y(nodes)g(around)h(v)n(aries)f(from)e(application)k(to)d
+-(application,)38 b(and)33 b(from)g(problem)h(instance)448
+-3898 y(to)d(problem)g(instance.)51 b(As)30 b(in)g(the)h(sizing)g(of)f
+-(the)h(cache,)i(the)e(CUDD)d(package)k(adopts)g(a)448
+-4011 y(\223re)n(w)o(ard-based\224)k(polic)o(y)e(to)e(decide)i(ho)n(w)e
+-(much)h(room)f(should)i(be)f(used)g(for)g(the)g(unique)448
+-4124 y(table.)62 b(If)35 b(the)f(number)h(of)g(dead)g(nodes)h
+-(reclaimed)g(is)e(lar)n(ge)h(compared)h(to)f(the)f(number)448
+-4237 y(of)d(nodes)h(directly)g(requested)h(from)e(the)g(memory)f
+-(manager)l(,)k(then)d(the)g(CUDD)d(package)448 4350 y(assumes)34
+-b(that)g(it)e(will)h(be)f(bene\002cial)j(to)e(allo)n(w)f(more)h(room)g
+-(for)g(the)g(subtables,)k(thereby)448 4462 y(reducing)31
+-b(the)e(frequenc)o(y)i(of)e(garbage)h(collection.)47
+-b(The)28 b(package)j(does)e(so)g(by)g(switching)448 4575
+-y(between)c(tw)o(o)e(modes)h(of)g(operation:)p Black
+-562 4751 a(1.)p Black 46 w(F)o(ast)d(gro)n(wth:)30 b(In)22
+-b(this)h(mode,)f(the)h(ratio)g(of)g(dead)g(nodes)g(to)g(total)g(nodes)h
+-(required)g(for)676 4863 y(garbage)k(collection)h(is)e(higher)h(than)g
+-(in)f(the)g(slo)n(w)f(gro)n(wth)h(mode)g(to)g(f)o(a)n(v)n(or)h
+-(resizing)676 4976 y(of)23 b(the)h(subtables.)p Black
+-1897 5225 a(31)p Black eop end
+-%%Page: 32 32
+-TeXDict begin 32 31 bop Black Black Black 562 573 a Fo(2.)p
+-Black 46 w(Slo)n(w)28 b(gro)n(wth:)42 b(In)29 b(this)h(mode)g(k)o
+-(eeping)h(man)o(y)f(dead)g(nodes)h(around)g(is)f(not)f(as)h(im-)676
+-686 y(portant)25 b(as)e(k)o(eeping)j(memory)e(requirements)i(lo)n(w)-6
+-b(.)448 873 y(Switching)25 b(from)e(one)h(mode)g(to)f(the)h(other)h(is)
+-e(based)i(on)e(the)h(follo)n(wing)h(criteria:)p Black
+-562 1061 a(1.)p Black 46 w(If)e(the)h(unique)h(table)f(is)g(already)h
+-(lar)n(ge,)f(only)h(slo)n(w)e(gro)n(wth)h(is)f(possible.)p
+-Black 562 1249 a(2.)p Black 46 w(If)35 b(the)h(table)h(is)f(small)g
+-(and)g(man)o(y)g(dead)h(nodes)g(are)f(being)h(reclaimed,)j(then)d(f)o
+-(ast)676 1362 y(gro)n(wth)24 b(is)f(selected.)448 1549
+-y(This)j(polic)o(y)g(is)g(especially)i(ef)n(fecti)n(v)o(e)f(when)f(the)
+-g(diagrams)h(being)f(manipulated)j(ha)n(v)o(e)d(lots)448
+-1662 y(of)f(recombination.)37 b(Notice)25 b(the)h(interplay)h(of)e(the)
+-h(cache)g(sizing)g(and)g(unique)g(sizing:)34 b(F)o(ast)448
+-1775 y(gro)n(wth)24 b(normally)h(occurs)f(when)g(the)f(cache)h(hit)g
+-(rate)g(is)f(lar)n(ge.)29 b(The)23 b(cache)h(and)g(the)g(unique)448
+-1888 y(table)h(then)f(gro)n(w)f(in)h(concert,)h(preserving)h(a)d
+-(healthy)i(balance)h(between)e(their)h(sizes.)448 2137
+-y Fi(4.6)99 b(Allo)o(wing)24 b(Asynchr)n(onous)i(Reordering)448
+-2311 y Fo(Asynchronous)36 b(reordering)f(is)d(the)g(reordering)j(that)d
+-(is)g(triggered)j(automatically)g(by)d(the)448 2424 y(increase)37
+-b(of)d(the)h(number)g(of)g(nodes.)62 b(Asynchronous)38
+-b(reordering)f(tak)o(es)f(place)f(when)g(a)448 2537 y(ne)n(w)28
+-b(internal)i(node)g(must)e(be)g(created,)j(and)e(the)g(number)g(of)f
+-(nodes)i(has)f(reached)h(a)e(gi)n(v)o(en)448 2650 y(threshold.)49
+-b(\(The)29 b(threshold)j(is)d(adjusted)i(by)f(the)f(package)i(e)n(v)o
+-(ery)f(time)f(reordering)j(tak)o(es)448 2763 y(place.\))589
+-2876 y(Those)24 b(procedures)j(that)d(do)g(not)f(create)i(ne)n(w)e
+-(nodes)i(\(e.g.,)e(procedures)j(that)e(count)h(the)448
+-2989 y(number)g(of)e(nodes)h(or)g(minterms\))g(need)g(not)g(w)o(orry)f
+-(about)i(asynchronous)i(reordering:)32 b(No)448 3102
+-y(special)25 b(precaution)i(is)c(necessary)j(in)e(writing)g(them.)589
+-3215 y(Procedures)i(that)e(only)g(manipulate)i(decision)f(diagrams)g
+-(through)g(the)f(e)o(xported)h(func-)448 3328 y(tions)j(of)e(the)h
+-(CUDD)e(package)j(also)f(need)h(not)f(concern)h(themselv)o(es)h(with)d
+-(asynchronous)448 3440 y(reordering.)32 b(\(See)23 b(Section)i(3.2.1)e
+-(for)h(the)g(e)o(xceptions.\))589 3553 y(The)i(remaining)h(class)g(of)e
+-(procedures)k(is)c(composed)j(of)d(functions)j(that)e(visit)h(the)f
+-(dia-)448 3666 y(grams)h(and)h(may)e(create)i(ne)n(w)e(nodes.)39
+-b(All)26 b(such)i(procedures)h(in)e(the)g(CUDD)d(package)29
+-b(are)448 3779 y(written)35 b(so)e(that)h(the)o(y)g(can)g(be)f
+-(interrupted)k(by)d(dynamic)g(reordering.)62 b(The)33
+-b(general)i(ap-)448 3892 y(proach)26 b(follo)n(wed)g(goes)f(under)g
+-(the)g(name)f(of)h(\223abort)g(and)g(retry.)-6 b(\224)32
+-b(As)24 b(the)g(name)h(implies,)g(a)448 4005 y(computation)i(that)d(is)
+-f(interrupted)k(by)c(dynamic)i(reordering)h(is)e(aborted)h(and)f(tried)
+-h(again.)589 4118 y(A)e(recursi)n(v)o(e)i(procedure)h(that)e(can)f(be)h
+-(interrupted)i(by)e(dynamic)g(reordering)i(\(an)e(inter)n(-)448
+-4231 y(ruptible)g(procedure)h(from)d(no)n(w)g(on\))h(is)f(composed)i
+-(of)e(tw)o(o)f(functions.)31 b(One)22 b(is)g(responsible)448
+-4344 y(for)30 b(the)f(real)h(computation.)49 b(The)29
+-b(other)h(is)f(a)g(simple)h(wrapper,)h(which)f(tests)g(whether)g(re-)
+-448 4457 y(ordering)c(occurred)g(and)e(restarts)h(the)f(computation)i
+-(if)d(it)h(did.)589 4570 y(Asynchronous)f(reordering)e(of)e(BDDs)e(and)
+-i(ADDs)e(can)i(only)h(be)e(triggered)k(inside)e Fn(cud-)448
+-4682 y(dUniqueInter)r Fo(,)36 b(when)31 b(a)f(ne)n(w)g(node)i(is)f
+-(about)h(to)e(be)h(created.)53 b(Lik)o(e)n(wise,)32 b(asynchronous)448
+-4795 y(reordering)f(of)d(ZDDs)f(can)h(only)h(be)f(triggered)j(inside)e
+-Fn(cuddUniqueInterZdd)r Fo(.)48 b(When)28 b(re-)448 4908
+-y(ordering)e(is)d(triggered,)j(three)e(things)h(happen:)p
+-Black 1897 5225 a(32)p Black eop end
+-%%Page: 33 33
+-TeXDict begin 33 32 bop Black Black Black 562 573 a Fo(1.)p
+-Black 46 w Fn(cuddUniqueInter)29 b Fo(returns)d(a)d(NULL)e(v)n(alue;)p
+-Black 562 760 a(2.)p Black 46 w(The)i(\003ag)g Fn(r)m(eor)m(der)m(ed)28
+-b Fo(of)23 b(the)h(manager)h(is)e(set)h(to)g(1.)29 b(\(0)23
+-b(means)h(no)g(reordering,)i(while)676 873 y(2)d(indicates)j(an)d
+-(error)i(occurred)g(during)g(reordering.\))p Black 562
+-1061 a(3.)p Black 46 w(The)g(counter)k Fn(r)m(eor)m(derings)g
+-Fo(of)d(the)g(manager)i(is)e(incremented.)40 b(The)26
+-b(counter)i(is)e(ini-)676 1174 y(tialized)37 b(to)f(0)f(when)h(the)g
+-(manager)h(is)f(started)h(and)f(can)g(be)g(accessed)i(by)e(calling)676
+-1287 y Fn(Cudd)p 877 1287 28 4 v 33 w(ReadReor)m(derings)p
+-Fo(.)41 b(By)25 b(taking)j(tw)o(o)e(readings)j(of)d(the)h(counter)l(,)i
+-(an)d(applica-)676 1400 y(tion)32 b(can)g(determine)i(if)d(v)n(ariable)
+-j(reordering)h(has)d(tak)o(en)h(place)g(between)g(the)f(\002rst)676
+-1513 y(and)27 b(the)g(second)h(reading.)41 b(The)26 b(package)j
+-(itself,)f(ho)n(we)n(v)o(er)l(,)g(does)g(not)f(mak)o(e)g(use)g(of)676
+-1626 y(the)c(counter:)31 b(It)24 b(is)f(mentioned)j(here)e(for)g
+-(completeness.)589 1813 y(The)35 b(recursi)n(v)o(e)h(procedure)i(that)d
+-(recei)n(v)o(es)h(a)e(NULL)f(v)n(alue)i(from)g Fn(cuddUniqueInter)448
+-1926 y Fo(must)g(free)h(all)f(intermediate)j(results)f(that)e(it)g(may)
+-g(ha)n(v)o(e)h(computed)g(before,)j(and)d(return)448
+-2039 y(NULL)21 b(in)j(its)f(turn.)589 2152 y(The)31 b(wrapper)g
+-(function)i(does)e(not)g(decide)i(whether)e(reordering)j(occurred)e
+-(based)g(on)448 2265 y(the)37 b(NULL)e(return)j(v)n(alue,)i(because)f
+-(the)e(NULL)d(v)n(alue)k(may)e(be)h(the)g(result)h(of)f(lack)g(of)448
+-2378 y(memory)-6 b(.)29 b(Instead,)c(it)f(checks)h(the)e
+-Fn(r)m(eor)m(der)m(ed)28 b Fo(\003ag.)589 2491 y(When)h(a)e(recursi)n
+-(v)o(e)i(procedure)i(calls)e(another)g(recursi)n(v)o(e)h(procedure)g
+-(that)f(may)e(cause)448 2604 y(reordering,)i(it)d(should)i(bypass)f
+-(the)f(wrapper)h(and)g(call)f(the)g(recursi)n(v)o(e)i(procedure)h
+-(directly)-6 b(.)448 2716 y(Otherwise,)29 b(the)f(calling)i(procedure)g
+-(will)d(not)h(kno)n(w)f(whether)i(reordering)h(occurred,)h(and)448
+-2829 y(will)26 b(not)g(be)g(able)g(to)g(restart.)37 b(This)25
+-b(is)h(the)g(main)g(reason)h(why)e(most)h(recursi)n(v)o(e)h(procedures)
+-448 2942 y(are)k(internal,)i(rather)e(than)g(static.)50
+-b(\(The)30 b(wrappers,)j(on)d(the)h(other)g(hand,)h(are)e(mostly)h(e)o
+-(x-)448 3055 y(ported.\))448 3304 y Fi(4.7)99 b(Deb)n(ugging)448
+-3479 y Fo(By)35 b(de\002ning)i(the)g(symbol)f(DD)p 1508
+-3479 V 32 w(DEB)o(UG)e(during)j(compilation,)k(numerous)d(checks)f(are)
+-448 3592 y(added)20 b(to)e(the)g(code.)28 b(In)18 b(addition,)j(the)d
+-(procedures)j Fn(Cudd)p 2297 3592 V 34 w(Deb)n(ugChec)n(k)r
+-Fo(,)g Fn(Cudd)p 3036 3592 V 33 w(Chec)n(kK)m(e)m(ys)p
+-Fo(,)448 3704 y(and)g Fn(cuddHeapPr)l(o\002le)i Fo(can)e(be)f(called)h
+-(at)f(an)o(y)g(point)i(to)e(v)o(erify)h(the)f(consistenc)o(y)j(of)d
+-(the)h(data)448 3817 y(structure.)44 b(\()p Fn(cuddHeapPr)l(o\002le)31
+-b Fo(is)d(an)f(internal)j(procedure.)44 b(It)27 b(is)h(declared)i(in)d
+-Fn(cuddInt.h)p Fo(.\))448 3930 y(Procedures)37 b Fn(Cudd)p
+-1087 3930 V 34 w(Deb)n(ugChec)n(k)h Fo(and)d Fn(Cudd)p
+-1983 3930 V 34 w(Chec)n(kK)m(e)m(ys)h Fo(are)f(especially)i(useful)f
+-(when)448 4043 y(CUDD)20 b(reports)k(that)e(during)i(garbage)f
+-(collection)i(the)d(number)h(of)e(nodes)j(actually)g(deleted)448
+-4156 y(from)k(the)h(unique)h(table)f(is)f(dif)n(ferent)i(from)f(the)f
+-(count)i(of)e(dead)h(nodes)g(k)o(ept)g(by)g(the)f(man-)448
+-4269 y(ager)-5 b(.)36 b(The)25 b(error)h(causing)h(the)f(discrepanc)o
+-(y)j(may)c(ha)n(v)o(e)h(occurred)i(much)d(earlier)i(than)f(it)f(is)448
+-4382 y(disco)o(v)o(ered.)42 b(A)26 b(fe)n(w)h(strate)o(gicaly)j(placed)
+-f(calls)f(to)f(the)g(deb)n(ugging)k(procedures)f(can)e(con-)448
+-4495 y(siderably)j(narro)n(w)e(do)n(wn)f(the)h(search)g(for)g(the)g
+-(source)g(of)g(the)f(problem.)45 b(\(F)o(or)27 b(instance,)32
+-b(a)448 4608 y(call)23 b(to)g Fn(Cudd)p 895 4608 V 34
+-w(Recur)o(siveDer)m(ef)38 b Fo(where)23 b(one)g(to)f
+-Fn(Cudd)p 2210 4608 V 34 w(Der)m(ef)36 b Fo(w)o(as)22
+-b(required)i(may)f(be)f(iden-)448 4721 y(ti\002ed)i(in)f(this)h(w)o(ay)
+--6 b(.\))589 4834 y(One)29 b(of)g(the)g(most)g(common)g(problems)i
+-(encountered)h(in)d(deb)n(ugging)j(code)e(based)g(on)448
+-4946 y(the)j(CUDD)e(package)k(is)e(a)f(missing)i(call)f(to)g
+-Fn(Cudd)p 2158 4946 V 34 w(Recur)o(siveDer)m(ef)13 b
+-Fo(.)59 b(T)-7 b(o)32 b(help)h(identify)p Black 1897
+-5225 a(33)p Black eop end
+-%%Page: 34 34
+-TeXDict begin 34 33 bop Black Black 448 573 a Fo(this)22
+-b(type)g(of)f(problems,)i(the)e(package)i(pro)o(vides)g(a)e(function)i
+-(called)f Fn(Cudd)p 2858 573 28 4 v 34 w(Chec)n(kZer)l(oRef)13
+-b Fo(.)448 686 y(This)37 b(function)h(should)h(be)d(called)i
+-(immediately)g(before)g(shutting)h(do)n(wn)e(the)f(manager)-5
+-b(.)448 799 y Fn(Cudd)p 649 799 V 34 w(Chec)n(kZer)l(oRef)34
+-b Fo(checks)20 b(that)g(the)f(only)h(nodes)g(left)f(with)g(non-zero)i
+-(reference)h(counts)448 912 y(are)27 b(the)f(prede\002ned)j(constants,)
+-g(the)e(BDD)d(projection)29 b(functions,)h(and)c(nodes)i(whose)f(ref-)
+-448 1024 y(erence)e(counts)g(are)f(saturated.)589 1137
+-y(F)o(or)29 b(this)h(function)i(to)e(be)g(ef)n(fecti)n(v)o(e)h(the)f
+-(application)i(must)e(e)o(xplicitly)i(dispose)g(of)d(all)448
+-1250 y(diagrams)c(to)f(which)g(it)f(has)h(pointers)h(before)g(calling)h
+-(it.)448 1498 y Fi(4.8)99 b(Gathering)26 b(and)f(Inter)o(pr)n(eting)i
+-(Statistics)448 1673 y Fo(Function)33 b Fn(Cudd)p 1003
+-1673 V 34 w(PrintInfo)g Fo(can)f(be)f(called)i(to)e(print)i(out)f(the)f
+-(v)n(alues)i(of)e(parameters)j(and)448 1786 y(statistics)c(for)e(a)f
+-(manager)-5 b(.)41 b(The)27 b(output)j(of)d Fn(Cudd)p
+-2089 1786 V 34 w(PrintInfo)i Fo(is)e(di)n(vided)i(in)e(tw)o(o)g
+-(sections.)448 1899 y(The)19 b(\002rst)g(reports)i(the)e(v)n(alues)h
+-(of)f(parameters)j(that)d(are)h(under)g(the)f(application)k(control.)29
+-b(The)448 2011 y(second)e(reports)g(the)f(v)n(alues)g(of)f(statistical)
+-j(counters)f(and)f(other)g(non-modi\002able)i(parame-)448
+-2124 y(ters.)j(A)22 b(quick)k(guide)f(to)f(the)g(interpretation)k(of)c
+-(all)g(these)h(quantities)h(follo)n(ws.)31 b(F)o(or)23
+-b(ease)h(of)448 2237 y(e)o(xposition,)30 b(we)25 b(re)n(v)o(erse)j(the)
+-f(order)g(and)g(describe)i(the)d(non-modi\002able)j(parameters)g
+-(\002rst.)448 2350 y(W)-7 b(e')o(ll)24 b(use)g(a)f(sample)h(run)g(as)f
+-(e)o(xample.)30 b(There)24 b(is)f(nothing)j(special)f(about)g(this)f
+-(run.)448 2595 y Fp(4.8.1)92 b(Non)22 b(Modi\002able)h(P)o(arameters)
+-448 2769 y Fo(The)g(list)h(of)g(non-modi\002able)i(parameters)g(starts)
+-e(with:)p Black Black 667 2952 a Fh(****)52 b(CUDD)h(non-modifiable)48
+-b(parameters)i(****)667 3065 y(Memory)h(in)j(use:)f(32544220)448
+-3247 y Fo(This)25 b(is)f(the)h(memory)g(used)h(by)f(CUDD)d(for)j(three)
+-h(things)g(mainly:)32 b(Unique)26 b(table)f(\(includ-)448
+-3360 y(ing)i(all)g(DD)d(nodes)k(in)e(use\),)i(node)f(free)g(list,)g
+-(and)g(computed)h(table.)38 b(This)26 b(number)i(almost)448
+-3473 y(ne)n(v)o(er)g(decreases)h(in)f(the)f(lifetime)h(of)f(a)g(CUDD)e
+-(manager)l(,)k(because)g(CUDD)c(does)j(not)f(re-)448
+-3586 y(lease)k(memory)f(when)g(it)f(frees)h(nodes.)49
+-b(Rather)l(,)32 b(it)d(puts)h(the)g(nodes)h(on)f(its)g(o)n(wn)f(free)h
+-(list.)448 3699 y(This)h(number)g(is)g(in)f(bytes.)51
+-b(It)30 b(does)i(not)f(represent)i(the)e(peak)g(memory)g(occupation,)k
+-(be-)448 3812 y(cause)d(it)e(does)h(not)g(include)h(the)e(size)h(of)f
+-(data)h(structures)i(created)f(temporarily)h(by)d(some)448
+-3925 y(functions)c(\(e.g.,)d(local)i(look-up)g(tables\).)p
+-Black Black 667 4131 a Fh(Peak)52 b(number)g(of)i(nodes:)d(837018)448
+-4338 y Fo(This)31 b(number)h(is)f(the)g(number)g(of)g(nodes)h(that)g
+-(the)f(manager)h(has)f(allocated.)54 b(This)30 b(is)h(not)448
+-4451 y(the)d(lar)n(gest)h(size)f(of)f(the)h(BDDs,)e(because)j(the)f
+-(manager)g(will)f(normally)i(ha)n(v)o(e)f(some)f(dead)448
+-4563 y(nodes)e(and)f(some)g(nodes)h(on)e(the)h(free)g(list.)p
+-Black Black 667 4770 a Fh(Peak)52 b(number)g(of)i(live)e(nodes:)g
+-(836894)448 4976 y Fo(This)20 b(is)g(the)h(lar)n(gest)h(number)f(of)f
+-(li)n(v)o(e)g(nodes)h(that)g(the)f(manager)i(has)e(held)h(since)g(its)g
+-(creation.)p Black 1897 5225 a(34)p Black eop end
+-%%Page: 35 35
+-TeXDict begin 35 34 bop Black Black Black Black 667 573
+-a Fh(Number)51 b(of)j(BDD)f(variables:)d(198)667 686
+-y(Number)h(of)j(ZDD)f(variables:)d(0)448 892 y Fo(These)24
+-b(numbers)h(tell)f(us)f(this)h(run)g(w)o(as)g(not)f(using)i(ZDDs.)p
+-Black Black 667 1099 a Fh(Number)51 b(of)j(cache)e(entries:)f(1048576)
+-448 1306 y Fo(Current)25 b(number)g(of)f(slots)h(of)f(the)g(computed)i
+-(table.)31 b(If)24 b(one)g(has)g(a)g(performance)i(problem,)448
+-1419 y(this)e(is)g(one)g(of)f(the)h(numbers)h(to)e(look)i(at.)j(The)23
+-b(cache)i(size)f(is)f(al)o(w)o(ays)i(a)e(po)n(wer)g(of)h(2.)p
+-Black Black 667 1625 a Fh(Number)51 b(of)j(cache)e(look-ups:)f(2996536)
+-667 1738 y(Number)g(of)j(cache)e(hits:)g(1187087)448
+-1945 y Fo(These)22 b(numbers)i(gi)n(v)o(e)e(an)g(indication)i(of)e(the)
+-g(hit)g(rate)h(in)e(the)i(computed)g(table.)29 b(It)22
+-b(is)g(not)g(un-)448 2058 y(lik)o(ely)j(for)f(model)g(checking)i(runs)e
+-(to)g(get)f(hit)h(rates)g(e)n(v)o(en)g(higher)h(than)f(this)h(one)f
+-(\(39.62\045\).)p Black Black 667 2265 a Fh(Number)51
+-b(of)j(cache)e(insertions:)e(1809473)667 2377 y(Number)h(of)j(cache)e
+-(collisions:)e(961208)667 2490 y(Number)h(of)j(cache)e(deletions:)e(0)
+-448 2697 y Fo(A)30 b(collision)j(occurs)f(when)f(a)f(cache)i(entry)g
+-(is)e(o)o(v)o(erwritten.)52 b(A)30 b(deletion)j(occurs)f(when)f(a)448
+-2810 y(cache)c(entry)g(is)e(in)l(v)n(alidated)k(\(e.g.,)d(during)h
+-(garbage)g(collection\).)39 b(If)25 b(the)h(number)h(of)e(dele-)448
+-2923 y(tions)d(is)f(high)g(compared)i(to)d(the)h(number)h(of)f
+-(collisions,)i(it)e(means)g(that)g(garbage)i(collection)448
+-3036 y(occurs)32 b(too)e(often.)48 b(In)30 b(this)g(case)h(there)f
+-(were)g(no)g(garbage)h(collections;)36 b(hence,)d(no)c(dele-)448
+-3149 y(tions.)p Black Black 667 3355 a Fh(Cache)52 b(used)g(slots)h(=)h
+-(80.90\045)e(\(expected)e(82.19\045\))448 3562 y Fo(Percentage)26
+-b(of)e(cache)i(slots)f(that)f(contain)i(a)e(v)n(alid)h(entry)-6
+-b(.)31 b(If)24 b(this)h(number)g(is)f(small,)g(it)g(may)448
+-3675 y(signal)h(one)f(of)g(three)g(conditions:)p Black
+-562 3858 a(1.)p Black 46 w(The)f(cache)h(may)g(ha)n(v)o(e)g(been)g
+-(recently)i(resized)f(and)f(it)f(is)g(still)i(\002lling)f(up.)p
+-Black 562 4043 a(2.)p Black 46 w(The)j(cache)i(is)f(too)h(lar)n(ge)g
+-(for)f(the)g(BDDs.)41 b(This)28 b(should)i(not)e(happen)i(if)d(the)i
+-(size)f(of)676 4156 y(the)23 b(cache)i(is)e(determined)j(by)e(CUDD.)p
+-Black 562 4342 a(3.)p Black 46 w(The)f(hash)i(function)h(is)d(not)i(w)o
+-(orking)g(properly)-6 b(.)32 b(This)24 b(is)f(accompanied)k(by)d(a)f
+-(de)o(gra-)676 4455 y(dation)34 b(in)f(performance.)59
+-b(Con)l(v)o(ersely)-6 b(,)37 b(a)c(de)o(gradation)j(in)c(performance)k
+-(may)c(be)676 4568 y(due)24 b(to)f(bad)h(hash)g(function)i(beha)n(vior)
+--5 b(.)448 4751 y(The)26 b(e)o(xpected)j(v)n(alue)e(is)f(computed)j
+-(assuming)f(a)e(uniformly)i(random)f(distrib)n(ution)k(of)26
+-b(the)448 4863 y(accesses.)45 b(If)28 b(the)h(dif)n(ference)h(between)g
+-(the)e(measured)i(v)n(alue)f(and)g(the)f(e)o(xpected)i(v)n(alue)f(is)
+-448 4976 y(lar)n(ge)c(\(unlik)o(e)g(this)g(case\),)f(the)g(cache)g(is)g
+-(not)f(w)o(orking)i(properly)-6 b(.)p Black 1897 5225
+-a(35)p Black eop end
+-%%Page: 36 36
+-TeXDict begin 36 35 bop Black Black Black Black 667 573
+-a Fh(Soft)52 b(limit)g(for)i(cache)e(size:)g(1318912)448
+-781 y Fo(This)25 b(number)h(says)f(ho)n(w)g(lar)n(ge)h(the)f(cache)h
+-(can)f(gro)n(w)-6 b(.)33 b(This)24 b(limit)h(is)g(based)h(on)f(the)g
+-(size)g(of)448 894 y(the)k(unique)g(table.)43 b(CUDD)26
+-b(uses)j(a)e(re)n(w)o(ard-based)k(polic)o(y)e(for)f(gro)n(wing)h(the)f
+-(cache.)44 b(\(See)448 1007 y(Section)32 b(4.4.1.\))49
+-b(The)30 b(def)o(ault)i(hit)e(rate)h(for)g(resizing)h(is)e(30\045)g
+-(and)h(the)g(v)n(alue)g(in)f(ef)n(fect)h(is)448 1120
+-y(reported)26 b(among)e(the)g(modi\002able)h(parameters.)p
+-Black Black 667 1328 a Fh(Number)51 b(of)j(buckets)d(in)j(unique)e
+-(table:)g(329728)448 1537 y Fo(This)28 b(number)g(is)g(e)o(xactly)h
+-(one)f(quarter)i(of)d(the)h(one)g(abo)o(v)o(e.)42 b(This)28
+-b(is)f(indeed)j(ho)n(w)d(the)h(soft)448 1650 y(limit)37
+-b(is)g(determined)i(currently)-6 b(,)43 b(unless)38 b(the)g(computed)g
+-(table)g(hits)g(the)f(speci\002ed)i(hard)448 1763 y(limit.)29
+-b(\(See)23 b(belo)n(w)-6 b(.\))p Black Black 667 1971
+-a Fh(Used)52 b(buckets)g(in)h(unique)f(table:)g(87.96\045)g(\(expected)
+-e(87.93\045\))448 2180 y Fo(Percentage)27 b(of)e(unique)i(table)f(b)n
+-(uck)o(ets)h(that)e(contain)i(at)e(least)g(one)h(node.)34
+-b(Remarks)25 b(analo-)448 2293 y(gous)g(to)e(those)i(made)e(about)i
+-(the)f(used)g(cache)h(slots)f(apply)-6 b(.)p Black Black
+-667 2501 a Fh(Number)51 b(of)j(BDD)f(and)g(ADD)g(nodes:)f(836894)667
+-2614 y(Number)f(of)j(ZDD)f(nodes:)f(0)448 2822 y Fo(Ho)n(w)22
+-b(man)o(y)i(nodes)h(are)e(currently)j(in)e(the)g(unique)h(table,)f
+-(either)h(ali)n(v)o(e)e(or)h(dead.)p Black Black 667
+-3031 a Fh(Number)51 b(of)j(dead)f(BDD)g(and)g(ADD)g(nodes:)f(0)667
+-3144 y(Number)f(of)j(dead)f(ZDD)g(nodes:)f(0)448 3352
+-y Fo(Subtract)29 b(these)f(numbers)g(from)f(those)i(abo)o(v)o(e)e(to)h
+-(get)f(the)g(number)i(of)e(li)n(v)o(e)g(nodes.)41 b(In)27
+-b(this)448 3465 y(case)k(there)g(are)g(no)f(dead)h(nodes)g(because)i
+-(the)d(application)j(uses)e(delayed)h(dereferencing)448
+-3578 y Fn(Cudd)p 649 3578 28 4 v 34 w(DelayedDer)m(efBdd)r
+-Fo(.)p Black Black 667 3786 a Fh(Total)52 b(number)g(of)h(nodes)f
+-(allocated:)e(836894)448 3995 y Fo(This)29 b(is)g(the)g(total)h(number)
+-g(of)e(nodes)j(that)e(were)g(requested)i(and)f(obtained)h(from)e(the)g
+-(free)448 4108 y(list.)52 b(It)31 b(ne)n(v)o(er)h(decreases,)j(and)d
+-(is)f(not)g(an)g(indication)j(of)e(memory)f(occupation)j(after)e(the)
+-448 4221 y(\002rst)23 b(garbage)i(collection.)32 b(Rather)l(,)24
+-b(it)f(is)h(a)f(measure)h(of)g(the)g(package)h(acti)n(vity)-6
+-b(.)p Black Black 667 4429 a Fh(Total)52 b(number)g(of)h(nodes)f
+-(reclaimed:)e(0)448 4638 y Fo(These)29 b(are)f(the)h(nodes)g(that)g
+-(were)f(resuscitated)k(from)c(the)h(dead.)43 b(If)28
+-b(the)o(y)h(are)f(man)o(y)g(more)448 4751 y(than)23 b(the)e(allocated)j
+-(nodes,)f(and)f(the)g(total)g(number)h(of)e(slots)h(is)g(lo)n(w)f
+-(relati)n(v)o(e)h(to)g(the)f(number)448 4863 y(of)26
+-b(nodes,)i(then)f(one)g(may)f(w)o(ant)g(to)g(increase)i(the)f(limit)f
+-(for)g(f)o(ast)h(unique)h(table)f(gro)n(wth.)37 b(In)448
+-4976 y(this)24 b(case,)g(the)g(number)h(is)e(0)g(because)j(of)d
+-(delayed)i(dereferencing.)p Black 1897 5225 a(36)p Black
+-eop end
+-%%Page: 37 37
+-TeXDict begin 37 36 bop Black Black Black Black 667 573
+-a Fh(Garbage)51 b(collections)e(so)54 b(far:)f(0)667
+-686 y(Time)f(for)h(garbage)f(collections:)d(0.00)k(sec)667
+-799 y(Reorderings)c(so)54 b(far:)e(0)667 912 y(Time)g(for)h
+-(reordering:)d(0.00)j(sec)448 1124 y Fo(There)26 b(is)f(a)g(GC)f(for)i
+-(each)g(reordering.)37 b(Hence)26 b(the)f(\002rst)h(count)g(will)f(al)o
+-(w)o(ays)h(be)g(at)f(least)h(as)448 1237 y(lar)n(ge)f(as)f(the)f
+-(second.)p Black Black 667 1450 a Fh(Node)52 b(swaps)g(in)i
+-(reordering:)c(0)448 1662 y Fo(This)31 b(is)g(the)g(number)h(of)e
+-(elementary)j(reordering)h(steps.)52 b(Each)31 b(step)g(consists)i(of)e
+-(the)g(re-)448 1775 y(e)o(xpression)g(of)d(one)g(node)h(while)f(sw)o
+-(apping)i(tw)o(o)e(adjacent)i(v)n(ariables.)44 b(This)28
+-b(number)h(is)f(a)448 1888 y(good)d(measure)f(of)g(the)g(amount)g(of)g
+-(w)o(ork)f(done)i(in)e(reordering.)448 2134 y Fp(4.8.2)92
+-b(Modi\002able)23 b(P)o(arameters)448 2308 y Fo(Let)g(us)g(no)n(w)f
+-(consider)k(the)d(modi\002able)h(parameters,)h(that)f(is,)e(those)i
+-(settings)h(on)f(which)f(the)448 2421 y(application)k(or)c(the)h(user)g
+-(has)g(control.)p Black Black 667 2634 a Fh(****)52 b(CUDD)h
+-(modifiable)d(parameters)g(****)667 2746 y(Hard)i(limit)g(for)i(cache)e
+-(size:)g(8388608)448 2959 y Fo(This)30 b(number)i(counts)f(entries.)51
+-b(Each)30 b(entry)h(is)f(16)h(bytes)g(if)f(CUDD)e(is)i(compiled)i(to)e
+-(use)448 3072 y(32-bit)25 b(pointers.)31 b(T)-7 b(w)o(o)22
+-b(important)j(observ)n(ations)i(are)d(in)g(order:)p Black
+-562 3259 a(1.)p Black 46 w(If)29 b(the)i(datasize)h(limit)e(is)g(set,)h
+-(CUDD)d(will)i(use)g(it)g(to)g(determine)h(this)g(number)g(au-)676
+-3372 y(tomatically)-6 b(.)39 b(On)26 b(a)g(Unix)g(system,)i(one)f(can)g
+-(type)g(\223limit\224)g(or)f(\223ulimit\224)i(to)e(v)o(erify)i(if)676
+-3485 y(this)e(v)n(alue)h(is)e(set.)36 b(If)26 b(the)g(datasize)i(limit)
+-e(is)f(not)h(set,)h(CUDD)c(uses)k(a)e(def)o(ault)j(which)676
+-3598 y(is)21 b(rather)i(small.)28 b(If)22 b(you)g(ha)n(v)o(e)g(enough)i
+-(memory)d(\(say)i(64MB)e(or)h(more\))f(you)i(should)676
+-3711 y(seriously)29 b(consider)g Fn(not)f Fo(using)g(the)f(def)o(ault.)
+-40 b(So,)27 b(either)h(set)e(the)h(datasize)i(limit,)e(or)676
+-3824 y(o)o(v)o(erride)d(the)g(def)o(ault)i(with)d Fn(Cudd)p
+-1792 3824 28 4 v 34 w(SetMaxCac)o(heHar)m(d)r Fo(.)p
+-Black 562 4012 a(2.)p Black 46 w(If)d(a)g(process)j(seems)e(to)g(be)f
+-(going)i(no)n(where,)g(a)f(small)f(v)n(alue)i(for)f(this)g(parameter)i
+-(may)676 4125 y(be)29 b(the)h(culprit.)47 b(One)29 b(cannot)i(o)o(v)o
+-(eremphasize)h(the)e(importance)i(of)d(the)h(computed)676
+-4237 y(table)24 b(in)f(BDD)f(algorithms.)448 4425 y(In)i(this)g(case)g
+-(the)g(limit)f(w)o(as)g(automatically)k(set)d(for)f(a)g(tar)n(get)i
+-(maximum)f(memory)f(occupa-)448 4538 y(tion)h(of)g(104)g(MB.)p
+-Black Black 667 4751 a Fh(Cache)52 b(hit)h(threshold)d(for)k(resizing:)
+-c(15\045)p Black 1897 5225 a Fo(37)p Black eop end
+-%%Page: 38 38
+-TeXDict begin 38 37 bop Black Black 448 573 a Fo(This)25
+-b(number)g(can)g(be)f(changed)j(if)d(one)h(suspects)i(performance)g(is)
+-d(hindered)j(by)d(the)h(small)448 686 y(size)30 b(of)e(the)i(cache,)g
+-(and)g(the)f(cache)h(is)e(not)i(gro)n(wing)f(to)n(w)o(ards)h(the)f
+-(soft)g(limit)g(suf)n(\002ciently)448 799 y(f)o(ast.)g(In)21
+-b(such)h(a)f(case)h(one)g(can)g(change)h(the)e(def)o(ault)i(30\045)f
+-(to)f(15\045)g(\(as)g(in)h(this)g(case\))g(or)f(e)n(v)o(en)448
+-912 y(1\045.)p Black Black 667 1124 a Fh(Garbage)51 b(collection)f
+-(enabled:)h(yes)448 1337 y Fo(One)34 b(can)g(disable)i(it,)f(b)n(ut)g
+-(there)f(are)g(fe)n(w)f(good)i(reasons)h(for)e(doing)h(so.)60
+-b(It)33 b(is)h(normally)448 1450 y(preferable)26 b(to)e(raise)g(the)g
+-(limit)g(for)f(f)o(ast)h(unique)i(table)e(gro)n(wth.)29
+-b(\(See)24 b(belo)n(w)-6 b(.\))p Black Black 667 1662
+-a Fh(Limit)52 b(for)h(fast)g(unique)e(table)i(growth:)e(1363148)448
+-1875 y Fo(See)23 b(Section)i(4.5)f(and)g(the)g(comments)g(abo)o(v)o(e)h
+-(about)g(reclaimed)g(nodes)g(and)f(hard)g(limit)g(for)448
+-1988 y(the)g(cache)h(size.)30 b(This)23 b(v)n(alue)i(w)o(as)e(chosen)i
+-(automatically)i(by)d(CUDD)d(for)j(a)g(datasize)h(limit)448
+-2100 y(of)f(1)f(GB.)p Black Black 667 2313 a Fh(Maximum)51
+-b(number)h(of)h(variables)e(sifted)h(per)h(reordering:)c(1000)667
+-2426 y(Maximum)i(number)h(of)h(variable)e(swaps)h(per)i(reordering:)49
+-b(2000000)667 2539 y(Maximum)i(growth)h(while)g(sifting)f(a)j
+-(variable:)d(1.2)448 2751 y Fo(Lo)n(wering)29 b(these)f(numbers)i(will)
+-d(cause)i(reordering)i(to)c(be)h(less)h(accurate)h(and)e(f)o(aster)-5
+-b(.)43 b(Re-)448 2864 y(sults)22 b(are)f(some)n(what)g(unpredictable,)k
+-(because)d(lar)n(ger)g(BDDs)d(after)j(one)f(reordering)i(do)e(not)448
+-2977 y(necessarily)27 b(mean)d(the)f(process)j(will)d(go)h(f)o(aster)g
+-(or)g(slo)n(wer)-5 b(.)p Black Black 667 3190 a Fh(Dynamic)51
+-b(reordering)f(of)j(BDDs)g(enabled:)e(yes)667 3303 y(Default)g(BDD)i
+-(reordering)d(method:)h(4)667 3416 y(Dynamic)g(reordering)f(of)j(ZDDs)g
+-(enabled:)e(no)667 3528 y(Default)g(ZDD)i(reordering)d(method:)h(4)448
+-3741 y Fo(These)38 b(lines)h(tell)f(whether)g(automatic)i(reordering)g
+-(can)e(tak)o(e)g(place)h(and)f(what)f(method)448 3854
+-y(w)o(ould)28 b(be)f(used.)41 b(The)27 b(mapping)i(from)e(numbers)h(to)
+-f(methods)i(is)e(in)g Fh(cudd.h)p Fo(.)37 b(One)27 b(may)448
+-3967 y(w)o(ant)i(to)f(try)g(dif)n(ferent)i(BDD)d(reordering)k(methods.)
+-44 b(If)28 b(v)n(ariable)i(groups)g(are)f(used,)h(ho)n(w-)448
+-4080 y(e)n(v)o(er)l(,)21 b(one)f(should)i(not)e(e)o(xpect)h(to)e(see)h
+-(big)g(dif)n(ferences,)j(because)f(CUDD)c(uses)i(the)g(reported)448
+-4193 y(method)31 b(only)f(to)f(reorder)i(each)f(leaf)g(v)n(ariable)h
+-(group)f(\(typically)i(corresponding)i(present)448 4306
+-y(and)d(ne)o(xt)g(state)g(v)n(ariables\).)51 b(F)o(or)30
+-b(the)h(relati)n(v)o(e)g(order)g(of)g(the)f(groups,)k(it)c(al)o(w)o
+-(ays)h(uses)g(the)448 4418 y(same)24 b(algorithm,)h(which)f(is)f(ef)n
+-(fecti)n(v)o(ely)j(sifting.)589 4531 y(As)i(for)h(enabling)h(dynamic)g
+-(reordering)h(or)e(not,)h(a)e(sensible)i(recommendation)i(is)c(the)448
+-4644 y(follo)n(wing:)36 b(Unless)27 b(the)f(circuit)h(is)f(rather)h
+-(small)f(or)g(one)h(has)f(a)g(pretty)h(good)g(idea)f(of)g(what)448
+-4757 y(the)e(order)h(should)g(be,)e(reordering)j(should)g(be)d
+-(enabled.)p Black 1897 5225 a(38)p Black eop end
+-%%Page: 39 39
+-TeXDict begin 39 38 bop Black Black Black Black 667 573
+-a Fh(Realignment)49 b(of)54 b(ZDDs)e(to)i(BDDs)f(enabled:)e(no)667
+-686 y(Realignment)e(of)54 b(BDDs)e(to)i(ZDDs)f(enabled:)e(no)667
+-799 y(Dead)h(nodes)g(counted)g(in)h(triggering)d(reordering:)g(no)667
+-912 y(Group)i(checking)f(criterion:)f(7)667 1024 y(Recombination)e
+-(threshold:)i(0)667 1137 y(Symmetry)g(violation)h(threshold:)f(0)667
+-1250 y(Arc)j(violation)d(threshold:)g(0)667 1363 y(GA)j(population)d
+-(size:)i(0)667 1476 y(Number)f(of)j(crossovers)c(for)j(GA:)g(0)448
+-1681 y Fo(P)o(arameters)26 b(for)f(reordering.)37 b(See)24
+-b(the)i(documentation)i(of)d(the)h(functions)i(used)e(to)f(control)448
+-1794 y(these)g(parameters)g(for)f(the)g(details.)p Black
+-Black 667 1998 a Fh(Next)52 b(reordering)e(threshold:)g(100000)448
+-2203 y Fo(When)25 b(the)g(number)g(of)g(nodes)h(crosses)g(this)f
+-(threshold,)i(reordering)g(will)e(be)f(triggered.)34
+-b(\(If)448 2315 y(enabled;)26 b(in)d(this)h(case)f(it)g(is)g(not.\))30
+-b(This)23 b(parameter)h(is)f(updated)j(by)d(the)g(package)i(whene)n(v)o
+-(er)448 2428 y(reordering)i(tak)o(es)f(place.)32 b(The)24
+-b(application)j(can)e(change)h(it,)e(for)g(instance)j(at)d(start-up.)33
+-b(An-)448 2541 y(other)24 b(possibility)h(is)e(to)f(use)h(a)f(hook)h
+-(function)i(\(see)e(Section)h(3.16\))f(to)f(o)o(v)o(erride)i(the)f(def)
+-o(ault)448 2654 y(updating)j(polic)o(y)-6 b(.)448 2899
+-y Fp(4.8.3)92 b(Extended)22 b(Statistics)k(and)c(Reporting)448
+-3073 y Fo(The)27 b(follo)n(wing)i(symbols)f(can)f(be)h(de\002ned)g
+-(during)g(compilation)i(to)d(increase)i(the)e(amount)448
+-3186 y(of)d(statistics)i(gathered)f(and)f(the)g(number)g(of)g(messages)
+-h(produced)h(by)d(the)h(package:)p Black 585 3367 a Fm(\017)p
+-Black 46 w Fo(DD)p 813 3367 28 4 v 32 w(ST)-8 b(A)e(TS;)p
+-Black 585 3552 a Fm(\017)p Black 46 w Fo(DD)p 813 3552
+-V 32 w(CA)l(CHE)p 1151 3552 V 31 w(PR)l(OFILE;)p Black
+-585 3737 a Fm(\017)p Black 46 w Fo(DD)p 813 3737 V 32
+-w(UNIQ)o(UE)p 1194 3737 V 31 w(PR)l(OFILE.)p Black 585
+-3922 a Fm(\017)p Black 46 w Fo(DD)p 813 3922 V 32 w(VERBOSE;)448
+-4103 y(De\002ning)27 b(DD)p 929 4103 V 32 w(CA)l(CHE)p
+-1267 4103 V 32 w(PR)l(OFILE)d(causes)k(each)f(entry)h(of)e(the)h(cache)
+-h(to)f(include)h(an)f(ac-)448 4215 y(cess)i(counter)l(,)h(which)e(is)g
+-(used)g(to)g(compute)h(simple)f(statistics)i(on)e(the)g(distrib)n
+-(ution)j(of)d(the)448 4328 y(k)o(e)o(ys.)448 4576 y Fi(4.9)99
+-b(Guidelines)25 b(f)n(or)g(Documentation)448 4751 y Fo(The)36
+-b(documentation)j(of)d(the)g(CUDD)d(functions)38 b(is)e(e)o(xtracted)i
+-(automatically)g(from)e(the)448 4863 y(sources)23 b(by)e(Stephen)h(Edw)
+-o(ards')-5 b(s)21 b(e)o(xtdoc.)29 b(\(The)21 b(Ext)f(system)i(is)e(a)n
+-(v)n(ailable)j(via)e(anon)o(ymous)448 4976 y(FTP)27 b(from)i
+-Fh(ic.eecs.berkele)o(y.)o(ed)o(u)p Fo(.\))38 b(The)29
+-b(follo)n(wing)h(guidelines)i(are)d(follo)n(wed)p Black
+-1897 5225 a(39)p Black eop end
+-%%Page: 40 40
+-TeXDict begin 40 39 bop Black Black 448 573 a Fo(in)28
+-b(CUDD)d(to)j(insure)h(consistent)h(and)f(ef)n(fecti)n(v)o(e)f(use)h
+-(of)e(automatic)i(e)o(xtraction.)44 b(It)27 b(is)h(rec-)448
+-686 y(ommended)d(that)f(e)o(xtensions)i(to)e(CUDD)d(follo)n(w)j(the)g
+-(same)f(documentation)k(guidelines.)p Black 585 873 a
+-Fm(\017)p Black 46 w Fo(The)j(documentation)35 b(of)c(an)g(e)o(xported)
+-i(procedure)h(should)f(be)e(suf)n(\002cient)h(to)f(allo)n(w)676
+-986 y(one)23 b(to)h(use)f(it)h(without)g(reading)h(the)f(code.)29
+-b(It)23 b(is)g(not)h(necessary)i(to)d(e)o(xplain)i(ho)n(w)e(the)676
+-1099 y(procedure)j(w)o(orks;)e(only)g(what)g(it)f(does.)p
+-Black 585 1287 a Fm(\017)p Black 46 w Fo(The)29 b Fn(SeeAlso)i
+-Fo(\002elds)f(should)i(be)e(space-separated)k(lists)d(of)f(function)i
+-(names.)49 b(The)676 1400 y Fn(SeeAlso)24 b Fo(\002eld)f(of)g(an)g(e)o
+-(xported)j(procedure)g(should)e(only)h(reference)g(other)f(e)o(xported)
+-676 1513 y(procedures.)39 b(The)26 b Fn(SeeAlso)h Fo(\002eld)f(of)h(an)
+-f(internal)i(procedure)h(may)d(reference)i(other)676
+-1626 y(internal)c(procedures)i(as)d(well)f(as)h(e)o(xported)i
+-(procedures,)g(b)n(ut)f(no)f(static)h(procedures.)p Black
+-585 1813 a Fm(\017)p Black 46 w Fo(The)30 b(return)i(v)n(alues)g(are)f
+-(detailed)i(in)e(the)g Fn(Description)i Fo(\002eld,)g(not)e(in)g(the)g
+-Fn(Synopsis)676 1926 y Fo(\002eld.)p Black 585 2114 a
+-Fm(\017)p Black 46 w Fo(The)c(parameters)k(are)d(documented)j
+-(alongside)g(their)e(declarations.)46 b(Further)29 b(com-)676
+-2227 y(ments)23 b(may)h(appear)h(in)e(the)h Fn(Description)i
+-Fo(\002eld.)p Black 585 2414 a Fm(\017)p Black 46 w Fo(If)i(the)i
+-Fn(Description)h Fo(\002eld)e(is)g(non-empty\227which)j(is)d(the)h
+-(normal)f(case)h(for)f(an)g(e)o(x-)676 2527 y(ported)19
+-b(procedure\227then)j(the)d(synopsis)h(is)e(repeated\227possibly)23
+-b(slightly)d(changed\227)676 2640 y(at)25 b(the)h(be)o(ginning)i(of)e
+-(the)g Fn(Description)i Fo(\002eld.)35 b(This)25 b(is)h(so)f(because)j
+-(e)o(xtdoc)f(will)e(not)676 2753 y(put)e(the)h(synopsis)i(in)e(the)f
+-(same)h(HTML)d(\002le)i(as)h(the)f(description.)p Black
+-585 2941 a Fm(\017)p Black 46 w Fo(The)g Fn(Synopsis)j
+-Fo(\002eld)d(should)i(be)f(about)g(one)g(line)g(long.)448
+-3233 y Fq(5)120 b(The)30 b(C++)g(Interface)448 3444 y
+-Fi(5.1)99 b(Compiling)25 b(and)g(Linking)448 3618 y Fo(T)-7
+-b(o)23 b(b)n(uild)i(an)e(application)k(that)d(uses)g(the)g(CUDD)d(C++)i
+-(interf)o(ace,)j(you)e(should)h(add)p Black Black 448
+-3805 a Fh(#include)51 b("cuddObj.hh")448 3993 y Fo(to)31
+-b(your)g(source)i(\002les.)50 b(In)30 b(addition)j(to)e(the)g(normal)g
+-(CUDD)e(libraries)j(\(see)g(Section)f(3.1\))448 4106
+-y(you)22 b(should)g(link)g Fh(libobj.a)16 b Fo(to)21
+-b(your)h(e)o(x)o(ecutable.)30 b(Refer)21 b(to)f(the)i
+-Fh(Makefile)16 b Fo(in)21 b(the)g(top)448 4219 y(le)n(v)o(el)j
+-(directory)i(of)d(the)h(distrib)n(ution)j(for)d(further)h(details.)448
+-4468 y Fi(5.2)99 b(Basic)25 b(Manipulation)448 4642 y
+-Fo(The)d(follo)n(wing)i(fragment)g(of)f(code)g(illustrates)i(some)e
+-(simple)g(operations)j(on)c(BDDs)f(using)448 4755 y(the)j(C++)f(interf)
+-o(ace.)p Black 1897 5225 a(40)p Black eop end
+-%%Page: 41 41
+-TeXDict begin 41 40 bop Black Black Black Black 448 573
+-a Fh(Cudd)53 b(mgr\(0,0\);)448 686 y(BDD)h(x)g(=)g(mgr.bddVar\(\);)448
+-799 y(BDD)g(y)g(=)g(mgr.bddVar\(\);)448 912 y(BDD)g(f)g(=)g(x)g(*)g(y;)
+-448 1024 y(BDD)g(g)g(=)g(y)g(+)g(!x;)448 1137 y(cout)f(<<)h("f)f(is")g
+-(<<)h(\(f)g(<=)f(g)h(?)h("")e(:)h(")g(not"\))721 1250
+-y(<<)g(")g(less)e(than)h(or)h(equal)e(to)i(g\\n";)448
+-1438 y Fo(This)22 b(code)h(creates)h(a)e(manager)h(called)h
+-Fh(mgr)c Fo(and)j(tw)o(o)e(v)n(ariables)k(in)d(it.)28
+-b(It)22 b(then)h(de\002nes)g(tw)o(o)448 1551 y(functions)31
+-b Fh(f)c Fo(and)h Fh(g)f Fo(in)h(terms)g(of)g(the)g(v)n(ariables.)44
+-b(Finally)-6 b(,)30 b(it)e(prints)h(a)f(message)h(based)g(on)448
+-1664 y(the)h(comparison)j(of)c(the)i(tw)o(o)e(functions.)50
+-b(No)30 b(e)o(xplicit)h(referencing)i(or)d(dereferencing)j(is)448
+-1777 y(required.)h(The)25 b(operators)i(are)d(o)o(v)o(erloaded)j(in)e
+-(the)g(intuiti)n(v)o(e)h(w)o(ay)-6 b(.)32 b(BDDs)23 b(are)i(freed)g
+-(when)448 1890 y(e)o(x)o(ecution)d(lea)n(v)o(es)e(the)g(scope)g(in)g
+-(which)g(the)o(y)f(are)h(de\002ned)g(or)f(when)h(the)g(v)n(ariables)h
+-(referring)448 2002 y(to)j(them)f(are)h(o)o(v)o(erwritten.)448
+-2295 y Fq(6)120 b(Ackno)o(wledgments)448 2502 y Fo(The)27
+-b(contrib)n(utors:)40 b(Iris)27 b(Bahar)l(,)h(Hyunw)o(oo)g(Cho,)f
+-(Erica)g(Frohm,)g(Charlie)h(Gaona,)g(Cheng)448 2615 y(Hua,)k(Jae-Y)-10
+-b(oung)32 b(Jang,)g(Seh-W)-7 b(oong)31 b(Jeong,)i(Balakrishna)g(K)o
+-(umthekar)l(,)g(Enrico)d(Macii,)448 2728 y(Bobbie)19
+-b(Manne,)h(In-Ho)e(Moon,)h(Curt)f(Musfeldt,)j(Shipra)d(P)o(anda,)h
+-(Abelardo)h(P)o(ardo,)f(Bernard)448 2841 y(Plessier)l(,)28
+-b(Ka)n(vita)f(Ra)n(vi,)g(Hyongk)o(yoon)i(Shin,)d(Alan)h(Shuler)l(,)g
+-(Arun)f(Si)n(v)n(akumaran,)i(Jor)n(gen)448 2954 y(Si)n(v)o(esind.)448
+-3067 y(The)k(early)h(adopters:)49 b(Gianpiero)34 b(Cabodi,)h(Jordi)e
+-(Cortadella,)j(Mario)d(Escobar)l(,)j(Gayani)448 3180
+-y(Gamage,)28 b(Gary)f(Hachtel,)i(Mariano)g(Hermida,)f(W)-7
+-b(oohyuk)28 b(Lee,)f(Enric)g(P)o(astor)l(,)i(Massimo)448
+-3292 y(Poncino,)c(Ellen)e(Sento)o(vich,)i(the)f(students)i(of)d
+-(ECEN5139.)589 3405 y(I)36 b(am)f(also)h(particularly)k(indebted)e(to)e
+-(the)g(follo)n(wing)h(people)g(for)g(in-depth)h(discus-)448
+-3518 y(sions)23 b(on)f(BDDs:)27 b(Armin)22 b(Biere,)g(Oli)n(vier)g
+-(Coudert,)h(Arie)f(Gur\002nk)o(el,)h(Geert)f(Janssen,)i(Don)448
+-3631 y(Knuth,)39 b(Da)n(vid)d(Long,)i(Jean)f(Christophe)g(Madre,)i(K)n
+-(en)c(McMillan,)k(Shin-Ichi)e(Minato,)448 3744 y(Jaehong)24
+-b(P)o(ark,)c(Rajee)n(v)i(Ranjan,)g(Rick)f(Rudell,)h(Ellen)f(Sento)o
+-(vich,)i(T)-7 b(om)20 b(Shiple,)i(Christian)448 3857
+-y(Stangier)l(,)j(and)f(Bw)o(olen)g(Y)-9 b(ang.)589 3970
+-y(Special)28 b(thanks)h(to)e(Norris)h(Ip)f(for)g(guiding)j(my)c(f)o
+-(altering)k(steps)e(in)f(the)g(design)i(of)e(the)448
+-4083 y(C++)h(interf)o(ace.)46 b(Gianpiero)30 b(Cabodi)f(and)g(Stef)o
+-(ano)g(Quer)g(ha)n(v)o(e)g(graciously)i(agreed)f(to)e(let)448
+-4196 y(me)23 b(distrib)n(ute)j(their)f(dddmp)f(library)h(with)f(CUDD.)
+-589 4309 y(Masahiro)j(Fujita,)e(Gary)g(Hachtel,)h(and)f(Carl)g(Pixle)o
+-(y)g(ha)n(v)o(e)h(pro)o(vided)h(encouragement)448 4422
+-y(and)d(advice.)589 4534 y(The)31 b(National)i(Science)f(F)o(oundation)
+-h(and)f(the)f(Semiconductor)j(Research)f(Corpora-)448
+-4647 y(tion)24 b(ha)n(v)o(e)h(supported)h(in)d(part)h(the)g(de)n(v)o
+-(elopment)i(of)d(this)i(package.)p Black 1897 5225 a(41)p
+-Black eop end
+-%%Page: 42 42
+-TeXDict begin 42 41 bop Black Black 448 573 a Fq(Refer)n(ences)p
+-Black 494 780 a Fo([1])p Black 46 w(R.)27 b(I.)h(Bahar)l(,)i(E.)e(A.)f
+-(Frohm,)i(C.)e(M.)h(Gaona,)i(G.)d(D.)g(Hachtel,)j(E.)e(Macii,)h(A.)f(P)
+-o(ardo,)645 893 y(and)d(F)-7 b(.)23 b(Somenzi.)36 b(Algebraic)27
+-b(decision)f(diagrams)g(and)f(their)g(applications.)40
+-b(In)25 b Fn(Pr)l(o-)645 1006 y(ceedings)30 b(of)d(the)h(International)
+-k(Confer)m(ence)d(on)e(Computer)n(-Aided)j(Design)p Fo(,)f(pages)645
+-1119 y(188\226191,)d(Santa)e(Clara,)f(CA,)f(No)o(v)o(ember)h(1993.)p
+-Black 494 1306 a([2])p Black 46 w(B.)36 b(Bollig,)41
+-b(M.)35 b(L)8 b(\250)-38 b(obbing,)42 b(and)c(I.)e(W)-7
+-b(e)o(gener)i(.)77 b(Simulated)38 b(annealing)i(to)d(impro)o(v)o(e)645
+-1419 y(v)n(ariable)31 b(orderings)h(for)e(OBDDs.)50 b(Presented)30
+-b(at)g(the)f(International)k(W)-7 b(orkshop)31 b(on)645
+-1532 y(Logic)24 b(Synthesis,)h(Granlibakk)o(en,)h(CA,)c(May)h(1995.)p
+-Black 494 1720 a([3])p Black 46 w(K.)29 b(S.)f(Brace,)k(R.)d(L.)f
+-(Rudell,)k(and)f(R.)d(E.)h(Bryant.)55 b(Ef)n(\002cient)30
+-b(implementation)j(of)d(a)645 1833 y(BDD)f(package.)57
+-b(In)30 b Fn(Pr)l(oceedings)j(of)e(the)f(27th)h(Design)h(A)n(utomation)
+-g(Confer)m(ence)p Fo(,)645 1945 y(pages)25 b(40\22645,)g(Orlando,)f
+-(FL,)e(June)i(1990.)p Black 494 2133 a([4])p Black 46
+-w(R.)g(K.)g(Brayton)j(et)e(al.)40 b(VIS:)24 b(A)h(system)h(for)f(v)o
+-(eri\002cation)j(and)e(synthesis.)42 b(T)-6 b(echnical)645
+-2246 y(Report)31 b(UCB/ERL)26 b(M95/104,)33 b(Electronics)f(Research)f
+-(Lab,)g(Uni)n(v)-6 b(.)29 b(of)h(California,)645 2359
+-y(December)24 b(1995.)p Black 494 2547 a([5])p Black
+-46 w(R.)32 b(E.)g(Bryant.)65 b(Graph-based)36 b(algorithms)g(for)d
+-(Boolean)i(function)h(manipulation.)645 2659 y Fn(IEEE)22
+-b(T)-5 b(r)o(ansactions)26 b(on)e(Computer)o(s)p Fo(,)g
+-(C-35\(8\):677\226691,)k(August)c(1986.)p Black 494 2847
+-a([6])p Black 46 w(R.)32 b(Drechsler)l(,)38 b(B.)32 b(Beck)o(er)l(,)k
+-(and)e(N.)e(G)8 b(\250)-38 b(ock)o(el.)66 b(A)32 b(genetic)j(algorithm)
+-g(for)f(v)n(ariable)645 2960 y(ordering)27 b(of)e(OBDDs.)35
+-b(Presented)26 b(at)f(the)g(International)j(W)-7 b(orkshop)27
+-b(on)d(Logic)h(Syn-)645 3073 y(thesis,)g(Granlibakk)o(en,)h(CA,)c(May)h
+-(1995.)p Black 494 3261 a([7])p Black 46 w(S.)j(J.)g(Friedman)i(and)g
+-(K.)e(J.)g(Supo)n(wit.)45 b(Finding)28 b(the)g(optimal)g(v)n(ariable)h
+-(ordering)g(for)645 3373 y(binary)24 b(decision)h(diagrams.)32
+-b Fn(IEEE)21 b(T)-5 b(r)o(ansactions)25 b(on)d(Computer)o(s)p
+-Fo(,)i(39\(5\):710\226713,)645 3486 y(May)g(1990.)p Black
+-494 3674 a([8])p Black 46 w(M.)35 b(Fujita,)k(Y)-12 b(.)35
+-b(Matsunaga,)40 b(and)d(T)-7 b(.)34 b(Kakuda.)74 b(On)35
+-b(v)n(ariable)j(ordering)g(of)e(binary)645 3787 y(decision)30
+-b(diagrams)f(for)f(the)g(application)j(of)c(multi-le)n(v)o(el)i(logic)g
+-(synthesis.)49 b(In)28 b Fn(Pr)l(o-)645 3900 y(ceedings)33
+-b(of)e(the)g(Eur)l(opean)h(Confer)m(ence)h(on)e(Design)g(A)n(utomation)
+-p Fo(,)j(pages)e(50\22654,)645 4013 y(Amsterdam,)24 b(February)h(1991.)
+-p Black 494 4200 a([9])p Black 46 w(M.)h(Held)g(and)i(R.)d(M.)g(Karp.)
+-44 b(A)25 b(dynamic)j(programming)h(approach)g(to)e(sequencing)645
+-4313 y(problems.)35 b Fn(J)n(.)23 b(SIAM)p Fo(,)f(10\(1\):196\226210,)
+-28 b(1962.)p Black 448 4501 a([10])p Black 47 w(N.)e(Ishiura,)i(H.)e
+-(Sa)o(w)o(ada,)h(and)g(S.)e(Y)-9 b(ajima.)43 b(Minimization)29
+-b(of)e(binary)h(decision)h(dia-)645 4614 y(grams)f(based)g(on)g(e)o
+-(xchanges)h(of)e(v)n(ariables.)48 b(In)27 b Fn(Pr)l(oceedings)j(of)d
+-(the)g(International)645 4727 y(Confer)m(ence)37 b(on)e(Computer)n
+-(-Aided)j(Design)p Fo(,)g(pages)e(472\226475,)k(Santa)35
+-b(Clara,)j(CA,)645 4840 y(No)o(v)o(ember)24 b(1991.)p
+-Black 1897 5225 a(42)p Black eop end
+-%%Page: 43 43
+-TeXDict begin 43 42 bop Black Black Black 448 573 a Fo([11])p
+-Black 47 w(S.-W)-8 b(.)31 b(Jeong,)37 b(T)-7 b(.-S.)31
+-b(Kim,)k(and)e(F)-7 b(.)32 b(Somenzi.)64 b(An)33 b(ef)n(\002cient)h
+-(method)g(for)f(optimal)645 686 y(BDD)25 b(ordering)k(computation.)47
+-b(In)27 b Fn(International)k(Confer)m(ence)e(on)e(VLSI)f(and)h(CAD)645
+-799 y(\(ICVC'93\))p Fo(,)c(T)-7 b(aejon,)24 b(K)m(orea,)f(No)o(v)o
+-(ember)h(1993.)p Black 448 986 a([12])p Black 47 w(S.-I.)29
+-b(Minato.)55 b(Zero-suppressed)35 b(BDDs)28 b(for)j(set)f(manipulation)
+-j(in)d(combinatorial)645 1099 y(problems.)35 b(In)24
+-b Fn(Pr)l(oceedings)i(of)e(the)g(Design)g(A)n(utomation)h(Confer)m
+-(ence)p Fo(,)g(pages)g(272\226)645 1212 y(277,)f(Dallas,)g(TX,)d(June)k
+-(1993.)p Black 448 1400 a([13])p Black 47 w(S.)38 b(P)o(anda)i(and)f(F)
+--7 b(.)38 b(Somenzi.)85 b(Who)39 b(are)h(the)f(v)n(ariables)j(in)d
+-(your)h(neighborhood.)645 1513 y(In)28 b Fn(Pr)l(oceedings)i(of)d(the)h
+-(International)j(Confer)m(ence)e(on)f(Computer)n(-Aided)i(Design)p
+-Fo(,)645 1626 y(pages)25 b(74\22677,)g(San)e(Jose,)h(CA,)d(No)o(v)o
+-(ember)j(1995.)p Black 448 1813 a([14])p Black 47 w(S.)41
+-b(P)o(anda,)48 b(F)-7 b(.)40 b(Somenzi,)48 b(and)43 b(B.)e(F)-7
+-b(.)41 b(Plessier)-5 b(.)96 b(Symmetry)43 b(detection)i(and)e(dy-)645
+-1926 y(namic)31 b(v)n(ariable)i(ordering)f(of)f(decision)i(diagrams.)57
+-b(In)30 b Fn(Pr)l(oceedings)k(of)c(the)h(Inter)n(-)645
+-2039 y(national)h(Confer)m(ence)g(on)e(Computer)n(-Aided)i(Design)p
+-Fo(,)f(pages)g(628\226631,)j(San)29 b(Jose,)645 2152
+-y(CA,)22 b(No)o(v)o(ember)i(1994.)p Black 448 2340 a([15])p
+-Black 47 w(B.)i(F)-7 b(.)25 b(Plessier)-5 b(.)46 b Fn(A)26
+-b(Gener)o(al)i(F)-5 b(r)o(ame)o(work)27 b(for)g(V)-10
+-b(eri\002cation)30 b(of)d(Sequential)j(Cir)m(cuits)p
+-Fo(.)645 2452 y(PhD)24 b(thesis,)i(Uni)n(v)o(ersity)h(of)e(Colorado)h
+-(at)f(Boulder)l(,)i(Dept.)d(of)h(Electrical)i(and)e(Com-)645
+-2565 y(puter)g(Engineering,)h(1993.)p Black 448 2753
+-a([16])p Black 47 w(R.)e(Rudell.)41 b(Dynamic)25 b(v)n(ariable)j
+-(ordering)f(for)f(ordered)h(binary)g(decision)h(diagrams.)645
+-2866 y(In)g Fn(Pr)l(oceedings)i(of)d(the)h(International)j(Confer)m
+-(ence)e(on)f(Computer)n(-Aided)i(Design)p Fo(,)645 2979
+-y(pages)25 b(42\22647,)g(Santa)e(Clara,)h(CA,)d(No)o(v)o(ember)j(1993.)
+-p Black 448 3166 a([17])p Black 47 w(E.)43 b(M.)f(Sento)o(vich,)51
+-b(K.)42 b(J.)i(Singh,)49 b(C.)42 b(Moon,)50 b(H.)42 b(Sa)n(v)n(oj,)50
+-b(R.)42 b(K.)h(Brayton,)50 b(and)645 3279 y(A.)35 b(Sangio)o(v)n
+-(anni-V)-5 b(incentelli.)79 b(Sequential)38 b(circuit)g(design)g(using)
+-f(synthesis)i(and)645 3392 y(optimization.)55 b(In)29
+-b Fn(Pr)l(oceedings)j(of)e(the)f(International)34 b(Confer)m(ence)d(on)
+-e(Computer)645 3505 y(Design)p Fo(,)24 b(pages)h(328\226333,)h
+-(Cambridge,)e(MA,)e(October)i(1992.)p Black 1897 5225
+-a(43)p Black eop end
+-%%Page: 44 44
+-TeXDict begin 44 43 bop Black Black Black 448 705 a Fq(Index)p
+-Black 448 892 a Fo(ADD,)22 b(4,)h(7,)f(11,)i(13)448 1005
+-y(aggre)o(gation,)i(18)448 1118 y(Algebraic)f(Decision)g(Diagram,)f
+-Fn(see)g Fo(ADD)448 1231 y(arc)614 1344 y(complement,)h(11,)f(25,)f(28)
+-614 1457 y(re)o(gular)l(,)i(25,)f(28)448 1653 y(background)j(v)n(alue,)
+-d(10)448 1766 y(BDD,)e(4,)h(7,)f(10,)i(12)448 1878 y(Binary)g(Decision)
+-h(Diagram,)f Fn(see)g Fo(BDD)448 1991 y(box)614 2104
+-y(black,)h(4)614 2217 y(clear)l(,)g(4,)e(24)448 2413
+-y(cache,)i(8,)e(28,)g(29)614 2526 y(collision,)j(35)614
+-2639 y(collision)g(list,)e(31)614 2752 y(deletion,)i(35)614
+-2865 y(local,)f(29,)e(30)614 2978 y(lossless,)j(30)614
+-3091 y(re)n(w)o(ard-based)h(resizing,)e(30)614 3204 y(sizing,)g(29)448
+-3316 y(cacheSize,)g(8)448 3429 y(canonical,)h(7,)d(30)448
+-3542 y(compiling,)i(6,)e(10,)h(24)448 3655 y(con\002guration,)j(5)448
+-3768 y(con)l(v)o(ersion)614 3881 y(of)d(ADDs)e(to)h(BDDs,)f(15)614
+-3994 y(of)i(BDDs)e(to)h(ADDs,)f(15)614 4107 y(of)i(BDDs)e(to)h(ZDDs,)f
+-(14,)h(15)614 4220 y(of)h(ZDDs)e(to)h(BDDs,)f(15)448
+-4333 y(cube)j(sets,)e(4)448 4446 y(cudd.h,)i(6,)e(17,)g(28)448
+-4558 y Fn(Cudd)p 649 4558 28 4 v 34 w(addApply)p Fo(,)i(13,)e(14)448
+-4671 y Fn(Cudd)p 649 4671 V 34 w(addBddInterval)p Fo(,)k(15)448
+-4784 y Fn(Cudd)p 649 4784 V 34 w(addBddP)-7 b(attern)p
+-Fo(,)26 b(15)448 4897 y Fn(Cudd)p 649 4897 V 34 w(addBddThr)m(eshold)p
+-Fo(,)h(15)p Black Black 1984 892 a Fn(Cudd)p 2185 892
+-V 34 w(addConst)p Fo(,)e(11)1984 1005 y Fn(Cudd)p 2185
+-1005 V 34 w(addHarwell)p Fo(,)g(11)1984 1118 y Fn(Cudd)p
+-2185 1118 V 34 w(AddHook)p Fo(,)f(22)1984 1231 y Fn(Cudd)p
+-2185 1231 V 34 w(addIthBit)p Fo(,)h(15)1984 1344 y Fn(Cudd)p
+-2185 1344 V 34 w(addIthV)-10 b(ar)p Fo(,)25 b(11)1984
+-1457 y Fn(Cudd)p 2185 1457 V 34 w(addNe)o(wV)-10 b(ar)p
+-Fo(,)23 b(11)1984 1570 y Fn(Cudd)p 2185 1570 V 34 w(addNe)o(wV)-10
+-b(arAtLe)o(vel)p Fo(,)24 b(11,)f(20)1984 1683 y Fn(Cudd)p
+-2185 1683 V 34 w(addRead)p Fo(,)i(11)1984 1795 y Fn(Cudd)p
+-2185 1795 V 34 w(addT)-5 b(imes)p Fo(,)24 b(14)1984 1908
+-y Fn(Cudd)p 2185 1908 V 34 w(A)n(utodynDisable)p Fo(,)i(17)1984
+-2021 y Fn(Cudd)p 2185 2021 V 34 w(A)n(utodynDisableZdd)p
+-Fo(,)h(20)1984 2134 y Fn(Cudd)p 2185 2134 V 34 w(A)n(utodynEnable)p
+-Fo(,)f(17)1984 2247 y Fn(Cudd)p 2185 2247 V 34 w(A)n(utodynEnableZdd)p
+-Fo(,)h(20)1984 2360 y Fn(Cudd)p 2185 2360 V 34 w(bddAnd)p
+-Fo(,)d(12\22614)1984 2473 y Fn(Cudd)p 2185 2473 V 34
+-w(bddAndLimit)p Fo(,)g(22)1984 2586 y Fn(Cudd)p 2185
+-2586 V 34 w(bddConstr)o(ain)p Fo(,)i(7)1984 2699 y Fn(Cudd)p
+-2185 2699 V 34 w(bddIte)p Fo(,)f(12)1984 2812 y Fn(Cudd)p
+-2185 2812 V 34 w(bddIthV)-10 b(ar)p Fo(,)25 b(11)1984
+-2925 y Fn(Cudd)p 2185 2925 V 34 w(bddNe)o(wV)-10 b(ar)p
+-Fo(,)23 b(11)1984 3037 y Fn(Cudd)p 2185 3037 V 34 w(bddNe)o(wV)-10
+-b(arAtLe)o(vel)p Fo(,)24 b(11,)f(20)1984 3150 y Fn(Cudd)p
+-2185 3150 V 34 w(BddT)-8 b(oAdd)p Fo(,)23 b(15)1984 3263
+-y Fn(Cudd)p 2185 3263 V 34 w(bddXor)p Fo(,)h(14)1984
+-3376 y(CUDD)p 2248 3376 V 31 w(CA)l(CHE)p 2585 3376 V
+-32 w(SLO)l(TS,)c(8)1984 3489 y Fn(Cudd)p 2185 3489 V
+-34 w(Chec)n(kK)m(e)m(ys)p Fo(,)25 b(33)1984 3602 y Fn(Cudd)p
+-2185 3602 V 34 w(Chec)n(kZer)l(oRef)p Fo(,)g(34)1984
+-3715 y Fn(Cudd)p 2185 3715 V 34 w(CountMinterm)p Fo(,)g(11)1984
+-3828 y Fn(Cudd)p 2185 3828 V 34 w(Deb)n(ugChec)n(k)p
+-Fo(,)g(33)1984 3941 y Fn(Cudd)p 2185 3941 V 34 w(DelayedDer)m(efBdd)p
+-Fo(,)g(36)1984 4054 y Fn(Cudd)p 2185 4054 V 34 w(Der)m(ef)p
+-Fo(,)e(27,)g(28)1984 4167 y Fn(Cudd)p 2185 4167 V 34
+-w(DumpBlif)p Fo(,)g(24)1984 4279 y Fn(Cudd)p 2185 4279
+-V 34 w(DumpDaV)-7 b(inci)p Fo(,)24 b(24)1984 4392 y Fn(Cudd)p
+-2185 4392 V 34 w(DumpDot)p Fo(,)f(24)1984 4505 y Fn(Cudd)p
+-2185 4505 V 34 w(F)-10 b(or)m(eac)o(hCube)p Fo(,)25 b(6,)e(11)1984
+-4618 y Fn(Cudd)p 2185 4618 V 34 w(F)-10 b(or)m(eac)o(hNode)p
+-Fo(,)25 b(6)1984 4731 y Fn(Cudd)p 2185 4731 V 34 w(HookT)-7
+-b(ype)p Fo(,)24 b(21)1984 4844 y Fn(Cudd)p 2185 4844
+-V 34 w(Init)p Fo(,)g(8,)f(9)1984 4957 y Fn(Cudd)p 2185
+-4957 V 34 w(Mak)o(eT)-5 b(r)m(eeNode)p Fo(,)25 b(19,)e(20)p
+-Black 1897 5225 a(44)p Black eop end
+-%%Page: 45 45
+-TeXDict begin 45 44 bop Black Black 448 573 a Fn(Cudd)p
+-649 573 28 4 v 34 w(Mak)o(eZddT)-5 b(r)m(eeNode)p Fo(,)25
+-b(21)448 686 y Fn(Cudd)p 649 686 V 34 w(Not)p Fo(,)e(10)448
+-799 y Fn(Cudd)p 649 799 V 34 w(PrintInfo)p Fo(,)i(34)448
+-912 y Fn(Cudd)p 649 912 V 34 w(PrintMinterm)p Fo(,)f(11)448
+-1024 y Fn(Cudd)p 649 1024 V 34 w(Quit)p Fo(,)f(9)448
+-1137 y Fn(Cudd)p 649 1137 V 34 w(ReadBac)n(kgr)l(ound)p
+-Fo(,)k(10)448 1250 y Fn(Cudd)p 649 1250 V 34 w(ReadEpsilon)p
+-Fo(,)e(10)448 1363 y Fn(Cudd)p 649 1363 V 34 w(ReadErr)l(orCode)p
+-Fo(,)g(27)448 1476 y Fn(Cudd)p 649 1476 V 34 w(ReadIn)l(vP)-7
+-b(erm)p Fo(,)24 b(13)448 1589 y Fn(Cudd)p 649 1589 V
+-34 w(ReadLo)o(gicZer)l(o)p Fo(,)h(10)448 1702 y Fn(Cudd)p
+-649 1702 V 34 w(ReadLooseUpto)p Fo(,)g(9)448 1815 y Fn(Cudd)p
+-649 1815 V 34 w(ReadMaxGr)l(owth)p Fo(,)g(18)448 1928
+-y Fn(Cudd)p 649 1928 V 34 w(ReadMinusIn\002nity)p Fo(,)i(10)448
+-2041 y Fn(Cudd)p 649 2041 V 34 w(ReadOne)p Fo(,)d(9)448
+-2154 y Fn(Cudd)p 649 2154 V 34 w(ReadPlusIn\002nity)p
+-Fo(,)i(10)448 2267 y Fn(Cudd)p 649 2267 V 34 w(ReadReor)m(derings)p
+-Fo(,)g(33)448 2379 y Fn(Cudd)p 649 2379 V 34 w(ReadSiftMaxV)-10
+-b(ar)p Fo(,)25 b(18)448 2492 y Fn(Cudd)p 649 2492 V 34
+-w(ReadT)-5 b(r)m(ee)p Fo(,)24 b(19)448 2605 y Fn(Cudd)p
+-649 2605 V 34 w(ReadZddOne)p Fo(,)g(9,)f(15)448 2718
+-y Fn(Cudd)p 649 2718 V 34 w(ReadZer)l(o)p Fo(,)h(10)448
+-2831 y Fn(Cudd)p 649 2831 V 34 w(Recur)o(siveDer)m(ef)p
+-Fo(,)i(7,)d(26\22628,)h(30,)g(33)448 2944 y Fn(Cudd)p
+-649 2944 V 34 w(Recur)o(siveDer)m(efZdd)p Fo(,)i(7,)d(26\22628)448
+-3057 y Fn(Cudd)p 649 3057 V 34 w(ReduceHeap)p Fo(,)i(17)448
+-3170 y Fn(Cudd)p 649 3170 V 34 w(Ref)p Fo(,)e(7,)g(12,)g(26,)g(27)448
+-3283 y Fn(Cudd)p 649 3283 V 34 w(Re)l(gular)p Fo(,)i(28)448
+-3396 y(CUDD)p 712 3396 V 32 w(REORDER)p 1171 3396 V 30
+-w(ANNEALING,)19 b(19)448 3509 y(CUDD)p 712 3509 V 32
+-w(REORDER)p 1171 3509 V 30 w(EXA)l(CT)-7 b(,)21 b(19)448
+-3621 y(CUDD)p 712 3621 V 32 w(REORDER)p 1171 3621 V 30
+-w(GENETIC,)f(19)448 3734 y(CUDD)p 712 3734 V 32 w(REORDER)p
+-1171 3734 V 30 w(GR)l(OUP)p 1507 3734 V 31 w(SIFT)-7
+-b(,)21 b(18)448 3847 y(CUDD)p 712 3847 V 32 w(REORDER)p
+-1171 3847 V 30 w(GR)l(OUP)p 1507 3847 V 31 w(SIFT)p 1726
+-3847 V 31 w(CONV)-12 b(,)780 3960 y(18)448 4073 y(CUDD)p
+-712 4073 V 32 w(REORDER)p 1171 4073 V 30 w(NONE,)20 b(17,)k(20)448
+-4186 y(CUDD)p 712 4186 V 32 w(REORDER)p 1171 4186 V 30
+-w(RANDOM,)c(17,)j(20)448 4299 y(CUDD)p 712 4299 V 32
+-w(REORDER)p 1171 4299 V 30 w(RANDOM)p 1607 4299 V 30
+-w(PIV)l(O)l(T)-7 b(,)780 4412 y(17,)24 b(20)448 4525
+-y(CUDD)p 712 4525 V 32 w(REORDER)p 1171 4525 V 30 w(SAME,)d(17,)i(20)
+-448 4638 y(CUDD)p 712 4638 V 32 w(REORDER)p 1171 4638
+-V 30 w(SIFT)-7 b(,)21 b(17,)j(21)448 4751 y(CUDD)p 712
+-4751 V 32 w(REORDER)p 1171 4751 V 30 w(SIFT)p 1389 4751
+-V 31 w(CONVERGE,)780 4863 y(18,)g(21)448 4976 y(CUDD)p
+-712 4976 V 32 w(REORDER)p 1171 4976 V 30 w(SYMM)p 1480
+-4976 V 31 w(SIFT)-7 b(,)16 b(18,)j(21)p Black Black 1984
+-573 a(CUDD)p 2248 573 V 31 w(REORDER)p 2706 573 V 30
+-w(SYMM)p 3015 573 V 32 w(SIFT)p 3235 573 V 32 w(CONV)-12
+-b(,)2316 686 y(18,)24 b(21)1984 799 y(CUDD)p 2248 799
+-V 31 w(REORDER)p 2706 799 V 30 w(WINDO)m(W2,)e(18)1984
+-912 y(CUDD)p 2248 912 V 31 w(REORDER)p 2706 912 V 30
+-w(WINDO)m(W2)p 3178 912 V 32 w(CONV)-12 b(,)2316 1024
+-y(18)1984 1137 y(CUDD)p 2248 1137 V 31 w(REORDER)p 2706
+-1137 V 30 w(WINDO)m(W3,)22 b(18)1984 1250 y(CUDD)p 2248
+-1250 V 31 w(REORDER)p 2706 1250 V 30 w(WINDO)m(W3)p 3178
+-1250 V 32 w(CONV)-12 b(,)2316 1363 y(18)1984 1476 y(CUDD)p
+-2248 1476 V 31 w(REORDER)p 2706 1476 V 30 w(WINDO)m(W4,)22
+-b(18)1984 1589 y(CUDD)p 2248 1589 V 31 w(REORDER)p 2706
+-1589 V 30 w(WINDO)m(W4)p 3178 1589 V 32 w(CONV)-12 b(,)2316
+-1702 y(19)1984 1815 y Fn(Cudd)p 2185 1815 V 34 w(SetEpsilon)p
+-Fo(,)25 b(10)1984 1928 y Fn(Cudd)p 2185 1928 V 34 w(SetLooseUpT)-8
+-b(o)p Fo(,)24 b(9)1984 2041 y Fn(Cudd)p 2185 2041 V 34
+-w(SetMaxCac)o(heHar)m(d)p Fo(,)h(37)1984 2154 y Fn(Cudd)p
+-2185 2154 V 34 w(SetMaxGr)l(owth)p Fo(,)g(18)1984 2267
+-y Fn(Cudd)p 2185 2267 V 34 w(SetSiftMaxV)-10 b(ar)p Fo(,)26
+-b(18)1984 2379 y Fn(Cudd)p 2185 2379 V 34 w(SetT)-5 b(imeLimit)p
+-Fo(,)23 b(22)1984 2492 y Fn(Cudd)p 2185 2492 V 34 w(SetT)-5
+-b(r)m(ee)p Fo(,)24 b(19)1984 2605 y Fn(Cudd)p 2185 2605
+-V 34 w(Shuf)n(\003eHeap)p Fo(,)i(19)1984 2718 y Fn(Cudd)p
+-2185 2718 V 34 w(StdP)-7 b(ostReor)m(dHook)p Fo(,)26
+-b(22)1984 2831 y Fn(Cudd)p 2185 2831 V 34 w(StdPr)m(eReor)m(dHook)p
+-Fo(,)f(22)1984 2944 y Fn(Cudd)p 2185 2944 V 34 w(SymmPr)l(o\002le)p
+-Fo(,)f(18)1984 3057 y(CUDD)p 2248 3057 V 31 w(UNIQ)o(UE)p
+-2628 3057 V 32 w(SLO)l(TS,)c(8)1984 3170 y Fn(Cudd)p
+-2185 3170 V 34 w(zddDumpDot)p Fo(,)k(24)1984 3283 y Fn(Cudd)p
+-2185 3283 V 34 w(zddIsop)p Fo(,)h(15)1984 3396 y Fn(Cudd)p
+-2185 3396 V 34 w(zddIthV)-10 b(ar)p Fo(,)25 b(12)1984
+-3509 y Fn(Cudd)p 2185 3509 V 34 w(zddP)-7 b(ortF)i(r)l(omBdd)p
+-Fo(,)24 b(16)1984 3621 y Fn(Cudd)p 2185 3621 V 34 w(zddP)-7
+-b(ortT)f(oBdd)p Fo(,)24 b(16)1984 3734 y Fn(Cudd)p 2185
+-3734 V 34 w(zddRealignDisable)p Fo(,)j(21)1984 3847 y
+-Fn(Cudd)p 2185 3847 V 34 w(zddRealignEnable)p Fo(,)g(21)1984
+-3960 y Fn(Cudd)p 2185 3960 V 34 w(zddReduceHeap)p Fo(,)f(20)1984
+-4073 y Fn(Cudd)p 2185 4073 V 34 w(zddShuf)n(\003eHeap)p
+-Fo(,)h(20)1984 4186 y Fn(Cudd)p 2185 4186 V 34 w(zddV)-10
+-b(ar)o(sF)-5 b(r)l(omBddV)-10 b(ar)o(s)p Fo(,)25 b(16)1984
+-4299 y Fn(Cudd)p 2185 4299 V 34 w(zddW)-8 b(eakDiv)p
+-Fo(,)24 b(15)1984 4412 y Fn(cuddCac)o(heInsert)p Fo(,)j(29)1984
+-4525 y Fn(cuddCac)o(heInsert1)p Fo(,)h(29)1984 4638 y
+-Fn(cuddCac)o(heInsert2)p Fo(,)g(29)1984 4751 y Fn(cuddCac)o(heLookup)p
+-Fo(,)f(29)1984 4863 y Fn(cuddCac)o(heLookup1)p Fo(,)g(29)1984
+-4976 y Fn(cuddCac)o(heLookup2)p Fo(,)g(29)p Black 1897
+-5225 a(45)p Black eop end
+-%%Page: 46 46
+-TeXDict begin 46 45 bop Black Black 448 573 a Fo(CUDDDIR,)21
+-b(22)448 686 y Fn(cuddHeapPr)l(o\002le)p Fo(,)27 b(33)448
+-799 y Fn(cuddI)p Fo(,)e(31)448 912 y(cuddInt.h,)h(33)448
+-1024 y Fn(cuddIZ)p Fo(,)e(31)448 1137 y Fn(cuddSatDec)p
+-Fo(,)i(28)448 1250 y Fn(cuddSatInc)p Fo(,)h(28)448 1363
+-y Fn(cuddUniqueConst)p Fo(,)g(26)448 1476 y Fn(cuddUniqueInter)p
+-Fo(,)h(26,)23 b(28,)h(32,)f(33)448 1589 y Fn(cuddUniqueInterZdd)p
+-Fo(,)28 b(26,)c(32)448 1777 y(DD)p 585 1777 28 4 v 32
+-w(CA)l(CHE)p 923 1777 V 31 w(PR)l(OFILE,)d(39)448 1890
+-y(DD)p 585 1890 V 32 w(DEB)o(UG,)g(33)448 2003 y(DD)p
+-585 2003 V 32 w(ST)-8 b(A)e(TS,)20 b(39)448 2116 y(DD)p
+-585 2116 V 32 w(UNIQ)o(UE)p 966 2116 V 31 w(PR)l(OFILE,)h(39)448
+-2229 y(DD)p 585 2229 V 32 w(VERBOSE,)f(39)448 2342 y(DdManager)l(,)25
+-b(7,)e(8)448 2455 y(DdNode,)h(6,)f(29)448 2568 y(deb)n(ugging,)k(33)448
+-2681 y(DEC)22 b(Alpha,)h(23)448 2793 y(DEC)f(Alpha,)h(10)448
+-2906 y(documentation,)k(39)614 3019 y Fn(Description)p
+-Fo(,)f(40)614 3132 y(HTML)c(\002les,)h(40)614 3245 y
+-Fn(SeeAlso)p Fo(,)i(40)614 3358 y Fn(Synopsis)p Fo(,)h(40)448
+-3471 y(dot,)e Fn(see)g Fo(graph,)g(dra)o(wing)448 3659
+-y(Epsilon,)h(10)448 3772 y(e)o(xtdoc,)g Fn(see)f Fo(documentation)448
+-3960 y(\003oating)h(point,)f(10)614 4073 y(double)i(\(C)c(type\),)i(7)
+-614 4186 y(IEEE)e(Standard)j(754,)f(10)448 4299 y(free)g(list,)g(26)448
+-4412 y(FTP)-10 b(,)21 b(5,)i(23,)h(39)448 4525 y(function)614
+-4638 y(characteristic,)j(4,)c(16)614 4751 y(co)o(v)o(er)l(,)h(15,)g(16)
+-697 4863 y(irredundant,)j(15)614 4976 y(minterms,)d(11,)g(32)p
+-Black Black 2150 573 a(ON-set,)f(4)2150 686 y(sum)h(of)f(products,)j
+-(11)2150 799 y(switching,)f(4)1984 995 y(garbage)g(collection,)h
+-(7\2269,)e(26,)f(29\22631)2150 1108 y(hooks,)i(21)1984
+-1220 y(gcc,)f(10)1984 1333 y(generator)l(,)i(6)1984 1446
+-y(global)f(v)n(ariables,)h(7)1984 1559 y(graph)2150 1672
+-y(arc)e(capacity)-6 b(,)25 b(10)2150 1785 y(arc)f(length,)h(10)2150
+-1898 y(dra)o(wing,)f(24)1984 2011 y(gro)n(wth,)g(9)1984
+-2124 y(gzip,)g(5)1984 2320 y(HA)-12 b(VE)p 2231 2320
+-V 31 w(IEEE)p 2460 2320 V 32 w(754,)24 b(10)1984 2433
+-y(header)h(\002les,)e(17,)h(28)1984 2545 y(hook,)g(21)1984
+-2741 y(in\002nities,)h(10)1984 2854 y(installation,)i(5)1984
+-2967 y(Intel)e(Pentium)e(4,)g(5)1984 3080 y(interf)o(ace)2150
+-3193 y(cache,)i(29)2150 3306 y(SIS,)d(22)2150 3419 y(VIS,)g(22)1984
+-3615 y(libraries,)k(5)2150 3728 y(cudd,)e(6)2150 3841
+-y(dddmp,)g(24)2150 3954 y(mtr)l(,)f(6,)g(19)2150 4066
+-y(obj,)h(40)2150 4179 y(st,)f(6,)g(29)2150 4292 y(util,)h(6)1984
+-4488 y(Mak)o(e\002le,)g(6,)f(10,)g(40)1984 4601 y(manager)l(,)i(7,)e(9)
+-1984 4714 y(matrix)2150 4827 y(sparse,)i(10)1984 4940
+-y(maxCache,)f(30)p Black 1897 5225 a(46)p Black eop end
+-%%Page: 47 47
+-TeXDict begin 47 46 bop Black Black 448 573 a Fo(maxMemory)-6
+-b(,)24 b(8)448 686 y(MinusIn\002nity)-6 b(,)26 b(10)448
+-799 y(MTR)p 651 799 28 4 v 32 w(DEF)-7 b(A)i(UL)d(T)h(,)20
+-b(20)448 912 y(MTR)p 651 912 V 32 w(FIXED,)h(19)448 1100
+-y(nanotra)n(v)-6 b(,)26 b(5)448 1213 y(node,)e(6)614
+-1326 y(constant,)i(6,)d(9\22611,)h(26,)f(27)697 1438
+-y(v)n(alue,)h(7)614 1551 y(dead,)g(26,)g(29,)f(31)614
+-1664 y(dereference,)k(14)614 1777 y(reclaimed,)e(31)614
+-1890 y(rec)o(ycling,)h(7)614 2003 y(reference,)g(14)614
+-2116 y(reference)g(count,)f(26)614 2229 y(reference)c(count,)f(6,)f(7,)
+-g(12,)g(13,)g(26\22630,)780 2342 y(34)697 2455 y(saturated,)26
+-b(34)614 2568 y(terminal,)f Fn(see)f Fo(node,)g(constant)614
+-2681 y(v)n(ariable)i(inde)o(x,)e(6)448 2793 y(numSlots,)g(8)448
+-2906 y(numV)-10 b(ars,)24 b(8)448 3019 y(numV)-10 b(arsZ,)23
+-b(8)448 3207 y(PlusIn\002nity)-6 b(,)25 b(10)448 3320
+-y(projection)i(functions,)e(11,)f(12,)f(14,)h(15,)f(34)448
+-3509 y(README)e(\002le,)h(5)448 3621 y(reordering,)k(4,)d(6,)g(29)614
+-3734 y(abort)i(and)f(retry)-6 b(,)24 b(32)614 3847 y(asynchronous,)k
+-(17,)23 b(32)614 3960 y(con)l(v)o(er)n(ging,)k(17,)d(18)614
+-4073 y(Cudd)p 815 4073 V 34 w(ReorderingT)-7 b(ype,)26
+-b(17)614 4186 y(dynamic,)f(4,)e(16,)g(20)614 4299 y(e)o(xact,)h(19)614
+-4412 y(function)i(wrapper)l(,)f(32,)e(33)614 4525 y(genetic,)i(19)614
+-4638 y(group,)g(17,)e(18)614 4751 y(hooks,)i(21)614 4863
+-y(interruptible)j(procedure,)d(32)614 4976 y(of)f(BDDs)e(and)i(ADDs,)e
+-(16)p Black Black 2150 573 a(of)i(ZDDs,)d(15,)j(20)2150
+-686 y(random,)g(17)2150 799 y(sifting,)h(17)2150 912
+-y(simulated)h(annealing,)f(19)2150 1024 y(symmetric,)g(18)2150
+-1137 y(threshold,)h(17,)d(32)2150 1250 y(windo)n(w)-6
+-b(,)23 b(18)1984 1446 y(saturating)2150 1559 y(decrements,)j(28)2150
+-1672 y(increments,)g(28)1984 1785 y(SISDIR,)c(22)1984
+-1898 y(SIZEOF)p 2299 1898 V 31 w(INT)-7 b(,)22 b(28)1984
+-2011 y(SIZEOF)p 2299 2011 V 31 w(V)l(OID)p 2554 2011
+-V 32 w(P)-10 b(,)22 b(28)1984 2124 y(statistical)k(counters,)g(7,)d(30)
+-1984 2237 y(statistical)j(counters,)g(26)1984 2350 y(statistics,)g(34)
+-1984 2462 y(subtable,)g(8,)d(26)1984 2575 y(symmetry)-6
+-b(,)24 b(18)1984 2771 y(table)2150 2884 y(computed,)h(8)2150
+-2997 y(gro)n(wth,)f(9)2150 3110 y(hash,)g(7,)f(31)2150
+-3223 y(unique,)i(6\2269,)f(16,)f(26,)h(30,)f(31)2233
+-3336 y(f)o(ast)h(gro)n(wth,)g(31)2233 3449 y(re)n(w)o(ard-based)i
+-(resizing,)g(31)2233 3562 y(slo)n(w)d(gro)n(wth,)h(32)1984
+-3675 y(timeout,)g(22)1984 3870 y(v)n(ariable)2150 3983
+-y(groups,)h(19)2150 4096 y(order)l(,)g(6,)e(11)2150 4209
+-y(permutation,)j(6,)d(31)2150 4322 y(tree,)h(19,)f(20)1984
+-4518 y(ZDD,)e(4,)i(7,)g(12,)h(14,)f(15)1984 4631 y(zero)2150
+-4744 y(arithmetic,)i(9,)e(11,)h(15)2150 4857 y(logical,)h(9,)e(15)p
+-Black 1897 5225 a(47)p Black eop end
+-%%Page: 48 48
+-TeXDict begin 48 47 bop Black Black 448 573 a Fo(Zero-suppressed)22
+-b(Binary)d(Decision)h(Diagram,)780 686 y Fn(see)k Fo(ZDD)p
+-Black Black Black 1897 5225 a(48)p Black eop end
+-%%Trailer
+-
+-userdict /end-hook known{end-hook}if
+-%%EOF
+diff --git a/Cudd/dddmp/Makefile b/Cudd/dddmp/Makefile
+deleted file mode 100644
+index d84881a..0000000
+--- a/Cudd/dddmp/Makefile
++++ /dev/null
+@@ -1,243 +0,0 @@
+-#----------------------------------------------------------------------------#
+-# Makefile for the dddmp distribution kit #
+-# dddmp: Decision Diagram DuMP #
+-# (storage and retrieval of BDDs, ADDs and CNF formulas) #
+-# Revision: Version 2.0.2, February 01, 2004 #
+-#----------------------------------------------------------------------------#
+-
+-# Commands Available:
+-# make
+-# it makes the library libdddmp.a
+-# make testdddmp
+-# it makes the testdddmp program, which allows to test the dddmp
+-# package
+-# make clean
+-# it cleans dddmp
+-# make distclean
+-# it cleans dddmp (as clean) with libraries and executable
+-# files
+-
+-#----------------------------------------------------------------------------#
+-# Configuration Section #
+-# uncomment the desired options/sections #
+-#----------------------------------------------------------------------------#
+-
+-#--------------------#
+-# Define Directories #
+-#--------------------#
+-
+-# Cudd directory
+-WHERE = ..
+-#WHERE = ../cudd-2.4.0
+-
+-# Include directory (Cudd include files)
+-INCLUDE = $(WHERE)/include
+-
+-#------------------------#
+-# Define C Compiler Used #
+-#------------------------#
+-
+-CC = gcc
+-#CC = g++
+-#CC = cc
+-#CC = icc
+-#CC = ecc
+-#CC = /usr/ucb/cc
+-#CC = c89
+-
+-.SUFFIXES: .o .c .u
+-
+-#---------------#
+-# Define ranlib #
+-#---------------#
+-
+-# For machines with ranlib and you think it is needed
+-RANLIB = ranlib
+-# For machines which either do not have ranlib or can do without it
+-#RANLIB = :
+-
+-#----------------------------------#
+-# Define Machine Independent Flags #
+-#----------------------------------#
+-
+-# Settings for cc
+-#ICFLAGS =
+-#ICFLAGS = -g
+-#ICFLAGS = -O
+-# Settings for optimized code with gcc
+-#ICFLAGS = -g -Wall
+-#ICFLAGS = -g -O3 -Wall
+-ICFLAGS = -g -O6 -Wall
+-
+-#--------------------------------#
+-# Define Machine Dependent Flags #
+-#--------------------------------#
+-
+-# When no special flags are needed
+-#XCFLAGS = -DHAVE_IEEE_754 -DBSD
+-# Linux with Gcc 2.8.1 or higher on i686.
+-#XCFLAGS = -mcpu=pentiumpro -malign-double -DHAVE_IEEE_754 -DBSD
+-# Gcc 3.3.2 or higher on i686.
+-XCFLAGS = -mcpu=pentium4 -malign-double -DHAVE_IEEE_754 -DBSD
+-# For Solaris, BSD should not be replaced by UNIX100.
+-#XCFLAGS = -DHAVE_IEEE_754 -DUNIX100 -DEPD_BIG_ENDIAN
+-# New native compiler for the Alphas; 64-bit pointers.
+-#XCFLAGS = -g3 -O4 -std -DBSD -DHAVE_IEEE_754 -ieee_with_no_inexact -tune host -DSIZEOF_VOID_P=8 -DSIZEOF_LONG=8
+-# New native compiler for the Alphas; 32-bit pointers.
+-#XCFLAGS = -g3 -O4 -std -DBSD -DHAVE_IEEE_754 -ieee_with_no_inexact -tune host -xtaso -DSIZEOF_LONG=8
+-# Windows95/98/NT/XP with Cygwin tools
+-#XCFLAGS = -mcpu=pentiumpro -malign-double -DHAVE_IEEE_754 -DHAVE_GETRLIMIT=0 -DRLIMIT_DATA_DEFAULT=67108864
+-
+-#---------------------------------------------#
+-# Define Level of Self-Checking and Verbosity #
+-#---------------------------------------------#
+-
+-# ... for the CUDD package
+-#DDDEBUG = -DDD_DEBUG -DDD_VERBOSE -DDD_STATS -DDD_CACHE_PROFILE -DDD_UNIQUE_PROFILE -DDD_COUNT
+-DDDEBUG =
+-
+-# ... for the MTR package
+-#MTRDEBUG = -DMTR_DEBUG
+-MTRDEBUG =
+-
+-# ... for the DDDMP package
+-#DDDMPDEBUG = -DDDDMP_DEBUG
+-DDDMPDEBUG =
+-
+-#-----------------------#
+-# Define Loader Options #
+-#-----------------------#
+-
+-LDFLAGS =
+-# This may produce faster code on the DECstations.
+-#LDFLAGS = -jmpopt -Olimit 1000
+-# This may be necessary under some old versions of Linux.
+-#LDFLAGS = -static
+-# This normally makes the program faster on the DEC Alphas.
+-#LDFLAGS = -non_shared -om
+-# This is for 32-bit pointers on the DEC Alphas.
+-#LDFLAGS = -non_shared -om -taso
+-#LDFLAGS = -non_shared -taso
+-
+-#-------------#
+-# Define PURE #
+-#-------------#
+-
+-PURE =
+-# ... as purify to link with purify.
+-#PURE = purify
+-# ... as quantify to link with quantify.
+-#PURE = quantify
+-
+-#------------#
+-# Define EXE #
+-#------------#
+-
+-EXE =
+-# ... as .exe for MS-DOS and derivatives.
+-#EXE = .exe
+-
+-#----------------------------------------------------------------------------#
+-# Files for the Package #
+-#----------------------------------------------------------------------------#
+-
+-P = dddmp
+-PSRC = dddmpStoreBdd.c dddmpStoreAdd.c dddmpStoreCnf.c \
+- dddmpLoad.c dddmpLoadCnf.c \
+- dddmpNodeBdd.c dddmpNodeAdd.c dddmpNodeCnf.c \
+- dddmpStoreMisc.c dddmpUtil.c dddmpBinary.c dddmpConvert.c \
+- dddmpDbg.c
+-PHDR = dddmp.h dddmpInt.h $(INCLUDE)/cudd.h $(INCLUDE)/cuddInt.h
+-POBJ = $(PSRC:.c=.o)
+-PUBJ = $(PSRC:.c=.u)
+-TARGET = test$(P)$(EXE)
+-TARGETu = test$(P)-u
+-
+-# files for the test program
+-SRC = test$(P).c
+-OBJ = $(SRC:.c=.o)
+-UBJ = $(SRC:.c=.u)
+-
+-#----------------------------------------------------------------------------#
+-# Rules to compile and build libraries and executables #
+-#----------------------------------------------------------------------------#
+-
+-#MFLAG =
+-MFLAG = -DMNEMOSYNE
+-MNEMLIB = ../mnemosyne/libmnem.a
+-
+-# This is to create the lint library
+-LINTFLAGS = -u -n
+-LINTSWITCH = -o
+-
+-LIBS = ./libdddmp.a $(WHERE)/cudd/libcudd.a $(WHERE)/mtr/libmtr.a \
+- $(WHERE)/st/libst.a $(WHERE)/util/libutil.a $(WHERE)/epd/libepd.a
+-
+-MNEMLIB =
+-
+-BLIBS = -kL. -kldddmp -kL$(WHERE)/cudd -klcudd -kL$(WHERE)/mtr -klmtr \
+- -kL$(WHERE)/st -klst -kL$(WHERE)/util -klutil
+-
+-LINTLIBS = ./llib-ldddmp.ln $(WHERE)/cudd/llib-lcudd.ln \
+- $(WHERE)/mtr/llib-lmtr.ln $(WHERE)/st/llib-lst.ln \
+- $(WHERE)/util/llib-lutil.ln
+-
+-lib$(P).a: $(POBJ)
+- ar rv $@ $?
+- $(RANLIB) $@
+-
+-.c.o: $(PHDR)
+- $(CC) -c $< -I$(INCLUDE) $(ICFLAGS) $(XCFLAGS) $(DDDEBUG) $(MTRDEBUG) $(DDDMPDEBUG) $(LDFLAGS)
+-
+-optimize_dec: lib$(P).b
+-
+-lib$(P).b: $(PUBJ)
+- ar rv $@ $?
+- $(RANLIB) $@
+-
+-.c.u: $(PHDR)
+- cc -c $< -I$(INCLUDE) $(CFLAGS)
+-
+-# if the header files change, recompile
+-$(POBJ): $(PHDR)
+-$(PUBJ): $(PHDR)
+-$(OBJ): $(PHDR)
+-$(UBJ): $(PHDR)
+-
+-$(TARGET): $(SRC) $(OBJ) $(PHDR) $(LIBS) $(MNEMLIB)
+- $(PURE) $(CC) $(ICFLAGS) $(XCFLAGS) $(DDDEBUG) $(MTRDEBUG) $(DDDMPDEBUG) $(LDFLAGS) -o $@ $(OBJ) $(LIBS) $(MNEMLIB) -lm
+-
+-# optimize (DECstations and Alphas only: uses u-code)
+-$(TARGETu): $(SRC) $(UBJ) $(PHDR) $(LIBS:.a=.b)
+- cc -O3 -Olimit 1000 $(XCFLAGS) $(LDFLAGS) -o $@ $(UBJ) $(BLIBS) -lm
+-
+-lint: llib-l$(P).ln
+-
+-llib-l$(P).ln: $(PSRC) $(PHDR)
+- lint $(LINTFLAGS) $(LINTSWITCH)$(P) -I$(INCLUDE) $(PSRC)
+-
+-lintpgm: lint
+- lint $(LINTFLAGS) -I$(INCLUDE) $(SRC) $(LINTLIBS)
+-
+-tags: $(PSRC) $(PHDR)
+- ctags $(PSRC) $(PHDR)
+-
+-all: lib$(P).a lib$(P).b llib-l$(P).ln tags
+-
+-programs: $(TARGET) $(TARGETu) lintpgm
+-
+-#----------------------------------------------------------------------------#
+-# Clean the Package #
+-#----------------------------------------------------------------------------#
+-
+-clean:
+- rm -f *.o *.u mon.out gmon.out *.pixie *.Addrs *.Counts mnem.* \
+- .pure core *.warnings
+-
+-distclean: clean
+- rm -f $(TARGET) $(TARGETu) lib*.a lib$(P).b llib-l$(P).ln \
+- *.bak *~ tags .gdb_history *.qv *.qx
+-
+-
+-
+-
+diff --git a/Cudd/dddmp/README.dddmp b/Cudd/dddmp/README.dddmp
+deleted file mode 100644
+index 704bd19..0000000
+--- a/Cudd/dddmp/README.dddmp
++++ /dev/null
+@@ -1,64 +0,0 @@
+-README file for the DDDMP-2.0 package
+-Revision: Version 2.0.2, February 01, 2004
+-
+-
+-
+-WHAT IS DDDMP
+-=============
+-
+-The DDDMP package defines formats for DD storage on file, and it contains a
+-set of functions to dump DDs and DD forests on file.
+-
+-In the version 1.0, only BDDs (ROBDDs) of the CUDD package (version 2.2.0
+-or higher) were supported.
+-The version 2.0 includes supports for ADDs and CNF formulas.
+-The version 2.0.2 is for bug fixes.
+-
+-
+-
+-MAKE DDDMP
+-==========
+-
+-Before you build the libraries and programs, you need to check the
+-Makefile in the top directory.
+-Go through the definitions contained in the configuration section, and
+-select the desired compiler and compilation flags.
+-Instructions are provided in the comments of the Makefile.
+-
+-Then run "make".
+-This should produce the dddmplib.a library.
+-
+-
+-
+-DOCUMENTATION
+-=============
+-
+-Directory dddmp/doc contains HTML documentation for the package.
+-The recommended starting point is package.html.
+-Documentation in both postscript format and plain text format is also
+-provided.
+-
+-
+-
+-FTP SITE
+-========
+-
+-The package is singularly available from the author home page:
+-http://staff.polito.it/{gianpiero.cabodi,stefano.quer}
+-
+-
+-
+-
+-FEEDBACK
+-========
+-
+-Send feedback to:
+-
+-Stefano Quer & Gianpiero Cabodi
+-Politecnico di Torino
+-Dip. Automatica e Informatica
+-C.so Duca degli Abruzzi 24
+-I-10129 Torino
+-Italy
+-E-mail: {gianpiero.cabodi,stefano.quer}@polito.it
+-WEB page: http://staff.polito.it/{gianpiero.cabodi,stefano.quer}
+diff --git a/Cudd/dddmp/README.testdddmp b/Cudd/dddmp/README.testdddmp
+deleted file mode 100644
+index e1e1acf..0000000
+--- a/Cudd/dddmp/README.testdddmp
++++ /dev/null
+@@ -1,79 +0,0 @@
+-README file for the test program of the DDDMP-2.0 package
+-Revision: Version 2.0.2, February 01, 2004
+-
+-
+-
+-WHAT IS TESTDDDMP
+-=================
+-
+-testdddmp is a test program for the dddmp package.
+-Practically, it is a naive user interface to load, store and execute
+-operations with BDDs.
+-It is included to provide a sanity check for the installation of the
+-package and an easy tool to play with BDDs and BDD on files.
+-
+-
+-
+-MAKE TESTDDDMP
+-==============
+-
+-Run "make testdddmp".
+-This should produce the testdddmp executable file.
+-
+-
+-
+-TEST DDDMP
+-==========
+-
+-Run the runAllTest.script file in the exp directory.
+-This should run all the test?.script files in the same directory.
+-Each of them is specifically written to check a particular feature of
+-the package (e.g., store and load of BDDs, store of CNF formulas and
+-retrieval, etc.).
+-Each test?.script should terminate with a comparison with a previously
+-generated set of files, then with the following set of messages:
+-
+-Files 0or1.bdd and 0or1.bdd2 are identical
+-Files 2and3.bdd and 2and3.bdd2 are identical
+-...
+-
+-If so everything is OK.
+-
+-Notice that mismatches may be caused by the presence of CR - LF characters at
+-the end of each BDD file line.
+-
+-
+-
+-WORK WITH DDDMPTEST
+-===================
+-
+-To work with dddmptest (once the executable file has been built) it is enough
+-to run it (no parameter is necessary).
+-The help command print out the main commands available.
+-For each command further inputs are eventually required on an interactive
+-basis.
+-BDDs and ADDs can be loaded from files by choosing the file name or they
+-can be directly created (randomly for example).
+-They can be maintained into the main memory trough an array of BDD pointers.
+-Operations (logical and re-ordering) can be performed on any BDD into this
+-array.
+-Eventually any of them can be stored in a file giving the file name.
+-BDDs can also be stored in a CNF format using three different possible
+-solution to store them.
+-
+-
+-
+-FEEDBACK
+-========
+-
+-Send feedback to:
+-
+-Gianpiero Cabodi and Stefano Quer
+-Politecnico di Torino
+-Dip. Automatica e Informatica
+-C.so Duca degli Abruzzi 24
+-I-10129 Torino
+-Italy
+-E-mail: {gianpiero.cabodi,stefano.quer}@polito.it
+-WEB page: http://staff.polito.it/{gianpiero.cabodi,stefano.quer}
+-
+diff --git a/Cudd/dddmp/RELEASE_NOTES b/Cudd/dddmp/RELEASE_NOTES
+deleted file mode 100644
+index c8f4b9a..0000000
+--- a/Cudd/dddmp/RELEASE_NOTES
++++ /dev/null
+@@ -1,60 +0,0 @@
+-RELEASE NOTES FOR DDDMP
+-Revision: Version 2.0.2
+-Turin, Italy, February 01, 2004
+-
+-dddmp-2.0.2 is now available at
+-WEB page: http://staff.polito.it/{gianpiero.cabodi,stefano.quer}
+-dddmp-2.0.2 has a few bug fixes with respect to dddmp-2.0
+-
+-Release 2.0.2 of DDDMP improves DDDMP-1.2 in the following areas:
+-
+- 1. Support to store and load ADD has been inserted in the dddmp tool
+-
+- 2. Support to store BDDs as CNF formulas has been inserted in the
+- dddmp tool.
+- As far as the storing process is concerned three possible formats
+- are available:
+-
+- DDDMP_CNF_MODE_NODE
+- store a BDD by introducing an auxiliary variable for each BDD node
+-
+- DDDMP_CNF_MODE_MAXTERM
+- store a BDD by following the maxterm of the represented function
+-
+- DDDMP_CNF_MODE_BEST
+- trade-of between the two previous solution, trying to optimize
+- the number of literals stored.
+-
+- As far as the loading process is concerned three possible formats
+- are available:
+-
+- DDDMP_CNF_MODE_NO_CONJ
+- Return the Clauses without Conjunction
+-
+- DDDMP_CNF_MODE_NO_QUANT
+- Return the sets of BDDs without Quantification
+-
+- DDDMP_CNF_MODE_CONJ_QUANT
+- Return the sets of BDDs AFTER Existential Quantification
+-
+- 3. Functions to load the header of a BDD/ADD/CNF file, so collecting
+- information regarding variables, variable ordering, etc.
+- This can be seen as a pre-processing step prior a possible BDD/ADD/CNF
+- load of the entire structure.
+- Moreover it can be used in a manager initialization phase.
+-
+- 4. More precise information are stored in each BDD/ADD header during
+- the storing phase.
+- In particular this information may be used to make up the exact
+- variable ordering present in the manager used during the storing
+- phase.
+- Full compatibility with previously versions of the files (from
+- dddmp-1.0 on) is guaranteed.
+-
+- 5. Miscellaneous
+- Debugging has been performed on different hardware architectures
+-
+- 6. The test program, testdddmp has been improved.
+- Now it allows to perform more operations and to better debug the
+- different options.
+-
+diff --git a/Cudd/dddmp/dddmp.h b/Cudd/dddmp/dddmp.h
+deleted file mode 100644
+index 7228fe7..0000000
+--- a/Cudd/dddmp/dddmp.h
++++ /dev/null
+@@ -1,330 +0,0 @@
+-/**CHeaderFile*****************************************************************
+-
+- FileName [dddmp.h]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Functions to read in and write out BDDs, ADDs
+- and CNF formulas from and to files.]
+-
+- Description []
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2002 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#ifndef _DDDMP
+-#define _DDDMP
+-
+-#if 0
+-#define DDDMP_DEBUG
+-#endif
+-
+-/*---------------------------------------------------------------------------*/
+-/* Nested includes */
+-/*---------------------------------------------------------------------------*/
+-
+-#include "util.h"
+-#include "cudd.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-/*---------------------------------------------------------------------------*/
+-/* Constant declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*
+- * Dddmp format version
+- */
+-
+-#define DDDMP_VERSION "DDDMP-2.0"
+-
+-/*
+- * Returned values (for theorically ALL the function of the package)
+- */
+-
+-#define DDDMP_FAILURE ((int) 0)
+-#define DDDMP_SUCCESS ((int) 1)
+-
+-/*
+- * Format modes for DD (BDD and ADD) files
+- */
+-
+-#define DDDMP_MODE_TEXT ((int)'A')
+-#define DDDMP_MODE_BINARY ((int)'B')
+-#define DDDMP_MODE_DEFAULT ((int)'D')
+-
+-/*---------------------------------------------------------------------------*/
+-/* Structure declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Enum************************************************************************
+-
+- Synopsis [Format modes for storing CNF files]
+-
+- Description [Type supported for storing BDDs into CNF
+- formulas.
+- Used internally to select the proper storing format:
+- DDDMP_CNF_MODE_NODE: create a CNF temporary variables for
+- each BDD node
+- DDDMP_CNF_MODE_MAXTERM: no temporary variables
+- DDDMP_CNF_MODE_BEST: trade-off between the two previous methods
+- ]
+-
+-******************************************************************************/
+-
+-typedef enum {
+- DDDMP_CNF_MODE_NODE,
+- DDDMP_CNF_MODE_MAXTERM,
+- DDDMP_CNF_MODE_BEST
+-} Dddmp_DecompCnfStoreType;
+-
+-/**Enum************************************************************************
+-
+- Synopsis [Format modes for loading CNF files.]
+-
+- Description [Type supported for loading CNF formulas into BDDs.
+- Used internally to select the proper returning format:
+- ]
+-
+-******************************************************************************/
+-
+-typedef enum {
+- DDDMP_CNF_MODE_NO_CONJ,
+- DDDMP_CNF_MODE_NO_QUANT,
+- DDDMP_CNF_MODE_CONJ_QUANT
+-} Dddmp_DecompCnfLoadType;
+-
+-/**Enum************************************************************************
+-
+- Synopsis [Type for supported decomposition types.]
+-
+- Description [Type for supported decomposition types.
+- Used internally to select the proper type (bdd, add, ...).
+- Given externally as information fule content.
+- ]
+-
+-******************************************************************************/
+-
+-typedef enum {
+- DDDMP_BDD,
+- DDDMP_ADD,
+- DDDMP_CNF,
+- DDDMP_NONE
+-} Dddmp_DecompType;
+-
+-
+-/**Enum************************************************************************
+-
+- Synopsis [Type for variable extra info.]
+-
+- Description [Type for variable extra info. Used to specify info stored
+- in text mode.]
+-
+-******************************************************************************/
+-
+-typedef enum {
+- DDDMP_VARIDS,
+- DDDMP_VARPERMIDS,
+- DDDMP_VARAUXIDS,
+- DDDMP_VARNAMES,
+- DDDMP_VARDEFAULT
+-} Dddmp_VarInfoType;
+-
+-/**Enum************************************************************************
+-
+- Synopsis [Type for variable matching in BDD load.]
+-
+- Description []
+-
+-******************************************************************************/
+-
+-typedef enum {
+- DDDMP_VAR_MATCHIDS,
+- DDDMP_VAR_MATCHPERMIDS,
+- DDDMP_VAR_MATCHAUXIDS,
+- DDDMP_VAR_MATCHNAMES,
+- DDDMP_VAR_COMPOSEIDS
+-} Dddmp_VarMatchType;
+-
+-/**Enum************************************************************************
+-
+- Synopsis [Type for BDD root matching in BDD load.]
+-
+- Description []
+-
+-******************************************************************************/
+-
+-typedef enum {
+- DDDMP_ROOT_MATCHNAMES,
+- DDDMP_ROOT_MATCHLIST
+-} Dddmp_RootMatchType;
+-
+-typedef struct Dddmp_Hdr_s Dddmp_Hdr_t;
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Macro***********************************************************************
+-
+- Synopsis [Checks for fatal bugs]
+-
+- Description [Conditional safety assertion. It prints out the file
+- name and line number where the fatal error occurred.
+- Messages are printed out on stderr.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-#ifdef DDDMP_DEBUG
+-# define Dddmp_Assert(expr,errMsg) \
+- { \
+- if ((expr) == 0) { \
+- fprintf (stderr, "FATAL ERROR: %s\n", errMsg); \
+- fprintf (stderr, " File %s -> Line %d\n", \
+- __FILE__, __LINE__); \
+- fflush (stderr); \
+- exit (DDDMP_FAILURE); \
+- } \
+- }
+-#else
+-# define Dddmp_Assert(expr,errMsg) \
+- {}
+-#endif
+-
+-/**Macro***********************************************************************
+-
+- Synopsis [Checks for Warnings: If expr==1 it prints out the warning
+- on stderr.]
+-
+- Description []
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-#define Dddmp_Warning(expr,errMsg) \
+- { \
+- if ((expr) == 1) { \
+- fprintf (stderr, "WARNING: %s\n", errMsg); \
+- fprintf (stderr, " File %s -> Line %d\n", \
+- __FILE__, __LINE__); \
+- fflush (stderr); \
+- } \
+- }
+-
+-/**Macro***********************************************************************
+-
+- Synopsis [Checks for fatal bugs and return the DDDMP_FAILURE flag.]
+-
+- Description []
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-#define Dddmp_CheckAndReturn(expr,errMsg) \
+- { \
+- if ((expr) == 1) { \
+- fprintf (stderr, "FATAL ERROR: %s\n", errMsg); \
+- fprintf (stderr, " File %s -> Line %d\n", \
+- __FILE__, __LINE__); \
+- fflush (stderr); \
+- return (DDDMP_FAILURE); \
+- } \
+- }
+-
+-/**Macro***********************************************************************
+-
+- Synopsis [Checks for fatal bugs and go to the label to deal with
+- the error.
+- ]
+-
+- Description []
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-#define Dddmp_CheckAndGotoLabel(expr,errMsg,label) \
+- { \
+- if ((expr) == 1) { \
+- fprintf (stderr, "FATAL ERROR: %s\n", errMsg); \
+- fprintf (stderr, " File %s -> Line %d\n", \
+- __FILE__, __LINE__); \
+- fflush (stderr); \
+- goto label; \
+- } \
+- }
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-extern int Dddmp_Text2Bin(char *filein, char *fileout);
+-extern int Dddmp_Bin2Text(char *filein, char *fileout);
+-extern int Dddmp_cuddBddDisplayBinary(char *fileIn, char *fileOut);
+-extern DdNode * Dddmp_cuddBddLoad(DdManager *ddMgr, Dddmp_VarMatchType varMatchMode, char **varmatchnames, int *varmatchauxids, int *varcomposeids, int mode, char *file, FILE *fp);
+-extern int Dddmp_cuddBddArrayLoad(DdManager *ddMgr, Dddmp_RootMatchType rootMatchMode, char **rootmatchnames, Dddmp_VarMatchType varMatchMode, char **varmatchnames, int *varmatchauxids, int *varcomposeids, int mode, char *file, FILE *fp, DdNode ***pproots);
+-extern DdNode * Dddmp_cuddAddLoad(DdManager *ddMgr, Dddmp_VarMatchType varMatchMode, char **varmatchnames, int *varmatchauxids, int *varcomposeids, int mode, char *file, FILE *fp);
+-extern int Dddmp_cuddAddArrayLoad(DdManager *ddMgr, Dddmp_RootMatchType rootMatchMode, char **rootmatchnames, Dddmp_VarMatchType varMatchMode, char **varmatchnames, int *varmatchauxids, int *varcomposeids, int mode, char *file, FILE *fp, DdNode ***pproots);
+-extern int Dddmp_cuddHeaderLoad (Dddmp_DecompType *ddType, int *nVars, int *nsuppvars, char ***suppVarNames, char ***orderedVarNames, int **varIds, int **composeIds, int **auxIds, int *nRoots, char *file, FILE *fp);
+-extern int Dddmp_cuddBddLoadCnf(DdManager *ddMgr, Dddmp_VarMatchType varmatchmode, char **varmatchnames, int *varmatchauxids, int *varcomposeids, int mode, char *file, FILE *fp, DdNode ***rootsPtrPtr, int *nRoots);
+-extern int Dddmp_cuddBddArrayLoadCnf(DdManager *ddMgr, Dddmp_RootMatchType rootmatchmode, char **rootmatchnames, Dddmp_VarMatchType varmatchmode, char **varmatchnames, int *varmatchauxids, int *varcomposeids, int mode, char *file, FILE *fp, DdNode ***rootsPtrPtr, int *nRoots);
+-extern int Dddmp_cuddHeaderLoadCnf (int *nVars, int *nsuppvars, char ***suppVarNames, char ***orderedVarNames, int **varIds, int **composeIds, int **auxIds, int *nRoots, char *file, FILE *fp);
+-extern int Dddmp_cuddAddStore(DdManager *ddMgr, char *ddname, DdNode *f, char **varnames, int *auxids, int mode, Dddmp_VarInfoType varinfo, char *fname, FILE *fp);
+-extern int Dddmp_cuddAddArrayStore(DdManager *ddMgr, char *ddname, int nRoots, DdNode **f, char **rootnames, char **varnames, int *auxids, int mode, Dddmp_VarInfoType varinfo, char *fname, FILE *fp);
+-extern int Dddmp_cuddBddStore(DdManager *ddMgr, char *ddname, DdNode *f, char **varnames, int *auxids, int mode, Dddmp_VarInfoType varinfo, char *fname, FILE *fp);
+-extern int Dddmp_cuddBddArrayStore(DdManager *ddMgr, char *ddname, int nRoots, DdNode **f, char **rootnames, char **varnames, int *auxids, int mode, Dddmp_VarInfoType varinfo, char *fname, FILE *fp);
+-extern int Dddmp_cuddBddStoreCnf(DdManager *ddMgr, DdNode *f, Dddmp_DecompCnfStoreType mode, int noHeader, char **varNames, int *bddIds, int *bddAuxIds, int *cnfIds, int idInitial, int edgeInTh, int pathLengthTh, char *fname, FILE *fp, int *clauseNPtr, int *varNewNPtr);
+-extern int Dddmp_cuddBddArrayStoreCnf(DdManager *ddMgr, DdNode **f, int rootN, Dddmp_DecompCnfStoreType mode, int noHeader, char **varNames, int *bddIds, int *bddAuxIds, int *cnfIds, int idInitial, int edgeInTh, int pathLengthTh, char *fname, FILE *fp, int *clauseNPtr, int *varNewNPtr);
+-extern int Dddmp_cuddBddStorePrefix(DdManager *ddMgr, int nRoots, DdNode *f, char **inputNames, char **outputNames, char *modelName, char *fileName, FILE *fp);
+-extern int Dddmp_cuddBddArrayStorePrefix(DdManager *ddMgr, int nroots, DdNode **f, char **inputNames, char **outputNames, char *modelName, char *fname, FILE *fp);
+-extern int Dddmp_cuddBddStoreBlif(DdManager *ddMgr, int nRoots, DdNode *f, char **inputNames, char **outputNames, char *modelName, char *fileName, FILE *fp);
+-extern int Dddmp_cuddBddArrayStoreBlif(DdManager *ddMgr, int nroots, DdNode **f, char **inputNames, char **outputNames, char *modelName, char *fname, FILE *fp);
+-extern int Dddmp_cuddBddStoreSmv(DdManager *ddMgr, int nRoots, DdNode *f, char **inputNames, char **outputNames, char *modelName, char *fileName, FILE *fp);
+-extern int Dddmp_cuddBddArrayStoreSmv(DdManager *ddMgr, int nroots, DdNode **f, char **inputNames, char **outputNames, char *modelName, char *fname, FILE *fp);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-
+-#endif
+diff --git a/Cudd/dddmp/dddmpBinary.c b/Cudd/dddmp/dddmpBinary.c
+deleted file mode 100644
+index a7cd674..0000000
+--- a/Cudd/dddmp/dddmpBinary.c
++++ /dev/null
+@@ -1,343 +0,0 @@
+-/**CFile**********************************************************************
+-
+- FileName [dddmpBinary.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Input and output BDD codes and integers from/to file]
+-
+- Description [Input and output BDD codes and integers from/to file
+- in binary mode.
+- DD node codes are written as one byte.
+- Integers of any length are written as sequences of "linked" bytes.
+- For each byte 7 bits are used for data and one (MSBit) as link with
+- a further byte (MSB = 1 means one more byte).
+- Low level read/write of bytes filter <CR>, <LF> and <ctrl-Z>
+- with escape sequences.
+- ]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include "dddmpInt.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-static int WriteByteBinary(FILE *fp, unsigned char c);
+-static int ReadByteBinary(FILE *fp, unsigned char *cp);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes 1 byte node code]
+-
+- Description [outputs a 1 byte node code using the following format:
+- <pre>
+- Unused : 1 bit;
+- V : 2 bits; (variable code)
+- T : 2 bits; (Then code)
+- Ecompl : 1 bit; (Else complemented)
+- E : 2 bits; (Else code)
+- </pre>
+- Ecompl is set with complemented edges.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpReadCode()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpWriteCode (
+- FILE *fp /* IN: file where to write the code */,
+- struct binary_dd_code code /* IN: the code to be written */
+- )
+-{
+- unsigned char c;
+- int retValue;
+-
+- c = (code.Unused<<7)|(code.V<<5)|(code.T<<3)|
+- (code.Ecompl<<2)|(code.E);
+-
+- retValue = WriteByteBinary (fp, c);
+-
+- return (retValue);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads a 1 byte node code]
+-
+- Description [Reads a 1 byte node code. See DddmpWriteCode()
+- for code description.]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpWriteCode()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpReadCode (
+- FILE *fp /* IN: file where to read the code */,
+- struct binary_dd_code *pcode /* OUT: the read code */
+- )
+-{
+- unsigned char c;
+-
+- if (ReadByteBinary (fp, &c) == EOF) {
+- return (0);
+- }
+-
+- pcode->Unused = c>>7;
+- pcode->V = (c>>5) & 3;
+- pcode->T = (c>>3) & 3;
+- pcode->Ecompl = (c>>2) & 1;
+- pcode->E = c & 3;
+-
+- return (1);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a "packed integer"]
+-
+- Description [Writes an integer as a sequence of bytes (MSByte first).
+- For each byte 7 bits are used for data and one (LSBit) as link
+- with a further byte (LSB = 1 means one more byte).
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpReadInt()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpWriteInt (
+- FILE *fp /* IN: file where to write the integer */,
+- int id /* IN: integer to be written */
+- )
+-{
+- char cvet[4];
+- int i;
+-
+- for (i=0; i<4; i++) {
+- cvet[i] = (char)((id & 0x0000007f) << 1);
+- id >>= 7;
+- }
+-
+- for (i=3; (i>0) && (cvet[i] == 0); i--);
+-
+- for (; i>0; i--) {
+- cvet[i] |= (char)1;
+- if (WriteByteBinary (fp, cvet[i]) == EOF)
+- return (0);
+- }
+-
+- if (WriteByteBinary (fp, cvet[0]) == EOF) {
+- return (0);
+- }
+-
+- return (1);
+-}
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads a "packed integer"]
+-
+- Description [Reads an integer coded on a sequence of bytes. See
+- DddmpWriteInt() for format.]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpWriteInt()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpReadInt (
+- FILE *fp /* IN: file where to read the integer */,
+- int *pid /* OUT: the read integer */
+- )
+-{
+- unsigned char c;
+- int i;
+- unsigned int id;
+-
+- id = 0;
+- for (i=0; i<4; i++) {
+- if (ReadByteBinary (fp, &c) == EOF)
+- return (0);
+- id = (id<<7) | (c>>1);
+- if ((c & 1) == 0)
+- break;
+- }
+-
+- /* Check for correct format: last char should
+- be found before i = 4 */
+- assert(i<4);
+-
+- *pid = id;
+-
+- return (i+1);
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a byte to file filtering <CR>, <LF> and <ctrl-Z>]
+-
+- Description [outputs a byte to file fp. Uses 0x00 as escape character
+- to filter <CR>, <LF> and <ctrl-Z>.
+- This is done for compatibility between unix and dos/windows systems.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [ReadByteBinary()]
+-
+-******************************************************************************/
+-
+-static int
+-WriteByteBinary (
+- FILE *fp /* IN: file where to write the byte */,
+- unsigned char c /* IN: the byte to be written */
+- )
+-{
+- unsigned char BinaryEscape;
+-
+- switch (c) {
+-
+- case 0x00: /* Escape */
+- BinaryEscape = 0x00;
+- if (fwrite (&BinaryEscape, sizeof(char), 1, fp) != sizeof(char))
+- return (0);
+- c = 0x00;
+- break;
+- case 0x0a: /* <LF> */
+- BinaryEscape = 0x00;
+- if (fwrite (&BinaryEscape, sizeof(char), 1, fp) != sizeof(char))
+- return (0);
+- c = 0x01;
+- break;
+- case 0x0d: /* <CR> */
+- BinaryEscape = 0x00;
+- if (fwrite (&BinaryEscape, sizeof(char), 1, fp) != sizeof(char))
+- return (0);
+- c = 0x02;
+- break;
+- case 0x1a: /* <ctrl-Z> */
+- BinaryEscape = 0x00;
+- if (fwrite (&BinaryEscape, sizeof(char), 1, fp) != sizeof(char))
+- return (0);
+- c = 0x03;
+- break;
+- }
+- if (fwrite (&c, sizeof(char), 1, fp) != sizeof(char))
+- return (0);
+-
+- return (1);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads a byte from file with escaped <CR>, <LF> and <ctrl-Z>]
+-
+- Description [inputs a byte to file fp. 0x00 has been used as escape character
+- to filter <CR>, <LF> and <ctrl-Z>. This is done for
+- compatibility between unix and dos/windows systems.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [WriteByteBinary()]
+-
+-******************************************************************************/
+-
+-static int
+-ReadByteBinary (
+- FILE *fp /* IN: file where to read the byte */,
+- unsigned char *cp /* OUT: the read byte */
+- )
+-{
+-
+- if (fread (cp, sizeof(char), 1, fp) != sizeof(char)) {
+- return (0);
+- }
+-
+- if (*cp == 0x00) { /* Escape */
+- if (fread (cp, sizeof(char), 1, fp) != sizeof(char)) {
+- return (0);
+- }
+-
+- switch (*cp) {
+-
+- case 0x00: /* Escape */
+- break;
+- case 0x01: /* <LF> */
+- *cp = 0x0a;
+- break;
+- case 0x02: /* <CR> */
+- *cp = 0x0d;
+- break;
+- case 0x03: /* <ctrl-Z> */
+- *cp = 0x1a;
+- break;
+- }
+- }
+-
+- return (1);
+-}
+-
+-
+diff --git a/Cudd/dddmp/dddmpConvert.c b/Cudd/dddmp/dddmpConvert.c
+deleted file mode 100644
+index c24292e..0000000
+--- a/Cudd/dddmp/dddmpConvert.c
++++ /dev/null
+@@ -1,180 +0,0 @@
+-/**CFile**********************************************************************
+-
+- FileName [dddmpConvert.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Conversion between ASCII and binary formats]
+-
+- Description [Conversion between ASCII and binary formats is presently
+- supported by loading a BDD in the source format and storing it
+- in the target one. We plan to introduce ad hoc procedures
+- avoiding explicit BDD node generation.
+- ]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include "dddmpInt.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/**AutomaticEnd***************************************************************/
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Converts from ASCII to binary format]
+-
+- Description [Converts from ASCII to binary format. A BDD array is loaded and
+- and stored to the target file.]
+-
+- SideEffects [None]
+-
+- SeeAlso [Dddmp_Bin2Text()]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_Text2Bin (
+- char *filein /* IN: name of ASCII file */,
+- char *fileout /* IN: name of binary file */
+- )
+-{
+- DdManager *ddMgr; /* pointer to DD manager */
+- DdNode **roots; /* array of BDD roots to be loaded */
+- int nRoots; /* number of BDD roots */
+- int retValue;
+-
+- ddMgr = Cudd_Init(0,0,CUDD_UNIQUE_SLOTS,CUDD_CACHE_SLOTS,0);
+- if (ddMgr == NULL) {
+- return (0);
+- }
+-
+- nRoots = Dddmp_cuddBddArrayLoad(ddMgr,DDDMP_ROOT_MATCHLIST,NULL,
+- DDDMP_VAR_MATCHIDS,NULL,NULL,NULL,
+- DDDMP_MODE_TEXT,filein,NULL,&roots);
+-
+- Dddmp_CheckAndGotoLabel (nRoots<=0,
+- "Negative Number of Roots.", failure);
+-
+- retValue = Dddmp_cuddBddArrayStore (ddMgr,NULL,nRoots,roots,NULL,
+- NULL,NULL,DDDMP_MODE_BINARY,DDDMP_VARIDS,fileout,NULL);
+-
+- Dddmp_CheckAndGotoLabel (retValue<=0,
+- "Error code returned.", failure);
+-
+- Cudd_Quit(ddMgr);
+- return (1);
+-
+- failure:
+- printf("error converting BDD format\n");
+- Cudd_Quit(ddMgr);
+- return (0);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Converts from binary to ASCII format]
+-
+- Description [Converts from binary to ASCII format. A BDD array is loaded and
+- and stored to the target file.]
+-
+- SideEffects [None]
+-
+- SeeAlso [Dddmp_Text2Bin()]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_Bin2Text (
+- char *filein /* IN: name of binary file */,
+- char *fileout /* IN: name of ASCII file */
+- )
+-{
+- DdManager *ddMgr; /* pointer to DD manager */
+- DdNode **roots; /* array of BDD roots to be loaded */
+- int nRoots; /* number of BDD roots */
+- int retValue;
+-
+- ddMgr = Cudd_Init(0,0,CUDD_UNIQUE_SLOTS,CUDD_CACHE_SLOTS,0);
+- if (ddMgr == NULL) {
+- return (0);
+- }
+-
+- nRoots = Dddmp_cuddBddArrayLoad(ddMgr,DDDMP_ROOT_MATCHLIST,NULL,
+- DDDMP_VAR_MATCHIDS,NULL,NULL,NULL,
+- DDDMP_MODE_BINARY,filein,NULL,&roots);
+-
+- Dddmp_CheckAndGotoLabel (nRoots<=0,
+- "Negative Number of Roots.", failure);
+-
+- retValue = Dddmp_cuddBddArrayStore (ddMgr,NULL,nRoots,roots,NULL,
+- NULL,NULL,DDDMP_MODE_TEXT,DDDMP_VARIDS,fileout,NULL);
+-
+- Dddmp_CheckAndGotoLabel (retValue<=0,
+- "Error code returned.", failure);
+-
+- Cudd_Quit(ddMgr);
+- return (1);
+-
+- failure:
+- printf("error converting BDD format\n");
+- Cudd_Quit(ddMgr);
+- return (0);
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-
+diff --git a/Cudd/dddmp/dddmpDbg.c b/Cudd/dddmp/dddmpDbg.c
+deleted file mode 100644
+index 88304f5..0000000
+--- a/Cudd/dddmp/dddmpDbg.c
++++ /dev/null
+@@ -1,166 +0,0 @@
+-/**CFile**********************************************************************
+-
+- FileName [dddmpDbg.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Functions to display BDD files]
+-
+- Description [Functions to display BDD files in binary format
+- ]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include "dddmpInt.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/**AutomaticEnd***************************************************************/
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Display a binary dump file in a text file]
+-
+- Description [Display a binary dump file in a text file]
+-
+- SideEffects [None]
+-
+- SeeAlso [Dddmp_cuddBddStore , Dddmp_cuddBddLoad ]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddBddDisplayBinary(
+- char *fileIn /* IN: name of binary file */,
+- char *fileOut /* IN: name of text file */
+- )
+-{
+- FILE *fp, *fpo;
+- int id, size;
+- struct binary_dd_code code;
+- char buf[1000];
+- int nnodes, i;
+-
+- fp = fopen (fileIn, "rb");
+- if (fp == 0) {
+- return (0);
+- }
+-
+- fpo = fopen (fileOut, "w");
+- if (fpo == 0) {
+- return (0);
+- }
+-
+- while (fgets(buf, 999,fp)!=NULL) {
+- fprintf (fpo, "%s", buf);
+- if (strncmp(buf, ".nnodes", 7) == 0) {
+- sscanf (buf, "%*s %d", &nnodes);
+- }
+- if (strncmp(buf, ".rootids", 8) == 0) {
+- break;
+- }
+- }
+-
+- for (i=1; i<=nnodes; i++) {
+- if (feof(fp)) {
+- return (0);
+- }
+- if (DddmpReadCode(fp,&code) == 0) {
+- return (0);
+- }
+- fprintf (fpo, "c : v %d | T %d | E %d\n",
+- (int)code.V, (int)code.T,
+- (code.Ecompl ? -(int)(code.E) : (int)(code.E)));
+- if (code.V == DDDMP_TERMINAL) {
+- continue;
+- }
+- if (code.V <= DDDMP_RELATIVE_ID) {
+- size = DddmpReadInt(fp,&id);
+- if (size == 0) {
+- return (0);
+- }
+- fprintf(fpo, "v(%d): %d\n", size, id);
+- }
+- if (code.T <= DDDMP_RELATIVE_ID) {
+- size = DddmpReadInt(fp,&id);
+- if (size == 0) {
+- return (0);
+- }
+- fprintf(fpo, "T(%d): %d\n", size, id);
+- }
+- if (code.E <= DDDMP_RELATIVE_ID) {
+- size = DddmpReadInt(fp,&id);
+- if (size == 0) {
+- return (0);
+- }
+- fprintf(fpo, "E(%d): %d\n", size, id);
+- }
+-
+- }
+-
+- fgets(buf, 999,fp);
+- if (strncmp(buf, ".end", 4) != 0) {
+- return (0);
+- }
+-
+- fprintf(fpo, ".end");
+-
+- fclose(fp);
+- fclose(fpo);
+-
+- return (1);
+-}
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-
+diff --git a/Cudd/dddmp/dddmpDdNodeBdd.c b/Cudd/dddmp/dddmpDdNodeBdd.c
+deleted file mode 100644
+index 443ef5d..0000000
+--- a/Cudd/dddmp/dddmpDdNodeBdd.c
++++ /dev/null
+@@ -1,455 +0,0 @@
+-/**CFile**********************************************************************
+-
+- FileName [dddmpDdNodeBdd.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Functions to handle BDD node infos and numbering]
+-
+- Description [Functions to handle BDD node infos and numbering.
+- ]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include "dddmpInt.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-static int NumberNodeRecur(DdNode *f, int id);
+-static void RemoveFromUniqueRecur(DdManager *ddMgr, DdNode *f);
+-static void RestoreInUniqueRecur(DdManager *ddMgr, DdNode *f);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Removes nodes from unique table and number them]
+-
+- Description [Node numbering is required to convert pointers to integers.
+- Since nodes are removed from unique table, no new nodes should
+- be generated before re-inserting nodes in the unique table
+- (DddmpUnnumberDdNodes()).
+- ]
+-
+- SideEffects [Nodes are temporarily removed from unique table]
+-
+- SeeAlso [RemoveFromUniqueRecur(), NumberNodeRecur(),
+- DddmpUnnumberDdNodes()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpNumberDdNodes (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: array of BDDs */,
+- int n /* IN: number of BDD roots in the array of BDDs */
+- )
+-{
+- int id=0, i;
+-
+- for (i=0; i<n; i++) {
+- RemoveFromUniqueRecur (ddMgr, f[i]);
+- }
+-
+- for (i=0; i<n; i++) {
+- id = NumberNodeRecur (f[i], id);
+- }
+-
+- return (id);
+-}
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Restores nodes in unique table, loosing numbering]
+-
+- Description [Node indexes are no more needed. Nodes are re-linked in the
+- unique table.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpNumberDdNode()]
+-
+-******************************************************************************/
+-
+-void
+-DddmpUnnumberDdNodes(
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: array of BDDs */,
+- int n /* IN: number of BDD roots in the array of BDDs */
+- )
+-{
+- int i;
+-
+- for (i=0; i<n; i++) {
+- RestoreInUniqueRecur (ddMgr, f[i]);
+- }
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Write index to node]
+-
+- Description [The index of the node is written in the "next" field of
+- a DdNode struct. LSB is not used (set to 0). It is used as
+- "visited" flag in DD traversals.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpReadNodeIndex(), DddmpSetVisited (), DddmpVisited ()]
+-
+-******************************************************************************/
+-
+-void
+-DddmpWriteNodeIndex (
+- DdNode *f /* IN: BDD node */,
+- int id /* IN: index to be written */
+- )
+-{
+-#if 0
+- if (1 || !Cudd_IsConstant (f)) {
+-#else
+- if (!Cudd_IsConstant (f)) {
+-#endif
+- f->next = (struct DdNode *)((ptruint)((id)<<1));
+- }
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads the index of a node]
+-
+- Description [Reads the index of a node. LSB is skipped (used as visited
+- flag).
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpWriteNodeIndex(), DddmpSetVisited (), DddmpVisited ()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpReadNodeIndex (
+- DdNode *f /* IN: BDD node */
+- )
+-{
+-
+-#if 0
+- if (1 || !Cudd_IsConstant (f)) {
+-#else
+- if (!Cudd_IsConstant (f)) {
+-#endif
+- return ((int)(((ptruint)(f->next))>>1));
+- } else {
+- return (1);
+- }
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns true if node is visited]
+-
+- Description [Returns true if node is visited]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpSetVisited (), DddmpClearVisited ()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpVisited (
+- DdNode *f /* IN: BDD node to be tested */
+- )
+-{
+- f = Cudd_Regular(f);
+- return ((int)((ptruint)(f->next)) & (01));
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Marks a node as visited]
+-
+- Description [Marks a node as visited]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpVisited (), DddmpClearVisited ()]
+-
+-******************************************************************************/
+-
+-void
+-DddmpSetVisited (
+- DdNode *f /* IN: BDD node to be marked (as visited) */
+- )
+-{
+- f = Cudd_Regular(f);
+-
+- f->next = (DdNode *)(ptruint)((int)((ptruint)(f->next))|01);
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Marks a node as not visited]
+-
+- Description [Marks a node as not visited]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpVisited (), DddmpSetVisited ()]
+-
+-******************************************************************************/
+-
+-void
+-DddmpClearVisited (
+- DdNode *f /* IN: BDD node to be marked (as not visited) */
+- )
+-{
+- f = Cudd_Regular (f);
+-
+- f->next = (DdNode *)(ptruint)((int)((ptruint)(f->next)) & (~01));
+-
+- return;
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Number nodes recursively in post-order]
+-
+- Description [Number nodes recursively in post-order.
+- The "visited" flag is used with inverse polarity, because all nodes
+- were set "visited" when removing them from unique.
+- ]
+-
+- SideEffects ["visited" flags are reset.]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-NumberNodeRecur(
+- DdNode *f /* IN: root of the BDD to be numbered */,
+- int id /* IN/OUT: index to be assigned to the node */
+- )
+-{
+- f = Cudd_Regular(f);
+-
+- if (!DddmpVisited (f)) {
+- return (id);
+- }
+-
+- if (!cuddIsConstant (f)) {
+- id = NumberNodeRecur (cuddT (f), id);
+- id = NumberNodeRecur (cuddE (f), id);
+- }
+-
+- DddmpWriteNodeIndex (f, ++id);
+- DddmpClearVisited (f);
+-
+- return (id);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Removes a node from unique table]
+-
+- Description [Removes a node from the unique table by locating the proper
+- subtable and unlinking the node from it. It recurs on the
+- children of the node.
+- ]
+-
+- SideEffects [Nodes are left with the "visited" flag true.]
+-
+- SeeAlso [RestoreInUniqueRecur()]
+-
+-******************************************************************************/
+-
+-static void
+-RemoveFromUniqueRecur (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: root of the BDD to be extracted */
+- )
+-{
+- DdNode *node, *last, *next;
+- DdNode *sentinel = &(ddMgr->sentinel);
+- DdNodePtr *nodelist;
+- DdSubtable *subtable;
+- int pos, level;
+-
+- f = Cudd_Regular (f);
+-
+- if (DddmpVisited (f)) {
+- return;
+- }
+-
+- if (!cuddIsConstant (f)) {
+-
+- RemoveFromUniqueRecur (ddMgr, cuddT (f));
+- RemoveFromUniqueRecur (ddMgr, cuddE (f));
+-
+- level = ddMgr->perm[f->index];
+- subtable = &(ddMgr->subtables[level]);
+-
+- nodelist = subtable->nodelist;
+-
+- pos = ddHash (cuddT (f), cuddE (f), subtable->shift);
+- node = nodelist[pos];
+- last = NULL;
+- while (node != sentinel) {
+- next = node->next;
+- if (node == f) {
+- if (last != NULL)
+- last->next = next;
+- else
+- nodelist[pos] = next;
+- break;
+- } else {
+- last = node;
+- node = next;
+- }
+- }
+-
+- f->next = NULL;
+-
+- }
+-
+- DddmpSetVisited (f);
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Restores a node in unique table]
+-
+- Description [Restores a node in unique table (recursively)]
+-
+- SideEffects [Nodes are not restored in the same order as before removal]
+-
+- SeeAlso [RemoveFromUnique()]
+-
+-******************************************************************************/
+-
+-static void
+-RestoreInUniqueRecur (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: root of the BDD to be restored */
+- )
+-{
+- DdNodePtr *nodelist;
+- DdNode *T, *E, *looking;
+- DdNodePtr *previousP;
+- DdSubtable *subtable;
+- int pos, level;
+-#ifdef DDDMP_DEBUG
+- DdNode *node;
+- DdNode *sentinel = &(ddMgr->sentinel);
+-#endif
+-
+- f = Cudd_Regular(f);
+-
+- if (!Cudd_IsComplement (f->next)) {
+- return;
+- }
+-
+- if (cuddIsConstant (f)) {
+- DddmpClearVisited (f);
+- /*f->next = NULL;*/
+- return;
+- }
+-
+- RestoreInUniqueRecur (ddMgr, cuddT (f));
+- RestoreInUniqueRecur (ddMgr, cuddE (f));
+-
+- level = ddMgr->perm[f->index];
+- subtable = &(ddMgr->subtables[level]);
+-
+- nodelist = subtable->nodelist;
+-
+- pos = ddHash (cuddT (f), cuddE (f), subtable->shift);
+-
+-#ifdef DDDMP_DEBUG
+- /* verify uniqueness to avoid duplicate nodes in unique table */
+- for (node=nodelist[pos]; node != sentinel; node=node->next)
+- assert(node!=f);
+-#endif
+-
+- T = cuddT (f);
+- E = cuddE (f);
+- previousP = &(nodelist[pos]);
+- looking = *previousP;
+-
+- while (T < cuddT (looking)) {
+- previousP = &(looking->next);
+- looking = *previousP;
+- }
+-
+- while (T == cuddT (looking) && E < cuddE (looking)) {
+- previousP = &(looking->next);
+- looking = *previousP;
+- }
+-
+- f->next = *previousP;
+- *previousP = f;
+-
+- return;
+-}
+-
+-
+diff --git a/Cudd/dddmp/dddmpDdNodeCnf.c b/Cudd/dddmp/dddmpDdNodeCnf.c
+deleted file mode 100644
+index 421d920..0000000
+--- a/Cudd/dddmp/dddmpDdNodeCnf.c
++++ /dev/null
+@@ -1,944 +0,0 @@
+-/**CFile**********************************************************************
+-
+- FileName [dddmpDdNodeCnf.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Functions to handle BDD node infos and numbering
+- while storing a CNF formula from a BDD or an array of BDDs]
+-
+- Description [Functions to handle BDD node infos and numbering
+- while storing a CNF formula from a BDD or an array of BDDs.
+- ]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include "dddmpInt.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-#define DDDMP_DEBUG_CNF 0
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-static int DddmpWriteNodeIndexCnf(DdNode *f, int *cnfIds, int id);
+-static int DddmpReadNodeIndexCnf(DdNode *f);
+-static int DddmpClearVisitedCnfRecur(DdNode *f);
+-static int DddmpVisitedCnf(DdNode *f);
+-static void DddmpSetVisitedCnf(DdNode *f);
+-static void DddmpClearVisitedCnf(DdNode *f);
+-static int NumberNodeRecurCnf(DdNode *f, int *cnfIds, int id);
+-static void DddmpDdNodesCheckIncomingAndScanPath(DdNode *f, int pathLengthCurrent, int edgeInTh, int pathLengthTh);
+-static int DddmpDdNodesNumberEdgesRecur(DdNode *f, int *cnfIds, int id);
+-static int DddmpDdNodesResetCountRecur(DdNode *f);
+-static int DddmpDdNodesCountEdgesRecur(DdNode *f);
+-static void RemoveFromUniqueRecurCnf(DdManager *ddMgr, DdNode *f);
+-static void RestoreInUniqueRecurCnf(DdManager *ddMgr, DdNode *f);
+-static int DddmpPrintBddAndNextRecur(DdManager *ddMgr, DdNode *f);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Removes nodes from unique table and numbers them]
+-
+- Description [Node numbering is required to convert pointers to integers.
+- Since nodes are removed from unique table, no new nodes should
+- be generated before re-inserting nodes in the unique table
+- (DddmpUnnumberDdNodesCnf()).
+- ]
+-
+- SideEffects [Nodes are temporarily removed from unique table]
+-
+- SeeAlso [RemoveFromUniqueRecurCnf(), NumberNodeRecurCnf(),
+- DddmpUnnumberDdNodesCnf()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpNumberDdNodesCnf (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: array of BDDs */,
+- int rootN /* IN: number of BDD roots in the array of BDDs */,
+- int *cnfIds /* OUT: CNF identifiers for variables */,
+- int id /* OUT: number of Temporary Variables Introduced */
+- )
+-{
+- int i;
+-
+- for (i=0; i<rootN; i++) {
+- RemoveFromUniqueRecurCnf (ddMgr, f[i]);
+- }
+-
+- for (i=0; i<rootN; i++) {
+- id = NumberNodeRecurCnf (f[i], cnfIds, id);
+- }
+-
+- return (id);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Removes nodes from unique table and numbers each node according
+- to the number of its incoming BDD edges.
+- ]
+-
+- Description [Removes nodes from unique table and numbers each node according
+- to the number of its incoming BDD edges.
+- ]
+-
+- SideEffects [Nodes are temporarily removed from unique table]
+-
+- SeeAlso [RemoveFromUniqueRecurCnf()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpDdNodesCountEdgesAndNumber (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: Array of BDDs */,
+- int rootN /* IN: Number of BDD roots in the array of BDDs */,
+- int edgeInTh /* IN: Max # In-Edges, after a Insert Cut Point */,
+- int pathLengthTh /* IN: Max Path Length (after, Insert a Cut Point) */,
+- int *cnfIds /* OUT: CNF identifiers for variables */,
+- int id /* OUT: Number of Temporary Variables Introduced */
+- )
+-{
+- int retValue, i;
+-
+- /*-------------------------- Remove From Unique ---------------------------*/
+-
+- for (i=0; i<rootN; i++) {
+- RemoveFromUniqueRecurCnf (ddMgr, f[i]);
+- }
+-
+- /*-------------------- Reset Counter and Reset Visited --------------------*/
+-
+- for (i=0; i<rootN; i++) {
+- retValue = DddmpDdNodesResetCountRecur (f[i]);
+- }
+-
+- /* Here we must have:
+- * cnfIndex = 0
+- * visitedFlag = 0
+- * FOR ALL nodes
+- */
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (stdout, "###---> BDDs After Count Reset:\n");
+- DddmpPrintBddAndNext (ddMgr, f, rootN);
+-#endif
+-
+- /*----------------------- Count Incoming Edges ----------------------------*/
+-
+- for (i=0; i<rootN; i++) {
+- retValue = DddmpDdNodesCountEdgesRecur (f[i]);
+- }
+-
+- /* Here we must have:
+- * cnfIndex = incoming edge count
+- * visitedFlag = 0 (AGAIN ... remains untouched)
+- * FOR ALL nodes
+- */
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (stdout, "###---> BDDs After Count Recur:\n");
+- DddmpPrintBddAndNext (ddMgr, f, rootN);
+-#endif
+-
+- /*------------------------- Count Path Length ----------------------------*/
+-
+- for (i=0; i<rootN; i++) {
+- DddmpDdNodesCheckIncomingAndScanPath (f[i], 0, edgeInTh,
+- pathLengthTh);
+- }
+-
+- /* Here we must have:
+- * cnfIndex = 1 if we want to insert there a cut point
+- * 0 if we do NOT want to insert there a cut point
+- * visitedFlag = 1
+- * FOR ALL nodes
+- */
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (stdout, "###---> BDDs After Check Incoming And Scan Path:\n");
+- DddmpPrintBddAndNext (ddMgr, f, rootN);
+-#endif
+-
+- /*-------------------- Number Nodes and Set Visited -----------------------*/
+-
+- for (i=0; i<rootN; i++) {
+- id = DddmpDdNodesNumberEdgesRecur (f[i], cnfIds, id);
+- }
+-
+- /* Here we must have:
+- * cnfIndex = CNF auxiliary variable enumeration
+- * visitedFlag = 0
+- * FOR ALL nodes
+- */
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (stdout, "###---> BDDs After Count Edges Recur:\n");
+- DddmpPrintBddAndNext (ddMgr, f, rootN);
+-#endif
+-
+- /*---------------------------- Clear Visited ------------------------------*/
+-
+-#if DDDMP_DEBUG_CNF
+- for (i=0; i<rootN; i++) {
+- retValue = DddmpClearVisitedCnfRecur (f[i]);
+- }
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (stdout, "###---> BDDs After All Numbering Process:\n");
+- DddmpPrintBddAndNext (ddMgr, f, rootN);
+-#endif
+-#endif
+-
+- return (id);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Restores nodes in unique table, loosing numbering]
+-
+- Description [Node indexes are no more needed. Nodes are re-linked in the
+- unique table.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpNumberDdNode()]
+-
+-******************************************************************************/
+-
+-void
+-DddmpUnnumberDdNodesCnf(
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: array of BDDs */,
+- int rootN /* IN: number of BDD roots in the array of BDDs */
+- )
+-{
+- int i;
+-
+- for (i=0; i<rootN; i++) {
+- RestoreInUniqueRecurCnf (ddMgr, f[i]);
+- }
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Prints debug information]
+-
+- Description [Prints debug information for an array of BDDs on the screen]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-int
+-DddmpPrintBddAndNext (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: Array of BDDs to be displayed */,
+- int rootN /* IN: Number of BDD roots in the array of BDDs */
+- )
+-{
+- int i;
+-
+- for (i=0; i<rootN; i++) {
+- fprintf (stdout, "---> Bdd %d:\n", i);
+- fflush (stdout);
+- DddmpPrintBddAndNextRecur (ddMgr, f[i]);
+- }
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Write index to node]
+-
+- Description [The index of the node is written in the "next" field of
+- a DdNode struct. LSB is not used (set to 0). It is used as
+- "visited" flag in DD traversals.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpReadNodeIndexCnf(), DddmpSetVisitedCnf (),
+- DddmpVisitedCnf ()
+- ]
+-
+-******************************************************************************/
+-
+-int
+-DddmpWriteNodeIndexCnfBis (
+- DdNode *f /* IN: BDD node */,
+- int id /* IN: index to be written */
+- )
+-{
+- if (!Cudd_IsConstant (f)) {
+- f->next = (struct DdNode *)((ptruint)((id)<<1));
+- }
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Write index to node]
+-
+- Description [The index of the node is written in the "next" field of
+- a DdNode struct. LSB is not used (set to 0). It is used as
+- "visited" flag in DD traversals. The index corresponds to
+- the BDD node variable if both the node's children are a
+- constant node, otherwise a new CNF variable is used.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpReadNodeIndexCnf(), DddmpSetVisitedCnf (),
+- DddmpVisitedCnf ()]
+-
+-*****************************************************************************/
+-
+-static int
+-DddmpWriteNodeIndexCnf (
+- DdNode *f /* IN: BDD node */,
+- int *cnfIds /* IN: possible source for the index to be written */,
+- int id /* IN: possible source for the index to be written */
+- )
+-{
+- if (!Cudd_IsConstant (f)) {
+- if (Cudd_IsConstant (cuddT (f)) && Cudd_IsConstant (cuddE (f))) {
+- /* If Variable SET ID as Variable ID */
+- f->next = (struct DdNode *)((ptruint)((cnfIds[f->index])<<1));
+- } else {
+- f->next = (struct DdNode *)((ptruint)((id)<<1));
+- id++;
+- }
+- }
+-
+- return(id);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads the index of a node]
+-
+- Description [Reads the index of a node. LSB is skipped (used as visited
+- flag).
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpWriteNodeIndexCnf(), DddmpSetVisitedCnf (),
+- DddmpVisitedCnf ()]
+-
+-******************************************************************************/
+-
+-static int
+-DddmpReadNodeIndexCnf (
+- DdNode *f /* IN: BDD node */
+- )
+-{
+- if (!Cudd_IsConstant (f)) {
+- return ((int)(((ptruint)(f->next))>>1));
+- } else {
+- return (1);
+- }
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Mark ALL nodes as not visited]
+-
+- Description [Mark ALL nodes as not visited (it recurs on the node children)]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpVisitedCnf (), DddmpSetVisitedCnf ()]
+-
+-******************************************************************************/
+-
+-static int
+-DddmpClearVisitedCnfRecur (
+- DdNode *f /* IN: root of the BDD to be marked */
+- )
+-{
+- int retValue;
+-
+- f = Cudd_Regular(f);
+-
+- if (cuddIsConstant (f)) {
+- return (DDDMP_SUCCESS);
+- }
+-
+- if (!DddmpVisitedCnf (f)) {
+- return (DDDMP_SUCCESS);
+- }
+-
+- retValue = DddmpClearVisitedCnfRecur (cuddT (f));
+- retValue = DddmpClearVisitedCnfRecur (cuddE (f));
+-
+- DddmpClearVisitedCnf (f);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns true if node is visited]
+-
+- Description [Returns true if node is visited]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpSetVisitedCnf (), DddmpClearVisitedCnf ()]
+-
+-******************************************************************************/
+-
+-static int
+-DddmpVisitedCnf (
+- DdNode *f /* IN: BDD node to be tested */
+- )
+-{
+- f = Cudd_Regular(f);
+-
+- return ((int)((ptruint)(f->next)) & (01));
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Marks a node as visited]
+-
+- Description [Marks a node as visited]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpVisitedCnf (), DddmpClearVisitedCnf ()]
+-
+-******************************************************************************/
+-
+-static void
+-DddmpSetVisitedCnf (
+- DdNode *f /* IN: BDD node to be marked (as visited) */
+- )
+-{
+- f = Cudd_Regular(f);
+-
+- f->next = (DdNode *)(ptruint)((int)((ptruint)(f->next))|01);
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Marks a node as not visited]
+-
+- Description [Marks a node as not visited]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpVisitedCnf (), DddmpSetVisitedCnf ()]
+-
+-******************************************************************************/
+-
+-static void
+-DddmpClearVisitedCnf (
+- DdNode *f /* IN: BDD node to be marked (as not visited) */
+- )
+-{
+- f = Cudd_Regular (f);
+-
+- f->next = (DdNode *)(ptruint)((int)((ptruint)(f->next)) & (~01));
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Number nodes recursively in post-order]
+-
+- Description [Number nodes recursively in post-order.
+- The "visited" flag is used with inverse polarity, because all nodes
+- were set "visited" when removing them from unique.
+- ]
+-
+- SideEffects ["visited" flags are reset.]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-NumberNodeRecurCnf(
+- DdNode *f /* IN: root of the BDD to be numbered */,
+- int *cnfIds /* IN: possible source for numbering */,
+- int id /* IN/OUT: possible source for numbering */
+- )
+-{
+- f = Cudd_Regular(f);
+-
+- if (!DddmpVisitedCnf (f)) {
+- return (id);
+- }
+-
+- if (!cuddIsConstant (f)) {
+- id = NumberNodeRecurCnf (cuddT (f), cnfIds, id);
+- id = NumberNodeRecurCnf (cuddE (f), cnfIds, id);
+- }
+-
+- id = DddmpWriteNodeIndexCnf (f, cnfIds, id);
+- DddmpClearVisitedCnf (f);
+-
+- return (id);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Number nodes recursively in post-order]
+-
+- Description [Number nodes recursively in post-order.
+- The "visited" flag is used with the right polarity.
+- The node is assigned to a new CNF variable only if it is a "shared"
+- node (i.e. the number of its incoming edges is greater than 1).
+- ]
+-
+- SideEffects ["visited" flags are set.]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static void
+-DddmpDdNodesCheckIncomingAndScanPath (
+- DdNode *f /* IN: BDD node to be numbered */,
+- int pathLengthCurrent /* IN: Current Path Length */,
+- int edgeInTh /* IN: Max # In-Edges, after a Insert Cut Point */,
+- int pathLengthTh /* IN: Max Path Length (after, Insert a Cut Point) */
+- )
+-{
+- int retValue;
+-
+- f = Cudd_Regular(f);
+-
+- if (DddmpVisitedCnf (f)) {
+- return;
+- }
+-
+- if (cuddIsConstant (f)) {
+- return;
+- }
+-
+- pathLengthCurrent++;
+- retValue = DddmpReadNodeIndexCnf (f);
+-
+- if ( ((edgeInTh >= 0) && (retValue > edgeInTh)) ||
+- ((pathLengthTh >= 0) && (pathLengthCurrent > pathLengthTh))
+- ) {
+- DddmpWriteNodeIndexCnfBis (f, 1);
+- pathLengthCurrent = 0;
+- } else {
+- DddmpWriteNodeIndexCnfBis (f, 0);
+- }
+-
+- DddmpDdNodesCheckIncomingAndScanPath (cuddT (f), pathLengthCurrent,
+- edgeInTh, pathLengthTh);
+- DddmpDdNodesCheckIncomingAndScanPath (cuddE (f), pathLengthCurrent,
+- edgeInTh, pathLengthTh);
+-
+- DddmpSetVisitedCnf (f);
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Number nodes recursively in post-order]
+-
+- Description [Number nodes recursively in post-order.
+- The "visited" flag is used with the inverse polarity.
+- Numbering follows the subsequent strategy:
+- * if the index = 0 it remains so
+- * if the index >= 1 it gets enumerated.
+- This implies that the node is assigned to a new CNF variable only if
+- it is not a terminal node otherwise it is assigned the index of
+- the BDD variable.
+- ]
+-
+- SideEffects ["visited" flags are reset.]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-DddmpDdNodesNumberEdgesRecur (
+- DdNode *f /* IN: BDD node to be numbered */,
+- int *cnfIds /* IN: possible source for numbering */,
+- int id /* IN/OUT: possible source for numbering */
+- )
+-{
+- int retValue;
+-
+- f = Cudd_Regular(f);
+-
+- if (!DddmpVisitedCnf (f)) {
+- return (id);
+- }
+-
+- if (cuddIsConstant (f)) {
+- return (id);
+- }
+-
+- id = DddmpDdNodesNumberEdgesRecur (cuddT (f), cnfIds, id);
+- id = DddmpDdNodesNumberEdgesRecur (cuddE (f), cnfIds, id);
+-
+- retValue = DddmpReadNodeIndexCnf (f);
+- if (retValue >= 1) {
+- id = DddmpWriteNodeIndexCnf (f, cnfIds, id);
+- } else {
+- DddmpWriteNodeIndexCnfBis (f, 0);
+- }
+-
+- DddmpClearVisitedCnf (f);
+-
+- return (id);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Resets counter and visited flag for ALL nodes of a BDD]
+-
+- Description [Resets counter and visited flag for ALL nodes of a BDD (it
+- recurs on the node children). The index field of the node is
+- used as counter.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-DddmpDdNodesResetCountRecur (
+- DdNode *f /* IN: root of the BDD whose counters are reset */
+- )
+-{
+- int retValue;
+-
+- f = Cudd_Regular (f);
+-
+- if (!DddmpVisitedCnf (f)) {
+- return (DDDMP_SUCCESS);
+- }
+-
+- if (!cuddIsConstant (f)) {
+- retValue = DddmpDdNodesResetCountRecur (cuddT (f));
+- retValue = DddmpDdNodesResetCountRecur (cuddE (f));
+- }
+-
+- DddmpWriteNodeIndexCnfBis (f, 0);
+- DddmpClearVisitedCnf (f);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Counts the number of incoming edges for each node of a BDD]
+-
+- Description [Counts (recursively) the number of incoming edges for each
+- node of a BDD. This number is stored in the index field.
+- ]
+-
+- SideEffects ["visited" flags remain untouched.]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-DddmpDdNodesCountEdgesRecur (
+- DdNode *f /* IN: root of the BDD */
+- )
+-{
+- int indexValue, retValue;
+-
+- f = Cudd_Regular (f);
+-
+- if (cuddIsConstant (f)) {
+- return (DDDMP_SUCCESS);
+- }
+-
+- if (Cudd_IsConstant (cuddT (f)) && Cudd_IsConstant (cuddE (f))) {
+- return (DDDMP_SUCCESS);
+- }
+-
+- indexValue = DddmpReadNodeIndexCnf (f);
+-
+- /* IF (first time) THEN recur */
+- if (indexValue == 0) {
+- retValue = DddmpDdNodesCountEdgesRecur (cuddT (f));
+- retValue = DddmpDdNodesCountEdgesRecur (cuddE (f));
+- }
+-
+- /* Increment Incoming-Edge Count Flag */
+- indexValue++;
+- DddmpWriteNodeIndexCnfBis (f, indexValue);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Removes a node from unique table]
+-
+- Description [Removes a node from the unique table by locating the proper
+- subtable and unlinking the node from it. It recurs on son nodes.
+- ]
+-
+- SideEffects [Nodes are left with the "visited" flag true.]
+-
+- SeeAlso [RestoreInUniqueRecurCnf()]
+-
+-******************************************************************************/
+-
+-static void
+-RemoveFromUniqueRecurCnf (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: root of the BDD to be extracted */
+- )
+-{
+- DdNode *node, *last, *next;
+- DdNode *sentinel = &(ddMgr->sentinel);
+- DdNodePtr *nodelist;
+- DdSubtable *subtable;
+- int pos, level;
+-
+- f = Cudd_Regular (f);
+-
+- if (DddmpVisitedCnf (f)) {
+- return;
+- }
+-
+- if (!cuddIsConstant (f)) {
+-
+- RemoveFromUniqueRecurCnf (ddMgr, cuddT (f));
+- RemoveFromUniqueRecurCnf (ddMgr, cuddE (f));
+-
+- level = ddMgr->perm[f->index];
+- subtable = &(ddMgr->subtables[level]);
+-
+- nodelist = subtable->nodelist;
+-
+- pos = ddHash (cuddT (f), cuddE (f), subtable->shift);
+- node = nodelist[pos];
+- last = NULL;
+- while (node != sentinel) {
+- next = node->next;
+- if (node == f) {
+- if (last != NULL)
+- last->next = next;
+- else
+- nodelist[pos] = next;
+- break;
+- } else {
+- last = node;
+- node = next;
+- }
+- }
+-
+- f->next = NULL;
+-
+- }
+-
+- DddmpSetVisitedCnf (f);
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Restores a node in unique table]
+-
+- Description [Restores a node in unique table (recursive)]
+-
+- SideEffects [Nodes are not restored in the same order as before removal]
+-
+- SeeAlso [RemoveFromUnique()]
+-
+-******************************************************************************/
+-
+-static void
+-RestoreInUniqueRecurCnf (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: root of the BDD to be restored */
+- )
+-{
+- DdNodePtr *nodelist;
+- DdNode *T, *E, *looking;
+- DdNodePtr *previousP;
+- DdSubtable *subtable;
+- int pos, level;
+-#ifdef DDDMP_DEBUG
+- DdNode *node;
+- DdNode *sentinel = &(ddMgr->sentinel);
+-#endif
+-
+- f = Cudd_Regular(f);
+-
+- if (!Cudd_IsComplement (f->next)) {
+- return;
+- }
+-
+- if (cuddIsConstant (f)) {
+- DddmpClearVisitedCnf (f);
+- /*f->next = NULL;*/
+- return;
+- }
+-
+- RestoreInUniqueRecurCnf (ddMgr, cuddT (f));
+- RestoreInUniqueRecurCnf (ddMgr, cuddE (f));
+-
+- level = ddMgr->perm[f->index];
+- subtable = &(ddMgr->subtables[level]);
+-
+- nodelist = subtable->nodelist;
+-
+- pos = ddHash (cuddT (f), cuddE (f), subtable->shift);
+-
+-#ifdef DDDMP_DEBUG
+- /* verify uniqueness to avoid duplicate nodes in unique table */
+- for (node=nodelist[pos]; node != sentinel; node=node->next)
+- assert(node!=f);
+-#endif
+-
+- T = cuddT (f);
+- E = cuddE (f);
+- previousP = &(nodelist[pos]);
+- looking = *previousP;
+-
+- while (T < cuddT (looking)) {
+- previousP = &(looking->next);
+- looking = *previousP;
+- }
+-
+- while (T == cuddT (looking) && E < cuddE (looking)) {
+- previousP = &(looking->next);
+- looking = *previousP;
+- }
+- f->next = *previousP;
+- *previousP = f;
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Prints debug info]
+-
+- Description [Prints debug info for a BDD on the screen. It recurs on
+- node's children.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-DddmpPrintBddAndNextRecur (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: root of the BDD to be displayed */
+- )
+-{
+- int retValue;
+- DdNode *fPtr, *tPtr, *ePtr;
+-
+- fPtr = Cudd_Regular (f);
+-
+- if (Cudd_IsComplement (f)) {
+- fprintf (stdout, "sign=- ptr=%ld ", ((long int) fPtr));
+- } else {
+- fprintf (stdout, "sign=+ ptr=%ld ", ((long int) fPtr));
+- }
+-
+- if (cuddIsConstant (fPtr)) {
+- fprintf (stdout, "one\n");
+- fflush (stdout);
+- return (DDDMP_SUCCESS);
+- }
+-
+- fprintf (stdout,
+- "thenPtr=%ld elsePtr=%ld BddId=%d CnfId=%d Visited=%d\n",
+- ((long int) cuddT (fPtr)), ((long int) cuddE (fPtr)),
+- fPtr->index, DddmpReadNodeIndexCnf (fPtr),
+- DddmpVisitedCnf (fPtr));
+-
+- tPtr = cuddT (fPtr);
+- ePtr = cuddE (fPtr);
+- if (Cudd_IsComplement (f)) {
+- tPtr = Cudd_Not (tPtr);
+- ePtr = Cudd_Not (ePtr);
+- }
+-
+- retValue = DddmpPrintBddAndNextRecur (ddMgr, tPtr);
+- retValue = DddmpPrintBddAndNextRecur (ddMgr, ePtr);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-
+diff --git a/Cudd/dddmp/dddmpInt.h b/Cudd/dddmp/dddmpInt.h
+deleted file mode 100644
+index 7d0f54d..0000000
+--- a/Cudd/dddmp/dddmpInt.h
++++ /dev/null
+@@ -1,216 +0,0 @@
+-/**CHeaderFile*****************************************************************
+-
+- FileName [dddmpInt.h]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Low level functions to read in and write out bdds to file]
+-
+- Description [A set of internal low-level routines of the dddmp package
+- doing:
+- <ul>
+- <li> read and write of node codes in binary mode,
+- <li> read and write of integers in binary mode,
+- <li> marking/unmarking nodes as visited,
+- <li> numbering nodes.
+- </ul>
+- ]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2002 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#ifndef _DDDMPINT
+-#define _DDDMPINT
+-
+-#include "dddmp.h"
+-#include "cuddInt.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-/*---------------------------------------------------------------------------*/
+-/* Constant declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/* constants for code fields */
+-#define DDDMP_TERMINAL 0
+-#define DDDMP_ABSOLUTE_ID 1
+-#define DDDMP_RELATIVE_ID 2
+-#define DDDMP_RELATIVE_1 3
+-
+-#define DDDMP_MAXSTRLEN 500
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Structure declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Struct**********************************************************************
+- Synopsis [used in binary mode to store code info of a dd node]
+- Description [V , T , E store the mode used to represent variable, Then
+- and Else indexes. An index is either an absolute
+- ( DDDMP_ABSOLUTE_ID ),
+- a relative numbers ( DDDMP_RELATIVE_ID , DDDMP_RELATIVE_1 ) or
+- a terminal node ( DDDMP_TERMINAL ) .
+- Ecomp is used for the complemented edge attribute.
+- ]
+- SideEffect [none]
+- SeeAlso [DddmpWriteCode DddmpReadCode]
+-******************************************************************************/
+-
+-struct binary_dd_code {
+- unsigned Unused : 1;
+- unsigned V : 2;
+- unsigned T : 2;
+- unsigned Ecompl : 1;
+- unsigned E : 2;
+-};
+-
+-/**Struct*********************************************************************
+-
+- Synopsis [BDD file header]
+-
+- Description [Structure containing the BDD header file infos]
+-
+-******************************************************************************/
+-
+-struct Dddmp_Hdr_s {
+- char *ver;
+- char mode;
+- Dddmp_DecompType ddType;
+- Dddmp_VarInfoType varinfo;
+- char *dd;
+- int nnodes;
+- int nVars;
+- int nsuppvars;
+- char **orderedVarNames;
+- char **suppVarNames;
+- int *ids;
+- int *permids;
+- int *auxids;
+- int *cnfids;
+- int nRoots;
+- int *rootids;
+- char **rootnames;
+- int nAddedCnfVar;
+- int nVarsCnf;
+- int nClausesCnf;
+-};
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Macro***********************************************************************
+-
+- Synopsis [Memory Allocation Macro for DDDMP]
+-
+- Description []
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-#ifdef ALLOC
+-# define DDDMP_ALLOC(type, num) ALLOC(type,num)
+-#else
+-# define DDDMP_ALLOC(type, num) \
+- ((type *) malloc(sizeof(type) * (num)))
+-#endif
+-
+-/**Macro***********************************************************************
+-
+- Synopsis [Memory Free Macro for DDDMP]
+-
+- Description []
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-#ifdef FREE
+-#define DDDMP_FREE(p) (FREE(p))
+-#else
+-#define DDDMP_FREE(p) \
+- ((p)!=NULL)?(free(p)):0)
+-#endif
+-
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-extern int DddmpWriteCode(FILE *fp, struct binary_dd_code code);
+-extern int DddmpReadCode(FILE *fp, struct binary_dd_code *pcode);
+-extern int DddmpWriteInt(FILE *fp, int id);
+-extern int DddmpReadInt(FILE *fp, int *pid);
+-extern int DddmpNumberAddNodes(DdManager *ddMgr, DdNode **f, int n);
+-extern void DddmpUnnumberAddNodes(DdManager *ddMgr, DdNode **f, int n);
+-extern void DddmpWriteNodeIndexAdd(DdNode *f, int id);
+-extern int DddmpReadNodeIndexAdd(DdNode *f);
+-extern int DddmpVisitedAdd(DdNode *f);
+-extern void DddmpSetVisitedAdd(DdNode *f);
+-extern void DddmpClearVisitedAdd(DdNode *f);
+-extern int DddmpNumberBddNodes(DdManager *ddMgr, DdNode **f, int n);
+-extern void DddmpUnnumberBddNodes(DdManager *ddMgr, DdNode **f, int n);
+-extern void DddmpWriteNodeIndexBdd(DdNode *f, int id);
+-extern int DddmpReadNodeIndexBdd(DdNode *f);
+-extern int DddmpVisitedBdd(DdNode *f);
+-extern void DddmpSetVisitedBdd(DdNode *f);
+-extern void DddmpClearVisitedBdd(DdNode *f);
+-extern int DddmpNumberDdNodesCnf(DdManager *ddMgr, DdNode **f, int rootN, int *cnfIds, int id);
+-extern int DddmpDdNodesCountEdgesAndNumber(DdManager *ddMgr, DdNode **f, int rootN, int edgeInTh, int pathLengthTh, int *cnfIds, int id);
+-extern void DddmpUnnumberDdNodesCnf(DdManager *ddMgr, DdNode **f, int rootN);
+-extern int DddmpPrintBddAndNext(DdManager *ddMgr, DdNode **f, int rootN);
+-extern int DddmpWriteNodeIndexCnf(DdNode *f, int id);
+-extern int DddmpVisitedCnf(DdNode *f);
+-extern void DddmpSetVisitedCnf(DdNode *f);
+-extern int DddmpReadNodeIndexCnf(DdNode *f);
+-extern int DddmpCuddDdArrayStoreBdd(Dddmp_DecompType ddType, DdManager *ddMgr, char *ddname, int nRoots, DdNode **f, char **rootnames, char **varnames, int *auxids, int mode, Dddmp_VarInfoType varinfo, char *fname, FILE *fp);
+-extern int DddmpCuddBddArrayStore(Dddmp_DecompType ddType, DdManager *ddMgr, char *ddname, int nRoots, DdNode **f, char **rootnames, char **varnames, int *auxids, int mode, Dddmp_VarInfoType varinfo, char *fname, FILE *fp);
+-extern int QsortStrcmp(const void *ps1, const void *ps2);
+-extern int FindVarname(char *name, char **array, int n);
+-extern char * DddmpStrDup(char *str);
+-extern char ** DddmpStrArrayDup(char **array, int n);
+-extern char ** DddmpStrArrayRead(FILE *fp, int n);
+-extern int DddmpStrArrayWrite(FILE *fp, char **array, int n);
+-extern void DddmpStrArrayFree(char **array, int n);
+-extern int * DddmpIntArrayDup(int *array, int n);
+-extern int * DddmpIntArrayRead(FILE *fp, int n);
+-extern int DddmpIntArrayWrite(FILE *fp, int *array, int n);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-
+-#endif
+diff --git a/Cudd/dddmp/dddmpLoad.c b/Cudd/dddmp/dddmpLoad.c
+deleted file mode 100644
+index 27d9f09..0000000
+--- a/Cudd/dddmp/dddmpLoad.c
++++ /dev/null
+@@ -1,1486 +0,0 @@
+-/**CFile**********************************************************************
+-
+- FileName [dddmpLoad.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Functions to read in bdds to file]
+-
+- Description [Functions to read in bdds to file. BDDs
+- are represended on file either in text or binary format under the
+- following rules. A file contains a forest of BDDs (a vector of
+- Boolean functions). BDD nodes are numbered with contiguous numbers,
+- from 1 to NNodes (total number of nodes on a file). 0 is not used to
+- allow negative node indexes for complemented edges. A file contains
+- a header, including information about variables and roots to BDD
+- functions, followed by the list of nodes. BDD nodes are listed
+- according to their numbering, and in the present implementation
+- numbering follows a post-order strategy, in such a way that a node
+- is never listed before its Then/Else children.
+- ]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include "dddmpInt.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-#define matchkeywd(str,key) (strncmp(str,key,strlen(key))==0)
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-static int DddmpCuddDdArrayLoad(Dddmp_DecompType ddType, DdManager *ddMgr, Dddmp_RootMatchType rootMatchMode, char **rootmatchnames, Dddmp_VarMatchType varMatchMode, char **varmatchnames, int *varmatchauxids, int *varcomposeids, int mode, char *file, FILE *fp, DdNode ***pproots);
+-static Dddmp_Hdr_t * DddmpBddReadHeader(char *file, FILE *fp);
+-static void DddmpFreeHeader(Dddmp_Hdr_t *Hdr);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads a dump file representing the argument BDD.]
+-
+- Description [Reads a dump file representing the argument BDD.
+- Dddmp_cuddBddArrayLoad is used through a dummy array (see this
+- function's description for more details).
+- Mode, the requested input file format, is checked against
+- the file format.
+- The loaded BDDs is referenced before returning it.
+- ]
+-
+- SideEffects [A vector of pointers to DD nodes is allocated and freed.]
+-
+- SeeAlso [Dddmp_cuddBddStore, Dddmp_cuddBddArrayLoad]
+-
+-******************************************************************************/
+-
+-DdNode *
+-Dddmp_cuddBddLoad (
+- DdManager *ddMgr /* IN: DD Manager */,
+- Dddmp_VarMatchType varMatchMode /* IN: storing mode selector */,
+- char **varmatchnames /* IN: array of variable names - by IDs */,
+- int *varmatchauxids /* IN: array of variable auxids - by IDs */,
+- int *varcomposeids /* IN: array of new ids accessed - by IDs */,
+- int mode /* IN: requested input file format */,
+- char *file /* IN: file name */,
+- FILE *fp /* IN: file pointer */
+- )
+-{
+- DdNode *f , **tmpArray;
+- int i, nRoots;
+-
+- nRoots = Dddmp_cuddBddArrayLoad(ddMgr,DDDMP_ROOT_MATCHLIST,NULL,
+- varMatchMode,varmatchnames,varmatchauxids,varcomposeids,
+- mode,file,fp,&tmpArray);
+-
+- if (nRoots == 0) {
+- return (NULL);
+- } else {
+- f = tmpArray[0];
+- if (nRoots > 1) {
+- fprintf (stderr,
+- "Warning: %d BDD roots found in file. Only first retrieved.\n",
+- nRoots);
+- for (i=1; i<nRoots; i++) {
+- Cudd_RecursiveDeref (ddMgr, tmpArray[i]);
+- }
+- }
+- DDDMP_FREE (tmpArray);
+- return (f);
+- }
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads a dump file representing the argument BDDs.]
+-
+- Description [Reads a dump file representing the argument BDDs. The header is
+- common to both text and binary mode. The node list is either
+- in text or binary format. A dynamic vector of DD pointers
+- is allocated to support conversion from DD indexes to pointers.
+- Several criteria are supported for variable match between file
+- and dd manager. Several changes/permutations/compositions are allowed
+- for variables while loading DDs. Variable of the dd manager are allowed
+- to match with variables on file on ids, permids, varnames,
+- varauxids; also direct composition between ids and
+- composeids is supported. More in detail:
+- <ol>
+- <li> varMatchMode=DDDMP_VAR_MATCHIDS <p>
+- allows the loading of a DD keeping variable IDs unchanged
+- (regardless of the variable ordering of the reading manager); this
+- is useful, for example, when swapping DDs to file and restoring them
+- later from file, after possible variable reordering activations.
+-
+- <li> varMatchMode=DDDMP_VAR_MATCHPERMIDS <p>
+- is used to allow variable match according to the position in the
+- ordering.
+-
+- <li> varMatchMode=DDDMP_VAR_MATCHNAMES <p>
+- requires a non NULL varmatchnames parameter; this is a vector of
+- strings in one-to-one correspondence with variable IDs of the
+- reading manager. Variables in the DD file read are matched with
+- manager variables according to their name (a non NULL varnames
+- parameter was required while storing the DD file).
+-
+- <li> varMatchMode=DDDMP_VAR_MATCHIDS <p>
+- has a meaning similar to DDDMP_VAR_MATCHNAMES, but integer auxiliary
+- IDs are used instead of strings; the additional non NULL
+- varmatchauxids parameter is needed.
+-
+- <li> varMatchMode=DDDMP_VAR_COMPOSEIDS <p>
+- uses the additional varcomposeids parameter is used as array of
+- variable ids to be composed with ids stored in file.
+- </ol>
+-
+- In the present implementation, the array varnames (3), varauxids (4)
+- and composeids (5) need to have one entry for each variable in the
+- DD manager (NULL pointers are allowed for unused variables
+- in varnames). Hence variables need to be already present in the
+- manager. All arrays are sorted according to IDs.
+-
+- All the loaded BDDs are referenced before returning them.
+- ]
+-
+- SideEffects [A vector of pointers to DD nodes is allocated and freed.]
+-
+- SeeAlso [Dddmp_cuddBddArrayStore]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddBddArrayLoad (
+- DdManager *ddMgr /* IN: DD Manager */,
+- Dddmp_RootMatchType rootMatchMode /* IN: storing mode selector */,
+- char **rootmatchnames /* IN: sorted names for loaded roots */,
+- Dddmp_VarMatchType varMatchMode /* IN: storing mode selector */,
+- char **varmatchnames /* IN: array of variable names, by ids */,
+- int *varmatchauxids /* IN: array of variable auxids, by ids */,
+- int *varcomposeids /* IN: array of new ids, by ids */,
+- int mode /* IN: requested input file format */,
+- char *file /* IN: file name */,
+- FILE *fp /* IN: file pointer */,
+- DdNode ***pproots /* OUT: array of returned BDD roots */
+- )
+-{
+- int retValue;
+-
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- int retValueBis;
+-
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During BDD Load.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During BDD Load.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-
+- retValue = DddmpCuddDdArrayLoad (DDDMP_BDD, ddMgr, rootMatchMode,
+- rootmatchnames, varMatchMode, varmatchnames, varmatchauxids,
+- varcomposeids, mode, file, fp, pproots);
+-
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During BDD Load.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During BDD Load.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-
+- return (retValue);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads a dump file representing the argument ADD.]
+-
+- Description [Reads a dump file representing the argument ADD.
+- Dddmp_cuddAddArrayLoad is used through a dummy array.
+- ]
+-
+- SideEffects [A vector of pointers to DD nodes is allocated and freed.]
+-
+- SeeAlso [Dddmp_cuddAddStore, Dddmp_cuddAddArrayLoad]
+-
+-******************************************************************************/
+-
+-DdNode *
+-Dddmp_cuddAddLoad (
+- DdManager *ddMgr /* IN: Manager */,
+- Dddmp_VarMatchType varMatchMode /* IN: storing mode selector */,
+- char **varmatchnames /* IN: array of variable names by IDs */,
+- int *varmatchauxids /* IN: array of variable auxids by IDs */,
+- int *varcomposeids /* IN: array of new ids by IDs */,
+- int mode /* IN: requested input file format */,
+- char *file /* IN: file name */,
+- FILE *fp /* IN: file pointer */
+- )
+-{
+- DdNode *f , **tmpArray;
+- int i, nRoots;
+-
+- nRoots = Dddmp_cuddAddArrayLoad (ddMgr, DDDMP_ROOT_MATCHLIST,NULL,
+- varMatchMode, varmatchnames, varmatchauxids, varcomposeids,
+- mode, file, fp, &tmpArray);
+-
+- if (nRoots == 0) {
+- return (NULL);
+- } else {
+- f = tmpArray[0];
+- if (nRoots > 1) {
+- fprintf (stderr,
+- "Warning: %d BDD roots found in file. Only first retrieved.\n",
+- nRoots);
+- for (i=1; i<nRoots; i++) {
+- Cudd_RecursiveDeref (ddMgr, tmpArray[i]);
+- }
+- }
+- DDDMP_FREE (tmpArray);
+- return (f);
+- }
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads a dump file representing the argument ADDs.]
+-
+- Description [Reads a dump file representing the argument ADDs. See
+- BDD load functions for detailed explanation.
+- ]
+-
+- SideEffects [A vector of pointers to DD nodes is allocated and freed.]
+-
+- SeeAlso [Dddmp_cuddBddArrayStore]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddAddArrayLoad (
+- DdManager *ddMgr /* IN: DD Manager */,
+- Dddmp_RootMatchType rootMatchMode /* IN: storing mode selector */,
+- char **rootmatchnames /* IN: sorted names for loaded roots */,
+- Dddmp_VarMatchType varMatchMode /* IN: storing mode selector */,
+- char **varmatchnames /* IN: array of variable names, by ids */,
+- int *varmatchauxids /* IN: array of variable auxids, by ids */,
+- int *varcomposeids /* IN: array of new ids, by ids */,
+- int mode /* IN: requested input file format */,
+- char *file /* IN: file name */,
+- FILE *fp /* IN: file pointer */,
+- DdNode ***pproots /* OUT: array of returned BDD roots */
+- )
+-{
+-
+- int retValue;
+-
+-#if 0
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- int retValueBis;
+-
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During ADD Load.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During ADD Load.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-#endif
+-
+- retValue = DddmpCuddDdArrayLoad (DDDMP_ADD, ddMgr, rootMatchMode,
+- rootmatchnames, varMatchMode, varmatchnames, varmatchauxids,
+- varcomposeids, mode, file, fp, pproots);
+-
+-#if 0
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During ADD Load.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During ADD Load.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-#endif
+-
+- return (retValue);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads the header of a dump file representing the argument BDDs]
+-
+- Description [Reads the header of a dump file representing the argument BDDs.
+- Returns main information regarding DD type stored in the file,
+- the variable ordering used, the number of variables, etc.
+- It reads only the header of the file NOT the BDD/ADD section.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso [Dddmp_cuddBddArrayLoad]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddHeaderLoad (
+- Dddmp_DecompType *ddType /* OUT: selects the proper decomp type */,
+- int *nVars /* OUT: number of DD variables */,
+- int *nsuppvars /* OUT: number of support variables */,
+- char ***suppVarNames /* OUT: array of support variable names */,
+- char ***orderedVarNames /* OUT: array of variable names */,
+- int **varIds /* OUT: array of variable ids */,
+- int **varComposeIds /* OUT: array of permids ids */,
+- int **varAuxIds /* OUT: array of variable aux ids */,
+- int *nRoots /* OUT: number of root in the file */,
+- char *file /* IN: file name */,
+- FILE *fp /* IN: file pointer */
+- )
+-{
+- Dddmp_Hdr_t *Hdr;
+- int i, fileToClose;
+- int *tmpVarIds = NULL;
+- int *tmpVarComposeIds = NULL;
+- int *tmpVarAuxIds = NULL;
+-
+- fileToClose = 0;
+- if (fp == NULL) {
+- fp = fopen (file, "r");
+- Dddmp_CheckAndGotoLabel (fp==NULL, "Error opening file.",
+- failure);
+- fileToClose = 1;
+- }
+-
+- Hdr = DddmpBddReadHeader (NULL, fp);
+-
+- Dddmp_CheckAndGotoLabel (Hdr->nnodes==0, "Zero number of nodes.",
+- failure);
+-
+- /*
+- * Type, number of variables (tot and support)
+- */
+-
+- *ddType = Hdr->ddType;
+- *nVars = Hdr->nVars;
+- *nsuppvars = Hdr->nsuppvars;
+-
+- /*
+- * Support Varnames
+- */
+-
+- if (Hdr->suppVarNames != NULL) {
+- *suppVarNames = DDDMP_ALLOC (char *, *nsuppvars);
+- Dddmp_CheckAndGotoLabel (*suppVarNames==NULL,
+- "Error allocating memory.", failure);
+-
+- for (i=0; i<*nsuppvars; i++) {
+- (*suppVarNames)[i] = DDDMP_ALLOC (char,
+- (strlen (Hdr->suppVarNames[i]) + 1));
+- Dddmp_CheckAndGotoLabel (Hdr->suppVarNames[i]==NULL,
+- "Support Variable Name Missing in File.", failure);
+- strcpy ((*suppVarNames)[i], Hdr->suppVarNames[i]);
+- }
+- } else {
+- *suppVarNames = NULL;
+- }
+-
+- /*
+- * Ordered Varnames
+- */
+-
+- if (Hdr->orderedVarNames != NULL) {
+- *orderedVarNames = DDDMP_ALLOC (char *, *nVars);
+- Dddmp_CheckAndGotoLabel (*orderedVarNames==NULL,
+- "Error allocating memory.", failure);
+-
+- for (i=0; i<*nVars; i++) {
+- (*orderedVarNames)[i] = DDDMP_ALLOC (char,
+- (strlen (Hdr->orderedVarNames[i]) + 1));
+- Dddmp_CheckAndGotoLabel (Hdr->orderedVarNames[i]==NULL,
+- "Support Variable Name Missing in File.", failure);
+- strcpy ((*orderedVarNames)[i], Hdr->orderedVarNames[i]);
+- }
+- } else {
+- *orderedVarNames = NULL;
+- }
+-
+- /*
+- * Variable Ids
+- */
+-
+- if (Hdr->ids != NULL) {
+- tmpVarIds = DDDMP_ALLOC (int, *nsuppvars);
+- Dddmp_CheckAndGotoLabel (tmpVarIds==NULL, "Error allocating memory.",
+- failure);
+- for (i=0; i<*nsuppvars; i++) {
+- tmpVarIds[i] = Hdr->ids[i];
+- }
+-
+- *varIds = tmpVarIds;
+- } else {
+- *varIds = NULL;
+- }
+-
+- /*
+- * Variable Compose Ids
+- */
+-
+- if (Hdr->permids != NULL) {
+- tmpVarComposeIds = DDDMP_ALLOC (int, *nsuppvars);
+- Dddmp_CheckAndGotoLabel (tmpVarComposeIds==NULL,
+- "Error allocating memory.", failure);
+- for (i=0; i<*nsuppvars; i++) {
+- tmpVarComposeIds[i] = Hdr->permids[i];
+- }
+-
+- *varComposeIds = tmpVarComposeIds;
+- } else {
+- *varComposeIds = NULL;
+- }
+-
+- /*
+- * Variable Auxiliary Ids
+- */
+-
+- if (Hdr->auxids != NULL) {
+- tmpVarAuxIds = DDDMP_ALLOC (int, *nsuppvars);
+- Dddmp_CheckAndGotoLabel (tmpVarAuxIds==NULL,
+- "Error allocating memory.", failure);
+- for (i=0; i<*nsuppvars; i++) {
+- tmpVarAuxIds[i] = Hdr->auxids[i];
+- }
+-
+- *varAuxIds = tmpVarAuxIds;
+- } else {
+- *varAuxIds = NULL;
+- }
+-
+- /*
+- * Number of roots
+- */
+-
+- *nRoots = Hdr->nRoots;
+-
+- /*
+- * Free and Return
+- */
+-
+- if (fileToClose == 1) {
+- fclose (fp);
+- }
+-
+- DddmpFreeHeader(Hdr);
+-
+- return (DDDMP_SUCCESS);
+-
+- failure:
+- return (DDDMP_FAILURE);
+-}
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads a dump file representing the argument BDDs.]
+-
+- Description [Reads a dump file representing the argument BDDs. The header is
+- common to both text and binary mode. The node list is either
+- in text or binary format. A dynamic vector of DD pointers
+- is allocated to support conversion from DD indexes to pointers.
+- Several criteria are supported for variable match between file
+- and dd manager. Several changes/permutations/compositions are allowed
+- for variables while loading DDs. Variable of the dd manager are allowed
+- to match with variables on file on ids, permids, varnames,
+- varauxids; also direct composition between ids and
+- composeids is supported. More in detail:
+- <ol>
+- <li> varMatchMode=DDDMP_VAR_MATCHIDS <p>
+- allows the loading of a DD keeping variable IDs unchanged
+- (regardless of the variable ordering of the reading manager); this
+- is useful, for example, when swapping DDs to file and restoring them
+- later from file, after possible variable reordering activations.
+-
+- <li> varMatchMode=DDDMP_VAR_MATCHPERMIDS <p>
+- is used to allow variable match according to the position in the ordering.
+-
+- <li> varMatchMode=DDDMP_VAR_MATCHNAMES <p>
+- requires a non NULL varmatchnames parameter; this is a vector of
+- strings in one-to-one correspondence with variable IDs of the
+- reading manager. Variables in the DD file read are matched with
+- manager variables according to their name (a non NULL varnames
+- parameter was required while storing the DD file).
+-
+- <li> varMatchMode=DDDMP_VAR_MATCHIDS <p>
+- has a meaning similar to DDDMP_VAR_MATCHNAMES, but integer auxiliary
+- IDs are used instead of strings; the additional non NULL
+- varmatchauxids parameter is needed.
+-
+- <li> varMatchMode=DDDMP_VAR_COMPOSEIDS <p>
+- uses the additional varcomposeids parameter is used as array of
+- variable ids to be composed with ids stored in file.
+- </ol>
+-
+- In the present implementation, the array varnames (3), varauxids (4)
+- and composeids (5) need to have one entry for each variable in the
+- DD manager (NULL pointers are allowed for unused variables
+- in varnames). Hence variables need to be already present in the
+- manager. All arrays are sorted according to IDs.
+- ]
+-
+- SideEffects [A vector of pointers to DD nodes is allocated and freed.]
+-
+- SeeAlso [Dddmp_cuddBddArrayStore]
+-
+-******************************************************************************/
+-
+-static int
+-DddmpCuddDdArrayLoad (
+- Dddmp_DecompType ddType /* IN: Selects decomp type */,
+- DdManager *ddMgr /* IN: DD Manager */,
+- Dddmp_RootMatchType rootMatchMode /* IN: storing mode selector */,
+- char **rootmatchnames /* IN: sorted names for loaded roots */,
+- Dddmp_VarMatchType varMatchMode /* IN: storing mode selector */,
+- char **varmatchnames /* IN: array of variable names, by ids */,
+- int *varmatchauxids /* IN: array of variable auxids, by ids */,
+- int *varcomposeids /* IN: array of new ids, by ids */,
+- int mode /* IN: requested input file format */,
+- char *file /* IN: file name */,
+- FILE *fp /* IN: file pointer */,
+- DdNode ***pproots /* OUT: array BDD roots (by reference) */
+- )
+-{
+- Dddmp_Hdr_t *Hdr = NULL;
+- DdNode *f = NULL;
+- DdNode *T = NULL;
+- DdNode *E = NULL;
+- struct binary_dd_code code;
+- char buf[DDDMP_MAXSTRLEN];
+- int retValue, id, size, maxv;
+- int i, j, k, maxaux, var, vT, vE, idT, idE;
+- double addConstant;
+- int *permsupport = NULL;
+- int *convertids = NULL;
+- int *invconvertids = NULL;
+- int *invauxids = NULL;
+- char **sortedvarnames = NULL;
+- int nddvars, nRoots;
+- DdNode **pnodes = NULL;
+- unsigned char *pvars1byte = NULL;
+- unsigned short *pvars2byte = NULL;
+- DdNode **proots = NULL;
+- int fileToClose = 0;
+-
+- *pproots = NULL;
+-
+- if (fp == NULL) {
+- fp = fopen (file, "r");
+- Dddmp_CheckAndGotoLabel (fp==NULL, "Error opening file.",
+- failure);
+- fileToClose = 1;
+- }
+-
+- nddvars = ddMgr->size;
+-
+- Hdr = DddmpBddReadHeader (NULL, fp);
+-
+- Dddmp_CheckAndGotoLabel (Hdr->nnodes==0, "Zero number of nodes.",
+- failure);
+-
+- nRoots = Hdr->nRoots;
+-
+- if (Hdr->ddType != ddType) {
+- (void) fprintf (stderr, "DdLoad Error: ddType mismatch\n");
+-
+- if (Hdr->ddType == DDDMP_BDD)
+- (void) fprintf (stderr, "BDD found\n");
+- if (Hdr->ddType == DDDMP_ADD)
+- (void) fprintf (stderr, "ADD found\n");
+- if (ddType == DDDMP_BDD)
+- (void) fprintf (stderr, "when loading a BDD\n");
+- if (ddType == DDDMP_ADD)
+- (void) fprintf (stderr, "when loading an ADD\n");
+-
+- fflush (stderr);
+- goto failure;
+- }
+-
+- if (Hdr->mode != mode) {
+- Dddmp_CheckAndGotoLabel (mode!=DDDMP_MODE_DEFAULT,
+- "Mode Mismatch.", failure);
+- mode = Hdr->mode;
+- }
+-
+- /*
+- * For each variable in the support
+- * compute the relative position in the ordering
+- * (within the support only)
+- */
+-
+- permsupport = DDDMP_ALLOC (int, Hdr->nsuppvars);
+- Dddmp_CheckAndGotoLabel (permsupport==NULL, "Error allocating memory.",
+- failure);
+- for (i=0,k=0; i < Hdr->nVars; i++) {
+- for (j=0; j < Hdr->nsuppvars; j++) {
+- if (Hdr->permids[j] == i) {
+- permsupport[j] = k++;
+- }
+- }
+- }
+- Dddmp_Assert (k==Hdr->nsuppvars, "k==Hdr->nsuppvars");
+-
+- if (Hdr->suppVarNames != NULL) {
+- /*
+- * Varnames are sorted for binary search
+- */
+-
+- sortedvarnames = DDDMP_ALLOC(char *, Hdr->nsuppvars);
+- Dddmp_CheckAndGotoLabel (sortedvarnames==NULL, "Error allocating memory.",
+- failure);
+- for (i=0; i<Hdr->nsuppvars; i++) {
+- Dddmp_CheckAndGotoLabel (Hdr->suppVarNames[i]==NULL,
+- "Support Variable Name Missing in File.", failure);
+- sortedvarnames[i] = Hdr->suppVarNames[i];
+- }
+-
+- qsort ((void *) sortedvarnames, Hdr->nsuppvars,
+- sizeof(char *), QsortStrcmp);
+-
+- }
+-
+- /*
+- * Convertids is the array used to convert variable ids from positional
+- * (shrinked) ids used within the DD file.
+- * Positions in the file are from 0 to nsuppvars-1.
+- */
+-
+- convertids = DDDMP_ALLOC (int, Hdr->nsuppvars);
+- Dddmp_CheckAndGotoLabel (convertids==NULL, "Error allocating memory.",
+- failure);
+-
+- again_matchmode:
+- switch (varMatchMode) {
+- case DDDMP_VAR_MATCHIDS:
+- for (i=0; i<Hdr->nsuppvars; i++) {
+- convertids[permsupport[i]] = Hdr->ids[i];
+- }
+- break;
+- case DDDMP_VAR_MATCHPERMIDS:
+- for (i=0; i<Hdr->nsuppvars; i++) {
+- convertids[permsupport[i]] = Cudd_ReadInvPerm (ddMgr,
+- Hdr->permids[i]);
+- }
+- break;
+- case DDDMP_VAR_MATCHAUXIDS:
+- if (Hdr->auxids == NULL) {
+- (void) fprintf (stderr,
+- "DdLoad Error: variable auxids matching requested\n");
+- (void) fprintf (stderr, "but .auxids not found in BDD file\n");
+- (void) fprintf (stderr, "Matching IDs forced.\n");
+- fflush (stderr);
+- varMatchMode = DDDMP_VAR_MATCHIDS;
+- goto again_matchmode;
+- }
+- /* find max auxid value to alloc invaux array */
+- for (i=0,maxaux= -1; i<nddvars; i++) {
+- if (varmatchauxids[i]>maxaux) {
+- maxaux = varmatchauxids[i];
+- }
+- }
+- /* generate invaux array */
+- invauxids = DDDMP_ALLOC (int, maxaux+1);
+- Dddmp_CheckAndGotoLabel (invauxids==NULL, "Error allocating memory.",
+- failure);
+-
+- for (i=0; i<=maxaux; i++) {
+- invauxids[i] = -1;
+- }
+-
+- for (i=0; i<Hdr->nsuppvars; i++) {
+- invauxids[varmatchauxids[Hdr->ids[i]]] = Hdr->ids[i];
+- }
+-
+- /* generate convertids array */
+- for (i=0; i<Hdr->nsuppvars; i++) {
+- if ((Hdr->auxids[i]>maxaux) || (invauxids[Hdr->auxids[i]]<0)) {
+- (void) fprintf (stderr,
+- "DdLoad Error: auxid %d not found in DD manager.\n",
+- Hdr->auxids[i]);
+- (void) fprintf (stderr, "ID matching forced (%d).\n", i);
+- (void) fprintf (stderr,
+- "Beware of possible overlappings with other variables\n");
+- fflush (stderr);
+- convertids[permsupport[i]] = i;
+- } else {
+- convertids[permsupport[i]] = invauxids[Hdr->auxids[i]];
+- }
+- }
+- break;
+- case DDDMP_VAR_MATCHNAMES:
+- if (Hdr->suppVarNames == NULL) {
+- (void) fprintf (stderr,
+- "DdLoad Error: variable names matching requested\n");
+- (void) fprintf (stderr, "but .suppvarnames not found in BDD file\n");
+- (void) fprintf (stderr, "Matching IDs forced.\n");
+- fflush (stderr);
+- varMatchMode = DDDMP_VAR_MATCHIDS;
+- goto again_matchmode;
+- }
+-
+- /* generate invaux array */
+- invauxids = DDDMP_ALLOC (int, Hdr->nsuppvars);
+- Dddmp_CheckAndGotoLabel (invauxids==NULL, "Error allocating memory.",
+- failure);
+-
+- for (i=0; i<Hdr->nsuppvars; i++) {
+- invauxids[i] = -1;
+- }
+-
+- for (i=0; i<nddvars; i++) {
+- if (varmatchnames[i]==NULL) {
+- (void) fprintf (stderr,
+- "DdLoad Warning: NULL match variable name (id: %d). Ignored.\n",
+- i);
+- fflush (stderr);
+- }
+- else
+- if ((j=FindVarname(varmatchnames[i],sortedvarnames,Hdr->nsuppvars))
+- >=0) {
+- Dddmp_Assert (j<Hdr->nsuppvars, "j<Hdr->nsuppvars");
+- invauxids[j] = i;
+- }
+- }
+- /* generate convertids array */
+- for (i=0; i<Hdr->nsuppvars; i++) {
+- Dddmp_Assert (Hdr->suppVarNames[i]!=NULL,
+- "Hdr->suppVarNames[i] != NULL");
+- j=FindVarname(Hdr->suppVarNames[i],sortedvarnames,Hdr->nsuppvars);
+- Dddmp_Assert ((j>=0) && (j<Hdr->nsuppvars),
+- "(j>=0) && (j<Hdr->nsuppvars)");
+- if (invauxids[j]<0) {
+- fprintf (stderr,
+- "DdLoad Error: varname %s not found in DD manager.",
+- Hdr->suppVarNames[i]);
+- fprintf (stderr, "ID matching forced (%d)\n", i);
+- fflush (stderr);
+- convertids[permsupport[i]]=i;
+- } else {
+- convertids[permsupport[i]] = invauxids[j];
+- }
+- }
+- break;
+- case DDDMP_VAR_COMPOSEIDS:
+- for (i=0; i<Hdr->nsuppvars; i++) {
+- convertids[permsupport[i]] = varcomposeids[Hdr->ids[i]];
+- }
+- break;
+- }
+-
+- maxv = (-1);
+- for (i=0; i<Hdr->nsuppvars; i++) {
+- if (convertids[i] > maxv) {
+- maxv = convertids[i];
+- }
+- }
+-
+- invconvertids = DDDMP_ALLOC (int, maxv+1);
+- Dddmp_CheckAndGotoLabel (invconvertids==NULL, "Error allocating memory.",
+- failure);
+-
+- for (i=0; i<=maxv; i++) {
+- invconvertids[i]= -1;
+- }
+-
+- for (i=0; i<Hdr->nsuppvars; i++) {
+- invconvertids[convertids[i]] = i;
+- }
+-
+- pnodes = DDDMP_ALLOC(DdNode *,(Hdr->nnodes+1));
+- Dddmp_CheckAndGotoLabel (pnodes==NULL, "Error allocating memory.",
+- failure);
+-
+- if (Hdr->nsuppvars < 256) {
+- pvars1byte = DDDMP_ALLOC(unsigned char,(Hdr->nnodes+1));
+- Dddmp_CheckAndGotoLabel (pvars1byte==NULL, "Error allocating memory.",
+- failure);
+- }
+- else if (Hdr->nsuppvars < 0xffff) {
+- pvars2byte = DDDMP_ALLOC(unsigned short,(Hdr->nnodes+1));
+- Dddmp_CheckAndGotoLabel (pvars2byte==NULL, "Error allocating memory.",
+- failure);
+- } else {
+- (void) fprintf (stderr,
+- "DdLoad Error: more than %d variables. Not supported.\n", 0xffff);
+- fflush (stderr);
+- goto failure;
+- }
+-
+- /*-------------- Deal With Nodes ... One Row File at a Time --------------*/
+-
+- for (i=1; i<=Hdr->nnodes; i++) {
+-
+- Dddmp_CheckAndGotoLabel (feof(fp),
+- "Unexpected EOF While Reading DD Nodes.", failure);
+-
+- switch (mode) {
+-
+- /*
+- * Text FORMAT
+- */
+-
+- case DDDMP_MODE_TEXT:
+-
+- switch (Hdr->varinfo) {
+- case DDDMP_VARIDS:
+- case DDDMP_VARPERMIDS:
+- case DDDMP_VARAUXIDS:
+- case DDDMP_VARNAMES:
+- retValue = fscanf(fp, "%d %*s %s %d %d\n", &id, buf, &idT, &idE);
+- Dddmp_CheckAndGotoLabel (retValue<4,
+- "Error Reading Nodes in Text Mode.", failure);
+- break;
+- case DDDMP_VARDEFAULT:
+- retValue = fscanf(fp, "%d %s %d %d\n", &id, buf, &idT, &idE);
+- Dddmp_CheckAndGotoLabel (retValue<4,
+- "Error Reading Nodes in Text Mode.", failure);
+- break;
+- }
+-#ifdef DDDMP_DEBUG
+- Dddmp_Assert (id==i, "id == i");
+-#endif
+- if (idT==0 && idE==0) {
+- /* leaf node: a constant */
+- if (strcmp(buf, "1") == 0) {
+- pnodes[i] = Cudd_ReadOne (ddMgr);
+- } else {
+- /* this is an ADD constant ! */
+- if (strcmp(buf, "0") == 0) {
+- pnodes[i] = Cudd_ReadZero (ddMgr);
+- } else {
+- addConstant = atof(buf);
+- pnodes[i] = Cudd_addConst (ddMgr,
+- (CUDD_VALUE_TYPE) addConstant);
+- }
+- }
+-
+- /* StQ 11.02.2004:
+- Bug fixed --> Reference All Nodes for ADD */
+- Cudd_Ref (pnodes[i]);
+- Dddmp_CheckAndGotoLabel (pnodes[i]==NULL, "NULL pnodes.",
+- failure);
+- continue;
+- } else {
+-#ifdef DDDMP_DEBUG
+- Dddmp_Assert (idT>0, "id > 0");
+-#endif
+- var = atoi(buf);
+- T = pnodes[idT];
+- if(idE<0) {
+- idE = -idE;
+- E = pnodes[idE];
+- E = Cudd_Not(E);
+- } else {
+- E = pnodes[idE];
+- }
+- }
+-
+- break;
+-
+- /*
+- * Binary FORMAT
+- */
+-
+- case DDDMP_MODE_BINARY:
+-
+- Dddmp_CheckAndGotoLabel (DddmpReadCode(fp,&code) == 0,
+- "Error Reading witn ReadCode.", failure);
+-
+- switch (code.V) {
+- case DDDMP_TERMINAL:
+- /* only 1 terminal presently supported */
+- pnodes[i] = Cudd_ReadOne (ddMgr);
+- continue;
+- break;
+- case DDDMP_RELATIVE_1:
+- break;
+- case DDDMP_RELATIVE_ID:
+- case DDDMP_ABSOLUTE_ID:
+- size = DddmpReadInt (fp, &var);
+- Dddmp_CheckAndGotoLabel (size==0, "Error reading size.",
+- failure);
+- break;
+- }
+-
+- switch (code.T) {
+- case DDDMP_TERMINAL:
+- idT = 1;
+- break;
+- case DDDMP_RELATIVE_1:
+- idT = i-1;
+- break;
+- case DDDMP_RELATIVE_ID:
+- size = DddmpReadInt (fp, &id);
+- Dddmp_CheckAndGotoLabel (size==0, "Error reading size.",
+- failure);
+- idT = i-id;
+- break;
+- case DDDMP_ABSOLUTE_ID:
+- size = DddmpReadInt (fp, &idT);
+- Dddmp_CheckAndGotoLabel (size==0, "Error reading size.",
+- failure);
+- break;
+- }
+-
+- switch (code.E) {
+- case DDDMP_TERMINAL:
+- idE = 1;
+- break;
+- case DDDMP_RELATIVE_1:
+- idE = i-1;
+- break;
+- case DDDMP_RELATIVE_ID:
+- size = DddmpReadInt (fp, &id);
+- Dddmp_CheckAndGotoLabel (size==0, "Error reading size.",
+- failure);
+- idE = i-id;
+- break;
+- case DDDMP_ABSOLUTE_ID:
+- size = DddmpReadInt (fp, &idE);
+- Dddmp_CheckAndGotoLabel (size==0, "Error reading size.",
+- failure);
+- break;
+- }
+-
+-#ifdef DDDMP_DEBUG
+- Dddmp_Assert (idT<i, "id<i");
+-#endif
+- T = pnodes[idT];
+- if (cuddIsConstant(T))
+- vT = Hdr->nsuppvars;
+- else {
+- if (pvars1byte != NULL)
+- vT = pvars1byte[idT];
+- else if (pvars2byte != NULL)
+- vT = pvars2byte[idT];
+- else
+- vT = invconvertids[T->index];
+- }
+-#ifdef DDDMP_DEBUG
+- Dddmp_Assert (vT>0, "vT > 0");
+- Dddmp_Assert (vT<=Hdr->nsuppvars, "vT <= Hdr->nsuppvars");
+-#endif
+-
+-#ifdef DDDMP_DEBUG
+- Dddmp_Assert (idE<i, "idE < i");
+-#endif
+- E = pnodes[idE];
+- if (cuddIsConstant(E))
+- vE = Hdr->nsuppvars;
+- else {
+- if (pvars1byte != NULL)
+- vE = pvars1byte[idE];
+- else if (pvars2byte != NULL)
+- vE = pvars2byte[idE];
+- else
+- vE = invconvertids[E->index];
+- }
+-#ifdef DDDMP_DEBUG
+- Dddmp_Assert (vE>0, "vE > 0");
+- Dddmp_Assert (vE<=Hdr->nsuppvars, "vE <= Hdr->nsuppvars");
+-#endif
+-
+- switch (code.V) {
+- case DDDMP_TERMINAL:
+- case DDDMP_ABSOLUTE_ID:
+- break;
+- case DDDMP_RELATIVE_1:
+- var = (vT<vE) ? vT-1 : vE-1;
+- break;
+- case DDDMP_RELATIVE_ID:
+- var = (vT<vE) ? vT-var : vE-var;
+- break;
+- }
+-
+- if (code.Ecompl) {
+- E = Cudd_Not(E);
+- }
+-
+-#ifdef DDDMP_DEBUG
+- Dddmp_Assert (var<Hdr->nsuppvars, "var < Hdr->nsuppvars");
+-#endif
+-
+- break;
+- }
+-
+- if (pvars1byte != NULL) {
+- pvars1byte[i] = (unsigned char) var;
+- } else {
+- if (pvars2byte != NULL) {
+- pvars2byte[i] = (unsigned short) var;
+- }
+- }
+-
+- var = convertids[var];
+- switch (ddType) {
+- case DDDMP_BDD:
+- pnodes[i] = Cudd_bddIte (ddMgr, Cudd_bddIthVar (ddMgr, var),
+- T, E);
+- break;
+- case DDDMP_ADD:
+- {
+- DdNode *tmp = Cudd_addIthVar (ddMgr, var);
+- Cudd_Ref (tmp);
+- pnodes[i] = Cudd_addIte (ddMgr, tmp, T, E);
+- Cudd_RecursiveDeref (ddMgr, tmp);
+- break;
+- }
+- case DDDMP_CNF:
+- case DDDMP_NONE:
+- Dddmp_Warning (1, "Wrong DD Type.");
+- break;
+- }
+-
+- cuddRef (pnodes[i]);
+- }
+-
+- /*------------------------ Deal With the File Tail -----------------------*/
+-
+- fgets (buf, DDDMP_MAXSTRLEN-1,fp);
+- Dddmp_CheckAndGotoLabel (!matchkeywd(buf, ".end"),
+- "Error .end not found.", failure);
+-
+- /* Close File IFF Necessary */
+- if (fileToClose) {
+- fclose (fp);
+- }
+-
+- /* BDD Roots */
+- proots = DDDMP_ALLOC(DdNode *,nRoots);
+- Dddmp_CheckAndGotoLabel (proots==NULL, "Error allocating memory.",
+- failure);
+-
+- for(i=0; i<nRoots; ++i) {
+- switch (rootMatchMode) {
+- case DDDMP_ROOT_MATCHNAMES:
+- for (j=0; j<nRoots; j++) {
+- if (strcmp(rootmatchnames[i], Hdr->rootnames[j]) == 0)
+- break;
+- }
+- if (j>=nRoots) {
+- /* rootname not found */
+- fprintf (stderr, "Warning: unable to match root name <%s>\n",
+- rootmatchnames[i]);
+- }
+- break;
+- case DDDMP_ROOT_MATCHLIST:
+- j = i;
+- break;
+- }
+-
+- id = Hdr->rootids[i];
+- if (id==0) {
+- (void) fprintf (stderr, "DdLoad Warning: NULL root found in file\n");
+- fflush (stderr);
+- f = NULL;
+- } else {
+- if (id<0) {
+- f = Cudd_Not(pnodes[-id]);
+- } else {
+- f = pnodes[id];
+- }
+- }
+- proots[i] = f;
+-
+- cuddRef (f);
+- } /* end for i = 0..nRoots */
+-
+- /*
+- * Decrease Reference for all Nodes
+- */
+-
+- /* StQ 11.02.2004:
+- Bug fixed --> De-Reference All Nodes for ADD */
+- for (i=1; i<=Hdr->nnodes; i++) {
+- f = pnodes[i];
+- Cudd_RecursiveDeref (ddMgr, f);
+- }
+-
+- /*
+- * Free Memory: load_end label
+- */
+-
+-load_end:
+-
+- DddmpFreeHeader(Hdr);
+-
+- DDDMP_FREE (pnodes);
+- DDDMP_FREE (pvars1byte);
+- DDDMP_FREE (pvars2byte);
+-
+- /* variable names are not freed because they were shared with varnames */
+- DDDMP_FREE (sortedvarnames);
+-
+- DDDMP_FREE (permsupport);
+- DDDMP_FREE (convertids);
+- DDDMP_FREE (invconvertids);
+- DDDMP_FREE (invauxids);
+-
+- *pproots = proots;
+- return (nRoots);
+-
+- /*
+- * Failure Condition
+- */
+-
+-failure:
+-
+- if (fileToClose) {
+- fclose (fp);
+- }
+-
+- nRoots = 0; /* return 0 on error ! */
+-
+- DDDMP_FREE (proots);
+-
+- goto load_end; /* this is done to free memory */
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads a the header of a dump file representing the
+- argument BDDs.
+- ]
+-
+- Description [Reads the header of a dump file. Builds a Dddmp_Hdr_t struct
+- containing all infos in the header, for next manipulations.
+- ]
+-
+- SideEffects [none]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static Dddmp_Hdr_t *
+-DddmpBddReadHeader (
+- char *file /* IN: file name */,
+- FILE *fp /* IN: file pointer */
+- )
+-{
+- Dddmp_Hdr_t *Hdr = NULL;
+- char buf[DDDMP_MAXSTRLEN];
+- int retValue, fileToClose = 0;
+-
+- if (fp == NULL) {
+- fp = fopen (file, "r");
+- Dddmp_CheckAndGotoLabel (fp==NULL, "Error opening file.",
+- failure);
+- fileToClose = 1;
+- }
+-
+- /* START HEADER */
+-
+- Hdr = DDDMP_ALLOC (Dddmp_Hdr_t,1);
+- if (Hdr == NULL) {
+- return NULL;
+- }
+- Hdr->ver = NULL;
+- Hdr->mode = 0;
+- Hdr->ddType = DDDMP_BDD;
+- Hdr->varinfo = DDDMP_VARIDS;
+- Hdr->dd = NULL;
+- Hdr->nnodes = 0;
+- Hdr->nVars = 0;
+- Hdr->nsuppvars = 0;
+- Hdr->suppVarNames = NULL;
+- Hdr->orderedVarNames = NULL;
+- Hdr->ids = NULL;
+- Hdr->permids = NULL;
+- Hdr->auxids = NULL;
+- Hdr->cnfids = NULL;
+- Hdr->nRoots = 0;
+- Hdr->rootids = NULL;
+- Hdr->rootnames = NULL;
+- Hdr->nAddedCnfVar = 0;
+- Hdr->nVarsCnf = 0;
+- Hdr->nClausesCnf = 0;
+-
+- while (fscanf(fp, "%s", buf)!=EOF) {
+-
+- /* comment */
+- if (buf[0] == '#') {
+- fgets(buf,DDDMP_MAXSTRLEN,fp);
+- continue;
+- }
+-
+- Dddmp_CheckAndGotoLabel (buf[0] != '.',
+- "Error; line must begin with '.' or '#'.",
+- failure);
+-
+- if (matchkeywd(buf, ".ver")) {
+- /* this not checked so far: only read */
+- retValue = fscanf (fp, "%s", buf);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error reading from file.",
+- failure);
+-
+- Hdr->ver=DddmpStrDup(buf);
+- Dddmp_CheckAndGotoLabel (Hdr->ver==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".add")) {
+- Hdr->ddType = DDDMP_ADD;
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".bdd")) {
+- Hdr->ddType = DDDMP_BDD;
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".mode")) {
+- retValue = fscanf (fp, "%s", buf);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error reading to file.",
+- failure);
+-
+- Hdr->mode = buf[0];
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".varinfo")) {
+- int readMe;
+- retValue = fscanf (fp, "%d", &readMe);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error reading file.",
+- failure);
+- Hdr->varinfo = (Dddmp_VarInfoType) readMe;
+-
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".dd")) {
+- retValue = fscanf (fp, "%s", buf);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error reading file.",
+- failure);
+-
+- Hdr->dd = DddmpStrDup (buf);
+- Dddmp_CheckAndGotoLabel (Hdr->dd==NULL, "Error allocating memory.",
+- failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".nnodes")) {
+- retValue = fscanf (fp, "%d", &(Hdr->nnodes));
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error reading file.",
+- failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".nvars")) {
+- retValue = fscanf (fp, "%d", &(Hdr->nVars));
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error reading file.",
+- failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".nsuppvars")) {
+- retValue = fscanf (fp, "%d", &(Hdr->nsuppvars));
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error reading file.",
+- failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".orderedvarnames")) {
+- Hdr->orderedVarNames = DddmpStrArrayRead (fp, Hdr->nVars);
+- Dddmp_CheckAndGotoLabel (Hdr->orderedVarNames==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".suppvarnames") ||
+- ((strcmp (Hdr->ver, "DDDMP-1.0") == 0) &&
+- matchkeywd (buf, ".varnames"))) {
+- Hdr->suppVarNames = DddmpStrArrayRead (fp, Hdr->nsuppvars);
+- Dddmp_CheckAndGotoLabel (Hdr->suppVarNames==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if matchkeywd(buf, ".ids") {
+- Hdr->ids = DddmpIntArrayRead(fp,Hdr->nsuppvars);
+- Dddmp_CheckAndGotoLabel (Hdr->ids==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".permids")) {
+- Hdr->permids = DddmpIntArrayRead(fp,Hdr->nsuppvars);
+- Dddmp_CheckAndGotoLabel (Hdr->permids==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".auxids")) {
+- Hdr->auxids = DddmpIntArrayRead(fp,Hdr->nsuppvars);
+- Dddmp_CheckAndGotoLabel (Hdr->auxids==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".nroots")) {
+- retValue = fscanf (fp, "%d", &(Hdr->nRoots));
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error reading file.",
+- failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".rootids")) {
+- Hdr->rootids = DddmpIntArrayRead(fp,Hdr->nRoots);
+- Dddmp_CheckAndGotoLabel (Hdr->rootids==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".rootnames")) {
+- Hdr->rootnames = DddmpStrArrayRead(fp,Hdr->nRoots);
+- Dddmp_CheckAndGotoLabel (Hdr->rootnames==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd(buf, ".nodes")) {
+- fgets(buf,DDDMP_MAXSTRLEN,fp);
+- break;
+- }
+-
+- }
+-
+- /* END HEADER */
+-
+- return (Hdr);
+-
+-failure:
+-
+- if (fileToClose == 1) {
+- fclose (fp);
+- }
+-
+- DddmpFreeHeader(Hdr);
+-
+- return (NULL);
+-}
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Frees the internal header structure.]
+-
+- Description [Frees the internal header structureby freeing all internal
+- fields first.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static void
+-DddmpFreeHeader (
+- Dddmp_Hdr_t *Hdr /* IN: pointer to header */
+- )
+-{
+- DDDMP_FREE (Hdr->ver);
+- DDDMP_FREE (Hdr->dd);
+- DddmpStrArrayFree (Hdr->orderedVarNames, Hdr->nVars);
+- DddmpStrArrayFree (Hdr->suppVarNames, Hdr->nsuppvars);
+- DDDMP_FREE (Hdr->ids);
+- DDDMP_FREE (Hdr->permids);
+- DDDMP_FREE (Hdr->auxids);
+- DDDMP_FREE (Hdr->rootids);
+- DddmpStrArrayFree (Hdr->rootnames, Hdr->nRoots);
+-
+- DDDMP_FREE (Hdr);
+-
+- return;
+-}
+-
+-
+-
+diff --git a/Cudd/dddmp/dddmpLoadCnf.c b/Cudd/dddmp/dddmpLoadCnf.c
+deleted file mode 100644
+index 35bec27..0000000
+--- a/Cudd/dddmp/dddmpLoadCnf.c
++++ /dev/null
+@@ -1,1072 +0,0 @@
+-/**CFile**********************************************************************
+-
+- FileName [dddmpLoadCnf.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Functions to read in CNF from file as BDDs.]
+-
+- Description [Functions to read in CNF from file as BDDs.
+- ]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include "dddmpInt.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Constant declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-#define DDDMP_MAX_CNF_ROW_LENGTH 1000
+-#define DDDMP_DEBUG_CNF 0
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-#define matchkeywd(str,key) (strncmp(str,key,strlen(key))==0)
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-static int DddmpCuddDdArrayLoadCnf(DdManager *ddMgr, Dddmp_RootMatchType rootmatchmode, char **rootmatchnames, Dddmp_VarMatchType varmatchmode, char **varmatchnames, int *varmatchauxids, int *varcomposeids, int mode, char *file, FILE *fp, DdNode ***rootsPtrPtr, int *nRoots);
+-static Dddmp_Hdr_t * DddmpBddReadHeaderCnf(char *file, FILE *fp);
+-static void DddmpFreeHeaderCnf(Dddmp_Hdr_t *Hdr);
+-static int DddmpReadCnfClauses(Dddmp_Hdr_t *Hdr, int ***cnfTable, FILE *fp);
+-static int DddmpCnfClauses2Bdd(Dddmp_Hdr_t *Hdr, DdManager *ddMgr, int **cnfTable, int mode, DdNode ***rootsPtrPtr);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads a dump file in a CNF format.]
+-
+- Description [Reads a dump file representing the argument BDD in a
+- CNF formula.
+- Dddmp_cuddBddArrayLoadCnf is used through a dummy array.
+- The results is returned in different formats depending on the
+- mode selection:
+- IFF mode == 0 Return the Clauses without Conjunction
+- IFF mode == 1 Return the sets of BDDs without Quantification
+- IFF mode == 2 Return the sets of BDDs AFTER Existential Quantification
+- ]
+-
+- SideEffects [A vector of pointers to DD nodes is allocated and freed.]
+-
+- SeeAlso [Dddmp_cuddBddLoad, Dddmp_cuddBddArrayLoad]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddBddLoadCnf (
+- DdManager *ddMgr /* IN: DD Manager */,
+- Dddmp_VarMatchType varmatchmode /* IN: storing mode selector */,
+- char **varmatchnames /* IN: array of variable names, by IDs */,
+- int *varmatchauxids /* IN: array of variable auxids, by IDs */,
+- int *varcomposeids /* IN: array of new ids accessed, by IDs */,
+- int mode /* IN: computation mode */,
+- char *file /* IN: file name */,
+- FILE *fp /* IN: file pointer */,
+- DdNode ***rootsPtrPtr /* OUT: array of returned BDD roots */,
+- int *nRoots /* OUT: number of BDDs returned */
+- )
+-{
+- int i, retValue;
+-
+- retValue = Dddmp_cuddBddArrayLoadCnf (ddMgr, DDDMP_ROOT_MATCHLIST, NULL,
+- varmatchmode, varmatchnames, varmatchauxids, varcomposeids, mode,
+- file, fp, rootsPtrPtr, nRoots);
+-
+- if (retValue == DDDMP_FAILURE) {
+- return (DDDMP_FAILURE);
+- }
+-
+- if (*nRoots > 1) {
+- fprintf (stderr,
+- "Warning: %d BDD roots found in file. Only first retrieved.\n",
+- *nRoots);
+- for (i=1; i<*nRoots; i++) {
+- Cudd_RecursiveDeref (ddMgr, *rootsPtrPtr[i]);
+- }
+- }
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads a dump file in a CNF format.]
+-
+- Description [Reads a dump file representing the argument BDD in a
+- CNF formula.
+- ]
+-
+- SideEffects [A vector of pointers to DD nodes is allocated and freed.]
+-
+- SeeAlso [Dddmp_cuddBddArrayLoad]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddBddArrayLoadCnf (
+- DdManager *ddMgr /* IN: DD Manager */,
+- Dddmp_RootMatchType rootmatchmode/* IN: storing mode selector */,
+- char **rootmatchnames /* IN: sorted names for loaded roots */,
+- Dddmp_VarMatchType varmatchmode /* IN: storing mode selector */,
+- char **varmatchnames /* IN: array of variable names, by IDs */,
+- int *varmatchauxids /* IN: array of variable auxids, by IDs */,
+- int *varcomposeids /* IN: array of new ids, by IDs */,
+- int mode /* IN: computation Mode */,
+- char *file /* IN: file name */,
+- FILE *fp /* IN: file pointer */,
+- DdNode ***rootsPtrPtr /* OUT: array of returned BDD roots */,
+- int *nRoots /* OUT: number of BDDs returned */
+- )
+-{
+- int retValue;
+-
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- int retValueBis;
+-
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During CNF Load.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During CNF Load.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-
+- retValue = DddmpCuddDdArrayLoadCnf (ddMgr, rootmatchmode,
+- rootmatchnames, varmatchmode, varmatchnames, varmatchauxids,
+- varcomposeids, mode, file, fp, rootsPtrPtr, nRoots);
+-
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During CNF Load.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During CNF Load.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-
+- return (retValue);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads the header of a dump file representing the argument BDDs]
+-
+- Description [Reads the header of a dump file representing the argument BDDs.
+- Returns main information regarding DD type stored in the file,
+- the variable ordering used, the number of variables, etc.
+- It reads only the header of the file NOT the BDD/ADD section.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso [Dddmp_cuddBddArrayLoad]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddHeaderLoadCnf (
+- int *nVars /* OUT: number of DD variables */,
+- int *nsuppvars /* OUT: number of support variables */,
+- char ***suppVarNames /* OUT: array of support variable names */,
+- char ***orderedVarNames /* OUT: array of variable names */,
+- int **varIds /* OUT: array of variable ids */,
+- int **varComposeIds /* OUT: array of permids ids */,
+- int **varAuxIds /* OUT: array of variable aux ids */,
+- int *nRoots /* OUT: number of root in the file */,
+- char *file /* IN: file name */,
+- FILE *fp /* IN: file pointer */
+- )
+-{
+- Dddmp_Hdr_t *Hdr;
+- int i, fileToClose;
+- char **tmpOrderedVarNames = NULL;
+- char **tmpSuppVarNames = NULL;
+- int *tmpVarIds = NULL;
+- int *tmpVarComposeIds = NULL;
+- int *tmpVarAuxIds = NULL;
+-
+- fileToClose = 0;
+- if (fp == NULL) {
+- fp = fopen (file, "r");
+- Dddmp_CheckAndGotoLabel (fp==NULL, "Error opening file.",
+- failure);
+- fileToClose = 1;
+- }
+-
+- Hdr = DddmpBddReadHeaderCnf (NULL, fp);
+-
+- Dddmp_CheckAndGotoLabel (Hdr->nnodes==0, "Zero number of nodes.",
+- failure);
+-
+- /*
+- * Number of variables (tot and support)
+- */
+-
+- *nVars = Hdr->nVars;
+- *nsuppvars = Hdr->nsuppvars;
+-
+- /*
+- * Support Varnames
+- */
+-
+- if (Hdr->suppVarNames != NULL) {
+- tmpSuppVarNames = DDDMP_ALLOC (char *, *nsuppvars);
+- Dddmp_CheckAndGotoLabel (tmpSuppVarNames==NULL, "Error allocating memory.",
+- failure);
+-
+- for (i=0; i<*nsuppvars; i++) {
+- tmpSuppVarNames[i] = DDDMP_ALLOC (char,
+- (strlen (Hdr->suppVarNames[i]) + 1));
+- Dddmp_CheckAndGotoLabel (Hdr->suppVarNames[i]==NULL,
+- "Support Variable Name Missing in File.", failure);
+- strcpy (tmpSuppVarNames[i], Hdr->suppVarNames[i]);
+- }
+-
+- *suppVarNames = tmpSuppVarNames;
+- } else {
+- *suppVarNames = NULL;
+- }
+-
+- /*
+- * Ordered Varnames
+- */
+-
+- if (Hdr->orderedVarNames != NULL) {
+- tmpOrderedVarNames = DDDMP_ALLOC (char *, *nVars);
+- Dddmp_CheckAndGotoLabel (tmpOrderedVarNames==NULL,
+- "Error allocating memory.", failure);
+-
+- for (i=0; i<*nVars; i++) {
+- tmpOrderedVarNames[i] = DDDMP_ALLOC (char,
+- (strlen (Hdr->orderedVarNames[i]) + 1));
+- Dddmp_CheckAndGotoLabel (Hdr->orderedVarNames[i]==NULL,
+- "Support Variable Name Missing in File.", failure);
+- strcpy (tmpOrderedVarNames[i], Hdr->orderedVarNames[i]);
+- }
+-
+- *orderedVarNames = tmpOrderedVarNames;
+- } else {
+- *orderedVarNames = NULL;
+- }
+-
+- /*
+- * Variable Ids
+- */
+-
+- if (Hdr->ids != NULL) {
+- tmpVarIds = DDDMP_ALLOC (int, *nsuppvars);
+- Dddmp_CheckAndGotoLabel (tmpVarIds==NULL, "Error allocating memory.",
+- failure);
+- for (i=0; i<*nsuppvars; i++) {
+- tmpVarIds[i] = Hdr->ids[i];
+- }
+-
+- *varIds = tmpVarIds;
+- } else {
+- *varIds = NULL;
+- }
+-
+- /*
+- * Variable Compose Ids
+- */
+-
+- if (Hdr->permids != NULL) {
+- tmpVarComposeIds = DDDMP_ALLOC (int, *nsuppvars);
+- Dddmp_CheckAndGotoLabel (tmpVarComposeIds==NULL,
+- "Error allocating memory.", failure);
+- for (i=0; i<*nsuppvars; i++) {
+- tmpVarComposeIds[i] = Hdr->permids[i];
+- }
+-
+- *varComposeIds = tmpVarComposeIds;
+- } else {
+- *varComposeIds = NULL;
+- }
+-
+- /*
+- * Variable Auxiliary Ids
+- */
+-
+- if (Hdr->auxids != NULL) {
+- tmpVarAuxIds = DDDMP_ALLOC (int, *nsuppvars);
+- Dddmp_CheckAndGotoLabel (tmpVarAuxIds==NULL,
+- "Error allocating memory.", failure);
+- for (i=0; i<*nsuppvars; i++) {
+- tmpVarAuxIds[i] = Hdr->auxids[i];
+- }
+-
+- *varAuxIds = tmpVarAuxIds;
+- } else {
+- *varAuxIds = NULL;
+- }
+-
+- /*
+- * Number of roots
+- */
+-
+- *nRoots = Hdr->nRoots;
+-
+- /*
+- * Free and Return
+- */
+-
+- if (fileToClose == 1) {
+- fclose (fp);
+- }
+-
+- DddmpFreeHeaderCnf (Hdr);
+-
+- return (DDDMP_SUCCESS);
+-
+- failure:
+- return (DDDMP_FAILURE);
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads a dump file representing the argument BDDs in CNF
+- format.
+- ]
+-
+- Description [Reads a dump file representing the argument BDDs in CNF
+- format.
+- IFF mode == 0 Return the Clauses without Conjunction
+- IFF mode == 1 Return the sets of BDDs without Quantification
+- IFF mode == 2 Return the sets of BDDs AFTER Existential Quantification
+- ]
+-
+- SideEffects [A vector of pointers to DD nodes is allocated and freed.]
+-
+- SeeAlso [Dddmp_cuddBddArrayLoad]
+-
+-******************************************************************************/
+-
+-static int
+-DddmpCuddDdArrayLoadCnf (
+- DdManager *ddMgr /* IN: DD Manager */,
+- Dddmp_RootMatchType rootmatchmode/* IN: storing mode selector */,
+- char **rootmatchnames /* IN: sorted names for loaded roots */,
+- Dddmp_VarMatchType varmatchmode /* IN: storing mode selector */,
+- char **varmatchnames /* IN: array of variable names, by ids */,
+- int *varmatchauxids /* IN: array of variable auxids, by ids */,
+- int *varcomposeids /* IN: array of new ids, by ids */,
+- int mode /* IN: computation mode */,
+- char *file /* IN: file name */,
+- FILE *fp /* IN: file pointer */,
+- DdNode ***rootsPtrPtr /* OUT: array of BDD roots */,
+- int *nRoots /* OUT: number of BDDs returned */
+- )
+-{
+- Dddmp_Hdr_t *Hdr = NULL;
+- int **cnfTable = NULL;
+- int fileToClose = 0;
+- int retValue, i;
+-
+- fileToClose = 0;
+- *rootsPtrPtr = NULL;
+-
+- if (fp == NULL) {
+- fp = fopen (file, "r");
+- Dddmp_CheckAndGotoLabel (fp==NULL, "Error opening file.",
+- failure);
+- fileToClose = 1;
+- }
+-
+- /*--------------------------- Read the Header -----------------------------*/
+-
+- Hdr = DddmpBddReadHeaderCnf (NULL, fp);
+-
+- Dddmp_CheckAndGotoLabel (Hdr->nnodes==0, "Zero number of nodes.",
+- failure);
+-
+- /*------------------------ Read the CNF Clauses ---------------------------*/
+-
+- retValue = DddmpReadCnfClauses (Hdr, &cnfTable, fp);
+-
+- Dddmp_CheckAndGotoLabel (retValue==DDDMP_FAILURE,
+- "Read CNF Clauses Failure.", failure);
+-
+- /*------------------------- From Clauses to BDDs --------------------------*/
+-
+- retValue = DddmpCnfClauses2Bdd (Hdr, ddMgr, cnfTable, mode, rootsPtrPtr);
+-
+- Dddmp_CheckAndGotoLabel (retValue==DDDMP_FAILURE,
+- "CNF Clauses To BDDs Failure.", failure);
+-
+- *nRoots = Hdr->nRoots;
+-
+- if (fileToClose) {
+- fclose (fp);
+- }
+-
+- for (i=0; i<Hdr->nClausesCnf; i++) {
+- DDDMP_FREE (cnfTable[i]);
+- }
+- DDDMP_FREE (cnfTable);
+-
+- DddmpFreeHeaderCnf (Hdr);
+-
+- return (DDDMP_SUCCESS);
+-
+- /*
+- * Failure Condition
+- */
+-
+-failure:
+-
+- if (fileToClose) {
+- fclose (fp);
+- }
+-
+- for (i=0; i<Hdr->nClausesCnf; i++) {
+- DDDMP_FREE (cnfTable[i]);
+- }
+- DDDMP_FREE (cnfTable);
+-
+- DddmpFreeHeaderCnf (Hdr);
+-
+- /* return 0 on error ! */
+- nRoots = 0;
+-
+- return (DDDMP_FAILURE);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads a the header of a dump file representing the argument
+- BDDs.
+- ]
+-
+- Description [Reads the header of a dump file. Builds a Dddmp_Hdr_t struct
+- containing all infos in the header, for next manipulations.
+- ]
+-
+- SideEffects [none]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static Dddmp_Hdr_t *
+-DddmpBddReadHeaderCnf (
+- char *file /* IN: file name */,
+- FILE *fp /* IN: file pointer */
+- )
+-{
+- Dddmp_Hdr_t *Hdr = NULL;
+- char buf[DDDMP_MAXSTRLEN];
+- int nv, nc, retValue, fileToClose = 0;
+-
+- if (fp == NULL) {
+- fp = fopen (file, "r");
+- Dddmp_CheckAndGotoLabel (fp==NULL, "Error opening file.",
+- failure);
+- fileToClose = 1;
+- }
+-
+- /* Start Header */
+- Hdr = DDDMP_ALLOC (Dddmp_Hdr_t, 1);
+- if (Hdr == NULL) {
+- return NULL;
+- }
+-
+- Hdr->ver = NULL;
+- Hdr->mode = 0;
+- Hdr->ddType = DDDMP_CNF;
+- Hdr->varinfo = DDDMP_VARIDS;
+- Hdr->dd = NULL;
+- Hdr->nnodes = 0;
+- Hdr->nVars = 0;
+- Hdr->nsuppvars = 0;
+- Hdr->orderedVarNames = NULL;
+- Hdr->suppVarNames = NULL;
+- Hdr->ids = NULL;
+- Hdr->permids = NULL;
+- Hdr->auxids = NULL;
+- Hdr->cnfids = NULL;
+- Hdr->nRoots = 0;
+- Hdr->rootids = NULL;
+- Hdr->rootnames = NULL;
+- Hdr->nAddedCnfVar = 0;
+- Hdr->nVarsCnf = 0;
+- Hdr->nClausesCnf = 0;
+-
+- while (fscanf (fp, "%s", buf) != EOF) {
+-
+- /* Init Problem Line */
+- if (buf[0] == 'p') {
+- fscanf (fp, "%*s %d %d", &nv, &nc);
+- Hdr->nVarsCnf = nv;
+- Hdr->nClausesCnf = nc;
+- break;
+- }
+-
+- /* CNF Comment Line */
+- if (buf[0] == 'c') {
+- if (fscanf (fp, "%s", buf) == EOF) {
+- break;
+- }
+- }
+-
+- /* Skip Comment? */
+- if (buf[0] != '.') {
+- fgets (buf, DDDMP_MAXSTRLEN, fp);
+- continue;
+- }
+-
+- if (matchkeywd (buf, ".ver")) {
+- /* this not checked so far: only read */
+- retValue = fscanf (fp, "%s", buf);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error reading from file.",
+- failure);
+-
+- Hdr->ver=DddmpStrDup(buf);
+- Dddmp_CheckAndGotoLabel (Hdr->ver==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd (buf, ".dd")) {
+- retValue = fscanf (fp, "%s", buf);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error reading file.",
+- failure);
+-
+- Hdr->dd = DddmpStrDup (buf);
+- Dddmp_CheckAndGotoLabel (Hdr->dd==NULL, "Error allocating memory.",
+- failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd (buf, ".nnodes")) {
+- retValue = fscanf (fp, "%d", &(Hdr->nnodes));
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error reading file.",
+- failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd (buf, ".nvars")) {
+- retValue = fscanf (fp, "%d", &(Hdr->nVars));
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error reading file.",
+- failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd (buf, ".nsuppvars")) {
+- retValue = fscanf (fp, "%d", &(Hdr->nsuppvars));
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error reading file.",
+- failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd (buf, ".orderedvarnames")) {
+- Hdr->orderedVarNames = DddmpStrArrayRead (fp, Hdr->nVars);
+- Dddmp_CheckAndGotoLabel (Hdr->orderedVarNames==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd (buf, ".suppvarnames")) {
+- Hdr->suppVarNames = DddmpStrArrayRead (fp, Hdr->nsuppvars);
+- Dddmp_CheckAndGotoLabel (Hdr->suppVarNames==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if matchkeywd (buf, ".ids") {
+- Hdr->ids = DddmpIntArrayRead(fp,Hdr->nsuppvars);
+- Dddmp_CheckAndGotoLabel (Hdr->ids==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd (buf, ".permids")) {
+- Hdr->permids = DddmpIntArrayRead(fp,Hdr->nsuppvars);
+- Dddmp_CheckAndGotoLabel (Hdr->permids==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd (buf, ".auxids")) {
+- Hdr->auxids = DddmpIntArrayRead(fp,Hdr->nsuppvars);
+- Dddmp_CheckAndGotoLabel (Hdr->auxids==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd (buf, ".cnfids")) {
+- Hdr->cnfids = DddmpIntArrayRead (fp, Hdr->nsuppvars);
+- Dddmp_CheckAndGotoLabel (Hdr->cnfids==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd (buf, ".nroots")) {
+- retValue = fscanf (fp, "%d", &(Hdr->nRoots));
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error reading file.",
+- failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd (buf, ".rootids")) {
+- Hdr->rootids = DddmpIntArrayRead(fp,Hdr->nRoots);
+- Dddmp_CheckAndGotoLabel (Hdr->rootids==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+- if (matchkeywd (buf, ".rootnames")) {
+- Hdr->rootnames = DddmpStrArrayRead(fp,Hdr->nRoots);
+- Dddmp_CheckAndGotoLabel (Hdr->rootnames==NULL,
+- "Error allocating memory.", failure);
+-
+- continue;
+- }
+-
+-
+- if (matchkeywd (buf, ".nAddedCnfVar")) {
+- retValue = fscanf (fp, "%d", &(Hdr->nAddedCnfVar));
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error reading file.",
+- failure);
+-
+- continue;
+- }
+- }
+-
+- /* END HEADER */
+- return (Hdr);
+-
+-failure:
+-
+- if (fileToClose == 1) {
+- fclose (fp);
+- }
+-
+- DddmpFreeHeaderCnf (Hdr);
+-
+- return (NULL);
+-}
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Frees the internal header structure.]
+-
+- Description [Frees the internal header structure by freeing all internal
+- fields first.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static void
+-DddmpFreeHeaderCnf (
+- Dddmp_Hdr_t *Hdr /* IN: pointer to header */
+- )
+-{
+- if (Hdr==NULL) {
+- return;
+- }
+-
+- DDDMP_FREE (Hdr->ver);
+- DDDMP_FREE (Hdr->dd);
+- DddmpStrArrayFree (Hdr->orderedVarNames, Hdr->nVars);
+- DddmpStrArrayFree (Hdr->suppVarNames, Hdr->nsuppvars);
+- DDDMP_FREE (Hdr->ids);
+- DDDMP_FREE (Hdr->permids);
+- DDDMP_FREE (Hdr->auxids);
+- DDDMP_FREE (Hdr->cnfids);
+- DDDMP_FREE (Hdr->rootids);
+- DddmpStrArrayFree (Hdr->rootnames, Hdr->nRoots);
+-
+- DDDMP_FREE (Hdr);
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Read the CNF clauses from the file in the standard DIMACS
+- format.
+- ]
+-
+- Description [Read the CNF clauses from the file in the standard DIMACS
+- format. Store all the clauses in an internal structure for
+- future transformation into BDDs.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-DddmpReadCnfClauses (
+- Dddmp_Hdr_t *Hdr /* IN: file header */,
+- int ***cnfTable /* OUT: CNF table for clauses */,
+- FILE *fp /* IN: source file */
+- )
+-{
+- char word[DDDMP_MAX_CNF_ROW_LENGTH];
+- int i, j, var;
+- int **cnfTableLocal = NULL;
+- int *clause = NULL;
+-
+- cnfTableLocal = DDDMP_ALLOC (int *, Hdr->nClausesCnf);
+- clause = DDDMP_ALLOC (int, 2*Hdr->nVarsCnf+1);
+-
+- for (i=0; i<Hdr->nClausesCnf; i++) {
+- cnfTableLocal[i] = NULL;
+- }
+-
+- for (i=0; i<=2*Hdr->nVarsCnf; i++) {
+- clause[i] = 0;
+- }
+-
+- i = j = 0;
+- do {
+- if (fscanf(fp, "%s", word)==EOF) {
+- if (j>0) {
+- /* force last zero */
+- strcpy(word,"0");
+- }
+- else break;
+- }
+-
+- /* Check for Comment */
+- if (word[0] == 'c') {
+- /* Comment Found: Skip line */
+- fgets (word, DDDMP_MAX_CNF_ROW_LENGTH-1, fp);
+- break;
+- }
+-
+- var = atoi (word);
+- Dddmp_Assert ((var>=(-Hdr->nVarsCnf))&&(var<=Hdr->nVarsCnf),
+- "Wrong num found");
+- clause[j++] = var;
+- if (var == 0) {
+- cnfTableLocal[i] = DDDMP_ALLOC (int, j);
+- while (--j >=0) {
+- cnfTableLocal[i][j] = clause[j];
+- }
+- i++;
+- j=0;
+- }
+-
+- } while (!feof(fp));
+-
+- Dddmp_Assert (i==Hdr->nClausesCnf,
+- "Wrong number of clauses in file");
+-
+-#if DDDMP_DEBUG_CNF
+- for (i=0; i<Hdr->nClausesCnf; i++) {
+- fprintf (stdout, "[%4d] ", i);
+- j=0;
+- while ((var = cnfTableLocal[i][j++]) != 0) {
+- fprintf (stdout, "%d ", var);
+- }
+- fprintf (stdout, "0\n");
+- }
+-#endif
+-
+- DDDMP_FREE (clause);
+-
+- *cnfTable = cnfTableLocal;
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Transforms CNF clauses into BDDs.]
+-
+- Description [Transforms CNF clauses into BDDs. Clauses are stored in an
+- internal structure previously read. The results can be given in
+- different format according to the mode selection:
+- IFF mode == 0 Return the Clauses without Conjunction
+- IFF mode == 1 Return the sets of BDDs without Quantification
+- IFF mode == 2 Return the sets of BDDs AFTER Existential Quantification
+- ]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-DddmpCnfClauses2Bdd (
+- Dddmp_Hdr_t *Hdr /* IN: file header */,
+- DdManager *ddMgr /* IN: DD Manager */,
+- int **cnfTable /* IN: CNF table for clauses */,
+- int mode /* IN: computation mode */,
+- DdNode ***rootsPtrPtr /* OUT: array of returned BDD roots (by reference) */
+- )
+-{
+- DdNode **rel = NULL;
+- DdNode *lit = NULL;
+- DdNode *tmp1 = NULL;
+- DdNode *tmp2 = NULL;
+- DdNode **rootsPtr = NULL;
+- DdNode *cubeAllVar = NULL;
+- DdNode *cubeBddVar = NULL;
+- DdNode *cubeCnfVar = NULL;
+- int i, j, k, n, var1, var2, fromLine, toLine;
+-
+- rootsPtr = NULL;
+- *rootsPtrPtr = NULL;
+-
+- /*-------------------------- Read The Clauses -----------------------------*/
+-
+- rel = DDDMP_ALLOC (DdNode *, Hdr->nClausesCnf);
+-
+- cubeBddVar = Cudd_ReadOne (ddMgr);
+- cubeCnfVar = Cudd_ReadOne (ddMgr);
+- cubeAllVar = Cudd_ReadOne (ddMgr);
+- Cudd_Ref (cubeBddVar);
+- Cudd_Ref (cubeCnfVar);
+- Cudd_Ref (cubeAllVar);
+-
+- for (i=0; i<Hdr->nClausesCnf; i++) {
+- rel[i] = Cudd_Not (Cudd_ReadOne (ddMgr));
+- Cudd_Ref (rel[i]);
+- j=0;
+- while ((var1 = cnfTable[i][j++]) != 0) {
+-
+- /* Deal with the Literal */
+- var2 = abs (var1);
+- n = (-1);
+- for (k=0; k<Hdr->nsuppvars; k++) {
+- if (Hdr->cnfids[k] == var2) {
+- n = k;
+- break;
+- }
+- }
+-
+- if (n == (-1)) {
+- lit = Cudd_bddIthVar (ddMgr, var2);
+-
+- /* Create the cubes of CNF Variables */
+- tmp1 = Cudd_bddAnd (ddMgr, cubeCnfVar, lit);
+- Cudd_Ref (tmp1);
+- Cudd_RecursiveDeref (ddMgr, cubeCnfVar);
+- cubeCnfVar = tmp1;
+-
+- } else {
+- lit = Cudd_bddIthVar (ddMgr, Hdr->ids[n]);
+-
+- /* Create the cubes of BDD Variables */
+- tmp1 = Cudd_bddAnd (ddMgr, cubeBddVar, lit);
+- Cudd_Ref (tmp1);
+- Cudd_RecursiveDeref (ddMgr, cubeBddVar);
+- cubeBddVar = tmp1;
+- }
+-
+- /* Create the cubes of ALL Variables */
+- tmp1 = Cudd_bddAnd (ddMgr, cubeAllVar, lit);
+- Cudd_Ref (tmp1);
+- Cudd_RecursiveDeref (ddMgr, cubeAllVar);
+- cubeAllVar = tmp1;
+-
+- /* Deal with Relations */
+- if (var1<0) {
+- lit = Cudd_Not (lit);
+- }
+- tmp1 = Cudd_bddOr (ddMgr, rel[i], lit);
+- Cudd_Ref (tmp1);
+- Cudd_RecursiveDeref (ddMgr, rel[i]);
+- rel[i] = tmp1;
+- }
+- }
+-
+- /*
+- * Mode == 0 Return the Clauses without Conjunction
+- */
+-
+- if (mode == 0) {
+- return (DDDMP_SUCCESS);
+- }
+-
+- rootsPtr = DDDMP_ALLOC (DdNode *, Hdr->nRoots);
+- Dddmp_CheckAndGotoLabel (rootsPtr==NULL, "Error allocating memory.",
+- failure);
+-
+- for (i=0; i<Hdr->nRoots; i++) {
+- if (i == (Hdr->nRoots-1)) {
+- fromLine = Hdr->rootids[i] - 1;
+- toLine = Hdr->nClausesCnf;
+- } else {
+- fromLine = Hdr->rootids[i] - 1;
+- toLine = Hdr->rootids[i+1];
+- }
+-
+- tmp1 = Cudd_ReadOne (ddMgr);
+- Cudd_Ref (tmp1);
+- for (j=fromLine; j<toLine; j++) {
+- tmp2 = Cudd_bddAnd (ddMgr, rel[j], tmp1);
+- Cudd_Ref (tmp2);
+- Cudd_RecursiveDeref (ddMgr, tmp1);
+- Cudd_RecursiveDeref (ddMgr, rel[j]);
+- tmp1 = tmp2;
+- }
+- rootsPtr[i] = tmp1;
+- }
+-
+- DDDMP_FREE (rel);
+-
+- /*
+- * Mode == 1 Return the sets of BDDs without Quantification
+- */
+-
+- if (mode == 1) {
+- *rootsPtrPtr = rootsPtr;
+- return (DDDMP_SUCCESS);
+- }
+-
+- /*
+- * Mode == 2 Return the sets of BDDs AFTER Existential Quantification
+- */
+-
+-#if DDDMP_DEBUG_CNF
+- cubeBddVar = Cudd_ReadOne (ddMgr);
+- Cudd_Ref (cubeBddVar);
+- for (i=0; i<Hdr->nsuppvars; i++) {
+- lit = Cudd_bddIthVar (ddMgr, Hdr->ids[i]);
+- tmp1 = Cudd_bddAnd (ddMgr, cubeBddVar, lit);
+- Cudd_Ref (tmp1);
+- Cudd_RecursiveDeref (ddMgr, cubeBddVar);
+- cubeBddVar = tmp1;
+- }
+-
+- cubeCnfVar = Cudd_bddExistAbstract (ddMgr, cubeAllVar, cubeBddVar);
+-#endif
+-
+- for (i=0; i<Hdr->nRoots; i++) {
+-#if DDDMP_DEBUG_CNF
+- fprintf (stdout, "rootsPtr Before Exist:\n");
+- Cudd_PrintDebug (ddMgr, rootsPtr[i], 0, 3);
+-#endif
+-
+- tmp1 = Cudd_bddExistAbstract (ddMgr, rootsPtr[i], cubeCnfVar);
+- Cudd_RecursiveDeref (ddMgr, rootsPtr[i]);
+- rootsPtr[i] = tmp1;
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (stdout, "rootsPtr After Exist:\n");
+- Cudd_PrintDebug (ddMgr, rootsPtr[i], 0, 3);
+-#endif
+- }
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (stdout, "cubeAllVar:\n");
+- Cudd_PrintDebug (ddMgr, cubeAllVar, 0, 3);
+- fprintf (stdout, "cubeBddVar:\n");
+- Cudd_PrintDebug (ddMgr, cubeBddVar, 0, 3);
+- fprintf (stdout, "cubeCnfVar:\n");
+- Cudd_PrintDebug (ddMgr, cubeCnfVar, 0, 3);
+-#endif
+-
+- Cudd_RecursiveDeref (ddMgr, cubeAllVar);
+- Cudd_RecursiveDeref (ddMgr, cubeBddVar);
+- Cudd_RecursiveDeref (ddMgr, cubeCnfVar);
+- *rootsPtrPtr = rootsPtr;
+-
+- return (DDDMP_SUCCESS);
+-
+- /*
+- * Failure Condition
+- */
+-
+-failure:
+-
+- DDDMP_FREE (rel);
+- DDDMP_FREE (rootsPtrPtr);
+-
+- return (DDDMP_FAILURE);
+-}
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+diff --git a/Cudd/dddmp/dddmpNodeAdd.c b/Cudd/dddmp/dddmpNodeAdd.c
+deleted file mode 100644
+index 6fca772..0000000
+--- a/Cudd/dddmp/dddmpNodeAdd.c
++++ /dev/null
+@@ -1,451 +0,0 @@
+-/**CFile**********************************************************************
+-
+- FileName [dddmpNodeAdd.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Functions to handle ADD node infos and numbering]
+-
+- Description [Functions to handle ADD node infos and numbering.
+- ]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include "dddmpInt.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-static int NumberNodeRecurAdd(DdNode *f, int id);
+-static void RemoveFromUniqueRecurAdd(DdManager *ddMgr, DdNode *f);
+-static void RestoreInUniqueRecurAdd(DdManager *ddMgr, DdNode *f);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Removes nodes from unique table and number them]
+-
+- Description [Node numbering is required to convert pointers to integers.
+- Since nodes are removed from unique table, no new nodes should
+- be generated before re-inserting nodes in the unique table
+- (DddmpUnnumberDdNodes()).
+- ]
+-
+- SideEffects [Nodes are temporarily removed from unique table]
+-
+- SeeAlso [RemoveFromUniqueRecurAdd (), NumberNodeRecurAdd (),
+- DddmpUnnumberDdNodesAdd ()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpNumberAddNodes (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: array of BDDs */,
+- int n /* IN: number of BDD roots in the array of BDDs */
+- )
+-{
+- int id=0, i;
+-
+- for (i=0; i<n; i++) {
+- RemoveFromUniqueRecurAdd (ddMgr, f[i]);
+- }
+-
+- for (i=0; i<n; i++) {
+- id = NumberNodeRecurAdd (f[i], id);
+- }
+-
+- return (id);
+-}
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Restores nodes in unique table, loosing numbering]
+-
+- Description [Node indexes are no more needed. Nodes are re-linked in the
+- unique table.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpNumberDdNodeAdd ()]
+-
+-******************************************************************************/
+-
+-void
+-DddmpUnnumberAddNodes (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: array of BDDs */,
+- int n /* IN: number of BDD roots in the array of BDDs */
+- )
+-{
+- int i;
+-
+- for (i=0; i<n; i++) {
+- RestoreInUniqueRecurAdd (ddMgr, f[i]);
+- }
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Write index to node]
+-
+- Description [The index of the node is written in the "next" field of
+- a DdNode struct. LSB is not used (set to 0). It is used as
+- "visited" flag in DD traversals.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpReadNodeIndexAdd (), DddmpSetVisitedAdd (),
+- DddmpVisitedAdd ()]
+-
+-******************************************************************************/
+-
+-void
+-DddmpWriteNodeIndexAdd (
+- DdNode *f /* IN: BDD node */,
+- int id /* IN: index to be written */
+- )
+-{
+- if (1 || !Cudd_IsConstant (f)) {
+- f->next = (struct DdNode *)((ptruint)((id)<<1));
+- }
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads the index of a node]
+-
+- Description [Reads the index of a node. LSB is skipped (used as visited
+- flag).
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpWriteNodeIndexAdd (), DddmpSetVisitedAdd (),
+- DddmpVisitedAdd ()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpReadNodeIndexAdd (
+- DdNode *f /* IN: BDD node */
+- )
+-{
+- if (1 || !Cudd_IsConstant (f)) {
+- return ((int)(((ptruint)(f->next))>>1));
+- } else {
+- return (1);
+- }
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns true if node is visited]
+-
+- Description [Returns true if node is visited]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpSetVisitedAdd (), DddmpClearVisitedAdd ()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpVisitedAdd (
+- DdNode *f /* IN: BDD node to be tested */
+- )
+-{
+- f = Cudd_Regular(f);
+- return ((int)((ptruint)(f->next)) & (01));
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Marks a node as visited]
+-
+- Description [Marks a node as visited]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpVisitedAdd (), DddmpClearVisitedAdd ()]
+-
+-******************************************************************************/
+-
+-void
+-DddmpSetVisitedAdd (
+- DdNode *f /* IN: BDD node to be marked (as visited) */
+- )
+-{
+- f = Cudd_Regular(f);
+-
+- f->next = (DdNode *)(ptruint)((int)((ptruint)(f->next))|01);
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Marks a node as not visited]
+-
+- Description [Marks a node as not visited]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpVisitedAdd (), DddmpSetVisitedAdd ()]
+-
+-******************************************************************************/
+-
+-void
+-DddmpClearVisitedAdd (
+- DdNode *f /* IN: BDD node to be marked (as not visited) */
+- )
+-{
+- f = Cudd_Regular (f);
+-
+- f->next = (DdNode *)(ptruint)((int)((ptruint)(f->next)) & (~01));
+-
+- return;
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Number nodes recursively in post-order]
+-
+- Description [Number nodes recursively in post-order.
+- The "visited" flag is used with inverse polarity, because all nodes
+- were set "visited" when removing them from unique.
+- ]
+-
+- SideEffects ["visited" flags are reset.]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-NumberNodeRecurAdd (
+- DdNode *f /* IN: root of the BDD to be numbered */,
+- int id /* IN/OUT: index to be assigned to the node */
+- )
+-{
+- f = Cudd_Regular(f);
+-
+- if (!DddmpVisitedAdd (f)) {
+- return (id);
+- }
+-
+- if (!cuddIsConstant (f)) {
+- id = NumberNodeRecurAdd (cuddT (f), id);
+- id = NumberNodeRecurAdd (cuddE (f), id);
+- }
+-
+- DddmpWriteNodeIndexAdd (f, ++id);
+- DddmpClearVisitedAdd (f);
+-
+- return (id);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Removes a node from unique table]
+-
+- Description [Removes a node from the unique table by locating the proper
+- subtable and unlinking the node from it. It recurs on the
+- children of the node. Constants remain untouched.
+- ]
+-
+- SideEffects [Nodes are left with the "visited" flag true.]
+-
+- SeeAlso [RestoreInUniqueRecurAdd ()]
+-
+-******************************************************************************/
+-
+-static void
+-RemoveFromUniqueRecurAdd (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: root of the BDD to be extracted */
+- )
+-{
+- DdNode *node, *last, *next;
+- DdNode *sentinel = &(ddMgr->sentinel);
+- DdNodePtr *nodelist;
+- DdSubtable *subtable;
+- int pos, level;
+-
+- f = Cudd_Regular (f);
+-
+- if (DddmpVisitedAdd (f)) {
+- return;
+- }
+-
+- if (!cuddIsConstant (f)) {
+-
+- RemoveFromUniqueRecurAdd (ddMgr, cuddT (f));
+- RemoveFromUniqueRecurAdd (ddMgr, cuddE (f));
+-
+- level = ddMgr->perm[f->index];
+- subtable = &(ddMgr->subtables[level]);
+-
+- nodelist = subtable->nodelist;
+-
+- pos = ddHash (cuddT (f), cuddE (f), subtable->shift);
+- node = nodelist[pos];
+- last = NULL;
+- while (node != sentinel) {
+- next = node->next;
+- if (node == f) {
+- if (last != NULL)
+- last->next = next;
+- else
+- nodelist[pos] = next;
+- break;
+- } else {
+- last = node;
+- node = next;
+- }
+- }
+-
+- f->next = NULL;
+-
+- }
+-
+- DddmpSetVisitedAdd (f);
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Restores a node in unique table]
+-
+- Description [Restores a node in unique table (recursively)]
+-
+- SideEffects [Nodes are not restored in the same order as before removal]
+-
+- SeeAlso [RemoveFromUniqueAdd ()]
+-
+-******************************************************************************/
+-
+-static void
+-RestoreInUniqueRecurAdd (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: root of the BDD to be restored */
+- )
+-{
+- DdNodePtr *nodelist;
+- DdNode *T, *E, *looking;
+- DdNodePtr *previousP;
+- DdSubtable *subtable;
+- int pos, level;
+-#ifdef DDDMP_DEBUG
+- DdNode *node;
+- DdNode *sentinel = &(ddMgr->sentinel);
+-#endif
+-
+- f = Cudd_Regular(f);
+-
+- if (!Cudd_IsComplement (f->next)) {
+- return;
+- }
+-
+- if (cuddIsConstant (f)) {
+- /* StQ 11.02.2004:
+- Bug fixed --> restore NULL within the next field */
+- /*DddmpClearVisitedAdd (f);*/
+- f->next = NULL;
+-
+- return;
+- }
+-
+- RestoreInUniqueRecurAdd (ddMgr, cuddT (f));
+- RestoreInUniqueRecurAdd (ddMgr, cuddE (f));
+-
+- level = ddMgr->perm[f->index];
+- subtable = &(ddMgr->subtables[level]);
+-
+- nodelist = subtable->nodelist;
+-
+- pos = ddHash (cuddT (f), cuddE (f), subtable->shift);
+-
+-#ifdef DDDMP_DEBUG
+- /* verify uniqueness to avoid duplicate nodes in unique table */
+- for (node=nodelist[pos]; node != sentinel; node=node->next)
+- assert(node!=f);
+-#endif
+-
+- T = cuddT (f);
+- E = cuddE (f);
+- previousP = &(nodelist[pos]);
+- looking = *previousP;
+-
+- while (T < cuddT (looking)) {
+- previousP = &(looking->next);
+- looking = *previousP;
+- }
+-
+- while (T == cuddT (looking) && E < cuddE (looking)) {
+- previousP = &(looking->next);
+- looking = *previousP;
+- }
+-
+- f->next = *previousP;
+- *previousP = f;
+-
+- return;
+-}
+-
+-
+diff --git a/Cudd/dddmp/dddmpNodeBdd.c b/Cudd/dddmp/dddmpNodeBdd.c
+deleted file mode 100644
+index 17f7fe3..0000000
+--- a/Cudd/dddmp/dddmpNodeBdd.c
++++ /dev/null
+@@ -1,452 +0,0 @@
+-/**CFile**********************************************************************
+-
+- FileName [dddmpNodeBdd.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Functions to handle BDD node infos and numbering]
+-
+- Description [Functions to handle BDD node infos and numbering.
+- ]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include "dddmpInt.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-static int NumberNodeRecurBdd(DdNode *f, int id);
+-static void RemoveFromUniqueRecurBdd(DdManager *ddMgr, DdNode *f);
+-static void RestoreInUniqueRecurBdd(DdManager *ddMgr, DdNode *f);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Removes nodes from unique table and number them]
+-
+- Description [Node numbering is required to convert pointers to integers.
+- Since nodes are removed from unique table, no new nodes should
+- be generated before re-inserting nodes in the unique table
+- (DddmpUnnumberBddNodes ()).
+- ]
+-
+- SideEffects [Nodes are temporarily removed from unique table]
+-
+- SeeAlso [RemoveFromUniqueRecur(), NumberNodeRecur(),
+- DddmpUnnumberBddNodes ()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpNumberBddNodes (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: array of BDDs */,
+- int n /* IN: number of BDD roots in the array of BDDs */
+- )
+-{
+- int id=0, i;
+-
+- for (i=0; i<n; i++) {
+- RemoveFromUniqueRecurBdd (ddMgr, f[i]);
+- }
+-
+- for (i=0; i<n; i++) {
+- id = NumberNodeRecurBdd (f[i], id);
+- }
+-
+- return (id);
+-}
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Restores nodes in unique table, loosing numbering]
+-
+- Description [Node indexes are no more needed. Nodes are re-linked in the
+- unique table.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpNumberBddNode ()]
+-
+-******************************************************************************/
+-
+-void
+-DddmpUnnumberBddNodes(
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: array of BDDs */,
+- int n /* IN: number of BDD roots in the array of BDDs */
+- )
+-{
+- int i;
+-
+- for (i=0; i<n; i++) {
+- RestoreInUniqueRecurBdd (ddMgr, f[i]);
+- }
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Write index to node]
+-
+- Description [The index of the node is written in the "next" field of
+- a DdNode struct. LSB is not used (set to 0). It is used as
+- "visited" flag in DD traversals.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpReadNodeIndexBdd(), DddmpSetVisitedBdd (),
+- DddmpVisitedBdd ()]
+-
+-******************************************************************************/
+-
+-void
+-DddmpWriteNodeIndexBdd (
+- DdNode *f /* IN: BDD node */,
+- int id /* IN: index to be written */
+- )
+-{
+- if (!Cudd_IsConstant (f)) {
+- f->next = (struct DdNode *)((ptruint)((id)<<1));
+- }
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads the index of a node]
+-
+- Description [Reads the index of a node. LSB is skipped (used as visited
+- flag).
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpWriteNodeIndexBdd (), DddmpSetVisitedBdd (),
+- DddmpVisitedBdd ()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpReadNodeIndexBdd (
+- DdNode *f /* IN: BDD node */
+- )
+-{
+- if (!Cudd_IsConstant (f)) {
+- return ((int)(((ptruint)(f->next))>>1));
+- } else {
+- return (1);
+- }
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns true if node is visited]
+-
+- Description [Returns true if node is visited]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpSetVisitedBdd (), DddmpClearVisitedBdd ()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpVisitedBdd (
+- DdNode *f /* IN: BDD node to be tested */
+- )
+-{
+- f = Cudd_Regular(f);
+-
+- return ((int)((ptruint)(f->next)) & (01));
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Marks a node as visited]
+-
+- Description [Marks a node as visited]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpVisitedBdd (), DddmpClearVisitedBdd ()]
+-
+-******************************************************************************/
+-
+-void
+-DddmpSetVisitedBdd (
+- DdNode *f /* IN: BDD node to be marked (as visited) */
+- )
+-{
+- f = Cudd_Regular(f);
+-
+- f->next = (DdNode *)(ptruint)((int)((ptruint)(f->next))|01);
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Marks a node as not visited]
+-
+- Description [Marks a node as not visited]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpVisited (), DddmpSetVisited ()]
+-
+-******************************************************************************/
+-
+-void
+-DddmpClearVisitedBdd (
+- DdNode *f /* IN: BDD node to be marked (as not visited) */
+- )
+-{
+- f = Cudd_Regular (f);
+-
+- f->next = (DdNode *)(ptruint)((int)((ptruint)(f->next)) & (~01));
+-
+- return;
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Number nodes recursively in post-order]
+-
+- Description [Number nodes recursively in post-order.
+- The "visited" flag is used with inverse polarity, because all nodes
+- were set "visited" when removing them from unique.
+- ]
+-
+- SideEffects ["visited" flags are reset.]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-NumberNodeRecurBdd (
+- DdNode *f /* IN: root of the BDD to be numbered */,
+- int id /* IN/OUT: index to be assigned to the node */
+- )
+-{
+- f = Cudd_Regular (f);
+-
+- if (!DddmpVisitedBdd (f)) {
+- return (id);
+- }
+-
+- if (!cuddIsConstant (f)) {
+- id = NumberNodeRecurBdd (cuddT (f), id);
+- id = NumberNodeRecurBdd (cuddE (f), id);
+- }
+-
+- DddmpWriteNodeIndexBdd (f, ++id);
+- DddmpClearVisitedBdd (f);
+-
+- return (id);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Removes a node from unique table]
+-
+- Description [Removes a node from the unique table by locating the proper
+- subtable and unlinking the node from it. It recurs on the
+- children of the node. Constants remain untouched.
+- ]
+-
+- SideEffects [Nodes are left with the "visited" flag true.]
+-
+- SeeAlso [RestoreInUniqueRecurBdd ()]
+-
+-******************************************************************************/
+-
+-static void
+-RemoveFromUniqueRecurBdd (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: root of the BDD to be extracted */
+- )
+-{
+- DdNode *node, *last, *next;
+- DdNode *sentinel = &(ddMgr->sentinel);
+- DdNodePtr *nodelist;
+- DdSubtable *subtable;
+- int pos, level;
+-
+- f = Cudd_Regular (f);
+-
+- if (DddmpVisitedBdd (f)) {
+- return;
+- }
+-
+- if (!cuddIsConstant (f)) {
+-
+- RemoveFromUniqueRecurBdd (ddMgr, cuddT (f));
+- RemoveFromUniqueRecurBdd (ddMgr, cuddE (f));
+-
+- level = ddMgr->perm[f->index];
+- subtable = &(ddMgr->subtables[level]);
+-
+- nodelist = subtable->nodelist;
+-
+- pos = ddHash (cuddT (f), cuddE (f), subtable->shift);
+- node = nodelist[pos];
+- last = NULL;
+- while (node != sentinel) {
+- next = node->next;
+- if (node == f) {
+- if (last != NULL)
+- last->next = next;
+- else
+- nodelist[pos] = next;
+- break;
+- } else {
+- last = node;
+- node = next;
+- }
+- }
+-
+- f->next = NULL;
+-
+- }
+-
+- DddmpSetVisitedBdd (f);
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Restores a node in unique table]
+-
+- Description [Restores a node in unique table (recursively)]
+-
+- SideEffects [Nodes are not restored in the same order as before removal]
+-
+- SeeAlso [RemoveFromUnique()]
+-
+-******************************************************************************/
+-
+-static void
+-RestoreInUniqueRecurBdd (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: root of the BDD to be restored */
+- )
+-{
+- DdNodePtr *nodelist;
+- DdNode *T, *E, *looking;
+- DdNodePtr *previousP;
+- DdSubtable *subtable;
+- int pos, level;
+-#ifdef DDDMP_DEBUG
+- DdNode *node;
+- DdNode *sentinel = &(ddMgr->sentinel);
+-#endif
+-
+- f = Cudd_Regular(f);
+-
+- if (!Cudd_IsComplement (f->next)) {
+- return;
+- }
+-
+- if (cuddIsConstant (f)) {
+- /* StQ 11.02.2004:
+- Bug fixed --> restore NULL within the next field */
+- /*DddmpClearVisitedBdd (f);*/
+- f->next = NULL;
+-
+- return;
+- }
+-
+- RestoreInUniqueRecurBdd (ddMgr, cuddT (f));
+- RestoreInUniqueRecurBdd (ddMgr, cuddE (f));
+-
+- level = ddMgr->perm[f->index];
+- subtable = &(ddMgr->subtables[level]);
+-
+- nodelist = subtable->nodelist;
+-
+- pos = ddHash (cuddT (f), cuddE (f), subtable->shift);
+-
+-#ifdef DDDMP_DEBUG
+- /* verify uniqueness to avoid duplicate nodes in unique table */
+- for (node=nodelist[pos]; node != sentinel; node=node->next)
+- assert(node!=f);
+-#endif
+-
+- T = cuddT (f);
+- E = cuddE (f);
+- previousP = &(nodelist[pos]);
+- looking = *previousP;
+-
+- while (T < cuddT (looking)) {
+- previousP = &(looking->next);
+- looking = *previousP;
+- }
+-
+- while (T == cuddT (looking) && E < cuddE (looking)) {
+- previousP = &(looking->next);
+- looking = *previousP;
+- }
+-
+- f->next = *previousP;
+- *previousP = f;
+-
+- return;
+-}
+-
+-
+diff --git a/Cudd/dddmp/dddmpNodeCnf.c b/Cudd/dddmp/dddmpNodeCnf.c
+deleted file mode 100644
+index fa61ace..0000000
+--- a/Cudd/dddmp/dddmpNodeCnf.c
++++ /dev/null
+@@ -1,932 +0,0 @@
+-/**CFile**********************************************************************
+-
+- FileName [dddmpNodeCnf.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Functions to handle BDD node infos and numbering
+- while storing a CNF formula from a BDD or an array of BDDs]
+-
+- Description [Functions to handle BDD node infos and numbering
+- while storing a CNF formula from a BDD or an array of BDDs.
+- ]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include "dddmpInt.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-#define DDDMP_DEBUG_CNF 0
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-static int DddmpWriteNodeIndexCnfWithTerminalCheck(DdNode *f, int *cnfIds, int id);
+-static int DddmpClearVisitedCnfRecur(DdNode *f);
+-static void DddmpClearVisitedCnf(DdNode *f);
+-static int NumberNodeRecurCnf(DdNode *f, int *cnfIds, int id);
+-static void DddmpDdNodesCheckIncomingAndScanPath(DdNode *f, int pathLengthCurrent, int edgeInTh, int pathLengthTh);
+-static int DddmpDdNodesNumberEdgesRecur(DdNode *f, int *cnfIds, int id);
+-static int DddmpDdNodesResetCountRecur(DdNode *f);
+-static int DddmpDdNodesCountEdgesRecur(DdNode *f);
+-static void RemoveFromUniqueRecurCnf(DdManager *ddMgr, DdNode *f);
+-static void RestoreInUniqueRecurCnf(DdManager *ddMgr, DdNode *f);
+-static int DddmpPrintBddAndNextRecur(DdManager *ddMgr, DdNode *f);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Removes nodes from unique table and numbers them]
+-
+- Description [Node numbering is required to convert pointers to integers.
+- Since nodes are removed from unique table, no new nodes should
+- be generated before re-inserting nodes in the unique table
+- (DddmpUnnumberDdNodesCnf()).
+- ]
+-
+- SideEffects [Nodes are temporarily removed from unique table]
+-
+- SeeAlso [RemoveFromUniqueRecurCnf(), NumberNodeRecurCnf(),
+- DddmpUnnumberDdNodesCnf()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpNumberDdNodesCnf (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: array of BDDs */,
+- int rootN /* IN: number of BDD roots in the array of BDDs */,
+- int *cnfIds /* OUT: CNF identifiers for variables */,
+- int id /* OUT: number of Temporary Variables Introduced */
+- )
+-{
+- int i;
+-
+- for (i=0; i<rootN; i++) {
+- RemoveFromUniqueRecurCnf (ddMgr, f[i]);
+- }
+-
+- for (i=0; i<rootN; i++) {
+- id = NumberNodeRecurCnf (f[i], cnfIds, id);
+- }
+-
+- return (id);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Removes nodes from unique table and numbers each node according
+- to the number of its incoming BDD edges.
+- ]
+-
+- Description [Removes nodes from unique table and numbers each node according
+- to the number of its incoming BDD edges.
+- ]
+-
+- SideEffects [Nodes are temporarily removed from unique table]
+-
+- SeeAlso [RemoveFromUniqueRecurCnf()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpDdNodesCountEdgesAndNumber (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: Array of BDDs */,
+- int rootN /* IN: Number of BDD roots in the array of BDDs */,
+- int edgeInTh /* IN: Max # In-Edges, after a Insert Cut Point */,
+- int pathLengthTh /* IN: Max Path Length (after, Insert a Cut Point) */,
+- int *cnfIds /* OUT: CNF identifiers for variables */,
+- int id /* OUT: Number of Temporary Variables Introduced */
+- )
+-{
+- int retValue, i;
+-
+- /*-------------------------- Remove From Unique ---------------------------*/
+-
+- for (i=0; i<rootN; i++) {
+- RemoveFromUniqueRecurCnf (ddMgr, f[i]);
+- }
+-
+- /*-------------------- Reset Counter and Reset Visited --------------------*/
+-
+- for (i=0; i<rootN; i++) {
+- retValue = DddmpDdNodesResetCountRecur (f[i]);
+- }
+-
+- /* Here we must have:
+- * cnfIndex = 0
+- * visitedFlag = 0
+- * FOR ALL nodes
+- */
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (stdout, "###---> BDDs After Count Reset:\n");
+- DddmpPrintBddAndNext (ddMgr, f, rootN);
+-#endif
+-
+- /*----------------------- Count Incoming Edges ----------------------------*/
+-
+- for (i=0; i<rootN; i++) {
+- retValue = DddmpDdNodesCountEdgesRecur (f[i]);
+- }
+-
+- /* Here we must have:
+- * cnfIndex = incoming edge count
+- * visitedFlag = 0 (AGAIN ... remains untouched)
+- * FOR ALL nodes
+- */
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (stdout, "###---> BDDs After Count Recur:\n");
+- DddmpPrintBddAndNext (ddMgr, f, rootN);
+-#endif
+-
+- /*------------------------- Count Path Length ----------------------------*/
+-
+- for (i=0; i<rootN; i++) {
+- DddmpDdNodesCheckIncomingAndScanPath (f[i], 0, edgeInTh,
+- pathLengthTh);
+- }
+-
+- /* Here we must have:
+- * cnfIndex = 1 if we want to insert there a cut point
+- * 0 if we do NOT want to insert there a cut point
+- * visitedFlag = 1
+- * FOR ALL nodes
+- */
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (stdout, "###---> BDDs After Check Incoming And Scan Path:\n");
+- DddmpPrintBddAndNext (ddMgr, f, rootN);
+-#endif
+-
+- /*-------------------- Number Nodes and Set Visited -----------------------*/
+-
+- for (i=0; i<rootN; i++) {
+- id = DddmpDdNodesNumberEdgesRecur (f[i], cnfIds, id);
+- }
+-
+- /* Here we must have:
+- * cnfIndex = CNF auxiliary variable enumeration
+- * visitedFlag = 0
+- * FOR ALL nodes
+- */
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (stdout, "###---> BDDs After Count Edges Recur:\n");
+- DddmpPrintBddAndNext (ddMgr, f, rootN);
+-#endif
+-
+- return (id);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Restores nodes in unique table, loosing numbering]
+-
+- Description [Node indexes are no more needed. Nodes are re-linked in the
+- unique table.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpNumberDdNode()]
+-
+-******************************************************************************/
+-
+-void
+-DddmpUnnumberDdNodesCnf(
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: array of BDDs */,
+- int rootN /* IN: number of BDD roots in the array of BDDs */
+- )
+-{
+- int i;
+-
+- for (i=0; i<rootN; i++) {
+- RestoreInUniqueRecurCnf (ddMgr, f[i]);
+- }
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Prints debug information]
+-
+- Description [Prints debug information for an array of BDDs on the screen]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-int
+-DddmpPrintBddAndNext (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: Array of BDDs to be displayed */,
+- int rootN /* IN: Number of BDD roots in the array of BDDs */
+- )
+-{
+- int i;
+-
+- for (i=0; i<rootN; i++) {
+- fprintf (stdout, "---> Bdd %d:\n", i);
+- fflush (stdout);
+- DddmpPrintBddAndNextRecur (ddMgr, f[i]);
+- }
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Write index to node]
+-
+- Description [The index of the node is written in the "next" field of
+- a DdNode struct. LSB is not used (set to 0). It is used as
+- "visited" flag in DD traversals.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpReadNodeIndexCnf(), DddmpSetVisitedCnf (),
+- DddmpVisitedCnf ()
+- ]
+-
+-******************************************************************************/
+-
+-int
+-DddmpWriteNodeIndexCnf (
+- DdNode *f /* IN: BDD node */,
+- int id /* IN: index to be written */
+- )
+-{
+- if (!Cudd_IsConstant (f)) {
+- f->next = (struct DdNode *)((ptruint)((id)<<1));
+- }
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns true if node is visited]
+-
+- Description [Returns true if node is visited]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpSetVisitedCnf (), DddmpClearVisitedCnf ()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpVisitedCnf (
+- DdNode *f /* IN: BDD node to be tested */
+- )
+-{
+- f = Cudd_Regular(f);
+-
+- return ((int)((ptruint)(f->next)) & (01));
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Marks a node as visited]
+-
+- Description [Marks a node as visited]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpVisitedCnf (), DddmpClearVisitedCnf ()]
+-
+-******************************************************************************/
+-
+-void
+-DddmpSetVisitedCnf (
+- DdNode *f /* IN: BDD node to be marked (as visited) */
+- )
+-{
+- f = Cudd_Regular(f);
+-
+- f->next = (DdNode *)(ptruint)((int)((ptruint)(f->next))|01);
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads the index of a node]
+-
+- Description [Reads the index of a node. LSB is skipped (used as visited
+- flag).
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpWriteNodeIndexCnf(), DddmpSetVisitedCnf (),
+- DddmpVisitedCnf ()]
+-
+-******************************************************************************/
+-
+-int
+-DddmpReadNodeIndexCnf (
+- DdNode *f /* IN: BDD node */
+- )
+-{
+- if (!Cudd_IsConstant (f)) {
+- return ((int)(((ptruint)(f->next))>>1));
+- } else {
+- return (1);
+- }
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Write index to node]
+-
+- Description [The index of the node is written in the "next" field of
+- a DdNode struct. LSB is not used (set to 0). It is used as
+- "visited" flag in DD traversals. The index corresponds to
+- the BDD node variable if both the node's children are a
+- constant node, otherwise a new CNF variable is used.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpReadNodeIndexCnf(), DddmpSetVisitedCnf (),
+- DddmpVisitedCnf ()]
+-
+-*****************************************************************************/
+-
+-static int
+-DddmpWriteNodeIndexCnfWithTerminalCheck (
+- DdNode *f /* IN: BDD node */,
+- int *cnfIds /* IN: possible source for the index to be written */,
+- int id /* IN: possible source for the index to be written */
+- )
+-{
+- if (!Cudd_IsConstant (f)) {
+- if (Cudd_IsConstant (cuddT (f)) && Cudd_IsConstant (cuddE (f))) {
+- /* If Variable SET ID as Variable ID */
+- f->next = (struct DdNode *)((ptruint)((cnfIds[f->index])<<1));
+- } else {
+- f->next = (struct DdNode *)((ptruint)((id)<<1));
+- id++;
+- }
+- }
+-
+- return(id);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Mark ALL nodes as not visited]
+-
+- Description [Mark ALL nodes as not visited (it recurs on the node children)]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpVisitedCnf (), DddmpSetVisitedCnf ()]
+-
+-******************************************************************************/
+-
+-static int
+-DddmpClearVisitedCnfRecur (
+- DdNode *f /* IN: root of the BDD to be marked */
+- )
+-{
+- int retValue;
+-
+- f = Cudd_Regular(f);
+-
+- if (cuddIsConstant (f)) {
+- return (DDDMP_SUCCESS);
+- }
+-
+- if (!DddmpVisitedCnf (f)) {
+- return (DDDMP_SUCCESS);
+- }
+-
+- retValue = DddmpClearVisitedCnfRecur (cuddT (f));
+- retValue = DddmpClearVisitedCnfRecur (cuddE (f));
+-
+- DddmpClearVisitedCnf (f);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Marks a node as not visited]
+-
+- Description [Marks a node as not visited]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpVisitedCnf (), DddmpSetVisitedCnf ()]
+-
+-******************************************************************************/
+-
+-static void
+-DddmpClearVisitedCnf (
+- DdNode *f /* IN: BDD node to be marked (as not visited) */
+- )
+-{
+- f = Cudd_Regular (f);
+-
+- f->next = (DdNode *)(ptruint)((int)((ptruint)(f->next)) & (~01));
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Number nodes recursively in post-order]
+-
+- Description [Number nodes recursively in post-order.
+- The "visited" flag is used with inverse polarity, because all nodes
+- were set "visited" when removing them from unique.
+- ]
+-
+- SideEffects ["visited" flags are reset.]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-NumberNodeRecurCnf(
+- DdNode *f /* IN: root of the BDD to be numbered */,
+- int *cnfIds /* IN: possible source for numbering */,
+- int id /* IN/OUT: possible source for numbering */
+- )
+-{
+- f = Cudd_Regular(f);
+-
+- if (!DddmpVisitedCnf (f)) {
+- return (id);
+- }
+-
+- if (!cuddIsConstant (f)) {
+- id = NumberNodeRecurCnf (cuddT (f), cnfIds, id);
+- id = NumberNodeRecurCnf (cuddE (f), cnfIds, id);
+- }
+-
+- id = DddmpWriteNodeIndexCnfWithTerminalCheck (f, cnfIds, id);
+- DddmpClearVisitedCnf (f);
+-
+- return (id);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Number nodes recursively in post-order]
+-
+- Description [Number nodes recursively in post-order.
+- The "visited" flag is used with the right polarity.
+- The node is assigned to a new CNF variable only if it is a "shared"
+- node (i.e. the number of its incoming edges is greater than 1).
+- ]
+-
+- SideEffects ["visited" flags are set.]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static void
+-DddmpDdNodesCheckIncomingAndScanPath (
+- DdNode *f /* IN: BDD node to be numbered */,
+- int pathLengthCurrent /* IN: Current Path Length */,
+- int edgeInTh /* IN: Max # In-Edges, after a Insert Cut Point */,
+- int pathLengthTh /* IN: Max Path Length (after, Insert a Cut Point) */
+- )
+-{
+- int retValue;
+-
+- f = Cudd_Regular(f);
+-
+- if (DddmpVisitedCnf (f)) {
+- return;
+- }
+-
+- if (cuddIsConstant (f)) {
+- return;
+- }
+-
+- pathLengthCurrent++;
+- retValue = DddmpReadNodeIndexCnf (f);
+-
+- if ( ((edgeInTh >= 0) && (retValue > edgeInTh)) ||
+- ((pathLengthTh >= 0) && (pathLengthCurrent > pathLengthTh))
+- ) {
+- DddmpWriteNodeIndexCnf (f, 1);
+- pathLengthCurrent = 0;
+- } else {
+- DddmpWriteNodeIndexCnf (f, 0);
+- }
+-
+- DddmpDdNodesCheckIncomingAndScanPath (cuddT (f), pathLengthCurrent,
+- edgeInTh, pathLengthTh);
+- DddmpDdNodesCheckIncomingAndScanPath (cuddE (f), pathLengthCurrent,
+- edgeInTh, pathLengthTh);
+-
+- DddmpSetVisitedCnf (f);
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Number nodes recursively in post-order]
+-
+- Description [Number nodes recursively in post-order.
+- The "visited" flag is used with the inverse polarity.
+- Numbering follows the subsequent strategy:
+- * if the index = 0 it remains so
+- * if the index >= 1 it gets enumerated.
+- This implies that the node is assigned to a new CNF variable only if
+- it is not a terminal node otherwise it is assigned the index of
+- the BDD variable.
+- ]
+-
+- SideEffects ["visited" flags are reset.]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-DddmpDdNodesNumberEdgesRecur (
+- DdNode *f /* IN: BDD node to be numbered */,
+- int *cnfIds /* IN: possible source for numbering */,
+- int id /* IN/OUT: possible source for numbering */
+- )
+-{
+- int retValue;
+-
+- f = Cudd_Regular(f);
+-
+- if (!DddmpVisitedCnf (f)) {
+- return (id);
+- }
+-
+- if (cuddIsConstant (f)) {
+- return (id);
+- }
+-
+- id = DddmpDdNodesNumberEdgesRecur (cuddT (f), cnfIds, id);
+- id = DddmpDdNodesNumberEdgesRecur (cuddE (f), cnfIds, id);
+-
+- retValue = DddmpReadNodeIndexCnf (f);
+- if (retValue >= 1) {
+- id = DddmpWriteNodeIndexCnfWithTerminalCheck (f, cnfIds, id);
+- } else {
+- DddmpWriteNodeIndexCnf (f, 0);
+- }
+-
+- DddmpClearVisitedCnf (f);
+-
+- return (id);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Resets counter and visited flag for ALL nodes of a BDD]
+-
+- Description [Resets counter and visited flag for ALL nodes of a BDD (it
+- recurs on the node children). The index field of the node is
+- used as counter.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-DddmpDdNodesResetCountRecur (
+- DdNode *f /* IN: root of the BDD whose counters are reset */
+- )
+-{
+- int retValue;
+-
+- f = Cudd_Regular (f);
+-
+- if (!DddmpVisitedCnf (f)) {
+- return (DDDMP_SUCCESS);
+- }
+-
+- if (!cuddIsConstant (f)) {
+- retValue = DddmpDdNodesResetCountRecur (cuddT (f));
+- retValue = DddmpDdNodesResetCountRecur (cuddE (f));
+- }
+-
+- DddmpWriteNodeIndexCnf (f, 0);
+- DddmpClearVisitedCnf (f);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Counts the number of incoming edges for each node of a BDD]
+-
+- Description [Counts (recursively) the number of incoming edges for each
+- node of a BDD. This number is stored in the index field.
+- ]
+-
+- SideEffects ["visited" flags remain untouched.]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-DddmpDdNodesCountEdgesRecur (
+- DdNode *f /* IN: root of the BDD */
+- )
+-{
+- int indexValue, retValue;
+-
+- f = Cudd_Regular (f);
+-
+- if (cuddIsConstant (f)) {
+- return (DDDMP_SUCCESS);
+- }
+-
+- if (Cudd_IsConstant (cuddT (f)) && Cudd_IsConstant (cuddE (f))) {
+- return (DDDMP_SUCCESS);
+- }
+-
+- indexValue = DddmpReadNodeIndexCnf (f);
+-
+- /* IF (first time) THEN recur */
+- if (indexValue == 0) {
+- retValue = DddmpDdNodesCountEdgesRecur (cuddT (f));
+- retValue = DddmpDdNodesCountEdgesRecur (cuddE (f));
+- }
+-
+- /* Increment Incoming-Edge Count Flag */
+- indexValue++;
+- DddmpWriteNodeIndexCnf (f, indexValue);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Removes a node from unique table]
+-
+- Description [Removes a node from the unique table by locating the proper
+- subtable and unlinking the node from it. It recurs on on the
+- children of the node. Constants remain untouched.
+- ]
+-
+- SideEffects [Nodes are left with the "visited" flag true.]
+-
+- SeeAlso [RestoreInUniqueRecurCnf()]
+-
+-******************************************************************************/
+-
+-static void
+-RemoveFromUniqueRecurCnf (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: root of the BDD to be extracted */
+- )
+-{
+- DdNode *node, *last, *next;
+- DdNode *sentinel = &(ddMgr->sentinel);
+- DdNodePtr *nodelist;
+- DdSubtable *subtable;
+- int pos, level;
+-
+- f = Cudd_Regular (f);
+-
+- if (DddmpVisitedCnf (f)) {
+- return;
+- }
+-
+- if (!cuddIsConstant (f)) {
+-
+- RemoveFromUniqueRecurCnf (ddMgr, cuddT (f));
+- RemoveFromUniqueRecurCnf (ddMgr, cuddE (f));
+-
+- level = ddMgr->perm[f->index];
+- subtable = &(ddMgr->subtables[level]);
+-
+- nodelist = subtable->nodelist;
+-
+- pos = ddHash (cuddT (f), cuddE (f), subtable->shift);
+- node = nodelist[pos];
+- last = NULL;
+- while (node != sentinel) {
+- next = node->next;
+- if (node == f) {
+- if (last != NULL)
+- last->next = next;
+- else
+- nodelist[pos] = next;
+- break;
+- } else {
+- last = node;
+- node = next;
+- }
+- }
+-
+- f->next = NULL;
+-
+- }
+-
+- DddmpSetVisitedCnf (f);
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Restores a node in unique table]
+-
+- Description [Restores a node in unique table (recursive)]
+-
+- SideEffects [Nodes are not restored in the same order as before removal]
+-
+- SeeAlso [RemoveFromUnique()]
+-
+-******************************************************************************/
+-
+-static void
+-RestoreInUniqueRecurCnf (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: root of the BDD to be restored */
+- )
+-{
+- DdNodePtr *nodelist;
+- DdNode *T, *E, *looking;
+- DdNodePtr *previousP;
+- DdSubtable *subtable;
+- int pos, level;
+-#ifdef DDDMP_DEBUG
+- DdNode *node;
+- DdNode *sentinel = &(ddMgr->sentinel);
+-#endif
+-
+- f = Cudd_Regular(f);
+-
+- if (!Cudd_IsComplement (f->next)) {
+- return;
+- }
+-
+- if (cuddIsConstant (f)) {
+- /* StQ 11.02.2004:
+- Bug fixed --> restore NULL within the next field */
+- /*DddmpClearVisitedCnf (f);*/
+- f->next = NULL;
+-
+- return;
+- }
+-
+- RestoreInUniqueRecurCnf (ddMgr, cuddT (f));
+- RestoreInUniqueRecurCnf (ddMgr, cuddE (f));
+-
+- level = ddMgr->perm[f->index];
+- subtable = &(ddMgr->subtables[level]);
+-
+- nodelist = subtable->nodelist;
+-
+- pos = ddHash (cuddT (f), cuddE (f), subtable->shift);
+-
+-#ifdef DDDMP_DEBUG
+- /* verify uniqueness to avoid duplicate nodes in unique table */
+- for (node=nodelist[pos]; node != sentinel; node=node->next)
+- assert(node!=f);
+-#endif
+-
+- T = cuddT (f);
+- E = cuddE (f);
+- previousP = &(nodelist[pos]);
+- looking = *previousP;
+-
+- while (T < cuddT (looking)) {
+- previousP = &(looking->next);
+- looking = *previousP;
+- }
+-
+- while (T == cuddT (looking) && E < cuddE (looking)) {
+- previousP = &(looking->next);
+- looking = *previousP;
+- }
+- f->next = *previousP;
+- *previousP = f;
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Prints debug info]
+-
+- Description [Prints debug info for a BDD on the screen. It recurs on
+- node's children.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-DddmpPrintBddAndNextRecur (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: root of the BDD to be displayed */
+- )
+-{
+- int retValue;
+- DdNode *fPtr, *tPtr, *ePtr;
+-
+- fPtr = Cudd_Regular (f);
+-
+- if (Cudd_IsComplement (f)) {
+- fprintf (stdout, "sign=- ptr=%ld ", ((long int) fPtr));
+- } else {
+- fprintf (stdout, "sign=+ ptr=%ld ", ((long int) fPtr));
+- }
+-
+- if (cuddIsConstant (fPtr)) {
+- fprintf (stdout, "one\n");
+- fflush (stdout);
+- return (DDDMP_SUCCESS);
+- }
+-
+- fprintf (stdout,
+- "thenPtr=%ld elsePtr=%ld BddId=%d CnfId=%d Visited=%d\n",
+- ((long int) cuddT (fPtr)), ((long int) cuddE (fPtr)),
+- fPtr->index, DddmpReadNodeIndexCnf (fPtr),
+- DddmpVisitedCnf (fPtr));
+-
+- tPtr = cuddT (fPtr);
+- ePtr = cuddE (fPtr);
+- if (Cudd_IsComplement (f)) {
+- tPtr = Cudd_Not (tPtr);
+- ePtr = Cudd_Not (ePtr);
+- }
+-
+- retValue = DddmpPrintBddAndNextRecur (ddMgr, tPtr);
+- retValue = DddmpPrintBddAndNextRecur (ddMgr, ePtr);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-
+diff --git a/Cudd/dddmp/dddmpStoreAdd.c b/Cudd/dddmp/dddmpStoreAdd.c
+deleted file mode 100644
+index a86e39a..0000000
+--- a/Cudd/dddmp/dddmpStoreAdd.c
++++ /dev/null
+@@ -1,957 +0,0 @@
+-/**CFile**********************************************************************
+- FileName [dddmpStoreAdd.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Functions to write ADDs to file.]
+-
+- Description [Functions to write ADDs to file.
+- ADDs are represended on file either in text or binary format under the
+- following rules. A file contains a forest of ADDs (a vector of
+- Boolean functions). ADD nodes are numbered with contiguous numbers,
+- from 1 to NNodes (total number of nodes on a file). 0 is not used to
+- allow negative node indexes for complemented edges. A file contains
+- a header, including information about variables and roots to ADD
+- functions, followed by the list of nodes.
+- ADD nodes are listed according to their numbering, and in the present
+- implementation numbering follows a post-order strategy, in such a way
+- that a node is never listed before its Then/Else children.
+- ]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include "dddmpInt.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-static int NodeStoreRecurAdd(DdManager *ddMgr, DdNode *f, int mode, int *supportids, char **varnames, int *outids, FILE *fp);
+-static int NodeTextStoreAdd(DdManager *ddMgr, DdNode *f, int mode, int *supportids, char **varnames, int *outids, FILE *fp, int idf, int vf, int idT, int idE);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a dump file representing the argument ADD.]
+-
+- Description [Dumps the argument ADD to file. Dumping is done through
+- Dddmp_cuddAddArrayStore, And a dummy array of 1 ADD root is
+- used for this purpose.
+- ]
+-
+- SideEffects [Nodes are temporarily removed from unique hash. They are
+- re-linked after the store operation in a modified order.]
+-
+- SeeAlso [Dddmp_cuddAddLoad Dddmp_cuddAddArrayLoad]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddAddStore (
+- DdManager *ddMgr /* IN: DD Manager */,
+- char *ddname /* IN: DD name (or NULL) */,
+- DdNode *f /* IN: ADD root to be stored */,
+- char **varnames /* IN: array of variable names (or NULL) */,
+- int *auxids /* IN: array of converted var ids */,
+- int mode /* IN: storing mode selector */,
+- Dddmp_VarInfoType varinfo /* IN: extra info for variables in text mode */,
+- char *fname /* IN: File name */,
+- FILE *fp /* IN: File pointer to the store file */
+- )
+-{
+- int retValue;
+- DdNode *tmpArray[1];
+-
+- tmpArray[0] = f;
+- retValue = Dddmp_cuddAddArrayStore (ddMgr, ddname, 1, tmpArray, NULL,
+- varnames, auxids, mode, varinfo, fname, fp);
+-
+- return (retValue);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a dump file representing the argument Array of ADDs.]
+-
+- Description [Dumps the argument array of ADDs to file. Dumping is
+- either in text or binary form. see the corresponding BDD dump
+- function for further details.
+- ]
+-
+- SideEffects [Nodes are temporarily removed from the unique hash
+- table. They are re-linked after the store operation in a
+- modified order.
+- ]
+-
+- SeeAlso [Dddmp_cuddAddStore, Dddmp_cuddAddLoad,
+- Dddmp_cuddAddArrayLoad]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddAddArrayStore (
+- DdManager *ddMgr /* IN: DD Manager */,
+- char *ddname /* IN: DD name (or NULL) */,
+- int nRoots /* IN: number of output BDD roots to be stored */,
+- DdNode **f /* IN: array of ADD roots to be stored */,
+- char **rootnames /* IN: array of root names (or NULL) */,
+- char **varnames /* IN: array of variable names (or NULL) */,
+- int *auxids /* IN: array of converted var IDs */,
+- int mode /* IN: storing mode selector */,
+- Dddmp_VarInfoType varinfo /* IN: extra info for variables in text mode */,
+- char *fname /* IN: File name */,
+- FILE *fp /* IN: File pointer to the store file */
+- )
+-{
+- int retValue;
+-
+-#if 0
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- int retValueBis;
+-
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During ADD Store.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During ADD Store.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-#endif
+-
+- retValue = DddmpCuddDdArrayStoreBdd (DDDMP_ADD, ddMgr, ddname, nRoots, f,
+- rootnames, varnames, auxids, mode, varinfo, fname, fp);
+-
+-#if 0
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During ADD Store.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During ADD Store.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-#endif
+-
+- return (retValue);
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a dump file representing the argument Array of
+- BDDs/ADDs.
+- ]
+-
+- Description [Dumps the argument array of BDDs/ADDs to file. Internal
+- function doing inner steps of store for BDDs and ADDs.
+- ADD store is presently supported only with the text format.
+- ]
+-
+- SideEffects [Nodes are temporarily removed from the unique hash
+- table. They are re-linked after the store operation in a
+- modified order.
+- ]
+-
+- SeeAlso [Dddmp_cuddBddStore, Dddmp_cuddBddLoad,
+- Dddmp_cuddBddArrayLoad
+- ]
+-
+-******************************************************************************/
+-
+-int
+-DddmpCuddDdArrayStoreBdd (
+- Dddmp_DecompType ddType /* IN: Selects the decomp type: BDD or ADD */,
+- DdManager *ddMgr /* IN: DD Manager */,
+- char *ddname /* IN: DD name (or NULL) */,
+- int nRoots /* IN: number of output BDD roots to be stored */,
+- DdNode **f /* IN: array of DD roots to be stored */,
+- char **rootnames /* IN: array of root names (or NULL) */,
+- char **varnames /* IN: array of variable names (or NULL) */,
+- int *auxids /* IN: array of converted var IDs */,
+- int mode /* IN: storing mode selector */,
+- Dddmp_VarInfoType varinfo /* IN: extra info for variables in text mode */,
+- char *fname /* IN: File name */,
+- FILE *fp /* IN: File pointer to the store file */
+- )
+-{
+- DdNode *support = NULL;
+- DdNode *scan;
+- int *ids = NULL;
+- int *permids = NULL;
+- int *invpermids = NULL;
+- int *supportids = NULL;
+- int *outids = NULL;
+- char **outvarnames = NULL;
+- int nVars = ddMgr->size;
+- int nnodes;
+- int retValue;
+- int i, var;
+- int fileToClose = 0;
+-
+- /*
+- * Check DD Type and Mode
+- */
+-
+- Dddmp_CheckAndGotoLabel (ddType==DDDMP_BDD,
+- "Error writing to file: BDD Type.", failure);
+- Dddmp_CheckAndGotoLabel (mode==DDDMP_MODE_BINARY,
+- "Error writing to file: ADD Type with Binary Mode.", failure);
+-
+- /*
+- * Check if File needs to be opened in the proper mode.
+- */
+-
+- if (fp == NULL) {
+- fp = fopen (fname, "w");
+- Dddmp_CheckAndGotoLabel (fp==NULL, "Error opening file.",
+- failure);
+- fileToClose = 1;
+- }
+-
+- /*
+- * Force binary mode if automatic.
+- */
+-
+- switch (mode) {
+- case DDDMP_MODE_TEXT:
+- case DDDMP_MODE_BINARY:
+- break;
+- case DDDMP_MODE_DEFAULT:
+- mode = DDDMP_MODE_BINARY;
+- break;
+- default:
+- mode = DDDMP_MODE_BINARY;
+- break;
+- }
+-
+- /*
+- * Alloc vectors for variable IDs, perm IDs and support IDs.
+- * +1 to include a slot for terminals.
+- */
+-
+- ids = DDDMP_ALLOC (int, nVars);
+- Dddmp_CheckAndGotoLabel (ids==NULL, "Error allocating memory.", failure);
+- permids = DDDMP_ALLOC (int, nVars);
+- Dddmp_CheckAndGotoLabel (permids==NULL, "Error allocating memory.", failure);
+- invpermids = DDDMP_ALLOC (int, nVars);
+- Dddmp_CheckAndGotoLabel (invpermids==NULL, "Error allocating memory.",
+- failure);
+- supportids = DDDMP_ALLOC (int, nVars+1);
+- Dddmp_CheckAndGotoLabel (supportids==NULL, "Error allocating memory.",
+- failure);
+-
+- for (i=0; i<nVars; i++) {
+- ids[i] = permids[i] = invpermids[i] = supportids[i] = (-1);
+- }
+- /* StQ */
+- supportids[nVars] = -1;
+-
+- /*
+- * Take the union of the supports of each output function.
+- * skip NULL functions.
+- * Set permids and invpermids of support variables to the proper values.
+- */
+-
+- for (i=0; i<nRoots; i++) {
+- if (f[i] == NULL) {
+- continue;
+- }
+- support = Cudd_Support (ddMgr, f[i]);
+- Dddmp_CheckAndGotoLabel (support==NULL, "NULL support returned.",
+- failure);
+- cuddRef (support);
+- scan = support;
+- while (!cuddIsConstant(scan)) {
+- ids[scan->index] = scan->index;
+- permids[scan->index] = ddMgr->perm[scan->index];
+- invpermids[ddMgr->perm[scan->index]] = scan->index;
+- scan = cuddT (scan);
+- }
+- Cudd_RecursiveDeref (ddMgr, support);
+- }
+- /* so that we do not try to free it in case of failure */
+- support = NULL;
+-
+- /*
+- * Set supportids to incremental (shrinked) values following the ordering.
+- */
+-
+- for (i=0, var=0; i<nVars; i++) {
+- if (invpermids[i] >= 0) {
+- supportids[invpermids[i]] = var++;
+- }
+- }
+- /* set a dummy id for terminal nodes */
+- supportids[nVars] = var;
+-
+- /*
+- * Select conversion array for extra var info
+- */
+-
+- switch (mode) {
+- case DDDMP_MODE_TEXT:
+- switch (varinfo) {
+- case DDDMP_VARIDS:
+- outids = ids;
+- break;
+- case DDDMP_VARPERMIDS:
+- outids = permids;
+- break;
+- case DDDMP_VARAUXIDS:
+- outids = auxids;
+- break;
+- case DDDMP_VARNAMES:
+- outvarnames = varnames;
+- break;
+- case DDDMP_VARDEFAULT:
+- break;
+- }
+- break;
+- case DDDMP_MODE_BINARY:
+- outids = NULL;
+- break;
+- }
+-
+- /*
+- * Number dd nodes and count them (numbering is from 1 to nnodes)
+- */
+-
+- nnodes = DddmpNumberAddNodes (ddMgr, f, nRoots);
+-
+- /*
+- * Start Header
+- */
+-
+-#ifdef DDDMP_VERSION
+- retValue = fprintf (fp, ".ver %s\n", DDDMP_VERSION);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-#endif
+-
+- retValue = fprintf (fp, ".add\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- retValue = fprintf (fp, ".mode %c\n", mode);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- if (mode == DDDMP_MODE_TEXT) {
+- retValue = fprintf (fp, ".varinfo %d\n", varinfo);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- if (ddname != NULL) {
+- retValue = fprintf (fp, ".dd %s\n",ddname);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- retValue = fprintf (fp, ".nnodes %d\n", nnodes);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- retValue = fprintf (fp, ".nvars %d\n", nVars);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- retValue = fprintf (fp, ".nsuppvars %d\n", var);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- /*------------ Write the Var Names by scanning the ids array -------------*/
+-
+- if (varnames != NULL) {
+-
+- retValue = fprintf (fp, ".suppvarnames");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- for (i=0; i<nVars; i++) {
+- if (ids[i] >= 0) {
+- if (varnames[ids[i]] == NULL) {
+- (void) fprintf (stderr,
+- "DdStore Warning: null variable name. DUMMY%d generated\n", i);
+- fflush (stderr);
+- varnames[ids[i]] = DDDMP_ALLOC (char, 10);
+- Dddmp_CheckAndGotoLabel (varnames[ids[i]] == NULL,
+- "Error allocating memory.", failure);
+- sprintf (varnames[ids[i]], "DUMMY%d", i);
+- }
+- retValue = fprintf (fp, " %s", varnames[ids[i]]);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+- }
+-
+- retValue = fprintf (fp, "\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- /*--------- Write the Var SUPPORT Names by scanning the ids array ---------*/
+-
+- if (varnames != NULL) {
+- retValue = fprintf (fp, ".orderedvarnames");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- for (i=0; i<nVars; i++) {
+- if (varnames[ddMgr->invperm[i]] == NULL) {
+- (void) fprintf (stderr,
+- "DdStore Warning: null variable name. DUMMY%d generated\n", i);
+- fflush (stderr);
+- varnames[ddMgr->invperm[i]] = DDDMP_ALLOC (char, 10);
+- Dddmp_CheckAndGotoLabel (varnames[ddMgr->invperm[i]] == NULL,
+- "Error allocating memory.", failure);
+- sprintf (varnames[ddMgr->invperm[i]], "DUMMY%d", i);
+- }
+-
+- retValue = fprintf (fp, " %s", varnames[ddMgr->invperm[i]]);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- retValue = fprintf (fp, "\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- /*------------ Write the var ids by scanning the ids array ---------------*/
+-
+- retValue = fprintf (fp, ".ids");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- for (i=0; i<nVars; i++) {
+- if (ids[i] >= 0) {
+- retValue = fprintf (fp, " %d", i);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+- }
+- retValue = fprintf (fp, "\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- /*
+- * Write the var permids by scanning the permids array.
+- */
+-
+- retValue = fprintf (fp, ".permids");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- for (i = 0; i < nVars; i++) {
+- if (permids[i] >= 0) {
+- retValue = fprintf (fp, " %d", permids[i]);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+- }
+-
+- retValue = fprintf (fp, "\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- if (auxids != NULL) {
+-
+- /*
+- * Write the var auxids by scanning the ids array.
+- */
+-
+- retValue = fprintf (fp, ".auxids");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- for (i = 0; i < nVars; i++) {
+- if (ids[i] >= 0) {
+- retValue = fprintf (fp, " %d", auxids[i]);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+- }
+- retValue = fprintf (fp, "\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- /*
+- * Write the roots info.
+- */
+-
+- retValue = fprintf (fp, ".nroots %d\n", nRoots);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- if (rootnames != NULL) {
+-
+- /*
+- * Write the root names.
+- */
+-
+- retValue = fprintf (fp, ".rootnames");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- for (i = 0; i < nRoots; i++) {
+- if (rootnames[i] == NULL) {
+- (void) fprintf (stderr,
+- "DdStore Warning: null variable name. ROOT%d generated\n",i);
+- fflush (stderr);
+- rootnames[i] = DDDMP_ALLOC(char,10);
+- Dddmp_CheckAndGotoLabel (rootnames[i]==NULL,
+- "Error writing to file.", failure);
+- sprintf(rootnames[ids[i]], "ROOT%d",i);
+- }
+- retValue = fprintf (fp, " %s", rootnames[i]);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- retValue = fprintf (fp, "\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- retValue = fprintf (fp, ".rootids");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- /*
+- * Write BDD indexes of function roots.
+- * Use negative integers for complemented edges.
+- */
+-
+- for (i = 0; i < nRoots; i++) {
+- if (f[i] == NULL) {
+- (void) fprintf (stderr, "DdStore Warning: %d-th root is NULL\n",i);
+- fflush (stderr);
+- retValue = fprintf (fp, " 0");
+- }
+- if (Cudd_IsComplement(f[i])) {
+- retValue = fprintf (fp, " -%d",
+- DddmpReadNodeIndexAdd (Cudd_Regular (f[i])));
+- } else {
+- retValue = fprintf (fp, " %d",
+- DddmpReadNodeIndexAdd (Cudd_Regular (f[i])));
+- }
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- retValue = fprintf (fp, "\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- retValue = fprintf (fp, ".nodes\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- /*
+- * END HEADER
+- */
+-
+- /*
+- * Call the function that really gets the job done.
+- */
+-
+- for (i = 0; i < nRoots; i++) {
+- if (f[i] != NULL) {
+- retValue = NodeStoreRecurAdd (ddMgr, Cudd_Regular(f[i]),
+- mode, supportids, outvarnames, outids, fp);
+- Dddmp_CheckAndGotoLabel (retValue==DDDMP_FAILURE,
+- "Error writing to file.", failure);
+- }
+- }
+-
+- /*
+- * Write trailer and return.
+- */
+-
+- retValue = fprintf (fp, ".end\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- if (fileToClose) {
+- fclose (fp);
+- }
+-
+- DddmpUnnumberAddNodes (ddMgr, f, nRoots);
+- DDDMP_FREE (ids);
+- DDDMP_FREE (permids);
+- DDDMP_FREE (invpermids);
+- DDDMP_FREE (supportids);
+-
+- return (DDDMP_SUCCESS);
+-
+- failure:
+-
+- if (ids != NULL) {
+- DDDMP_FREE (ids);
+- }
+- if (permids != NULL) {
+- DDDMP_FREE (permids);
+- }
+- if (invpermids != NULL) {
+- DDDMP_FREE (invpermids);
+- }
+- if (supportids != NULL) {
+- DDDMP_FREE (supportids);
+- }
+- if (support != NULL) {
+- Cudd_RecursiveDeref (ddMgr, support);
+- }
+-
+- return (DDDMP_FAILURE);
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Performs the recursive step of Dddmp_bddStore.]
+-
+- Description [Stores a node to file in either test or binary mode.<l>
+- In text mode a node is represented (on a text line basis) as
+- <UL>
+- <LI> node-index \[var-extrainfo\] var-index Then-index Else-index
+- </UL>
+-
+- where all indexes are integer numbers and var-extrainfo
+- (optional redundant field) is either an integer or a string
+- (variable name). Node-index is redundant (due to the node
+- ordering) but we keep it for readability.<p>
+-
+- In binary mode nodes are represented as a sequence of bytes,
+- representing var-index, Then-index, and Else-index in an
+- optimized way. Only the first byte (code) is mandatory.
+- Integer indexes are represented in absolute or relative mode,
+- where relative means offset wrt. a Then/Else node info.
+- Suppose Var(NodeId), Then(NodeId) and Else(NodeId) represent
+- infos about a given node.<p>
+-
+- The generic "NodeId" node is stored as
+-
+- <UL>
+- <LI> code-byte
+- <LI> \[var-info\]
+- <LI> \[Then-info\]
+- <LI> \[Else-info\]
+- </UL>
+-
+- where code-byte contains bit fields
+-
+- <UL>
+- <LI>Unused : 1 bit
+- <LI>Variable: 2 bits, one of the following codes
+- <UL>
+- <LI>DDDMP_ABSOLUTE_ID var-info = Var(NodeId) follows
+- <LI>DDDMP_RELATIVE_ID Var(NodeId) is represented in relative form as
+- var-info = Min(Var(Then(NodeId)),Var(Else(NodeId))) -Var(NodeId)
+- <LI>DDDMP_RELATIVE_1 No var-info follows, because
+- Var(NodeId) = Min(Var(Then(NodeId)),Var(Else(NodeId)))-1
+- <LI>DDDMP_TERMINAL Node is a terminal, no var info required
+- </UL>
+- <LI>T : 2 bits, with codes similar to V
+- <UL>
+- <LI>DDDMP_ABSOLUTE_ID Then-info = Then(NodeId) follows
+- <LI>DDDMP_RELATIVE_ID Then(NodeId) is represented in relative form as
+- Then-info = Nodeid-Then(NodeId)
+- <LI>DDDMP_RELATIVE_1 No info on Then(NodeId) follows, because
+- Then(NodeId) = NodeId-1
+- <LI>DDDMP_TERMINAL Then Node is a terminal, no info required (for BDDs)
+- </UL>
+- <LI>Ecompl : 1 bit, if 1 means complemented edge
+- <LI>E : 2 bits, with codes and meanings as for the Then edge
+- </UL>
+- var-info, Then-info, Else-info (if required) are represented as unsigned
+- integer values on a sufficient set of bytes (MSByte first).
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-NodeStoreRecurAdd (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: DD node to be stored */,
+- int mode /* IN: store mode */,
+- int *supportids /* IN: internal ids for variables */,
+- char **varnames /* IN: names of variables: to be stored with nodes */,
+- int *outids /* IN: output ids for variables */,
+- FILE *fp /* IN: store file */
+- )
+-{
+- DdNode *T = NULL;
+- DdNode *E = NULL;
+- int idf = (-1);
+- int idT = (-1);
+- int idE = (-1);
+- int vf = (-1);
+- int vT = (-1);
+- int vE = (-1);
+- int retValue;
+- int nVars;
+-
+- nVars = ddMgr->size;
+- T = E = NULL;
+- idf = idT = idE = (-1);
+-
+-#ifdef DDDMP_DEBUG
+- assert(!Cudd_IsComplement(f));
+- assert(f!=NULL);
+- assert(supportids!=NULL);
+-#endif
+-
+- /* If already visited, nothing to do. */
+- if (DddmpVisitedAdd (f)) {
+- return (DDDMP_SUCCESS);
+- }
+-
+- /* Mark node as visited. */
+- DddmpSetVisitedAdd (f);
+-
+- if (Cudd_IsConstant(f)) {
+- /* Check for special case: don't recur */
+- idf = DddmpReadNodeIndexAdd (f);
+- } else {
+-
+-#ifdef DDDMP_DEBUG
+- /* BDDs! Only one constant supported */
+- assert (!cuddIsConstant(f));
+-#endif
+-
+- /*
+- * Recursive call for Then edge
+- */
+-
+- T = cuddT(f);
+-#ifdef DDDMP_DEBUG
+- /* ROBDDs! No complemented Then edge */
+- assert (!Cudd_IsComplement(T));
+-#endif
+- /* recur */
+- retValue = NodeStoreRecurAdd (ddMgr, T, mode, supportids, varnames, outids,
+- fp);
+- if (retValue != DDDMP_SUCCESS) {
+- return (retValue);
+- }
+-
+- /*
+- * Recursive call for Else edge
+- */
+-
+- E = Cudd_Regular (cuddE (f));
+- retValue = NodeStoreRecurAdd (ddMgr, E, mode, supportids, varnames, outids,
+- fp);
+- if (retValue != DDDMP_SUCCESS) {
+- return (retValue);
+- }
+-
+- /*
+- * Obtain nodeids and variable ids of f, T, E
+- */
+-
+- idf = DddmpReadNodeIndexAdd (f);
+- vf = f->index;
+-
+- idT = DddmpReadNodeIndexAdd (T);
+- if (Cudd_IsConstant(T)) {
+- vT = nVars;
+- } else {
+- vT = T->index;
+- }
+-
+- idE = DddmpReadNodeIndexAdd (E);
+- if (Cudd_IsConstant(E)) {
+- vE = nVars;
+- } else {
+- vE = E->index;
+- }
+- }
+-
+- retValue = NodeTextStoreAdd (ddMgr, f, mode, supportids, varnames,
+- outids, fp, idf, vf, idT, idE);
+-
+- return (retValue);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Store One Single Node in Text Format.]
+-
+- Description [Store 1 0 0 for the terminal node.
+- Store id, left child pointer, right pointer for all the other nodes.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [NodeBinaryStore]
+-
+-******************************************************************************/
+-
+-static int
+-NodeTextStoreAdd (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: DD node to be stored */,
+- int mode /* IN: store mode */,
+- int *supportids /* IN: internal ids for variables */,
+- char **varnames /* IN: names of variables: to be stored with nodes */,
+- int *outids /* IN: output ids for variables */,
+- FILE *fp /* IN: Store file */,
+- int idf /* IN: index of the current node */,
+- int vf /* IN: variable of the current node */,
+- int idT /* IN: index of the Then node */,
+- int idE /* IN: index of the Else node */
+- )
+-{
+- int retValue;
+-
+- /*
+- * Check for Constant
+- */
+-
+- if (Cudd_IsConstant(f)) {
+-
+- if (f == Cudd_ReadOne(ddMgr)) {
+- if ((varnames != NULL) || (outids != NULL)) {
+- retValue = fprintf (fp, "%d T 1 0 0\n", idf);
+- } else {
+- retValue = fprintf (fp, "%d 1 0 0\n", idf);
+- }
+-
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- } else {
+- return (DDDMP_SUCCESS);
+- }
+- }
+-
+- if (f == Cudd_ReadZero(ddMgr)) {
+- if ((varnames != NULL) || (outids != NULL)) {
+- retValue = fprintf (fp, "%d T 0 0 0\n", idf);
+- } else {
+- retValue = fprintf (fp, "%d 0 0 0\n", idf);
+- }
+-
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- } else {
+- return (DDDMP_SUCCESS);
+- }
+- }
+-
+- /*
+- * A constant node different from 1: an ADD constant
+- */
+-
+- if ((varnames != NULL) || (outids != NULL)) {
+- retValue = fprintf (fp, "%d T %g 0 0\n",idf,Cudd_V(f));
+- } else {
+- retValue = fprintf (fp, "%d %g 0 0\n",idf, Cudd_V(f));
+- }
+-
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- } else {
+- return (DDDMP_SUCCESS);
+- }
+- }
+-
+- /*
+- * ... Not A Constant
+- */
+-
+- if (Cudd_IsComplement (cuddE(f))) {
+- idE = -idE;
+- }
+-
+- if (varnames != NULL) {
+- retValue = fprintf (fp, "%d %s %d %d %d\n",
+- idf, varnames[vf], supportids[vf], idT, idE);
+-
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- } else {
+- return (DDDMP_SUCCESS);
+- }
+- }
+-
+- if (outids != NULL) {
+- retValue = fprintf (fp, "%d %d %d %d %d\n",
+- idf, outids[vf], supportids[vf], idT, idE);
+-
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- } else {
+- return (DDDMP_SUCCESS);
+- }
+- }
+-
+- retValue = fprintf (fp, "%d %d %d %d\n",
+- idf, supportids[vf], idT, idE);
+-
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- } else {
+- return (DDDMP_SUCCESS);
+- }
+-}
+diff --git a/Cudd/dddmp/dddmpStoreBdd.c b/Cudd/dddmp/dddmpStoreBdd.c
+deleted file mode 100644
+index cdc7968..0000000
+--- a/Cudd/dddmp/dddmpStoreBdd.c
++++ /dev/null
+@@ -1,1114 +0,0 @@
+-/**CFile**********************************************************************
+-
+- FileName [dddmpStoreBdd.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Functions to write BDDs to file.]
+-
+- Description [Functions to write BDDs to file.
+- BDDs are represended on file either in text or binary format under the
+- following rules. A file contains a forest of BDDs (a vector of
+- Boolean functions). BDD nodes are numbered with contiguous numbers,
+- from 1 to NNodes (total number of nodes on a file). 0 is not used to
+- allow negative node indexes for complemented edges. A file contains
+- a header, including information about variables and roots to BDD
+- functions, followed by the list of nodes. BDD nodes are listed
+- according to their numbering, and in the present implementation
+- numbering follows a post-order strategy, in such a way that a node
+- is never listed before its Then/Else children.
+- ]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include "dddmpInt.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-static int NodeStoreRecurBdd(DdManager *ddMgr, DdNode *f, int mode, int *supportids, char **varnames, int *outids, FILE *fp);
+-static int NodeTextStoreBdd(DdManager *ddMgr, DdNode *f, int mode, int *supportids, char **varnames, int *outids, FILE *fp, int idf, int vf, int idT, int idE);
+-static int NodeBinaryStoreBdd(DdManager *ddMgr, DdNode *f, int mode, int *supportids, char **varnames, int *outids, FILE *fp, int idf, int vf, int idT, int idE, int vT, int vE, DdNode *T, DdNode *E);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a dump file representing the argument BDD.]
+-
+- Description [Dumps the argument BDD to file. Dumping is done through
+- Dddmp_cuddBddArrayStore. A dummy array of 1 BDD root is
+- used for this purpose.
+- ]
+-
+- SideEffects [Nodes are temporarily removed from unique hash. They are
+- re-linked after the store operation in a modified order.
+- ]
+-
+- SeeAlso [Dddmp_cuddBddLoad Dddmp_cuddBddArrayLoad]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddBddStore (
+- DdManager *ddMgr /* IN: DD Manager */,
+- char *ddname /* IN: DD name (or NULL) */,
+- DdNode *f /* IN: BDD root to be stored */,
+- char **varnames /* IN: array of variable names (or NULL) */,
+- int *auxids /* IN: array of converted var ids */,
+- int mode /* IN: storing mode selector */,
+- Dddmp_VarInfoType varinfo /* IN: extra info for variables in text mode */,
+- char *fname /* IN: File name */,
+- FILE *fp /* IN: File pointer to the store file */
+- )
+-{
+- int retValue;
+- DdNode *tmpArray[1];
+-
+- tmpArray[0] = f;
+-
+- retValue = Dddmp_cuddBddArrayStore (ddMgr,ddname,1,tmpArray,NULL,
+- varnames, auxids, mode, varinfo, fname, fp);
+-
+- return (retValue);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a dump file representing the argument Array of BDDs.]
+-
+- Description [Dumps the argument array of BDDs to file. Dumping is either
+- in text or binary form. BDDs are stored to the fp (already
+- open) file if not NULL. Otherwise the file whose name is
+- fname is opened in write mode. The header has the same format
+- for both textual and binary dump. Names are allowed for input
+- variables (vnames) and for represented functions (rnames).
+- For sake of generality and because of dynamic variable
+- ordering both variable IDs and permuted IDs are included.
+- New IDs are also supported (auxids). Variables are identified
+- with incremental numbers. according with their positiom in
+- the support set. In text mode, an extra info may be added,
+- chosen among the following options: name, ID, PermID, or an
+- auxiliary id. Since conversion from DD pointers to integers
+- is required, DD nodes are temporarily removed from the unique
+- hash table. This allows the use of the next field to store
+- node IDs.
+- ]
+-
+- SideEffects [Nodes are temporarily removed from the unique hash
+- table. They are re-linked after the store operation in a
+- modified order.
+- ]
+-
+- SeeAlso [Dddmp_cuddBddStore, Dddmp_cuddBddLoad,
+- Dddmp_cuddBddArrayLoad
+- ]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddBddArrayStore (
+- DdManager *ddMgr /* IN: DD Manager */,
+- char *ddname /* IN: dd name (or NULL) */,
+- int nRoots /* IN: number of output BDD roots to be stored */,
+- DdNode **f /* IN: array of BDD roots to be stored */,
+- char **rootnames /* IN: array of root names (or NULL) */,
+- char **varnames /* IN: array of variable names (or NULL) */,
+- int *auxids /* IN: array of converted var IDs */,
+- int mode /* IN: storing mode selector */,
+- Dddmp_VarInfoType varinfo /* IN: extra info for variables in text mode */,
+- char *fname /* IN: File name */,
+- FILE *fp /* IN: File pointer to the store file */
+- )
+-{
+- int retValue;
+-
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- int retValueBis;
+-
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During BDD Store.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During BDD Store.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-
+- retValue = DddmpCuddBddArrayStore (DDDMP_BDD, ddMgr, ddname, nRoots, f,
+- rootnames, varnames, auxids, mode, varinfo, fname, fp);
+-
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During BDD Store.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During BDD Store.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-
+- return (retValue);
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a dump file representing the argument Array of
+- BDDs.
+- ]
+-
+- Description [Dumps the argument array of BDDs to file.
+- Internal function doing inner steps of store for BDDs.
+- ]
+-
+- SideEffects [Nodes are temporarily removed from the unique hash
+- table. They are re-linked after the store operation in a
+- modified order.
+- ]
+-
+- SeeAlso [Dddmp_cuddBddStore, Dddmp_cuddBddLoad,
+- Dddmp_cuddBddArrayLoad
+- ]
+-
+-******************************************************************************/
+-
+-int
+-DddmpCuddBddArrayStore (
+- Dddmp_DecompType ddType /* IN: Selects the decomp type BDD */,
+- DdManager *ddMgr /* IN: DD Manager */,
+- char *ddname /* IN: DD name (or NULL) */,
+- int nRoots /* IN: number of output BDD roots to be stored */,
+- DdNode **f /* IN: array of DD roots to be stored */,
+- char **rootnames /* IN: array of root names (or NULL) */,
+- char **varnames /* IN: array of variable names (or NULL) */,
+- int *auxids /* IN: array of converted var IDs */,
+- int mode /* IN: storing mode selector */,
+- Dddmp_VarInfoType varinfo /* IN: extra info for variables in text mode */,
+- char *fname /* IN: File name */,
+- FILE *fp /* IN: File pointer to the store file */
+- )
+-{
+- DdNode *support = NULL;
+- DdNode *scan;
+- int *ids = NULL;
+- int *permids = NULL;
+- int *invpermids = NULL;
+- int *supportids = NULL;
+- int *outids = NULL;
+- char **outvarnames = NULL;
+- int nVars = ddMgr->size;
+- int nnodes;
+- int retValue;
+- int i, var;
+- int fileToClose = 0;
+-
+- /*
+- * Check DD Type
+- */
+-
+- Dddmp_CheckAndGotoLabel (ddType==DDDMP_ADD,
+- "Error writing to file: ADD Type.", failure);
+-
+- /*
+- * Check if File needs to be opened in the proper mode.
+- */
+-
+- if (fp == NULL) {
+- fp = fopen (fname, "w");
+- Dddmp_CheckAndGotoLabel (fp==NULL, "Error opening file.",
+- failure);
+- fileToClose = 1;
+- }
+-
+- /*
+- * Force binary mode if automatic.
+- */
+-
+- switch (mode) {
+- case DDDMP_MODE_TEXT:
+- case DDDMP_MODE_BINARY:
+- break;
+- case DDDMP_MODE_DEFAULT:
+- mode = DDDMP_MODE_BINARY;
+- break;
+- default:
+- mode = DDDMP_MODE_BINARY;
+- break;
+- }
+-
+- /*
+- * Alloc vectors for variable IDs, perm IDs and support IDs.
+- * +1 to include a slot for terminals.
+- */
+-
+- ids = DDDMP_ALLOC (int, nVars);
+- Dddmp_CheckAndGotoLabel (ids==NULL, "Error allocating memory.", failure);
+- permids = DDDMP_ALLOC (int, nVars);
+- Dddmp_CheckAndGotoLabel (permids==NULL, "Error allocating memory.", failure);
+- invpermids = DDDMP_ALLOC (int, nVars);
+- Dddmp_CheckAndGotoLabel (invpermids==NULL, "Error allocating memory.",
+- failure);
+- supportids = DDDMP_ALLOC (int, nVars+1);
+- Dddmp_CheckAndGotoLabel (supportids==NULL, "Error allocating memory.",
+- failure);
+-
+- for (i=0; i<nVars; i++) {
+- ids[i] = permids[i] = invpermids[i] = supportids[i] = (-1);
+- }
+- /* StQ */
+- supportids[nVars] = -1;
+-
+- /*
+- * Take the union of the supports of each output function.
+- * skip NULL functions.
+- * Set permids and invpermids of support variables to the proper values.
+- */
+-
+- for (i=0; i<nRoots; i++) {
+- if (f[i] == NULL) {
+- continue;
+- }
+- support = Cudd_Support (ddMgr, f[i]);
+- Dddmp_CheckAndGotoLabel (support==NULL, "NULL support returned.",
+- failure);
+- cuddRef (support);
+- scan = support;
+- while (!cuddIsConstant(scan)) {
+- ids[scan->index] = scan->index;
+- permids[scan->index] = ddMgr->perm[scan->index];
+- invpermids[ddMgr->perm[scan->index]] = scan->index;
+- scan = cuddT (scan);
+- }
+- Cudd_RecursiveDeref (ddMgr, support);
+- }
+- /* so that we do not try to free it in case of failure */
+- support = NULL;
+-
+- /*
+- * Set supportids to incremental (shrinked) values following the ordering.
+- */
+-
+- for (i=0, var=0; i<nVars; i++) {
+- if (invpermids[i] >= 0) {
+- supportids[invpermids[i]] = var++;
+- }
+- }
+- /* set a dummy id for terminal nodes */
+- supportids[nVars] = var;
+-
+- /*
+- * Select conversion array for extra var info
+- */
+-
+- switch (mode) {
+- case DDDMP_MODE_TEXT:
+- switch (varinfo) {
+- case DDDMP_VARIDS:
+- outids = ids;
+- break;
+- case DDDMP_VARPERMIDS:
+- outids = permids;
+- break;
+- case DDDMP_VARAUXIDS:
+- outids = auxids;
+- break;
+- case DDDMP_VARNAMES:
+- outvarnames = varnames;
+- break;
+- case DDDMP_VARDEFAULT:
+- break;
+- }
+- break;
+- case DDDMP_MODE_BINARY:
+- outids = NULL;
+- break;
+- }
+-
+- /*
+- * Number dd nodes and count them (numbering is from 1 to nnodes)
+- */
+-
+- nnodes = DddmpNumberBddNodes (ddMgr, f, nRoots);
+-
+- /*
+- * Start Header
+- */
+-
+-#ifdef DDDMP_VERSION
+- retValue = fprintf (fp, ".ver %s\n", DDDMP_VERSION);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-#endif
+-
+- retValue = fprintf (fp, ".mode %c\n", mode);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- if (mode == DDDMP_MODE_TEXT) {
+- retValue = fprintf (fp, ".varinfo %d\n", varinfo);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- if (ddname != NULL) {
+- retValue = fprintf (fp, ".dd %s\n",ddname);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- retValue = fprintf (fp, ".nnodes %d\n", nnodes);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- retValue = fprintf (fp, ".nvars %d\n", nVars);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- retValue = fprintf (fp, ".nsuppvars %d\n", var);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- /*------------ Write the Var Names by scanning the ids array -------------*/
+-
+- if (varnames != NULL) {
+-
+- retValue = fprintf (fp, ".suppvarnames");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- for (i=0; i<nVars; i++) {
+- if (ids[i] >= 0) {
+- if (varnames[ids[i]] == NULL) {
+- (void) fprintf (stderr,
+- "DdStore Warning: null variable name. DUMMY%d generated\n", i);
+- fflush (stderr);
+- varnames[ids[i]] = DDDMP_ALLOC (char, 10);
+- Dddmp_CheckAndGotoLabel (varnames[ids[i]] == NULL,
+- "Error allocating memory.", failure);
+- sprintf (varnames[ids[i]], "DUMMY%d", i);
+- }
+- retValue = fprintf (fp, " %s", varnames[ids[i]]);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+- }
+-
+- retValue = fprintf (fp, "\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- /*--------- Write the Var SUPPORT Names by scanning the ids array ---------*/
+-
+- if (varnames != NULL) {
+- retValue = fprintf (fp, ".orderedvarnames");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- for (i=0; i<nVars; i++) {
+- if (varnames[ddMgr->invperm[i]] == NULL) {
+- (void) fprintf (stderr,
+- "DdStore Warning: null variable name. DUMMY%d generated\n", i);
+- fflush (stderr);
+- varnames[ddMgr->invperm[i]] = DDDMP_ALLOC (char, 10);
+- Dddmp_CheckAndGotoLabel (varnames[ddMgr->invperm[i]] == NULL,
+- "Error allocating memory.", failure);
+- sprintf (varnames[ddMgr->invperm[i]], "DUMMY%d", i);
+- }
+-
+- retValue = fprintf (fp, " %s", varnames[ddMgr->invperm[i]]);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- retValue = fprintf (fp, "\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- /*------------ Write the var ids by scanning the ids array ---------------*/
+-
+- retValue = fprintf (fp, ".ids");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- for (i=0; i<nVars; i++) {
+- if (ids[i] >= 0) {
+- retValue = fprintf (fp, " %d", i);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+- }
+- retValue = fprintf (fp, "\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- /*
+- * Write the var permids by scanning the permids array.
+- */
+-
+- retValue = fprintf (fp, ".permids");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- for (i = 0; i < nVars; i++) {
+- if (permids[i] >= 0) {
+- retValue = fprintf (fp, " %d", permids[i]);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+- }
+-
+- retValue = fprintf (fp, "\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- if (auxids != NULL) {
+-
+- /*
+- * Write the var auxids by scanning the ids array.
+- */
+-
+- retValue = fprintf (fp, ".auxids");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- for (i = 0; i < nVars; i++) {
+- if (ids[i] >= 0) {
+- retValue = fprintf (fp, " %d", auxids[i]);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+- }
+- retValue = fprintf (fp, "\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- /*
+- * Write the roots info.
+- */
+-
+- retValue = fprintf (fp, ".nroots %d\n", nRoots);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- if (rootnames != NULL) {
+-
+- /*
+- * Write the root names.
+- */
+-
+- retValue = fprintf (fp, ".rootnames");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- for (i = 0; i < nRoots; i++) {
+- if (rootnames[i] == NULL) {
+- (void) fprintf (stderr,
+- "DdStore Warning: null variable name. ROOT%d generated\n",i);
+- fflush (stderr);
+- rootnames[i] = DDDMP_ALLOC(char,10);
+- Dddmp_CheckAndGotoLabel (rootnames[i]==NULL,
+- "Error writing to file.", failure);
+- sprintf(rootnames[ids[i]], "ROOT%d",i);
+- }
+- retValue = fprintf (fp, " %s", rootnames[i]);
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- retValue = fprintf (fp, "\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- retValue = fprintf (fp, ".rootids");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- /*
+- * Write BDD indexes of function roots.
+- * Use negative integers for complemented edges.
+- */
+-
+- for (i = 0; i < nRoots; i++) {
+- if (f[i] == NULL) {
+- (void) fprintf (stderr, "DdStore Warning: %d-th root is NULL\n",i);
+- fflush (stderr);
+- retValue = fprintf (fp, " 0");
+- }
+- if (Cudd_IsComplement(f[i])) {
+- retValue = fprintf (fp, " -%d",
+- DddmpReadNodeIndexBdd (Cudd_Regular (f[i])));
+- } else {
+- retValue = fprintf (fp, " %d",
+- DddmpReadNodeIndexBdd (Cudd_Regular (f[i])));
+- }
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- retValue = fprintf (fp, "\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- retValue = fprintf (fp, ".nodes\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- /*
+- * END HEADER
+- */
+-
+- /*
+- * Call the function that really gets the job done.
+- */
+-
+- for (i = 0; i < nRoots; i++) {
+- if (f[i] != NULL) {
+- retValue = NodeStoreRecurBdd (ddMgr, Cudd_Regular(f[i]),
+- mode, supportids, outvarnames, outids, fp);
+- Dddmp_CheckAndGotoLabel (retValue==DDDMP_FAILURE,
+- "Error writing to file.", failure);
+- }
+- }
+-
+- /*
+- * Write trailer and return.
+- */
+-
+- retValue = fprintf (fp, ".end\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+-
+- if (fileToClose) {
+- fclose (fp);
+- }
+-
+- DddmpUnnumberBddNodes (ddMgr, f, nRoots);
+- DDDMP_FREE (ids);
+- DDDMP_FREE (permids);
+- DDDMP_FREE (invpermids);
+- DDDMP_FREE (supportids);
+-
+- return (DDDMP_SUCCESS);
+-
+- failure:
+-
+- if (ids != NULL) {
+- DDDMP_FREE (ids);
+- }
+- if (permids != NULL) {
+- DDDMP_FREE (permids);
+- }
+- if (invpermids != NULL) {
+- DDDMP_FREE (invpermids);
+- }
+- if (supportids != NULL) {
+- DDDMP_FREE (supportids);
+- }
+- if (support != NULL) {
+- Cudd_RecursiveDeref (ddMgr, support);
+- }
+-
+- return (DDDMP_FAILURE);
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Performs the recursive step of Dddmp_bddStore.]
+-
+- Description [Stores a node to file in either test or binary mode.<l>
+- In text mode a node is represented (on a text line basis) as
+- <UL>
+- <LI> node-index \[var-extrainfo\] var-index Then-index Else-index
+- </UL>
+-
+- where all indexes are integer numbers and var-extrainfo
+- (optional redundant field) is either an integer or a string
+- (variable name). Node-index is redundant (due to the node
+- ordering) but we keep it for readability.<p>
+-
+- In binary mode nodes are represented as a sequence of bytes,
+- representing var-index, Then-index, and Else-index in an
+- optimized way. Only the first byte (code) is mandatory.
+- Integer indexes are represented in absolute or relative mode,
+- where relative means offset wrt. a Then/Else node info.
+- Suppose Var(NodeId), Then(NodeId) and Else(NodeId) represent
+- infos about a given node.<p>
+-
+- The generic "NodeId" node is stored as
+-
+- <UL>
+- <LI> code-byte
+- <LI> \[var-info\]
+- <LI> \[Then-info\]
+- <LI> \[Else-info\]
+- </UL>
+-
+- where code-byte contains bit fields
+-
+- <UL>
+- <LI>Unused : 1 bit
+- <LI>Variable: 2 bits, one of the following codes
+- <UL>
+- <LI>DDDMP_ABSOLUTE_ID var-info = Var(NodeId) follows
+- <LI>DDDMP_RELATIVE_ID Var(NodeId) is represented in relative form as
+- var-info = Min(Var(Then(NodeId)),Var(Else(NodeId))) -Var(NodeId)
+- <LI>DDDMP_RELATIVE_1 No var-info follows, because
+- Var(NodeId) = Min(Var(Then(NodeId)),Var(Else(NodeId)))-1
+- <LI>DDDMP_TERMINAL Node is a terminal, no var info required
+- </UL>
+- <LI>T : 2 bits, with codes similar to V
+- <UL>
+- <LI>DDDMP_ABSOLUTE_ID Then-info = Then(NodeId) follows
+- <LI>DDDMP_RELATIVE_ID Then(NodeId) is represented in relative form as
+- Then-info = Nodeid-Then(NodeId)
+- <LI>DDDMP_RELATIVE_1 No info on Then(NodeId) follows, because
+- Then(NodeId) = NodeId-1
+- <LI>DDDMP_TERMINAL Then Node is a terminal, no info required (for BDDs)
+- </UL>
+- <LI>Ecompl : 1 bit, if 1 means complemented edge
+- <LI>E : 2 bits, with codes and meanings as for the Then edge
+- </UL>
+- var-info, Then-info, Else-info (if required) are represented as unsigned
+- integer values on a sufficient set of bytes (MSByte first).
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-NodeStoreRecurBdd (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: DD node to be stored */,
+- int mode /* IN: store mode */,
+- int *supportids /* IN: internal ids for variables */,
+- char **varnames /* IN: names of variables: to be stored with nodes */,
+- int *outids /* IN: output ids for variables */,
+- FILE *fp /* IN: store file */
+- )
+-{
+- DdNode *T = NULL;
+- DdNode *E = NULL;
+- int idf = (-1);
+- int idT = (-1);
+- int idE = (-1);
+- int vf = (-1);
+- int vT = (-1);
+- int vE = (-1);
+- int retValue;
+- int nVars;
+-
+- nVars = ddMgr->size;
+- T = E = NULL;
+- idf = idT = idE = (-1);
+-
+-#ifdef DDDMP_DEBUG
+- assert(!Cudd_IsComplement(f));
+- assert(f!=NULL);
+- assert(supportids!=NULL);
+-#endif
+-
+- /* If already visited, nothing to do. */
+- if (DddmpVisitedBdd (f)) {
+- return (DDDMP_SUCCESS);
+- }
+-
+- /* Mark node as visited. */
+- DddmpSetVisitedBdd (f);
+-
+- if (Cudd_IsConstant(f)) {
+- /* Check for special case: don't recur */
+- idf = DddmpReadNodeIndexBdd (f);
+- } else {
+-
+-#ifdef DDDMP_DEBUG
+- /* BDDs! Only one constant supported */
+- assert (!cuddIsConstant(f));
+-#endif
+-
+- /*
+- * Recursive call for Then edge
+- */
+-
+- T = cuddT(f);
+-#ifdef DDDMP_DEBUG
+- /* ROBDDs! No complemented Then edge */
+- assert (!Cudd_IsComplement(T));
+-#endif
+- /* recur */
+- retValue = NodeStoreRecurBdd (ddMgr, T, mode, supportids, varnames, outids,
+- fp);
+- if (retValue != DDDMP_SUCCESS) {
+- return (retValue);
+- }
+-
+- /*
+- * Recursive call for Else edge
+- */
+-
+- E = Cudd_Regular (cuddE (f));
+- retValue = NodeStoreRecurBdd (ddMgr, E, mode, supportids, varnames, outids,
+- fp);
+- if (retValue != DDDMP_SUCCESS) {
+- return (retValue);
+- }
+-
+- /*
+- * Obtain nodeids and variable ids of f, T, E
+- */
+-
+- idf = DddmpReadNodeIndexBdd (f);
+- vf = f->index;
+-
+- idT = DddmpReadNodeIndexBdd (T);
+- if (Cudd_IsConstant(T)) {
+- vT = nVars;
+- } else {
+- vT = T->index;
+- }
+-
+- idE = DddmpReadNodeIndexBdd (E);
+- if (Cudd_IsConstant(E)) {
+- vE = nVars;
+- } else {
+- vE = E->index;
+- }
+- }
+-
+- switch (mode) {
+- case DDDMP_MODE_TEXT:
+- retValue = NodeTextStoreBdd (ddMgr, f, mode, supportids, varnames,
+- outids, fp, idf, vf, idT, idE);
+- break;
+- case DDDMP_MODE_BINARY:
+- retValue = NodeBinaryStoreBdd (ddMgr, f, mode, supportids, varnames,
+- outids, fp, idf, vf, idT, idE, vT, vE, T, E);
+- break;
+- default:
+- return (DDDMP_FAILURE);
+- }
+-
+- return (retValue);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Store One Single Node in Text Format.]
+-
+- Description [Store 1 0 0 for the terminal node.
+- Store id, left child pointer, right pointer for all the other nodes.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [NodeBinaryStoreBdd]
+-
+-******************************************************************************/
+-
+-static int
+-NodeTextStoreBdd (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: DD node to be stored */,
+- int mode /* IN: store mode */,
+- int *supportids /* IN: internal ids for variables */,
+- char **varnames /* IN: names of variables: to be stored with nodes */,
+- int *outids /* IN: output ids for variables */,
+- FILE *fp /* IN: Store file */,
+- int idf /* IN: index of the current node */,
+- int vf /* IN: variable of the current node */,
+- int idT /* IN: index of the Then node */,
+- int idE /* IN: index of the Else node */
+- )
+-{
+- int retValue = EOF;
+-
+- /*
+- * Check for Constant
+- */
+-
+- if (Cudd_IsConstant(f)) {
+-
+- if (f == Cudd_ReadOne(ddMgr)) {
+- if ((varnames != NULL) || (outids != NULL)) {
+- retValue = fprintf (fp, "%d T 1 0 0\n", idf);
+- } else {
+- retValue = fprintf (fp, "%d 1 0 0\n", idf);
+- }
+-
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- } else {
+- return (DDDMP_SUCCESS);
+- }
+- }
+-
+- if (f == Cudd_ReadZero(ddMgr)) {
+- if ((varnames != NULL) || (outids != NULL)) {
+- retValue = fprintf (fp, "%d T 0 0 0\n", idf);
+- } else {
+- retValue = fprintf (fp, "%d 0 0 0\n", idf);
+- }
+-
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- } else {
+- return (DDDMP_SUCCESS);
+- }
+- }
+-
+- /*
+- * A constant node different from 1: an ADD constant
+- */
+-
+- Dddmp_CheckAndReturn (((varnames!=NULL)||(outids!=NULL)),
+- "Error writing to file: ADD Type.");
+-
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- } else {
+- return (DDDMP_SUCCESS);
+- }
+- }
+-
+- /*
+- * ... Not A Constant
+- */
+-
+- if (Cudd_IsComplement (cuddE(f))) {
+- idE = -idE;
+- }
+-
+- if (varnames != NULL) {
+- retValue = fprintf (fp, "%d %s %d %d %d\n",
+- idf, varnames[vf], supportids[vf], idT, idE);
+-
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- } else {
+- return (DDDMP_SUCCESS);
+- }
+- }
+-
+- if (outids != NULL) {
+- retValue = fprintf (fp, "%d %d %d %d %d\n",
+- idf, outids[vf], supportids[vf], idT, idE);
+-
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- } else {
+- return (DDDMP_SUCCESS);
+- }
+- }
+-
+- retValue = fprintf (fp, "%d %d %d %d\n",
+- idf, supportids[vf], idT, idE);
+-
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- } else {
+- return (DDDMP_SUCCESS);
+- }
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Store One Single Node in Binary Format.]
+-
+- Description [Store 1 0 0 for the terminal node.
+- Store id, left child pointer, right pointer for all the other nodes.
+- Store every information as coded binary values.]
+-
+- SideEffects [None]
+-
+- SeeAlso [NodeTextStoreBdd]
+-
+-******************************************************************************/
+-
+-static int
+-NodeBinaryStoreBdd (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: DD node to be stored */,
+- int mode /* IN: store mode */,
+- int *supportids /* IN: internal ids for variables */,
+- char **varnames /* IN: names of variables: to be stored with nodes */,
+- int *outids /* IN: output ids for variables */,
+- FILE *fp /* IN: store file */,
+- int idf /* IN: index of the node */,
+- int vf /* IN: variable of the node */,
+- int idT /* IN: index of the Then node */,
+- int idE /* IN: index of the Else node */,
+- int vT /* IN: variable of the Then node */,
+- int vE /* IN: variable of the Else node */,
+- DdNode *T /* IN: Then node */,
+- DdNode *E /* IN: Else node */
+- )
+-{
+- int retValue, diff, var;
+- struct binary_dd_code code;
+-
+- /*
+- * Check for Constant
+- */
+-
+- /* only integer ids used, varnames ignored */
+- /* Terminal one is coded as DDDMP_TERMINAL, all other fields are 0 */
+- if (Cudd_IsConstant(f)) {
+- code.Unused = 0;
+- code.V = DDDMP_TERMINAL;
+- code.T = 0;
+- code.E = 0;
+- code.Ecompl = 0;
+- retValue = DddmpWriteCode (fp,code);
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- } else {
+- return (DDDMP_SUCCESS);
+- }
+- }
+-
+- /*
+- * Non terminal: output variable id
+- */
+-
+- var = supportids[vf];
+- diff = (supportids[vT]<supportids[vE]) ?
+- (supportids[vT]-var) : (supportids[vE]-var);
+- code.V = DDDMP_ABSOLUTE_ID;
+-
+- if (diff <= var) {
+- if (diff == 1) {
+- code.V = DDDMP_RELATIVE_1;
+- } else {
+- code.V = DDDMP_RELATIVE_ID;
+- var = diff;
+- }
+- }
+-
+- if (T == DD_ONE(ddMgr)) {
+- code.T = DDDMP_TERMINAL;
+- } else {
+- /* compute displacement */
+- diff = idf - idT;
+- code.T = DDDMP_ABSOLUTE_ID;
+- if (diff <= idT) {
+- if (diff == 1) {
+- code.T = DDDMP_RELATIVE_1;
+- } else {
+- code.T = DDDMP_RELATIVE_ID;
+- idT = diff;
+- }
+- }
+- }
+-
+- if (E == DD_ONE(ddMgr)) {
+- code.E = DDDMP_TERMINAL;
+- } else {
+- /* compute displacement */
+- diff = idf - idE;
+- code.E = DDDMP_ABSOLUTE_ID;
+- if (diff <= idE) {
+- if (diff == 1) {
+- code.E = DDDMP_RELATIVE_1;
+- } else {
+- code.E = DDDMP_RELATIVE_ID;
+- idE = diff;
+- }
+- }
+- }
+-
+- if (Cudd_IsComplement(cuddE(f))) {
+- code.Ecompl = 1;
+- } else {
+- code.Ecompl = 0;
+- }
+-
+- retValue = DddmpWriteCode (fp,code);
+-
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- }
+-
+- if ((code.V == DDDMP_ABSOLUTE_ID) || (code.V == DDDMP_RELATIVE_ID)) {
+- retValue = DddmpWriteInt (fp, var);
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- }
+- }
+-
+- if ((code.T == DDDMP_ABSOLUTE_ID) || (code.T == DDDMP_RELATIVE_ID)) {
+- retValue = DddmpWriteInt(fp,idT);
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- }
+- }
+-
+- if ((code.E == DDDMP_ABSOLUTE_ID) || (code.E == DDDMP_RELATIVE_ID)) {
+- retValue = DddmpWriteInt(fp,idE);
+- if (retValue == EOF) {
+- return (DDDMP_FAILURE);
+- }
+- }
+-
+- return (retValue);
+-}
+-
+diff --git a/Cudd/dddmp/dddmpStoreCnf.c b/Cudd/dddmp/dddmpStoreCnf.c
+deleted file mode 100644
+index 4285613..0000000
+--- a/Cudd/dddmp/dddmpStoreCnf.c
++++ /dev/null
+@@ -1,1583 +0,0 @@
+-/**CFile**********************************************************************
+-
+- FileName [dddmpStoreCnf.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Functions to write out BDDs to file in a CNF format]
+-
+- Description [Functions to write out BDDs to file in a CNF format.]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include <limits.h>
+-#include "dddmpInt.h"
+-
+-/*-------------------------------1--------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-#define DDDMP_DEBUG_CNF 0
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-#define GET_MAX(x,y) (x>y?x:y)
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-static int DddmpCuddBddArrayStoreCnf(DdManager *ddMgr, DdNode **f, int rootN, Dddmp_DecompCnfStoreType mode, int noHeader, char **varNames, int *bddIds, int *bddAuxIds, int *cnfIds, int idInitial, int edgeInTh, int pathLengthTh, char *fname, FILE *fp, int *clauseNPtr, int *varNewNPtr);
+-static int StoreCnfNodeByNode(DdManager *ddMgr, DdNode **f, int rootN, int *bddIds, int *cnfIds, FILE *fp, int *clauseN, int *varMax, int *rootStartLine);
+-static int StoreCnfNodeByNodeRecur(DdManager *ddMgr, DdNode *f, int *bddIds, int *cnfIds, FILE *fp, int *clauseN, int *varMax);
+-static int StoreCnfOneNode(DdNode *f, int idf, int vf, int idT, int idE, FILE *fp, int *clauseN, int *varMax);
+-static int StoreCnfMaxtermByMaxterm(DdManager *ddMgr, DdNode **f, int rootN, int *bddIds, int *cnfIds, int idInitial, FILE *fp, int *varMax, int *clauseN, int *rootStartLine);
+-static int StoreCnfBest(DdManager *ddMgr, DdNode **f, int rootN, int *bddIds, int *cnfIds, int idInitial, FILE *fp, int *varMax, int *clauseN, int *rootStartLine);
+-static void StoreCnfMaxtermByMaxtermRecur(DdManager *ddMgr, DdNode *node, int *bddIds, int *cnfIds, FILE *fp, int *list, int *clauseN, int *varMax);
+-static int StoreCnfBestNotSharedRecur(DdManager *ddMgr, DdNode *node, int idf, int *bddIds, int *cnfIds, FILE *fp, int *list, int *clauseN, int *varMax);
+-static int StoreCnfBestSharedRecur(DdManager *ddMgr, DdNode *node, int *bddIds, int *cnfIds, FILE *fp, int *list, int *clauseN, int *varMax);
+-static int printCubeCnf(DdManager *ddMgr, DdNode *node, int *cnfIds, FILE *fp, int *list, int *varMax);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a dump file representing the argument BDD in
+- a CNF format.
+- ]
+-
+- Description [Dumps the argument BDD to file.
+- This task is performed by calling the function
+- Dddmp_cuddBddArrayStoreCnf.
+- ]
+-
+- SideEffects [Nodes are temporarily removed from unique hash. They are
+- re-linked after the store operation in a modified order.
+- ]
+-
+- SeeAlso [Dddmp_cuddBddArrayStoreCnf]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddBddStoreCnf (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: BDD root to be stored */,
+- Dddmp_DecompCnfStoreType mode /* IN: format selection */,
+- int noHeader /* IN: do not store header iff 1 */,
+- char **varNames /* IN: array of variable names (or NULL) */,
+- int *bddIds /* IN: array of var ids */,
+- int *bddAuxIds /* IN: array of BDD node Auxiliary Ids */,
+- int *cnfIds /* IN: array of CNF var ids */,
+- int idInitial /* IN: starting id for cutting variables */,
+- int edgeInTh /* IN: Max # Incoming Edges */,
+- int pathLengthTh /* IN: Max Path Length */,
+- char *fname /* IN: file name */,
+- FILE *fp /* IN: pointer to the store file */,
+- int *clauseNPtr /* OUT: number of clause stored */,
+- int *varNewNPtr /* OUT: number of new variable created */
+- )
+-{
+- int retValue;
+- DdNode *tmpArray[1];
+-
+- tmpArray[0] = f;
+-
+- retValue = Dddmp_cuddBddArrayStoreCnf (ddMgr, tmpArray, 1, mode,
+- noHeader, varNames, bddIds, bddAuxIds, cnfIds, idInitial, edgeInTh,
+- pathLengthTh, fname, fp, clauseNPtr, varNewNPtr);
+-
+- Dddmp_CheckAndReturn (retValue==DDDMP_FAILURE, "Failure.");
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a dump file representing the argument array of BDDs
+- in CNF format.
+- ]
+-
+- Description [Dumps the argument array of BDDs to file.]
+-
+- SideEffects [Nodes are temporarily removed from the unique hash
+- table. They are re-linked after the store operation in a
+- modified order.
+- Three methods are allowed:
+- * NodeByNode method: Insert a cut-point for each BDD node (but the
+- terminal nodes)
+- * MaxtermByMaxterm method: Insert no cut-points, i.e. the off-set of
+- trhe function is stored
+- * Best method: Tradeoff between the previous two methods.
+- Auxiliary variables, i.e., cut points are inserted following these
+- criterias:
+- * edgeInTh
+- indicates the maximum number of incoming edges up to which
+- no cut point (auxiliary variable) is inserted.
+- If edgeInTh:
+- * is equal to -1 no cut point due to incoming edges are inserted
+- (MaxtermByMaxterm method.)
+- * is equal to 0 a cut point is inserted for each node with a single
+- incoming edge, i.e., each node, (NodeByNode method).
+- * is equal to n a cut point is inserted for each node with (n+1)
+- incoming edges.
+- * pathLengthTh
+- indicates the maximum length path up to which no cut points
+- (auxiliary variable) is inserted.
+- If the path length between two nodes exceeds this value, a cut point
+- is inserted.
+- If pathLengthTh:
+- * is equal to -1 no cut point due path length are inserted
+- (MaxtermByMaxterm method.)
+- * is equal to 0 a cut point is inserted for each node (NodeByNode
+- method).
+- * is equal to n a cut point is inserted on path whose length is
+- equal to (n+1).
+- Notice that the maximum number of literals in a clause is equal
+- to (pathLengthTh + 2), i.e., for each path we have to keep into
+- account a CNF variable for each node plus 2 added variables for
+- the bottom and top-path cut points.
+- The stored file can contain a file header or not depending on the
+- noHeader parameter (IFF 0, usual setting, the header is usually stored.
+- This option can be useful in storing multiple BDDs, as separate BDDs,
+- on the same file leaving the opening of the file to the caller.
+- ]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddBddArrayStoreCnf (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: array of BDD roots to be stored */,
+- int rootN /* IN: # output BDD roots to be stored */,
+- Dddmp_DecompCnfStoreType mode /* IN: format selection */,
+- int noHeader /* IN: do not store header iff 1 */,
+- char **varNames /* IN: array of variable names (or NULL) */,
+- int *bddIds /* IN: array of converted var IDs */,
+- int *bddAuxIds /* IN: array of BDD node Auxiliary Ids */,
+- int *cnfIds /* IN: array of converted var IDs */,
+- int idInitial /* IN: starting id for cutting variables */,
+- int edgeInTh /* IN: Max # Incoming Edges */,
+- int pathLengthTh /* IN: Max Path Length */,
+- char *fname /* IN: file name */,
+- FILE *fp /* IN: pointer to the store file */,
+- int *clauseNPtr /* OUT: number of clause stored */,
+- int *varNewNPtr /* OUT: number of new variable created */
+- )
+-{
+- int retValue2;
+-
+-#if 0
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- int retValue1;
+-
+- retValue1 = Cudd_DebugCheck (ddMgr);
+- Dddmp_CheckAndReturn (retValue1==1,
+- "Inconsistency Found During CNF Store.");
+- Dddmp_CheckAndReturn (retValue1==CUDD_OUT_OF_MEM,
+- "Out of Memory During CNF Store.");
+-#endif
+-#endif
+-#endif
+-
+- retValue2 = DddmpCuddBddArrayStoreCnf (ddMgr, f, rootN, mode, noHeader,
+- varNames, bddIds, bddAuxIds, cnfIds, idInitial, edgeInTh, pathLengthTh,
+- fname, fp, clauseNPtr, varNewNPtr);
+-
+-#if 0
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- retValue1 = Cudd_DebugCheck (ddMgr);
+- Dddmp_CheckAndReturn (retValue1==1,
+- "Inconsistency Found During CNF Store.");
+- Dddmp_CheckAndReturn (retValue1==CUDD_OUT_OF_MEM,
+- "Out of Memory During CNF Store.");
+-#endif
+-#endif
+-#endif
+-
+- return (retValue2);
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a dump file representing the argument Array of
+- BDDs in the CNF standard format.
+- ]
+-
+- Description [Dumps the argument array of BDDs/ADDs to file in CNF format.
+- The following arrays: varNames, bddIds, bddAuxIds, and cnfIds
+- fix the correspondence among variable names, BDD ids, BDD
+- auxiliary ids and the ids used to store the CNF problem.
+- All these arrays are automatically created iff NULL.
+- Auxiliary variable, iff necessary, are created starting from value
+- idInitial.
+- Iff idInitial is <= 0 its value is selected as the number of internal
+- CUDD variable + 2.
+- Auxiliary variables, i.e., cut points are inserted following these
+- criterias:
+- * edgeInTh
+- indicates the maximum number of incoming edges up to which
+- no cut point (auxiliary variable) is inserted.
+- If edgeInTh:
+- * is equal to -1 no cut point due to incoming edges are inserted
+- (MaxtermByMaxterm method.)
+- * is equal to 0 a cut point is inserted for each node with a single
+- incoming edge, i.e., each node, (NodeByNode method).
+- * is equal to n a cut point is inserted for each node with (n+1)
+- incoming edges.
+- * pathLengthTh
+- indicates the maximum length path up to which no cut points
+- (auxiliary variable) is inserted.
+- If the path length between two nodes exceeds this value, a cut point
+- is inserted.
+- If pathLengthTh:
+- * is equal to -1 no cut point due path length are inserted
+- (MaxtermByMaxterm method.)
+- * is equal to 0 a cut point is inserted for each node (NodeByNode
+- method).
+- * is equal to n a cut point is inserted on path whose length is
+- equal to (n+1).
+- Notice that the maximum number of literals in a clause is equal
+- to (pathLengthTh + 2), i.e., for each path we have to keep into
+- account a CNF variable for each node plus 2 added variables for
+- the bottom and top-path cut points.
+- ]
+-
+- SideEffects [Nodes are temporarily removed from the unique hash table.
+- They are re-linked after the store operation in a modified
+- order.
+- ]
+-
+- SeeAlso [Dddmp_cuddBddStore]
+-
+-******************************************************************************/
+-
+-static int
+-DddmpCuddBddArrayStoreCnf (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: array of BDD roots to be stored */,
+- int rootN /* IN: # of output BDD roots to be stored */,
+- Dddmp_DecompCnfStoreType mode /* IN: format selection */,
+- int noHeader /* IN: do not store header iff 1 */,
+- char **varNames /* IN: array of variable names (or NULL) */,
+- int *bddIds /* IN: array of BDD node Ids (or NULL) */,
+- int *bddAuxIds /* IN: array of BDD Aux Ids (or NULL) */,
+- int *cnfIds /* IN: array of CNF ids (or NULL) */,
+- int idInitial /* IN: starting id for cutting variables */,
+- int edgeInTh /* IN: Max # Incoming Edges */,
+- int pathLengthTh /* IN: Max Path Length */,
+- char *fname /* IN: file name */,
+- FILE *fp /* IN: pointer to the store file */,
+- int *clauseNPtr /* OUT: number of clause stored */,
+- int *varNewNPtr /* OUT: number of new variable created */
+- )
+-{
+- DdNode *support = NULL;
+- DdNode *scan = NULL;
+- int *bddIdsInSupport = NULL;
+- int *permIdsInSupport = NULL;
+- int *rootStartLine = NULL;
+- int nVar, nVarInSupport, retValue, i, j, fileToClose;
+- int varMax, clauseN, flagVar, intStringLength;
+- int bddIdsToFree = 0;
+- int bddAuxIdsToFree = 0;
+- int cnfIdsToFree = 0;
+- int varNamesToFree = 0;
+- char intString[DDDMP_MAXSTRLEN];
+- char tmpString[DDDMP_MAXSTRLEN];
+- fpos_t posFile1, posFile2;
+-
+- /*---------------------------- Set Initial Values -------------------------*/
+-
+- support = scan = NULL;
+- bddIdsInSupport = permIdsInSupport = rootStartLine = NULL;
+- nVar = ddMgr->size;
+- fileToClose = 0;
+- sprintf (intString, "%d", INT_MAX);
+- intStringLength = strlen (intString);
+-
+- /*---------- Check if File needs to be opened in the proper mode ----------*/
+-
+- if (fp == NULL) {
+- fp = fopen (fname, "w");
+- Dddmp_CheckAndGotoLabel (fp==NULL, "Error opening file.",
+- failure);
+- fileToClose = 1;
+- }
+-
+- /*--------- Generate Bdd LOCAL IDs and Perm IDs and count them ------------*/
+-
+- /* BDD Ids */
+- bddIdsInSupport = DDDMP_ALLOC (int, nVar);
+- Dddmp_CheckAndGotoLabel (bddIdsInSupport==NULL, "Error allocating memory.",
+- failure);
+- /* BDD PermIds */
+- permIdsInSupport = DDDMP_ALLOC (int, nVar);
+- Dddmp_CheckAndGotoLabel (permIdsInSupport==NULL, "Error allocating memory.",
+- failure);
+- /* Support Size (Number of BDD Ids-PermIds */
+- nVarInSupport = 0;
+-
+- for (i=0; i<nVar; i++) {
+- bddIdsInSupport[i] = permIdsInSupport[i] = (-1);
+- }
+-
+- /*
+- * Take the union of the supports of each output function.
+- * Skip NULL functions.
+- */
+-
+-
+- for (i=0; i<rootN; i++) {
+- if (f[i] == NULL) {
+- continue;
+- }
+- support = Cudd_Support (ddMgr, f[i]);
+- Dddmp_CheckAndGotoLabel (support==NULL, "NULL support returned.",
+- failure);
+- cuddRef (support);
+- scan = support;
+- while (!cuddIsConstant(scan)) {
+- /* Count Number of Variable in the Support */
+- nVarInSupport++;
+- /* Set Ids and Perm-Ids */
+- bddIdsInSupport[scan->index] = scan->index;
+- permIdsInSupport[scan->index] = ddMgr->perm[scan->index];
+- scan = cuddT (scan);
+- }
+- Cudd_RecursiveDeref (ddMgr, support);
+- }
+- /* so that we do not try to free it in case of failure */
+- support = NULL;
+-
+- /*---------------------------- Start HEADER -------------------------------*/
+-
+- if (noHeader==0) {
+-
+- retValue = fprintf (fp,
+- "c # BDD stored by the DDDMP tool in CNF format\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing on file.",
+- failure);
+- fprintf (fp, "c #\n");
+- }
+-
+- /*-------------------- Generate Bdd IDs IFF necessary ---------------------*/
+-
+- if (bddIds == NULL) {
+- if (noHeader==0) {
+- fprintf (fp, "c # Warning: BDD IDs missing ... evaluating them.\n");
+- fprintf (fp, "c # \n");
+- fflush (fp);
+- }
+-
+- bddIdsToFree = 1;
+- bddIds = DDDMP_ALLOC (int, nVar);
+- Dddmp_CheckAndGotoLabel (bddIds==NULL, "Error allocating memory.",
+- failure);
+-
+- /* Get BDD-IDs Directly from Cudd Manager */
+- for (i=0; i<nVar; i++) {
+- bddIds[i] = i;
+- }
+- } /* end if bddIds == NULL */
+-
+- /*------------------ Generate AUX BDD IDs IF necessary --------------------*/
+-
+- if (bddAuxIds == NULL) {
+- if (noHeader==0) {
+- fprintf (fp, "c # Warning: AUX IDs missing ... equal to BDD IDs.\n");
+- fprintf (fp, "c #\n");
+- fflush (fp);
+- }
+-
+- bddAuxIdsToFree = 1;
+- bddAuxIds = DDDMP_ALLOC (int, nVar);
+- Dddmp_CheckAndGotoLabel (bddAuxIds==NULL, "Error allocating memory.",
+- failure);
+-
+- for (i=0; i<nVar; i++) {
+- bddAuxIds[i] = bddIds[i];
+- }
+- } /* end if cnfIds == NULL */
+-
+- /*------------------- Generate CNF IDs IF necessary -----------------------*/
+-
+- if (cnfIds == NULL) {
+- if (noHeader==0) {
+- fprintf (fp, "c # Warning: CNF IDs missing ... equal to BDD IDs.\n");
+- fprintf (fp, "c #\n");
+- fflush (fp);
+- }
+-
+- cnfIdsToFree = 1;
+- cnfIds = DDDMP_ALLOC (int, nVar);
+- Dddmp_CheckAndGotoLabel (cnfIds==NULL, "Error allocating memory.",
+- failure);
+-
+- for (i=0; i<nVar; i++) {
+- cnfIds[i] = bddIds[i] + 1;
+- }
+- } /* end if cnfIds == NULL */
+-
+- /*------------------ Generate Var Names IF necessary ----------------------*/
+-
+- flagVar = 0;
+- if (varNames == NULL) {
+- if (noHeader==0) {
+- fprintf (fp,
+- "c # Warning: null variable names ... create DUMMY names.\n");
+- fprintf (fp, "c #\n");
+- fflush (stderr);
+- }
+-
+- varNamesToFree = 1;
+- varNames = DDDMP_ALLOC (char *, nVar);
+- for (i=0; i<nVar; i++) {
+- varNames[i] = NULL;
+- }
+- Dddmp_CheckAndGotoLabel (varNames==NULL, "Error allocating memory.",
+- failure);
+-
+- flagVar = 1;
+- } else {
+- /* Protect the user also from partially loaded varNames array !!! */
+- for (i=0; i<nVar && flagVar==0; i++) {
+- if (varNames[i] == NULL) {
+- flagVar = 1;
+- }
+- }
+- }
+-
+- if (flagVar == 1) {
+- for (i=0; i<nVar; i++) {
+- if (varNames[i] == NULL) {
+- sprintf (tmpString, "DUMMY%d", bddIds[i]);
+- varNames[i] = DDDMP_ALLOC (char, (strlen (tmpString)+1));
+- strcpy (varNames[i], tmpString);
+- }
+- }
+- }
+-
+- /*----------------------- Set Initial ID IF necessary --------------------*/
+-
+- if (idInitial <= 0) {
+- idInitial = nVar + 1;
+- }
+-
+- /*--------------------------- Continue HEADER -----------------------------*/
+-
+- if (noHeader==0) {
+- fprintf (fp, "c .ver %s\n", DDDMP_VERSION);
+- fprintf (fp, "c .nnodes %d\n", Cudd_SharingSize (f, rootN));
+- fprintf (fp, "c .nvars %d\n", nVar);
+- fprintf (fp, "c .nsuppvars %d\n", nVarInSupport);
+-
+- /* Support Variable Names */
+- if (varNames != NULL) {
+- fprintf (fp, "c .suppvarnames");
+- for (i=0; i<nVar; i++) {
+- if (bddIdsInSupport[i] >= 0) {
+- fprintf (fp, " %s", varNames[i]);
+- }
+- }
+- fprintf (fp, "\n");
+- }
+-
+- /* Ordered Variable Names */
+- if (varNames != NULL) {
+- fprintf (fp, "c .orderedvarnames");
+- for (i=0; i<nVar; i++) {
+- fprintf (fp, " %s", varNames[i]);
+- }
+- fprintf (fp, "\n");
+- }
+-
+- /* BDD Variable Ids */
+- fprintf (fp, "c .ids ");
+- for (i=0; i<nVar; i++) {
+- if (bddIdsInSupport[i] >= 0) {
+- fprintf (fp, " %d", bddIdsInSupport[i]);
+- }
+- }
+- fprintf (fp, "\n");
+-
+- /* BDD Variable Permutation Ids */
+- fprintf (fp, "c .permids ");
+- for (i=0; i<nVar; i++) {
+- if (bddIdsInSupport[i] >= 0) {
+- fprintf (fp, " %d", permIdsInSupport[i]);
+- }
+- }
+- fprintf (fp, "\n");
+-
+- /* BDD Variable Auxiliary Ids */
+- fprintf (fp, "c .auxids ");
+- for (i=0; i<nVar; i++) {
+- if (bddIdsInSupport[i] >= 0) {
+- fprintf (fp, " %d", bddAuxIds[i]);
+- }
+- }
+- fprintf (fp, "\n");
+-
+- /* CNF Ids */
+- fprintf (fp, "c .cnfids ");
+- for (i=0; i<nVar; i++) {
+- if (bddIdsInSupport[i] >= 0) {
+- fprintf (fp, " %d", cnfIds[i]);
+- }
+- }
+- fprintf (fp, "\n");
+-
+- /* Number of Roots */
+- fprintf (fp, "c .nroots %d", rootN);
+- fprintf (fp, "\n");
+-
+- /* Root Starting Line */
+- fgetpos (fp, &posFile1);
+- fprintf (fp, "c .rootids");
+- for (i=0; i<rootN; i++) {
+- for (j=0; j<intStringLength+1; j++) {
+- retValue = fprintf (fp, " ");
+- }
+- }
+- retValue = fprintf (fp, "\n");
+- fflush (fp);
+-
+- } /* End of noHeader check */
+-
+- /*------------ Select Mode and Print Number of Tmp Var Created ------------*/
+-
+- switch (mode) {
+- case DDDMP_CNF_MODE_NODE:
+- *varNewNPtr = idInitial;
+- *varNewNPtr = DddmpNumberDdNodesCnf (ddMgr, f, rootN, cnfIds, idInitial)
+- - *varNewNPtr;
+- break;
+- case DDDMP_CNF_MODE_MAXTERM:
+- *varNewNPtr = 0;
+- break;
+- default:
+- Dddmp_Warning (1, "Wrong DDDMP Store Mode. Force DDDMP_MODE_BEST.");
+- case DDDMP_CNF_MODE_BEST:
+- *varNewNPtr = idInitial;
+- *varNewNPtr = DddmpDdNodesCountEdgesAndNumber (ddMgr, f, rootN,
+- edgeInTh, pathLengthTh, cnfIds, idInitial) - *varNewNPtr;
+- break;
+- }
+-
+- /*------------ Print Space for Number of Variable and Clauses -------------*/
+-
+- if (noHeader==0) {
+- fprintf (fp, "c .nAddedCnfVar %d\n", *varNewNPtr);
+- fprintf (fp, "c #\n");
+- fprintf (fp, "c # Init CNF Clauses\n");
+- fprintf (fp, "c #\n");
+- fgetpos (fp, &posFile2);
+- retValue = fprintf (fp, "p cnf");
+- for (j=0; j<2*(intStringLength+1); j++) {
+- retValue = fprintf (fp, " ");
+- }
+- retValue = fprintf (fp, "\n");
+- fflush (fp);
+- }
+-
+- /*---------------------- Select Mode and Do the Job -----------------------*/
+-
+- clauseN = 0;
+- varMax = -1;
+- rootStartLine = DDDMP_ALLOC (int, rootN);
+- Dddmp_CheckAndGotoLabel (rootStartLine==NULL, "Error allocating memory.",
+- failure);
+- for (i=0; i<rootN; i++) {
+- rootStartLine[i] = (-1);
+- }
+-
+- switch (mode) {
+- case DDDMP_CNF_MODE_NODE:
+- StoreCnfNodeByNode (ddMgr, f, rootN, bddIds, cnfIds, fp, &clauseN,
+- &varMax, rootStartLine);
+- DddmpUnnumberDdNodesCnf (ddMgr, f, rootN);
+- break;
+- case DDDMP_CNF_MODE_MAXTERM:
+- StoreCnfMaxtermByMaxterm (ddMgr, f, rootN, bddIds, cnfIds, idInitial,
+- fp, &varMax, &clauseN, rootStartLine);
+- break;
+- default:
+- Dddmp_Warning (1, "Wrong DDDMP Store Mode. Force DDDMP_MODE_BEST.");
+- case DDDMP_CNF_MODE_BEST:
+- StoreCnfBest (ddMgr, f, rootN, bddIds, cnfIds, idInitial,
+- fp, &varMax, &clauseN, rootStartLine);
+- DddmpUnnumberDdNodesCnf (ddMgr, f, rootN);
+- break;
+- }
+-
+- /*------------------------------ Write trailer ----------------------------*/
+-
+- if (noHeader==0) {
+- retValue = fprintf (fp, "c # End of Cnf From dddmp-2.0\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF, "Error writing to file.",
+- failure);
+- }
+-
+- /*
+- * Write Root Starting Line
+- */
+-
+- if (noHeader==0) {
+- fsetpos (fp, &posFile1);
+- fprintf (fp, "c .rootids");
+- for (i=0; i<rootN; i++) {
+- Dddmp_Warning (rootStartLine[i]==(-1),
+- "Init Line for CNF file = (-1) {[(Stored one or zero BDD)]}.");
+- sprintf (tmpString, " %d", rootStartLine[i]);
+- for (j=strlen(tmpString); j<intStringLength+1; j++) {
+- strcat (tmpString, " ");
+- }
+- retValue = fprintf (fp, "%s", tmpString);
+- }
+- retValue = fprintf (fp, "\n");
+- fflush (fp);
+- }
+-
+- /*
+- * Write Number of clauses and variable in the header
+- */
+-
+- *clauseNPtr = clauseN;
+-
+- if (noHeader==0) {
+- fsetpos (fp, &posFile2);
+- retValue = fprintf (fp, "p cnf");
+- sprintf (tmpString, " %d %d", varMax, clauseN);
+- for (j=strlen(tmpString); j<2*(intStringLength+1); j++) {
+- strcat (tmpString, " ");
+- }
+- retValue = fprintf (fp, "%s\n", tmpString);
+- fflush (fp);
+- }
+-
+- /*-------------------------- Close file and return ------------------------*/
+-
+- if (fileToClose) {
+- fclose (fp);
+- }
+-
+- DDDMP_FREE (bddIdsInSupport);
+- DDDMP_FREE (permIdsInSupport);
+- DDDMP_FREE (rootStartLine);
+- if (bddIdsToFree == 1) {
+- DDDMP_FREE (bddIds);
+- }
+- if (bddAuxIdsToFree == 1) {
+- DDDMP_FREE (bddAuxIds);
+- }
+- if (cnfIdsToFree == 1) {
+- DDDMP_FREE (cnfIds);
+- }
+- if (varNamesToFree == 1) {
+- for (i=0; i<nVar; i++) {
+- DDDMP_FREE (varNames[i]);
+- }
+- DDDMP_FREE (varNames);
+- }
+-
+- return (DDDMP_SUCCESS);
+-
+- failure:
+-
+- if (support != NULL) {
+- Cudd_RecursiveDeref (ddMgr, support);
+- }
+- DDDMP_FREE (bddIdsInSupport);
+- DDDMP_FREE (permIdsInSupport);
+- DDDMP_FREE (rootStartLine);
+- if (bddIdsToFree == 1) {
+- DDDMP_FREE (bddIds);
+- }
+- if (bddAuxIdsToFree == 1) {
+- DDDMP_FREE (bddAuxIds);
+- }
+- if (cnfIdsToFree == 1) {
+- DDDMP_FREE (cnfIds);
+- }
+- if (varNamesToFree == 1) {
+- for (i=0; i<nVar; i++) {
+- DDDMP_FREE (varNames[i]);
+- }
+- DDDMP_FREE (varNames);
+- }
+-
+- return (DDDMP_FAILURE);
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Store the BDD as CNF clauses.]
+-
+- Description [Store the BDD as CNF clauses.
+- Use a multiplexer description for each BDD node.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-StoreCnfNodeByNode (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: BDD array to be stored */,
+- int rootN /* IN: number of BDDs in the array */,
+- int *bddIds /* IN: BDD ids for variables */,
+- int *cnfIds /* IN: CNF ids for variables */,
+- FILE *fp /* IN: store file */,
+- int *clauseN /* IN/OUT: number of clauses written in the CNF file */,
+- int *varMax /* IN/OUT: maximum value of id written in the CNF file */,
+- int *rootStartLine /* OUT: CNF line where root starts */
+- )
+-{
+- int retValue = 0;
+- int i, idf;
+-
+- for (i=0; i<rootN; i++) {
+- if (f[i] != NULL) {
+- if (!cuddIsConstant(Cudd_Regular (f[i]))) {
+- /*
+- * Set Starting Line for this Root
+- */
+-
+- rootStartLine[i] = *clauseN + 1;
+-
+- /*
+- * Store the BDD
+- */
+-
+- retValue = StoreCnfNodeByNodeRecur (ddMgr, Cudd_Regular(f[i]),
+- bddIds, cnfIds, fp, clauseN, varMax);
+- if (retValue == 0) {
+- (void) fprintf (stderr,
+- "DdStoreCnf: Error in recursive node store\n");
+- fflush (stderr);
+- }
+-
+- /*
+- * Store CNF for the root if necessary
+- */
+-
+- idf = DddmpReadNodeIndexCnf (Cudd_Regular (f[i]));
+-#if DDDMP_DEBUG_CNF
+- retValue = fprintf (fp, "root %d --> \n", i);
+-#endif
+- if (Cudd_IsComplement (f[i])) {
+- retValue = fprintf (fp, "-%d 0\n", idf);
+- } else {
+- retValue = fprintf (fp, "%d 0\n", idf);
+- }
+- *varMax = GET_MAX (*varMax, idf);
+- *clauseN = *clauseN + 1;
+-
+- if (retValue == EOF) {
+- (void) fprintf (stderr,
+- "DdStoreCnf: Error in recursive node store\n");
+- fflush (stderr);
+- }
+- }
+- }
+- }
+-
+- return (retValue);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Performs the recursive step of Dddmp_bddStore.]
+-
+- Description [Performs the recursive step of Dddmp_bddStore.
+- Traverse the BDD and store a CNF formula for each "terminal" node.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-StoreCnfNodeByNodeRecur (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *f /* IN: BDD node to be stored */,
+- int *bddIds /* IN: BDD ids for variables */,
+- int *cnfIds /* IN: CNF ids for variables */,
+- FILE *fp /* IN: store file */,
+- int *clauseN /* OUT: number of clauses written in the CNF file */,
+- int *varMax /* OUT: maximum value of id written in the CNF file */
+- )
+-{
+- DdNode *T, *E;
+- int idf, idT, idE, vf;
+- int retValue;
+-
+-#ifdef DDDMP_DEBUG
+- assert(!Cudd_IsComplement(f));
+- assert(f!=NULL);
+-#endif
+-
+- /* If constant, nothing to do. */
+- if (Cudd_IsConstant(f)) {
+- return (1);
+- }
+-
+- /* If already visited, nothing to do. */
+- if (DddmpVisitedCnf (f)) {
+- return (1);
+- }
+-
+- /* Mark node as visited. */
+- DddmpSetVisitedCnf (f);
+-
+- /*------------------ Non Terminal Node -------------------------------*/
+-
+-#ifdef DDDMP_DEBUG
+- /* BDDs! Only one constant supported */
+- assert (!cuddIsConstant(f));
+-#endif
+-
+- /*
+- * Recursive call for Then edge
+- */
+-
+- T = cuddT (f);
+-#ifdef DDDMP_DEBUG
+- /* ROBDDs! No complemented Then edge */
+- assert (!Cudd_IsComplement(T));
+-#endif
+- /* recur */
+- retValue = StoreCnfNodeByNodeRecur (ddMgr, T, bddIds, cnfIds, fp,
+- clauseN, varMax);
+- if (retValue != 1) {
+- return(retValue);
+- }
+-
+- /*
+- * Recursive call for Else edge
+- */
+-
+- E = Cudd_Regular (cuddE (f));
+- retValue = StoreCnfNodeByNodeRecur (ddMgr, E, bddIds, cnfIds, fp,
+- clauseN, varMax);
+- if (retValue != 1) {
+- return (retValue);
+- }
+-
+- /*
+- * Obtain nodeids and variable ids of f, T, E
+- */
+-
+- idf = DddmpReadNodeIndexCnf (f);
+- vf = f->index;
+-
+- if (bddIds[vf] != vf) {
+- (void) fprintf (stderr, "DdStoreCnf: Error writing to file\n");
+- fflush (stderr);
+- return (0);
+- }
+-
+- idT = DddmpReadNodeIndexCnf (T);
+-
+- idE = DddmpReadNodeIndexCnf (E);
+- if (Cudd_IsComplement (cuddE (f))) {
+- idE = -idE;
+- }
+-
+- retValue = StoreCnfOneNode (f, idf, cnfIds[vf], idT, idE, fp,
+- clauseN, varMax);
+-
+- if (retValue == EOF) {
+- return (0);
+- } else {
+- return (1);
+- }
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Store One Single BDD Node.]
+-
+- Description [Store One Single BDD Node translating it as a multiplexer.]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-StoreCnfOneNode (
+- DdNode *f /* IN: node to be stored */,
+- int idf /* IN: node CNF Index */,
+- int vf /* IN: node BDD Index */,
+- int idT /* IN: Then CNF Index with sign = inverted edge */,
+- int idE /* IN: Else CNF Index with sign = inverted edge */,
+- FILE *fp /* IN: store file */,
+- int *clauseN /* OUT: number of clauses */,
+- int *varMax /* OUT: maximun Index of variable stored */
+- )
+-{
+- int retValue = 0;
+- int idfAbs, idTAbs, idEAbs;
+-
+- idfAbs = abs (idf);
+- idTAbs = abs (idT);
+- idEAbs = abs (idE);
+-
+- /*----------------------------- Check for Constant ------------------------*/
+-
+- assert(!Cudd_IsConstant(f));
+-
+- /*------------------------- Check for terminal nodes ----------------------*/
+-
+- if ((idTAbs==1) && (idEAbs==1)) {
+- return (1);
+- }
+-
+- /*------------------------------ Internal Node ----------------------------*/
+-
+-#if DDDMP_DEBUG_CNF
+- retValue = fprintf (fp, "id=%d var=%d idT=%d idE=%d\n",
+- idf, vf, idT, idE);
+-#endif
+-
+- /*
+- * Then to terminal
+- */
+-
+- if ((idTAbs==1) && (idEAbs!=1)) {
+-#if DDDMP_DEBUG_CNF
+- retValue = fprintf (fp, "CASE 1 -->\n");
+-#endif
+- retValue = fprintf (fp, "%d %d 0\n",
+- idf, -vf);
+- retValue = fprintf (fp, "%d %d 0\n",
+- idf, -idE);
+- retValue = fprintf (fp, "%d %d %d 0\n",
+- -idf, vf, idE);
+- *clauseN = *clauseN + 3;
+-
+- *varMax = GET_MAX (*varMax, idfAbs);
+- *varMax = GET_MAX (*varMax, vf);
+- *varMax = GET_MAX (*varMax, idEAbs);
+- }
+-
+- /*
+- * Else to terminal
+- */
+-
+- if ((idTAbs!=1) && (idEAbs==1)) {
+- if (idE == 1) {
+-#if DDDMP_DEBUG_CNF
+- retValue = fprintf (fp, "CASE 2 -->\n");
+-#endif
+- retValue = fprintf (fp, "%d %d 0\n",
+- idf, vf);
+- retValue = fprintf (fp, "%d %d 0\n",
+- idf, -idT);
+- retValue = fprintf (fp, "%d %d %d 0\n",
+- -idf, -vf, idT);
+- } else {
+-#if DDDMP_DEBUG_CNF
+- retValue = fprintf (fp, "CASE 3 -->\n");
+-#endif
+- retValue = fprintf (fp, "%d %d 0\n",
+- -idf, vf);
+- retValue = fprintf (fp, "%d %d 0\n",
+- -idf, idT);
+- retValue = fprintf (fp, "%d %d %d 0\n",
+- idf, -vf, -idT);
+- }
+-
+- *varMax = GET_MAX (*varMax, idfAbs);
+- *varMax = GET_MAX (*varMax, vf);
+- *varMax = GET_MAX (*varMax, idTAbs);
+-
+- *clauseN = *clauseN + 3;
+- }
+-
+- /*
+- * Nor Then or Else to terminal
+- */
+-
+- if ((idTAbs!=1) && (idEAbs!=1)) {
+-#if DDDMP_DEBUG_CNF
+- retValue = fprintf (fp, "CASE 4 -->\n");
+-#endif
+- retValue = fprintf (fp, "%d %d %d 0\n",
+- idf, vf, -idE);
+- retValue = fprintf (fp, "%d %d %d 0\n",
+- -idf, vf, idE);
+- retValue = fprintf (fp, "%d %d %d 0\n",
+- idf, -vf, -idT);
+- retValue = fprintf (fp, "%d %d %d 0\n",
+- -idf, -vf, idT);
+-
+- *varMax = GET_MAX (*varMax, idfAbs);
+- *varMax = GET_MAX (*varMax, vf);
+- *varMax = GET_MAX (*varMax, idTAbs);
+- *varMax = GET_MAX (*varMax, idEAbs);
+-
+- *clauseN = *clauseN + 4;
+- }
+-
+- return (retValue);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Prints a disjoint sum of products.]
+-
+- Description [Prints a disjoint sum of product cover for the function
+- rooted at node. Each product corresponds to a path from node a
+- leaf node different from the logical zero, and different from
+- the background value. Uses the standard output. Returns 1 if
+- successful, 0 otherwise.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [StoreCnfBest]
+-
+-******************************************************************************/
+-
+-static int
+-StoreCnfMaxtermByMaxterm (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: array of BDDs to store */,
+- int rootN /* IN: number of BDDs in the array */,
+- int *bddIds /* IN: BDD Identifiers */,
+- int *cnfIds /* IN: corresponding CNF Identifiers */,
+- int idInitial /* IN: initial value for numbering new CNF variables */,
+- FILE *fp /* IN: file pointer */,
+- int *varMax /* OUT: maximum identifier of the variables created */,
+- int *clauseN /* OUT: number of stored clauses */,
+- int *rootStartLine /* OUT: line where root starts */
+- )
+-{
+- int i, j, *list;
+-
+- list = DDDMP_ALLOC (int, ddMgr->size);
+- if (list == NULL) {
+- ddMgr->errorCode = CUDD_MEMORY_OUT;
+- return (DDDMP_FAILURE);
+- }
+-
+- for (i=0; i<rootN; i++) {
+- if (f[i] != NULL) {
+- if (!cuddIsConstant(Cudd_Regular (f[i]))) {
+- for (j=0; j<ddMgr->size; j++) {
+- list[j] = 2;
+- }
+-
+- /*
+- * Set Starting Line for this Root
+- */
+-
+- rootStartLine[i] = *clauseN + 1;
+-
+- StoreCnfMaxtermByMaxtermRecur (ddMgr, f[i], bddIds, cnfIds, fp,
+- list, clauseN, varMax);
+- }
+- }
+- }
+-
+- FREE (list);
+-
+- return (1);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Prints a disjoint sum of products with intermediate
+- cutting points.]
+-
+- Description [Prints a disjoint sum of product cover for the function
+- rooted at node intorducing cutting points whenever necessary.
+- Each product corresponds to a path from node a leaf
+- node different from the logical zero, and different from the
+- background value. Uses the standard output. Returns 1 if
+- successful, 0 otherwise.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [StoreCnfMaxtermByMaxterm]
+-
+-******************************************************************************/
+-
+-static int
+-StoreCnfBest (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode **f /* IN: array of BDDs to store */,
+- int rootN /* IN: number of BDD in the array */,
+- int *bddIds /* IN: BDD identifiers */,
+- int *cnfIds /* IN: corresponding CNF identifiers */,
+- int idInitial /* IN: initial value for numbering new CNF variables */,
+- FILE *fp /* IN: file pointer */,
+- int *varMax /* OUT: maximum identifier of the variables created */,
+- int *clauseN /* OUT: number of stored clauses */,
+- int *rootStartLine /* OUT: line where root starts */
+- )
+-{
+- int i, j, *list;
+-
+- list = DDDMP_ALLOC (int, ddMgr->size);
+- if (list == NULL) {
+- ddMgr->errorCode = CUDD_MEMORY_OUT;
+- return (DDDMP_FAILURE);
+- }
+-
+- for (i=0; i<rootN; i++) {
+- if (f[i] != NULL) {
+- if (!cuddIsConstant(Cudd_Regular (f[i]))) {
+- for (j=0; j<ddMgr->size; j++) {
+- list[j] = 2;
+- }
+-
+- /*
+- * Set Starting Line for this Root
+- */
+-
+- rootStartLine[i] = *clauseN + 1;
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (fp, "root NOT shared BDDs %d --> \n", i);
+-#endif
+- StoreCnfBestNotSharedRecur (ddMgr, f[i], 0, bddIds, cnfIds, fp, list,
+- clauseN, varMax);
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (fp, "root SHARED BDDs %d --> \n", i);
+-#endif
+- StoreCnfBestSharedRecur (ddMgr, Cudd_Regular (f[i]), bddIds, cnfIds,
+- fp, list, clauseN, varMax);
+- }
+- }
+- }
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (stdout, "###---> BDDs After the Storing Process:\n");
+- DddmpPrintBddAndNext (ddMgr, f, rootN);
+-#endif
+-
+- FREE (list);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Performs the recursive step of Print Maxterm.]
+-
+- Description [Performs the recursive step of Print Maxterm.
+- Traverse a BDD a print out a cube in CNF format each time a terminal
+- node is reached.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static void
+-StoreCnfMaxtermByMaxtermRecur (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *node /* IN: BDD to store */,
+- int *bddIds /* IN: BDD identifiers */,
+- int *cnfIds /* IN: corresponding CNF identifiers */,
+- FILE *fp /* IN: file pointer */,
+- int *list /* IN: temporary array to store cubes */,
+- int *clauseN /* OUT: number of stored clauses */,
+- int *varMax /* OUT: maximum identifier of the variables created */
+- )
+-{
+- DdNode *N, *Nv, *Nnv;
+- int retValue, index;
+-
+- N = Cudd_Regular (node);
+-
+- /*
+- * Terminal case: Print one cube based on the current recursion
+- */
+-
+- if (cuddIsConstant (N)) {
+- retValue = printCubeCnf (ddMgr, node, cnfIds, fp, list, varMax);
+- if (retValue == DDDMP_SUCCESS) {
+- fprintf (fp, "0\n");
+- *clauseN = *clauseN + 1;
+- }
+- return;
+- }
+-
+- /*
+- * NON Terminal case: Recur
+- */
+-
+- Nv = cuddT (N);
+- Nnv = cuddE (N);
+- if (Cudd_IsComplement (node)) {
+- Nv = Cudd_Not (Nv);
+- Nnv = Cudd_Not (Nnv);
+- }
+- index = N->index;
+-
+- /*
+- * StQ 06.05.2003
+- * Perform the optimization:
+- * f = (a + b)' = (a') ^ (a + b') = (a') ^ (b')
+- * i.e., if the THEN node is the constant ZERO then that variable
+- * can be forgotten (list[index] = 2) for subsequent ELSE cubes
+- */
+- if (cuddIsConstant (Cudd_Regular (Nv)) && Nv != ddMgr->one) {
+- list[index] = 2;
+- } else {
+- list[index] = 0;
+- }
+- StoreCnfMaxtermByMaxtermRecur (ddMgr, Nnv, bddIds, cnfIds, fp, list,
+- clauseN, varMax);
+-
+- /*
+- * StQ 06.05.2003
+- * Perform the optimization:
+- * f = a ^ b = (a) ^ (a' + b) = (a) ^ (b)
+- * i.e., if the ELSE node is the constant ZERO then that variable
+- * can be forgotten (list[index] = 2) for subsequent THEN cubes
+- */
+- if (cuddIsConstant (Cudd_Regular (Nnv)) && Nnv != ddMgr->one) {
+- list[index] = 2;
+- } else {
+- list[index] = 1;
+- }
+- StoreCnfMaxtermByMaxtermRecur (ddMgr, Nv, bddIds, cnfIds, fp, list,
+- clauseN, varMax);
+- list[index] = 2;
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Performs the recursive step of Print Best on Not Shared
+- sub-BDDs.]
+-
+- Description [Performs the recursive step of Print Best on Not Shared
+- sub-BDDs, i.e., print out information for the nodes belonging to
+- BDDs not shared (whose root has just one incoming edge).
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-StoreCnfBestNotSharedRecur (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *node /* IN: BDD to store */,
+- int idf /* IN: Id to store */,
+- int *bddIds /* IN: BDD identifiers */,
+- int *cnfIds /* IN: corresponding CNF identifiers */,
+- FILE *fp /* IN: file pointer */,
+- int *list /* IN: temporary array to store cubes */,
+- int *clauseN /* OUT: number of stored clauses */,
+- int *varMax /* OUT: maximum identifier of the variables created */
+- )
+-{
+- DdNode *N, *Nv, *Nnv;
+- int index, retValue;
+- DdNode *one;
+-
+- one = ddMgr->one;
+-
+- N = Cudd_Regular (node);
+-
+- /*
+- * Terminal case or Already Visited:
+- * Print one cube based on the current recursion
+- */
+-
+- if (cuddIsConstant (N)) {
+- retValue = printCubeCnf (ddMgr, node, cnfIds, fp, list, varMax);
+- if (retValue == DDDMP_SUCCESS) {
+- if (idf != 0) {
+- fprintf (fp, "%d ", idf);
+- }
+- fprintf (fp, "0\n");
+- *varMax = GET_MAX (*varMax, abs(idf));
+- *clauseN = *clauseN + 1;
+- }
+- return (DDDMP_SUCCESS);
+- }
+-
+- /*
+- * Shared Sub-Tree: Print Cube
+- */
+-
+- index = DddmpReadNodeIndexCnf (N);
+- if (index > 0) {
+- if (idf != 0) {
+- fprintf (fp, "%d ", idf);
+- }
+- if (Cudd_IsComplement (node)) {
+- retValue = fprintf (fp, "-%d ", index);
+- } else {
+- retValue = fprintf (fp, "%d ", index);
+- }
+- retValue = printCubeCnf (ddMgr, node, cnfIds, fp, list, varMax);
+- fprintf (fp, "0\n");
+- *varMax = GET_MAX (*varMax, abs(index));
+- *clauseN = *clauseN + 1;
+- return (DDDMP_SUCCESS);
+- }
+-
+- /*
+- * NON Terminal case: Recur
+- */
+-
+- Nv = cuddT (N);
+- Nnv = cuddE (N);
+- if (Cudd_IsComplement (node)) {
+- Nv = Cudd_Not (Nv);
+- Nnv = Cudd_Not (Nnv);
+- }
+- index = N->index;
+-
+- /*
+- * StQ 06.05.2003
+- * Perform the optimization:
+- * f = (a + b)' = (a') ^ (a + b') = (a') ^ (b')
+- * i.e., if the THEN node is the constant ZERO then that variable
+- * can be forgotten (list[index] = 2) for subsequent ELSE cubes
+- */
+- if (cuddIsConstant (Cudd_Regular (Nv)) && Nv != ddMgr->one) {
+- list[index] = 2;
+- } else {
+- list[index] = 0;
+- }
+- StoreCnfBestNotSharedRecur (ddMgr, Nnv, idf, bddIds, cnfIds, fp, list,
+- clauseN, varMax);
+-
+- /*
+- * StQ 06.05.2003
+- * Perform the optimization:
+- * f = a ^ b = (a) ^ (a' + b) = (a) ^ (b)
+- * i.e., if the ELSE node is the constant ZERO then that variable
+- * can be forgotten (list[index] = 2) for subsequent THEN cubes
+- */
+- if (cuddIsConstant (Cudd_Regular (Nnv)) && Nnv != ddMgr->one) {
+- list[index] = 2;
+- } else {
+- list[index] = 1;
+- }
+- StoreCnfBestNotSharedRecur (ddMgr, Nv, idf, bddIds, cnfIds, fp, list,
+- clauseN, varMax);
+- list[index] = 2;
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Performs the recursive step of Print Best on Shared
+- sub-BDDs.
+- ]
+-
+- Description [Performs the recursive step of Print Best on Not Shared
+- sub-BDDs, i.e., print out information for the nodes belonging to
+- BDDs not shared (whose root has just one incoming edge).
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-StoreCnfBestSharedRecur (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *node /* IN: BDD to store */,
+- int *bddIds /* IN: BDD identifiers */,
+- int *cnfIds /* IN: corresponding CNF identifiers */,
+- FILE *fp /* IN: file pointer */,
+- int *list /* IN: temporary array to store cubes */,
+- int *clauseN /* OUT: number of stored clauses */,
+- int *varMax /* OUT: maximum identifier of the variables created */
+- )
+-{
+- DdNode *nodeThen, *nodeElse;
+- int i, idf, index;
+- DdNode *one;
+-
+- one = ddMgr->one;
+-
+- Dddmp_Assert (node==Cudd_Regular(node),
+- "Inverted Edge during Shared Printing.");
+-
+- /* If constant, nothing to do. */
+- if (cuddIsConstant (node)) {
+- return (DDDMP_SUCCESS);
+- }
+-
+- /* If already visited, nothing to do. */
+- if (DddmpVisitedCnf (node)) {
+- return (DDDMP_SUCCESS);
+- }
+-
+- /*
+- * Shared Sub-Tree: Print Cube
+- */
+-
+- idf = DddmpReadNodeIndexCnf (node);
+- if (idf > 0) {
+- /* Cheat the Recur Function about the Index of the Current Node */
+- DddmpWriteNodeIndexCnf (node, 0);
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (fp, "Else of XNOR\n");
+-#endif
+- for (i=0; i<ddMgr->size; i++) {
+- list[i] = 2;
+- }
+- StoreCnfBestNotSharedRecur (ddMgr, Cudd_Not (node), idf, bddIds, cnfIds,
+- fp, list, clauseN, varMax);
+-
+-#if DDDMP_DEBUG_CNF
+- fprintf (fp, "Then of XNOR\n");
+-#endif
+- for (i=0; i<ddMgr->size; i++) {
+- list[i] = 2;
+- }
+- StoreCnfBestNotSharedRecur (ddMgr, node, -idf, bddIds, cnfIds,
+- fp, list, clauseN, varMax);
+-
+- /* Set Back Index of Current Node */
+- DddmpWriteNodeIndexCnf (node, idf);
+- }
+-
+- /* Mark node as visited. */
+- DddmpSetVisitedCnf (node);
+-
+- /*
+- * Recur
+- */
+-
+- nodeThen = cuddT (node);
+- nodeElse = cuddE (node);
+- index = node->index;
+-
+- StoreCnfBestSharedRecur (ddMgr, Cudd_Regular (nodeThen), bddIds, cnfIds,
+- fp, list, clauseN, varMax);
+- StoreCnfBestSharedRecur (ddMgr, Cudd_Regular (nodeElse), bddIds, cnfIds,
+- fp, list, clauseN, varMax);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Print One Cube in CNF Format.]
+-
+- Description [Print One Cube in CNF Format.
+- Return DDDMP_SUCCESS if something is printed out, DDDMP_FAILURE
+- is nothing is printed out.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-printCubeCnf (
+- DdManager *ddMgr /* IN: DD Manager */,
+- DdNode *node /* IN: BDD to store */,
+- int *cnfIds /* IN: CNF identifiers */,
+- FILE *fp /* IN: file pointer */,
+- int *list /* IN: temporary array to store cubes */,
+- int *varMax /* OUT: maximum identifier of the variables created */
+- )
+-{
+- int i, retValue;
+- DdNode *one;
+-
+- retValue = DDDMP_FAILURE;
+- one = ddMgr->one;
+-
+- if (node != one) {
+- for (i=0; i<ddMgr->size; i++) {
+- if (list[i] == 0) {
+- retValue = DDDMP_SUCCESS;
+- (void) fprintf (fp, "%d ", cnfIds[i]);
+- *varMax = GET_MAX(*varMax, cnfIds[i]);
+- } else {
+- if (list[i] == 1) {
+- retValue = DDDMP_SUCCESS;
+- (void) fprintf (fp, "-%d ", cnfIds[i]);
+- *varMax = GET_MAX(*varMax, cnfIds[i]);
+- }
+- }
+- }
+- }
+-
+- return (retValue);
+-}
+-
+-
+-
+-
+-
+diff --git a/Cudd/dddmp/dddmpStoreMisc.c b/Cudd/dddmp/dddmpStoreMisc.c
+deleted file mode 100644
+index 2dc18f0..0000000
+--- a/Cudd/dddmp/dddmpStoreMisc.c
++++ /dev/null
+@@ -1,1641 +0,0 @@
+-/**CFile**********************************************************************
+-
+- FileName [dddmpStoreMisc.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Functions to write out bdds to file in prefixed
+- and in Blif form.]
+-
+- Description [Functions to write out bdds to file.
+- BDDs are represended on file in text format.
+- Each node is stored as a multiplexer in a prefix notation format for
+- the prefix notation file or in PLA format for the blif file.
+- ]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include "dddmpInt.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-static int DddmpCuddDdArrayStorePrefix(DdManager *ddMgr, int n, DdNode **f, char **inputNames, char **outputNames, char *modelName, FILE *fp);
+-static int DddmpCuddDdArrayStorePrefixBody(DdManager *ddMgr, int n, DdNode **f, char **inputNames, char **outputNames, FILE *fp);
+-static int DddmpCuddDdArrayStorePrefixStep(DdManager * ddMgr, DdNode * f, FILE * fp, st_table * visited, char ** names);
+-static int DddmpCuddDdArrayStoreBlif(DdManager *ddMgr, int n, DdNode **f, char **inputNames, char **outputNames, char *modelName, FILE *fp);
+-static int DddmpCuddDdArrayStoreBlifBody(DdManager *ddMgr, int n, DdNode **f, char **inputNames, char **outputNames, FILE *fp);
+-static int DddmpCuddDdArrayStoreBlifStep(DdManager *ddMgr, DdNode *f, FILE *fp, st_table *visited, char **names);
+-static int DddmpCuddDdArrayStoreSmv(DdManager *ddMgr, int n, DdNode **f, char **inputNames, char **outputNames, char *modelName, FILE *fp);
+-static int DddmpCuddDdArrayStoreSmvBody(DdManager *ddMgr, int n, DdNode **f, char **inputNames, char **outputNames, FILE *fp);
+-static int DddmpCuddDdArrayStoreSmvStep(DdManager * ddMgr, DdNode * f, FILE * fp, st_table * visited, char ** names);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a dump file representing the argument BDD in
+- a prefix notation.]
+-
+- Description [Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStorePrefix.
+- A dummy array of 1 BDD root is used for this purpose.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso [Dddmp_cuddBddStore]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddBddStorePrefix (
+- DdManager *ddMgr /* IN: DD Manager */,
+- int nRoots /* IN: Number of BDD roots */,
+- DdNode *f /* IN: BDD root to be stored */,
+- char **inputNames /* IN: Array of variable names */,
+- char **outputNames /* IN: Array of root names */,
+- char *modelName /* IN: Model Name */,
+- char *fileName /* IN: File name */,
+- FILE *fp /* IN: File pointer to the store file */
+- )
+-{
+- int retValue;
+- DdNode *tmpArray[1];
+-
+- tmpArray[0] = f;
+-
+- retValue = Dddmp_cuddBddArrayStorePrefix (ddMgr, 1, tmpArray,
+- inputNames, outputNames, modelName, fileName, fp);
+-
+- return (retValue);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a dump file representing the argument BDD in
+- a prefix notation.]
+-
+- Description [Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStorePrefix.
+- A dummy array of 1 BDD root is used for this purpose.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso [Dddmp_cuddBddArrayStore]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddBddArrayStorePrefix (
+- DdManager *ddMgr /* IN: DD Manager */,
+- int nroots /* IN: number of output BDD roots to be stored */,
+- DdNode **f /* IN: array of BDD roots to be stored */,
+- char **inputNames /* IN: array of variable names (or NULL) */,
+- char **outputNames /* IN: array of root names (or NULL) */,
+- char *modelName /* IN: Model Name */,
+- char *fname /* IN: File name */,
+- FILE *fp /* IN: File pointer to the store file */
+- )
+-{
+- int retValue;
+- int fileToClose = 0;
+-
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- int retValueBis;
+-
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During BDD Store.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During BDD Store.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-
+- /*
+- * Check if File needs to be opened in the proper mode.
+- */
+-
+- if (fp == NULL) {
+- fp = fopen (fname, "w");
+- Dddmp_CheckAndGotoLabel (fp==NULL, "Error opening file.",
+- failure);
+- fileToClose = 1;
+- }
+-
+- retValue = DddmpCuddDdArrayStorePrefix (ddMgr, nroots, f,
+- inputNames, outputNames, modelName, fp);
+-
+- if (fileToClose) {
+- fclose (fp);
+- }
+-
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During BDD Store.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During BDD Store.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-
+- return (retValue);
+-
+- failure:
+- return (DDDMP_FAILURE);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a dump file representing the argument BDD in
+- a Blif/Exlif notation.]
+-
+- Description [Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStoreBlif.
+- A dummy array of 1 BDD root is used for this purpose.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso [Dddmp_cuddBddStorePrefix]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddBddStoreBlif (
+- DdManager *ddMgr /* IN: DD Manager */,
+- int nRoots /* IN: Number of BDD roots */,
+- DdNode *f /* IN: BDD root to be stored */,
+- char **inputNames /* IN: Array of variable names */,
+- char **outputNames /* IN: Array of root names */,
+- char *modelName /* IN: Model Name */,
+- char *fileName /* IN: File name */,
+- FILE *fp /* IN: File pointer to the store file */
+- )
+-{
+- int retValue;
+- DdNode *tmpArray[1];
+-
+- tmpArray[0] = f;
+-
+- retValue = Dddmp_cuddBddArrayStoreBlif (ddMgr, 1, tmpArray,
+- inputNames, outputNames, modelName, fileName, fp);
+-
+- return (retValue);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a dump file representing the argument BDD in
+- a Blif/Exlif notation.]
+-
+- Description [Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStoreBLif.
+- A dummy array of 1 BDD root is used for this purpose.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso [Dddmp_cuddBddArrayStorePrefix]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddBddArrayStoreBlif (
+- DdManager *ddMgr /* IN: DD Manager */,
+- int nroots /* IN: number of output BDD roots to be stored */,
+- DdNode **f /* IN: array of BDD roots to be stored */,
+- char **inputNames /* IN: array of variable names (or NULL) */,
+- char **outputNames /* IN: array of root names (or NULL) */,
+- char *modelName /* IN: Model Name */,
+- char *fname /* IN: File name */,
+- FILE *fp /* IN: File pointer to the store file */
+- )
+-{
+- int retValue;
+- int fileToClose = 0;
+-
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- int retValueBis;
+-
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During BDD Store.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During BDD Store.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-
+- /*
+- * Check if File needs to be opened in the proper mode.
+- */
+-
+- if (fp == NULL) {
+- fp = fopen (fname, "w");
+- Dddmp_CheckAndGotoLabel (fp==NULL, "Error opening file.",
+- failure);
+- fileToClose = 1;
+- }
+-
+- retValue = DddmpCuddDdArrayStoreBlif (ddMgr, nroots, f,
+- inputNames, outputNames, modelName, fp);
+-
+- if (fileToClose) {
+- fclose (fp);
+- }
+-
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During BDD Store.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During BDD Store.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-
+- return (retValue);
+-
+- failure:
+- return (DDDMP_FAILURE);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a dump file representing the argument BDD in
+- a prefix notation.]
+-
+- Description [Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStorePrefix.
+- A dummy array of 1 BDD root is used for this purpose.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso [Dddmp_cuddBddStore]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddBddStoreSmv (
+- DdManager *ddMgr /* IN: DD Manager */,
+- int nRoots /* IN: Number of BDD roots */,
+- DdNode *f /* IN: BDD root to be stored */,
+- char **inputNames /* IN: Array of variable names */,
+- char **outputNames /* IN: Array of root names */,
+- char *modelName /* IN: Model Name */,
+- char *fileName /* IN: File name */,
+- FILE *fp /* IN: File pointer to the store file */
+- )
+-{
+- int retValue;
+- DdNode *tmpArray[1];
+-
+- tmpArray[0] = f;
+-
+- retValue = Dddmp_cuddBddArrayStoreSmv (ddMgr, 1, tmpArray,
+- inputNames, outputNames, modelName, fileName, fp);
+-
+- return (retValue);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a dump file representing the argument BDD in
+- a prefix notation.]
+-
+- Description [Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStorePrefix.
+- A dummy array of 1 BDD root is used for this purpose.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso [Dddmp_cuddBddArrayStore]
+-
+-******************************************************************************/
+-
+-int
+-Dddmp_cuddBddArrayStoreSmv (
+- DdManager *ddMgr /* IN: DD Manager */,
+- int nroots /* IN: number of output BDD roots to be stored */,
+- DdNode **f /* IN: array of BDD roots to be stored */,
+- char **inputNames /* IN: array of variable names (or NULL) */,
+- char **outputNames /* IN: array of root names (or NULL) */,
+- char *modelName /* IN: Model Name */,
+- char *fname /* IN: File name */,
+- FILE *fp /* IN: File pointer to the store file */
+- )
+-{
+- int retValue;
+- int fileToClose = 0;
+-
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- int retValueBis;
+-
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During BDD Store.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During BDD Store.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-
+- /*
+- * Check if File needs to be opened in the proper mode.
+- */
+-
+- if (fp == NULL) {
+- fp = fopen (fname, "w");
+- Dddmp_CheckAndGotoLabel (fp==NULL, "Error opening file.",
+- failure);
+- fileToClose = 1;
+- }
+-
+- retValue = DddmpCuddDdArrayStoreSmv (ddMgr, nroots, f,
+- inputNames, outputNames, modelName, fp);
+-
+- if (fileToClose) {
+- fclose (fp);
+- }
+-
+-#ifdef DDDMP_DEBUG
+-#ifndef __alpha__
+- retValueBis = Cudd_DebugCheck (ddMgr);
+- if (retValueBis == 1) {
+- fprintf (stderr, "Inconsistency Found During BDD Store.\n");
+- fflush (stderr);
+- } else {
+- if (retValueBis == CUDD_OUT_OF_MEM) {
+- fprintf (stderr, "Out of Memory During BDD Store.\n");
+- fflush (stderr);
+- }
+- }
+-#endif
+-#endif
+-
+- return (retValue);
+-
+- failure:
+- return (DDDMP_FAILURE);
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Internal function to writes a dump file representing the
+- argument BDD in a prefix notation.]
+-
+- Description [One multiplexer is written for each BDD node.
+- It returns 1 in case of success; 0 otherwise (e.g., out-of-memory, file
+- system full, or an ADD with constants different from 0 and 1).
+- It does not close the file: This is the caller responsibility.
+- It uses a minimal unique subset of the hexadecimal address of a node as
+- name for it.
+- If the argument inputNames is non-null, it is assumed to hold the
+- pointers to the names of the inputs. Similarly for outputNames.
+- For each BDD node of function f, variable v, then child T, and else
+- child E it stores:
+- f = v * T + v' * E
+- that is
+- (OR f (AND v T) (AND (NOT v) E))
+- If E is a complemented child this results in the following
+- (OR f (AND v T) (AND (NOT v) (NOT E)))
+- Comments (COMMENT) are added at the beginning of the description to
+- describe inputs and outputs of the design.
+- A buffer (BUF) is add on the output to cope with complemented functions.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpCuddDdArrayStoreBlif]
+-
+-******************************************************************************/
+-
+-static int
+-DddmpCuddDdArrayStorePrefix (
+- DdManager *ddMgr /* IN: Manager */,
+- int n /* IN: Number of output nodes to be dumped */,
+- DdNode **f /* IN: Array of output nodes to be dumped */,
+- char **inputNames /* IN: Array of input names (or NULL) */,
+- char **outputNames /* IN: Array of output names (or NULL) */,
+- char *modelName /* IN: Model name (or NULL) */,
+- FILE *fp /* IN: Pointer to the dump file */
+- )
+-{
+- DdNode *support = NULL;
+- DdNode *scan;
+- int *sorted = NULL;
+- int nVars = ddMgr->size;
+- int retValue;
+- int i;
+-
+- /* Build a bit array with the support of f. */
+- sorted = ALLOC(int, nVars);
+- if (sorted == NULL) {
+- ddMgr->errorCode = CUDD_MEMORY_OUT;
+- Dddmp_CheckAndGotoLabel (1, "Allocation Error.", failure);
+- }
+- for (i = 0; i < nVars; i++) {
+- sorted[i] = 0;
+- }
+-
+- /* Take the union of the supports of each output function. */
+- support = Cudd_VectorSupport(ddMgr,f,n);
+- Dddmp_CheckAndGotoLabel (support==NULL,
+- "Error in function Cudd_VectorSupport.", failure);
+- cuddRef(support);
+- scan = support;
+- while (!cuddIsConstant(scan)) {
+- sorted[scan->index] = 1;
+- scan = cuddT(scan);
+- }
+- Cudd_RecursiveDeref(ddMgr,support);
+- /* so that we do not try to free it in case of failure */
+- support = NULL;
+-
+- /* Write the header (.model .inputs .outputs). */
+- if (modelName == NULL) {
+- retValue = fprintf (fp, "(COMMENT - model name: Unknown )\n");
+- } else {
+- retValue = fprintf (fp, "(COMMENT - model name: %s )\n", modelName);
+- }
+- if (retValue == EOF) {
+- return(0);
+- }
+-
+- retValue = fprintf(fp, "(COMMENT - input names: ");
+- if (retValue == EOF) {
+- return(0);
+- }
+- /* Write the input list by scanning the support array. */
+- for (i = 0; i < nVars; i++) {
+- if (sorted[i]) {
+- if (inputNames == NULL) {
+- retValue = fprintf(fp," inNode%d", i);
+- } else {
+- retValue = fprintf(fp," %s", inputNames[i]);
+- }
+- Dddmp_CheckAndGotoLabel (retValue==EOF,
+- "Error during file store.", failure);
+- }
+- }
+- FREE(sorted);
+- sorted = NULL;
+- retValue = fprintf(fp, " )\n");
+- if (retValue == EOF) {
+- return(0);
+- }
+-
+- /* Write the .output line. */
+- retValue = fprintf(fp,"(COMMENT - output names: ");
+- if (retValue == EOF) {
+- return(0);
+- }
+- for (i = 0; i < n; i++) {
+- if (outputNames == NULL) {
+- retValue = fprintf (fp," outNode%d", i);
+- } else {
+- retValue = fprintf (fp," %s", outputNames[i]);
+- }
+- Dddmp_CheckAndGotoLabel (retValue==EOF,
+- "Error during file store.", failure);
+- }
+- retValue = fprintf(fp, " )\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF,
+- "Error during file store.", failure);
+-
+- retValue = DddmpCuddDdArrayStorePrefixBody (ddMgr, n, f, inputNames,
+- outputNames, fp);
+- Dddmp_CheckAndGotoLabel (retValue==0,
+- "Error in function DddmpCuddDdArrayStorePrefixBody.", failure);
+-
+- return(1);
+-
+-failure:
+- if (sorted != NULL) {
+- FREE(sorted);
+- }
+- if (support != NULL) {
+- Cudd_RecursiveDeref(ddMgr,support);
+- }
+- return(0);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Internal function to writes a dump file representing the
+- argument BDD in a prefix notation. Writes the body of the file.]
+-
+- Description [One multiplexer is written for each BDD node.
+- It returns 1 in case of success; 0 otherwise (e.g., out-of-memory, file
+- system full, or an ADD with constants different from 0 and 1).
+- It does not close the file: This is the caller responsibility.
+- It uses a minimal unique subset of the hexadecimal address of a node as
+- name for it.
+- If the argument inputNames is non-null, it is assumed to hold the
+- pointers to the names of the inputs. Similarly for outputNames.
+- For each BDD node of function f, variable v, then child T, and else
+- child E it stores:
+- f = v * T + v' * E
+- that is
+- (OR f (AND v T) (AND (NOT v) E))
+- If E is a complemented child this results in the following
+- (OR f (AND v T) (AND (NOT v) (NOT E)))
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpCuddDdArrayStoreBlif]
+-
+-******************************************************************************/
+-
+-static int
+-DddmpCuddDdArrayStorePrefixBody (
+- DdManager *ddMgr /* IN: Manager */,
+- int n /* IN: Number of output nodes to be dumped */,
+- DdNode **f /* IN: Array of output nodes to be dumped */,
+- char **inputNames /* IN: Array of input names (or NULL) */,
+- char **outputNames /* IN: Array of output names (or NULL) */,
+- FILE *fp /* IN: Pointer to the dump file */
+- )
+-{
+- st_table *visited = NULL;
+- int retValue;
+- int i;
+-
+- /* Initialize symbol table for visited nodes. */
+- visited = st_init_table(st_ptrcmp, st_ptrhash);
+- Dddmp_CheckAndGotoLabel (visited==NULL,
+- "Error if function st_init_table.", failure);
+-
+- /* Call the function that really gets the job done. */
+- for (i = 0; i < n; i++) {
+- retValue = DddmpCuddDdArrayStorePrefixStep (ddMgr, Cudd_Regular(f[i]),
+- fp, visited, inputNames);
+- Dddmp_CheckAndGotoLabel (retValue==0,
+- "Error if function DddmpCuddDdArrayStorePrefixStep.", failure);
+- }
+-
+- /* To account for the possible complement on the root,
+- ** we put either a buffer or an inverter at the output of
+- ** the multiplexer representing the top node.
+- */
+- for (i=0; i<n; i++) {
+- if (outputNames == NULL) {
+- retValue = fprintf (fp, "(BUF outNode%d ", i);
+- } else {
+- retValue = fprintf (fp, "(BUF %s ", outputNames[i]);
+- }
+- Dddmp_CheckAndGotoLabel (retValue==EOF,
+- "Error during file store.", failure);
+-
+- if (Cudd_IsComplement(f[i])) {
+-#if SIZEOF_VOID_P == 8
+- retValue = fprintf (fp, "(NOT node%lx))\n",
+- (unsigned long) f[i] / (unsigned long) sizeof(DdNode));
+-#else
+- retValue = fprintf (fp, "(NOT node%x))\n",
+- (unsigned) f[i] / (unsigned) sizeof(DdNode));
+-#endif
+- } else {
+-#if SIZEOF_VOID_P == 8
+- retValue = fprintf (fp, "node%lx)\n",
+- (unsigned long) f[i] / (unsigned long) sizeof(DdNode));
+-#else
+- retValue = fprintf (fp, "node%x)\n",
+- (unsigned) f[i] / (unsigned) sizeof(DdNode));
+-#endif
+- }
+- Dddmp_CheckAndGotoLabel (retValue==EOF,
+- "Error during file store.", failure);
+- }
+-
+- st_free_table (visited);
+-
+- return(1);
+-
+-failure:
+- if (visited != NULL) st_free_table(visited);
+- return(0);
+-
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Performs the recursive step of
+- DddmpCuddDdArrayStorePrefixBody.]
+-
+- Description [Performs the recursive step of
+- DddmpCuddDdArrayStorePrefixBody.
+- Traverses the BDD f and writes a multiplexer-network description to the
+- file pointed by fp.
+- For each BDD node of function f, variable v, then child T, and else
+- child E it stores:
+- f = v * T + v' * E
+- that is
+- (OR f (AND v T) (AND (NOT v) E))
+- If E is a complemented child this results in the following
+- (OR f (AND v T) (AND (NOT v) (NOT E)))
+- f is assumed to be a regular pointer and the function guarantees this
+- assumption in the recursive calls.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-DddmpCuddDdArrayStorePrefixStep (
+- DdManager * ddMgr,
+- DdNode * f,
+- FILE * fp,
+- st_table * visited,
+- char ** names
+- )
+-{
+- DdNode *T, *E;
+- int retValue;
+-
+-#ifdef DDDMP_DEBUG
+- assert(!Cudd_IsComplement(f));
+-#endif
+-
+- /* If already visited, nothing to do. */
+- if (st_is_member(visited, (char *) f) == 1) {
+- return(1);
+- }
+-
+- /* Check for abnormal condition that should never happen. */
+- if (f == NULL) {
+- return(0);
+- }
+-
+- /* Mark node as visited. */
+- if (st_insert(visited, (char *) f, NULL) == ST_OUT_OF_MEM) {
+- return(0);
+- }
+-
+- /* Check for special case: If constant node, generate constant 1. */
+- if (f == DD_ONE (ddMgr)) {
+-#if SIZEOF_VOID_P == 8
+- retValue = fprintf (fp,
+- "(OR node%lx vss vdd)\n",
+- (unsigned long) f / (unsigned long) sizeof(DdNode));
+-#else
+- retValue = fprintf (fp,
+- "(OR node%x vss vdd)\n",
+- (unsigned) f / (unsigned) sizeof(DdNode));
+-#endif
+- if (retValue == EOF) {
+- return(0);
+- } else {
+- return(1);
+- }
+- }
+-
+- /*
+- * Check whether this is an ADD. We deal with 0-1 ADDs, but not
+- * with the general case.
+- */
+-
+- if (f == DD_ZERO(ddMgr)) {
+-#if SIZEOF_VOID_P == 8
+- retValue = fprintf (fp,
+- "(AND node%lx vss vdd)\n",
+- (unsigned long) f / (unsigned long) sizeof(DdNode));
+-#else
+- retValue = fprintf (fp,
+- "(AND node%x vss vdd)\n",
+- (unsigned) f / (unsigned) sizeof(DdNode));
+-#endif
+- if (retValue == EOF) {
+- return(0);
+- } else {
+- return(1);
+- }
+- }
+-
+- if (cuddIsConstant(f)) {
+- return(0);
+- }
+-
+- /* Recursive calls. */
+- T = cuddT(f);
+- retValue = DddmpCuddDdArrayStorePrefixStep (ddMgr,T,fp,visited,names);
+- if (retValue != 1) {
+- return(retValue);
+- }
+- E = Cudd_Regular(cuddE(f));
+- retValue = DddmpCuddDdArrayStorePrefixStep (ddMgr,E,fp,visited,names);
+- if (retValue != 1) {
+- return(retValue);
+- }
+-
+- /* Write multiplexer taking complement arc into account. */
+-#if SIZEOF_VOID_P == 8
+- retValue = fprintf (fp, "(OR node%lx (AND ",
+- (unsigned long) f / (unsigned long) sizeof(DdNode));
+-#else
+- retValue = fprintf (fp, "(OR node%x (AND ",
+- (unsigned) f / (unsigned) sizeof(DdNode));
+-#endif
+- if (retValue == EOF) {
+- return(0);
+- }
+-
+- if (names != NULL) {
+- retValue = fprintf(fp, "%s ", names[f->index]);
+- } else {
+- retValue = fprintf(fp, "inNode%d ", f->index);
+- }
+- if (retValue == EOF) {
+- return(0);
+- }
+-
+-#if SIZEOF_VOID_P == 8
+- retValue = fprintf (fp, "node%lx) (AND (NOT ",
+- (unsigned long) T / (unsigned long) sizeof(DdNode));
+-#else
+- retValue = fprintf (fp, "node%x) (AND (NOT ",
+- (unsigned) T / (unsigned) sizeof(DdNode));
+-#endif
+- if (retValue == EOF) {
+- return(0);
+- }
+-
+- if (names != NULL) {
+- retValue = fprintf (fp, "%s", names[f->index]);
+- } else {
+- retValue = fprintf (fp, "inNode%d", f->index);
+- }
+- if (retValue == EOF) {
+- return(0);
+- }
+-
+-#if SIZEOF_VOID_P == 8
+- if (Cudd_IsComplement(cuddE(f))) {
+- retValue = fprintf (fp, ") (NOT node%lx)))\n",
+- (unsigned long) E / (unsigned long) sizeof(DdNode));
+- } else {
+- retValue = fprintf (fp, ") node%lx))\n",
+- (unsigned long) E / (unsigned long) sizeof(DdNode));
+- }
+-#else
+- if (Cudd_IsComplement(cuddE(f))) {
+- retValue = fprintf (fp, ") (NOT node%x)))\n",
+- (unsigned) E / (unsigned) sizeof(DdNode));
+- } else {
+- retValue = fprintf (fp, ") node%x))\n",
+- (unsigned) E / (unsigned) sizeof(DdNode));
+- }
+-#endif
+-
+- if (retValue == EOF) {
+- return(0);
+- } else {
+- return(1);
+- }
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a blif file representing the argument BDDs.]
+-
+- Description [Writes a blif file representing the argument BDDs as a
+- network of multiplexers. One multiplexer is written for each BDD
+- node. It returns 1 in case of success; 0 otherwise (e.g.,
+- out-of-memory, file system full, or an ADD with constants different
+- from 0 and 1).
+- DddmpCuddDdArrayStoreBlif does not close the file: This is the
+- caller responsibility.
+- DddmpCuddDdArrayStoreBlif uses a minimal unique subset of
+- the hexadecimal address of a node as name for it. If the argument
+- inames is non-null, it is assumed to hold the pointers to the names
+- of the inputs. Similarly for outputNames.
+- It prefixes the string "NODE" to each nome to have "regular" names
+- for each elements.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpCuddDdArrayStoreBlifBody,Cudd_DumpBlif]
+-
+-******************************************************************************/
+-
+-static int
+-DddmpCuddDdArrayStoreBlif (
+- DdManager *ddMgr /* IN: Manager */,
+- int n /* IN: Number of output nodes to be dumped */,
+- DdNode **f /* IN: Array of output nodes to be dumped */,
+- char **inputNames /* IN: Array of input names (or NULL) */,
+- char **outputNames /* IN: Array of output names (or NULL) */,
+- char *modelName /* IN: Model name (or NULL) */,
+- FILE *fp /* IN: Pointer to the dump file */
+- )
+-{
+- DdNode *support = NULL;
+- DdNode *scan;
+- int *sorted = NULL;
+- int nVars = ddMgr->size;
+- int retValue;
+- int i;
+-
+- /* Build a bit array with the support of f. */
+- sorted = ALLOC (int, nVars);
+- if (sorted == NULL) {
+- ddMgr->errorCode = CUDD_MEMORY_OUT;
+- Dddmp_CheckAndGotoLabel (1, "Allocation Error.", failure);
+- }
+- for (i = 0; i < nVars; i++) {
+- sorted[i] = 0;
+- }
+-
+- /* Take the union of the supports of each output function. */
+- support = Cudd_VectorSupport(ddMgr,f,n);
+- Dddmp_CheckAndGotoLabel (support==NULL,
+- "Error in function Cudd_VectorSupport.", failure);
+- cuddRef(support);
+- scan = support;
+- while (!cuddIsConstant(scan)) {
+- sorted[scan->index] = 1;
+- scan = cuddT(scan);
+- }
+- Cudd_RecursiveDeref(ddMgr,support);
+- support = NULL;
+- /* so that we do not try to free it in case of failure */
+-
+- /* Write the header (.model .inputs .outputs). */
+- if (modelName == NULL) {
+- retValue = fprintf(fp,".model DD\n.inputs");
+- } else {
+- retValue = fprintf(fp,".model %s\n.inputs", modelName);
+- }
+- if (retValue == EOF) {
+- return(0);
+- }
+-
+- /* Write the input list by scanning the support array. */
+- for (i = 0; i < nVars; i++) {
+- if (sorted[i]) {
+- if (inputNames == NULL || (inputNames[i] == NULL)) {
+- retValue = fprintf(fp," inNode%d", i);
+- } else {
+- retValue = fprintf(fp," %s", inputNames[i]);
+- }
+- Dddmp_CheckAndGotoLabel (retValue==EOF,
+- "Error during file store.", failure);
+- }
+- }
+- FREE(sorted);
+- sorted = NULL;
+-
+- /* Write the .output line. */
+- retValue = fprintf(fp,"\n.outputs");
+- Dddmp_CheckAndGotoLabel (retValue==EOF,
+- "Error during file store.", failure);
+- for (i = 0; i < n; i++) {
+- if (outputNames == NULL || (outputNames[i] == NULL)) {
+- retValue = fprintf(fp," outNode%d", i);
+- } else {
+- retValue = fprintf(fp," %s", outputNames[i]);
+- }
+- Dddmp_CheckAndGotoLabel (retValue==EOF,
+- "Error during file store.", failure);
+- }
+- retValue = fprintf(fp,"\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF,
+- "Error during file store.", failure);
+-
+- retValue = DddmpCuddDdArrayStoreBlifBody(ddMgr, n, f, inputNames,
+- outputNames, fp);
+- Dddmp_CheckAndGotoLabel (retValue==0,
+- "Error if function DddmpCuddDdArrayStoreBlifBody.", failure);
+-
+- /* Write trailer and return. */
+- retValue = fprintf (fp, ".end\n");
+- Dddmp_CheckAndGotoLabel (retValue==EOF,
+- "Error during file store.", failure);
+-
+- return(1);
+-
+-failure:
+- if (sorted != NULL) {
+- FREE(sorted);
+- }
+- if (support != NULL) {
+- Cudd_RecursiveDeref(ddMgr,support);
+- }
+-
+- return(0);
+-}
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Writes a blif body representing the argument BDDs.]
+-
+- Description [Writes a blif body representing the argument BDDs as a
+- network of multiplexers. One multiplexer is written for each BDD
+- node. It returns 1 in case of success; 0 otherwise (e.g.,
+- out-of-memory, file system full, or an ADD with constants different
+- from 0 and 1).
+- DddmpCuddDdArrayStoreBlif does not close the file: This is the
+- caller responsibility.
+- DddmpCuddDdArrayStoreBlif uses a minimal unique subset of
+- the hexadecimal address of a node as name for it. If the argument
+- inputNames is non-null, it is assumed to hold the pointers to the names
+- of the inputs. Similarly for outputNames. This function prints out only
+- .names part.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-DddmpCuddDdArrayStoreBlifBody (
+- DdManager *ddMgr /* IN: Manager */,
+- int n /* IN: Number of output nodes to be dumped */,
+- DdNode **f /* IN: Array of output nodes to be dumped */,
+- char **inputNames /* IN: Array of input names (or NULL) */,
+- char **outputNames /* IN: Array of output names (or NULL) */,
+- FILE *fp /* IN: Pointer to the dump file */
+- )
+-{
+- st_table *visited = NULL;
+- int retValue;
+- int i;
+-
+- /* Initialize symbol table for visited nodes. */
+- visited = st_init_table(st_ptrcmp, st_ptrhash);
+- Dddmp_CheckAndGotoLabel (visited==NULL,
+- "Error if function st_init_table.", failure);
+-
+- /* Call the function that really gets the job done. */
+- for (i = 0; i < n; i++) {
+- retValue = DddmpCuddDdArrayStoreBlifStep (ddMgr, Cudd_Regular(f[i]),
+- fp, visited, inputNames);
+- Dddmp_CheckAndGotoLabel (retValue==0,
+- "Error if function DddmpCuddDdArrayStoreBlifStep.", failure);
+- }
+-
+- /*
+- * To account for the possible complement on the root,
+- * we put either a buffer or an inverter at the output of
+- * the multiplexer representing the top node.
+- */
+-
+- for (i = 0; i < n; i++) {
+- if (outputNames == NULL) {
+- retValue = fprintf(fp,
+-#if SIZEOF_VOID_P == 8
+- ".names node%lx outNode%d\n",
+- (unsigned long) f[i] / (unsigned long) sizeof(DdNode), i);
+-#else
+- ".names node%x outNode%d\n",
+- (unsigned) f[i] / (unsigned) sizeof(DdNode), i);
+-#endif
+- } else {
+- retValue = fprintf(fp,
+-#if SIZEOF_VOID_P == 8
+- ".names node%lx %s\n",
+- (unsigned long) f[i] / (unsigned long) sizeof(DdNode), outputNames[i]);
+-#else
+- ".names node%x %s\n",
+- (unsigned) f[i] / (unsigned) sizeof(DdNode), outputNames[i]);
+-#endif
+- }
+- Dddmp_CheckAndGotoLabel (retValue==EOF,
+- "Error during file store.", failure);
+- if (Cudd_IsComplement(f[i])) {
+- retValue = fprintf(fp,"0 1\n");
+- } else {
+- retValue = fprintf(fp,"1 1\n");
+- }
+- Dddmp_CheckAndGotoLabel (retValue==EOF,
+- "Error during file store.", failure);
+- }
+-
+- st_free_table(visited);
+- return(1);
+-
+-failure:
+- if (visited != NULL) {
+- st_free_table(visited);
+- }
+- return(0);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Performs the recursive step of DddmpCuddDdArrayStoreBlif.]
+-
+- Description [Performs the recursive step of DddmpCuddDdArrayStoreBlif.
+- Traverses the BDD f and writes a multiplexer-network description to
+- the file pointed by fp in blif format.
+- f is assumed to be a regular pointer and DddmpCuddDdArrayStoreBlifStep
+- guarantees this assumption in the recursive calls.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-DddmpCuddDdArrayStoreBlifStep (
+- DdManager *ddMgr,
+- DdNode *f,
+- FILE *fp,
+- st_table *visited,
+- char **names
+- )
+-{
+- DdNode *T, *E;
+- int retValue;
+-
+-#ifdef DDDMP_DEBUG
+- assert(!Cudd_IsComplement(f));
+-#endif
+-
+- /* If already visited, nothing to do. */
+- if (st_is_member(visited, (char *) f) == 1) {
+- return(1);
+- }
+-
+- /* Check for abnormal condition that should never happen. */
+- if (f == NULL) {
+- return(0);
+- }
+-
+- /* Mark node as visited. */
+- if (st_insert(visited, (char *) f, NULL) == ST_OUT_OF_MEM) {
+- return(0);
+- }
+-
+- /* Check for special case: If constant node, generate constant 1. */
+- if (f == DD_ONE(ddMgr)) {
+-#if SIZEOF_VOID_P == 8
+- retValue = fprintf(fp, ".names node%lx\n1\n",
+- (unsigned long) f / (unsigned long) sizeof(DdNode));
+-#else
+- retValue = fprintf(fp, ".names node%x\n1\n",
+- (unsigned) f / (unsigned) sizeof(DdNode));
+-#endif
+- if (retValue == EOF) {
+- return(0);
+- } else {
+- return(1);
+- }
+- }
+-
+- /* Check whether this is an ADD. We deal with 0-1 ADDs, but not
+- ** with the general case.
+- */
+- if (f == DD_ZERO(ddMgr)) {
+-#if SIZEOF_VOID_P == 8
+- retValue = fprintf(fp, ".names node%lx\n",
+- (unsigned long) f / (unsigned long) sizeof(DdNode));
+-#else
+- retValue = fprintf(fp, ".names node%x\n",
+- (unsigned) f / (unsigned) sizeof(DdNode));
+-#endif
+- if (retValue == EOF) {
+- return(0);
+- } else {
+- return(1);
+- }
+- }
+- if (cuddIsConstant(f)) {
+- return(0);
+- }
+-
+- /* Recursive calls. */
+- T = cuddT(f);
+- retValue = DddmpCuddDdArrayStoreBlifStep(ddMgr,T,fp,visited,names);
+- if (retValue != 1) return(retValue);
+- E = Cudd_Regular(cuddE(f));
+- retValue = DddmpCuddDdArrayStoreBlifStep(ddMgr,E,fp,visited,names);
+- if (retValue != 1) return(retValue);
+-
+- /* Write multiplexer taking complement arc into account. */
+- if (names != NULL) {
+- retValue = fprintf(fp,".names %s", names[f->index]);
+- } else {
+- retValue = fprintf(fp,".names inNode%d", f->index);
+- }
+- if (retValue == EOF) {
+- return(0);
+- }
+-
+-#if SIZEOF_VOID_P == 8
+- if (Cudd_IsComplement(cuddE(f))) {
+- retValue = fprintf(fp," node%lx node%lx node%lx\n11- 1\n0-0 1\n",
+- (unsigned long) T / (unsigned long) sizeof(DdNode),
+- (unsigned long) E / (unsigned long) sizeof(DdNode),
+- (unsigned long) f / (unsigned long) sizeof(DdNode));
+- } else {
+- retValue = fprintf(fp," node%lx node%lx node%lx\n11- 1\n0-1 1\n",
+- (unsigned long) T / (unsigned long) sizeof(DdNode),
+- (unsigned long) E / (unsigned long) sizeof(DdNode),
+- (unsigned long) f / (unsigned long) sizeof(DdNode));
+- }
+-#else
+- if (Cudd_IsComplement(cuddE(f))) {
+- retValue = fprintf(fp," node%x node%x node%x\n11- 1\n0-0 1\n",
+- (unsigned) T / (unsigned) sizeof(DdNode),
+- (unsigned) E / (unsigned) sizeof(DdNode),
+- (unsigned) f / (unsigned) sizeof(DdNode));
+- } else {
+- retValue = fprintf(fp," node%x node%x node%x\n11- 1\n0-1 1\n",
+- (unsigned) T / (unsigned) sizeof(DdNode),
+- (unsigned) E / (unsigned) sizeof(DdNode),
+- (unsigned) f / (unsigned) sizeof(DdNode));
+- }
+-#endif
+- if (retValue == EOF) {
+- return(0);
+- } else {
+- return(1);
+- }
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Internal function to writes a dump file representing the
+- argument BDD in a SMV notation.]
+-
+- Description [One multiplexer is written for each BDD node.
+- It returns 1 in case of success; 0 otherwise (e.g., out-of-memory, file
+- system full, or an ADD with constants different from 0 and 1).
+- It does not close the file: This is the caller responsibility.
+- It uses a minimal unique subset of the hexadecimal address of a node as
+- name for it.
+- If the argument inputNames is non-null, it is assumed to hold the
+- pointers to the names of the inputs. Similarly for outputNames.
+- For each BDD node of function f, variable v, then child T, and else
+- child E it stores:
+- f = v * T + v' * E
+- that is
+- (OR f (AND v T) (AND (NOT v) E))
+- If E is a complemented child this results in the following
+- (OR f (AND v T) (AND (NOT v) (NOT E)))
+- Comments (COMMENT) are added at the beginning of the description to
+- describe inputs and outputs of the design.
+- A buffer (BUF) is add on the output to cope with complemented functions.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpCuddDdArrayStoreBlif]
+-
+-******************************************************************************/
+-
+-static int
+-DddmpCuddDdArrayStoreSmv (
+- DdManager *ddMgr /* IN: Manager */,
+- int n /* IN: Number of output nodes to be dumped */,
+- DdNode **f /* IN: Array of output nodes to be dumped */,
+- char **inputNames /* IN: Array of input names (or NULL) */,
+- char **outputNames /* IN: Array of output names (or NULL) */,
+- char *modelName /* IN: Model name (or NULL) */,
+- FILE *fp /* IN: Pointer to the dump file */
+- )
+-{
+- DdNode *support = NULL;
+- DdNode *scan;
+- int *sorted = NULL;
+- int nVars = ddMgr->size;
+- int retValue;
+- int i;
+-
+- /* Build a bit array with the support of f. */
+- sorted = ALLOC(int, nVars);
+- if (sorted == NULL) {
+- ddMgr->errorCode = CUDD_MEMORY_OUT;
+- Dddmp_CheckAndGotoLabel (1, "Allocation Error.", failure);
+- }
+- for (i = 0; i < nVars; i++) {
+- sorted[i] = 0;
+- }
+-
+- /* Take the union of the supports of each output function. */
+- support = Cudd_VectorSupport(ddMgr,f,n);
+- Dddmp_CheckAndGotoLabel (support==NULL,
+- "Error in function Cudd_VectorSupport.", failure);
+- cuddRef(support);
+- scan = support;
+- while (!cuddIsConstant(scan)) {
+- sorted[scan->index] = 1;
+- scan = cuddT(scan);
+- }
+- Cudd_RecursiveDeref(ddMgr,support);
+- /* so that we do not try to free it in case of failure */
+- support = NULL;
+-
+- /* Write the header */
+- if (modelName == NULL) {
+- retValue = fprintf (fp, "MODULE main -- Unknown\n");
+- } else {
+- retValue = fprintf (fp, "MODULE main -- %s\n", modelName);
+- }
+- if (retValue == EOF) {
+- return(0);
+- }
+-
+- retValue = fprintf(fp, "IVAR\n");
+- if (retValue == EOF) {
+- return(0);
+- }
+-
+- /* Write the input list by scanning the support array. */
+- for (i=0; i<nVars; i++) {
+- if (sorted[i]) {
+- if (inputNames == NULL) {
+- retValue = fprintf (fp, " inNode%d : boolean;\n", i);
+- } else {
+- retValue = fprintf (fp, " %s : boolean;\n", inputNames[i]);
+- }
+- Dddmp_CheckAndGotoLabel (retValue==EOF,
+- "Error during file store.", failure);
+- }
+- }
+- FREE(sorted);
+- sorted = NULL;
+-
+- retValue = fprintf (fp, "\nDEFINE\n");
+-
+- retValue = DddmpCuddDdArrayStoreSmvBody (ddMgr, n, f, inputNames,
+- outputNames, fp);
+- Dddmp_CheckAndGotoLabel (retValue==0,
+- "Error in function DddmpCuddDdArrayStoreSmvBody.", failure);
+-
+- return(1);
+-
+-failure:
+- if (sorted != NULL) {
+- FREE(sorted);
+- }
+- if (support != NULL) {
+- Cudd_RecursiveDeref(ddMgr,support);
+- }
+- return(0);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Internal function to writes a dump file representing the
+- argument BDD in a SMV notation. Writes the body of the file.]
+-
+- Description [One multiplexer is written for each BDD node.
+- It returns 1 in case of success; 0 otherwise (e.g., out-of-memory, file
+- system full, or an ADD with constants different from 0 and 1).
+- It does not close the file: This is the caller responsibility.
+- It uses a minimal unique subset of the hexadecimal address of a node as
+- name for it.
+- If the argument inputNames is non-null, it is assumed to hold the
+- pointers to the names of the inputs. Similarly for outputNames.
+- For each BDD node of function f, variable v, then child T, and else
+- child E it stores:
+- f = v * T + v' * E
+- that is
+- (OR f (AND v T) (AND (NOT v) E))
+- If E is a complemented child this results in the following
+- (OR f (AND v T) (AND (NOT v) (NOT E)))
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [DddmpCuddDdArrayStoreBlif]
+-
+-******************************************************************************/
+-
+-static int
+-DddmpCuddDdArrayStoreSmvBody (
+- DdManager *ddMgr /* IN: Manager */,
+- int n /* IN: Number of output nodes to be dumped */,
+- DdNode **f /* IN: Array of output nodes to be dumped */,
+- char **inputNames /* IN: Array of input names (or NULL) */,
+- char **outputNames /* IN: Array of output names (or NULL) */,
+- FILE *fp /* IN: Pointer to the dump file */
+- )
+-{
+- st_table *visited = NULL;
+- int retValue;
+- int i;
+-
+- /* Initialize symbol table for visited nodes. */
+- visited = st_init_table(st_ptrcmp, st_ptrhash);
+- Dddmp_CheckAndGotoLabel (visited==NULL,
+- "Error if function st_init_table.", failure);
+-
+- /* Call the function that really gets the job done. */
+- for (i = 0; i < n; i++) {
+- retValue = DddmpCuddDdArrayStoreSmvStep (ddMgr, Cudd_Regular(f[i]),
+- fp, visited, inputNames);
+- Dddmp_CheckAndGotoLabel (retValue==0,
+- "Error if function DddmpCuddDdArrayStoreSmvStep.", failure);
+- }
+-
+- /*
+- * To account for the possible complement on the root,
+- * we put either a buffer or an inverter at the output of
+- * the multiplexer representing the top node.
+- */
+-
+- for (i=0; i<n; i++) {
+- if (outputNames == NULL) {
+- retValue = fprintf (fp, "outNode%d := ", i);
+- } else {
+- retValue = fprintf (fp, "%s := ", outputNames[i]);
+- }
+- Dddmp_CheckAndGotoLabel (retValue==EOF,
+- "Error during file store.", failure);
+-
+- if (Cudd_IsComplement(f[i])) {
+-#if SIZEOF_VOID_P == 8
+- retValue = fprintf (fp, "!node%lx\n",
+- (unsigned long) f[i] / (unsigned long) sizeof(DdNode));
+-#else
+- retValue = fprintf (fp, "!node%x\n",
+- (unsigned) f[i] / (unsigned) sizeof(DdNode));
+-#endif
+- } else {
+-#if SIZEOF_VOID_P == 8
+- retValue = fprintf (fp, "node%lx\n",
+- (unsigned long) f[i] / (unsigned long) sizeof(DdNode));
+-#else
+- retValue = fprintf (fp, "node%x\n",
+- (unsigned) f[i] / (unsigned) sizeof(DdNode));
+-#endif
+- }
+- Dddmp_CheckAndGotoLabel (retValue==EOF,
+- "Error during file store.", failure);
+- }
+-
+- st_free_table (visited);
+-
+- return(1);
+-
+-failure:
+- if (visited != NULL) st_free_table(visited);
+- return(0);
+-
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Performs the recursive step of
+- DddmpCuddDdArrayStoreSmvBody.]
+-
+- Description [Performs the recursive step of
+- DddmpCuddDdArrayStoreSmvBody.
+- Traverses the BDD f and writes a multiplexer-network description to the
+- file pointed by fp.
+- For each BDD node of function f, variable v, then child T, and else
+- child E it stores:
+- f = v * T + v' * E
+- that is
+- (OR f (AND v T) (AND (NOT v) E))
+- If E is a complemented child this results in the following
+- (OR f (AND v T) (AND (NOT v) (NOT E)))
+- f is assumed to be a regular pointer and the function guarantees this
+- assumption in the recursive calls.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-DddmpCuddDdArrayStoreSmvStep (
+- DdManager * ddMgr,
+- DdNode * f,
+- FILE * fp,
+- st_table * visited,
+- char ** names
+- )
+-{
+- DdNode *T, *E;
+- int retValue;
+-
+-#ifdef DDDMP_DEBUG
+- assert(!Cudd_IsComplement(f));
+-#endif
+-
+- /* If already visited, nothing to do. */
+- if (st_is_member(visited, (char *) f) == 1) {
+- return(1);
+- }
+-
+- /* Check for abnormal condition that should never happen. */
+- if (f == NULL) {
+- return(0);
+- }
+-
+- /* Mark node as visited. */
+- if (st_insert(visited, (char *) f, NULL) == ST_OUT_OF_MEM) {
+- return(0);
+- }
+-
+- /* Check for special case: If constant node, generate constant 1. */
+- if (f == DD_ONE (ddMgr)) {
+-#if SIZEOF_VOID_P == 8
+- retValue = fprintf (fp,
+- "node%lx := 1;\n",
+- (unsigned long) f / (unsigned long) sizeof(DdNode));
+-#else
+- retValue = fprintf (fp,
+- "node%x := 1;\n",
+- (unsigned) f / (unsigned) sizeof(DdNode));
+-#endif
+- if (retValue == EOF) {
+- return(0);
+- } else {
+- return(1);
+- }
+- }
+-
+- /*
+- * Check whether this is an ADD. We deal with 0-1 ADDs, but not
+- * with the general case.
+- */
+-
+- if (f == DD_ZERO(ddMgr)) {
+-#if SIZEOF_VOID_P == 8
+- retValue = fprintf (fp,
+- "node%lx := 0;\n",
+- (unsigned long) f / (unsigned long) sizeof(DdNode));
+-#else
+- retValue = fprintf (fp,
+- "node%x := 0;\n",
+- (unsigned) f / (unsigned) sizeof(DdNode));
+-#endif
+- if (retValue == EOF) {
+- return(0);
+- } else {
+- return(1);
+- }
+- }
+-
+- if (cuddIsConstant(f)) {
+- return(0);
+- }
+-
+- /* Recursive calls. */
+- T = cuddT(f);
+- retValue = DddmpCuddDdArrayStoreSmvStep (ddMgr,T,fp,visited,names);
+- if (retValue != 1) {
+- return(retValue);
+- }
+- E = Cudd_Regular(cuddE(f));
+- retValue = DddmpCuddDdArrayStoreSmvStep (ddMgr,E,fp,visited,names);
+- if (retValue != 1) {
+- return(retValue);
+- }
+-
+- /* Write multiplexer taking complement arc into account. */
+-#if SIZEOF_VOID_P == 8
+- retValue = fprintf (fp, "node%lx := ",
+- (unsigned long) f / (unsigned long) sizeof(DdNode));
+-#else
+- retValue = fprintf (fp, "node%x := ",
+- (unsigned) f / (unsigned) sizeof(DdNode));
+-#endif
+- if (retValue == EOF) {
+- return(0);
+- }
+-
+- if (names != NULL) {
+- retValue = fprintf(fp, "%s ", names[f->index]);
+- } else {
+- retValue = fprintf(fp, "inNode%d ", f->index);
+- }
+- if (retValue == EOF) {
+- return(0);
+- }
+-
+-#if SIZEOF_VOID_P == 8
+- retValue = fprintf (fp, "& node%lx | ",
+- (unsigned long) T / (unsigned long) sizeof(DdNode));
+-#else
+- retValue = fprintf (fp, "& node%x | ",
+- (unsigned) T / (unsigned) sizeof(DdNode));
+-#endif
+- if (retValue == EOF) {
+- return(0);
+- }
+-
+- if (names != NULL) {
+- retValue = fprintf (fp, "!%s ", names[f->index]);
+- } else {
+- retValue = fprintf (fp, "!inNode%d ", f->index);
+- }
+- if (retValue == EOF) {
+- return(0);
+- }
+-
+-#if SIZEOF_VOID_P == 8
+- if (Cudd_IsComplement(cuddE(f))) {
+- retValue = fprintf (fp, "& !node%lx\n",
+- (unsigned long) E / (unsigned long) sizeof(DdNode));
+- } else {
+- retValue = fprintf (fp, "& node%lx\n",
+- (unsigned long) E / (unsigned long) sizeof(DdNode));
+- }
+-#else
+- if (Cudd_IsComplement(cuddE(f))) {
+- retValue = fprintf (fp, "& !node%x\n",
+- (unsigned) E / (unsigned) sizeof(DdNode));
+- } else {
+- retValue = fprintf (fp, "& node%x\n",
+- (unsigned) E / (unsigned) sizeof(DdNode));
+- }
+-#endif
+-
+- if (retValue == EOF) {
+- return(0);
+- } else {
+- return(1);
+- }
+-}
+-
+diff --git a/Cudd/dddmp/dddmpUtil.c b/Cudd/dddmp/dddmpUtil.c
+deleted file mode 100644
+index feff439..0000000
+--- a/Cudd/dddmp/dddmpUtil.c
++++ /dev/null
+@@ -1,436 +0,0 @@
+-/**CFile**********************************************************************
+-
+- FileName [dddmpUtil.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [Util Functions for the dddmp package]
+-
+- Description [Functions to manipulate arrays.]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include "dddmpInt.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/**AutomaticEnd***************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [String compare for qsort]
+-
+- Description [String compare for qsort]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-int
+-QsortStrcmp(
+- const void *ps1 /* IN: pointer to the first string */,
+- const void *ps2 /* IN: pointer to the second string */
+- )
+-{
+- return (strcmp (*((char**)ps1),*((char **)ps2)));
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Performs binary search of a name within a sorted array]
+-
+- Description [Binary search of a name within a sorted array of strings.
+- Used when matching names of variables.
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-int
+-FindVarname (
+- char *name /* IN: name to look for */,
+- char **array /* IN: search array */,
+- int n /* IN: size of the array */
+- )
+-{
+- int d, m, u, t;
+-
+- d = 0; u = n-1;
+-
+- while (u>=d) {
+- m = (u+d)/2;
+- t=strcmp(name,array[m]);
+- if (t==0)
+- return m;
+- if (t<0)
+- u=m-1;
+- else
+- d=m+1;
+- }
+-
+- return (-1);
+-}
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Duplicates a string]
+-
+- Description [Allocates memory and copies source string]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-char *
+-DddmpStrDup (
+- char *str /* IN: string to be duplicated */
+- )
+-{
+- char *str2;
+-
+- str2 = DDDMP_ALLOC(char,strlen(str)+1);
+- if (str2 != NULL) {
+- strcpy (str2,str);
+- }
+-
+- return (str2);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Duplicates an array of strings]
+-
+- Description [Allocates memory and copies source array]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-char **
+-DddmpStrArrayDup (
+- char **array /* IN: array of strings to be duplicated */,
+- int n /* IN: size of the array */
+- )
+-{
+- char **array2;
+- int i;
+-
+- array2 = DDDMP_ALLOC(char *, n);
+- if (array2 == NULL) {
+- (void) fprintf (stderr, "DddmpStrArrayDup: Error allocating memory\n");
+- fflush (stderr);
+- return NULL;
+- }
+-
+- /*
+- * initialize all slots to NULL for fair FREEing in case of failure
+- */
+-
+- for (i=0; i<n; i++) {
+- array2[i] = NULL;
+- }
+-
+- for (i=0; i<n; i++) {
+- if (array[i] != NULL) {
+- if ((array2[i]=DddmpStrDup(array[i]))==NULL) {
+- DddmpStrArrayFree (array2, n);
+- return (NULL);
+- }
+- }
+- }
+-
+- return (array2);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Inputs an array of strings]
+-
+- Description [Allocates memory and inputs source array]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-char **
+-DddmpStrArrayRead (
+- FILE *fp /* IN: input file */,
+- int n /* IN: size of the array */
+- )
+-{
+- char buf[DDDMP_MAXSTRLEN];
+- char **array;
+- int i;
+-
+- assert(fp!=NULL);
+-
+- array = DDDMP_ALLOC(char *, n);
+- if (array == NULL) {
+- (void) fprintf (stderr, "DddmpStrArrayRead: Error allocating memory\n");
+- fflush (stderr);
+- return NULL;
+- }
+-
+- /*
+- * initialize all slots to NULL for fair FREEing in case of failure
+- */
+- for (i=0; i<n; i++)
+- array[i] = NULL;
+-
+- for (i=0; i < n; i++) {
+- if (fscanf (fp, "%s", buf)==EOF) {
+- fprintf (stderr, "DddmpStrArrayRead: Error reading file - EOF found\n");
+- fflush (stderr);
+- DddmpStrArrayFree (array, n);
+- return (NULL);
+- }
+- if ((array[i]=DddmpStrDup(buf))==NULL) {
+- DddmpStrArrayFree (array, n);
+- return (NULL);
+- }
+- }
+-
+- return (array);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Outputs an array of strings]
+-
+- Description [Outputs an array of strings to a specified file]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-int
+-DddmpStrArrayWrite (
+- FILE *fp /* IN: output file */,
+- char **array /* IN: array of strings */,
+- int n /* IN: size of the array */
+- )
+-{
+- int i;
+-
+- assert(fp!=NULL);
+-
+- for (i=0; i<n; i++) {
+- if (fprintf (fp, " %s", array[i]) == EOF) {
+- fprintf (stderr, "DddmpStrArrayWrite: Error writing to file\n");
+- fflush (stderr);
+- return (EOF);
+- }
+- }
+-
+- return (n);
+-}
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Frees an array of strings]
+-
+- Description [Frees memory for strings and the array of pointers]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-void
+-DddmpStrArrayFree (
+- char **array /* IN: array of strings */,
+- int n /* IN: size of the array */
+- )
+-{
+- int i;
+-
+- if (array == NULL) {
+- return;
+- }
+-
+- for (i=0; i<n; i++) {
+- DDDMP_FREE (array[i]);
+- }
+-
+- DDDMP_FREE (array);
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Duplicates an array of ints]
+-
+- Description [Allocates memory and copies source array]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-int *
+-DddmpIntArrayDup (
+- int *array /* IN: array of ints to be duplicated */,
+- int n /* IN: size of the array */
+- )
+-{
+- int *array2;
+- int i;
+-
+- array2 = DDDMP_ALLOC(int, n);
+- if (array2 == NULL) {
+- (void) fprintf (stderr, "DddmpIntArrayDup: Error allocating memory\n");
+- fflush (stderr);
+- return (NULL);
+- }
+-
+- for (i=0; i<n; i++) {
+- array2[i] = array[i];
+- }
+-
+- return (array2);
+-}
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Inputs an array of ints]
+-
+- Description [Allocates memory and inputs source array]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-int *
+-DddmpIntArrayRead (
+- FILE *fp /* IN: input file */,
+- int n /* IN: size of the array */
+- )
+-{
+- int *array;
+- int i;
+-
+- assert(fp!=NULL);
+-
+- array = DDDMP_ALLOC(int, n);
+- if (array == NULL) {
+- (void) fprintf (stderr, "DddmpIntArrayRead: Error allocating memory\n");
+- fflush (stderr);
+- return NULL;
+- }
+-
+- for (i=0; i < n; i++) {
+- if (fscanf (fp, "%d", &array[i])==EOF) {
+- (void) fprintf (stderr,
+- "DddmpIntArrayRead: Error reading file - EOF found\n");
+- fflush (stderr);
+- DDDMP_FREE (array);
+- return (NULL);
+- }
+- }
+-
+- return (array);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Outputs an array of ints]
+-
+- Description [Outputs an array of ints to a specified file]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-int
+-DddmpIntArrayWrite (
+- FILE *fp /* IN: output file */,
+- int *array /* IN: array of ints */,
+- int n /* IN: size of the array */
+- )
+-{
+- int i;
+-
+- assert(fp!=NULL);
+-
+- for (i=0; i<n; i++) {
+- if (fprintf (fp, " %d", array[i]) == EOF) {
+- (void) fprintf (stderr, "DddmpIntArrayWrite: Error writing to file\n");
+- fflush (stderr);
+- return EOF;
+- }
+- }
+-
+- return (n);
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+diff --git a/Cudd/dddmp/doc/cmdIndex.html b/Cudd/dddmp/doc/cmdIndex.html
+deleted file mode 100644
+index 60eac26..0000000
+--- a/Cudd/dddmp/doc/cmdIndex.html
++++ /dev/null
+@@ -1,9 +0,0 @@
+-<HTML>
+-<HEAD><TITLE>Command Documentation</TITLE></HEAD>
+-<BODY>
+-
+-<H1>Command Documentation</H1><HR><DL>
+-</DL>
+-<HR>
+-Last updated on 1040218 17h15
+-</BODY></HTML>
+diff --git a/Cudd/dddmp/doc/commands.html b/Cudd/dddmp/doc/commands.html
+deleted file mode 100644
+index 2609aaf..0000000
+--- a/Cudd/dddmp/doc/commands.html
++++ /dev/null
+@@ -1,12 +0,0 @@
+-<HTML>
+-<HEAD><TITLE>Command Documentation</TITLE></HEAD>
+-
+-<FRAMESET ROWS="95%,5%">
+- <FRAMESET COLS="40%,60%">
+- <FRAME SRC="cmdIndex.html">
+- <FRAME SRC="credit.html" NAME="MAIN">
+- </FRAMESET>
+- <FRAME SRC="credit.html">
+-</FRAMESET>
+-
+-</HTML>
+diff --git a/Cudd/dddmp/doc/credit.html b/Cudd/dddmp/doc/credit.html
+deleted file mode 100644
+index 868097b..0000000
+--- a/Cudd/dddmp/doc/credit.html
++++ /dev/null
+@@ -1,15 +0,0 @@
+-<HTML>
+-<HEAD><TITLE>Credit</TITLE></HEAD>
+-<BODY>
+-<TABLE BORDER WIDTH="100%">
+- <TR>
+- <TD ALIGN=center> <A HREF="commands.html" TARGET="_top">
+- Command Documentation</A> </TD>
+- <TD ALIGN=center> <A HREF="packages.html" TARGET="_top">
+- Package Documentation</A> </TD>
+- <TD ALIGN=center> Generated by <A HREF="http://www.eecs.berkeley.edu/~sedwards/ext" TARGET="_top">
+- <B>the Ext system</B></A> </TD>
+- </TD>
+-</TABLE>
+-</BODY>
+-</HTML>
+diff --git a/Cudd/dddmp/doc/dddmp-2.0-A4.ps b/Cudd/dddmp/doc/dddmp-2.0-A4.ps
+deleted file mode 100644
+index 7c1010a..0000000
+--- a/Cudd/dddmp/doc/dddmp-2.0-A4.ps
++++ /dev/null
+@@ -1,1261 +0,0 @@
+-%!PS-Adobe-2.0
+-%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
+-%%Title: dddmp-2.0.dvi
+-%%Pages: 10
+-%%PageOrder: Ascend
+-%%BoundingBox: 0 0 596 842
+-%%DocumentFonts: Times-Bold Times-Roman Courier Times-Italic Helvetica
+-%%DocumentPaperSizes: a4
+-%%EndComments
+-%DVIPSWebPage: (www.radicaleye.com)
+-%DVIPSCommandLine: dvips -t a4 -f dddmp-2.0
+-%DVIPSParameters: dpi=600, compressed
+-%DVIPSSource: TeX output 2002.12.11:0557
+-%%BeginProcSet: texc.pro
+-%!
+-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+-1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
+-1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
+-0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
+-sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
+-rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
+-gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
+-/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
+-/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
+-A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
+-get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
+-ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
+-fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
+-{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
+-chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
+-1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
+-forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+-(LaserWriter 16/600)]{A length product length le{A length product exch 0
+-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+-
+-%%EndProcSet
+-%%BeginProcSet: 8r.enc
+-% @@psencodingfile@{
+-% author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry",
+-% version = "0.6",
+-% date = "22 June 1996",
+-% filename = "8r.enc",
+-% email = "kb@@mail.tug.org",
+-% address = "135 Center Hill Rd. // Plymouth, MA 02360",
+-% codetable = "ISO/ASCII",
+-% checksum = "119 662 4424",
+-% docstring = "Encoding for TrueType or Type 1 fonts to be used with TeX."
+-% @}
+-%
+-% Idea is to have all the characters normally included in Type 1 fonts
+-% available for typesetting. This is effectively the characters in Adobe
+-% Standard Encoding + ISO Latin 1 + extra characters from Lucida.
+-%
+-% Character code assignments were made as follows:
+-%
+-% (1) the Windows ANSI characters are almost all in their Windows ANSI
+-% positions, because some Windows users cannot easily reencode the
+-% fonts, and it makes no difference on other systems. The only Windows
+-% ANSI characters not available are those that make no sense for
+-% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
+-% (173). quotesingle and grave are moved just because it's such an
+-% irritation not having them in TeX positions.
+-%
+-% (2) Remaining characters are assigned arbitrarily to the lower part
+-% of the range, avoiding 0, 10 and 13 in case we meet dumb software.
+-%
+-% (3) Y&Y Lucida Bright includes some extra text characters; in the
+-% hopes that other PostScript fonts, perhaps created for public
+-% consumption, will include them, they are included starting at 0x12.
+-%
+-% (4) Remaining positions left undefined are for use in (hopefully)
+-% upward-compatible revisions, if someday more characters are generally
+-% available.
+-%
+-% (5) hyphen appears twice for compatibility with both ASCII and Windows.
+-%
+-/TeXBase1Encoding [
+-% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
+- /.notdef /dotaccent /fi /fl
+- /fraction /hungarumlaut /Lslash /lslash
+- /ogonek /ring /.notdef
+- /breve /minus /.notdef
+-% These are the only two remaining unencoded characters, so may as
+-% well include them.
+- /Zcaron /zcaron
+-% 0x10
+- /caron /dotlessi
+-% (unusual TeX characters available in, e.g., Lucida Bright)
+- /dotlessj /ff /ffi /ffl
+- /.notdef /.notdef /.notdef /.notdef
+- /.notdef /.notdef /.notdef /.notdef
+- % very contentious; it's so painful not having quoteleft and quoteright
+- % at 96 and 145 that we move the things normally found there down to here.
+- /grave /quotesingle
+-% 0x20 (ASCII begins)
+- /space /exclam /quotedbl /numbersign
+- /dollar /percent /ampersand /quoteright
+- /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+-% 0x30
+- /zero /one /two /three /four /five /six /seven
+- /eight /nine /colon /semicolon /less /equal /greater /question
+-% 0x40
+- /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+-% 0x50
+- /P /Q /R /S /T /U /V /W
+- /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+-% 0x60
+- /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+-% 0x70
+- /p /q /r /s /t /u /v /w
+- /x /y /z /braceleft /bar /braceright /asciitilde
+- /.notdef % rubout; ASCII ends
+-% 0x80
+- /.notdef /.notdef /quotesinglbase /florin
+- /quotedblbase /ellipsis /dagger /daggerdbl
+- /circumflex /perthousand /Scaron /guilsinglleft
+- /OE /.notdef /.notdef /.notdef
+-% 0x90
+- /.notdef /.notdef /.notdef /quotedblleft
+- /quotedblright /bullet /endash /emdash
+- /tilde /trademark /scaron /guilsinglright
+- /oe /.notdef /.notdef /Ydieresis
+-% 0xA0
+- /.notdef % nobreakspace
+- /exclamdown /cent /sterling
+- /currency /yen /brokenbar /section
+- /dieresis /copyright /ordfeminine /guillemotleft
+- /logicalnot
+- /hyphen % Y&Y (also at 45); Windows' softhyphen
+- /registered
+- /macron
+-% 0xD0
+- /degree /plusminus /twosuperior /threesuperior
+- /acute /mu /paragraph /periodcentered
+- /cedilla /onesuperior /ordmasculine /guillemotright
+- /onequarter /onehalf /threequarters /questiondown
+-% 0xC0
+- /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+- /Egrave /Eacute /Ecircumflex /Edieresis
+- /Igrave /Iacute /Icircumflex /Idieresis
+-% 0xD0
+- /Eth /Ntilde /Ograve /Oacute
+- /Ocircumflex /Otilde /Odieresis /multiply
+- /Oslash /Ugrave /Uacute /Ucircumflex
+- /Udieresis /Yacute /Thorn /germandbls
+-% 0xE0
+- /agrave /aacute /acircumflex /atilde
+- /adieresis /aring /ae /ccedilla
+- /egrave /eacute /ecircumflex /edieresis
+- /igrave /iacute /icircumflex /idieresis
+-% 0xF0
+- /eth /ntilde /ograve /oacute
+- /ocircumflex /otilde /odieresis /divide
+- /oslash /ugrave /uacute /ucircumflex
+- /udieresis /yacute /thorn /ydieresis
+-] def
+-
+-%%EndProcSet
+-%%BeginProcSet: texps.pro
+-%!
+-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
+-exch def dict begin Encoding{exch dup type/integertype ne{pop pop 1 sub
+-dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
+-ifelse}forall Metrics/Metrics currentdict end def[2 index currentdict
+-end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{
+-dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1
+-roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def
+-dup[exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}
+-if}forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}
+-def end
+-
+-%%EndProcSet
+-%%BeginProcSet: special.pro
+-%!
+-TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+-/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+-/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+-/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+-/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+-X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+-/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+-/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+-{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+-maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+-/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+-atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+-itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+-transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+-curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+-pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+-if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+--1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+-get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+-yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+-neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+-noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+-90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+-neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+-1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+-2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+--1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+-TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+-Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+-}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+-save N userdict maxlength dict begin/magscale true def normalscale
+-currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+-/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+-psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+-psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+-TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
+-psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+-roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+-moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
+-begin/SpecialSave save N gsave normalscale currentpoint TR
+- at SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
+-CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+-closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+-sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+-}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+-CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+-lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
+-/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
+-repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
+-/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
+-currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
+-moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
+-/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
+-1 startangle endangle arc savematrix setmatrix}N end
+-
+-%%EndProcSet
+-TeXDict begin 39158280 55380996 1000 600 600 (dddmp-2.0.dvi)
+- at start /Fa 143[55 1[55 7[28 2[50 99[{TeXBase1Encoding ReEncodeFont}4
+-99.6264 /Helvetica rf
+-%DVIPSBitmapFont: Fb cmr12 12 3
+-/Fb 3 53 df<14FF010713E090381F81F890383E007C01FC133F4848EB1F8049130F4848
+-EB07C04848EB03E0A2000F15F0491301001F15F8A2003F15FCA390C8FC4815FEA54815FF
+-B3A46C15FEA56D1301003F15FCA3001F15F8A26C6CEB03F0A36C6CEB07E0000315C06D13
+-0F6C6CEB1F806C6CEB3F00013E137C90381F81F8903807FFE0010090C7FC28447CC131>
+-48 D<143014F013011303131F13FFB5FC13E713071200B3B3B0497E497E007FB6FCA320
+-4278C131>I<ED0380A21507150FA2151F153FA2157F15FFA25CEC03BF153F1407140614
+-0C141C141814301470146014C013011480EB03005B13065B131C13185B1370136013E048
+-5A5B120390C7FC1206120E120C5A123812305A12E0B812C0A3C8383F8000ADEDFFE0027F
+-EBFFC0A32A437DC231>52 D E
+-%EndDVIPSBitmapFont
+-/Fc 64[50 29[39 12[55 55 25[44 44 66 44 50 28 39 39 1[50
+-50 50 72 28 44 1[28 50 50 28 44 50 44 50 50 10[61 2[50
+-4[66 83 55 2[33 2[61 1[72 66 61 61 15[50 2[25 33 25 2[33
+-33 37[50 2[{TeXBase1Encoding ReEncodeFont}45 99.6264
+-/Times-Italic rf
+-%DVIPSBitmapFont: Fd cmmi12 12 3
+-/Fd 3 103 df<F001C0F007E0181FF07FC0943801FF00EF07FCEF1FF0EF7FC04C48C7FC
+-EE0FFCEE3FF0EEFFC0030390C8FCED0FF8ED3FE0EDFF80DA03FEC9FCEC1FF8EC7FE09038
+-01FF80D907FECAFCEB1FF0EB7FC04848CBFCEA07FCEA1FF0EA7FC048CCFCA2EA7FC0EA1F
+-F0EA07FCEA01FF38007FC0EB1FF0EB07FE903801FF809038007FE0EC1FF8EC03FE913800
+-FF80ED3FE0ED0FF8ED03FF030013C0EE3FF0EE0FFCEE01FF9338007FC0EF1FF0EF07FCEF
+-01FF9438007FC0F01FE01807F001C03B3878B44C>60 D<127012FCB4FCEA7FC0EA1FF0EA
+-07FCEA01FF38007FC0EB1FF0EB07FE903801FF809038007FE0EC1FF8EC03FE913800FF80
+-ED3FE0ED0FF8ED03FF030013C0EE3FF0EE0FFCEE01FF9338007FC0EF1FF0EF07FCEF01FF
+-9438007FC0F01FE0A2F07FC0943801FF00EF07FCEF1FF0EF7FC04C48C7FCEE0FFCEE3FF0
+-EEFFC0030390C8FCED0FF8ED3FE0EDFF80DA03FEC9FCEC1FF8EC7FE0903801FF80D907FE
+-CAFCEB1FF0EB7FC04848CBFCEA07FCEA1FF0EA7FC048CCFC12FC12703B3878B44C>62
+-D<EE07E0EE1FF8EE7C1CEEF80E923801F03E923803E07F17FFED07E116C117FE92380FC0
+-FC177817004B5AA4153F93C7FCA45D157EA491B61280A3DA00FCC7FCA314015DA414035D
+-A414075DA4140F5DA5141F5DA4143F92C8FCA45C147EA45CA45C1301A25CA2EA1C03007F
+-5B12FF5C13075C4848C9FC12F8EA601EEA783CEA1FF0EA07C0305A7BC530>102
+-D E
+-%EndDVIPSBitmapFont
+-/Fe 134[42 2[42 42 23 32 28 1[42 42 42 65 23 2[23 42
+-42 28 37 42 1[42 37 12[51 10[28 4[60 1[55 19[21 28 21
+-44[{TeXBase1Encoding ReEncodeFont}26 83.022 /Times-Roman
+-rf
+-%DVIPSBitmapFont: Ff cmr7 7 2
+-/Ff 2 51 df<13381378EA01F8121F12FE12E01200B3AB487EB512F8A215267BA521>49
+-D<13FF000313E0380E03F0381800F848137C48137E00787F12FC6CEB1F80A4127CC7FC15
+-005C143E147E147C5C495A495A5C495A010EC7FC5B5B903870018013E0EA018039030003
+-0012065A001FB5FC5A485BB5FCA219267DA521>I E
+-%EndDVIPSBitmapFont
+-/Fg 103[60 26[60 1[60 60 60 60 60 60 60 60 60 60 60 60
+-60 60 60 60 2[60 60 60 60 60 60 60 60 60 3[60 1[60 3[60
+-60 1[60 60 1[60 60 1[60 60 3[60 1[60 1[60 60 60 1[60
+-60 1[60 1[60 1[60 60 60 60 60 60 60 60 60 60 60 60 60
+-60 60 5[60 38[{TeXBase1Encoding ReEncodeFont}62 99.6264
+-/Courier rf
+-%DVIPSBitmapFont: Fh cmr8 8 2
+-/Fh 2 51 df<130C133C137CEA03FC12FFEAFC7C1200B3B113FE387FFFFEA2172C7AAB23
+->49 D<EB7F803801FFF0380780FC380E003F48EB1F8048EB0FC05A0060EB07E012F000FC
+-14F07E1403A3007C1307C7FCA215E0140F15C0141F1580EC3F00147E147C5C495A495A49
+-5A495A011EC7FC5B5B4913305B485A4848136048C7FC000E14E0001FB5FC5A4814C0B6FC
+-A21C2C7DAB23>I E
+-%EndDVIPSBitmapFont
+-/Fi 105[50 28[50 50 2[55 33 39 44 1[55 50 55 83 28 2[28
+-1[50 33 44 55 44 55 50 10[72 1[66 55 3[78 72 94 66 3[78
+-1[61 66 72 72 66 72 13[50 50 50 1[28 25 33 45[{
+-TeXBase1Encoding ReEncodeFont}40 99.6264 /Times-Bold
+-rf /Fj 139[40 1[53 1[66 60 66 100 33 2[33 3[53 3[60 23[47
+-2[73 18[60 60 60 2[30 46[{TeXBase1Encoding ReEncodeFont}16
+-119.552 /Times-Bold rf
+-%DVIPSBitmapFont: Fk cmsy10 12 1
+-/Fk 1 16 df<49B4FC010F13E0013F13F8497F48B6FC4815804815C04815E04815F0A248
+-15F8A24815FCA3B712FEA96C15FCA36C15F8A26C15F0A26C15E06C15C06C15806C15006C
+-6C13FC6D5B010F13E0010190C7FC27277BAB32>15 D E
+-%EndDVIPSBitmapFont
+-/Fl 64[44 42[44 44 24[44 50 50 72 50 50 28 39 33 50 50
+-50 50 78 28 50 28 28 50 50 33 44 50 44 50 44 6[61 1[72
+-94 72 72 61 55 66 72 55 72 72 89 61 1[39 33 72 72 55
+-61 72 66 66 72 3[56 1[28 28 50 50 50 50 50 50 50 50 50
+-50 28 25 33 25 2[33 33 36[55 55 2[{TeXBase1Encoding ReEncodeFont}74
+-99.6264 /Times-Roman rf
+-%DVIPSBitmapFont: Fm cmsy10 14.4 2
+-/Fm 2 104 df<EE1FE0ED01FF150F92383FF800EDFFC04A90C7FC4A5A4A5A4A5A4A5A5D
+-A2143F5DB3B1147F5D14FF92C8FC5B495A495A495AEB3FE0EBFF80D87FFEC9FCEAFFF8A2
+-EA7FFEC66C7EEB3FE0EB0FF86D7E6D7E6D7E7F81147F81143FB3B181141FA2816E7E6E7E
+-6E7E6E7E6E13C0ED3FF892380FFFE01501ED001F2B7878D93C>102
+-D<B4FC13F813FF000313C038007FF0EB1FF8EB07FC6D7E6D7E6D7F147FA281143FB3B181
+-141F81140F816E7E6E7E6E7E6E6C7EED3FF092380FFFC0030113E0A2030F13C092383FF0
+-00ED7F804A48C7FC4A5A4A5A4A5A5D141F5D143F5DB3B1147F5DA214FF4990C8FC495A49
+-5AEB1FF8EB7FF03803FFC0B5C9FC13F890CAFC2B7878D93C>I E
+-%EndDVIPSBitmapFont
+-/Fn 105[60 27[53 4[60 33 47 40 60 60 60 60 93 33 2[33
+-1[60 40 53 60 53 60 53 7[86 4[73 66 1[86 66 3[73 2[40
+-1[86 1[73 86 80 1[86 110 5[33 60 4[60 1[60 60 60 1[30
+-40 30 44[{TeXBase1Encoding ReEncodeFont}42 119.552 /Times-Roman
+-rf /Fo 136[104 1[80 48 56 64 1[80 72 80 120 40 80 1[40
+-1[72 1[64 80 64 80 72 12[96 80 104 1[88 1[104 135 3[56
+-2[88 1[104 104 96 104 6[48 1[72 72 72 72 72 72 72 72
+-72 1[36 46[{TeXBase1Encoding ReEncodeFont}41 143.462
+-/Times-Bold rf end
+-%%EndProlog
+-%%BeginSetup
+-%%Feature: *Resolution 600dpi
+-TeXDict begin
+-%%BeginPaperSize: a4
+-a4
+-%%EndPaperSize
+-
+-%%EndSetup
+-%%Page: 1 1
+-1 0 bop 472 600 a Fo(DDDMP:)35 b(Decision)f(Diagram)f(DuMP)j(package)
+-1480 830 y(Release)e(2.0)462 1230 y Fn(Gianpiero)c(Cabodi)2402
+-1232 y(Stef)o(ano)g(Quer)1316 1506 y(Politecnico)g(di)g(T)-10
+-b(orino)1024 1656 y(Dip.)30 b(di)g(Automatica)g(e)g(Informatica)1119
+-1805 y(Corso)f(Duca)h(de)n(gli)g(Abruzzi)g(24)1277 1955
+-y(I\22610129)e(T)-5 b(urin,)29 b(IT)-11 b(AL)f(Y)1038
+-2104 y(E-mail:)38 b Fm(f)p Fn(cabodi,quer)p Fm(g)p Fn(@polito.it)-189
+-2614 y Fo(1)143 b(Intr)m(oduction)-189 2837 y Fl(The)27
+-b(DDDMP)h(package)f(de\002nes)h(formats)f(and)g(rules)g(to)g(store)g
+-(DD)g(on)g(\002le.)39 b(More)27 b(in)g(particular)g(it)g(contains)g(a)
+--189 2958 y(set)e(of)g(functions)e(to)i(dump)e(\(store)i(and)g(load\))g
+-(DDs)f(and)h(DD)g(forests)f(on)h(\002le)g(in)f(dif)n(ferent)h(formats.)
+-47 3078 y(In)30 b(the)g(present)g(implementation,)f(BDDs)h(\(R)l
+-(OBDDs\))h(and)f(ADD)g(\(Algebraic)g(Decision)g(Diagram\))g(of)-189
+-3199 y(the)g(CUDD)g(package)g(\(v)o(ersion)f(2.3.0)g(or)h(higher\))g
+-(are)g(supported.)45 b(These)30 b(structures)f(can)h(be)g(represented)g
+-(on)-189 3319 y(\002les)25 b(either)g(in)f(te)o(xt,)g(binary)-6
+-b(,)24 b(or)h(CNF)g(\(DIMA)l(CS\))h(formats.)47 3439
+-y(The)f(main)f(rules)h(used)f(are)i(follo)n(wing)d(rules:)-44
+-3643 y Fk(\017)49 b Fl(A)30 b(\002le)h(contains)e(a)i(single)e(BDD/ADD)
+-h(or)g(a)h(forest)f(of)g(BDDs/ADD,)g(i.e.,)i(a)e(v)o(ector)g(of)g
+-(Boolean)h(func-)55 3763 y(tions.)-44 3966 y Fk(\017)49
+-b Fl(Inte)o(ger)21 b(inde)o(x)o(es)f(are)i(used)f(instead)g(of)g
+-(pointers)g(to)g(reference)i(nodes.)29 b(BDD/ADD)21 b(nodes)g(are)h
+-(numbered)55 4087 y(with)j(contiguous)g(numbers,)g(from)h(1)g(to)f
+-(NNodes)h(\(total)f(number)h(of)g(nodes)g(on)f(a)i(\002le\).)35
+-b(0)26 b(is)f(not)h(used)f(to)55 4207 y(allo)n(w)f(ne)o(gati)n(v)o(e)e
+-(inde)o(x)o(es)h(for)i(complemented)f(edges.)-44 4411
+-y Fk(\017)49 b Fl(A)23 b(\002le)g(contains)f(a)h(header)l(,)h
+-(including)d(se)n(v)o(eral)h(informations)f(about)h(v)n(ariables)h(and)
+-f(roots)g(of)h(BDD)h(func-)55 4531 y(tions,)32 b(then)e(the)h(list)g
+-(of)g(nodes.)49 b(The)32 b(header)f(is)g(al)o(w)o(ays)g(represented)h
+-(in)f(te)o(xt)f(format)h(\(also)g(for)g(binary)55 4651
+-y(\002les\).)g(BDDs,)25 b(ADDs,)f(and)h(CNF)h(\002les)f(share)g(a)g
+-(similar)f(format)g(header)-5 b(.)-44 4855 y Fk(\017)49
+-b Fl(BDD/ADD)40 b(nodes)g(are)h(listed)f(follo)n(wing)e(their)i
+-(numbering,)j(which)d(is)g(produced)g(by)h(a)f(post-order)55
+-4975 y(tra)n(v)o(ersal,)24 b(in)h(such)f(a)h(w)o(ay)g(that)g(a)g(node)f
+-(is)h(al)o(w)o(ays)f(listed)g(after)h(its)f(Then/Else)g(children.)47
+-5179 y(In)32 b(the)f(sequel)g(we)g(describe)h(more)f(in)g(detail)f(the)
+-h(dif)n(ferent)g(formats)g(and)g(procedures)h(a)n(v)n(ailable.)49
+-b(First)-189 5299 y(of)26 b(all,)f(we)h(describe)f(BDDs)h(and)g(ADDs)f
+-(formats)g(and)g(procedure.)33 b(Secondly)-6 b(,)26 b(we)f(concentrate)
+-h(on)f(CNF)i(\002les,)-189 5419 y(i.e.,)e(ho)n(w)f(to)g(translate)g(a)i
+-(BDD)f(or)g(a)g(forest)g(of)f(BDDs)h(into)f(a)h(CNF)h(formula)e(and)h
+-(vice-v)o(ersa.)1794 5800 y(1)p eop
+-%%Page: 2 2
+-2 1 bop -189 218 a Fo(2)143 b(BDD)35 b(and)g(ADD)g(Support)-189
+-441 y Fl(In)23 b(this)f(section)g(we)g(describe)h(format)g(and)f
+-(procedure)h(re)o(garding)f(BDDs)h(and)f(ADDs.)30 b(W)-8
+-b(e)23 b(speci\002cally)g(refer)g(to)-189 562 y(BDDs)h(in)g(the)g
+-(description)e(as)j(ADD)e(may)h(be)g(seen)g(as)h(an)f(e)o(xtension)e
+-(and)i(will)f(be)h(described)g(later)-5 b(.)30 b(First)24
+-b(of)g(all,)-189 682 y(we)29 b(concentrate)f(on)g(the)g(format)g(used)g
+-(to)g(store)g(these)g(structure,)h(then)f(we)g(describe)h(the)f
+-(procedure)h(a)n(v)n(ailable)-189 802 y(to)24 b(store)h(and)g(load)f
+-(them.)-189 1094 y Fj(2.1)119 b(F)m(ormat)-189 1281 y
+-Fl(BDD)30 b(dump)f(\002les)g(are)i(composed)e(of)g(tw)o(o)g(sections:)
+-40 b(The)29 b(header)h(and)g(the)f(list)g(of)h(nodes.)44
+-b(The)30 b(header)g(has)g(a)-189 1402 y(common)c(\(te)o(xt\))h(format,)
+-h(while)e(the)i(list)e(of)h(nodes)g(is)g(either)g(in)g(te)o(xt)g(or)g
+-(binary)g(format.)38 b(In)28 b(te)o(xt)e(format)h(nodes)-189
+-1522 y(are)33 b(represented)f(with)f(redundant)g(informations,)h(where)
+-h(the)f(main)f(goal)g(is)h(readability)-6 b(,)32 b(while)g(the)f
+-(purpose)-189 1642 y(of)i(binary)f(format)g(is)g(minimizing)e(the)i(o)o
+-(v)o(erall)f(storage)h(size)h(for)g(BDD)f(nodes.)54 b(The)32
+-b(header)h(format)f(is)g(k)o(ept)-189 1763 y(common)h(to)h(te)o(xt)g
+-(and)g(binary)g(formats)g(for)h(sak)o(e)f(of)h(simplicity:)47
+-b(No)34 b(particular)g(optimization)f(is)h(presently)-189
+-1883 y(done)29 b(on)f(binary)h(\002le)g(headers,)h(whose)f(size)g(is)f
+-(by)h(f)o(ar)g(dominated)f(by)h(node)f(lists)g(in)g(the)h(case)g(of)g
+-(lar)n(ge)h(BDDs)-189 2003 y(\(se)n(v)o(eral)24 b(thousands)g(of)h(DD)f
+-(nodes\).)-189 2266 y Fi(2.1.1)99 b(Header)-189 2453
+-y Fl(The)23 b(header)h(has)f(the)g(same)g(format)g(both)g(for)g(te)o
+-(xtual)f(and)i(binary)e(dump.)30 b(F)o(or)23 b(sak)o(e)g(of)h
+-(generality)e(and)h(because)-189 2574 y(of)f(dynamic)g(v)n(ariable)g
+-(ordering)g(both)f(v)n(ariable)h(IDs)g(and)g(permutations)2377
+-2537 y Fh(1)2438 2574 y Fl(are)h(included.)29 b(Names)22
+-b(are)h(optionally)-189 2694 y(listed)35 b(for)h(input)f(v)n(ariables)g
+-(and)h(for)h(the)e(stored)h(functions.)63 b(Ne)n(w)36
+-b(auxiliary)f(IDs)h(are)h(also)e(allo)n(wed.)64 b(Only)-189
+-2814 y(the)34 b(v)n(ariables)f(in)g(the)h(true)g(support)f(of)h(the)f
+-(stored)h(BDDs)g(are)h(listed.)56 b(All)34 b(information)e(on)i(v)n
+-(ariables)f(\(IDs,)-189 2935 y(permutations,)c(names,)i(auxiliary)e
+-(IDs\))h(sorted)g(by)g(IDs,)h(and)e(the)o(y)h(are)g(restricted)g(to)f
+-(the)h(true)g(support)f(of)h(the)-189 3055 y(dumped)22
+-b(BDD,)h(while)g(IDs)g(and)f(permutations)g(are)h(referred)i(to)d(the)h
+-(writing)f(BDD)h(manager)-5 b(.)30 b(Names)22 b(can)i(thus)-189
+-3175 y(be)h(sorted)f(by)h(v)n(ariable)f(ordering)h(by)f(permuting)g
+-(them)g(according)h(to)f(the)h(permutations)e(stored)h(in)h(the)f
+-(\002le.)47 3296 y(As)h(an)g(e)o(xample,)f(the)g(header)i(\(in)e(te)o
+-(xt)g(mode\))h(of)f(the)h(ne)o(xt)f(state)h(functions)e(of)i(circuit)g
+-(s27)f(follo)n(ws:)-189 3494 y Fg(.ver)59 b(DDDMP-2.0)-189
+-3615 y(.mode)g(A)-189 3735 y(.varinfo)f(3)-189 3855 y(.dd)h(s27-delta)
+--189 3976 y(.nnodes)f(16)-189 4096 y(.nvars)g(10)-189
+-4216 y(.nsuppvars)g(7)-189 4337 y(.varnames)g(G0)h(G1)g(G2)h(G3)f(G5)g
+-(G6)h(G7)-189 4457 y(.orderedvarnames)c(G0)k(G1)f(G2)g(G3)h(G5)f(G6)g
+-(G7)-189 4578 y(.ids)g(0)g(1)h(2)g(3)f(4)h(5)f(6)-189
+-4698 y(.permids)f(0)i(1)f(2)h(3)f(5)h(7)f(9)-189 4818
+-y(.auxids)f(1)i(2)f(3)h(4)f(5)h(6)g(7)-189 4939 y(.nroots)e(3)-189
+-5059 y(.rootids)g(6)i(-13)f(-16)-189 5179 y(.rootnames)f(G10)h(G11)g
+-(G13)47 5378 y Fl(The)25 b(lines)f(contain)g(the)h(follo)n(wing)e
+-(informations:)p -189 5460 1607 4 v -77 5521 a Ff(1)-40
+-5551 y Fe(The)d(permutation)e(of)i(the)g(i-th)h(v)n(ariable)e(ID)h(is)h
+-(the)f(relati)n(v)o(e)g(position)f(of)h(the)g(v)n(ariable)f(in)i(the)f
+-(ordering.)1794 5800 y Fl(2)p eop
+-%%Page: 3 3
+-3 2 bop -44 218 a Fk(\017)49 b Fl(Dddmp)24 b(v)o(ersion)f(information.)
+--44 411 y Fk(\017)49 b Fl(File)25 b(mode)f(\(A)h(for)g(ASCII)h(te)o
+-(xt,)e(B)h(for)g(binary)g(mode\).)-44 604 y Fk(\017)49
+-b Fl(V)-11 b(ar)n(-e)o(xtra-info)25 b(\(0:)30 b(v)n(ariable)24
+-b(ID,)h(1:)31 b(permID,)24 b(2:)31 b(aux)25 b(ID,)g(3:)30
+-b(v)n(ariable)24 b(name,)h(4)g(no)f(e)o(xtra)h(info\).)-44
+-797 y Fk(\017)49 b Fl(Name)25 b(of)g(dd)f(\(optional\).)-44
+-990 y Fk(\017)49 b Fl(T)-8 b(otal)24 b(number)g(of)h(nodes)g(in)f(the)h
+-(\002le.)-44 1183 y Fk(\017)49 b Fl(Number)24 b(of)h(v)n(ariables)f(of)
+-h(the)g(writing)f(DD)g(manager)-5 b(.)-44 1375 y Fk(\017)49
+-b Fl(Number)24 b(of)h(v)n(ariables)f(in)h(the)f(true)h(support)f(of)h
+-(the)f(stored)h(DDs.)-44 1568 y Fk(\017)49 b Fl(V)-11
+-b(ariable)25 b(names)f(\(optional\))g(for)h(all)g(the)f(v)n(ariables)g
+-(in)h(the)f(BDD/ADD)h(support.)-44 1761 y Fk(\017)49
+-b Fl(V)-11 b(ariable)20 b(names)g(for)h(all)f(the)g(v)n(ariables)f(in)h
+-(the)g(DD)h(manager)f(during)g(the)g(storing)f(phase.)29
+-b(Notice)20 b(that)g(this)55 1882 y(information)k(w)o(as)h(not)g
+-(stored)g(by)g(pre)n(vious)f(v)o(ersions)g(of)i(the)f(same)g(tool.)32
+-b(Full)25 b(backw)o(ard)g(compatibility)55 2002 y(is)f(guaranteed)h(by)
+-g(the)f(present)h(implementation)d(of)j(the)g(tool.)-44
+-2195 y Fk(\017)49 b Fl(V)-11 b(ariable)25 b(IDs.)-44
+-2388 y Fk(\017)49 b Fl(V)-11 b(ariable)25 b(permuted)f(IDs.)-44
+-2581 y Fk(\017)49 b Fl(V)-11 b(ariable)25 b(auxiliary)f(IDs)h
+-(\(optional\).)-44 2774 y Fk(\017)49 b Fl(Number)24 b(of)h(BDD)g
+-(roots.)-44 2967 y Fk(\017)49 b Fl(Inde)o(x)o(es)24 b(of)h(BDD)g(roots)
+-f(\(complemented)g(edges)g(allo)n(wed\).)-44 3160 y Fk(\017)49
+-b Fl(Names)24 b(of)h(BDD)h(roots)e(\(optional\).)-189
+-3332 y(Notice)h(that)f(a)h(\002eld)-189 3504 y Fg(.add)-189
+-3676 y Fl(is)f(present)h(after)g(the)g(dddmp)f(v)o(ersion)f(for)j
+-(\002les)e(containing)g(ADDs.)-189 3936 y Fi(2.1.2)99
+-b(T)-9 b(ext)25 b(F)n(ormat)-189 4124 y Fl(In)g(te)o(xt)f(mode)g(nodes)
+-g(are)i(listed)e(on)g(a)h(te)o(xt)f(line)h(basis.)30
+-b(Each)25 b(a)g(node)f(is)h(represented)g(as)-189 4296
+-y Fg(<Node-index>)57 b([<Var-extra-info>])f(<Var-internal-index>)588
+-4416 y(<Then-index>)h(<Else-index>)-189 4588 y Fl(where)25
+-b(all)g(inde)o(x)o(es)e(are)j(inte)o(ger)e(numbers.)47
+-4709 y(This)h(format)g(is)g(redundant)f(\(due)i(to)f(the)g(node)g
+-(ordering,)g Fd(<)p Fl(Node-inde)o(x)p Fd(>)f Fl(is)g(and)i
+-(incremental)e(inte)o(ger\))-189 4829 y(b)n(ut)g(we)h(k)o(eep)g(it)g
+-(for)g(readability)-6 b(.)47 4949 y Fd(<)p Fl(V)-11 b(ar)n(-e)o
+-(xtra-info)p Fd(>)34 b Fl(\(optional)e(redundant)i(\002eld\))g(is)f
+-(either)h(an)g(inte)o(ger)f(\(ID,)h(PermID,)g(or)g(auxID\))g(or)g(a)
+--189 5070 y(string)k(\(v)n(ariable)h(name\).)75 b Fd(<)p
+-Fl(V)-11 b(ar)n(-internal-inde)o(x)p Fd(>)38 b Fl(is)h(an)g(internal)g
+-(v)n(ariable)g(inde)o(x:)59 b(V)-11 b(ariables)39 b(in)g(the)g(true)
+--189 5190 y(support)25 b(of)h(the)g(stored)g(BDDs)g(are)h(numbered)e
+-(with)g(ascending)h(inte)o(gers)f(starting)g(from)h(0,)g(and)g(follo)n
+-(wing)e(the)-189 5311 y(v)n(ariable)g(ordering.)31 b
+-Fd(<)p Fl(Then-inde)o(x)p Fd(>)23 b Fl(and)i Fd(<)p Fl(Else-inde)o(x)p
+-Fd(>)e Fl(are)j(signed)e(inde)o(x)o(es)f(of)i(children)f(nodes.)47
+-5431 y(In)h(the)f(follo)n(wing,)f(we)i(report)f(the)g(list)g(of)h
+-(nodes)f(of)g(the)h(s27)f(ne)o(xt)f(state)i(functions)e(\(see)i(pre)n
+-(vious)e(header)-189 5551 y(e)o(xample\):)1794 5800 y(3)p
+-eop
+-%%Page: 4 4
+-4 3 bop -189 218 a Fg(.nodes)-189 338 y(1)60 b(T)f(1)h(0)f(0)-189
+-459 y(2)h(G7)f(6)g(1)h(-1)-189 579 y(3)g(G5)f(4)g(1)h(2)-189
+-699 y(4)g(G3)f(3)g(3)h(1)-189 820 y(5)g(G1)f(1)g(1)h(4)-189
+-940 y(6)g(G0)f(0)g(5)h(-1)-189 1061 y(7)g(G6)f(5)g(1)h(-1)-189
+-1181 y(8)g(G5)f(4)g(1)h(-7)-189 1301 y(9)g(G6)f(5)g(1)h(-2)-189
+-1422 y(10)f(G5)h(4)f(1)h(-9)-189 1542 y(11)f(G3)h(3)f(10)h(8)-189
+-1662 y(12)f(G1)h(1)f(8)h(11)-189 1783 y(13)f(G0)h(0)f(5)h(12)-189
+-1903 y(14)f(G2)h(2)f(1)h(-1)-189 2024 y(15)f(G2)h(2)f(1)h(-2)-189
+-2144 y(16)f(G1)h(1)f(14)h(15)-189 2264 y(.end)-189 2468
+-y Fl(The)27 b(list)f(is)h(enclosed)g(between)g(the)g
+-Fg(.nodes)f Fl(and)h Fg(.end)f Fl(lines.)37 b(First)27
+-b(node)g(is)g(the)g(one)g(constant,)f(each)i(node)-189
+-2588 y(contains)c(the)h(optional)e(v)n(ariable)h(name.)47
+-2708 y(F)o(or)29 b(ADDs)f(more)h(than)f(one)h(constant)e(is)i(stored)f
+-(in)g(the)g(\002le.)43 b(Each)29 b(constant)f(has)g(the)h(same)f
+-(format)h(we)-189 2829 y(ha)n(v)o(e)c(just)e(analyzed)i(for)g(the)g
+-(BDD)g(b)n(ut)g(the)f(represented)h(v)n(alue)f(is)h(stored)f(as)h(a)g
+-(\003oat)g(number)-5 b(.)-189 3095 y Fi(2.1.3)99 b(Binary)25
+-b(F)n(ormat)-189 3283 y Fl(The)h(binary)g(format)f(is)h(not)f(allo)n
+-(wed)g(for)i(ADDs.)33 b(As)26 b(a)h(consequence)f(we)g(concentrate)g
+-(only)f(on)h(BDDs)g(in)g(this)-189 3403 y(section.)k(In)25
+-b(binary)f(mode)h(nodes)f(are)i(represented)f(as)g(a)g(sequence)g(of)g
+-(bytes,)f(encoding)g(tuples)-189 3606 y Fg(<Node-code>)-189
+-3727 y([<Var-internal-info>])-189 3847 y([<Then-info>])-189
+-3968 y([<Else-info>])-189 4171 y Fl(in)30 b(an)g(optimized)f(w)o(ay)-6
+-b(.)46 b(Only)29 b(the)h(\002rst)g(byte)g(\(code\))h(is)e(mandatory)-6
+-b(,)30 b(while)g(inte)o(ger)f(inde)o(x)o(es)g(are)i(represented)-189
+-4291 y(in)c(absolute)f(or)h(relati)n(v)o(e)f(mode,)h(where)h(relati)n
+-(v)o(e)e(means)g(of)n(fset)h(with)f(respect)i(to)e(a)i(Then/Else)e
+-(node)h(info.)37 b(The)-189 4412 y(best)23 b(between)g(absolute)f(and)h
+-(relati)n(v)o(e)e(representation)i(is)f(chosen)h(and)g(relati)n(v)o(e)f
+-(1)h(is)f(directly)g(coded)h(in)g Fd(<)p Fl(Node-)-189
+-4532 y(code)p Fd(>)e Fl(without)f(an)o(y)g(e)o(xtra)h(info.)29
+-b(Suppose)21 b(V)-11 b(ar\(NodeId\),)22 b(Then\(NodeId\))f(and)g
+-(Else\(NodeId\))f(represent)i(infos)-189 4652 y(about)i(a)h(gi)n(v)o
+-(en)f(node.)30 b Fd(<)p Fl(Node-code)p Fd(>)25 b Fl(is)f(a)h(byte)g
+-(which)f(contains)g(the)h(follo)n(wing)e(bit)h(\002elds)h(\(MSB)g(to)g
+-(LSB\))-44 4856 y Fk(\017)49 b Fl(Unused)24 b(:)31 b(1)24
+-b(bit)-44 5059 y Fk(\017)49 b Fl(V)-11 b(ariable:)30
+-b(2)25 b(bits,)f(one)h(of)g(the)f(follo)n(wing)f(codes)171
+-5288 y Fi(\226)49 b Fl(DDDMP)p 636 5288 30 4 v 35 w(ABSOLUTE)p
+-1191 5288 V 36 w(ID:)22 b(V)-11 b(ar\(NodeId\))22 b(is)f(represented)h
+-(in)g(absolute)f(form)g(as)h Fd(<)p Fl(V)-11 b(ar)n(-internal-)270
+-5408 y(info)p Fd(>)24 b Fl(=)h(V)-11 b(ar\(NodeId\))25
+-b(follo)n(ws)e(\(absolute)i(info\))1794 5800 y(4)p eop
+-%%Page: 5 5
+-5 4 bop 171 218 a Fi(\226)49 b Fl(DDDMP)p 636 218 30
+-4 v 35 w(RELA)-11 b(TIVE)p 1147 218 V 36 w(ID:)32 b(V)-11
+-b(ar\(NodeId\))32 b(is)g(represented)g(in)f(relati)n(v)o(e)g(form)h(as)
+-g Fd(<)p Fl(V)-11 b(ar)n(-internal-)270 338 y(info\277)24
+-b(=)h(Min\(V)-11 b(ar\(Then\(NodeId\)\),V)g(ar\(Else\(NodeId\)\)\)-V)g
+-(ar\(NodeId\))171 500 y Fi(\226)49 b Fl(DDDMP)p 636 500
+-V 35 w(RELA)-11 b(TIVE)p 1147 500 V 36 w(1:)27 b(the)19
+-b(\002eld)g Fd(<)p Fl(V)-11 b(ar)n(-internal-info)p Fd(>)18
+-b Fl(does)h(not)f(follo)n(w)-6 b(,)18 b(because)h(V)-11
+-b(ar\(NodeId\))270 620 y(=)25 b(Min\(V)-11 b(ar\(Then\(NodeId\)\),V)g
+-(ar\(Else\(NodeId\)\)\)-1)171 782 y Fi(\226)49 b Fl(DDDMP)p
+-636 782 V 35 w(TERMIN)m(AL:)24 b(Node)h(is)f(a)h(terminal,)f(no)g(v)n
+-(ar)h(info)g(required)-44 1011 y Fk(\017)49 b Fl(T)25
+-b(:)f(2)h(bits,)f(with)g(codes)h(similar)e(to)i(V)171
+-1214 y Fi(\226)49 b Fl(DDDMP)p 636 1214 V 35 w(ABSOLUTE)p
+-1191 1214 V 36 w(ID:)20 b Fd(<)p Fl(Then-info)p Fd(>)f
+-Fl(is)h(represented)g(in)g(absolute)f(form)h(as)g Fd(<)p
+-Fl(Then-info)p Fd(>)270 1334 y Fl(=)25 b(Then\(NodeId\))171
+-1496 y Fi(\226)49 b Fl(DDDMP)p 636 1496 V 35 w(RELA)-11
+-b(TIVE)p 1147 1496 V 36 w(ID:)28 b(Then\(NodeId\))f(is)g(represented)h
+-(in)g(relati)n(v)o(e)e(form)i(as)g Fd(<)p Fl(Then-info)p
+-Fd(>)270 1617 y Fl(=)d(Nodeid-Then\(NodeId\))171 1779
+-y Fi(\226)49 b Fl(DDDMP)p 636 1779 V 35 w(RELA)-11 b(TIVE)p
+-1147 1779 V 36 w(1:)30 b(no)25 b Fd(<)p Fl(Then-info)p
+-Fd(>)f Fl(follo)n(ws,)f(because)i(Then\(NodeId\))g(=)g(NodeId-1)171
+-1941 y Fi(\226)49 b Fl(DDDMP)p 636 1941 V 35 w(TERMIN)m(AL:)24
+-b(Then)h(Node)f(is)h(a)g(terminal,)f(no)g(info)h(required)f(\(for)i(R)l
+-(OBDDs\))-44 2144 y Fk(\017)49 b Fl(Ecompl)24 b(:)30
+-b(1)25 b(bit,)f(if)h(1)g(means)f(that)g(the)h(else)g(edge)g(is)f
+-(complemented)-44 2347 y Fk(\017)49 b Fl(E)25 b(:)f(2)h(bits,)f(with)g
+-(codes)h(and)f(meanings)g(as)h(for)g(the)g(Then)f(edge)-189
+-2551 y(DD)35 b(node)f(codes)h(are)h(written)e(as)h(one)g(byte.)60
+-b Fd(<)p Fl(V)-11 b(ar)n(-internal-inde)o(x)p Fd(>)p
+-Fl(,)36 b Fd(<)p Fl(Then-inde)o(x)p Fd(>)p Fl(,)g Fd(<)p
+-Fl(Else-inde)o(x)p Fd(>)e Fl(\(if)-189 2671 y(required\))25
+-b(are)h(represented)f(as)g(unsigned)e(inte)o(ger)h(v)n(alues)g(on)h(a)g
+-(suf)n(\002cient)f(set)h(of)g(bytes)f(\(MSByte)h(\002rst\).)47
+-2792 y(Inte)o(gers)h(of)f(an)o(y)h(length)e(are)j(written)e(as)h
+-(sequences)g(of)g(\224link)o(ed\224)f(bytes)g(\(MSByte)h(\002rst\).)34
+-b(F)o(or)26 b(each)g(byte)-189 2912 y(7)f(bits)f(are)h(used)g(for)g
+-(data)g(and)f(one)h(\(MSBit\))g(as)g(link)f(with)g(a)h(further)g(byte)g
+-(\(MSB)g(=)g(1)g(means)f(one)h(more)g(byte\).)47 3032
+-y(Lo)n(w)f(le)n(v)o(el)g(read/write)h(of)g(bytes)f(\002lters)h
+-Fd(<)p Fl(CR)p Fd(>)p Fl(,)g Fd(<)p Fl(LF)p Fd(>)g Fl(and)g
+-Fd(<)p Fl(ctrl-Z)p Fd(>)f Fl(through)g(escape)h(sequences.)-189
+-3327 y Fj(2.2)119 b(Implementation)-189 3515 y Fl(Store)24
+-b(and)g(load)g(for)g(single)g(Boolean)g(functions)f(and)h(arrays)g(of)g
+-(Boolean)g(functions)f(are)i(implemented.)k(More-)-189
+-3635 y(o)o(v)o(er)l(,)37 b(the)e(current)h(presentation)f(includes)f
+-(functions)h(to)g(retrie)n(v)o(e)g(v)n(ariables)f(names,)k(auxiliary)d
+-(identi\002erss,)-189 3756 y(and)c(all)g(the)g(information)f(contained)
+-h(in)f(the)h(header)h(of)f(the)h(\002les.)50 b(This)30
+-b(information)g(can)h(be)h(used)f(as)g(a)g(pre-)-189
+-3876 y(processing)19 b(step)g(for)i(load)e(operations.)28
+-b(These)20 b(functions)f(allo)n(w)f(to)i(o)o(v)o(ercome)f(fe)n(w)g
+-(limitations)f(of)h(the)h(pre)n(vious)-189 3997 y(implementations.)-189
+-4263 y Fi(2.2.1)99 b(Storing)25 b(Decision)g(Diagrams)-189
+-4450 y Fc(Dddmp)p 111 4450 V 35 w(cuddBddStor)l(e)f Fl(and)h
+-Fc(Dddmp)p 1195 4450 V 35 w(cuddBddArr)o(ayStor)l(e)e
+-Fl(are)j(the)f(tw)o(o)f(store)h(functions,)f(used)h(to)g(store)f(sin-)
+--189 4571 y(gle)f(BDD)h(or)g(a)f(forest)h(of)f(BDDs,)h(respecti)n(v)o
+-(ely)-6 b(.)28 b(Internally)-6 b(,)23 b Fc(Dddmp)p 2275
+-4571 V 35 w(cuddBddStor)l(e)f Fl(b)n(uilds)g(a)i(dummy)e(1)h(entry)-189
+-4691 y(array)j(of)e(BDDs,)h(and)g(calls)g Fc(dddmp)p
+-1102 4691 V 35 w(cuddBddArr)o(ayStor)l(e)p Fl(.)47 4811
+-y(Since)30 b(con)l(v)o(ersion)e(from)h(DD)h(pointers)e(to)h(inte)o(ger)
+-f(is)h(required,)i(DD)e(nodes)g(are)h(temporarily)e(remo)o(v)o(ed)-189
+-4932 y(from)23 b(the)f(unique)h(hash.)29 b(This)23 b(mak)o(es)f(room)g
+-(in)h(their)f Fc(ne)n(xt)h Fl(\002eld)h(to)e(store)h(node)f(IDs.)30
+-b(Nodes)23 b(are)h(re-link)o(ed)e(after)-189 5052 y(the)i(store)g
+-(operation,)g(possible)f(in)g(a)i(modi\002ed)e(order)-5
+-b(.)31 b(Dumping)22 b(is)i(either)g(in)g(te)o(xt)f(or)i(binary)f(form.)
+-30 b(Both)24 b(a)g(\002le)-189 5173 y(pointer)31 b(\()p
+-Fc(fp)p Fl(\))g(and)g(a)h(\002le)g(name)f(\()p Fc(fname)p
+-Fl(\))h(are)g(pro)o(vided)e(as)h(inputs)f(parameters)i(to)f(store)g
+-(routines.)50 b(BDDs)31 b(are)-189 5293 y(stored)c(to)g(the)g(already)g
+-(open)h(\002le)f Fc(fp)p Fl(,)h(if)f(not)g(NULL.)g(Otherwise)f(\002le)i
+-(whose)f(name)g(is)g Fc(fname)g Fl(is)g(opened.)38 b(This)-189
+-5413 y(is)24 b(intended)g(to)h(allo)n(w)f(either)g(DD)h(storage)g
+-(within)e(\002les)i(containing)f(other)g(data,)h(or)g(to)g(speci\002c)g
+-(\002les.)1794 5800 y(5)p eop
+-%%Page: 6 6
+-6 5 bop -189 218 a Fi(2.2.2)99 b(Loading)25 b(Decision)g(Diagrams)-189
+-405 y Fc(Dddmp)p 111 405 30 4 v 35 w(cuddBddLoad)37 b
+-Fl(and)h Fc(Dddmp)p 1219 405 V 35 w(cuddBddArr)o(ayLoad)f
+-Fl(are)h(the)g(load)g(functions,)i(which)e(read)g(a)g(BDD)-189
+-526 y(dump)24 b(\002le.)47 646 y(F)o(ollo)n(wing)34 b(the)h(store)h
+-(function,)h(the)f(main)f(BDD)h(load)f(function,)j Fc(Dddmp)p
+-2813 646 V 35 w(cuddBddLoad)p Fl(,)f(is)f(imple-)-189
+-767 y(mented)g(by)g(calling)f(the)h(main)g(BDD-array)h(loading)f
+-(function)f Fc(Dddmp)p 2466 767 V 35 w(cuddBddArr)o(ayLoad)p
+-Fl(.)63 b(A)37 b(dynamic)-189 887 y(v)o(ector)24 b(of)h(DD)g(pointers)f
+-(is)g(temporarily)g(allocated)h(to)f(support)g(con)l(v)o(ersion)f(from)
+-i(DD)g(inde)o(x)o(es)e(to)h(pointers.)47 1007 y(Se)n(v)o(eral)40
+-b(criteria)f(are)i(supported)d(for)i(v)n(ariable)f(match)g(between)g
+-(\002le)h(and)g(DD)f(manager)l(,)k(practically)-189 1128
+-y(allo)n(wing)37 b(v)n(ariable)h(permutations)f(or)i(compositions)d
+-(while)i(loading)g(DDs.)71 b(V)-11 b(ariable)39 b(match)f(between)h
+-(the)-189 1248 y(DD)32 b(manager)g(and)g(the)g(BDD)g(\002le)g(is)g
+-(optionally)e(based)i(in)f Fc(IDs)p Fl(,)j Fc(perids)p
+-Fl(,)f Fc(varnames)p Fl(,)g Fc(var)o(auxids)p Fl(;)g(also)f(direct)-189
+-1369 y(composition)j(between)j Fc(IDs)g Fl(and)f Fc(composeids)g
+-Fl(is)g(supported.)68 b(The)38 b Fc(varmatc)o(hmode)e
+-Fl(parameter)i(is)f(used)g(to)-189 1489 y(select)27 b(mathing)e(mode.)
+-37 b(More)27 b(in)f(detail,)h(tw)o(o)f(match)h(modes)f(use)h(the)f
+-(information)g(within)f(the)i(DD)g(manager)l(,)-189 1609
+-y(the)e(other)f(ones)h(use)g(e)o(xtra)f(information,)f(which)i(support)
+-f(an)o(y)g(v)n(ariable)g(remap)h(or)g(change)g(in)f(the)h(ordering.)-44
+-1813 y Fk(\017)49 b Fl(v)n(armatchnode=DDDMP)p 1040 1813
+-V 35 w(V)-13 b(AR)p 1272 1813 V 35 w(MA)i(TCHIDS)19 b(allo)n(ws)f
+-(loading)g(a)h(DD)g(k)o(eeping)f(v)n(ariable)g(IDs)h(unchanged)55
+-1933 y(\(re)o(gardless)24 b(of)h(the)f(v)n(ariable)h(ordering)f(of)h
+-(the)g(reading)f(manager)-5 b(.)55 2095 y(This)24 b(is)g(useful,)g(for)
+-h(e)o(xample,)f(when)g(sw)o(apping)g(DDs)g(to)h(\002le)g(and)f
+-(restoring)g(them)g(later)h(from)f(\002le,)h(after)55
+-2215 y(possible)e(v)n(ariable)i(reordering)g(acti)n(v)n(ations.)-44
+-2419 y Fk(\017)49 b Fl(v)n(armatchnode=DDDMP)p 1040 2419
+-V 35 w(V)-13 b(AR)p 1272 2419 V 35 w(MA)i(TCHPERMIDS)36
+-b(is)e(used)h(to)f(allo)n(w)g(v)n(ariable)g(match)h(according)55
+-2539 y(to)h(the)h(position)e(in)i(the)g(ordering)f(\(retrie)n(v)o(ed)g
+-(by)h(array)h(of)f(permutations)e(stored)h(on)h(\002le)g(and)g(within)
+-55 2660 y(the)h(reading)g(DD)h(manager\).)72 b(A)38 b(possible)f
+-(application)h(is)g(retrie)n(ving)f(BDDs)i(stored)f(after)h(dynamic)55
+-2780 y(reordering,)28 b(from)g(a)g(DD)g(manager)g(where)h(all)e(v)n
+-(ariable)h(IDs)f(map)h(their)f(position)g(in)g(the)h(ordering,)g(and)55
+-2900 y(the)d(loaded)f(BDD)h(k)o(eeps)g(the)g(ordering)f(as)h(stored)f
+-(on)h(\002le.)-44 3104 y Fk(\017)49 b Fl(v)n(armatchnode=DDDMP)p
+-1040 3104 V 35 w(V)-13 b(AR)p 1272 3104 V 35 w(MA)i(TCHN)m(AMES)26
+-b(requires)h(a)h(not)e(NULL)h(v)n(armatchmodes)f(param-)55
+-3224 y(eter;)34 b(this)c(is)g(a)h(v)o(ector)g(of)g(strings)e(in)i
+-(one-to-one)f(correspondence)h(with)f(v)n(ariable)h(IDs)f(of)h(the)g
+-(reading)55 3344 y(manager)-5 b(.)40 b(V)-11 b(ariables)28
+-b(in)g(the)g(DD)g(\002le)g(read)h(are)g(matched)f(with)f(manager)h(v)n
+-(ariables)f(according)h(to)g(their)55 3465 y(name)35
+-b(\(a)h(not)f(NULL)g(v)n(arnames)g(parameter)h(w)o(as)f(required)h
+-(while)f(storing)f(the)h(DD)g(\002le\).)64 b(The)35 b(most)55
+-3585 y(common)c(usage)h(of)g(this)f(feature)i(is)e(in)h(combination)e
+-(with)i(a)g(v)n(ariable)g(ordering)g(stored)f(on)h(a)g(\002le)h(and)55
+-3706 y(based)28 b(on)h(v)n(ariables)f(names.)41 b(Names)29
+-b(must)e(be)i(loaded)f(in)g(an)h(array)g(of)g(strings)e(and)i(passed)f
+-(to)g(the)h(DD)55 3826 y(load)24 b(procedure.)-44 4029
+-y Fk(\017)49 b Fl(v)n(armatchnode=DDDMP)p 1040 4029 V
+-35 w(V)-13 b(AR)p 1272 4029 V 35 w(MA)i(TCHIDS)25 b(has)g(a)g(meaning)f
+-(similar)g(to)55 4150 y(DDDMP)p 421 4150 V 36 w(V)-13
+-b(AR)p 654 4150 V 35 w(MA)i(TCHN)m(AMES)26 b(b)n(ut)h(inte)o(ger)f
+-(auxiliary)g(IDs)h(are)h(used)f(instead)f(of)h(strings.)36
+-b(The)28 b(ad-)55 4270 y(ditional)23 b(not)h(NULL)h(v)n(armathauxids)e
+-(parameter)i(is)g(needed.)-44 4474 y Fk(\017)49 b Fl(v)n
+-(armatchnode=DDDMP)p 1040 4474 V 35 w(V)-13 b(AR)p 1272
+-4474 V 35 w(COMPOSEIDS,)38 b(uses)f(the)f(additional)f(v)n
+-(arcomposeids)g(parameter)55 4594 y(as)25 b(an)g(array)g(of)g(v)n
+-(ariable)f(IDs)h(to)g(be)g(composed)f(with)g(IDs)g(stored)h(in)f
+-(\002le.)-189 4860 y Fi(2.2.3)99 b(DD)25 b(Load/Stor)n(e)h(and)f(V)-9
+-b(ariable)25 b(Ordering)-189 5048 y Fl(Loading)31 b(of)i(Decision)e
+-(Diagrams)h(from)g(\002le)g(supports)f(dif)n(ferent)h(v)n(ariables)g
+-(ordering)f(strate)o(gies,)i(as)g(already)-189 5168 y(pointed)23
+-b(out)h(in)g(the)h(pre)n(vious)e(section.)30 b(This)24
+-b(allo)n(ws)f(or)h(e)o(xample)g(storing)f(dif)n(ferent)i(BDDs)f(each)h
+-(with)f(its)g(o)n(wn)-189 5288 y(v)n(ariable)29 b(ordering,)h(and)g(to)
+-f(mer)n(ge)h(them)f(within)f(the)i(same)f(DD)h(manager)f(by)h(means)f
+-(of)g(proper)h(load)f(opera-)-189 5409 y(tions.)44 b(W)-8
+-b(e)30 b(suggest)f(using)f(DDDMP)p 1175 5409 V 36 w(V)-13
+-b(AR)p 1408 5409 V 36 w(MA)i(TCHIDS)30 b(whene)n(v)o(er)f(IDs)g(k)o
+-(eeps)h(on)f(representing)h(the)f(same)-189 5529 y(entities)24
+-b(while)h(changing)f(v)n(ariable)h(ordering.)31 b(If)25
+-b(this)f(is)h(not)f(true,)h(v)n(ariable)g(names)g(\(if)g(a)n(v)n
+-(ailable\))f(or)i(auxiliary)1794 5800 y(6)p eop
+-%%Page: 7 7
+-7 6 bop -189 218 a Fl(IDs)34 b(are)h(a)g(good)e(w)o(ay)i(to)f
+-(represent)g(in)l(v)n(ariant)f(attrib)n(uted)g(of)i(v)n(ariables)e
+-(across)h(se)n(v)o(eral)g(runs)g(with)f(dif)n(ferent)-189
+-338 y(orderings.)50 b(DDDMP)p 629 338 30 4 v 35 w(V)-13
+-b(AR)p 861 338 V 36 w(COMPOSEIDS)32 b(is)f(an)h(alternati)n(v)o(e)e
+-(solution,)h(that)g(practically)f(corresponds)h(to)-189
+-459 y(cascading)23 b(DDDMP)p 593 459 V 36 w(V)-13 b(AR)p
+-826 459 V 36 w(MA)i(TCHIDS)23 b(and)h(v)n(ariable)f(composition)e(with)
+-h(a)i(gi)n(v)o(en)e(array)i(of)g(ne)n(w)f(v)n(ariables.)-189
+-797 y Fo(3)143 b(CNF)35 b(Support)-189 1050 y Fj(3.1)119
+-b(F)m(ormat)-189 1237 y Fl(Gi)n(v)o(en)30 b(a)h(BDD)g(representing)g(a)
+-g(function)f Fd(f)11 b Fl(,)32 b(we)f(de)n(v)o(elop)f(three)h(basic)g
+-(possible)e(w)o(ays)i(to)g(store)f(it)h(as)g(a)g(CNF)-189
+-1358 y(formula.)54 b(In)33 b(each)h(method)d(the)i(set)g(of)f(clauses)h
+-(is)f(written)h(after)g(an)g(header)g(part.)55 b(Only)32
+-b(the)h(te)o(xt)f(format)g(is)-189 1478 y(allo)n(wed.)-189
+-1743 y Fi(3.1.1)99 b(Header)-189 1931 y Fl(The)23 b(header)h(part)f(of)
+-g(each)h(CNF)g(\002le)f(has)g(basically)g(the)f(same)h(format)g
+-(analyzed)g(for)h(the)f(BDD/ADD)g(\002les.)30 b(F)o(or)-189
+-2051 y(e)o(xample)h(the)g Fg(.rootids)f Fl(line)h(indicates)f(the)i(be)
+-o(ginning)d(of)j(each)g(CNF)g(formula)f(represented)h(by)f(a)h(single)
+--189 2172 y(BDD.)j(T)-8 b(o)34 b(be)g(compatible)f(with)h(the)g(DIMA)l
+-(CS)h(format)f(each)h(header)f(line)g(start)g(with)g(the)g(character)h
+-(\223c\224)g(to)-189 2292 y(indicate)24 b(a)h(comment.)-189
+-2557 y Fi(3.1.2)99 b(T)-9 b(ext)25 b(F)n(ormat)-189 2745
+-y Fl(The)j(\002rst)g(method,)g(which)f(we)h(call)g Fi(Single-Node-Cut)p
+-Fl(,)j(models)26 b(each)j(BDD)f(nodes,)h(b)n(ut)e(the)h(ones)f(with)h
+-(both)-189 2865 y(the)c(children)g(equal)h(to)f(the)g(constant)g(node)g
+-Fb(1)p Fl(,)g(as)h(a)g(multiple)o(x)o(er)-5 b(.)27 b(Each)e(multiple)o
+-(x)o(er)d(has)i(tw)o(o)g(data)h(inputs)e(\(i.e.,)-189
+-2985 y(the)k(node)h(children\),)f(a)h(selection)f(input)f(\(i.e.,)i
+-(the)g(node)f(v)n(ariable\))g(and)h(one)f(output)f(\(i.e.,)i(the)g
+-(function)e(v)n(alue\))-189 3106 y(whose)h(v)n(alue)f(is)h(assigned)f
+-(to)h(an)g(additional)f(CNF)i(v)n(ariable.)37 b(The)27
+-b(\002nal)h(number)e(of)h(v)n(ariables)g(is)f(equal)h(to)g(the)-189
+-3226 y(number)d(of)h(original)f(BDD)h(v)n(ariables)f(plus)g(the)h
+-(number)f(of)h(\223internal\224)g(nodes)f(of)h(the)g(BDD.)47
+-3346 y(The)k(second)f(method,)g(which)h(we)f(call)h Fi(Maxterm-Cut)p
+-Fl(,)h(create)g(clauses)e(starting)g(from)g Fd(f)39 b
+-Fl(corresponds)-189 3467 y(to)25 b(the)h(of)n(f-set)g(\(i.e.,)f(all)h
+-(the)g(paths-cubes)f(from)g(the)h(root)g(node)f(to)h(the)f(terminal)g
+-Fg(0)p Fl(\))h(of)g(the)g(function)e Fd(f)11 b Fl(.)34
+-b(W)l(ithin)-189 3587 y(the)29 b(BDD)g(for)g Fd(f)11
+-b Fl(,)30 b(such)f(clauses)f(are)i(found)e(by)h(follo)n(wing)e(all)i
+-(the)f(paths)h(from)f(the)h(root)g(node)f(of)h(the)g(BDD)g(to)-189
+-3708 y(the)c(constant)f(node)g Fb(0)p Fl(.)31 b(The)25
+-b(\002nal)g(number)f(of)h(v)n(ariables)f(is)g(equal)h(to)f(the)h
+-(number)f(of)h(original)f(BDD)h(v)n(ariables.)47 3828
+-y(The)k(third)g(method,)g(which)g(we)g(call)g Fi(A)-5
+-b(uxiliary-V)c(ariable-Cut)p Fl(,)30 b(is)f(a)h(trade-of)n(f)f(between)
+-g(the)g(\002rst)g(tw)o(o)-189 3948 y(strate)o(gies.)69
+-b(Internal)37 b(v)n(ariables,)j(i.e.,)h(cutting)c(points,)j(are)e
+-(added)g(in)f(order)h(to)g(decompose)f(the)h(BDD)g(into)-189
+-4069 y(multiple)27 b(sub-trees)i(each)h(of)f(which)f(is)h(stored)g
+-(follo)n(wing)e(the)h(second)h(strate)o(gy)-6 b(.)42
+-b(The)29 b(trade-of)n(f)g(is)g(guided)f(by)-189 4189
+-y(the)23 b(cutting)f(point)g(selection)g(strate)o(gy)-6
+-b(,)22 b(and)h(we)g(e)o(xperiment)f(with)g(tw)o(o)g(methodologies.)28
+-b(In)23 b(the)g(\002rst)g(method,)g(a)-189 4310 y(ne)n(w)f(CNF)h(v)n
+-(ariable)f(is)f(inserted)h(in)g(correspondence)g(to)g(the)g(shared)g
+-(nodes)g(of)g(the)h(BDD,)f(i.e.,)h(the)f(nodes)f(which)-189
+-4430 y(ha)n(v)o(e)29 b(more)g(than)h(one)f(incoming)f(edge.)45
+-b(This)29 b(technique,)h(albeit)e(optimizing)g(the)h(number)g(of)h
+-(literals)e(stored,)-189 4550 y(can)35 b(produce)g(clauses)f(with)g(a)h
+-(high)f(number)h(of)f(literals)1894 4514 y Fh(2)1933
+-4550 y Fl(.)60 b(T)-8 b(o)35 b(a)n(v)n(oid)f(this)g(dra)o(wback,)j(the)
+-e(second)f(method,)-189 4671 y(introduces)28 b(all)g(the)g(pre)n
+-(viously)e(indicated)i(cutting)f(points)g(more)h(the)h(ones)f
+-(necessary)g(to)g(break)h(the)f(length)g(of)-189 4791
+-y(the)d(path)f(to)h(a)g(maximum)e(\(user\))i(selected)g(v)n(alue.)47
+-4911 y(Actually)-6 b(,)37 b(all)f(the)f(methods)g(described)h(abo)o(v)o
+-(e)e(can)j(be)e(re-conducted)h(to)g(the)f(basic)h(idea)g(of)g(possibly)
+--189 5032 y(breaking)24 b(the)h(BDD)g(through)f(the)g(use)h(of)f
+-(additional)g(cutting)f(v)n(ariables)h(and)h(dumping)e(the)h(paths)g
+-(between)h(the)-189 5152 y(root)34 b(of)h(the)f(BDD,)h(the)g(cutting)e
+-(v)n(ariables)h(and)g(the)h(terminal)e(nodes.)60 b(Such)35
+-b(internal)f(cutting)f(v)n(ariables)h(are)-189 5273 y(added)25
+-b(al)o(w)o(ays)f(\(for)i(each)f(node\),)g(ne)n(v)o(er)f(or)h(sometimes)
+-e(respecti)n(v)o(ely)-6 b(.)p -189 5360 1607 4 v -77
+-5422 a Ff(2)-40 5452 y Fe(This)27 b(v)n(alue)f(is)i(superiorly)d
+-(limited)h(by)g(the)h(number)e(of)h(v)n(ariables)g(of)g(the)h(BDD,)g
+-(i.e.,)h(the)f(longest)f(path)g(from)g(the)h(root)f(to)g(the)-189
+-5551 y(terminal)19 b(node.)1794 5800 y Fl(7)p eop
+-%%Page: 8 8
+-8 7 bop 47 218 a Fl(While)33 b(the)f Fc(Single-Node-Cut)h
+-Fl(method)f(minimizes)f(the)i(length)f(of)h(the)f(clauses)h(produced,)i
+-(b)n(ut)d(it)g(also)-189 338 y(requires)d(the)h(higher)f(number)g(of)g
+-(CNF)i(v)n(ariables,)e(the)h Fc(Maxterm-Cut)f Fl(technique)g(minimizes)
+-f(the)h(number)g(of)-189 459 y(CNF)36 b(v)n(ariables)d(required.)61
+-b(This)34 b(adv)n(antage)g(is)g(counter)n(-balanced)h(by)f(the)h(f)o
+-(act)g(that)f(in)g(the)h(w)o(orst)f(case)h(the)-189 579
+-y(number)23 b(of)g(clauses,)g(as)h(well)e(as)i(the)f(total)f(number)h
+-(of)g(literals,)g(produced)g(is)g(e)o(xponential)e(in)i(the)g(BDD)h
+-(size)f(\(in)-189 699 y(terms)28 b(of)i(number)e(of)h(nodes\).)43
+-b(The)29 b(application)f(of)h(this)f(method)g(is)g(then)h(limited)e(to)
+-i(the)g(cases)g(in)f(which)h(the)-189 820 y(\223of)n(f-set\224)c(of)f
+-(the)g(represented)h(function)f Fd(f)35 b Fl(has)24 b(a)h(small)f
+-(cardinality)-6 b(.)29 b(The)c Fc(A)n(uxiliary-V)-11
+-b(ariable-Cut)22 b Fl(strate)o(gy)h(is)-189 940 y(a)k(trade-of)n(f)h
+-(between)f(the)g(\002rst)g(tw)o(o)g(methods)f(and)h(the)g(ones)f(which)
+-h(gi)n(v)o(es)f(more)h(compact)f(results.)37 b(As)27
+-b(a)h(\002nal)-189 1061 y(remark)f(notice)e(that)h(the)g(method)g(is)f
+-(able)i(to)f(store)g(both)f(monolithic)f(BDDs)j(and)f(conjuncti)n(v)o
+-(e)e(forms.)35 b(In)26 b(each)-189 1181 y(case)f(we)g(generate)h(CNF)f
+-(\002les)g(using)f(the)h(standard)f(DIMA)l(CS)i(format.)-189
+-1365 y Fi(Example)f(1)49 b Fc(F)l(igur)l(e)20 b(1)h(shows)f(an)h(e)n
+-(xample)g(of)f(how)h(our)f(pr)l(ocedur)l(e)h(works)f(to)h(stor)l(e)f(a)
+-h(small)f(monolithic)f(BDD.)-189 1486 y(F)l(igur)l(e)j(1\(a\))h(r)l
+-(epr)l(esents)g(a)g(BDD)g(with)g Fb(4)g Fc(nodes.)30
+-b(BDD)23 b(variables)f(ar)l(e)h(named)g(after)f(inte)l(g)o(er)g(number)
+-o(s)h(r)o(anging)-189 1606 y(fr)l(om)k Fb(1)h Fc(to)g
+-Fb(4)p Fc(,)h(to)f(have)g(an)g(easy-to-follow)f(corr)l(espondence)h
+-(with)g(the)g(CNF)h(variables.)40 b(F)l(igur)l(e)27 b(1\(b\),)i(\(c\))g
+-(and)-189 1727 y(\(d\))c(show)g(the)f(corr)l(esponding)f(CNF)j(r)l(epr)
+-l(esentations)d(g)o(ener)o(ated)h(by)h(our)f(thr)l(ee)h(methods.)30
+-b(As)24 b(in)h(the)f(standar)l(d)-189 1847 y(format)i
+-Fa(p)i Fc(indicates)e(the)h(total)f(number)g(of)h(variables)f(used)h
+-(\()p Fb(4)g Fc(is)g(the)g(minimum)f(value)h(as)g(the)g(BDD)g(itself)f
+-(has)-189 1967 y Fb(4)f Fc(variables\),)e(and)i Fa(cnf)g
+-Fc(the)f(total)g(number)g(of)h(clauses.)47 2088 y(As)i(a)g(\002nal)f(r)
+-l(emark)h(notice)f(that)g(for)g(this)g(speci\002c)h(e)n(xample)g(the)f
+-(\223Maxterm-Cut\224)i(appr)l(oac)o(h)d(is)h(the)h(one)-189
+-2208 y(whic)o(h)36 b(gives)g(the)g(most)f(compact)h(CNF)h(r)l(epr)l
+-(esentation)e(b)n(ut)h(also)f(the)h(clause)g(with)g(the)g(lar)l(g)o
+-(est)g(number)f(of)-189 2328 y(liter)o(als)23 b(\()p
+-Fb(4)p Fc(\).)188 2471 y
+- 6339814 10777681 0 0 11709153 19997655 startTexFig
+- 188 2471 a
+-%%BeginDocument: bdd.eps
+-%!PS-Adobe-2.0 EPSF-2.0
+-%%Title: bdd.eps
+-%%Creator: fig2dev Version 3.2 Patchlevel 3c
+-%%CreationDate: Mon Sep 9 14:21:26 2002
+-%%For: quer at pcsq (Stefano Quer)
+-%%BoundingBox: 0 0 178 304
+-%%Magnification: 1.0000
+-%%EndComments
+-/$F2psDict 200 dict def
+-$F2psDict begin
+-$F2psDict /mtrx matrix put
+-/col-1 {0 setgray} bind def
+-/col0 {0.000 0.000 0.000 srgb} bind def
+-/col1 {0.000 0.000 1.000 srgb} bind def
+-/col2 {0.000 1.000 0.000 srgb} bind def
+-/col3 {0.000 1.000 1.000 srgb} bind def
+-/col4 {1.000 0.000 0.000 srgb} bind def
+-/col5 {1.000 0.000 1.000 srgb} bind def
+-/col6 {1.000 1.000 0.000 srgb} bind def
+-/col7 {1.000 1.000 1.000 srgb} bind def
+-/col8 {0.000 0.000 0.560 srgb} bind def
+-/col9 {0.000 0.000 0.690 srgb} bind def
+-/col10 {0.000 0.000 0.820 srgb} bind def
+-/col11 {0.530 0.810 1.000 srgb} bind def
+-/col12 {0.000 0.560 0.000 srgb} bind def
+-/col13 {0.000 0.690 0.000 srgb} bind def
+-/col14 {0.000 0.820 0.000 srgb} bind def
+-/col15 {0.000 0.560 0.560 srgb} bind def
+-/col16 {0.000 0.690 0.690 srgb} bind def
+-/col17 {0.000 0.820 0.820 srgb} bind def
+-/col18 {0.560 0.000 0.000 srgb} bind def
+-/col19 {0.690 0.000 0.000 srgb} bind def
+-/col20 {0.820 0.000 0.000 srgb} bind def
+-/col21 {0.560 0.000 0.560 srgb} bind def
+-/col22 {0.690 0.000 0.690 srgb} bind def
+-/col23 {0.820 0.000 0.820 srgb} bind def
+-/col24 {0.500 0.190 0.000 srgb} bind def
+-/col25 {0.630 0.250 0.000 srgb} bind def
+-/col26 {0.750 0.380 0.000 srgb} bind def
+-/col27 {1.000 0.500 0.500 srgb} bind def
+-/col28 {1.000 0.630 0.630 srgb} bind def
+-/col29 {1.000 0.750 0.750 srgb} bind def
+-/col30 {1.000 0.880 0.880 srgb} bind def
+-/col31 {1.000 0.840 0.000 srgb} bind def
+-
+-end
+-save
+-newpath 0 304 moveto 0 0 lineto 178 0 lineto 178 304 lineto closepath clip newpath
+--51.0 319.0 translate
+-1 -1 scale
+-
+-/cp {closepath} bind def
+-/ef {eofill} bind def
+-/gr {grestore} bind def
+-/gs {gsave} bind def
+-/sa {save} bind def
+-/rs {restore} bind def
+-/l {lineto} bind def
+-/m {moveto} bind def
+-/rm {rmoveto} bind def
+-/n {newpath} bind def
+-/s {stroke} bind def
+-/sh {show} bind def
+-/slc {setlinecap} bind def
+-/slj {setlinejoin} bind def
+-/slw {setlinewidth} bind def
+-/srgb {setrgbcolor} bind def
+-/rot {rotate} bind def
+-/sc {scale} bind def
+-/sd {setdash} bind def
+-/ff {findfont} bind def
+-/sf {setfont} bind def
+-/scf {scalefont} bind def
+-/sw {stringwidth} bind def
+-/tr {translate} bind def
+-/tnt {dup dup currentrgbcolor
+- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+- 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+- bind def
+-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+- 4 -2 roll mul srgb} bind def
+- /DrawEllipse {
+- /endangle exch def
+- /startangle exch def
+- /yrad exch def
+- /xrad exch def
+- /y exch def
+- /x exch def
+- /savematrix mtrx currentmatrix def
+- x y tr xrad yrad sc 0 0 1 startangle endangle arc
+- closepath
+- savematrix setmatrix
+- } def
+-
+-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+-/$F2psEnd {$F2psEnteredState restore end} def
+-
+-$F2psBegin
+-%%Page: 1 1
+-10 setmiterlimit
+- 0.06299 0.06299 sc
+-%
+-% Fig objects follow
+-%
+-% Polyline
+-15.000 slw
+-n 2010 4515 m 2550 4515 l 2550 5040 l 2010 5040 l
+- cp gs col0 s gr
+-/Times-Roman ff 300.00 scf sf
+-2205 4875 m
+-gs 1 -1 sc (1) col0 sh gr
+-% Ellipse
+-n 1515 1800 270 270 0 360 DrawEllipse gs col0 s gr
+-
+-% Ellipse
+-n 2250 900 270 270 0 360 DrawEllipse gs col0 s gr
+-
+-% Ellipse
+-n 2970 2715 270 270 0 360 DrawEllipse gs col0 s gr
+-
+-% Ellipse
+-n 2280 3705 270 270 0 360 DrawEllipse gs col0 s gr
+-
+-7.500 slw
+-% Ellipse
+-n 3555 3555 64 64 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+-
+-% Ellipse
+-n 2712 1726 64 64 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+-
+-% Ellipse
+-n 2430 4230 64 64 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+-
+-% Polyline
+-15.000 slw
+-n 2805 2910 m
+- 2250 3450 l gs col0 s gr
+-% Polyline
+- [90] 0 sd
+-gs clippath
+-2940 2472 m 3010 2445 l 2931 2239 l 2957 2411 l 2861 2266 l cp
+-eoclip
+-n 2460 1110 m
+- 2970 2445 l gs col0 s gr gr
+- [] 0 sd
+-% arrowhead
+-n 2861 2266 m 2957 2411 l 2931 2239 l 2908 2284 l 2861 2266 l
+- cp gs 0.00 setgray ef gr col0 s
+-% Polyline
+-gs clippath
+-1478 1511 m 1528 1568 l 1693 1422 l 1542 1506 l 1643 1366 l cp
+-eoclip
+-n 2025 1080 m
+- 1515 1530 l gs col0 s gr gr
+-
+-% arrowhead
+-n 1643 1366 m 1542 1506 l 1693 1422 l 1643 1416 l 1643 1366 l
+- cp gs 0.00 setgray ef gr col0 s
+-% Polyline
+-gs clippath
+-2212 645 m 2287 645 l 2287 425 l 2250 594 l 2212 425 l cp
+-eoclip
+-n 2250 270 m
+- 2250 630 l gs col0 s gr gr
+-
+-% arrowhead
+-n 2212 425 m 2250 594 l 2287 425 l 2250 459 l 2212 425 l
+- cp gs 0.00 setgray ef gr col0 s
+-% Polyline
+- [90] 0 sd
+-gs clippath
+-2692 2664 m 2732 2601 l 2546 2485 l 2670 2606 l 2506 2548 l cp
+-eoclip
+-n 1710 2010 m
+- 2700 2625 l gs col0 s gr gr
+- [] 0 sd
+-% arrowhead
+-n 2506 2548 m 2670 2606 l 2546 2485 l 2555 2534 l 2506 2548 l
+- cp gs 0.00 setgray ef gr col0 s
+-% Polyline
+-2 slj
+- [90] 0 sd
+-gs clippath
+-2504 4653 m 2539 4720 l 2733 4616 l 2567 4663 l 2698 4550 l cp
+-eoclip
+-n 3180 2910 m 3181 2911 l 3183 2913 l 3186 2916 l 3192 2921 l 3200 2929 l
+- 3210 2939 l 3223 2951 l 3238 2966 l 3255 2984 l 3274 3003 l
+- 3295 3025 l 3317 3049 l 3339 3075 l 3362 3103 l 3385 3131 l
+- 3407 3161 l 3429 3192 l 3450 3225 l 3470 3258 l 3488 3293 l
+- 3504 3329 l 3519 3367 l 3531 3406 l 3541 3447 l 3548 3490 l
+- 3552 3536 l 3552 3583 l 3548 3634 l 3540 3686 l 3528 3740 l
+- 3510 3795 l 3490 3844 l 3467 3892 l 3441 3939 l 3413 3985 l
+- 3382 4028 l 3350 4070 l 3317 4110 l 3283 4148 l 3248 4184 l
+- 3211 4219 l 3174 4253 l 3136 4285 l 3098 4316 l 3059 4347 l
+- 3020 4376 l 2980 4405 l 2941 4432 l 2901 4459 l 2862 4484 l
+- 2824 4509 l 2787 4532 l 2751 4554 l 2717 4575 l 2686 4593 l
+- 2657 4610 l 2631 4626 l 2608 4639 l 2589 4650 l 2572 4659 l
+- 2559 4666 l 2550 4672 l
+- 2535 4680 l gs col0 s gr gr
+- [] 0 sd
+-% arrowhead
+-0 slj
+-n 2698 4550 m 2567 4663 l 2733 4616 l 2686 4599 l 2698 4550 l
+- cp gs 0.00 setgray ef gr col0 s
+-% Polyline
+-2 slj
+-gs clippath
+-1985 4734 m 2028 4672 l 1847 4548 l 1965 4675 l 1804 4609 l cp
+-eoclip
+-n 1350 2025 m 1349 2026 l 1348 2027 l 1345 2030 l 1340 2035 l 1334 2042 l
+- 1325 2051 l 1314 2063 l 1301 2078 l 1286 2095 l 1268 2114 l
+- 1249 2137 l 1227 2161 l 1205 2188 l 1181 2218 l 1156 2249 l
+- 1131 2282 l 1105 2316 l 1080 2352 l 1054 2390 l 1029 2428 l
+- 1005 2468 l 981 2509 l 959 2552 l 938 2595 l 918 2640 l
+- 900 2687 l 884 2736 l 870 2786 l 858 2839 l 848 2894 l
+- 841 2951 l 837 3011 l 836 3074 l 838 3139 l 845 3206 l
+- 855 3275 l 870 3345 l 888 3412 l 910 3477 l 934 3542 l
+- 961 3604 l 990 3665 l 1022 3723 l 1054 3779 l 1088 3833 l
+- 1124 3885 l 1160 3935 l 1198 3983 l 1236 4029 l 1275 4074 l
+- 1315 4118 l 1356 4160 l 1397 4201 l 1438 4241 l 1480 4280 l
+- 1522 4318 l 1563 4355 l 1605 4390 l 1645 4424 l 1685 4457 l
+- 1723 4488 l 1760 4517 l 1795 4545 l 1827 4570 l 1857 4593 l
+- 1884 4613 l 1909 4632 l 1930 4647 l 1947 4660 l 1962 4671 l
+- 1973 4679 l 1982 4686 l
+- 1995 4695 l gs col0 s gr gr
+-
+-% arrowhead
+-0 slj
+-n 1804 4609 m 1965 4675 l 1847 4548 l 1854 4598 l 1804 4609 l
+- cp gs 0.00 setgray ef gr col0 s
+-% Polyline
+-2 slj
+- [90] 0 sd
+-gs clippath
+-2300 4492 m 2363 4532 l 2481 4347 l 2359 4470 l 2417 4307 l cp
+-eoclip
+-n 2340 3960 m 2341 3962 l 2344 3966 l 2348 3973 l 2354 3982 l 2362 3995 l
+- 2370 4010 l 2379 4028 l 2389 4046 l 2397 4066 l 2406 4088 l
+- 2413 4111 l 2420 4137 l 2425 4165 l 2429 4197 l 2430 4230 l
+- 2429 4263 l 2425 4295 l 2420 4323 l 2413 4349 l 2406 4372 l
+- 2397 4394 l 2389 4414 l 2379 4433 l 2370 4450 l 2362 4465 l
+- 2354 4478 l
+- 2340 4500 l gs col0 s gr gr
+- [] 0 sd
+-% arrowhead
+-0 slj
+-n 2417 4307 m 2359 4470 l 2481 4347 l 2431 4356 l 2417 4307 l
+- cp gs 0.00 setgray ef gr col0 s
+-% Polyline
+-2 slj
+-gs clippath
+-2136 4532 m 2199 4492 l 2082 4307 l 2141 4470 l 2018 4347 l cp
+-eoclip
+-n 2160 3960 m 2159 3962 l 2156 3966 l 2152 3973 l 2146 3982 l 2138 3995 l
+- 2130 4010 l 2121 4028 l 2111 4046 l 2103 4066 l 2094 4088 l
+- 2087 4111 l 2080 4137 l 2075 4165 l 2071 4197 l 2070 4230 l
+- 2071 4263 l 2075 4295 l 2080 4323 l 2087 4349 l 2094 4372 l
+- 2103 4394 l 2111 4414 l 2121 4433 l 2130 4450 l 2138 4465 l
+- 2146 4478 l
+- 2160 4500 l gs col0 s gr gr
+-
+-% arrowhead
+-0 slj
+-n 2018 4347 m 2141 4470 l 2082 4307 l 2068 4356 l 2018 4347 l
+- cp gs 0.00 setgray ef gr col0 s
+-/Times-Roman ff 300.00 scf sf
+-2175 990 m
+-gs 1 -1 sc (1) col0 sh gr
+-/Times-Roman ff 300.00 scf sf
+-1440 1890 m
+-gs 1 -1 sc (2) col0 sh gr
+-/Times-Roman ff 300.00 scf sf
+-2895 2805 m
+-gs 1 -1 sc (3) col0 sh gr
+-/Times-Roman ff 300.00 scf sf
+-2205 3795 m
+-gs 1 -1 sc (4) col0 sh gr
+-$F2psEnd
+-rs
+-
+-%%EndDocument
+-
+- endTexFig
+- 531 3990 a Fc(\(a\))1512 2504 y Fg(p)60 b(cnf)f(7)g(11)1512
+-2624 y(-5)g(3)h(0)1512 2745 y(-5)f(4)h(0)1512 2865 y(5)g(-3)f(-4)g(0)
+-1512 2985 y(6)h(-2)f(0)1512 3106 y(6)h(-5)f(0)1512 3226
+-y(-6)g(2)h(5)f(0)1512 3347 y(7)h(1)f(5)h(0)1512 3467
+-y(-7)f(1)h(-5)f(0)1512 3587 y(7)h(-1)f(-6)g(0)1512 3708
+-y(-7)g(-1)h(6)f(0)1512 3828 y(7)h(0)1836 3990 y Fc(\(b\))2541
+-2525 y Fg(p)f(cnf)g(4)h(3)2541 2645 y(1)f(-3)h(-4)f(0)2541
+-2766 y(-1)g(2)h(3)f(0)2541 2886 y(-1)g(2)h(-3)f(4)h(0)2868
+-3048 y Fc(\(c\))2541 3251 y Fg(p)f(cnf)g(5)h(5)2541 3371
+-y(-5)f(1)h(0)2541 3492 y(5)f(-1)h(2)f(0)2541 3612 y(-3)g(-4)g(5)h(0)
+-2541 3733 y(3)f(-5)h(0)2541 3853 y(-3)f(4)h(-5)f(0)2865
+-3990 y Fc(\(d\))-189 4138 y Fl(Figure)46 b(1:)71 b(\(a\))47
+-b(BDD;)e(\(b\))h(\223Single-Node-Cut\224)g(format;)55
+-b(\(c\))46 b(\223Maxterm-Cut\224)g(format;)55 b(\(d\))45
+-b(\223)-8 b(Auxiliary-)-189 4258 y(V)d(ariable-Cut\224)25
+-b(F)o(ormat.)-189 4625 y Fj(3.2)119 b(Implementation)-189
+-4813 y Fl(Store)25 b(and)g(Load)g(for)g(a)g(single)f(BDD)h(or)g(a)g
+-(forest)g(of)g(BDDs)g(is)f(currently)h(implemented.)-189
+-5073 y Fi(3.2.1)99 b(Storing)25 b(Decision)g(Diagrams)f(as)g(CNF)h(F)n
+-(ormulas)-189 5260 y Fl(As)g(f)o(ar)g(as)g(the)g(storing)e(process)i
+-(is)f(concerned)i(three)f(possible)e(formats)h(are)i(a)n(v)n(ailable:)
+--44 5431 y Fk(\017)49 b Fl(DDDMP)p 421 5431 30 4 v 36
+-w(CNF)p 650 5431 V 36 w(MODE)p 980 5431 V 35 w(NODE:)21
+-b(store)f(a)h(BDD)h(by)e(introducing)f(an)i(auxiliary)g(v)n(ariable)f
+-(for)h(each)g(BDD)55 5551 y(node)1794 5800 y(8)p eop
+-%%Page: 9 9
+-9 8 bop -44 218 a Fk(\017)49 b Fl(DDDMP)p 421 218 30
+-4 v 36 w(CNF)p 650 218 V 36 w(MODE)p 980 218 V 35 w(MAXTERM:)20
+-b(store)g(a)h(BDD)h(by)e(follo)n(wing)f(the)h(maxterm)g(of)h(the)g
+-(represented)55 338 y(function)-44 542 y Fk(\017)49 b
+-Fl(DDDMP)p 421 542 V 36 w(CNF)p 650 542 V 36 w(MODE)p
+-980 542 V 35 w(BEST)-5 b(:)32 b(trade-of)f(between)h(the)f(tw)o(o)f
+-(pre)n(vious)g(solution,)h(trying)f(to)h(optimize)55
+-662 y(the)25 b(number)f(of)h(literals)f(stored.)-189
+-865 y(See)c(procedures)f(Dddmp)p 736 865 V 35 w(cuddBddStoreCnf)g(\(to)
+-g(store)f(a)h(single)f(BDD)i(as)e(a)i(CNF)f(formula\))g(and)g(Dddmp)p
+-3609 865 V 34 w(cuddBddArrayStoreCnf)-189 986 y(\(to)25
+-b(store)f(an)h(array)h(of)f(BDDs)g(as)f(a)i(CNF)f(formula\).)-189
+-1252 y Fi(3.2.2)99 b(Loadinf)26 b(CNF)e(F)n(ormulas)g(as)h(BDDs)-189
+-1439 y Fl(As)g(f)o(ar)g(as)g(the)g(loading)e(process)i(is)f(concerned)i
+-(three)f(possible)e(formats)i(are)g(a)n(v)n(ailable:)-44
+-1643 y Fk(\017)49 b Fl(DDDMP)p 421 1643 V 36 w(CNF)p
+-650 1643 V 36 w(MODE)p 980 1643 V 35 w(NO)p 1159 1643
+-V 36 w(CONJ:)25 b(Return)g(the)f(Clauses)h(without)f(Conjunction)-44
+-1846 y Fk(\017)49 b Fl(DDDMP)p 421 1846 V 36 w(CNF)p
+-650 1846 V 36 w(MODE)p 980 1846 V 35 w(NO)p 1159 1846
+-V 36 w(Q)o(U)l(ANT)-5 b(:)24 b(Return)h(the)g(sets)f(of)h(BDDs)g
+-(without)f(Quanti\002cation)-44 2050 y Fk(\017)49 b Fl(DDDMP)p
+-421 2050 V 36 w(CNF)p 650 2050 V 36 w(MODE)p 980 2050
+-V 35 w(CONJ)p 1264 2050 V 36 w(Q)o(U)l(ANT)-5 b(:)23
+-b(Return)h(the)g(sets)f(of)h(BDDs)g(AFTER)g(Existential)e(Quanti\002-)
+-55 2170 y(cation)-189 2373 y(See)e(procedures)f(Dddmp)p
+-736 2373 V 35 w(cuddBddLoadCnf)f(\(to)h(load)f(a)i(CNF)f(formula)g(as)g
+-(a)g(single)f(BDD\))h(and)g(Dddmp)p 3581 2373 V 35 w
+-(cuddBddArrayLoadCnf)-189 2494 y(\(to)35 b(load)h(a)g(CNF)g(formula)f
+-(as)h(an)g(array)g(of)g(BDDs\).)63 b(See)36 b(also)g(Dddmp)p
+-2485 2494 V 34 w(cuddHeaderLoadCnf)h(to)e(load)g(the)-189
+-2614 y(header)25 b(of)g(a)g(CNF)h(\002le)f(to)g(gather)f(information)f
+-(on)i(the)g(sa)n(v)o(ed)f(structure.)-189 2954 y Fo(4)143
+-b(T)-13 b(est)35 b(Pr)m(ogram)f(and)h(Regr)m(ession)f(T)-13
+-b(ests)-189 3177 y Fl(The)20 b Fc(testddmp.c)e Fl(\002le,)j(pro)o
+-(vided)d(with)h(this)f(distrib)n(ution,)g(e)o(x)o(empli\002es)g(some)h
+-(of)h(the)f(abo)o(v)o(e)g(features.)29 b(Moreo)o(v)o(er)l(,)-189
+-3298 y(in)d(the)h Fc(e)n(xp)g Fl(e)o(xperiments)e(a)j(fe)n(w)e
+-(scripts,)h(named)f Fc(test\241n\277.script)f Fl(are)i(a)n(v)n(ailable)
+-f(for)h(a)g(sanity)f(check)h(of)g(the)g(tool)-189 3418
+-y(and)e(to)f(tak)o(e)h(a)g(look)f(at)h(some)f(runs)h(e)o(x)o
+-(empli\002cation.)-189 3758 y Fo(5)143 b(Documentation)-189
+-3981 y Fl(F)o(or)27 b(further)f(documentation)f(on)i(the)f(package)h
+-(see)g(the)g(on-line)f(documentation)f(automatically)g(created)i(from)
+--189 4102 y(the)e(source)g(code)g(\002les.)-189 4441
+-y Fo(6)143 b(Ackno)o(wledgments)-189 4665 y Fl(W)-8 b(e)19
+-b(are)h(particular)f(indebted)f(with)g(F)o(abio)g(Somenzi,)i(for)f
+-(discussions,)f(advice,)i(and)f(for)g(including)e(the)i(DDDMP)-189
+-4785 y(package)28 b(into)f(the)h(CUDD)g(distrib)n(ution.)37
+-b(W)-8 b(e)29 b(also)e(thank)g(all)h(the)g(user)g(of)g(the)f(package)i
+-(for)f(their)f(useful)h(indi-)-189 4905 y(cation)c(and)h(comments)f(on)
+-g(the)h(it.)1794 5800 y(9)p eop
+-%%Page: 10 10
+-10 9 bop -189 218 a Fo(7)143 b(FTP)35 b(Site)-189 441
+-y Fl(The)25 b(package)g(is)f(singularly)g(a)n(v)n(ailable)g(from:)-189
+-645 y Fg(site:)59 b(ftp.polito.it)-189 765 y(user:)g(anonymous)-189
+-885 y(directory:)f(/pub/research/dddmp)-189 1089 y Fl(or)25
+-b(directly)f(from)h(the)f(author)h(WEB)g(pages:)-189
+-1292 y Fg(WWW:)59 b(http://www.polito.it/\230{cabodi)o(,quer)o(})-189
+-1632 y Fo(8)143 b(F)l(eedback)-189 1855 y Fl(Send)25
+-b(feedback)h(to:)-189 2059 y Fg(Gianpiero)58 b(Cabodi)g(&)i(Stefano)e
+-(Quer)-189 2179 y(Politecnico)f(di)j(Torino)-189 2300
+-y(Dipartimento)d(di)i(Automatica)f(e)i(Informatica)-189
+-2420 y(Corso)f(Duca)g(degli)f(Abruzzi,)g(24)-189 2540
+-y(I-10129)g(Torino)-189 2661 y(Italy)-189 2781 y(E-mail:)g
+-({cabodi,quer}@polito.it)-189 2901 y(WWW:)h
+-(http://www.polito.it/\230{cabodi)o(,quer)o(})1769 5800
+-y Fl(10)p eop
+-%%Trailer
+-end
+-userdict /end-hook known{end-hook}if
+-%%EOF
+diff --git a/Cudd/dddmp/doc/dddmp-2.0-Letter.ps b/Cudd/dddmp/doc/dddmp-2.0-Letter.ps
+deleted file mode 100644
+index ad51df7..0000000
+--- a/Cudd/dddmp/doc/dddmp-2.0-Letter.ps
++++ /dev/null
+@@ -1,1260 +0,0 @@
+-%!PS-Adobe-2.0
+-%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
+-%%Title: dddmp-2.0.dvi
+-%%Pages: 10
+-%%PageOrder: Ascend
+-%%BoundingBox: 0 0 612 792
+-%%DocumentFonts: Times-Bold Times-Roman Courier Times-Italic Helvetica
+-%%EndComments
+-%DVIPSWebPage: (www.radicaleye.com)
+-%DVIPSCommandLine: dvips -t letter -f dddmp-2.0
+-%DVIPSParameters: dpi=600, compressed
+-%DVIPSSource: TeX output 2002.12.11:0557
+-%%BeginProcSet: texc.pro
+-%!
+-/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+-N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+-mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+-0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+-landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+-mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+-matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+-exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+-statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+-N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+-/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+-/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+-array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+-df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+-definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+-}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+-B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+-1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3
+-1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx
+-0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx
+-sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{
+-rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp
+-gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B
+-/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{
+-/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{
+-A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy
+-get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse}
+-ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp
+-fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17
+-{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add
+-chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{
+-1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop}
+-forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+-/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+-}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+-bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+-mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+-SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+-userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+-1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+-index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+-/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+-/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+-(LaserWriter 16/600)]{A length product length le{A length product exch 0
+-exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+-end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+-grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+-imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+-exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+-fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+-delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+-B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+-p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+-rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+-
+-%%EndProcSet
+-%%BeginProcSet: 8r.enc
+-% @@psencodingfile@{
+-% author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry",
+-% version = "0.6",
+-% date = "22 June 1996",
+-% filename = "8r.enc",
+-% email = "kb@@mail.tug.org",
+-% address = "135 Center Hill Rd. // Plymouth, MA 02360",
+-% codetable = "ISO/ASCII",
+-% checksum = "119 662 4424",
+-% docstring = "Encoding for TrueType or Type 1 fonts to be used with TeX."
+-% @}
+-%
+-% Idea is to have all the characters normally included in Type 1 fonts
+-% available for typesetting. This is effectively the characters in Adobe
+-% Standard Encoding + ISO Latin 1 + extra characters from Lucida.
+-%
+-% Character code assignments were made as follows:
+-%
+-% (1) the Windows ANSI characters are almost all in their Windows ANSI
+-% positions, because some Windows users cannot easily reencode the
+-% fonts, and it makes no difference on other systems. The only Windows
+-% ANSI characters not available are those that make no sense for
+-% typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen
+-% (173). quotesingle and grave are moved just because it's such an
+-% irritation not having them in TeX positions.
+-%
+-% (2) Remaining characters are assigned arbitrarily to the lower part
+-% of the range, avoiding 0, 10 and 13 in case we meet dumb software.
+-%
+-% (3) Y&Y Lucida Bright includes some extra text characters; in the
+-% hopes that other PostScript fonts, perhaps created for public
+-% consumption, will include them, they are included starting at 0x12.
+-%
+-% (4) Remaining positions left undefined are for use in (hopefully)
+-% upward-compatible revisions, if someday more characters are generally
+-% available.
+-%
+-% (5) hyphen appears twice for compatibility with both ASCII and Windows.
+-%
+-/TeXBase1Encoding [
+-% 0x00 (encoded characters from Adobe Standard not in Windows 3.1)
+- /.notdef /dotaccent /fi /fl
+- /fraction /hungarumlaut /Lslash /lslash
+- /ogonek /ring /.notdef
+- /breve /minus /.notdef
+-% These are the only two remaining unencoded characters, so may as
+-% well include them.
+- /Zcaron /zcaron
+-% 0x10
+- /caron /dotlessi
+-% (unusual TeX characters available in, e.g., Lucida Bright)
+- /dotlessj /ff /ffi /ffl
+- /.notdef /.notdef /.notdef /.notdef
+- /.notdef /.notdef /.notdef /.notdef
+- % very contentious; it's so painful not having quoteleft and quoteright
+- % at 96 and 145 that we move the things normally found there down to here.
+- /grave /quotesingle
+-% 0x20 (ASCII begins)
+- /space /exclam /quotedbl /numbersign
+- /dollar /percent /ampersand /quoteright
+- /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+-% 0x30
+- /zero /one /two /three /four /five /six /seven
+- /eight /nine /colon /semicolon /less /equal /greater /question
+-% 0x40
+- /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O
+-% 0x50
+- /P /Q /R /S /T /U /V /W
+- /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+-% 0x60
+- /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o
+-% 0x70
+- /p /q /r /s /t /u /v /w
+- /x /y /z /braceleft /bar /braceright /asciitilde
+- /.notdef % rubout; ASCII ends
+-% 0x80
+- /.notdef /.notdef /quotesinglbase /florin
+- /quotedblbase /ellipsis /dagger /daggerdbl
+- /circumflex /perthousand /Scaron /guilsinglleft
+- /OE /.notdef /.notdef /.notdef
+-% 0x90
+- /.notdef /.notdef /.notdef /quotedblleft
+- /quotedblright /bullet /endash /emdash
+- /tilde /trademark /scaron /guilsinglright
+- /oe /.notdef /.notdef /Ydieresis
+-% 0xA0
+- /.notdef % nobreakspace
+- /exclamdown /cent /sterling
+- /currency /yen /brokenbar /section
+- /dieresis /copyright /ordfeminine /guillemotleft
+- /logicalnot
+- /hyphen % Y&Y (also at 45); Windows' softhyphen
+- /registered
+- /macron
+-% 0xD0
+- /degree /plusminus /twosuperior /threesuperior
+- /acute /mu /paragraph /periodcentered
+- /cedilla /onesuperior /ordmasculine /guillemotright
+- /onequarter /onehalf /threequarters /questiondown
+-% 0xC0
+- /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+- /Egrave /Eacute /Ecircumflex /Edieresis
+- /Igrave /Iacute /Icircumflex /Idieresis
+-% 0xD0
+- /Eth /Ntilde /Ograve /Oacute
+- /Ocircumflex /Otilde /Odieresis /multiply
+- /Oslash /Ugrave /Uacute /Ucircumflex
+- /Udieresis /Yacute /Thorn /germandbls
+-% 0xE0
+- /agrave /aacute /acircumflex /atilde
+- /adieresis /aring /ae /ccedilla
+- /egrave /eacute /ecircumflex /edieresis
+- /igrave /iacute /icircumflex /idieresis
+-% 0xF0
+- /eth /ntilde /ograve /oacute
+- /ocircumflex /otilde /odieresis /divide
+- /oslash /ugrave /uacute /ucircumflex
+- /udieresis /yacute /thorn /ydieresis
+-] def
+-
+-%%EndProcSet
+-%%BeginProcSet: texps.pro
+-%!
+-TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+-index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+-exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
+-exch def dict begin Encoding{exch dup type/integertype ne{pop pop 1 sub
+-dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
+-ifelse}forall Metrics/Metrics currentdict end def[2 index currentdict
+-end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{
+-dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1
+-roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def
+-dup[exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}
+-if}forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}
+-def end
+-
+-%%EndProcSet
+-%%BeginProcSet: special.pro
+-%!
+-TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+-/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+-/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+-/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+-/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+-X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+-/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+-/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+-{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+-maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+-/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+-atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+-itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+-transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+-curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+-pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+-if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+--1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+-get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+-yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+-neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+-noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+-90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+-neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+-1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+-2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+--1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+-TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+-Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+-}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+-save N userdict maxlength dict begin/magscale true def normalscale
+-currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+-/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+-psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+-psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+-TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
+-psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+-roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+-moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
+-begin/SpecialSave save N gsave normalscale currentpoint TR
+- at SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
+-CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+-closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+-sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+-}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+-CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+-lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
+-/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
+-repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
+-/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
+-currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
+-moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
+-/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
+-1 startangle endangle arc savematrix setmatrix}N end
+-
+-%%EndProcSet
+-TeXDict begin 40258431 52099146 1000 600 600 (dddmp-2.0.dvi)
+- at start /Fa 143[55 1[55 7[28 2[50 99[{TeXBase1Encoding ReEncodeFont}4
+-99.6264 /Helvetica rf
+-%DVIPSBitmapFont: Fb cmr12 12 3
+-/Fb 3 53 df<14FF010713E090381F81F890383E007C01FC133F4848EB1F8049130F4848
+-EB07C04848EB03E0A2000F15F0491301001F15F8A2003F15FCA390C8FC4815FEA54815FF
+-B3A46C15FEA56D1301003F15FCA3001F15F8A26C6CEB03F0A36C6CEB07E0000315C06D13
+-0F6C6CEB1F806C6CEB3F00013E137C90381F81F8903807FFE0010090C7FC28447CC131>
+-48 D<143014F013011303131F13FFB5FC13E713071200B3B3B0497E497E007FB6FCA320
+-4278C131>I<ED0380A21507150FA2151F153FA2157F15FFA25CEC03BF153F1407140614
+-0C141C141814301470146014C013011480EB03005B13065B131C13185B1370136013E048
+-5A5B120390C7FC1206120E120C5A123812305A12E0B812C0A3C8383F8000ADEDFFE0027F
+-EBFFC0A32A437DC231>52 D E
+-%EndDVIPSBitmapFont
+-/Fc 64[50 29[39 12[55 55 25[44 44 66 44 50 28 39 39 1[50
+-50 50 72 28 44 1[28 50 50 28 44 50 44 50 50 10[61 2[50
+-4[66 83 55 2[33 2[61 1[72 66 61 61 15[50 2[25 33 25 2[33
+-33 37[50 2[{TeXBase1Encoding ReEncodeFont}45 99.6264
+-/Times-Italic rf
+-%DVIPSBitmapFont: Fd cmmi12 12 3
+-/Fd 3 103 df<F001C0F007E0181FF07FC0943801FF00EF07FCEF1FF0EF7FC04C48C7FC
+-EE0FFCEE3FF0EEFFC0030390C8FCED0FF8ED3FE0EDFF80DA03FEC9FCEC1FF8EC7FE09038
+-01FF80D907FECAFCEB1FF0EB7FC04848CBFCEA07FCEA1FF0EA7FC048CCFCA2EA7FC0EA1F
+-F0EA07FCEA01FF38007FC0EB1FF0EB07FE903801FF809038007FE0EC1FF8EC03FE913800
+-FF80ED3FE0ED0FF8ED03FF030013C0EE3FF0EE0FFCEE01FF9338007FC0EF1FF0EF07FCEF
+-01FF9438007FC0F01FE01807F001C03B3878B44C>60 D<127012FCB4FCEA7FC0EA1FF0EA
+-07FCEA01FF38007FC0EB1FF0EB07FE903801FF809038007FE0EC1FF8EC03FE913800FF80
+-ED3FE0ED0FF8ED03FF030013C0EE3FF0EE0FFCEE01FF9338007FC0EF1FF0EF07FCEF01FF
+-9438007FC0F01FE0A2F07FC0943801FF00EF07FCEF1FF0EF7FC04C48C7FCEE0FFCEE3FF0
+-EEFFC0030390C8FCED0FF8ED3FE0EDFF80DA03FEC9FCEC1FF8EC7FE0903801FF80D907FE
+-CAFCEB1FF0EB7FC04848CBFCEA07FCEA1FF0EA7FC048CCFC12FC12703B3878B44C>62
+-D<EE07E0EE1FF8EE7C1CEEF80E923801F03E923803E07F17FFED07E116C117FE92380FC0
+-FC177817004B5AA4153F93C7FCA45D157EA491B61280A3DA00FCC7FCA314015DA414035D
+-A414075DA4140F5DA5141F5DA4143F92C8FCA45C147EA45CA45C1301A25CA2EA1C03007F
+-5B12FF5C13075C4848C9FC12F8EA601EEA783CEA1FF0EA07C0305A7BC530>102
+-D E
+-%EndDVIPSBitmapFont
+-/Fe 134[42 2[42 42 23 32 28 1[42 42 42 65 23 2[23 42
+-42 28 37 42 1[42 37 12[51 10[28 4[60 1[55 19[21 28 21
+-44[{TeXBase1Encoding ReEncodeFont}26 83.022 /Times-Roman
+-rf
+-%DVIPSBitmapFont: Ff cmr7 7 2
+-/Ff 2 51 df<13381378EA01F8121F12FE12E01200B3AB487EB512F8A215267BA521>49
+-D<13FF000313E0380E03F0381800F848137C48137E00787F12FC6CEB1F80A4127CC7FC15
+-005C143E147E147C5C495A495A5C495A010EC7FC5B5B903870018013E0EA018039030003
+-0012065A001FB5FC5A485BB5FCA219267DA521>I E
+-%EndDVIPSBitmapFont
+-/Fg 103[60 26[60 1[60 60 60 60 60 60 60 60 60 60 60 60
+-60 60 60 60 2[60 60 60 60 60 60 60 60 60 3[60 1[60 3[60
+-60 1[60 60 1[60 60 1[60 60 3[60 1[60 1[60 60 60 1[60
+-60 1[60 1[60 1[60 60 60 60 60 60 60 60 60 60 60 60 60
+-60 60 5[60 38[{TeXBase1Encoding ReEncodeFont}62 99.6264
+-/Courier rf
+-%DVIPSBitmapFont: Fh cmr8 8 2
+-/Fh 2 51 df<130C133C137CEA03FC12FFEAFC7C1200B3B113FE387FFFFEA2172C7AAB23
+->49 D<EB7F803801FFF0380780FC380E003F48EB1F8048EB0FC05A0060EB07E012F000FC
+-14F07E1403A3007C1307C7FCA215E0140F15C0141F1580EC3F00147E147C5C495A495A49
+-5A495A011EC7FC5B5B4913305B485A4848136048C7FC000E14E0001FB5FC5A4814C0B6FC
+-A21C2C7DAB23>I E
+-%EndDVIPSBitmapFont
+-/Fi 105[50 28[50 50 2[55 33 39 44 1[55 50 55 83 28 2[28
+-1[50 33 44 55 44 55 50 10[72 1[66 55 3[78 72 94 66 3[78
+-1[61 66 72 72 66 72 13[50 50 50 1[28 25 33 45[{
+-TeXBase1Encoding ReEncodeFont}40 99.6264 /Times-Bold
+-rf /Fj 139[40 1[53 1[66 60 66 100 33 2[33 3[53 3[60 23[47
+-2[73 18[60 60 60 2[30 46[{TeXBase1Encoding ReEncodeFont}16
+-119.552 /Times-Bold rf
+-%DVIPSBitmapFont: Fk cmsy10 12 1
+-/Fk 1 16 df<49B4FC010F13E0013F13F8497F48B6FC4815804815C04815E04815F0A248
+-15F8A24815FCA3B712FEA96C15FCA36C15F8A26C15F0A26C15E06C15C06C15806C15006C
+-6C13FC6D5B010F13E0010190C7FC27277BAB32>15 D E
+-%EndDVIPSBitmapFont
+-/Fl 64[44 42[44 44 24[44 50 50 72 50 50 28 39 33 50 50
+-50 50 78 28 50 28 28 50 50 33 44 50 44 50 44 6[61 1[72
+-94 72 72 61 55 66 72 55 72 72 89 61 1[39 33 72 72 55
+-61 72 66 66 72 3[56 1[28 28 50 50 50 50 50 50 50 50 50
+-50 28 25 33 25 2[33 33 36[55 55 2[{TeXBase1Encoding ReEncodeFont}74
+-99.6264 /Times-Roman rf
+-%DVIPSBitmapFont: Fm cmsy10 14.4 2
+-/Fm 2 104 df<EE1FE0ED01FF150F92383FF800EDFFC04A90C7FC4A5A4A5A4A5A4A5A5D
+-A2143F5DB3B1147F5D14FF92C8FC5B495A495A495AEB3FE0EBFF80D87FFEC9FCEAFFF8A2
+-EA7FFEC66C7EEB3FE0EB0FF86D7E6D7E6D7E7F81147F81143FB3B181141FA2816E7E6E7E
+-6E7E6E7E6E13C0ED3FF892380FFFE01501ED001F2B7878D93C>102
+-D<B4FC13F813FF000313C038007FF0EB1FF8EB07FC6D7E6D7E6D7F147FA281143FB3B181
+-141F81140F816E7E6E7E6E7E6E6C7EED3FF092380FFFC0030113E0A2030F13C092383FF0
+-00ED7F804A48C7FC4A5A4A5A4A5A5D141F5D143F5DB3B1147F5DA214FF4990C8FC495A49
+-5AEB1FF8EB7FF03803FFC0B5C9FC13F890CAFC2B7878D93C>I E
+-%EndDVIPSBitmapFont
+-/Fn 105[60 27[53 4[60 33 47 40 60 60 60 60 93 33 2[33
+-1[60 40 53 60 53 60 53 7[86 4[73 66 1[86 66 3[73 2[40
+-1[86 1[73 86 80 1[86 110 5[33 60 4[60 1[60 60 60 1[30
+-40 30 44[{TeXBase1Encoding ReEncodeFont}42 119.552 /Times-Roman
+-rf /Fo 136[104 1[80 48 56 64 1[80 72 80 120 40 80 1[40
+-1[72 1[64 80 64 80 72 12[96 80 104 1[88 1[104 135 3[56
+-2[88 1[104 104 96 104 6[48 1[72 72 72 72 72 72 72 72
+-72 1[36 46[{TeXBase1Encoding ReEncodeFont}41 143.462
+-/Times-Bold rf end
+-%%EndProlog
+-%%BeginSetup
+-%%Feature: *Resolution 600dpi
+-TeXDict begin
+-%%BeginPaperSize: Letter
+-letter
+-%%EndPaperSize
+-
+-%%EndSetup
+-%%Page: 1 1
+-1 0 bop 472 600 a Fo(DDDMP:)35 b(Decision)f(Diagram)f(DuMP)j(package)
+-1480 830 y(Release)e(2.0)462 1230 y Fn(Gianpiero)c(Cabodi)2402
+-1232 y(Stef)o(ano)g(Quer)1316 1506 y(Politecnico)g(di)g(T)-10
+-b(orino)1024 1656 y(Dip.)30 b(di)g(Automatica)g(e)g(Informatica)1119
+-1805 y(Corso)f(Duca)h(de)n(gli)g(Abruzzi)g(24)1277 1955
+-y(I\22610129)e(T)-5 b(urin,)29 b(IT)-11 b(AL)f(Y)1038
+-2104 y(E-mail:)38 b Fm(f)p Fn(cabodi,quer)p Fm(g)p Fn(@polito.it)-189
+-2614 y Fo(1)143 b(Intr)m(oduction)-189 2837 y Fl(The)27
+-b(DDDMP)h(package)f(de\002nes)h(formats)f(and)g(rules)g(to)g(store)g
+-(DD)g(on)g(\002le.)39 b(More)27 b(in)g(particular)g(it)g(contains)g(a)
+--189 2958 y(set)e(of)g(functions)e(to)i(dump)e(\(store)i(and)g(load\))g
+-(DDs)f(and)h(DD)g(forests)f(on)h(\002le)g(in)f(dif)n(ferent)h(formats.)
+-47 3078 y(In)30 b(the)g(present)g(implementation,)f(BDDs)h(\(R)l
+-(OBDDs\))h(and)f(ADD)g(\(Algebraic)g(Decision)g(Diagram\))g(of)-189
+-3199 y(the)g(CUDD)g(package)g(\(v)o(ersion)f(2.3.0)g(or)h(higher\))g
+-(are)g(supported.)45 b(These)30 b(structures)f(can)h(be)g(represented)g
+-(on)-189 3319 y(\002les)25 b(either)g(in)f(te)o(xt,)g(binary)-6
+-b(,)24 b(or)h(CNF)g(\(DIMA)l(CS\))h(formats.)47 3439
+-y(The)f(main)f(rules)h(used)f(are)i(follo)n(wing)d(rules:)-44
+-3643 y Fk(\017)49 b Fl(A)30 b(\002le)h(contains)e(a)i(single)e(BDD/ADD)
+-h(or)g(a)h(forest)f(of)g(BDDs/ADD,)g(i.e.,)i(a)e(v)o(ector)g(of)g
+-(Boolean)h(func-)55 3763 y(tions.)-44 3966 y Fk(\017)49
+-b Fl(Inte)o(ger)21 b(inde)o(x)o(es)f(are)i(used)f(instead)g(of)g
+-(pointers)g(to)g(reference)i(nodes.)29 b(BDD/ADD)21 b(nodes)g(are)h
+-(numbered)55 4087 y(with)j(contiguous)g(numbers,)g(from)h(1)g(to)f
+-(NNodes)h(\(total)f(number)h(of)g(nodes)g(on)f(a)i(\002le\).)35
+-b(0)26 b(is)f(not)h(used)f(to)55 4207 y(allo)n(w)f(ne)o(gati)n(v)o(e)e
+-(inde)o(x)o(es)h(for)i(complemented)f(edges.)-44 4411
+-y Fk(\017)49 b Fl(A)23 b(\002le)g(contains)f(a)h(header)l(,)h
+-(including)d(se)n(v)o(eral)h(informations)f(about)h(v)n(ariables)h(and)
+-f(roots)g(of)h(BDD)h(func-)55 4531 y(tions,)32 b(then)e(the)h(list)g
+-(of)g(nodes.)49 b(The)32 b(header)f(is)g(al)o(w)o(ays)g(represented)h
+-(in)f(te)o(xt)f(format)h(\(also)g(for)g(binary)55 4651
+-y(\002les\).)g(BDDs,)25 b(ADDs,)f(and)h(CNF)h(\002les)f(share)g(a)g
+-(similar)f(format)g(header)-5 b(.)-44 4855 y Fk(\017)49
+-b Fl(BDD/ADD)40 b(nodes)g(are)h(listed)f(follo)n(wing)e(their)i
+-(numbering,)j(which)d(is)g(produced)g(by)h(a)f(post-order)55
+-4975 y(tra)n(v)o(ersal,)24 b(in)h(such)f(a)h(w)o(ay)g(that)g(a)g(node)f
+-(is)h(al)o(w)o(ays)f(listed)g(after)h(its)f(Then/Else)g(children.)47
+-5179 y(In)32 b(the)f(sequel)g(we)g(describe)h(more)f(in)g(detail)f(the)
+-h(dif)n(ferent)g(formats)g(and)g(procedures)h(a)n(v)n(ailable.)49
+-b(First)-189 5299 y(of)26 b(all,)f(we)h(describe)f(BDDs)h(and)g(ADDs)f
+-(formats)g(and)g(procedure.)33 b(Secondly)-6 b(,)26 b(we)f(concentrate)
+-h(on)f(CNF)i(\002les,)-189 5419 y(i.e.,)e(ho)n(w)f(to)g(translate)g(a)i
+-(BDD)f(or)g(a)g(forest)g(of)f(BDDs)h(into)f(a)h(CNF)h(formula)e(and)h
+-(vice-v)o(ersa.)1794 5800 y(1)p eop
+-%%Page: 2 2
+-2 1 bop -189 218 a Fo(2)143 b(BDD)35 b(and)g(ADD)g(Support)-189
+-441 y Fl(In)23 b(this)f(section)g(we)g(describe)h(format)g(and)f
+-(procedure)h(re)o(garding)f(BDDs)h(and)f(ADDs.)30 b(W)-8
+-b(e)23 b(speci\002cally)g(refer)g(to)-189 562 y(BDDs)h(in)g(the)g
+-(description)e(as)j(ADD)e(may)h(be)g(seen)g(as)h(an)f(e)o(xtension)e
+-(and)i(will)f(be)h(described)g(later)-5 b(.)30 b(First)24
+-b(of)g(all,)-189 682 y(we)29 b(concentrate)f(on)g(the)g(format)g(used)g
+-(to)g(store)g(these)g(structure,)h(then)f(we)g(describe)h(the)f
+-(procedure)h(a)n(v)n(ailable)-189 802 y(to)24 b(store)h(and)g(load)f
+-(them.)-189 1094 y Fj(2.1)119 b(F)m(ormat)-189 1281 y
+-Fl(BDD)30 b(dump)f(\002les)g(are)i(composed)e(of)g(tw)o(o)g(sections:)
+-40 b(The)29 b(header)h(and)g(the)f(list)g(of)h(nodes.)44
+-b(The)30 b(header)g(has)g(a)-189 1402 y(common)c(\(te)o(xt\))h(format,)
+-h(while)e(the)i(list)e(of)h(nodes)g(is)g(either)g(in)g(te)o(xt)g(or)g
+-(binary)g(format.)38 b(In)28 b(te)o(xt)e(format)h(nodes)-189
+-1522 y(are)33 b(represented)f(with)f(redundant)g(informations,)h(where)
+-h(the)f(main)f(goal)g(is)h(readability)-6 b(,)32 b(while)g(the)f
+-(purpose)-189 1642 y(of)i(binary)f(format)g(is)g(minimizing)e(the)i(o)o
+-(v)o(erall)f(storage)h(size)h(for)g(BDD)f(nodes.)54 b(The)32
+-b(header)h(format)f(is)g(k)o(ept)-189 1763 y(common)h(to)h(te)o(xt)g
+-(and)g(binary)g(formats)g(for)h(sak)o(e)f(of)h(simplicity:)47
+-b(No)34 b(particular)g(optimization)f(is)h(presently)-189
+-1883 y(done)29 b(on)f(binary)h(\002le)g(headers,)h(whose)f(size)g(is)f
+-(by)h(f)o(ar)g(dominated)f(by)h(node)f(lists)g(in)g(the)h(case)g(of)g
+-(lar)n(ge)h(BDDs)-189 2003 y(\(se)n(v)o(eral)24 b(thousands)g(of)h(DD)f
+-(nodes\).)-189 2266 y Fi(2.1.1)99 b(Header)-189 2453
+-y Fl(The)23 b(header)h(has)f(the)g(same)g(format)g(both)g(for)g(te)o
+-(xtual)f(and)i(binary)e(dump.)30 b(F)o(or)23 b(sak)o(e)g(of)h
+-(generality)e(and)h(because)-189 2574 y(of)f(dynamic)g(v)n(ariable)g
+-(ordering)g(both)f(v)n(ariable)h(IDs)g(and)g(permutations)2377
+-2537 y Fh(1)2438 2574 y Fl(are)h(included.)29 b(Names)22
+-b(are)h(optionally)-189 2694 y(listed)35 b(for)h(input)f(v)n(ariables)g
+-(and)h(for)h(the)e(stored)h(functions.)63 b(Ne)n(w)36
+-b(auxiliary)f(IDs)h(are)h(also)e(allo)n(wed.)64 b(Only)-189
+-2814 y(the)34 b(v)n(ariables)f(in)g(the)h(true)g(support)f(of)h(the)f
+-(stored)h(BDDs)g(are)h(listed.)56 b(All)34 b(information)e(on)i(v)n
+-(ariables)f(\(IDs,)-189 2935 y(permutations,)c(names,)i(auxiliary)e
+-(IDs\))h(sorted)g(by)g(IDs,)h(and)e(the)o(y)h(are)g(restricted)g(to)f
+-(the)h(true)g(support)f(of)h(the)-189 3055 y(dumped)22
+-b(BDD,)h(while)g(IDs)g(and)f(permutations)g(are)h(referred)i(to)d(the)h
+-(writing)f(BDD)h(manager)-5 b(.)30 b(Names)22 b(can)i(thus)-189
+-3175 y(be)h(sorted)f(by)h(v)n(ariable)f(ordering)h(by)f(permuting)g
+-(them)g(according)h(to)f(the)h(permutations)e(stored)h(in)h(the)f
+-(\002le.)47 3296 y(As)h(an)g(e)o(xample,)f(the)g(header)i(\(in)e(te)o
+-(xt)g(mode\))h(of)f(the)h(ne)o(xt)f(state)h(functions)e(of)i(circuit)g
+-(s27)f(follo)n(ws:)-189 3494 y Fg(.ver)59 b(DDDMP-2.0)-189
+-3615 y(.mode)g(A)-189 3735 y(.varinfo)f(3)-189 3855 y(.dd)h(s27-delta)
+--189 3976 y(.nnodes)f(16)-189 4096 y(.nvars)g(10)-189
+-4216 y(.nsuppvars)g(7)-189 4337 y(.varnames)g(G0)h(G1)g(G2)h(G3)f(G5)g
+-(G6)h(G7)-189 4457 y(.orderedvarnames)c(G0)k(G1)f(G2)g(G3)h(G5)f(G6)g
+-(G7)-189 4578 y(.ids)g(0)g(1)h(2)g(3)f(4)h(5)f(6)-189
+-4698 y(.permids)f(0)i(1)f(2)h(3)f(5)h(7)f(9)-189 4818
+-y(.auxids)f(1)i(2)f(3)h(4)f(5)h(6)g(7)-189 4939 y(.nroots)e(3)-189
+-5059 y(.rootids)g(6)i(-13)f(-16)-189 5179 y(.rootnames)f(G10)h(G11)g
+-(G13)47 5378 y Fl(The)25 b(lines)f(contain)g(the)h(follo)n(wing)e
+-(informations:)p -189 5460 1607 4 v -77 5521 a Ff(1)-40
+-5551 y Fe(The)d(permutation)e(of)i(the)g(i-th)h(v)n(ariable)e(ID)h(is)h
+-(the)f(relati)n(v)o(e)g(position)f(of)h(the)g(v)n(ariable)f(in)i(the)f
+-(ordering.)1794 5800 y Fl(2)p eop
+-%%Page: 3 3
+-3 2 bop -44 218 a Fk(\017)49 b Fl(Dddmp)24 b(v)o(ersion)f(information.)
+--44 411 y Fk(\017)49 b Fl(File)25 b(mode)f(\(A)h(for)g(ASCII)h(te)o
+-(xt,)e(B)h(for)g(binary)g(mode\).)-44 604 y Fk(\017)49
+-b Fl(V)-11 b(ar)n(-e)o(xtra-info)25 b(\(0:)30 b(v)n(ariable)24
+-b(ID,)h(1:)31 b(permID,)24 b(2:)31 b(aux)25 b(ID,)g(3:)30
+-b(v)n(ariable)24 b(name,)h(4)g(no)f(e)o(xtra)h(info\).)-44
+-797 y Fk(\017)49 b Fl(Name)25 b(of)g(dd)f(\(optional\).)-44
+-990 y Fk(\017)49 b Fl(T)-8 b(otal)24 b(number)g(of)h(nodes)g(in)f(the)h
+-(\002le.)-44 1183 y Fk(\017)49 b Fl(Number)24 b(of)h(v)n(ariables)f(of)
+-h(the)g(writing)f(DD)g(manager)-5 b(.)-44 1375 y Fk(\017)49
+-b Fl(Number)24 b(of)h(v)n(ariables)f(in)h(the)f(true)h(support)f(of)h
+-(the)f(stored)h(DDs.)-44 1568 y Fk(\017)49 b Fl(V)-11
+-b(ariable)25 b(names)f(\(optional\))g(for)h(all)g(the)f(v)n(ariables)g
+-(in)h(the)f(BDD/ADD)h(support.)-44 1761 y Fk(\017)49
+-b Fl(V)-11 b(ariable)20 b(names)g(for)h(all)f(the)g(v)n(ariables)f(in)h
+-(the)g(DD)h(manager)f(during)g(the)g(storing)f(phase.)29
+-b(Notice)20 b(that)g(this)55 1882 y(information)k(w)o(as)h(not)g
+-(stored)g(by)g(pre)n(vious)f(v)o(ersions)g(of)i(the)f(same)g(tool.)32
+-b(Full)25 b(backw)o(ard)g(compatibility)55 2002 y(is)f(guaranteed)h(by)
+-g(the)f(present)h(implementation)d(of)j(the)g(tool.)-44
+-2195 y Fk(\017)49 b Fl(V)-11 b(ariable)25 b(IDs.)-44
+-2388 y Fk(\017)49 b Fl(V)-11 b(ariable)25 b(permuted)f(IDs.)-44
+-2581 y Fk(\017)49 b Fl(V)-11 b(ariable)25 b(auxiliary)f(IDs)h
+-(\(optional\).)-44 2774 y Fk(\017)49 b Fl(Number)24 b(of)h(BDD)g
+-(roots.)-44 2967 y Fk(\017)49 b Fl(Inde)o(x)o(es)24 b(of)h(BDD)g(roots)
+-f(\(complemented)g(edges)g(allo)n(wed\).)-44 3160 y Fk(\017)49
+-b Fl(Names)24 b(of)h(BDD)h(roots)e(\(optional\).)-189
+-3332 y(Notice)h(that)f(a)h(\002eld)-189 3504 y Fg(.add)-189
+-3676 y Fl(is)f(present)h(after)g(the)g(dddmp)f(v)o(ersion)f(for)j
+-(\002les)e(containing)g(ADDs.)-189 3936 y Fi(2.1.2)99
+-b(T)-9 b(ext)25 b(F)n(ormat)-189 4124 y Fl(In)g(te)o(xt)f(mode)g(nodes)
+-g(are)i(listed)e(on)g(a)h(te)o(xt)f(line)h(basis.)30
+-b(Each)25 b(a)g(node)f(is)h(represented)g(as)-189 4296
+-y Fg(<Node-index>)57 b([<Var-extra-info>])f(<Var-internal-index>)588
+-4416 y(<Then-index>)h(<Else-index>)-189 4588 y Fl(where)25
+-b(all)g(inde)o(x)o(es)e(are)j(inte)o(ger)e(numbers.)47
+-4709 y(This)h(format)g(is)g(redundant)f(\(due)i(to)f(the)g(node)g
+-(ordering,)g Fd(<)p Fl(Node-inde)o(x)p Fd(>)f Fl(is)g(and)i
+-(incremental)e(inte)o(ger\))-189 4829 y(b)n(ut)g(we)h(k)o(eep)g(it)g
+-(for)g(readability)-6 b(.)47 4949 y Fd(<)p Fl(V)-11 b(ar)n(-e)o
+-(xtra-info)p Fd(>)34 b Fl(\(optional)e(redundant)i(\002eld\))g(is)f
+-(either)h(an)g(inte)o(ger)f(\(ID,)h(PermID,)g(or)g(auxID\))g(or)g(a)
+--189 5070 y(string)k(\(v)n(ariable)h(name\).)75 b Fd(<)p
+-Fl(V)-11 b(ar)n(-internal-inde)o(x)p Fd(>)38 b Fl(is)h(an)g(internal)g
+-(v)n(ariable)g(inde)o(x:)59 b(V)-11 b(ariables)39 b(in)g(the)g(true)
+--189 5190 y(support)25 b(of)h(the)g(stored)g(BDDs)g(are)h(numbered)e
+-(with)g(ascending)h(inte)o(gers)f(starting)g(from)h(0,)g(and)g(follo)n
+-(wing)e(the)-189 5311 y(v)n(ariable)g(ordering.)31 b
+-Fd(<)p Fl(Then-inde)o(x)p Fd(>)23 b Fl(and)i Fd(<)p Fl(Else-inde)o(x)p
+-Fd(>)e Fl(are)j(signed)e(inde)o(x)o(es)f(of)i(children)f(nodes.)47
+-5431 y(In)h(the)f(follo)n(wing,)f(we)i(report)f(the)g(list)g(of)h
+-(nodes)f(of)g(the)h(s27)f(ne)o(xt)f(state)i(functions)e(\(see)i(pre)n
+-(vious)e(header)-189 5551 y(e)o(xample\):)1794 5800 y(3)p
+-eop
+-%%Page: 4 4
+-4 3 bop -189 218 a Fg(.nodes)-189 338 y(1)60 b(T)f(1)h(0)f(0)-189
+-459 y(2)h(G7)f(6)g(1)h(-1)-189 579 y(3)g(G5)f(4)g(1)h(2)-189
+-699 y(4)g(G3)f(3)g(3)h(1)-189 820 y(5)g(G1)f(1)g(1)h(4)-189
+-940 y(6)g(G0)f(0)g(5)h(-1)-189 1061 y(7)g(G6)f(5)g(1)h(-1)-189
+-1181 y(8)g(G5)f(4)g(1)h(-7)-189 1301 y(9)g(G6)f(5)g(1)h(-2)-189
+-1422 y(10)f(G5)h(4)f(1)h(-9)-189 1542 y(11)f(G3)h(3)f(10)h(8)-189
+-1662 y(12)f(G1)h(1)f(8)h(11)-189 1783 y(13)f(G0)h(0)f(5)h(12)-189
+-1903 y(14)f(G2)h(2)f(1)h(-1)-189 2024 y(15)f(G2)h(2)f(1)h(-2)-189
+-2144 y(16)f(G1)h(1)f(14)h(15)-189 2264 y(.end)-189 2468
+-y Fl(The)27 b(list)f(is)h(enclosed)g(between)g(the)g
+-Fg(.nodes)f Fl(and)h Fg(.end)f Fl(lines.)37 b(First)27
+-b(node)g(is)g(the)g(one)g(constant,)f(each)i(node)-189
+-2588 y(contains)c(the)h(optional)e(v)n(ariable)h(name.)47
+-2708 y(F)o(or)29 b(ADDs)f(more)h(than)f(one)h(constant)e(is)i(stored)f
+-(in)g(the)g(\002le.)43 b(Each)29 b(constant)f(has)g(the)h(same)f
+-(format)h(we)-189 2829 y(ha)n(v)o(e)c(just)e(analyzed)i(for)g(the)g
+-(BDD)g(b)n(ut)g(the)f(represented)h(v)n(alue)f(is)h(stored)f(as)h(a)g
+-(\003oat)g(number)-5 b(.)-189 3095 y Fi(2.1.3)99 b(Binary)25
+-b(F)n(ormat)-189 3283 y Fl(The)h(binary)g(format)f(is)h(not)f(allo)n
+-(wed)g(for)i(ADDs.)33 b(As)26 b(a)h(consequence)f(we)g(concentrate)g
+-(only)f(on)h(BDDs)g(in)g(this)-189 3403 y(section.)k(In)25
+-b(binary)f(mode)h(nodes)f(are)i(represented)f(as)g(a)g(sequence)g(of)g
+-(bytes,)f(encoding)g(tuples)-189 3606 y Fg(<Node-code>)-189
+-3727 y([<Var-internal-info>])-189 3847 y([<Then-info>])-189
+-3968 y([<Else-info>])-189 4171 y Fl(in)30 b(an)g(optimized)f(w)o(ay)-6
+-b(.)46 b(Only)29 b(the)h(\002rst)g(byte)g(\(code\))h(is)e(mandatory)-6
+-b(,)30 b(while)g(inte)o(ger)f(inde)o(x)o(es)g(are)i(represented)-189
+-4291 y(in)c(absolute)f(or)h(relati)n(v)o(e)f(mode,)h(where)h(relati)n
+-(v)o(e)e(means)g(of)n(fset)h(with)f(respect)i(to)e(a)i(Then/Else)e
+-(node)h(info.)37 b(The)-189 4412 y(best)23 b(between)g(absolute)f(and)h
+-(relati)n(v)o(e)e(representation)i(is)f(chosen)h(and)g(relati)n(v)o(e)f
+-(1)h(is)f(directly)g(coded)h(in)g Fd(<)p Fl(Node-)-189
+-4532 y(code)p Fd(>)e Fl(without)f(an)o(y)g(e)o(xtra)h(info.)29
+-b(Suppose)21 b(V)-11 b(ar\(NodeId\),)22 b(Then\(NodeId\))f(and)g
+-(Else\(NodeId\))f(represent)i(infos)-189 4652 y(about)i(a)h(gi)n(v)o
+-(en)f(node.)30 b Fd(<)p Fl(Node-code)p Fd(>)25 b Fl(is)f(a)h(byte)g
+-(which)f(contains)g(the)h(follo)n(wing)e(bit)h(\002elds)h(\(MSB)g(to)g
+-(LSB\))-44 4856 y Fk(\017)49 b Fl(Unused)24 b(:)31 b(1)24
+-b(bit)-44 5059 y Fk(\017)49 b Fl(V)-11 b(ariable:)30
+-b(2)25 b(bits,)f(one)h(of)g(the)f(follo)n(wing)f(codes)171
+-5288 y Fi(\226)49 b Fl(DDDMP)p 636 5288 30 4 v 35 w(ABSOLUTE)p
+-1191 5288 V 36 w(ID:)22 b(V)-11 b(ar\(NodeId\))22 b(is)f(represented)h
+-(in)g(absolute)f(form)g(as)h Fd(<)p Fl(V)-11 b(ar)n(-internal-)270
+-5408 y(info)p Fd(>)24 b Fl(=)h(V)-11 b(ar\(NodeId\))25
+-b(follo)n(ws)e(\(absolute)i(info\))1794 5800 y(4)p eop
+-%%Page: 5 5
+-5 4 bop 171 218 a Fi(\226)49 b Fl(DDDMP)p 636 218 30
+-4 v 35 w(RELA)-11 b(TIVE)p 1147 218 V 36 w(ID:)32 b(V)-11
+-b(ar\(NodeId\))32 b(is)g(represented)g(in)f(relati)n(v)o(e)g(form)h(as)
+-g Fd(<)p Fl(V)-11 b(ar)n(-internal-)270 338 y(info\277)24
+-b(=)h(Min\(V)-11 b(ar\(Then\(NodeId\)\),V)g(ar\(Else\(NodeId\)\)\)-V)g
+-(ar\(NodeId\))171 500 y Fi(\226)49 b Fl(DDDMP)p 636 500
+-V 35 w(RELA)-11 b(TIVE)p 1147 500 V 36 w(1:)27 b(the)19
+-b(\002eld)g Fd(<)p Fl(V)-11 b(ar)n(-internal-info)p Fd(>)18
+-b Fl(does)h(not)f(follo)n(w)-6 b(,)18 b(because)h(V)-11
+-b(ar\(NodeId\))270 620 y(=)25 b(Min\(V)-11 b(ar\(Then\(NodeId\)\),V)g
+-(ar\(Else\(NodeId\)\)\)-1)171 782 y Fi(\226)49 b Fl(DDDMP)p
+-636 782 V 35 w(TERMIN)m(AL:)24 b(Node)h(is)f(a)h(terminal,)f(no)g(v)n
+-(ar)h(info)g(required)-44 1011 y Fk(\017)49 b Fl(T)25
+-b(:)f(2)h(bits,)f(with)g(codes)h(similar)e(to)i(V)171
+-1214 y Fi(\226)49 b Fl(DDDMP)p 636 1214 V 35 w(ABSOLUTE)p
+-1191 1214 V 36 w(ID:)20 b Fd(<)p Fl(Then-info)p Fd(>)f
+-Fl(is)h(represented)g(in)g(absolute)f(form)h(as)g Fd(<)p
+-Fl(Then-info)p Fd(>)270 1334 y Fl(=)25 b(Then\(NodeId\))171
+-1496 y Fi(\226)49 b Fl(DDDMP)p 636 1496 V 35 w(RELA)-11
+-b(TIVE)p 1147 1496 V 36 w(ID:)28 b(Then\(NodeId\))f(is)g(represented)h
+-(in)g(relati)n(v)o(e)e(form)i(as)g Fd(<)p Fl(Then-info)p
+-Fd(>)270 1617 y Fl(=)d(Nodeid-Then\(NodeId\))171 1779
+-y Fi(\226)49 b Fl(DDDMP)p 636 1779 V 35 w(RELA)-11 b(TIVE)p
+-1147 1779 V 36 w(1:)30 b(no)25 b Fd(<)p Fl(Then-info)p
+-Fd(>)f Fl(follo)n(ws,)f(because)i(Then\(NodeId\))g(=)g(NodeId-1)171
+-1941 y Fi(\226)49 b Fl(DDDMP)p 636 1941 V 35 w(TERMIN)m(AL:)24
+-b(Then)h(Node)f(is)h(a)g(terminal,)f(no)g(info)h(required)f(\(for)i(R)l
+-(OBDDs\))-44 2144 y Fk(\017)49 b Fl(Ecompl)24 b(:)30
+-b(1)25 b(bit,)f(if)h(1)g(means)f(that)g(the)h(else)g(edge)g(is)f
+-(complemented)-44 2347 y Fk(\017)49 b Fl(E)25 b(:)f(2)h(bits,)f(with)g
+-(codes)h(and)f(meanings)g(as)h(for)g(the)g(Then)f(edge)-189
+-2551 y(DD)35 b(node)f(codes)h(are)h(written)e(as)h(one)g(byte.)60
+-b Fd(<)p Fl(V)-11 b(ar)n(-internal-inde)o(x)p Fd(>)p
+-Fl(,)36 b Fd(<)p Fl(Then-inde)o(x)p Fd(>)p Fl(,)g Fd(<)p
+-Fl(Else-inde)o(x)p Fd(>)e Fl(\(if)-189 2671 y(required\))25
+-b(are)h(represented)f(as)g(unsigned)e(inte)o(ger)h(v)n(alues)g(on)h(a)g
+-(suf)n(\002cient)f(set)h(of)g(bytes)f(\(MSByte)h(\002rst\).)47
+-2792 y(Inte)o(gers)h(of)f(an)o(y)h(length)e(are)j(written)e(as)h
+-(sequences)g(of)g(\224link)o(ed\224)f(bytes)g(\(MSByte)h(\002rst\).)34
+-b(F)o(or)26 b(each)g(byte)-189 2912 y(7)f(bits)f(are)h(used)g(for)g
+-(data)g(and)f(one)h(\(MSBit\))g(as)g(link)f(with)g(a)h(further)g(byte)g
+-(\(MSB)g(=)g(1)g(means)f(one)h(more)g(byte\).)47 3032
+-y(Lo)n(w)f(le)n(v)o(el)g(read/write)h(of)g(bytes)f(\002lters)h
+-Fd(<)p Fl(CR)p Fd(>)p Fl(,)g Fd(<)p Fl(LF)p Fd(>)g Fl(and)g
+-Fd(<)p Fl(ctrl-Z)p Fd(>)f Fl(through)g(escape)h(sequences.)-189
+-3327 y Fj(2.2)119 b(Implementation)-189 3515 y Fl(Store)24
+-b(and)g(load)g(for)g(single)g(Boolean)g(functions)f(and)h(arrays)g(of)g
+-(Boolean)g(functions)f(are)i(implemented.)k(More-)-189
+-3635 y(o)o(v)o(er)l(,)37 b(the)e(current)h(presentation)f(includes)f
+-(functions)h(to)g(retrie)n(v)o(e)g(v)n(ariables)f(names,)k(auxiliary)d
+-(identi\002erss,)-189 3756 y(and)c(all)g(the)g(information)f(contained)
+-h(in)f(the)h(header)h(of)f(the)h(\002les.)50 b(This)30
+-b(information)g(can)h(be)h(used)f(as)g(a)g(pre-)-189
+-3876 y(processing)19 b(step)g(for)i(load)e(operations.)28
+-b(These)20 b(functions)f(allo)n(w)f(to)i(o)o(v)o(ercome)f(fe)n(w)g
+-(limitations)f(of)h(the)h(pre)n(vious)-189 3997 y(implementations.)-189
+-4263 y Fi(2.2.1)99 b(Storing)25 b(Decision)g(Diagrams)-189
+-4450 y Fc(Dddmp)p 111 4450 V 35 w(cuddBddStor)l(e)f Fl(and)h
+-Fc(Dddmp)p 1195 4450 V 35 w(cuddBddArr)o(ayStor)l(e)e
+-Fl(are)j(the)f(tw)o(o)f(store)h(functions,)f(used)h(to)g(store)f(sin-)
+--189 4571 y(gle)f(BDD)h(or)g(a)f(forest)h(of)f(BDDs,)h(respecti)n(v)o
+-(ely)-6 b(.)28 b(Internally)-6 b(,)23 b Fc(Dddmp)p 2275
+-4571 V 35 w(cuddBddStor)l(e)f Fl(b)n(uilds)g(a)i(dummy)e(1)h(entry)-189
+-4691 y(array)j(of)e(BDDs,)h(and)g(calls)g Fc(dddmp)p
+-1102 4691 V 35 w(cuddBddArr)o(ayStor)l(e)p Fl(.)47 4811
+-y(Since)30 b(con)l(v)o(ersion)e(from)h(DD)h(pointers)e(to)h(inte)o(ger)
+-f(is)h(required,)i(DD)e(nodes)g(are)h(temporarily)e(remo)o(v)o(ed)-189
+-4932 y(from)23 b(the)f(unique)h(hash.)29 b(This)23 b(mak)o(es)f(room)g
+-(in)h(their)f Fc(ne)n(xt)h Fl(\002eld)h(to)e(store)h(node)f(IDs.)30
+-b(Nodes)23 b(are)h(re-link)o(ed)e(after)-189 5052 y(the)i(store)g
+-(operation,)g(possible)f(in)g(a)i(modi\002ed)e(order)-5
+-b(.)31 b(Dumping)22 b(is)i(either)g(in)g(te)o(xt)f(or)i(binary)f(form.)
+-30 b(Both)24 b(a)g(\002le)-189 5173 y(pointer)31 b(\()p
+-Fc(fp)p Fl(\))g(and)g(a)h(\002le)g(name)f(\()p Fc(fname)p
+-Fl(\))h(are)g(pro)o(vided)e(as)h(inputs)f(parameters)i(to)f(store)g
+-(routines.)50 b(BDDs)31 b(are)-189 5293 y(stored)c(to)g(the)g(already)g
+-(open)h(\002le)f Fc(fp)p Fl(,)h(if)f(not)g(NULL.)g(Otherwise)f(\002le)i
+-(whose)f(name)g(is)g Fc(fname)g Fl(is)g(opened.)38 b(This)-189
+-5413 y(is)24 b(intended)g(to)h(allo)n(w)f(either)g(DD)h(storage)g
+-(within)e(\002les)i(containing)f(other)g(data,)h(or)g(to)g(speci\002c)g
+-(\002les.)1794 5800 y(5)p eop
+-%%Page: 6 6
+-6 5 bop -189 218 a Fi(2.2.2)99 b(Loading)25 b(Decision)g(Diagrams)-189
+-405 y Fc(Dddmp)p 111 405 30 4 v 35 w(cuddBddLoad)37 b
+-Fl(and)h Fc(Dddmp)p 1219 405 V 35 w(cuddBddArr)o(ayLoad)f
+-Fl(are)h(the)g(load)g(functions,)i(which)e(read)g(a)g(BDD)-189
+-526 y(dump)24 b(\002le.)47 646 y(F)o(ollo)n(wing)34 b(the)h(store)h
+-(function,)h(the)f(main)f(BDD)h(load)f(function,)j Fc(Dddmp)p
+-2813 646 V 35 w(cuddBddLoad)p Fl(,)f(is)f(imple-)-189
+-767 y(mented)g(by)g(calling)f(the)h(main)g(BDD-array)h(loading)f
+-(function)f Fc(Dddmp)p 2466 767 V 35 w(cuddBddArr)o(ayLoad)p
+-Fl(.)63 b(A)37 b(dynamic)-189 887 y(v)o(ector)24 b(of)h(DD)g(pointers)f
+-(is)g(temporarily)g(allocated)h(to)f(support)g(con)l(v)o(ersion)f(from)
+-i(DD)g(inde)o(x)o(es)e(to)h(pointers.)47 1007 y(Se)n(v)o(eral)40
+-b(criteria)f(are)i(supported)d(for)i(v)n(ariable)f(match)g(between)g
+-(\002le)h(and)g(DD)f(manager)l(,)k(practically)-189 1128
+-y(allo)n(wing)37 b(v)n(ariable)h(permutations)f(or)i(compositions)d
+-(while)i(loading)g(DDs.)71 b(V)-11 b(ariable)39 b(match)f(between)h
+-(the)-189 1248 y(DD)32 b(manager)g(and)g(the)g(BDD)g(\002le)g(is)g
+-(optionally)e(based)i(in)f Fc(IDs)p Fl(,)j Fc(perids)p
+-Fl(,)f Fc(varnames)p Fl(,)g Fc(var)o(auxids)p Fl(;)g(also)f(direct)-189
+-1369 y(composition)j(between)j Fc(IDs)g Fl(and)f Fc(composeids)g
+-Fl(is)g(supported.)68 b(The)38 b Fc(varmatc)o(hmode)e
+-Fl(parameter)i(is)f(used)g(to)-189 1489 y(select)27 b(mathing)e(mode.)
+-37 b(More)27 b(in)f(detail,)h(tw)o(o)f(match)h(modes)f(use)h(the)f
+-(information)g(within)f(the)i(DD)g(manager)l(,)-189 1609
+-y(the)e(other)f(ones)h(use)g(e)o(xtra)f(information,)f(which)i(support)
+-f(an)o(y)g(v)n(ariable)g(remap)h(or)g(change)g(in)f(the)h(ordering.)-44
+-1813 y Fk(\017)49 b Fl(v)n(armatchnode=DDDMP)p 1040 1813
+-V 35 w(V)-13 b(AR)p 1272 1813 V 35 w(MA)i(TCHIDS)19 b(allo)n(ws)f
+-(loading)g(a)h(DD)g(k)o(eeping)f(v)n(ariable)g(IDs)h(unchanged)55
+-1933 y(\(re)o(gardless)24 b(of)h(the)f(v)n(ariable)h(ordering)f(of)h
+-(the)g(reading)f(manager)-5 b(.)55 2095 y(This)24 b(is)g(useful,)g(for)
+-h(e)o(xample,)f(when)g(sw)o(apping)g(DDs)g(to)h(\002le)g(and)f
+-(restoring)g(them)g(later)h(from)f(\002le,)h(after)55
+-2215 y(possible)e(v)n(ariable)i(reordering)g(acti)n(v)n(ations.)-44
+-2419 y Fk(\017)49 b Fl(v)n(armatchnode=DDDMP)p 1040 2419
+-V 35 w(V)-13 b(AR)p 1272 2419 V 35 w(MA)i(TCHPERMIDS)36
+-b(is)e(used)h(to)f(allo)n(w)g(v)n(ariable)g(match)h(according)55
+-2539 y(to)h(the)h(position)e(in)i(the)g(ordering)f(\(retrie)n(v)o(ed)g
+-(by)h(array)h(of)f(permutations)e(stored)h(on)h(\002le)g(and)g(within)
+-55 2660 y(the)h(reading)g(DD)h(manager\).)72 b(A)38 b(possible)f
+-(application)h(is)g(retrie)n(ving)f(BDDs)i(stored)f(after)h(dynamic)55
+-2780 y(reordering,)28 b(from)g(a)g(DD)g(manager)g(where)h(all)e(v)n
+-(ariable)h(IDs)f(map)h(their)f(position)g(in)g(the)h(ordering,)g(and)55
+-2900 y(the)d(loaded)f(BDD)h(k)o(eeps)g(the)g(ordering)f(as)h(stored)f
+-(on)h(\002le.)-44 3104 y Fk(\017)49 b Fl(v)n(armatchnode=DDDMP)p
+-1040 3104 V 35 w(V)-13 b(AR)p 1272 3104 V 35 w(MA)i(TCHN)m(AMES)26
+-b(requires)h(a)h(not)e(NULL)h(v)n(armatchmodes)f(param-)55
+-3224 y(eter;)34 b(this)c(is)g(a)h(v)o(ector)g(of)g(strings)e(in)i
+-(one-to-one)f(correspondence)h(with)f(v)n(ariable)h(IDs)f(of)h(the)g
+-(reading)55 3344 y(manager)-5 b(.)40 b(V)-11 b(ariables)28
+-b(in)g(the)g(DD)g(\002le)g(read)h(are)g(matched)f(with)f(manager)h(v)n
+-(ariables)f(according)h(to)g(their)55 3465 y(name)35
+-b(\(a)h(not)f(NULL)g(v)n(arnames)g(parameter)h(w)o(as)f(required)h
+-(while)f(storing)f(the)h(DD)g(\002le\).)64 b(The)35 b(most)55
+-3585 y(common)c(usage)h(of)g(this)f(feature)i(is)e(in)h(combination)e
+-(with)i(a)g(v)n(ariable)g(ordering)g(stored)f(on)h(a)g(\002le)h(and)55
+-3706 y(based)28 b(on)h(v)n(ariables)f(names.)41 b(Names)29
+-b(must)e(be)i(loaded)f(in)g(an)h(array)g(of)g(strings)e(and)i(passed)f
+-(to)g(the)h(DD)55 3826 y(load)24 b(procedure.)-44 4029
+-y Fk(\017)49 b Fl(v)n(armatchnode=DDDMP)p 1040 4029 V
+-35 w(V)-13 b(AR)p 1272 4029 V 35 w(MA)i(TCHIDS)25 b(has)g(a)g(meaning)f
+-(similar)g(to)55 4150 y(DDDMP)p 421 4150 V 36 w(V)-13
+-b(AR)p 654 4150 V 35 w(MA)i(TCHN)m(AMES)26 b(b)n(ut)h(inte)o(ger)f
+-(auxiliary)g(IDs)h(are)h(used)f(instead)f(of)h(strings.)36
+-b(The)28 b(ad-)55 4270 y(ditional)23 b(not)h(NULL)h(v)n(armathauxids)e
+-(parameter)i(is)g(needed.)-44 4474 y Fk(\017)49 b Fl(v)n
+-(armatchnode=DDDMP)p 1040 4474 V 35 w(V)-13 b(AR)p 1272
+-4474 V 35 w(COMPOSEIDS,)38 b(uses)f(the)f(additional)f(v)n
+-(arcomposeids)g(parameter)55 4594 y(as)25 b(an)g(array)g(of)g(v)n
+-(ariable)f(IDs)h(to)g(be)g(composed)f(with)g(IDs)g(stored)h(in)f
+-(\002le.)-189 4860 y Fi(2.2.3)99 b(DD)25 b(Load/Stor)n(e)h(and)f(V)-9
+-b(ariable)25 b(Ordering)-189 5048 y Fl(Loading)31 b(of)i(Decision)e
+-(Diagrams)h(from)g(\002le)g(supports)f(dif)n(ferent)h(v)n(ariables)g
+-(ordering)f(strate)o(gies,)i(as)g(already)-189 5168 y(pointed)23
+-b(out)h(in)g(the)h(pre)n(vious)e(section.)30 b(This)24
+-b(allo)n(ws)f(or)h(e)o(xample)g(storing)f(dif)n(ferent)i(BDDs)f(each)h
+-(with)f(its)g(o)n(wn)-189 5288 y(v)n(ariable)29 b(ordering,)h(and)g(to)
+-f(mer)n(ge)h(them)f(within)f(the)i(same)f(DD)h(manager)f(by)h(means)f
+-(of)g(proper)h(load)f(opera-)-189 5409 y(tions.)44 b(W)-8
+-b(e)30 b(suggest)f(using)f(DDDMP)p 1175 5409 V 36 w(V)-13
+-b(AR)p 1408 5409 V 36 w(MA)i(TCHIDS)30 b(whene)n(v)o(er)f(IDs)g(k)o
+-(eeps)h(on)f(representing)h(the)f(same)-189 5529 y(entities)24
+-b(while)h(changing)f(v)n(ariable)h(ordering.)31 b(If)25
+-b(this)f(is)h(not)f(true,)h(v)n(ariable)g(names)g(\(if)g(a)n(v)n
+-(ailable\))f(or)i(auxiliary)1794 5800 y(6)p eop
+-%%Page: 7 7
+-7 6 bop -189 218 a Fl(IDs)34 b(are)h(a)g(good)e(w)o(ay)i(to)f
+-(represent)g(in)l(v)n(ariant)f(attrib)n(uted)g(of)i(v)n(ariables)e
+-(across)h(se)n(v)o(eral)g(runs)g(with)f(dif)n(ferent)-189
+-338 y(orderings.)50 b(DDDMP)p 629 338 30 4 v 35 w(V)-13
+-b(AR)p 861 338 V 36 w(COMPOSEIDS)32 b(is)f(an)h(alternati)n(v)o(e)e
+-(solution,)h(that)g(practically)f(corresponds)h(to)-189
+-459 y(cascading)23 b(DDDMP)p 593 459 V 36 w(V)-13 b(AR)p
+-826 459 V 36 w(MA)i(TCHIDS)23 b(and)h(v)n(ariable)f(composition)e(with)
+-h(a)i(gi)n(v)o(en)e(array)i(of)g(ne)n(w)f(v)n(ariables.)-189
+-797 y Fo(3)143 b(CNF)35 b(Support)-189 1050 y Fj(3.1)119
+-b(F)m(ormat)-189 1237 y Fl(Gi)n(v)o(en)30 b(a)h(BDD)g(representing)g(a)
+-g(function)f Fd(f)11 b Fl(,)32 b(we)f(de)n(v)o(elop)f(three)h(basic)g
+-(possible)e(w)o(ays)i(to)g(store)f(it)h(as)g(a)g(CNF)-189
+-1358 y(formula.)54 b(In)33 b(each)h(method)d(the)i(set)g(of)f(clauses)h
+-(is)f(written)h(after)g(an)g(header)g(part.)55 b(Only)32
+-b(the)h(te)o(xt)f(format)g(is)-189 1478 y(allo)n(wed.)-189
+-1743 y Fi(3.1.1)99 b(Header)-189 1931 y Fl(The)23 b(header)h(part)f(of)
+-g(each)h(CNF)g(\002le)f(has)g(basically)g(the)f(same)h(format)g
+-(analyzed)g(for)h(the)f(BDD/ADD)g(\002les.)30 b(F)o(or)-189
+-2051 y(e)o(xample)h(the)g Fg(.rootids)f Fl(line)h(indicates)f(the)i(be)
+-o(ginning)d(of)j(each)g(CNF)g(formula)f(represented)h(by)f(a)h(single)
+--189 2172 y(BDD.)j(T)-8 b(o)34 b(be)g(compatible)f(with)h(the)g(DIMA)l
+-(CS)h(format)f(each)h(header)f(line)g(start)g(with)g(the)g(character)h
+-(\223c\224)g(to)-189 2292 y(indicate)24 b(a)h(comment.)-189
+-2557 y Fi(3.1.2)99 b(T)-9 b(ext)25 b(F)n(ormat)-189 2745
+-y Fl(The)j(\002rst)g(method,)g(which)f(we)h(call)g Fi(Single-Node-Cut)p
+-Fl(,)j(models)26 b(each)j(BDD)f(nodes,)h(b)n(ut)e(the)h(ones)f(with)h
+-(both)-189 2865 y(the)c(children)g(equal)h(to)f(the)g(constant)g(node)g
+-Fb(1)p Fl(,)g(as)h(a)g(multiple)o(x)o(er)-5 b(.)27 b(Each)e(multiple)o
+-(x)o(er)d(has)i(tw)o(o)g(data)h(inputs)e(\(i.e.,)-189
+-2985 y(the)k(node)h(children\),)f(a)h(selection)f(input)f(\(i.e.,)i
+-(the)g(node)f(v)n(ariable\))g(and)h(one)f(output)f(\(i.e.,)i(the)g
+-(function)e(v)n(alue\))-189 3106 y(whose)h(v)n(alue)f(is)h(assigned)f
+-(to)h(an)g(additional)f(CNF)i(v)n(ariable.)37 b(The)27
+-b(\002nal)h(number)e(of)h(v)n(ariables)g(is)f(equal)h(to)g(the)-189
+-3226 y(number)d(of)h(original)f(BDD)h(v)n(ariables)f(plus)g(the)h
+-(number)f(of)h(\223internal\224)g(nodes)f(of)h(the)g(BDD.)47
+-3346 y(The)k(second)f(method,)g(which)h(we)f(call)h Fi(Maxterm-Cut)p
+-Fl(,)h(create)g(clauses)e(starting)g(from)g Fd(f)39 b
+-Fl(corresponds)-189 3467 y(to)25 b(the)h(of)n(f-set)g(\(i.e.,)f(all)h
+-(the)g(paths-cubes)f(from)g(the)h(root)g(node)f(to)h(the)f(terminal)g
+-Fg(0)p Fl(\))h(of)g(the)g(function)e Fd(f)11 b Fl(.)34
+-b(W)l(ithin)-189 3587 y(the)29 b(BDD)g(for)g Fd(f)11
+-b Fl(,)30 b(such)f(clauses)f(are)i(found)e(by)h(follo)n(wing)e(all)i
+-(the)f(paths)h(from)f(the)h(root)g(node)f(of)h(the)g(BDD)g(to)-189
+-3708 y(the)c(constant)f(node)g Fb(0)p Fl(.)31 b(The)25
+-b(\002nal)g(number)f(of)h(v)n(ariables)f(is)g(equal)h(to)f(the)h
+-(number)f(of)h(original)f(BDD)h(v)n(ariables.)47 3828
+-y(The)k(third)g(method,)g(which)g(we)g(call)g Fi(A)-5
+-b(uxiliary-V)c(ariable-Cut)p Fl(,)30 b(is)f(a)h(trade-of)n(f)f(between)
+-g(the)g(\002rst)g(tw)o(o)-189 3948 y(strate)o(gies.)69
+-b(Internal)37 b(v)n(ariables,)j(i.e.,)h(cutting)c(points,)j(are)e
+-(added)g(in)f(order)h(to)g(decompose)f(the)h(BDD)g(into)-189
+-4069 y(multiple)27 b(sub-trees)i(each)h(of)f(which)f(is)h(stored)g
+-(follo)n(wing)e(the)h(second)h(strate)o(gy)-6 b(.)42
+-b(The)29 b(trade-of)n(f)g(is)g(guided)f(by)-189 4189
+-y(the)23 b(cutting)f(point)g(selection)g(strate)o(gy)-6
+-b(,)22 b(and)h(we)g(e)o(xperiment)f(with)g(tw)o(o)g(methodologies.)28
+-b(In)23 b(the)g(\002rst)g(method,)g(a)-189 4310 y(ne)n(w)f(CNF)h(v)n
+-(ariable)f(is)f(inserted)h(in)g(correspondence)g(to)g(the)g(shared)g
+-(nodes)g(of)g(the)h(BDD,)f(i.e.,)h(the)f(nodes)f(which)-189
+-4430 y(ha)n(v)o(e)29 b(more)g(than)h(one)f(incoming)f(edge.)45
+-b(This)29 b(technique,)h(albeit)e(optimizing)g(the)h(number)g(of)h
+-(literals)e(stored,)-189 4550 y(can)35 b(produce)g(clauses)f(with)g(a)h
+-(high)f(number)h(of)f(literals)1894 4514 y Fh(2)1933
+-4550 y Fl(.)60 b(T)-8 b(o)35 b(a)n(v)n(oid)f(this)g(dra)o(wback,)j(the)
+-e(second)f(method,)-189 4671 y(introduces)28 b(all)g(the)g(pre)n
+-(viously)e(indicated)i(cutting)f(points)g(more)h(the)h(ones)f
+-(necessary)g(to)g(break)h(the)f(length)g(of)-189 4791
+-y(the)d(path)f(to)h(a)g(maximum)e(\(user\))i(selected)g(v)n(alue.)47
+-4911 y(Actually)-6 b(,)37 b(all)f(the)f(methods)g(described)h(abo)o(v)o
+-(e)e(can)j(be)e(re-conducted)h(to)g(the)f(basic)h(idea)g(of)g(possibly)
+--189 5032 y(breaking)24 b(the)h(BDD)g(through)f(the)g(use)h(of)f
+-(additional)g(cutting)f(v)n(ariables)h(and)h(dumping)e(the)h(paths)g
+-(between)h(the)-189 5152 y(root)34 b(of)h(the)f(BDD,)h(the)g(cutting)e
+-(v)n(ariables)h(and)g(the)h(terminal)e(nodes.)60 b(Such)35
+-b(internal)f(cutting)f(v)n(ariables)h(are)-189 5273 y(added)25
+-b(al)o(w)o(ays)f(\(for)i(each)f(node\),)g(ne)n(v)o(er)f(or)h(sometimes)
+-e(respecti)n(v)o(ely)-6 b(.)p -189 5360 1607 4 v -77
+-5422 a Ff(2)-40 5452 y Fe(This)27 b(v)n(alue)f(is)i(superiorly)d
+-(limited)h(by)g(the)h(number)e(of)h(v)n(ariables)g(of)g(the)h(BDD,)g
+-(i.e.,)h(the)f(longest)f(path)g(from)g(the)h(root)f(to)g(the)-189
+-5551 y(terminal)19 b(node.)1794 5800 y Fl(7)p eop
+-%%Page: 8 8
+-8 7 bop 47 218 a Fl(While)33 b(the)f Fc(Single-Node-Cut)h
+-Fl(method)f(minimizes)f(the)i(length)f(of)h(the)f(clauses)h(produced,)i
+-(b)n(ut)d(it)g(also)-189 338 y(requires)d(the)h(higher)f(number)g(of)g
+-(CNF)i(v)n(ariables,)e(the)h Fc(Maxterm-Cut)f Fl(technique)g(minimizes)
+-f(the)h(number)g(of)-189 459 y(CNF)36 b(v)n(ariables)d(required.)61
+-b(This)34 b(adv)n(antage)g(is)g(counter)n(-balanced)h(by)f(the)h(f)o
+-(act)g(that)f(in)g(the)h(w)o(orst)f(case)h(the)-189 579
+-y(number)23 b(of)g(clauses,)g(as)h(well)e(as)i(the)f(total)f(number)h
+-(of)g(literals,)g(produced)g(is)g(e)o(xponential)e(in)i(the)g(BDD)h
+-(size)f(\(in)-189 699 y(terms)28 b(of)i(number)e(of)h(nodes\).)43
+-b(The)29 b(application)f(of)h(this)f(method)g(is)g(then)h(limited)e(to)
+-i(the)g(cases)g(in)f(which)h(the)-189 820 y(\223of)n(f-set\224)c(of)f
+-(the)g(represented)h(function)f Fd(f)35 b Fl(has)24 b(a)h(small)f
+-(cardinality)-6 b(.)29 b(The)c Fc(A)n(uxiliary-V)-11
+-b(ariable-Cut)22 b Fl(strate)o(gy)h(is)-189 940 y(a)k(trade-of)n(f)h
+-(between)f(the)g(\002rst)g(tw)o(o)g(methods)f(and)h(the)g(ones)f(which)
+-h(gi)n(v)o(es)f(more)h(compact)f(results.)37 b(As)27
+-b(a)h(\002nal)-189 1061 y(remark)f(notice)e(that)h(the)g(method)g(is)f
+-(able)i(to)f(store)g(both)f(monolithic)f(BDDs)j(and)f(conjuncti)n(v)o
+-(e)e(forms.)35 b(In)26 b(each)-189 1181 y(case)f(we)g(generate)h(CNF)f
+-(\002les)g(using)f(the)h(standard)f(DIMA)l(CS)i(format.)-189
+-1365 y Fi(Example)f(1)49 b Fc(F)l(igur)l(e)20 b(1)h(shows)f(an)h(e)n
+-(xample)g(of)f(how)h(our)f(pr)l(ocedur)l(e)h(works)f(to)h(stor)l(e)f(a)
+-h(small)f(monolithic)f(BDD.)-189 1486 y(F)l(igur)l(e)j(1\(a\))h(r)l
+-(epr)l(esents)g(a)g(BDD)g(with)g Fb(4)g Fc(nodes.)30
+-b(BDD)23 b(variables)f(ar)l(e)h(named)g(after)f(inte)l(g)o(er)g(number)
+-o(s)h(r)o(anging)-189 1606 y(fr)l(om)k Fb(1)h Fc(to)g
+-Fb(4)p Fc(,)h(to)f(have)g(an)g(easy-to-follow)f(corr)l(espondence)h
+-(with)g(the)g(CNF)h(variables.)40 b(F)l(igur)l(e)27 b(1\(b\),)i(\(c\))g
+-(and)-189 1727 y(\(d\))c(show)g(the)f(corr)l(esponding)f(CNF)j(r)l(epr)
+-l(esentations)d(g)o(ener)o(ated)h(by)h(our)f(thr)l(ee)h(methods.)30
+-b(As)24 b(in)h(the)f(standar)l(d)-189 1847 y(format)i
+-Fa(p)i Fc(indicates)e(the)h(total)f(number)g(of)h(variables)f(used)h
+-(\()p Fb(4)g Fc(is)g(the)g(minimum)f(value)h(as)g(the)g(BDD)g(itself)f
+-(has)-189 1967 y Fb(4)f Fc(variables\),)e(and)i Fa(cnf)g
+-Fc(the)f(total)g(number)g(of)h(clauses.)47 2088 y(As)i(a)g(\002nal)f(r)
+-l(emark)h(notice)f(that)g(for)g(this)g(speci\002c)h(e)n(xample)g(the)f
+-(\223Maxterm-Cut\224)i(appr)l(oac)o(h)d(is)h(the)h(one)-189
+-2208 y(whic)o(h)36 b(gives)g(the)g(most)f(compact)h(CNF)h(r)l(epr)l
+-(esentation)e(b)n(ut)h(also)f(the)h(clause)g(with)g(the)g(lar)l(g)o
+-(est)g(number)f(of)-189 2328 y(liter)o(als)23 b(\()p
+-Fb(4)p Fc(\).)188 2471 y
+- 6339814 10777681 0 0 11709153 19997655 startTexFig
+- 188 2471 a
+-%%BeginDocument: bdd.eps
+-%!PS-Adobe-2.0 EPSF-2.0
+-%%Title: bdd.eps
+-%%Creator: fig2dev Version 3.2 Patchlevel 3c
+-%%CreationDate: Mon Sep 9 14:21:26 2002
+-%%For: quer at pcsq (Stefano Quer)
+-%%BoundingBox: 0 0 178 304
+-%%Magnification: 1.0000
+-%%EndComments
+-/$F2psDict 200 dict def
+-$F2psDict begin
+-$F2psDict /mtrx matrix put
+-/col-1 {0 setgray} bind def
+-/col0 {0.000 0.000 0.000 srgb} bind def
+-/col1 {0.000 0.000 1.000 srgb} bind def
+-/col2 {0.000 1.000 0.000 srgb} bind def
+-/col3 {0.000 1.000 1.000 srgb} bind def
+-/col4 {1.000 0.000 0.000 srgb} bind def
+-/col5 {1.000 0.000 1.000 srgb} bind def
+-/col6 {1.000 1.000 0.000 srgb} bind def
+-/col7 {1.000 1.000 1.000 srgb} bind def
+-/col8 {0.000 0.000 0.560 srgb} bind def
+-/col9 {0.000 0.000 0.690 srgb} bind def
+-/col10 {0.000 0.000 0.820 srgb} bind def
+-/col11 {0.530 0.810 1.000 srgb} bind def
+-/col12 {0.000 0.560 0.000 srgb} bind def
+-/col13 {0.000 0.690 0.000 srgb} bind def
+-/col14 {0.000 0.820 0.000 srgb} bind def
+-/col15 {0.000 0.560 0.560 srgb} bind def
+-/col16 {0.000 0.690 0.690 srgb} bind def
+-/col17 {0.000 0.820 0.820 srgb} bind def
+-/col18 {0.560 0.000 0.000 srgb} bind def
+-/col19 {0.690 0.000 0.000 srgb} bind def
+-/col20 {0.820 0.000 0.000 srgb} bind def
+-/col21 {0.560 0.000 0.560 srgb} bind def
+-/col22 {0.690 0.000 0.690 srgb} bind def
+-/col23 {0.820 0.000 0.820 srgb} bind def
+-/col24 {0.500 0.190 0.000 srgb} bind def
+-/col25 {0.630 0.250 0.000 srgb} bind def
+-/col26 {0.750 0.380 0.000 srgb} bind def
+-/col27 {1.000 0.500 0.500 srgb} bind def
+-/col28 {1.000 0.630 0.630 srgb} bind def
+-/col29 {1.000 0.750 0.750 srgb} bind def
+-/col30 {1.000 0.880 0.880 srgb} bind def
+-/col31 {1.000 0.840 0.000 srgb} bind def
+-
+-end
+-save
+-newpath 0 304 moveto 0 0 lineto 178 0 lineto 178 304 lineto closepath clip newpath
+--51.0 319.0 translate
+-1 -1 scale
+-
+-/cp {closepath} bind def
+-/ef {eofill} bind def
+-/gr {grestore} bind def
+-/gs {gsave} bind def
+-/sa {save} bind def
+-/rs {restore} bind def
+-/l {lineto} bind def
+-/m {moveto} bind def
+-/rm {rmoveto} bind def
+-/n {newpath} bind def
+-/s {stroke} bind def
+-/sh {show} bind def
+-/slc {setlinecap} bind def
+-/slj {setlinejoin} bind def
+-/slw {setlinewidth} bind def
+-/srgb {setrgbcolor} bind def
+-/rot {rotate} bind def
+-/sc {scale} bind def
+-/sd {setdash} bind def
+-/ff {findfont} bind def
+-/sf {setfont} bind def
+-/scf {scalefont} bind def
+-/sw {stringwidth} bind def
+-/tr {translate} bind def
+-/tnt {dup dup currentrgbcolor
+- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+- 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+- 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+- bind def
+-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+- 4 -2 roll mul srgb} bind def
+- /DrawEllipse {
+- /endangle exch def
+- /startangle exch def
+- /yrad exch def
+- /xrad exch def
+- /y exch def
+- /x exch def
+- /savematrix mtrx currentmatrix def
+- x y tr xrad yrad sc 0 0 1 startangle endangle arc
+- closepath
+- savematrix setmatrix
+- } def
+-
+-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+-/$F2psEnd {$F2psEnteredState restore end} def
+-
+-$F2psBegin
+-%%Page: 1 1
+-10 setmiterlimit
+- 0.06299 0.06299 sc
+-%
+-% Fig objects follow
+-%
+-% Polyline
+-15.000 slw
+-n 2010 4515 m 2550 4515 l 2550 5040 l 2010 5040 l
+- cp gs col0 s gr
+-/Times-Roman ff 300.00 scf sf
+-2205 4875 m
+-gs 1 -1 sc (1) col0 sh gr
+-% Ellipse
+-n 1515 1800 270 270 0 360 DrawEllipse gs col0 s gr
+-
+-% Ellipse
+-n 2250 900 270 270 0 360 DrawEllipse gs col0 s gr
+-
+-% Ellipse
+-n 2970 2715 270 270 0 360 DrawEllipse gs col0 s gr
+-
+-% Ellipse
+-n 2280 3705 270 270 0 360 DrawEllipse gs col0 s gr
+-
+-7.500 slw
+-% Ellipse
+-n 3555 3555 64 64 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+-
+-% Ellipse
+-n 2712 1726 64 64 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+-
+-% Ellipse
+-n 2430 4230 64 64 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+-
+-% Polyline
+-15.000 slw
+-n 2805 2910 m
+- 2250 3450 l gs col0 s gr
+-% Polyline
+- [90] 0 sd
+-gs clippath
+-2940 2472 m 3010 2445 l 2931 2239 l 2957 2411 l 2861 2266 l cp
+-eoclip
+-n 2460 1110 m
+- 2970 2445 l gs col0 s gr gr
+- [] 0 sd
+-% arrowhead
+-n 2861 2266 m 2957 2411 l 2931 2239 l 2908 2284 l 2861 2266 l
+- cp gs 0.00 setgray ef gr col0 s
+-% Polyline
+-gs clippath
+-1478 1511 m 1528 1568 l 1693 1422 l 1542 1506 l 1643 1366 l cp
+-eoclip
+-n 2025 1080 m
+- 1515 1530 l gs col0 s gr gr
+-
+-% arrowhead
+-n 1643 1366 m 1542 1506 l 1693 1422 l 1643 1416 l 1643 1366 l
+- cp gs 0.00 setgray ef gr col0 s
+-% Polyline
+-gs clippath
+-2212 645 m 2287 645 l 2287 425 l 2250 594 l 2212 425 l cp
+-eoclip
+-n 2250 270 m
+- 2250 630 l gs col0 s gr gr
+-
+-% arrowhead
+-n 2212 425 m 2250 594 l 2287 425 l 2250 459 l 2212 425 l
+- cp gs 0.00 setgray ef gr col0 s
+-% Polyline
+- [90] 0 sd
+-gs clippath
+-2692 2664 m 2732 2601 l 2546 2485 l 2670 2606 l 2506 2548 l cp
+-eoclip
+-n 1710 2010 m
+- 2700 2625 l gs col0 s gr gr
+- [] 0 sd
+-% arrowhead
+-n 2506 2548 m 2670 2606 l 2546 2485 l 2555 2534 l 2506 2548 l
+- cp gs 0.00 setgray ef gr col0 s
+-% Polyline
+-2 slj
+- [90] 0 sd
+-gs clippath
+-2504 4653 m 2539 4720 l 2733 4616 l 2567 4663 l 2698 4550 l cp
+-eoclip
+-n 3180 2910 m 3181 2911 l 3183 2913 l 3186 2916 l 3192 2921 l 3200 2929 l
+- 3210 2939 l 3223 2951 l 3238 2966 l 3255 2984 l 3274 3003 l
+- 3295 3025 l 3317 3049 l 3339 3075 l 3362 3103 l 3385 3131 l
+- 3407 3161 l 3429 3192 l 3450 3225 l 3470 3258 l 3488 3293 l
+- 3504 3329 l 3519 3367 l 3531 3406 l 3541 3447 l 3548 3490 l
+- 3552 3536 l 3552 3583 l 3548 3634 l 3540 3686 l 3528 3740 l
+- 3510 3795 l 3490 3844 l 3467 3892 l 3441 3939 l 3413 3985 l
+- 3382 4028 l 3350 4070 l 3317 4110 l 3283 4148 l 3248 4184 l
+- 3211 4219 l 3174 4253 l 3136 4285 l 3098 4316 l 3059 4347 l
+- 3020 4376 l 2980 4405 l 2941 4432 l 2901 4459 l 2862 4484 l
+- 2824 4509 l 2787 4532 l 2751 4554 l 2717 4575 l 2686 4593 l
+- 2657 4610 l 2631 4626 l 2608 4639 l 2589 4650 l 2572 4659 l
+- 2559 4666 l 2550 4672 l
+- 2535 4680 l gs col0 s gr gr
+- [] 0 sd
+-% arrowhead
+-0 slj
+-n 2698 4550 m 2567 4663 l 2733 4616 l 2686 4599 l 2698 4550 l
+- cp gs 0.00 setgray ef gr col0 s
+-% Polyline
+-2 slj
+-gs clippath
+-1985 4734 m 2028 4672 l 1847 4548 l 1965 4675 l 1804 4609 l cp
+-eoclip
+-n 1350 2025 m 1349 2026 l 1348 2027 l 1345 2030 l 1340 2035 l 1334 2042 l
+- 1325 2051 l 1314 2063 l 1301 2078 l 1286 2095 l 1268 2114 l
+- 1249 2137 l 1227 2161 l 1205 2188 l 1181 2218 l 1156 2249 l
+- 1131 2282 l 1105 2316 l 1080 2352 l 1054 2390 l 1029 2428 l
+- 1005 2468 l 981 2509 l 959 2552 l 938 2595 l 918 2640 l
+- 900 2687 l 884 2736 l 870 2786 l 858 2839 l 848 2894 l
+- 841 2951 l 837 3011 l 836 3074 l 838 3139 l 845 3206 l
+- 855 3275 l 870 3345 l 888 3412 l 910 3477 l 934 3542 l
+- 961 3604 l 990 3665 l 1022 3723 l 1054 3779 l 1088 3833 l
+- 1124 3885 l 1160 3935 l 1198 3983 l 1236 4029 l 1275 4074 l
+- 1315 4118 l 1356 4160 l 1397 4201 l 1438 4241 l 1480 4280 l
+- 1522 4318 l 1563 4355 l 1605 4390 l 1645 4424 l 1685 4457 l
+- 1723 4488 l 1760 4517 l 1795 4545 l 1827 4570 l 1857 4593 l
+- 1884 4613 l 1909 4632 l 1930 4647 l 1947 4660 l 1962 4671 l
+- 1973 4679 l 1982 4686 l
+- 1995 4695 l gs col0 s gr gr
+-
+-% arrowhead
+-0 slj
+-n 1804 4609 m 1965 4675 l 1847 4548 l 1854 4598 l 1804 4609 l
+- cp gs 0.00 setgray ef gr col0 s
+-% Polyline
+-2 slj
+- [90] 0 sd
+-gs clippath
+-2300 4492 m 2363 4532 l 2481 4347 l 2359 4470 l 2417 4307 l cp
+-eoclip
+-n 2340 3960 m 2341 3962 l 2344 3966 l 2348 3973 l 2354 3982 l 2362 3995 l
+- 2370 4010 l 2379 4028 l 2389 4046 l 2397 4066 l 2406 4088 l
+- 2413 4111 l 2420 4137 l 2425 4165 l 2429 4197 l 2430 4230 l
+- 2429 4263 l 2425 4295 l 2420 4323 l 2413 4349 l 2406 4372 l
+- 2397 4394 l 2389 4414 l 2379 4433 l 2370 4450 l 2362 4465 l
+- 2354 4478 l
+- 2340 4500 l gs col0 s gr gr
+- [] 0 sd
+-% arrowhead
+-0 slj
+-n 2417 4307 m 2359 4470 l 2481 4347 l 2431 4356 l 2417 4307 l
+- cp gs 0.00 setgray ef gr col0 s
+-% Polyline
+-2 slj
+-gs clippath
+-2136 4532 m 2199 4492 l 2082 4307 l 2141 4470 l 2018 4347 l cp
+-eoclip
+-n 2160 3960 m 2159 3962 l 2156 3966 l 2152 3973 l 2146 3982 l 2138 3995 l
+- 2130 4010 l 2121 4028 l 2111 4046 l 2103 4066 l 2094 4088 l
+- 2087 4111 l 2080 4137 l 2075 4165 l 2071 4197 l 2070 4230 l
+- 2071 4263 l 2075 4295 l 2080 4323 l 2087 4349 l 2094 4372 l
+- 2103 4394 l 2111 4414 l 2121 4433 l 2130 4450 l 2138 4465 l
+- 2146 4478 l
+- 2160 4500 l gs col0 s gr gr
+-
+-% arrowhead
+-0 slj
+-n 2018 4347 m 2141 4470 l 2082 4307 l 2068 4356 l 2018 4347 l
+- cp gs 0.00 setgray ef gr col0 s
+-/Times-Roman ff 300.00 scf sf
+-2175 990 m
+-gs 1 -1 sc (1) col0 sh gr
+-/Times-Roman ff 300.00 scf sf
+-1440 1890 m
+-gs 1 -1 sc (2) col0 sh gr
+-/Times-Roman ff 300.00 scf sf
+-2895 2805 m
+-gs 1 -1 sc (3) col0 sh gr
+-/Times-Roman ff 300.00 scf sf
+-2205 3795 m
+-gs 1 -1 sc (4) col0 sh gr
+-$F2psEnd
+-rs
+-
+-%%EndDocument
+-
+- endTexFig
+- 531 3990 a Fc(\(a\))1512 2504 y Fg(p)60 b(cnf)f(7)g(11)1512
+-2624 y(-5)g(3)h(0)1512 2745 y(-5)f(4)h(0)1512 2865 y(5)g(-3)f(-4)g(0)
+-1512 2985 y(6)h(-2)f(0)1512 3106 y(6)h(-5)f(0)1512 3226
+-y(-6)g(2)h(5)f(0)1512 3347 y(7)h(1)f(5)h(0)1512 3467
+-y(-7)f(1)h(-5)f(0)1512 3587 y(7)h(-1)f(-6)g(0)1512 3708
+-y(-7)g(-1)h(6)f(0)1512 3828 y(7)h(0)1836 3990 y Fc(\(b\))2541
+-2525 y Fg(p)f(cnf)g(4)h(3)2541 2645 y(1)f(-3)h(-4)f(0)2541
+-2766 y(-1)g(2)h(3)f(0)2541 2886 y(-1)g(2)h(-3)f(4)h(0)2868
+-3048 y Fc(\(c\))2541 3251 y Fg(p)f(cnf)g(5)h(5)2541 3371
+-y(-5)f(1)h(0)2541 3492 y(5)f(-1)h(2)f(0)2541 3612 y(-3)g(-4)g(5)h(0)
+-2541 3733 y(3)f(-5)h(0)2541 3853 y(-3)f(4)h(-5)f(0)2865
+-3990 y Fc(\(d\))-189 4138 y Fl(Figure)46 b(1:)71 b(\(a\))47
+-b(BDD;)e(\(b\))h(\223Single-Node-Cut\224)g(format;)55
+-b(\(c\))46 b(\223Maxterm-Cut\224)g(format;)55 b(\(d\))45
+-b(\223)-8 b(Auxiliary-)-189 4258 y(V)d(ariable-Cut\224)25
+-b(F)o(ormat.)-189 4625 y Fj(3.2)119 b(Implementation)-189
+-4813 y Fl(Store)25 b(and)g(Load)g(for)g(a)g(single)f(BDD)h(or)g(a)g
+-(forest)g(of)g(BDDs)g(is)f(currently)h(implemented.)-189
+-5073 y Fi(3.2.1)99 b(Storing)25 b(Decision)g(Diagrams)f(as)g(CNF)h(F)n
+-(ormulas)-189 5260 y Fl(As)g(f)o(ar)g(as)g(the)g(storing)e(process)i
+-(is)f(concerned)i(three)f(possible)e(formats)h(are)i(a)n(v)n(ailable:)
+--44 5431 y Fk(\017)49 b Fl(DDDMP)p 421 5431 30 4 v 36
+-w(CNF)p 650 5431 V 36 w(MODE)p 980 5431 V 35 w(NODE:)21
+-b(store)f(a)h(BDD)h(by)e(introducing)f(an)i(auxiliary)g(v)n(ariable)f
+-(for)h(each)g(BDD)55 5551 y(node)1794 5800 y(8)p eop
+-%%Page: 9 9
+-9 8 bop -44 218 a Fk(\017)49 b Fl(DDDMP)p 421 218 30
+-4 v 36 w(CNF)p 650 218 V 36 w(MODE)p 980 218 V 35 w(MAXTERM:)20
+-b(store)g(a)h(BDD)h(by)e(follo)n(wing)f(the)h(maxterm)g(of)h(the)g
+-(represented)55 338 y(function)-44 542 y Fk(\017)49 b
+-Fl(DDDMP)p 421 542 V 36 w(CNF)p 650 542 V 36 w(MODE)p
+-980 542 V 35 w(BEST)-5 b(:)32 b(trade-of)f(between)h(the)f(tw)o(o)f
+-(pre)n(vious)g(solution,)h(trying)f(to)h(optimize)55
+-662 y(the)25 b(number)f(of)h(literals)f(stored.)-189
+-865 y(See)c(procedures)f(Dddmp)p 736 865 V 35 w(cuddBddStoreCnf)g(\(to)
+-g(store)f(a)h(single)f(BDD)i(as)e(a)i(CNF)f(formula\))g(and)g(Dddmp)p
+-3609 865 V 34 w(cuddBddArrayStoreCnf)-189 986 y(\(to)25
+-b(store)f(an)h(array)h(of)f(BDDs)g(as)f(a)i(CNF)f(formula\).)-189
+-1252 y Fi(3.2.2)99 b(Loadinf)26 b(CNF)e(F)n(ormulas)g(as)h(BDDs)-189
+-1439 y Fl(As)g(f)o(ar)g(as)g(the)g(loading)e(process)i(is)f(concerned)i
+-(three)f(possible)e(formats)i(are)g(a)n(v)n(ailable:)-44
+-1643 y Fk(\017)49 b Fl(DDDMP)p 421 1643 V 36 w(CNF)p
+-650 1643 V 36 w(MODE)p 980 1643 V 35 w(NO)p 1159 1643
+-V 36 w(CONJ:)25 b(Return)g(the)f(Clauses)h(without)f(Conjunction)-44
+-1846 y Fk(\017)49 b Fl(DDDMP)p 421 1846 V 36 w(CNF)p
+-650 1846 V 36 w(MODE)p 980 1846 V 35 w(NO)p 1159 1846
+-V 36 w(Q)o(U)l(ANT)-5 b(:)24 b(Return)h(the)g(sets)f(of)h(BDDs)g
+-(without)f(Quanti\002cation)-44 2050 y Fk(\017)49 b Fl(DDDMP)p
+-421 2050 V 36 w(CNF)p 650 2050 V 36 w(MODE)p 980 2050
+-V 35 w(CONJ)p 1264 2050 V 36 w(Q)o(U)l(ANT)-5 b(:)23
+-b(Return)h(the)g(sets)f(of)h(BDDs)g(AFTER)g(Existential)e(Quanti\002-)
+-55 2170 y(cation)-189 2373 y(See)e(procedures)f(Dddmp)p
+-736 2373 V 35 w(cuddBddLoadCnf)f(\(to)h(load)f(a)i(CNF)f(formula)g(as)g
+-(a)g(single)f(BDD\))h(and)g(Dddmp)p 3581 2373 V 35 w
+-(cuddBddArrayLoadCnf)-189 2494 y(\(to)35 b(load)h(a)g(CNF)g(formula)f
+-(as)h(an)g(array)g(of)g(BDDs\).)63 b(See)36 b(also)g(Dddmp)p
+-2485 2494 V 34 w(cuddHeaderLoadCnf)h(to)e(load)g(the)-189
+-2614 y(header)25 b(of)g(a)g(CNF)h(\002le)f(to)g(gather)f(information)f
+-(on)i(the)g(sa)n(v)o(ed)f(structure.)-189 2954 y Fo(4)143
+-b(T)-13 b(est)35 b(Pr)m(ogram)f(and)h(Regr)m(ession)f(T)-13
+-b(ests)-189 3177 y Fl(The)20 b Fc(testddmp.c)e Fl(\002le,)j(pro)o
+-(vided)d(with)h(this)f(distrib)n(ution,)g(e)o(x)o(empli\002es)g(some)h
+-(of)h(the)f(abo)o(v)o(e)g(features.)29 b(Moreo)o(v)o(er)l(,)-189
+-3298 y(in)d(the)h Fc(e)n(xp)g Fl(e)o(xperiments)e(a)j(fe)n(w)e
+-(scripts,)h(named)f Fc(test\241n\277.script)f Fl(are)i(a)n(v)n(ailable)
+-f(for)h(a)g(sanity)f(check)h(of)g(the)g(tool)-189 3418
+-y(and)e(to)f(tak)o(e)h(a)g(look)f(at)h(some)f(runs)h(e)o(x)o
+-(empli\002cation.)-189 3758 y Fo(5)143 b(Documentation)-189
+-3981 y Fl(F)o(or)27 b(further)f(documentation)f(on)i(the)f(package)h
+-(see)g(the)g(on-line)f(documentation)f(automatically)g(created)i(from)
+--189 4102 y(the)e(source)g(code)g(\002les.)-189 4441
+-y Fo(6)143 b(Ackno)o(wledgments)-189 4665 y Fl(W)-8 b(e)19
+-b(are)h(particular)f(indebted)f(with)g(F)o(abio)g(Somenzi,)i(for)f
+-(discussions,)f(advice,)i(and)f(for)g(including)e(the)i(DDDMP)-189
+-4785 y(package)28 b(into)f(the)h(CUDD)g(distrib)n(ution.)37
+-b(W)-8 b(e)29 b(also)e(thank)g(all)h(the)g(user)g(of)g(the)f(package)i
+-(for)f(their)f(useful)h(indi-)-189 4905 y(cation)c(and)h(comments)f(on)
+-g(the)h(it.)1794 5800 y(9)p eop
+-%%Page: 10 10
+-10 9 bop -189 218 a Fo(7)143 b(FTP)35 b(Site)-189 441
+-y Fl(The)25 b(package)g(is)f(singularly)g(a)n(v)n(ailable)g(from:)-189
+-645 y Fg(site:)59 b(ftp.polito.it)-189 765 y(user:)g(anonymous)-189
+-885 y(directory:)f(/pub/research/dddmp)-189 1089 y Fl(or)25
+-b(directly)f(from)h(the)f(author)h(WEB)g(pages:)-189
+-1292 y Fg(WWW:)59 b(http://www.polito.it/\230{cabodi)o(,quer)o(})-189
+-1632 y Fo(8)143 b(F)l(eedback)-189 1855 y Fl(Send)25
+-b(feedback)h(to:)-189 2059 y Fg(Gianpiero)58 b(Cabodi)g(&)i(Stefano)e
+-(Quer)-189 2179 y(Politecnico)f(di)j(Torino)-189 2300
+-y(Dipartimento)d(di)i(Automatica)f(e)i(Informatica)-189
+-2420 y(Corso)f(Duca)g(degli)f(Abruzzi,)g(24)-189 2540
+-y(I-10129)g(Torino)-189 2661 y(Italy)-189 2781 y(E-mail:)g
+-({cabodi,quer}@polito.it)-189 2901 y(WWW:)h
+-(http://www.polito.it/\230{cabodi)o(,quer)o(})1769 5800
+-y Fl(10)p eop
+-%%Trailer
+-end
+-userdict /end-hook known{end-hook}if
+-%%EOF
+diff --git a/Cudd/dddmp/doc/dddmpAllAbs.html b/Cudd/dddmp/doc/dddmpAllAbs.html
+deleted file mode 100644
+index 5cd6c2a..0000000
+--- a/Cudd/dddmp/doc/dddmpAllAbs.html
++++ /dev/null
+@@ -1,483 +0,0 @@
+-<HTML>
+-<HEAD><TITLE>dddmp package abstract</TITLE></HEAD>
+-<BODY>
+-
+-
+-<!-- Function Abstracts -->
+-
+-<dl>
+-<DT> <A HREF="dddmpAllDet.html#DddmpBddReadHeaderCnf" TARGET="MAIN"><CODE>DddmpBddReadHeaderCnf()</CODE></A>
+-<DD> Reads a the header of a dump file representing the argument
+- BDDs.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpBddReadHeader" TARGET="MAIN"><CODE>DddmpBddReadHeader()</CODE></A>
+-<DD> Reads a the header of a dump file representing the
+- argument BDDs.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpClearVisitedAdd" TARGET="MAIN"><CODE>DddmpClearVisitedAdd()</CODE></A>
+-<DD> Marks a node as not visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpClearVisitedBdd" TARGET="MAIN"><CODE>DddmpClearVisitedBdd()</CODE></A>
+-<DD> Marks a node as not visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpClearVisitedCnfRecur" TARGET="MAIN"><CODE>DddmpClearVisitedCnfRecur()</CODE></A>
+-<DD> Mark ALL nodes as not visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpClearVisitedCnfRecur" TARGET="MAIN"><CODE>DddmpClearVisitedCnfRecur()</CODE></A>
+-<DD> Mark ALL nodes as not visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpClearVisitedCnf" TARGET="MAIN"><CODE>DddmpClearVisitedCnf()</CODE></A>
+-<DD> Marks a node as not visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpClearVisitedCnf" TARGET="MAIN"><CODE>DddmpClearVisitedCnf()</CODE></A>
+-<DD> Marks a node as not visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpClearVisited" TARGET="MAIN"><CODE>DddmpClearVisited()</CODE></A>
+-<DD> Marks a node as not visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpCnfClauses2Bdd" TARGET="MAIN"><CODE>DddmpCnfClauses2Bdd()</CODE></A>
+-<DD> Transforms CNF clauses into BDDs.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpCuddBddArrayStoreCnf" TARGET="MAIN"><CODE>DddmpCuddBddArrayStoreCnf()</CODE></A>
+-<DD> Writes a dump file representing the argument Array of
+- BDDs in the CNF standard format.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpCuddBddArrayStore" TARGET="MAIN"><CODE>DddmpCuddBddArrayStore()</CODE></A>
+-<DD> Writes a dump file representing the argument Array of
+- BDDs.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayLoadCnf" TARGET="MAIN"><CODE>DddmpCuddDdArrayLoadCnf()</CODE></A>
+-<DD> Reads a dump file representing the argument BDDs in CNF
+- format.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayLoad" TARGET="MAIN"><CODE>DddmpCuddDdArrayLoad()</CODE></A>
+-<DD> Reads a dump file representing the argument BDDs.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStoreBdd" TARGET="MAIN"><CODE>DddmpCuddDdArrayStoreBdd()</CODE></A>
+-<DD> Writes a dump file representing the argument Array of
+- BDDs/ADDs.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStoreBlifBody" TARGET="MAIN"><CODE>DddmpCuddDdArrayStoreBlifBody()</CODE></A>
+-<DD> Writes a blif body representing the argument BDDs.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStoreBlifStep" TARGET="MAIN"><CODE>DddmpCuddDdArrayStoreBlifStep()</CODE></A>
+-<DD> Performs the recursive step of DddmpCuddDdArrayStoreBlif.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStoreBlif" TARGET="MAIN"><CODE>DddmpCuddDdArrayStoreBlif()</CODE></A>
+-<DD> Writes a blif file representing the argument BDDs.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStorePrefixBody" TARGET="MAIN"><CODE>DddmpCuddDdArrayStorePrefixBody()</CODE></A>
+-<DD> Internal function to writes a dump file representing the
+- argument BDD in a prefix notation. Writes the body of the file.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStorePrefixStep" TARGET="MAIN"><CODE>DddmpCuddDdArrayStorePrefixStep()</CODE></A>
+-<DD> Performs the recursive step of
+- DddmpCuddDdArrayStorePrefixBody.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStorePrefix" TARGET="MAIN"><CODE>DddmpCuddDdArrayStorePrefix()</CODE></A>
+-<DD> Internal function to writes a dump file representing the
+- argument BDD in a prefix notation.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStoreSmvBody" TARGET="MAIN"><CODE>DddmpCuddDdArrayStoreSmvBody()</CODE></A>
+-<DD> Internal function to writes a dump file representing the
+- argument BDD in a SMV notation. Writes the body of the file.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStoreSmvStep" TARGET="MAIN"><CODE>DddmpCuddDdArrayStoreSmvStep()</CODE></A>
+-<DD> Performs the recursive step of
+- DddmpCuddDdArrayStoreSmvBody.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStoreSmv" TARGET="MAIN"><CODE>DddmpCuddDdArrayStoreSmv()</CODE></A>
+-<DD> Internal function to writes a dump file representing the
+- argument BDD in a SMV notation.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpDdNodesCheckIncomingAndScanPath" TARGET="MAIN"><CODE>DddmpDdNodesCheckIncomingAndScanPath()</CODE></A>
+-<DD> Number nodes recursively in post-order
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpDdNodesCheckIncomingAndScanPath" TARGET="MAIN"><CODE>DddmpDdNodesCheckIncomingAndScanPath()</CODE></A>
+-<DD> Number nodes recursively in post-order
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpDdNodesCountEdgesAndNumber" TARGET="MAIN"><CODE>DddmpDdNodesCountEdgesAndNumber()</CODE></A>
+-<DD> Removes nodes from unique table and numbers each node according
+- to the number of its incoming BDD edges.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpDdNodesCountEdgesAndNumber" TARGET="MAIN"><CODE>DddmpDdNodesCountEdgesAndNumber()</CODE></A>
+-<DD> Removes nodes from unique table and numbers each node according
+- to the number of its incoming BDD edges.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpDdNodesCountEdgesRecur" TARGET="MAIN"><CODE>DddmpDdNodesCountEdgesRecur()</CODE></A>
+-<DD> Counts the number of incoming edges for each node of a BDD
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpDdNodesCountEdgesRecur" TARGET="MAIN"><CODE>DddmpDdNodesCountEdgesRecur()</CODE></A>
+-<DD> Counts the number of incoming edges for each node of a BDD
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpDdNodesNumberEdgesRecur" TARGET="MAIN"><CODE>DddmpDdNodesNumberEdgesRecur()</CODE></A>
+-<DD> Number nodes recursively in post-order
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpDdNodesNumberEdgesRecur" TARGET="MAIN"><CODE>DddmpDdNodesNumberEdgesRecur()</CODE></A>
+-<DD> Number nodes recursively in post-order
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpDdNodesResetCountRecur" TARGET="MAIN"><CODE>DddmpDdNodesResetCountRecur()</CODE></A>
+-<DD> Resets counter and visited flag for ALL nodes of a BDD
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpDdNodesResetCountRecur" TARGET="MAIN"><CODE>DddmpDdNodesResetCountRecur()</CODE></A>
+-<DD> Resets counter and visited flag for ALL nodes of a BDD
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpFreeHeaderCnf" TARGET="MAIN"><CODE>DddmpFreeHeaderCnf()</CODE></A>
+-<DD> Frees the internal header structure.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpFreeHeader" TARGET="MAIN"><CODE>DddmpFreeHeader()</CODE></A>
+-<DD> Frees the internal header structure.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpIntArrayDup" TARGET="MAIN"><CODE>DddmpIntArrayDup()</CODE></A>
+-<DD> Duplicates an array of ints
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpIntArrayRead" TARGET="MAIN"><CODE>DddmpIntArrayRead()</CODE></A>
+-<DD> Inputs an array of ints
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpIntArrayWrite" TARGET="MAIN"><CODE>DddmpIntArrayWrite()</CODE></A>
+-<DD> Outputs an array of ints
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpNumberAddNodes" TARGET="MAIN"><CODE>DddmpNumberAddNodes()</CODE></A>
+-<DD> Removes nodes from unique table and number them
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpNumberBddNodes" TARGET="MAIN"><CODE>DddmpNumberBddNodes()</CODE></A>
+-<DD> Removes nodes from unique table and number them
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpNumberDdNodesCnf" TARGET="MAIN"><CODE>DddmpNumberDdNodesCnf()</CODE></A>
+-<DD> Removes nodes from unique table and numbers them
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpNumberDdNodesCnf" TARGET="MAIN"><CODE>DddmpNumberDdNodesCnf()</CODE></A>
+-<DD> Removes nodes from unique table and numbers them
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpNumberDdNodes" TARGET="MAIN"><CODE>DddmpNumberDdNodes()</CODE></A>
+-<DD> Removes nodes from unique table and number them
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpPrintBddAndNextRecur" TARGET="MAIN"><CODE>DddmpPrintBddAndNextRecur()</CODE></A>
+-<DD> Prints debug info
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpPrintBddAndNextRecur" TARGET="MAIN"><CODE>DddmpPrintBddAndNextRecur()</CODE></A>
+-<DD> Prints debug info
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpPrintBddAndNext" TARGET="MAIN"><CODE>DddmpPrintBddAndNext()</CODE></A>
+-<DD> Prints debug information
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpPrintBddAndNext" TARGET="MAIN"><CODE>DddmpPrintBddAndNext()</CODE></A>
+-<DD> Prints debug information
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpReadCnfClauses" TARGET="MAIN"><CODE>DddmpReadCnfClauses()</CODE></A>
+-<DD> Read the CNF clauses from the file in the standard DIMACS
+- format.
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpReadCode" TARGET="MAIN"><CODE>DddmpReadCode()</CODE></A>
+-<DD> Reads a 1 byte node code
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpReadInt" TARGET="MAIN"><CODE>DddmpReadInt()</CODE></A>
+-<DD> Reads a "packed integer"
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpReadNodeIndexAdd" TARGET="MAIN"><CODE>DddmpReadNodeIndexAdd()</CODE></A>
+-<DD> Reads the index of a node
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpReadNodeIndexBdd" TARGET="MAIN"><CODE>DddmpReadNodeIndexBdd()</CODE></A>
+-<DD> Reads the index of a node
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpReadNodeIndexCnf" TARGET="MAIN"><CODE>DddmpReadNodeIndexCnf()</CODE></A>
+-<DD> Reads the index of a node
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpReadNodeIndexCnf" TARGET="MAIN"><CODE>DddmpReadNodeIndexCnf()</CODE></A>
+-<DD> Reads the index of a node
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpReadNodeIndex" TARGET="MAIN"><CODE>DddmpReadNodeIndex()</CODE></A>
+-<DD> Reads the index of a node
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpSetVisitedAdd" TARGET="MAIN"><CODE>DddmpSetVisitedAdd()</CODE></A>
+-<DD> Marks a node as visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpSetVisitedBdd" TARGET="MAIN"><CODE>DddmpSetVisitedBdd()</CODE></A>
+-<DD> Marks a node as visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpSetVisitedCnf" TARGET="MAIN"><CODE>DddmpSetVisitedCnf()</CODE></A>
+-<DD> Marks a node as visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpSetVisitedCnf" TARGET="MAIN"><CODE>DddmpSetVisitedCnf()</CODE></A>
+-<DD> Marks a node as visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpSetVisited" TARGET="MAIN"><CODE>DddmpSetVisited()</CODE></A>
+-<DD> Marks a node as visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpStrArrayDup" TARGET="MAIN"><CODE>DddmpStrArrayDup()</CODE></A>
+-<DD> Duplicates an array of strings
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpStrArrayFree" TARGET="MAIN"><CODE>DddmpStrArrayFree()</CODE></A>
+-<DD> Frees an array of strings
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpStrArrayRead" TARGET="MAIN"><CODE>DddmpStrArrayRead()</CODE></A>
+-<DD> Inputs an array of strings
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpStrArrayWrite" TARGET="MAIN"><CODE>DddmpStrArrayWrite()</CODE></A>
+-<DD> Outputs an array of strings
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpStrDup" TARGET="MAIN"><CODE>DddmpStrDup()</CODE></A>
+-<DD> Duplicates a string
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpUnnumberAddNodes" TARGET="MAIN"><CODE>DddmpUnnumberAddNodes()</CODE></A>
+-<DD> Restores nodes in unique table, loosing numbering
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpUnnumberBddNodes" TARGET="MAIN"><CODE>DddmpUnnumberBddNodes()</CODE></A>
+-<DD> Restores nodes in unique table, loosing numbering
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpUnnumberDdNodesCnf" TARGET="MAIN"><CODE>DddmpUnnumberDdNodesCnf()</CODE></A>
+-<DD> Restores nodes in unique table, loosing numbering
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpUnnumberDdNodesCnf" TARGET="MAIN"><CODE>DddmpUnnumberDdNodesCnf()</CODE></A>
+-<DD> Restores nodes in unique table, loosing numbering
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpUnnumberDdNodes" TARGET="MAIN"><CODE>DddmpUnnumberDdNodes()</CODE></A>
+-<DD> Restores nodes in unique table, loosing numbering
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpVisitedAdd" TARGET="MAIN"><CODE>DddmpVisitedAdd()</CODE></A>
+-<DD> Returns true if node is visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpVisitedBdd" TARGET="MAIN"><CODE>DddmpVisitedBdd()</CODE></A>
+-<DD> Returns true if node is visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpVisitedCnf" TARGET="MAIN"><CODE>DddmpVisitedCnf()</CODE></A>
+-<DD> Returns true if node is visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpVisitedCnf" TARGET="MAIN"><CODE>DddmpVisitedCnf()</CODE></A>
+-<DD> Returns true if node is visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpVisited" TARGET="MAIN"><CODE>DddmpVisited()</CODE></A>
+-<DD> Returns true if node is visited
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpWriteCode" TARGET="MAIN"><CODE>DddmpWriteCode()</CODE></A>
+-<DD> Writes 1 byte node code
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpWriteInt" TARGET="MAIN"><CODE>DddmpWriteInt()</CODE></A>
+-<DD> Writes a "packed integer"
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpWriteNodeIndexAdd" TARGET="MAIN"><CODE>DddmpWriteNodeIndexAdd()</CODE></A>
+-<DD> Write index to node
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpWriteNodeIndexBdd" TARGET="MAIN"><CODE>DddmpWriteNodeIndexBdd()</CODE></A>
+-<DD> Write index to node
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpWriteNodeIndexCnfBis" TARGET="MAIN"><CODE>DddmpWriteNodeIndexCnfBis()</CODE></A>
+-<DD> Write index to node
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpWriteNodeIndexCnfWithTerminalCheck" TARGET="MAIN"><CODE>DddmpWriteNodeIndexCnfWithTerminalCheck()</CODE></A>
+-<DD> Write index to node
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpWriteNodeIndexCnf" TARGET="MAIN"><CODE>DddmpWriteNodeIndexCnf()</CODE></A>
+-<DD> Write index to node
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpWriteNodeIndexCnf" TARGET="MAIN"><CODE>DddmpWriteNodeIndexCnf()</CODE></A>
+-<DD> Write index to node
+-
+-<DT> <A HREF="dddmpAllDet.html#DddmpWriteNodeIndex" TARGET="MAIN"><CODE>DddmpWriteNodeIndex()</CODE></A>
+-<DD> Write index to node
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_Bin2Text" TARGET="MAIN"><CODE>Dddmp_Bin2Text()</CODE></A>
+-<DD> Converts from binary to ASCII format
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_Text2Bin" TARGET="MAIN"><CODE>Dddmp_Text2Bin()</CODE></A>
+-<DD> Converts from ASCII to binary format
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddAddArrayLoad" TARGET="MAIN"><CODE>Dddmp_cuddAddArrayLoad()</CODE></A>
+-<DD> Reads a dump file representing the argument ADDs.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddAddArrayStore" TARGET="MAIN"><CODE>Dddmp_cuddAddArrayStore()</CODE></A>
+-<DD> Writes a dump file representing the argument Array of ADDs.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddAddLoad" TARGET="MAIN"><CODE>Dddmp_cuddAddLoad()</CODE></A>
+-<DD> Reads a dump file representing the argument ADD.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddAddStore" TARGET="MAIN"><CODE>Dddmp_cuddAddStore()</CODE></A>
+-<DD> Writes a dump file representing the argument ADD.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddArrayLoadCnf" TARGET="MAIN"><CODE>Dddmp_cuddBddArrayLoadCnf()</CODE></A>
+-<DD> Reads a dump file in a CNF format.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddArrayLoad" TARGET="MAIN"><CODE>Dddmp_cuddBddArrayLoad()</CODE></A>
+-<DD> Reads a dump file representing the argument BDDs.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddArrayStoreBlif" TARGET="MAIN"><CODE>Dddmp_cuddBddArrayStoreBlif()</CODE></A>
+-<DD> Writes a dump file representing the argument BDD in
+- a Blif/Exlif notation.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddArrayStoreCnf" TARGET="MAIN"><CODE>Dddmp_cuddBddArrayStoreCnf()</CODE></A>
+-<DD> Writes a dump file representing the argument array of BDDs
+- in CNF format.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddArrayStorePrefix" TARGET="MAIN"><CODE>Dddmp_cuddBddArrayStorePrefix()</CODE></A>
+-<DD> Writes a dump file representing the argument BDD in
+- a prefix notation.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddArrayStoreSmv" TARGET="MAIN"><CODE>Dddmp_cuddBddArrayStoreSmv()</CODE></A>
+-<DD> Writes a dump file representing the argument BDD in
+- a prefix notation.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddArrayStore" TARGET="MAIN"><CODE>Dddmp_cuddBddArrayStore()</CODE></A>
+-<DD> Writes a dump file representing the argument Array of BDDs.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddDisplayBinary" TARGET="MAIN"><CODE>Dddmp_cuddBddDisplayBinary()</CODE></A>
+-<DD> Display a binary dump file in a text file
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddLoadCnf" TARGET="MAIN"><CODE>Dddmp_cuddBddLoadCnf()</CODE></A>
+-<DD> Reads a dump file in a CNF format.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddLoad" TARGET="MAIN"><CODE>Dddmp_cuddBddLoad()</CODE></A>
+-<DD> Reads a dump file representing the argument BDD.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddStoreBlif" TARGET="MAIN"><CODE>Dddmp_cuddBddStoreBlif()</CODE></A>
+-<DD> Writes a dump file representing the argument BDD in
+- a Blif/Exlif notation.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddStoreCnf" TARGET="MAIN"><CODE>Dddmp_cuddBddStoreCnf()</CODE></A>
+-<DD> Writes a dump file representing the argument BDD in
+- a CNF format.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddStorePrefix" TARGET="MAIN"><CODE>Dddmp_cuddBddStorePrefix()</CODE></A>
+-<DD> Writes a dump file representing the argument BDD in
+- a prefix notation.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddStoreSmv" TARGET="MAIN"><CODE>Dddmp_cuddBddStoreSmv()</CODE></A>
+-<DD> Writes a dump file representing the argument BDD in
+- a prefix notation.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddStore" TARGET="MAIN"><CODE>Dddmp_cuddBddStore()</CODE></A>
+-<DD> Writes a dump file representing the argument BDD.
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddHeaderLoadCnf" TARGET="MAIN"><CODE>Dddmp_cuddHeaderLoadCnf()</CODE></A>
+-<DD> Reads the header of a dump file representing the argument BDDs
+-
+-<DT> <A HREF="dddmpAllDet.html#Dddmp_cuddHeaderLoad" TARGET="MAIN"><CODE>Dddmp_cuddHeaderLoad()</CODE></A>
+-<DD> Reads the header of a dump file representing the argument BDDs
+-
+-<DT> <A HREF="dddmpAllDet.html#FindVarname" TARGET="MAIN"><CODE>FindVarname()</CODE></A>
+-<DD> Performs binary search of a name within a sorted array
+-
+-<DT> <A HREF="dddmpAllDet.html#NodeBinaryStoreBdd" TARGET="MAIN"><CODE>NodeBinaryStoreBdd()</CODE></A>
+-<DD> Store One Single Node in Binary Format.
+-
+-<DT> <A HREF="dddmpAllDet.html#NodeStoreRecurAdd" TARGET="MAIN"><CODE>NodeStoreRecurAdd()</CODE></A>
+-<DD> Performs the recursive step of Dddmp_bddStore.
+-
+-<DT> <A HREF="dddmpAllDet.html#NodeStoreRecurBdd" TARGET="MAIN"><CODE>NodeStoreRecurBdd()</CODE></A>
+-<DD> Performs the recursive step of Dddmp_bddStore.
+-
+-<DT> <A HREF="dddmpAllDet.html#NodeTextStoreAdd" TARGET="MAIN"><CODE>NodeTextStoreAdd()</CODE></A>
+-<DD> Store One Single Node in Text Format.
+-
+-<DT> <A HREF="dddmpAllDet.html#NodeTextStoreBdd" TARGET="MAIN"><CODE>NodeTextStoreBdd()</CODE></A>
+-<DD> Store One Single Node in Text Format.
+-
+-<DT> <A HREF="dddmpAllDet.html#NumberNodeRecurAdd" TARGET="MAIN"><CODE>NumberNodeRecurAdd()</CODE></A>
+-<DD> Number nodes recursively in post-order
+-
+-<DT> <A HREF="dddmpAllDet.html#NumberNodeRecurBdd" TARGET="MAIN"><CODE>NumberNodeRecurBdd()</CODE></A>
+-<DD> Number nodes recursively in post-order
+-
+-<DT> <A HREF="dddmpAllDet.html#NumberNodeRecurCnf" TARGET="MAIN"><CODE>NumberNodeRecurCnf()</CODE></A>
+-<DD> Number nodes recursively in post-order
+-
+-<DT> <A HREF="dddmpAllDet.html#NumberNodeRecurCnf" TARGET="MAIN"><CODE>NumberNodeRecurCnf()</CODE></A>
+-<DD> Number nodes recursively in post-order
+-
+-<DT> <A HREF="dddmpAllDet.html#NumberNodeRecur" TARGET="MAIN"><CODE>NumberNodeRecur()</CODE></A>
+-<DD> Number nodes recursively in post-order
+-
+-<DT> <A HREF="dddmpAllDet.html#QsortStrcmp" TARGET="MAIN"><CODE>QsortStrcmp()</CODE></A>
+-<DD> String compare for qsort
+-
+-<DT> <A HREF="dddmpAllDet.html#ReadByteBinary" TARGET="MAIN"><CODE>ReadByteBinary()</CODE></A>
+-<DD> Reads a byte from file with escaped <CR>, <LF> and <ctrl-Z>
+-
+-<DT> <A HREF="dddmpAllDet.html#RemoveFromUniqueRecurAdd" TARGET="MAIN"><CODE>RemoveFromUniqueRecurAdd()</CODE></A>
+-<DD> Removes a node from unique table
+-
+-<DT> <A HREF="dddmpAllDet.html#RemoveFromUniqueRecurBdd" TARGET="MAIN"><CODE>RemoveFromUniqueRecurBdd()</CODE></A>
+-<DD> Removes a node from unique table
+-
+-<DT> <A HREF="dddmpAllDet.html#RemoveFromUniqueRecurCnf" TARGET="MAIN"><CODE>RemoveFromUniqueRecurCnf()</CODE></A>
+-<DD> Removes a node from unique table
+-
+-<DT> <A HREF="dddmpAllDet.html#RemoveFromUniqueRecurCnf" TARGET="MAIN"><CODE>RemoveFromUniqueRecurCnf()</CODE></A>
+-<DD> Removes a node from unique table
+-
+-<DT> <A HREF="dddmpAllDet.html#RemoveFromUniqueRecur" TARGET="MAIN"><CODE>RemoveFromUniqueRecur()</CODE></A>
+-<DD> Removes a node from unique table
+-
+-<DT> <A HREF="dddmpAllDet.html#RestoreInUniqueRecurAdd" TARGET="MAIN"><CODE>RestoreInUniqueRecurAdd()</CODE></A>
+-<DD> Restores a node in unique table
+-
+-<DT> <A HREF="dddmpAllDet.html#RestoreInUniqueRecurBdd" TARGET="MAIN"><CODE>RestoreInUniqueRecurBdd()</CODE></A>
+-<DD> Restores a node in unique table
+-
+-<DT> <A HREF="dddmpAllDet.html#RestoreInUniqueRecurCnf" TARGET="MAIN"><CODE>RestoreInUniqueRecurCnf()</CODE></A>
+-<DD> Restores a node in unique table
+-
+-<DT> <A HREF="dddmpAllDet.html#RestoreInUniqueRecurCnf" TARGET="MAIN"><CODE>RestoreInUniqueRecurCnf()</CODE></A>
+-<DD> Restores a node in unique table
+-
+-<DT> <A HREF="dddmpAllDet.html#RestoreInUniqueRecur" TARGET="MAIN"><CODE>RestoreInUniqueRecur()</CODE></A>
+-<DD> Restores a node in unique table
+-
+-<DT> <A HREF="dddmpAllDet.html#StoreCnfBestNotSharedRecur" TARGET="MAIN"><CODE>StoreCnfBestNotSharedRecur()</CODE></A>
+-<DD> Performs the recursive step of Print Best on Not Shared
+- sub-BDDs.
+-
+-<DT> <A HREF="dddmpAllDet.html#StoreCnfBestSharedRecur" TARGET="MAIN"><CODE>StoreCnfBestSharedRecur()</CODE></A>
+-<DD> Performs the recursive step of Print Best on Shared
+- sub-BDDs.
+-
+-<DT> <A HREF="dddmpAllDet.html#StoreCnfBest" TARGET="MAIN"><CODE>StoreCnfBest()</CODE></A>
+-<DD> Prints a disjoint sum of products with intermediate
+- cutting points.
+-
+-<DT> <A HREF="dddmpAllDet.html#StoreCnfMaxtermByMaxtermRecur" TARGET="MAIN"><CODE>StoreCnfMaxtermByMaxtermRecur()</CODE></A>
+-<DD> Performs the recursive step of Print Maxterm.
+-
+-<DT> <A HREF="dddmpAllDet.html#StoreCnfMaxtermByMaxterm" TARGET="MAIN"><CODE>StoreCnfMaxtermByMaxterm()</CODE></A>
+-<DD> Prints a disjoint sum of products.
+-
+-<DT> <A HREF="dddmpAllDet.html#StoreCnfNodeByNodeRecur" TARGET="MAIN"><CODE>StoreCnfNodeByNodeRecur()</CODE></A>
+-<DD> Performs the recursive step of Dddmp_bddStore.
+-
+-<DT> <A HREF="dddmpAllDet.html#StoreCnfNodeByNode" TARGET="MAIN"><CODE>StoreCnfNodeByNode()</CODE></A>
+-<DD> Store the BDD as CNF clauses.
+-
+-<DT> <A HREF="dddmpAllDet.html#StoreCnfOneNode" TARGET="MAIN"><CODE>StoreCnfOneNode()</CODE></A>
+-<DD> Store One Single BDD Node.
+-
+-<DT> <A HREF="dddmpAllDet.html#WriteByteBinary" TARGET="MAIN"><CODE>WriteByteBinary()</CODE></A>
+-<DD> Writes a byte to file filtering <CR>, <LF> and <ctrl-Z>
+-
+-<DT> <A HREF="dddmpAllDet.html#printCubeCnf" TARGET="MAIN"><CODE>printCubeCnf()</CODE></A>
+-<DD> Print One Cube in CNF Format.
+-
+-<DT> <A HREF="dddmpAllDet.html#" TARGET="MAIN"><CODE>()</CODE></A>
+-<DD> Checks for Warnings: If expr==1 it prints out the warning
+- on stderr.
+-
+-<DT> <A HREF="dddmpAllDet.html#" TARGET="MAIN"><CODE>()</CODE></A>
+-<DD> Checks for fatal bugs
+-
+-<DT> <A HREF="dddmpAllDet.html#" TARGET="MAIN"><CODE>()</CODE></A>
+-<DD> Checks for fatal bugs and go to the label to deal with
+- the error.
+-
+-<DT> <A HREF="dddmpAllDet.html#" TARGET="MAIN"><CODE>()</CODE></A>
+-<DD> Checks for fatal bugs and return the DDDMP_FAILURE flag.
+-
+-<DT> <A HREF="dddmpAllDet.html#" TARGET="MAIN"><CODE>()</CODE></A>
+-<DD> Memory Allocation Macro for DDDMP
+-
+-<DT> <A HREF="dddmpAllDet.html#" TARGET="MAIN"><CODE>()</CODE></A>
+-<DD> Memory Free Macro for DDDMP
+-
+-</DL>
+-
+-<HR>
+-
+-Last updated on 1040218 17h14
+-</BODY></HTML>
+diff --git a/Cudd/dddmp/doc/dddmpAllByFile.html b/Cudd/dddmp/doc/dddmpAllByFile.html
+deleted file mode 100644
+index f414ee6..0000000
+--- a/Cudd/dddmp/doc/dddmpAllByFile.html
++++ /dev/null
+@@ -1,13 +0,0 @@
+-<HTML>
+-<HEAD><TITLE>The dddmp package for maintainers</TITLE></HEAD>
+-
+-<FRAMESET ROWS="5%,90%,5%">
+- <FRAME SRC="dddmpTitle.html">
+- <FRAMESET COLS="40%,60%">
+- <FRAME SRC="dddmpAllFile.html" NAME="ABSTRACT">
+- <FRAME SRC="dddmpAllDet.html" NAME="MAIN">
+- </FRAMESET>
+- <FRAME SRC="credit.html">
+-</FRAMESET>
+-
+-</HTML>
+diff --git a/Cudd/dddmp/doc/dddmpAllByFunc.html b/Cudd/dddmp/doc/dddmpAllByFunc.html
+deleted file mode 100644
+index 76671da..0000000
+--- a/Cudd/dddmp/doc/dddmpAllByFunc.html
++++ /dev/null
+@@ -1,13 +0,0 @@
+-<HTML>
+-<HEAD><TITLE>The dddmp package for maintainers</TITLE></HEAD>
+-
+-<FRAMESET ROWS="5%,90%,5%">
+- <FRAME SRC="dddmpTitle.html">
+- <FRAMESET COLS="40%,60%">
+- <FRAME SRC="dddmpAllAbs.html" NAME="ABSTRACT">
+- <FRAME SRC="dddmpAllDet.html" NAME="MAIN">
+- </FRAMESET>
+- <FRAME SRC="credit.html">
+-</FRAMESET>
+-
+-</HTML>
+diff --git a/Cudd/dddmp/doc/dddmpAllDet.html b/Cudd/dddmp/doc/dddmpAllDet.html
+deleted file mode 100644
+index 9d8e7ba..0000000
+--- a/Cudd/dddmp/doc/dddmpAllDet.html
++++ /dev/null
+@@ -1,3704 +0,0 @@
+-<html>
+-<head><title>The dddmp package: all functions </title></head>
+-<body>
+-
+-A set of internal low-level routines of the dddmp package
+- doing:
+- <ul>
+- <li> read and write of node codes in binary mode,
+- <li> read and write of integers in binary mode,
+- <li> marking/unmarking nodes as visited,
+- <li> numbering nodes.
+- </ul>
+-<HR>
+-<DL>
+-<dt><pre>
+-<A NAME="DddmpBddReadHeaderCnf"></A>
+-static Dddmp_Hdr_t * <I></I>
+-<B>DddmpBddReadHeaderCnf</B>(
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b> <i>IN: file pointer</i>
+-)
+-</pre>
+-<dd> Reads the header of a dump file. Builds a Dddmp_Hdr_t struct
+- containing all infos in the header, for next manipulations.
+-<p>
+-
+-<dd> <b>Side Effects</b> none
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoadCnf.c"TARGET="ABSTRACT"><CODE>dddmpLoadCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpBddReadHeader"></A>
+-static Dddmp_Hdr_t * <I></I>
+-<B>DddmpBddReadHeader</B>(
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b> <i>IN: file pointer</i>
+-)
+-</pre>
+-<dd> Reads the header of a dump file. Builds a Dddmp_Hdr_t struct
+- containing all infos in the header, for next manipulations.
+-<p>
+-
+-<dd> <b>Side Effects</b> none
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoad.c"TARGET="ABSTRACT"><CODE>dddmpLoad.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpClearVisitedAdd"></A>
+-void <I></I>
+-<B>DddmpClearVisitedAdd</B>(
+- DdNode * <b>f</b> <i>IN: BDD node to be marked (as not visited)</i>
+-)
+-</pre>
+-<dd> Marks a node as not visited
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpVisitedAdd">DddmpVisitedAdd</a>
+-()
+-<a href="#DddmpSetVisitedAdd">DddmpSetVisitedAdd</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeAdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeAdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpClearVisitedBdd"></A>
+-void <I></I>
+-<B>DddmpClearVisitedBdd</B>(
+- DdNode * <b>f</b> <i>IN: BDD node to be marked (as not visited)</i>
+-)
+-</pre>
+-<dd> Marks a node as not visited
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpVisited">DddmpVisited</a>
+-()
+-<a href="#DddmpSetVisited">DddmpSetVisited</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpClearVisitedCnfRecur"></A>
+-static int <I></I>
+-<B>DddmpClearVisitedCnfRecur</B>(
+- DdNode * <b>f</b> <i>IN: root of the BDD to be marked</i>
+-)
+-</pre>
+-<dd> Mark ALL nodes as not visited (it recurs on the node children)
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpVisitedCnf">DddmpVisitedCnf</a>
+-()
+-<a href="#DddmpSetVisitedCnf">DddmpSetVisitedCnf</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpClearVisitedCnfRecur"></A>
+-static int <I></I>
+-<B>DddmpClearVisitedCnfRecur</B>(
+- DdNode * <b>f</b> <i>IN: root of the BDD to be marked</i>
+-)
+-</pre>
+-<dd> Mark ALL nodes as not visited (it recurs on the node children)
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpVisitedCnf">DddmpVisitedCnf</a>
+-()
+-<a href="#DddmpSetVisitedCnf">DddmpSetVisitedCnf</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpClearVisitedCnf"></A>
+-static void <I></I>
+-<B>DddmpClearVisitedCnf</B>(
+- DdNode * <b>f</b> <i>IN: BDD node to be marked (as not visited)</i>
+-)
+-</pre>
+-<dd> Marks a node as not visited
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpVisitedCnf">DddmpVisitedCnf</a>
+-()
+-<a href="#DddmpSetVisitedCnf">DddmpSetVisitedCnf</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpClearVisitedCnf"></A>
+-static void <I></I>
+-<B>DddmpClearVisitedCnf</B>(
+- DdNode * <b>f</b> <i>IN: BDD node to be marked (as not visited)</i>
+-)
+-</pre>
+-<dd> Marks a node as not visited
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpVisitedCnf">DddmpVisitedCnf</a>
+-()
+-<a href="#DddmpSetVisitedCnf">DddmpSetVisitedCnf</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpClearVisited"></A>
+-void <I></I>
+-<B>DddmpClearVisited</B>(
+- DdNode * <b>f</b> <i>IN: BDD node to be marked (as not visited)</i>
+-)
+-</pre>
+-<dd> Marks a node as not visited
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpVisited">DddmpVisited</a>
+-()
+-<a href="#DddmpSetVisited">DddmpSetVisited</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpCnfClauses2Bdd"></A>
+-static int <I></I>
+-<B>DddmpCnfClauses2Bdd</B>(
+- Dddmp_Hdr_t * <b>Hdr</b>, <i>IN: file header</i>
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- int ** <b>cnfTable</b>, <i>IN: CNF table for clauses</i>
+- int <b>mode</b>, <i>IN: computation mode</i>
+- DdNode *** <b>rootsPtrPtr</b> <i>OUT: array of returned BDD roots (by reference)</i>
+-)
+-</pre>
+-<dd> Transforms CNF clauses into BDDs. Clauses are stored in an
+- internal structure previously read. The results can be given in
+- different format according to the mode selection:
+- IFF mode == 0 Return the Clauses without Conjunction
+- IFF mode == 1 Return the sets of BDDs without Quantification
+- IFF mode == 2 Return the sets of BDDs AFTER Existential Quantification
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoadCnf.c"TARGET="ABSTRACT"><CODE>dddmpLoadCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpCuddBddArrayStoreCnf"></A>
+-static int <I></I>
+-<B>DddmpCuddBddArrayStoreCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDD roots to be stored</i>
+- int <b>rootN</b>, <i>IN: # of output BDD roots to be stored</i>
+- Dddmp_DecompCnfStoreType <b>mode</b>, <i>IN: format selection</i>
+- int <b>noHeader</b>, <i>IN: do not store header iff 1</i>
+- char ** <b>varNames</b>, <i>IN: array of variable names (or NULL)</i>
+- int * <b>bddIds</b>, <i>IN: array of BDD node Ids (or NULL)</i>
+- int * <b>bddAuxIds</b>, <i>IN: array of BDD Aux Ids (or NULL)</i>
+- int * <b>cnfIds</b>, <i>IN: array of CNF ids (or NULL)</i>
+- int <b>idInitial</b>, <i>IN: starting id for cutting variables</i>
+- int <b>edgeInTh</b>, <i>IN: Max # Incoming Edges</i>
+- int <b>pathLengthTh</b>, <i>IN: Max Path Length</i>
+- char * <b>fname</b>, <i>IN: file name</i>
+- FILE * <b>fp</b>, <i>IN: pointer to the store file</i>
+- int * <b>clauseNPtr</b>, <i>OUT: number of clause stored</i>
+- int * <b>varNewNPtr</b> <i>OUT: number of new variable created</i>
+-)
+-</pre>
+-<dd> Dumps the argument array of BDDs/ADDs to file in CNF format.
+- The following arrays: varNames, bddIds, bddAuxIds, and cnfIds
+- fix the correspondence among variable names, BDD ids, BDD
+- auxiliary ids and the ids used to store the CNF problem.
+- All these arrays are automatically created iff NULL.
+- Auxiliary variable, iff necessary, are created starting from value
+- idInitial.
+- Iff idInitial is <= 0 its value is selected as the number of internal
+- CUDD variable + 2.
+- Auxiliary variables, i.e., cut points are inserted following these
+- criterias:
+- * edgeInTh
+- indicates the maximum number of incoming edges up to which
+- no cut point (auxiliary variable) is inserted.
+- If edgeInTh:
+- * is equal to -1 no cut point due to incoming edges are inserted
+- (MaxtermByMaxterm method.)
+- * is equal to 0 a cut point is inserted for each node with a single
+- incoming edge, i.e., each node, (NodeByNode method).
+- * is equal to n a cut point is inserted for each node with (n+1)
+- incoming edges.
+- * pathLengthTh
+- indicates the maximum length path up to which no cut points
+- (auxiliary variable) is inserted.
+- If the path length between two nodes exceeds this value, a cut point
+- is inserted.
+- If pathLengthTh:
+- * is equal to -1 no cut point due path length are inserted
+- (MaxtermByMaxterm method.)
+- * is equal to 0 a cut point is inserted for each node (NodeByNode
+- method).
+- * is equal to n a cut point is inserted on path whose length is
+- equal to (n+1).
+- Notice that the maximum number of literals in a clause is equal
+- to (pathLengthTh + 2), i.e., for each path we have to keep into
+- account a CNF variable for each node plus 2 added variables for
+- the bottom and top-path cut points.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from the unique hash table.
+- They are re-linked after the store operation in a modified
+- order.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddStore">Dddmp_cuddBddStore</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreCnf.c"TARGET="ABSTRACT"><CODE>dddmpStoreCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpCuddBddArrayStore"></A>
+-int <I></I>
+-<B>DddmpCuddBddArrayStore</B>(
+- Dddmp_DecompType <b>ddType</b>, <i>IN: Selects the decomp type BDD</i>
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- char * <b>ddname</b>, <i>IN: DD name (or NULL)</i>
+- int <b>nRoots</b>, <i>IN: number of output BDD roots to be stored</i>
+- DdNode ** <b>f</b>, <i>IN: array of DD roots to be stored</i>
+- char ** <b>rootnames</b>, <i>IN: array of root names (or NULL)</i>
+- char ** <b>varnames</b>, <i>IN: array of variable names (or NULL)</i>
+- int * <b>auxids</b>, <i>IN: array of converted var IDs</i>
+- int <b>mode</b>, <i>IN: storing mode selector</i>
+- Dddmp_VarInfoType <b>varinfo</b>, <i>IN: extra info for variables in text mode</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument array of BDDs to file.
+- Internal function doing inner steps of store for BDDs.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from the unique hash
+- table. They are re-linked after the store operation in a
+- modified order.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddStore">Dddmp_cuddBddStore</a>
+-<a href="#Dddmp_cuddBddLoad">Dddmp_cuddBddLoad</a>
+-<a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreBdd.c"TARGET="ABSTRACT"><CODE>dddmpStoreBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpCuddDdArrayLoadCnf"></A>
+-static int <I></I>
+-<B>DddmpCuddDdArrayLoadCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- Dddmp_RootMatchType <b>rootmatchmode</b>, <i>IN: storing mode selector</i>
+- char ** <b>rootmatchnames</b>, <i>IN: sorted names for loaded roots</i>
+- Dddmp_VarMatchType <b>varmatchmode</b>, <i>IN: storing mode selector</i>
+- char ** <b>varmatchnames</b>, <i>IN: array of variable names, by ids</i>
+- int * <b>varmatchauxids</b>, <i>IN: array of variable auxids, by ids</i>
+- int * <b>varcomposeids</b>, <i>IN: array of new ids, by ids</i>
+- int <b>mode</b>, <i>IN: computation mode</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- DdNode *** <b>rootsPtrPtr</b>, <i>OUT: array of BDD roots</i>
+- int * <b>nRoots</b> <i>OUT: number of BDDs returned</i>
+-)
+-</pre>
+-<dd> Reads a dump file representing the argument BDDs in CNF
+- format.
+- IFF mode == 0 Return the Clauses without Conjunction
+- IFF mode == 1 Return the sets of BDDs without Quantification
+- IFF mode == 2 Return the sets of BDDs AFTER Existential Quantification
+-<p>
+-
+-<dd> <b>Side Effects</b> A vector of pointers to DD nodes is allocated and freed.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoadCnf.c"TARGET="ABSTRACT"><CODE>dddmpLoadCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpCuddDdArrayLoad"></A>
+-static int <I></I>
+-<B>DddmpCuddDdArrayLoad</B>(
+- Dddmp_DecompType <b>ddType</b>, <i>IN: Selects decomp type</i>
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- Dddmp_RootMatchType <b>rootMatchMode</b>, <i>IN: storing mode selector</i>
+- char ** <b>rootmatchnames</b>, <i>IN: sorted names for loaded roots</i>
+- Dddmp_VarMatchType <b>varMatchMode</b>, <i>IN: storing mode selector</i>
+- char ** <b>varmatchnames</b>, <i>IN: array of variable names, by ids</i>
+- int * <b>varmatchauxids</b>, <i>IN: array of variable auxids, by ids</i>
+- int * <b>varcomposeids</b>, <i>IN: array of new ids, by ids</i>
+- int <b>mode</b>, <i>IN: requested input file format</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- DdNode *** <b>pproots</b> <i>OUT: array BDD roots (by reference)</i>
+-)
+-</pre>
+-<dd> Reads a dump file representing the argument BDDs. The header is
+- common to both text and binary mode. The node list is either
+- in text or binary format. A dynamic vector of DD pointers
+- is allocated to support conversion from DD indexes to pointers.
+- Several criteria are supported for variable match between file
+- and dd manager. Several changes/permutations/compositions are allowed
+- for variables while loading DDs. Variable of the dd manager are allowed
+- to match with variables on file on ids, permids, varnames,
+- varauxids; also direct composition between ids and
+- composeids is supported. More in detail:
+- <ol>
+- <li> varMatchMode=DDDMP_VAR_MATCHIDS <p>
+- allows the loading of a DD keeping variable IDs unchanged
+- (regardless of the variable ordering of the reading manager); this
+- is useful, for example, when swapping DDs to file and restoring them
+- later from file, after possible variable reordering activations.
+-
+- <li> varMatchMode=DDDMP_VAR_MATCHPERMIDS <p>
+- is used to allow variable match according to the position in the ordering.
+-
+- <li> varMatchMode=DDDMP_VAR_MATCHNAMES <p>
+- requires a non NULL varmatchnames parameter; this is a vector of
+- strings in one-to-one correspondence with variable IDs of the
+- reading manager. Variables in the DD file read are matched with
+- manager variables according to their name (a non NULL varnames
+- parameter was required while storing the DD file).
+-
+- <li> varMatchMode=DDDMP_VAR_MATCHIDS <p>
+- has a meaning similar to DDDMP_VAR_MATCHNAMES, but integer auxiliary
+- IDs are used instead of strings; the additional non NULL
+- varmatchauxids parameter is needed.
+-
+- <li> varMatchMode=DDDMP_VAR_COMPOSEIDS <p>
+- uses the additional varcomposeids parameter is used as array of
+- variable ids to be composed with ids stored in file.
+- </ol>
+-
+- In the present implementation, the array varnames (3), varauxids (4)
+- and composeids (5) need to have one entry for each variable in the
+- DD manager (NULL pointers are allowed for unused variables
+- in varnames). Hence variables need to be already present in the
+- manager. All arrays are sorted according to IDs.
+-<p>
+-
+-<dd> <b>Side Effects</b> A vector of pointers to DD nodes is allocated and freed.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayStore">Dddmp_cuddBddArrayStore</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoad.c"TARGET="ABSTRACT"><CODE>dddmpLoad.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpCuddDdArrayStoreBdd"></A>
+-int <I></I>
+-<B>DddmpCuddDdArrayStoreBdd</B>(
+- Dddmp_DecompType <b>ddType</b>, <i>IN: Selects the decomp type: BDD or ADD</i>
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- char * <b>ddname</b>, <i>IN: DD name (or NULL)</i>
+- int <b>nRoots</b>, <i>IN: number of output BDD roots to be stored</i>
+- DdNode ** <b>f</b>, <i>IN: array of DD roots to be stored</i>
+- char ** <b>rootnames</b>, <i>IN: array of root names (or NULL)</i>
+- char ** <b>varnames</b>, <i>IN: array of variable names (or NULL)</i>
+- int * <b>auxids</b>, <i>IN: array of converted var IDs</i>
+- int <b>mode</b>, <i>IN: storing mode selector</i>
+- Dddmp_VarInfoType <b>varinfo</b>, <i>IN: extra info for variables in text mode</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument array of BDDs/ADDs to file. Internal
+- function doing inner steps of store for BDDs and ADDs.
+- ADD store is presently supported only with the text format.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from the unique hash
+- table. They are re-linked after the store operation in a
+- modified order.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddStore">Dddmp_cuddBddStore</a>
+-<a href="#Dddmp_cuddBddLoad">Dddmp_cuddBddLoad</a>
+-<a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreAdd.c"TARGET="ABSTRACT"><CODE>dddmpStoreAdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpCuddDdArrayStoreBlifBody"></A>
+-static int <I></I>
+-<B>DddmpCuddDdArrayStoreBlifBody</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: Manager</i>
+- int <b>n</b>, <i>IN: Number of output nodes to be dumped</i>
+- DdNode ** <b>f</b>, <i>IN: Array of output nodes to be dumped</i>
+- char ** <b>inputNames</b>, <i>IN: Array of input names (or NULL)</i>
+- char ** <b>outputNames</b>, <i>IN: Array of output names (or NULL)</i>
+- FILE * <b>fp</b> <i>IN: Pointer to the dump file</i>
+-)
+-</pre>
+-<dd> Writes a blif body representing the argument BDDs as a
+- network of multiplexers. One multiplexer is written for each BDD
+- node. It returns 1 in case of success; 0 otherwise (e.g.,
+- out-of-memory, file system full, or an ADD with constants different
+- from 0 and 1).
+- DddmpCuddDdArrayStoreBlif does not close the file: This is the
+- caller responsibility.
+- DddmpCuddDdArrayStoreBlif uses a minimal unique subset of
+- the hexadecimal address of a node as name for it. If the argument
+- inputNames is non-null, it is assumed to hold the pointers to the names
+- of the inputs. Similarly for outputNames. This function prints out only
+- .names part.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreMisc.c"TARGET="ABSTRACT"><CODE>dddmpStoreMisc.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpCuddDdArrayStoreBlifStep"></A>
+-static int <I></I>
+-<B>DddmpCuddDdArrayStoreBlifStep</B>(
+- DdManager * <b>ddMgr</b>, <i></i>
+- DdNode * <b>f</b>, <i></i>
+- FILE * <b>fp</b>, <i></i>
+- st_table * <b>visited</b>, <i></i>
+- char ** <b>names</b> <i></i>
+-)
+-</pre>
+-<dd> Performs the recursive step of DddmpCuddDdArrayStoreBlif.
+- Traverses the BDD f and writes a multiplexer-network description to
+- the file pointed by fp in blif format.
+- f is assumed to be a regular pointer and DddmpCuddDdArrayStoreBlifStep
+- guarantees this assumption in the recursive calls.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreMisc.c"TARGET="ABSTRACT"><CODE>dddmpStoreMisc.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpCuddDdArrayStoreBlif"></A>
+-static int <I></I>
+-<B>DddmpCuddDdArrayStoreBlif</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: Manager</i>
+- int <b>n</b>, <i>IN: Number of output nodes to be dumped</i>
+- DdNode ** <b>f</b>, <i>IN: Array of output nodes to be dumped</i>
+- char ** <b>inputNames</b>, <i>IN: Array of input names (or NULL)</i>
+- char ** <b>outputNames</b>, <i>IN: Array of output names (or NULL)</i>
+- char * <b>modelName</b>, <i>IN: Model name (or NULL)</i>
+- FILE * <b>fp</b> <i>IN: Pointer to the dump file</i>
+-)
+-</pre>
+-<dd> Writes a blif file representing the argument BDDs as a
+- network of multiplexers. One multiplexer is written for each BDD
+- node. It returns 1 in case of success; 0 otherwise (e.g.,
+- out-of-memory, file system full, or an ADD with constants different
+- from 0 and 1).
+- DddmpCuddDdArrayStoreBlif does not close the file: This is the
+- caller responsibility.
+- DddmpCuddDdArrayStoreBlif uses a minimal unique subset of
+- the hexadecimal address of a node as name for it. If the argument
+- inames is non-null, it is assumed to hold the pointers to the names
+- of the inputs. Similarly for outputNames.
+- It prefixes the string "NODE" to each nome to have "regular" names
+- for each elements.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpCuddDdArrayStoreBlifBody">DddmpCuddDdArrayStoreBlifBody</a>
+-<a href="#Cudd_DumpBlif">Cudd_DumpBlif</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreMisc.c"TARGET="ABSTRACT"><CODE>dddmpStoreMisc.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpCuddDdArrayStorePrefixBody"></A>
+-static int <I></I>
+-<B>DddmpCuddDdArrayStorePrefixBody</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: Manager</i>
+- int <b>n</b>, <i>IN: Number of output nodes to be dumped</i>
+- DdNode ** <b>f</b>, <i>IN: Array of output nodes to be dumped</i>
+- char ** <b>inputNames</b>, <i>IN: Array of input names (or NULL)</i>
+- char ** <b>outputNames</b>, <i>IN: Array of output names (or NULL)</i>
+- FILE * <b>fp</b> <i>IN: Pointer to the dump file</i>
+-)
+-</pre>
+-<dd> One multiplexer is written for each BDD node.
+- It returns 1 in case of success; 0 otherwise (e.g., out-of-memory, file
+- system full, or an ADD with constants different from 0 and 1).
+- It does not close the file: This is the caller responsibility.
+- It uses a minimal unique subset of the hexadecimal address of a node as
+- name for it.
+- If the argument inputNames is non-null, it is assumed to hold the
+- pointers to the names of the inputs. Similarly for outputNames.
+- For each BDD node of function f, variable v, then child T, and else
+- child E it stores:
+- f = v * T + v' * E
+- that is
+- (OR f (AND v T) (AND (NOT v) E))
+- If E is a complemented child this results in the following
+- (OR f (AND v T) (AND (NOT v) (NOT E)))
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpCuddDdArrayStoreBlif">DddmpCuddDdArrayStoreBlif</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreMisc.c"TARGET="ABSTRACT"><CODE>dddmpStoreMisc.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpCuddDdArrayStorePrefixStep"></A>
+-static int <I></I>
+-<B>DddmpCuddDdArrayStorePrefixStep</B>(
+- DdManager * <b>ddMgr</b>, <i></i>
+- DdNode * <b>f</b>, <i></i>
+- FILE * <b>fp</b>, <i></i>
+- st_table * <b>visited</b>, <i></i>
+- char ** <b>names</b> <i></i>
+-)
+-</pre>
+-<dd> Performs the recursive step of
+- DddmpCuddDdArrayStorePrefixBody.
+- Traverses the BDD f and writes a multiplexer-network description to the
+- file pointed by fp.
+- For each BDD node of function f, variable v, then child T, and else
+- child E it stores:
+- f = v * T + v' * E
+- that is
+- (OR f (AND v T) (AND (NOT v) E))
+- If E is a complemented child this results in the following
+- (OR f (AND v T) (AND (NOT v) (NOT E)))
+- f is assumed to be a regular pointer and the function guarantees this
+- assumption in the recursive calls.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreMisc.c"TARGET="ABSTRACT"><CODE>dddmpStoreMisc.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpCuddDdArrayStorePrefix"></A>
+-static int <I></I>
+-<B>DddmpCuddDdArrayStorePrefix</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: Manager</i>
+- int <b>n</b>, <i>IN: Number of output nodes to be dumped</i>
+- DdNode ** <b>f</b>, <i>IN: Array of output nodes to be dumped</i>
+- char ** <b>inputNames</b>, <i>IN: Array of input names (or NULL)</i>
+- char ** <b>outputNames</b>, <i>IN: Array of output names (or NULL)</i>
+- char * <b>modelName</b>, <i>IN: Model name (or NULL)</i>
+- FILE * <b>fp</b> <i>IN: Pointer to the dump file</i>
+-)
+-</pre>
+-<dd> One multiplexer is written for each BDD node.
+- It returns 1 in case of success; 0 otherwise (e.g., out-of-memory, file
+- system full, or an ADD with constants different from 0 and 1).
+- It does not close the file: This is the caller responsibility.
+- It uses a minimal unique subset of the hexadecimal address of a node as
+- name for it.
+- If the argument inputNames is non-null, it is assumed to hold the
+- pointers to the names of the inputs. Similarly for outputNames.
+- For each BDD node of function f, variable v, then child T, and else
+- child E it stores:
+- f = v * T + v' * E
+- that is
+- (OR f (AND v T) (AND (NOT v) E))
+- If E is a complemented child this results in the following
+- (OR f (AND v T) (AND (NOT v) (NOT E)))
+- Comments (COMMENT) are added at the beginning of the description to
+- describe inputs and outputs of the design.
+- A buffer (BUF) is add on the output to cope with complemented functions.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpCuddDdArrayStoreBlif">DddmpCuddDdArrayStoreBlif</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreMisc.c"TARGET="ABSTRACT"><CODE>dddmpStoreMisc.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpCuddDdArrayStoreSmvBody"></A>
+-static int <I></I>
+-<B>DddmpCuddDdArrayStoreSmvBody</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: Manager</i>
+- int <b>n</b>, <i>IN: Number of output nodes to be dumped</i>
+- DdNode ** <b>f</b>, <i>IN: Array of output nodes to be dumped</i>
+- char ** <b>inputNames</b>, <i>IN: Array of input names (or NULL)</i>
+- char ** <b>outputNames</b>, <i>IN: Array of output names (or NULL)</i>
+- FILE * <b>fp</b> <i>IN: Pointer to the dump file</i>
+-)
+-</pre>
+-<dd> One multiplexer is written for each BDD node.
+- It returns 1 in case of success; 0 otherwise (e.g., out-of-memory, file
+- system full, or an ADD with constants different from 0 and 1).
+- It does not close the file: This is the caller responsibility.
+- It uses a minimal unique subset of the hexadecimal address of a node as
+- name for it.
+- If the argument inputNames is non-null, it is assumed to hold the
+- pointers to the names of the inputs. Similarly for outputNames.
+- For each BDD node of function f, variable v, then child T, and else
+- child E it stores:
+- f = v * T + v' * E
+- that is
+- (OR f (AND v T) (AND (NOT v) E))
+- If E is a complemented child this results in the following
+- (OR f (AND v T) (AND (NOT v) (NOT E)))
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpCuddDdArrayStoreBlif">DddmpCuddDdArrayStoreBlif</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreMisc.c"TARGET="ABSTRACT"><CODE>dddmpStoreMisc.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpCuddDdArrayStoreSmvStep"></A>
+-static int <I></I>
+-<B>DddmpCuddDdArrayStoreSmvStep</B>(
+- DdManager * <b>ddMgr</b>, <i></i>
+- DdNode * <b>f</b>, <i></i>
+- FILE * <b>fp</b>, <i></i>
+- st_table * <b>visited</b>, <i></i>
+- char ** <b>names</b> <i></i>
+-)
+-</pre>
+-<dd> Performs the recursive step of
+- DddmpCuddDdArrayStoreSmvBody.
+- Traverses the BDD f and writes a multiplexer-network description to the
+- file pointed by fp.
+- For each BDD node of function f, variable v, then child T, and else
+- child E it stores:
+- f = v * T + v' * E
+- that is
+- (OR f (AND v T) (AND (NOT v) E))
+- If E is a complemented child this results in the following
+- (OR f (AND v T) (AND (NOT v) (NOT E)))
+- f is assumed to be a regular pointer and the function guarantees this
+- assumption in the recursive calls.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreMisc.c"TARGET="ABSTRACT"><CODE>dddmpStoreMisc.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpCuddDdArrayStoreSmv"></A>
+-static int <I></I>
+-<B>DddmpCuddDdArrayStoreSmv</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: Manager</i>
+- int <b>n</b>, <i>IN: Number of output nodes to be dumped</i>
+- DdNode ** <b>f</b>, <i>IN: Array of output nodes to be dumped</i>
+- char ** <b>inputNames</b>, <i>IN: Array of input names (or NULL)</i>
+- char ** <b>outputNames</b>, <i>IN: Array of output names (or NULL)</i>
+- char * <b>modelName</b>, <i>IN: Model name (or NULL)</i>
+- FILE * <b>fp</b> <i>IN: Pointer to the dump file</i>
+-)
+-</pre>
+-<dd> One multiplexer is written for each BDD node.
+- It returns 1 in case of success; 0 otherwise (e.g., out-of-memory, file
+- system full, or an ADD with constants different from 0 and 1).
+- It does not close the file: This is the caller responsibility.
+- It uses a minimal unique subset of the hexadecimal address of a node as
+- name for it.
+- If the argument inputNames is non-null, it is assumed to hold the
+- pointers to the names of the inputs. Similarly for outputNames.
+- For each BDD node of function f, variable v, then child T, and else
+- child E it stores:
+- f = v * T + v' * E
+- that is
+- (OR f (AND v T) (AND (NOT v) E))
+- If E is a complemented child this results in the following
+- (OR f (AND v T) (AND (NOT v) (NOT E)))
+- Comments (COMMENT) are added at the beginning of the description to
+- describe inputs and outputs of the design.
+- A buffer (BUF) is add on the output to cope with complemented functions.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpCuddDdArrayStoreBlif">DddmpCuddDdArrayStoreBlif</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreMisc.c"TARGET="ABSTRACT"><CODE>dddmpStoreMisc.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpDdNodesCheckIncomingAndScanPath"></A>
+-static void <I></I>
+-<B>DddmpDdNodesCheckIncomingAndScanPath</B>(
+- DdNode * <b>f</b>, <i>IN: BDD node to be numbered</i>
+- int <b>pathLengthCurrent</b>, <i>IN: Current Path Length</i>
+- int <b>edgeInTh</b>, <i>IN: Max # In-Edges, after a Insert Cut Point</i>
+- int <b>pathLengthTh</b> <i>IN: Max Path Length (after, Insert a Cut Point)</i>
+-)
+-</pre>
+-<dd> Number nodes recursively in post-order.
+- The "visited" flag is used with the right polarity.
+- The node is assigned to a new CNF variable only if it is a "shared"
+- node (i.e. the number of its incoming edges is greater than 1).
+-<p>
+-
+-<dd> <b>Side Effects</b> "visited" flags are set.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpDdNodesCheckIncomingAndScanPath"></A>
+-static void <I></I>
+-<B>DddmpDdNodesCheckIncomingAndScanPath</B>(
+- DdNode * <b>f</b>, <i>IN: BDD node to be numbered</i>
+- int <b>pathLengthCurrent</b>, <i>IN: Current Path Length</i>
+- int <b>edgeInTh</b>, <i>IN: Max # In-Edges, after a Insert Cut Point</i>
+- int <b>pathLengthTh</b> <i>IN: Max Path Length (after, Insert a Cut Point)</i>
+-)
+-</pre>
+-<dd> Number nodes recursively in post-order.
+- The "visited" flag is used with the right polarity.
+- The node is assigned to a new CNF variable only if it is a "shared"
+- node (i.e. the number of its incoming edges is greater than 1).
+-<p>
+-
+-<dd> <b>Side Effects</b> "visited" flags are set.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpDdNodesCountEdgesAndNumber"></A>
+-int <I></I>
+-<B>DddmpDdNodesCountEdgesAndNumber</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: Array of BDDs</i>
+- int <b>rootN</b>, <i>IN: Number of BDD roots in the array of BDDs</i>
+- int <b>edgeInTh</b>, <i>IN: Max # In-Edges, after a Insert Cut Point</i>
+- int <b>pathLengthTh</b>, <i>IN: Max Path Length (after, Insert a Cut Point)</i>
+- int * <b>cnfIds</b>, <i>OUT: CNF identifiers for variables</i>
+- int <b>id</b> <i>OUT: Number of Temporary Variables Introduced</i>
+-)
+-</pre>
+-<dd> Removes nodes from unique table and numbers each node according
+- to the number of its incoming BDD edges.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from unique table
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RemoveFromUniqueRecurCnf()">RemoveFromUniqueRecurCnf()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpDdNodesCountEdgesAndNumber"></A>
+-int <I></I>
+-<B>DddmpDdNodesCountEdgesAndNumber</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: Array of BDDs</i>
+- int <b>rootN</b>, <i>IN: Number of BDD roots in the array of BDDs</i>
+- int <b>edgeInTh</b>, <i>IN: Max # In-Edges, after a Insert Cut Point</i>
+- int <b>pathLengthTh</b>, <i>IN: Max Path Length (after, Insert a Cut Point)</i>
+- int * <b>cnfIds</b>, <i>OUT: CNF identifiers for variables</i>
+- int <b>id</b> <i>OUT: Number of Temporary Variables Introduced</i>
+-)
+-</pre>
+-<dd> Removes nodes from unique table and numbers each node according
+- to the number of its incoming BDD edges.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from unique table
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RemoveFromUniqueRecurCnf()">RemoveFromUniqueRecurCnf()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpDdNodesCountEdgesRecur"></A>
+-static int <I></I>
+-<B>DddmpDdNodesCountEdgesRecur</B>(
+- DdNode * <b>f</b> <i>IN: root of the BDD</i>
+-)
+-</pre>
+-<dd> Counts (recursively) the number of incoming edges for each
+- node of a BDD. This number is stored in the index field.
+-<p>
+-
+-<dd> <b>Side Effects</b> "visited" flags remain untouched.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpDdNodesCountEdgesRecur"></A>
+-static int <I></I>
+-<B>DddmpDdNodesCountEdgesRecur</B>(
+- DdNode * <b>f</b> <i>IN: root of the BDD</i>
+-)
+-</pre>
+-<dd> Counts (recursively) the number of incoming edges for each
+- node of a BDD. This number is stored in the index field.
+-<p>
+-
+-<dd> <b>Side Effects</b> "visited" flags remain untouched.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpDdNodesNumberEdgesRecur"></A>
+-static int <I></I>
+-<B>DddmpDdNodesNumberEdgesRecur</B>(
+- DdNode * <b>f</b>, <i>IN: BDD node to be numbered</i>
+- int * <b>cnfIds</b>, <i>IN: possible source for numbering</i>
+- int <b>id</b> <i>IN/OUT: possible source for numbering</i>
+-)
+-</pre>
+-<dd> Number nodes recursively in post-order.
+- The "visited" flag is used with the inverse polarity.
+- Numbering follows the subsequent strategy:
+- * if the index = 0 it remains so
+- * if the index >= 1 it gets enumerated.
+- This implies that the node is assigned to a new CNF variable only if
+- it is not a terminal node otherwise it is assigned the index of
+- the BDD variable.
+-<p>
+-
+-<dd> <b>Side Effects</b> "visited" flags are reset.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpDdNodesNumberEdgesRecur"></A>
+-static int <I></I>
+-<B>DddmpDdNodesNumberEdgesRecur</B>(
+- DdNode * <b>f</b>, <i>IN: BDD node to be numbered</i>
+- int * <b>cnfIds</b>, <i>IN: possible source for numbering</i>
+- int <b>id</b> <i>IN/OUT: possible source for numbering</i>
+-)
+-</pre>
+-<dd> Number nodes recursively in post-order.
+- The "visited" flag is used with the inverse polarity.
+- Numbering follows the subsequent strategy:
+- * if the index = 0 it remains so
+- * if the index >= 1 it gets enumerated.
+- This implies that the node is assigned to a new CNF variable only if
+- it is not a terminal node otherwise it is assigned the index of
+- the BDD variable.
+-<p>
+-
+-<dd> <b>Side Effects</b> "visited" flags are reset.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpDdNodesResetCountRecur"></A>
+-static int <I></I>
+-<B>DddmpDdNodesResetCountRecur</B>(
+- DdNode * <b>f</b> <i>IN: root of the BDD whose counters are reset</i>
+-)
+-</pre>
+-<dd> Resets counter and visited flag for ALL nodes of a BDD (it
+- recurs on the node children). The index field of the node is
+- used as counter.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpDdNodesResetCountRecur"></A>
+-static int <I></I>
+-<B>DddmpDdNodesResetCountRecur</B>(
+- DdNode * <b>f</b> <i>IN: root of the BDD whose counters are reset</i>
+-)
+-</pre>
+-<dd> Resets counter and visited flag for ALL nodes of a BDD (it
+- recurs on the node children). The index field of the node is
+- used as counter.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpFreeHeaderCnf"></A>
+-static void <I></I>
+-<B>DddmpFreeHeaderCnf</B>(
+- Dddmp_Hdr_t * <b>Hdr</b> <i>IN: pointer to header</i>
+-)
+-</pre>
+-<dd> Frees the internal header structure by freeing all internal
+- fields first.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoadCnf.c"TARGET="ABSTRACT"><CODE>dddmpLoadCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpFreeHeader"></A>
+-static void <I></I>
+-<B>DddmpFreeHeader</B>(
+- Dddmp_Hdr_t * <b>Hdr</b> <i>IN: pointer to header</i>
+-)
+-</pre>
+-<dd> Frees the internal header structureby freeing all internal
+- fields first.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoad.c"TARGET="ABSTRACT"><CODE>dddmpLoad.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpIntArrayDup"></A>
+-int * <I></I>
+-<B>DddmpIntArrayDup</B>(
+- int * <b>array</b>, <i>IN: array of ints to be duplicated</i>
+- int <b>n</b> <i>IN: size of the array</i>
+-)
+-</pre>
+-<dd> Allocates memory and copies source array
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpUtil.c"TARGET="ABSTRACT"><CODE>dddmpUtil.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpIntArrayRead"></A>
+-int * <I></I>
+-<B>DddmpIntArrayRead</B>(
+- FILE * <b>fp</b>, <i>IN: input file</i>
+- int <b>n</b> <i>IN: size of the array</i>
+-)
+-</pre>
+-<dd> Allocates memory and inputs source array
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpUtil.c"TARGET="ABSTRACT"><CODE>dddmpUtil.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpIntArrayWrite"></A>
+-int <I></I>
+-<B>DddmpIntArrayWrite</B>(
+- FILE * <b>fp</b>, <i>IN: output file</i>
+- int * <b>array</b>, <i>IN: array of ints</i>
+- int <b>n</b> <i>IN: size of the array</i>
+-)
+-</pre>
+-<dd> Outputs an array of ints to a specified file
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpUtil.c"TARGET="ABSTRACT"><CODE>dddmpUtil.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpNumberAddNodes"></A>
+-int <I></I>
+-<B>DddmpNumberAddNodes</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDDs</i>
+- int <b>n</b> <i>IN: number of BDD roots in the array of BDDs</i>
+-)
+-</pre>
+-<dd> Node numbering is required to convert pointers to integers.
+- Since nodes are removed from unique table, no new nodes should
+- be generated before re-inserting nodes in the unique table
+- (DddmpUnnumberDdNodes()).
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from unique table
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RemoveFromUniqueRecurAdd">RemoveFromUniqueRecurAdd</a>
+-()
+-<a href="#NumberNodeRecurAdd">NumberNodeRecurAdd</a>
+-()
+-<a href="#DddmpUnnumberDdNodesAdd">DddmpUnnumberDdNodesAdd</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeAdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeAdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpNumberBddNodes"></A>
+-int <I></I>
+-<B>DddmpNumberBddNodes</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDDs</i>
+- int <b>n</b> <i>IN: number of BDD roots in the array of BDDs</i>
+-)
+-</pre>
+-<dd> Node numbering is required to convert pointers to integers.
+- Since nodes are removed from unique table, no new nodes should
+- be generated before re-inserting nodes in the unique table
+- (DddmpUnnumberBddNodes ()).
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from unique table
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RemoveFromUniqueRecur()">RemoveFromUniqueRecur()</a>
+-<a href="#NumberNodeRecur()">NumberNodeRecur()</a>
+-<a href="#DddmpUnnumberBddNodes">DddmpUnnumberBddNodes</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpNumberDdNodesCnf"></A>
+-int <I></I>
+-<B>DddmpNumberDdNodesCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDDs</i>
+- int <b>rootN</b>, <i>IN: number of BDD roots in the array of BDDs</i>
+- int * <b>cnfIds</b>, <i>OUT: CNF identifiers for variables</i>
+- int <b>id</b> <i>OUT: number of Temporary Variables Introduced</i>
+-)
+-</pre>
+-<dd> Node numbering is required to convert pointers to integers.
+- Since nodes are removed from unique table, no new nodes should
+- be generated before re-inserting nodes in the unique table
+- (DddmpUnnumberDdNodesCnf()).
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from unique table
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RemoveFromUniqueRecurCnf()">RemoveFromUniqueRecurCnf()</a>
+-<a href="#NumberNodeRecurCnf()">NumberNodeRecurCnf()</a>
+-<a href="#DddmpUnnumberDdNodesCnf()">DddmpUnnumberDdNodesCnf()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpNumberDdNodesCnf"></A>
+-int <I></I>
+-<B>DddmpNumberDdNodesCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDDs</i>
+- int <b>rootN</b>, <i>IN: number of BDD roots in the array of BDDs</i>
+- int * <b>cnfIds</b>, <i>OUT: CNF identifiers for variables</i>
+- int <b>id</b> <i>OUT: number of Temporary Variables Introduced</i>
+-)
+-</pre>
+-<dd> Node numbering is required to convert pointers to integers.
+- Since nodes are removed from unique table, no new nodes should
+- be generated before re-inserting nodes in the unique table
+- (DddmpUnnumberDdNodesCnf()).
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from unique table
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RemoveFromUniqueRecurCnf()">RemoveFromUniqueRecurCnf()</a>
+-<a href="#NumberNodeRecurCnf()">NumberNodeRecurCnf()</a>
+-<a href="#DddmpUnnumberDdNodesCnf()">DddmpUnnumberDdNodesCnf()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpNumberDdNodes"></A>
+-int <I></I>
+-<B>DddmpNumberDdNodes</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDDs</i>
+- int <b>n</b> <i>IN: number of BDD roots in the array of BDDs</i>
+-)
+-</pre>
+-<dd> Node numbering is required to convert pointers to integers.
+- Since nodes are removed from unique table, no new nodes should
+- be generated before re-inserting nodes in the unique table
+- (DddmpUnnumberDdNodes()).
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from unique table
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RemoveFromUniqueRecur()">RemoveFromUniqueRecur()</a>
+-<a href="#NumberNodeRecur()">NumberNodeRecur()</a>
+-<a href="#DddmpUnnumberDdNodes()">DddmpUnnumberDdNodes()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpPrintBddAndNextRecur"></A>
+-static int <I></I>
+-<B>DddmpPrintBddAndNextRecur</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b> <i>IN: root of the BDD to be displayed</i>
+-)
+-</pre>
+-<dd> Prints debug info for a BDD on the screen. It recurs on
+- node's children.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpPrintBddAndNextRecur"></A>
+-static int <I></I>
+-<B>DddmpPrintBddAndNextRecur</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b> <i>IN: root of the BDD to be displayed</i>
+-)
+-</pre>
+-<dd> Prints debug info for a BDD on the screen. It recurs on
+- node's children.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpPrintBddAndNext"></A>
+-int <I></I>
+-<B>DddmpPrintBddAndNext</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: Array of BDDs to be displayed</i>
+- int <b>rootN</b> <i>IN: Number of BDD roots in the array of BDDs</i>
+-)
+-</pre>
+-<dd> Prints debug information for an array of BDDs on the screen
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpPrintBddAndNext"></A>
+-int <I></I>
+-<B>DddmpPrintBddAndNext</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: Array of BDDs to be displayed</i>
+- int <b>rootN</b> <i>IN: Number of BDD roots in the array of BDDs</i>
+-)
+-</pre>
+-<dd> Prints debug information for an array of BDDs on the screen
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpReadCnfClauses"></A>
+-static int <I></I>
+-<B>DddmpReadCnfClauses</B>(
+- Dddmp_Hdr_t * <b>Hdr</b>, <i>IN: file header</i>
+- int *** <b>cnfTable</b>, <i>OUT: CNF table for clauses</i>
+- FILE * <b>fp</b> <i>IN: source file</i>
+-)
+-</pre>
+-<dd> Read the CNF clauses from the file in the standard DIMACS
+- format. Store all the clauses in an internal structure for
+- future transformation into BDDs.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoadCnf.c"TARGET="ABSTRACT"><CODE>dddmpLoadCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpReadCode"></A>
+-int <I></I>
+-<B>DddmpReadCode</B>(
+- FILE * <b>fp</b>, <i>IN: file where to read the code</i>
+- struct binary_dd_code * <b>pcode</b> <i>OUT: the read code</i>
+-)
+-</pre>
+-<dd> Reads a 1 byte node code. See DddmpWriteCode()
+- for code description.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpWriteCode()">DddmpWriteCode()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpBinary.c"TARGET="ABSTRACT"><CODE>dddmpBinary.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpReadInt"></A>
+-int <I></I>
+-<B>DddmpReadInt</B>(
+- FILE * <b>fp</b>, <i>IN: file where to read the integer</i>
+- int * <b>pid</b> <i>OUT: the read integer</i>
+-)
+-</pre>
+-<dd> Reads an integer coded on a sequence of bytes. See
+- DddmpWriteInt() for format.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpWriteInt()">DddmpWriteInt()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpBinary.c"TARGET="ABSTRACT"><CODE>dddmpBinary.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpReadNodeIndexAdd"></A>
+-int <I></I>
+-<B>DddmpReadNodeIndexAdd</B>(
+- DdNode * <b>f</b> <i>IN: BDD node</i>
+-)
+-</pre>
+-<dd> Reads the index of a node. LSB is skipped (used as visited
+- flag).
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpWriteNodeIndexAdd">DddmpWriteNodeIndexAdd</a>
+-()
+-<a href="#DddmpSetVisitedAdd">DddmpSetVisitedAdd</a>
+-()
+-<a href="#DddmpVisitedAdd">DddmpVisitedAdd</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeAdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeAdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpReadNodeIndexBdd"></A>
+-int <I></I>
+-<B>DddmpReadNodeIndexBdd</B>(
+- DdNode * <b>f</b> <i>IN: BDD node</i>
+-)
+-</pre>
+-<dd> Reads the index of a node. LSB is skipped (used as visited
+- flag).
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpWriteNodeIndexBdd">DddmpWriteNodeIndexBdd</a>
+-()
+-<a href="#DddmpSetVisitedBdd">DddmpSetVisitedBdd</a>
+-()
+-<a href="#DddmpVisitedBdd">DddmpVisitedBdd</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpReadNodeIndexCnf"></A>
+-int <I></I>
+-<B>DddmpReadNodeIndexCnf</B>(
+- DdNode * <b>f</b> <i>IN: BDD node</i>
+-)
+-</pre>
+-<dd> Reads the index of a node. LSB is skipped (used as visited
+- flag).
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpWriteNodeIndexCnf()">DddmpWriteNodeIndexCnf()</a>
+-<a href="#DddmpSetVisitedCnf">DddmpSetVisitedCnf</a>
+-()
+-<a href="#DddmpVisitedCnf">DddmpVisitedCnf</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpReadNodeIndexCnf"></A>
+-static int <I></I>
+-<B>DddmpReadNodeIndexCnf</B>(
+- DdNode * <b>f</b> <i>IN: BDD node</i>
+-)
+-</pre>
+-<dd> Reads the index of a node. LSB is skipped (used as visited
+- flag).
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpWriteNodeIndexCnf()">DddmpWriteNodeIndexCnf()</a>
+-<a href="#DddmpSetVisitedCnf">DddmpSetVisitedCnf</a>
+-()
+-<a href="#DddmpVisitedCnf">DddmpVisitedCnf</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpReadNodeIndex"></A>
+-int <I></I>
+-<B>DddmpReadNodeIndex</B>(
+- DdNode * <b>f</b> <i>IN: BDD node</i>
+-)
+-</pre>
+-<dd> Reads the index of a node. LSB is skipped (used as visited
+- flag).
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpWriteNodeIndex()">DddmpWriteNodeIndex()</a>
+-<a href="#DddmpSetVisited">DddmpSetVisited</a>
+-()
+-<a href="#DddmpVisited">DddmpVisited</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpSetVisitedAdd"></A>
+-void <I></I>
+-<B>DddmpSetVisitedAdd</B>(
+- DdNode * <b>f</b> <i>IN: BDD node to be marked (as visited)</i>
+-)
+-</pre>
+-<dd> Marks a node as visited
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpVisitedAdd">DddmpVisitedAdd</a>
+-()
+-<a href="#DddmpClearVisitedAdd">DddmpClearVisitedAdd</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeAdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeAdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpSetVisitedBdd"></A>
+-void <I></I>
+-<B>DddmpSetVisitedBdd</B>(
+- DdNode * <b>f</b> <i>IN: BDD node to be marked (as visited)</i>
+-)
+-</pre>
+-<dd> Marks a node as visited
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpVisitedBdd">DddmpVisitedBdd</a>
+-()
+-<a href="#DddmpClearVisitedBdd">DddmpClearVisitedBdd</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpSetVisitedCnf"></A>
+-static void <I></I>
+-<B>DddmpSetVisitedCnf</B>(
+- DdNode * <b>f</b> <i>IN: BDD node to be marked (as visited)</i>
+-)
+-</pre>
+-<dd> Marks a node as visited
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpVisitedCnf">DddmpVisitedCnf</a>
+-()
+-<a href="#DddmpClearVisitedCnf">DddmpClearVisitedCnf</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpSetVisitedCnf"></A>
+-void <I></I>
+-<B>DddmpSetVisitedCnf</B>(
+- DdNode * <b>f</b> <i>IN: BDD node to be marked (as visited)</i>
+-)
+-</pre>
+-<dd> Marks a node as visited
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpVisitedCnf">DddmpVisitedCnf</a>
+-()
+-<a href="#DddmpClearVisitedCnf">DddmpClearVisitedCnf</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpSetVisited"></A>
+-void <I></I>
+-<B>DddmpSetVisited</B>(
+- DdNode * <b>f</b> <i>IN: BDD node to be marked (as visited)</i>
+-)
+-</pre>
+-<dd> Marks a node as visited
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpVisited">DddmpVisited</a>
+-()
+-<a href="#DddmpClearVisited">DddmpClearVisited</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpStrArrayDup"></A>
+-char ** <I></I>
+-<B>DddmpStrArrayDup</B>(
+- char ** <b>array</b>, <i>IN: array of strings to be duplicated</i>
+- int <b>n</b> <i>IN: size of the array</i>
+-)
+-</pre>
+-<dd> Allocates memory and copies source array
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpUtil.c"TARGET="ABSTRACT"><CODE>dddmpUtil.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpStrArrayFree"></A>
+-void <I></I>
+-<B>DddmpStrArrayFree</B>(
+- char ** <b>array</b>, <i>IN: array of strings</i>
+- int <b>n</b> <i>IN: size of the array</i>
+-)
+-</pre>
+-<dd> Frees memory for strings and the array of pointers
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpUtil.c"TARGET="ABSTRACT"><CODE>dddmpUtil.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpStrArrayRead"></A>
+-char ** <I></I>
+-<B>DddmpStrArrayRead</B>(
+- FILE * <b>fp</b>, <i>IN: input file</i>
+- int <b>n</b> <i>IN: size of the array</i>
+-)
+-</pre>
+-<dd> Allocates memory and inputs source array
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpUtil.c"TARGET="ABSTRACT"><CODE>dddmpUtil.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpStrArrayWrite"></A>
+-int <I></I>
+-<B>DddmpStrArrayWrite</B>(
+- FILE * <b>fp</b>, <i>IN: output file</i>
+- char ** <b>array</b>, <i>IN: array of strings</i>
+- int <b>n</b> <i>IN: size of the array</i>
+-)
+-</pre>
+-<dd> Outputs an array of strings to a specified file
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpUtil.c"TARGET="ABSTRACT"><CODE>dddmpUtil.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpStrDup"></A>
+-char * <I></I>
+-<B>DddmpStrDup</B>(
+- char * <b>str</b> <i>IN: string to be duplicated</i>
+-)
+-</pre>
+-<dd> Allocates memory and copies source string
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpUtil.c"TARGET="ABSTRACT"><CODE>dddmpUtil.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpUnnumberAddNodes"></A>
+-void <I></I>
+-<B>DddmpUnnumberAddNodes</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDDs</i>
+- int <b>n</b> <i>IN: number of BDD roots in the array of BDDs</i>
+-)
+-</pre>
+-<dd> Node indexes are no more needed. Nodes are re-linked in the
+- unique table.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpNumberDdNodeAdd">DddmpNumberDdNodeAdd</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeAdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeAdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpUnnumberBddNodes"></A>
+-void <I></I>
+-<B>DddmpUnnumberBddNodes</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDDs</i>
+- int <b>n</b> <i>IN: number of BDD roots in the array of BDDs</i>
+-)
+-</pre>
+-<dd> Node indexes are no more needed. Nodes are re-linked in the
+- unique table.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpNumberBddNode">DddmpNumberBddNode</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpUnnumberDdNodesCnf"></A>
+-void <I></I>
+-<B>DddmpUnnumberDdNodesCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDDs</i>
+- int <b>rootN</b> <i>IN: number of BDD roots in the array of BDDs</i>
+-)
+-</pre>
+-<dd> Node indexes are no more needed. Nodes are re-linked in the
+- unique table.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpNumberDdNode()">DddmpNumberDdNode()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpUnnumberDdNodesCnf"></A>
+-void <I></I>
+-<B>DddmpUnnumberDdNodesCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDDs</i>
+- int <b>rootN</b> <i>IN: number of BDD roots in the array of BDDs</i>
+-)
+-</pre>
+-<dd> Node indexes are no more needed. Nodes are re-linked in the
+- unique table.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpNumberDdNode()">DddmpNumberDdNode()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpUnnumberDdNodes"></A>
+-void <I></I>
+-<B>DddmpUnnumberDdNodes</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDDs</i>
+- int <b>n</b> <i>IN: number of BDD roots in the array of BDDs</i>
+-)
+-</pre>
+-<dd> Node indexes are no more needed. Nodes are re-linked in the
+- unique table.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpNumberDdNode()">DddmpNumberDdNode()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpVisitedAdd"></A>
+-int <I></I>
+-<B>DddmpVisitedAdd</B>(
+- DdNode * <b>f</b> <i>IN: BDD node to be tested</i>
+-)
+-</pre>
+-<dd> Returns true if node is visited
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpSetVisitedAdd">DddmpSetVisitedAdd</a>
+-()
+-<a href="#DddmpClearVisitedAdd">DddmpClearVisitedAdd</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeAdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeAdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpVisitedBdd"></A>
+-int <I></I>
+-<B>DddmpVisitedBdd</B>(
+- DdNode * <b>f</b> <i>IN: BDD node to be tested</i>
+-)
+-</pre>
+-<dd> Returns true if node is visited
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpSetVisitedBdd">DddmpSetVisitedBdd</a>
+-()
+-<a href="#DddmpClearVisitedBdd">DddmpClearVisitedBdd</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpVisitedCnf"></A>
+-int <I></I>
+-<B>DddmpVisitedCnf</B>(
+- DdNode * <b>f</b> <i>IN: BDD node to be tested</i>
+-)
+-</pre>
+-<dd> Returns true if node is visited
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpSetVisitedCnf">DddmpSetVisitedCnf</a>
+-()
+-<a href="#DddmpClearVisitedCnf">DddmpClearVisitedCnf</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpVisitedCnf"></A>
+-static int <I></I>
+-<B>DddmpVisitedCnf</B>(
+- DdNode * <b>f</b> <i>IN: BDD node to be tested</i>
+-)
+-</pre>
+-<dd> Returns true if node is visited
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpSetVisitedCnf">DddmpSetVisitedCnf</a>
+-()
+-<a href="#DddmpClearVisitedCnf">DddmpClearVisitedCnf</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpVisited"></A>
+-int <I></I>
+-<B>DddmpVisited</B>(
+- DdNode * <b>f</b> <i>IN: BDD node to be tested</i>
+-)
+-</pre>
+-<dd> Returns true if node is visited
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpSetVisited">DddmpSetVisited</a>
+-()
+-<a href="#DddmpClearVisited">DddmpClearVisited</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpWriteCode"></A>
+-int <I></I>
+-<B>DddmpWriteCode</B>(
+- FILE * <b>fp</b>, <i>IN: file where to write the code</i>
+- struct binary_dd_code <b>code</b> <i>IN: the code to be written</i>
+-)
+-</pre>
+-<dd> outputs a 1 byte node code using the following format:
+- <pre>
+- Unused : 1 bit;
+- V : 2 bits; (variable code)
+- T : 2 bits; (Then code)
+- Ecompl : 1 bit; (Else complemented)
+- E : 2 bits; (Else code)
+- </pre>
+- Ecompl is set with complemented edges.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpReadCode()">DddmpReadCode()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpBinary.c"TARGET="ABSTRACT"><CODE>dddmpBinary.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpWriteInt"></A>
+-int <I></I>
+-<B>DddmpWriteInt</B>(
+- FILE * <b>fp</b>, <i>IN: file where to write the integer</i>
+- int <b>id</b> <i>IN: integer to be written</i>
+-)
+-</pre>
+-<dd> Writes an integer as a sequence of bytes (MSByte first).
+- For each byte 7 bits are used for data and one (LSBit) as link
+- with a further byte (LSB = 1 means one more byte).
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpReadInt()">DddmpReadInt()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpBinary.c"TARGET="ABSTRACT"><CODE>dddmpBinary.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpWriteNodeIndexAdd"></A>
+-void <I></I>
+-<B>DddmpWriteNodeIndexAdd</B>(
+- DdNode * <b>f</b>, <i>IN: BDD node</i>
+- int <b>id</b> <i>IN: index to be written</i>
+-)
+-</pre>
+-<dd> The index of the node is written in the "next" field of
+- a DdNode struct. LSB is not used (set to 0). It is used as
+- "visited" flag in DD traversals.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpReadNodeIndexAdd">DddmpReadNodeIndexAdd</a>
+-()
+-<a href="#DddmpSetVisitedAdd">DddmpSetVisitedAdd</a>
+-()
+-<a href="#DddmpVisitedAdd">DddmpVisitedAdd</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeAdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeAdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpWriteNodeIndexBdd"></A>
+-void <I></I>
+-<B>DddmpWriteNodeIndexBdd</B>(
+- DdNode * <b>f</b>, <i>IN: BDD node</i>
+- int <b>id</b> <i>IN: index to be written</i>
+-)
+-</pre>
+-<dd> The index of the node is written in the "next" field of
+- a DdNode struct. LSB is not used (set to 0). It is used as
+- "visited" flag in DD traversals.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpReadNodeIndexBdd()">DddmpReadNodeIndexBdd()</a>
+-<a href="#DddmpSetVisitedBdd">DddmpSetVisitedBdd</a>
+-()
+-<a href="#DddmpVisitedBdd">DddmpVisitedBdd</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpWriteNodeIndexCnfBis"></A>
+-int <I></I>
+-<B>DddmpWriteNodeIndexCnfBis</B>(
+- DdNode * <b>f</b>, <i>IN: BDD node</i>
+- int <b>id</b> <i>IN: index to be written</i>
+-)
+-</pre>
+-<dd> The index of the node is written in the "next" field of
+- a DdNode struct. LSB is not used (set to 0). It is used as
+- "visited" flag in DD traversals.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpReadNodeIndexCnf()">DddmpReadNodeIndexCnf()</a>
+-<a href="#DddmpSetVisitedCnf">DddmpSetVisitedCnf</a>
+-()
+-<a href="#DddmpVisitedCnf">DddmpVisitedCnf</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpWriteNodeIndexCnfWithTerminalCheck"></A>
+-static int <I></I>
+-<B>DddmpWriteNodeIndexCnfWithTerminalCheck</B>(
+- DdNode * <b>f</b>, <i>IN: BDD node</i>
+- int * <b>cnfIds</b>, <i>IN: possible source for the index to be written</i>
+- int <b>id</b> <i>IN: possible source for the index to be written</i>
+-)
+-</pre>
+-<dd> The index of the node is written in the "next" field of
+- a DdNode struct. LSB is not used (set to 0). It is used as
+- "visited" flag in DD traversals. The index corresponds to
+- the BDD node variable if both the node's children are a
+- constant node, otherwise a new CNF variable is used.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpReadNodeIndexCnf()">DddmpReadNodeIndexCnf()</a>
+-<a href="#DddmpSetVisitedCnf">DddmpSetVisitedCnf</a>
+-()
+-<a href="#DddmpVisitedCnf">DddmpVisitedCnf</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpWriteNodeIndexCnf"></A>
+-int <I></I>
+-<B>DddmpWriteNodeIndexCnf</B>(
+- DdNode * <b>f</b>, <i>IN: BDD node</i>
+- int <b>id</b> <i>IN: index to be written</i>
+-)
+-</pre>
+-<dd> The index of the node is written in the "next" field of
+- a DdNode struct. LSB is not used (set to 0). It is used as
+- "visited" flag in DD traversals.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpReadNodeIndexCnf()">DddmpReadNodeIndexCnf()</a>
+-<a href="#DddmpSetVisitedCnf">DddmpSetVisitedCnf</a>
+-()
+-<a href="#DddmpVisitedCnf">DddmpVisitedCnf</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpWriteNodeIndexCnf"></A>
+-static int <I></I>
+-<B>DddmpWriteNodeIndexCnf</B>(
+- DdNode * <b>f</b>, <i>IN: BDD node</i>
+- int * <b>cnfIds</b>, <i>IN: possible source for the index to be written</i>
+- int <b>id</b> <i>IN: possible source for the index to be written</i>
+-)
+-</pre>
+-<dd> The index of the node is written in the "next" field of
+- a DdNode struct. LSB is not used (set to 0). It is used as
+- "visited" flag in DD traversals. The index corresponds to
+- the BDD node variable if both the node's children are a
+- constant node, otherwise a new CNF variable is used.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpReadNodeIndexCnf()">DddmpReadNodeIndexCnf()</a>
+-<a href="#DddmpSetVisitedCnf">DddmpSetVisitedCnf</a>
+-()
+-<a href="#DddmpVisitedCnf">DddmpVisitedCnf</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="DddmpWriteNodeIndex"></A>
+-void <I></I>
+-<B>DddmpWriteNodeIndex</B>(
+- DdNode * <b>f</b>, <i>IN: BDD node</i>
+- int <b>id</b> <i>IN: index to be written</i>
+-)
+-</pre>
+-<dd> The index of the node is written in the "next" field of
+- a DdNode struct. LSB is not used (set to 0). It is used as
+- "visited" flag in DD traversals.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#DddmpReadNodeIndex()">DddmpReadNodeIndex()</a>
+-<a href="#DddmpSetVisited">DddmpSetVisited</a>
+-()
+-<a href="#DddmpVisited">DddmpVisited</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_Bin2Text"></A>
+-int <I></I>
+-<B>Dddmp_Bin2Text</B>(
+- char * <b>filein</b>, <i>IN: name of binary file</i>
+- char * <b>fileout</b> <i>IN: name of ASCII file</i>
+-)
+-</pre>
+-<dd> Converts from binary to ASCII format. A BDD array is loaded and
+- and stored to the target file.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_Text2Bin()">Dddmp_Text2Bin()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpConvert.c"TARGET="ABSTRACT"><CODE>dddmpConvert.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_Text2Bin"></A>
+-int <I></I>
+-<B>Dddmp_Text2Bin</B>(
+- char * <b>filein</b>, <i>IN: name of ASCII file</i>
+- char * <b>fileout</b> <i>IN: name of binary file</i>
+-)
+-</pre>
+-<dd> Converts from ASCII to binary format. A BDD array is loaded and
+- and stored to the target file.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_Bin2Text()">Dddmp_Bin2Text()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpConvert.c"TARGET="ABSTRACT"><CODE>dddmpConvert.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddAddArrayLoad"></A>
+-int <I></I>
+-<B>Dddmp_cuddAddArrayLoad</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- Dddmp_RootMatchType <b>rootMatchMode</b>, <i>IN: storing mode selector</i>
+- char ** <b>rootmatchnames</b>, <i>IN: sorted names for loaded roots</i>
+- Dddmp_VarMatchType <b>varMatchMode</b>, <i>IN: storing mode selector</i>
+- char ** <b>varmatchnames</b>, <i>IN: array of variable names, by ids</i>
+- int * <b>varmatchauxids</b>, <i>IN: array of variable auxids, by ids</i>
+- int * <b>varcomposeids</b>, <i>IN: array of new ids, by ids</i>
+- int <b>mode</b>, <i>IN: requested input file format</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- DdNode *** <b>pproots</b> <i>OUT: array of returned BDD roots</i>
+-)
+-</pre>
+-<dd> Reads a dump file representing the argument ADDs. See
+- BDD load functions for detailed explanation.
+-<p>
+-
+-<dd> <b>Side Effects</b> A vector of pointers to DD nodes is allocated and freed.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayStore">Dddmp_cuddBddArrayStore</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoad.c"TARGET="ABSTRACT"><CODE>dddmpLoad.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddAddArrayStore"></A>
+-int <I></I>
+-<B>Dddmp_cuddAddArrayStore</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- char * <b>ddname</b>, <i>IN: DD name (or NULL)</i>
+- int <b>nRoots</b>, <i>IN: number of output BDD roots to be stored</i>
+- DdNode ** <b>f</b>, <i>IN: array of ADD roots to be stored</i>
+- char ** <b>rootnames</b>, <i>IN: array of root names (or NULL)</i>
+- char ** <b>varnames</b>, <i>IN: array of variable names (or NULL)</i>
+- int * <b>auxids</b>, <i>IN: array of converted var IDs</i>
+- int <b>mode</b>, <i>IN: storing mode selector</i>
+- Dddmp_VarInfoType <b>varinfo</b>, <i>IN: extra info for variables in text mode</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument array of ADDs to file. Dumping is
+- either in text or binary form. see the corresponding BDD dump
+- function for further details.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from the unique hash
+- table. They are re-linked after the store operation in a
+- modified order.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddAddStore">Dddmp_cuddAddStore</a>
+-<a href="#Dddmp_cuddAddLoad">Dddmp_cuddAddLoad</a>
+-<a href="#Dddmp_cuddAddArrayLoad">Dddmp_cuddAddArrayLoad</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreAdd.c"TARGET="ABSTRACT"><CODE>dddmpStoreAdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddAddLoad"></A>
+-DdNode * <I></I>
+-<B>Dddmp_cuddAddLoad</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: Manager</i>
+- Dddmp_VarMatchType <b>varMatchMode</b>, <i>IN: storing mode selector</i>
+- char ** <b>varmatchnames</b>, <i>IN: array of variable names by IDs</i>
+- int * <b>varmatchauxids</b>, <i>IN: array of variable auxids by IDs</i>
+- int * <b>varcomposeids</b>, <i>IN: array of new ids by IDs</i>
+- int <b>mode</b>, <i>IN: requested input file format</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b> <i>IN: file pointer</i>
+-)
+-</pre>
+-<dd> Reads a dump file representing the argument ADD.
+- Dddmp_cuddAddArrayLoad is used through a dummy array.
+-<p>
+-
+-<dd> <b>Side Effects</b> A vector of pointers to DD nodes is allocated and freed.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddAddStore">Dddmp_cuddAddStore</a>
+-<a href="#Dddmp_cuddAddArrayLoad">Dddmp_cuddAddArrayLoad</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoad.c"TARGET="ABSTRACT"><CODE>dddmpLoad.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddAddStore"></A>
+-int <I></I>
+-<B>Dddmp_cuddAddStore</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- char * <b>ddname</b>, <i>IN: DD name (or NULL)</i>
+- DdNode * <b>f</b>, <i>IN: ADD root to be stored</i>
+- char ** <b>varnames</b>, <i>IN: array of variable names (or NULL)</i>
+- int * <b>auxids</b>, <i>IN: array of converted var ids</i>
+- int <b>mode</b>, <i>IN: storing mode selector</i>
+- Dddmp_VarInfoType <b>varinfo</b>, <i>IN: extra info for variables in text mode</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument ADD to file. Dumping is done through
+- Dddmp_cuddAddArrayStore, And a dummy array of 1 ADD root is
+- used for this purpose.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from unique hash. They are
+- re-linked after the store operation in a modified order.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddAddLoad">Dddmp_cuddAddLoad</a>
+-<a href="#Dddmp_cuddAddArrayLoad">Dddmp_cuddAddArrayLoad</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreAdd.c"TARGET="ABSTRACT"><CODE>dddmpStoreAdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddArrayLoadCnf"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddArrayLoadCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- Dddmp_RootMatchType <b>rootmatchmode</b>, <i>IN: storing mode selector</i>
+- char ** <b>rootmatchnames</b>, <i>IN: sorted names for loaded roots</i>
+- Dddmp_VarMatchType <b>varmatchmode</b>, <i>IN: storing mode selector</i>
+- char ** <b>varmatchnames</b>, <i>IN: array of variable names, by IDs</i>
+- int * <b>varmatchauxids</b>, <i>IN: array of variable auxids, by IDs</i>
+- int * <b>varcomposeids</b>, <i>IN: array of new ids, by IDs</i>
+- int <b>mode</b>, <i>IN: computation Mode</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- DdNode *** <b>rootsPtrPtr</b>, <i>OUT: array of returned BDD roots</i>
+- int * <b>nRoots</b> <i>OUT: number of BDDs returned</i>
+-)
+-</pre>
+-<dd> Reads a dump file representing the argument BDD in a
+- CNF formula.
+-<p>
+-
+-<dd> <b>Side Effects</b> A vector of pointers to DD nodes is allocated and freed.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoadCnf.c"TARGET="ABSTRACT"><CODE>dddmpLoadCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddArrayLoad"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddArrayLoad</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- Dddmp_RootMatchType <b>rootMatchMode</b>, <i>IN: storing mode selector</i>
+- char ** <b>rootmatchnames</b>, <i>IN: sorted names for loaded roots</i>
+- Dddmp_VarMatchType <b>varMatchMode</b>, <i>IN: storing mode selector</i>
+- char ** <b>varmatchnames</b>, <i>IN: array of variable names, by ids</i>
+- int * <b>varmatchauxids</b>, <i>IN: array of variable auxids, by ids</i>
+- int * <b>varcomposeids</b>, <i>IN: array of new ids, by ids</i>
+- int <b>mode</b>, <i>IN: requested input file format</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- DdNode *** <b>pproots</b> <i>OUT: array of returned BDD roots</i>
+-)
+-</pre>
+-<dd> Reads a dump file representing the argument BDDs. The header is
+- common to both text and binary mode. The node list is either
+- in text or binary format. A dynamic vector of DD pointers
+- is allocated to support conversion from DD indexes to pointers.
+- Several criteria are supported for variable match between file
+- and dd manager. Several changes/permutations/compositions are allowed
+- for variables while loading DDs. Variable of the dd manager are allowed
+- to match with variables on file on ids, permids, varnames,
+- varauxids; also direct composition between ids and
+- composeids is supported. More in detail:
+- <ol>
+- <li> varMatchMode=DDDMP_VAR_MATCHIDS <p>
+- allows the loading of a DD keeping variable IDs unchanged
+- (regardless of the variable ordering of the reading manager); this
+- is useful, for example, when swapping DDs to file and restoring them
+- later from file, after possible variable reordering activations.
+-
+- <li> varMatchMode=DDDMP_VAR_MATCHPERMIDS <p>
+- is used to allow variable match according to the position in the
+- ordering.
+-
+- <li> varMatchMode=DDDMP_VAR_MATCHNAMES <p>
+- requires a non NULL varmatchnames parameter; this is a vector of
+- strings in one-to-one correspondence with variable IDs of the
+- reading manager. Variables in the DD file read are matched with
+- manager variables according to their name (a non NULL varnames
+- parameter was required while storing the DD file).
+-
+- <li> varMatchMode=DDDMP_VAR_MATCHIDS <p>
+- has a meaning similar to DDDMP_VAR_MATCHNAMES, but integer auxiliary
+- IDs are used instead of strings; the additional non NULL
+- varmatchauxids parameter is needed.
+-
+- <li> varMatchMode=DDDMP_VAR_COMPOSEIDS <p>
+- uses the additional varcomposeids parameter is used as array of
+- variable ids to be composed with ids stored in file.
+- </ol>
+-
+- In the present implementation, the array varnames (3), varauxids (4)
+- and composeids (5) need to have one entry for each variable in the
+- DD manager (NULL pointers are allowed for unused variables
+- in varnames). Hence variables need to be already present in the
+- manager. All arrays are sorted according to IDs.
+-
+- All the loaded BDDs are referenced before returning them.
+-<p>
+-
+-<dd> <b>Side Effects</b> A vector of pointers to DD nodes is allocated and freed.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayStore">Dddmp_cuddBddArrayStore</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoad.c"TARGET="ABSTRACT"><CODE>dddmpLoad.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddArrayStoreBlif"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddArrayStoreBlif</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- int <b>nroots</b>, <i>IN: number of output BDD roots to be stored</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDD roots to be stored</i>
+- char ** <b>inputNames</b>, <i>IN: array of variable names (or NULL)</i>
+- char ** <b>outputNames</b>, <i>IN: array of root names (or NULL)</i>
+- char * <b>modelName</b>, <i>IN: Model Name</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStoreBLif.
+- A dummy array of 1 BDD root is used for this purpose.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayStorePrefix">Dddmp_cuddBddArrayStorePrefix</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreMisc.c"TARGET="ABSTRACT"><CODE>dddmpStoreMisc.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddArrayStoreCnf"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddArrayStoreCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDD roots to be stored</i>
+- int <b>rootN</b>, <i>IN: # output BDD roots to be stored</i>
+- Dddmp_DecompCnfStoreType <b>mode</b>, <i>IN: format selection</i>
+- int <b>noHeader</b>, <i>IN: do not store header iff 1</i>
+- char ** <b>varNames</b>, <i>IN: array of variable names (or NULL)</i>
+- int * <b>bddIds</b>, <i>IN: array of converted var IDs</i>
+- int * <b>bddAuxIds</b>, <i>IN: array of BDD node Auxiliary Ids</i>
+- int * <b>cnfIds</b>, <i>IN: array of converted var IDs</i>
+- int <b>idInitial</b>, <i>IN: starting id for cutting variables</i>
+- int <b>edgeInTh</b>, <i>IN: Max # Incoming Edges</i>
+- int <b>pathLengthTh</b>, <i>IN: Max Path Length</i>
+- char * <b>fname</b>, <i>IN: file name</i>
+- FILE * <b>fp</b>, <i>IN: pointer to the store file</i>
+- int * <b>clauseNPtr</b>, <i>OUT: number of clause stored</i>
+- int * <b>varNewNPtr</b> <i>OUT: number of new variable created</i>
+-)
+-</pre>
+-<dd> Dumps the argument array of BDDs to file.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from the unique hash
+- table. They are re-linked after the store operation in a
+- modified order.
+- Three methods are allowed:
+- * NodeByNode method: Insert a cut-point for each BDD node (but the
+- terminal nodes)
+- * MaxtermByMaxterm method: Insert no cut-points, i.e. the off-set of
+- trhe function is stored
+- * Best method: Tradeoff between the previous two methods.
+- Auxiliary variables, i.e., cut points are inserted following these
+- criterias:
+- * edgeInTh
+- indicates the maximum number of incoming edges up to which
+- no cut point (auxiliary variable) is inserted.
+- If edgeInTh:
+- * is equal to -1 no cut point due to incoming edges are inserted
+- (MaxtermByMaxterm method.)
+- * is equal to 0 a cut point is inserted for each node with a single
+- incoming edge, i.e., each node, (NodeByNode method).
+- * is equal to n a cut point is inserted for each node with (n+1)
+- incoming edges.
+- * pathLengthTh
+- indicates the maximum length path up to which no cut points
+- (auxiliary variable) is inserted.
+- If the path length between two nodes exceeds this value, a cut point
+- is inserted.
+- If pathLengthTh:
+- * is equal to -1 no cut point due path length are inserted
+- (MaxtermByMaxterm method.)
+- * is equal to 0 a cut point is inserted for each node (NodeByNode
+- method).
+- * is equal to n a cut point is inserted on path whose length is
+- equal to (n+1).
+- Notice that the maximum number of literals in a clause is equal
+- to (pathLengthTh + 2), i.e., for each path we have to keep into
+- account a CNF variable for each node plus 2 added variables for
+- the bottom and top-path cut points.
+- The stored file can contain a file header or not depending on the
+- noHeader parameter (IFF 0, usual setting, the header is usually stored.
+- This option can be useful in storing multiple BDDs, as separate BDDs,
+- on the same file leaving the opening of the file to the caller.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreCnf.c"TARGET="ABSTRACT"><CODE>dddmpStoreCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddArrayStorePrefix"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddArrayStorePrefix</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- int <b>nroots</b>, <i>IN: number of output BDD roots to be stored</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDD roots to be stored</i>
+- char ** <b>inputNames</b>, <i>IN: array of variable names (or NULL)</i>
+- char ** <b>outputNames</b>, <i>IN: array of root names (or NULL)</i>
+- char * <b>modelName</b>, <i>IN: Model Name</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStorePrefix.
+- A dummy array of 1 BDD root is used for this purpose.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayStore">Dddmp_cuddBddArrayStore</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreMisc.c"TARGET="ABSTRACT"><CODE>dddmpStoreMisc.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddArrayStoreSmv"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddArrayStoreSmv</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- int <b>nroots</b>, <i>IN: number of output BDD roots to be stored</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDD roots to be stored</i>
+- char ** <b>inputNames</b>, <i>IN: array of variable names (or NULL)</i>
+- char ** <b>outputNames</b>, <i>IN: array of root names (or NULL)</i>
+- char * <b>modelName</b>, <i>IN: Model Name</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStorePrefix.
+- A dummy array of 1 BDD root is used for this purpose.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayStore">Dddmp_cuddBddArrayStore</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreMisc.c"TARGET="ABSTRACT"><CODE>dddmpStoreMisc.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddArrayStore"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddArrayStore</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- char * <b>ddname</b>, <i>IN: dd name (or NULL)</i>
+- int <b>nRoots</b>, <i>IN: number of output BDD roots to be stored</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDD roots to be stored</i>
+- char ** <b>rootnames</b>, <i>IN: array of root names (or NULL)</i>
+- char ** <b>varnames</b>, <i>IN: array of variable names (or NULL)</i>
+- int * <b>auxids</b>, <i>IN: array of converted var IDs</i>
+- int <b>mode</b>, <i>IN: storing mode selector</i>
+- Dddmp_VarInfoType <b>varinfo</b>, <i>IN: extra info for variables in text mode</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument array of BDDs to file. Dumping is either
+- in text or binary form. BDDs are stored to the fp (already
+- open) file if not NULL. Otherwise the file whose name is
+- fname is opened in write mode. The header has the same format
+- for both textual and binary dump. Names are allowed for input
+- variables (vnames) and for represented functions (rnames).
+- For sake of generality and because of dynamic variable
+- ordering both variable IDs and permuted IDs are included.
+- New IDs are also supported (auxids). Variables are identified
+- with incremental numbers. according with their positiom in
+- the support set. In text mode, an extra info may be added,
+- chosen among the following options: name, ID, PermID, or an
+- auxiliary id. Since conversion from DD pointers to integers
+- is required, DD nodes are temporarily removed from the unique
+- hash table. This allows the use of the next field to store
+- node IDs.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from the unique hash
+- table. They are re-linked after the store operation in a
+- modified order.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddStore">Dddmp_cuddBddStore</a>
+-<a href="#Dddmp_cuddBddLoad">Dddmp_cuddBddLoad</a>
+-<a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreBdd.c"TARGET="ABSTRACT"><CODE>dddmpStoreBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddDisplayBinary"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddDisplayBinary</B>(
+- char * <b>fileIn</b>, <i>IN: name of binary file</i>
+- char * <b>fileOut</b> <i>IN: name of text file</i>
+-)
+-</pre>
+-<dd> Display a binary dump file in a text file
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddStore">Dddmp_cuddBddStore</a>
+-<a href="#Dddmp_cuddBddLoad">Dddmp_cuddBddLoad</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDbg.c"TARGET="ABSTRACT"><CODE>dddmpDbg.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddLoadCnf"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddLoadCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- Dddmp_VarMatchType <b>varmatchmode</b>, <i>IN: storing mode selector</i>
+- char ** <b>varmatchnames</b>, <i>IN: array of variable names, by IDs</i>
+- int * <b>varmatchauxids</b>, <i>IN: array of variable auxids, by IDs</i>
+- int * <b>varcomposeids</b>, <i>IN: array of new ids accessed, by IDs</i>
+- int <b>mode</b>, <i>IN: computation mode</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- DdNode *** <b>rootsPtrPtr</b>, <i>OUT: array of returned BDD roots</i>
+- int * <b>nRoots</b> <i>OUT: number of BDDs returned</i>
+-)
+-</pre>
+-<dd> Reads a dump file representing the argument BDD in a
+- CNF formula.
+- Dddmp_cuddBddArrayLoadCnf is used through a dummy array.
+- The results is returned in different formats depending on the
+- mode selection:
+- IFF mode == 0 Return the Clauses without Conjunction
+- IFF mode == 1 Return the sets of BDDs without Quantification
+- IFF mode == 2 Return the sets of BDDs AFTER Existential Quantification
+-<p>
+-
+-<dd> <b>Side Effects</b> A vector of pointers to DD nodes is allocated and freed.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddLoad">Dddmp_cuddBddLoad</a>
+-<a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoadCnf.c"TARGET="ABSTRACT"><CODE>dddmpLoadCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddLoad"></A>
+-DdNode * <I></I>
+-<B>Dddmp_cuddBddLoad</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- Dddmp_VarMatchType <b>varMatchMode</b>, <i>IN: storing mode selector</i>
+- char ** <b>varmatchnames</b>, <i>IN: array of variable names - by IDs</i>
+- int * <b>varmatchauxids</b>, <i>IN: array of variable auxids - by IDs</i>
+- int * <b>varcomposeids</b>, <i>IN: array of new ids accessed - by IDs</i>
+- int <b>mode</b>, <i>IN: requested input file format</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b> <i>IN: file pointer</i>
+-)
+-</pre>
+-<dd> Reads a dump file representing the argument BDD.
+- Dddmp_cuddBddArrayLoad is used through a dummy array (see this
+- function's description for more details).
+- Mode, the requested input file format, is checked against
+- the file format.
+- The loaded BDDs is referenced before returning it.
+-<p>
+-
+-<dd> <b>Side Effects</b> A vector of pointers to DD nodes is allocated and freed.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddStore">Dddmp_cuddBddStore</a>
+-<a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoad.c"TARGET="ABSTRACT"><CODE>dddmpLoad.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddStoreBlif"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddStoreBlif</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- int <b>nRoots</b>, <i>IN: Number of BDD roots</i>
+- DdNode * <b>f</b>, <i>IN: BDD root to be stored</i>
+- char ** <b>inputNames</b>, <i>IN: Array of variable names</i>
+- char ** <b>outputNames</b>, <i>IN: Array of root names</i>
+- char * <b>modelName</b>, <i>IN: Model Name</i>
+- char * <b>fileName</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStoreBlif.
+- A dummy array of 1 BDD root is used for this purpose.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddStorePrefix">Dddmp_cuddBddStorePrefix</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreMisc.c"TARGET="ABSTRACT"><CODE>dddmpStoreMisc.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddStoreCnf"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddStoreCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b>, <i>IN: BDD root to be stored</i>
+- Dddmp_DecompCnfStoreType <b>mode</b>, <i>IN: format selection</i>
+- int <b>noHeader</b>, <i>IN: do not store header iff 1</i>
+- char ** <b>varNames</b>, <i>IN: array of variable names (or NULL)</i>
+- int * <b>bddIds</b>, <i>IN: array of var ids</i>
+- int * <b>bddAuxIds</b>, <i>IN: array of BDD node Auxiliary Ids</i>
+- int * <b>cnfIds</b>, <i>IN: array of CNF var ids</i>
+- int <b>idInitial</b>, <i>IN: starting id for cutting variables</i>
+- int <b>edgeInTh</b>, <i>IN: Max # Incoming Edges</i>
+- int <b>pathLengthTh</b>, <i>IN: Max Path Length</i>
+- char * <b>fname</b>, <i>IN: file name</i>
+- FILE * <b>fp</b>, <i>IN: pointer to the store file</i>
+- int * <b>clauseNPtr</b>, <i>OUT: number of clause stored</i>
+- int * <b>varNewNPtr</b> <i>OUT: number of new variable created</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file.
+- This task is performed by calling the function
+- Dddmp_cuddBddArrayStoreCnf.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from unique hash. They are
+- re-linked after the store operation in a modified order.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayStoreCnf">Dddmp_cuddBddArrayStoreCnf</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreCnf.c"TARGET="ABSTRACT"><CODE>dddmpStoreCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddStorePrefix"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddStorePrefix</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- int <b>nRoots</b>, <i>IN: Number of BDD roots</i>
+- DdNode * <b>f</b>, <i>IN: BDD root to be stored</i>
+- char ** <b>inputNames</b>, <i>IN: Array of variable names</i>
+- char ** <b>outputNames</b>, <i>IN: Array of root names</i>
+- char * <b>modelName</b>, <i>IN: Model Name</i>
+- char * <b>fileName</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStorePrefix.
+- A dummy array of 1 BDD root is used for this purpose.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddStore">Dddmp_cuddBddStore</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreMisc.c"TARGET="ABSTRACT"><CODE>dddmpStoreMisc.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddStoreSmv"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddStoreSmv</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- int <b>nRoots</b>, <i>IN: Number of BDD roots</i>
+- DdNode * <b>f</b>, <i>IN: BDD root to be stored</i>
+- char ** <b>inputNames</b>, <i>IN: Array of variable names</i>
+- char ** <b>outputNames</b>, <i>IN: Array of root names</i>
+- char * <b>modelName</b>, <i>IN: Model Name</i>
+- char * <b>fileName</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStorePrefix.
+- A dummy array of 1 BDD root is used for this purpose.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddStore">Dddmp_cuddBddStore</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreMisc.c"TARGET="ABSTRACT"><CODE>dddmpStoreMisc.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddStore"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddStore</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- char * <b>ddname</b>, <i>IN: DD name (or NULL)</i>
+- DdNode * <b>f</b>, <i>IN: BDD root to be stored</i>
+- char ** <b>varnames</b>, <i>IN: array of variable names (or NULL)</i>
+- int * <b>auxids</b>, <i>IN: array of converted var ids</i>
+- int <b>mode</b>, <i>IN: storing mode selector</i>
+- Dddmp_VarInfoType <b>varinfo</b>, <i>IN: extra info for variables in text mode</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file. Dumping is done through
+- Dddmp_cuddBddArrayStore. A dummy array of 1 BDD root is
+- used for this purpose.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from unique hash. They are
+- re-linked after the store operation in a modified order.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddLoad">Dddmp_cuddBddLoad</a>
+-<a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreBdd.c"TARGET="ABSTRACT"><CODE>dddmpStoreBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddHeaderLoadCnf"></A>
+-int <I></I>
+-<B>Dddmp_cuddHeaderLoadCnf</B>(
+- int * <b>nVars</b>, <i>OUT: number of DD variables</i>
+- int * <b>nsuppvars</b>, <i>OUT: number of support variables</i>
+- char *** <b>suppVarNames</b>, <i>OUT: array of support variable names</i>
+- char *** <b>orderedVarNames</b>, <i>OUT: array of variable names</i>
+- int ** <b>varIds</b>, <i>OUT: array of variable ids</i>
+- int ** <b>varComposeIds</b>, <i>OUT: array of permids ids</i>
+- int ** <b>varAuxIds</b>, <i>OUT: array of variable aux ids</i>
+- int * <b>nRoots</b>, <i>OUT: number of root in the file</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b> <i>IN: file pointer</i>
+-)
+-</pre>
+-<dd> Reads the header of a dump file representing the argument BDDs.
+- Returns main information regarding DD type stored in the file,
+- the variable ordering used, the number of variables, etc.
+- It reads only the header of the file NOT the BDD/ADD section.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoadCnf.c"TARGET="ABSTRACT"><CODE>dddmpLoadCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddHeaderLoad"></A>
+-int <I></I>
+-<B>Dddmp_cuddHeaderLoad</B>(
+- Dddmp_DecompType * <b>ddType</b>, <i>OUT: selects the proper decomp type</i>
+- int * <b>nVars</b>, <i>OUT: number of DD variables</i>
+- int * <b>nsuppvars</b>, <i>OUT: number of support variables</i>
+- char *** <b>suppVarNames</b>, <i>OUT: array of support variable names</i>
+- char *** <b>orderedVarNames</b>, <i>OUT: array of variable names</i>
+- int ** <b>varIds</b>, <i>OUT: array of variable ids</i>
+- int ** <b>varComposeIds</b>, <i>OUT: array of permids ids</i>
+- int ** <b>varAuxIds</b>, <i>OUT: array of variable aux ids</i>
+- int * <b>nRoots</b>, <i>OUT: number of root in the file</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b> <i>IN: file pointer</i>
+-)
+-</pre>
+-<dd> Reads the header of a dump file representing the argument BDDs.
+- Returns main information regarding DD type stored in the file,
+- the variable ordering used, the number of variables, etc.
+- It reads only the header of the file NOT the BDD/ADD section.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpLoad.c"TARGET="ABSTRACT"><CODE>dddmpLoad.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="FindVarname"></A>
+-int <I></I>
+-<B>FindVarname</B>(
+- char * <b>name</b>, <i>IN: name to look for</i>
+- char ** <b>array</b>, <i>IN: search array</i>
+- int <b>n</b> <i>IN: size of the array</i>
+-)
+-</pre>
+-<dd> Binary search of a name within a sorted array of strings.
+- Used when matching names of variables.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpUtil.c"TARGET="ABSTRACT"><CODE>dddmpUtil.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="NodeBinaryStoreBdd"></A>
+-static int <I></I>
+-<B>NodeBinaryStoreBdd</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b>, <i>IN: DD node to be stored</i>
+- int <b>mode</b>, <i>IN: store mode</i>
+- int * <b>supportids</b>, <i>IN: internal ids for variables</i>
+- char ** <b>varnames</b>, <i>IN: names of variables: to be stored with nodes</i>
+- int * <b>outids</b>, <i>IN: output ids for variables</i>
+- FILE * <b>fp</b>, <i>IN: store file</i>
+- int <b>idf</b>, <i>IN: index of the node</i>
+- int <b>vf</b>, <i>IN: variable of the node</i>
+- int <b>idT</b>, <i>IN: index of the Then node</i>
+- int <b>idE</b>, <i>IN: index of the Else node</i>
+- int <b>vT</b>, <i>IN: variable of the Then node</i>
+- int <b>vE</b>, <i>IN: variable of the Else node</i>
+- DdNode * <b>T</b>, <i>IN: Then node</i>
+- DdNode * <b>E</b> <i>IN: Else node</i>
+-)
+-</pre>
+-<dd> Store 1 0 0 for the terminal node.
+- Store id, left child pointer, right pointer for all the other nodes.
+- Store every information as coded binary values.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#NodeTextStoreBdd">NodeTextStoreBdd</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreBdd.c"TARGET="ABSTRACT"><CODE>dddmpStoreBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="NodeStoreRecurAdd"></A>
+-static int <I></I>
+-<B>NodeStoreRecurAdd</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b>, <i>IN: DD node to be stored</i>
+- int <b>mode</b>, <i>IN: store mode</i>
+- int * <b>supportids</b>, <i>IN: internal ids for variables</i>
+- char ** <b>varnames</b>, <i>IN: names of variables: to be stored with nodes</i>
+- int * <b>outids</b>, <i>IN: output ids for variables</i>
+- FILE * <b>fp</b> <i>IN: store file</i>
+-)
+-</pre>
+-<dd> Stores a node to file in either test or binary mode.<l>
+- In text mode a node is represented (on a text line basis) as
+- <UL>
+- <LI> node-index [var-extrainfo] var-index Then-index Else-index
+- </UL>
+-
+- where all indexes are integer numbers and var-extrainfo
+- (optional redundant field) is either an integer or a string
+- (variable name). Node-index is redundant (due to the node
+- ordering) but we keep it for readability.<p>
+-
+- In binary mode nodes are represented as a sequence of bytes,
+- representing var-index, Then-index, and Else-index in an
+- optimized way. Only the first byte (code) is mandatory.
+- Integer indexes are represented in absolute or relative mode,
+- where relative means offset wrt. a Then/Else node info.
+- Suppose Var(NodeId), Then(NodeId) and Else(NodeId) represent
+- infos about a given node.<p>
+-
+- The generic "NodeId" node is stored as
+-
+- <UL>
+- <LI> code-byte
+- <LI> [var-info]
+- <LI> [Then-info]
+- <LI> [Else-info]
+- </UL>
+-
+- where code-byte contains bit fields
+-
+- <UL>
+- <LI>Unused : 1 bit
+- <LI>Variable: 2 bits, one of the following codes
+- <UL>
+- <LI>DDDMP_ABSOLUTE_ID var-info = Var(NodeId) follows
+- <LI>DDDMP_RELATIVE_ID Var(NodeId) is represented in relative form as
+- var-info = Min(Var(Then(NodeId)),Var(Else(NodeId))) -Var(NodeId)
+- <LI>DDDMP_RELATIVE_1 No var-info follows, because
+- Var(NodeId) = Min(Var(Then(NodeId)),Var(Else(NodeId)))-1
+- <LI>DDDMP_TERMINAL Node is a terminal, no var info required
+- </UL>
+- <LI>T : 2 bits, with codes similar to V
+- <UL>
+- <LI>DDDMP_ABSOLUTE_ID Then-info = Then(NodeId) follows
+- <LI>DDDMP_RELATIVE_ID Then(NodeId) is represented in relative form as
+- Then-info = Nodeid-Then(NodeId)
+- <LI>DDDMP_RELATIVE_1 No info on Then(NodeId) follows, because
+- Then(NodeId) = NodeId-1
+- <LI>DDDMP_TERMINAL Then Node is a terminal, no info required (for BDDs)
+- </UL>
+- <LI>Ecompl : 1 bit, if 1 means complemented edge
+- <LI>E : 2 bits, with codes and meanings as for the Then edge
+- </UL>
+- var-info, Then-info, Else-info (if required) are represented as unsigned
+- integer values on a sufficient set of bytes (MSByte first).
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreAdd.c"TARGET="ABSTRACT"><CODE>dddmpStoreAdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="NodeStoreRecurBdd"></A>
+-static int <I></I>
+-<B>NodeStoreRecurBdd</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b>, <i>IN: DD node to be stored</i>
+- int <b>mode</b>, <i>IN: store mode</i>
+- int * <b>supportids</b>, <i>IN: internal ids for variables</i>
+- char ** <b>varnames</b>, <i>IN: names of variables: to be stored with nodes</i>
+- int * <b>outids</b>, <i>IN: output ids for variables</i>
+- FILE * <b>fp</b> <i>IN: store file</i>
+-)
+-</pre>
+-<dd> Stores a node to file in either test or binary mode.<l>
+- In text mode a node is represented (on a text line basis) as
+- <UL>
+- <LI> node-index [var-extrainfo] var-index Then-index Else-index
+- </UL>
+-
+- where all indexes are integer numbers and var-extrainfo
+- (optional redundant field) is either an integer or a string
+- (variable name). Node-index is redundant (due to the node
+- ordering) but we keep it for readability.<p>
+-
+- In binary mode nodes are represented as a sequence of bytes,
+- representing var-index, Then-index, and Else-index in an
+- optimized way. Only the first byte (code) is mandatory.
+- Integer indexes are represented in absolute or relative mode,
+- where relative means offset wrt. a Then/Else node info.
+- Suppose Var(NodeId), Then(NodeId) and Else(NodeId) represent
+- infos about a given node.<p>
+-
+- The generic "NodeId" node is stored as
+-
+- <UL>
+- <LI> code-byte
+- <LI> [var-info]
+- <LI> [Then-info]
+- <LI> [Else-info]
+- </UL>
+-
+- where code-byte contains bit fields
+-
+- <UL>
+- <LI>Unused : 1 bit
+- <LI>Variable: 2 bits, one of the following codes
+- <UL>
+- <LI>DDDMP_ABSOLUTE_ID var-info = Var(NodeId) follows
+- <LI>DDDMP_RELATIVE_ID Var(NodeId) is represented in relative form as
+- var-info = Min(Var(Then(NodeId)),Var(Else(NodeId))) -Var(NodeId)
+- <LI>DDDMP_RELATIVE_1 No var-info follows, because
+- Var(NodeId) = Min(Var(Then(NodeId)),Var(Else(NodeId)))-1
+- <LI>DDDMP_TERMINAL Node is a terminal, no var info required
+- </UL>
+- <LI>T : 2 bits, with codes similar to V
+- <UL>
+- <LI>DDDMP_ABSOLUTE_ID Then-info = Then(NodeId) follows
+- <LI>DDDMP_RELATIVE_ID Then(NodeId) is represented in relative form as
+- Then-info = Nodeid-Then(NodeId)
+- <LI>DDDMP_RELATIVE_1 No info on Then(NodeId) follows, because
+- Then(NodeId) = NodeId-1
+- <LI>DDDMP_TERMINAL Then Node is a terminal, no info required (for BDDs)
+- </UL>
+- <LI>Ecompl : 1 bit, if 1 means complemented edge
+- <LI>E : 2 bits, with codes and meanings as for the Then edge
+- </UL>
+- var-info, Then-info, Else-info (if required) are represented as unsigned
+- integer values on a sufficient set of bytes (MSByte first).
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreBdd.c"TARGET="ABSTRACT"><CODE>dddmpStoreBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="NodeTextStoreAdd"></A>
+-static int <I></I>
+-<B>NodeTextStoreAdd</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b>, <i>IN: DD node to be stored</i>
+- int <b>mode</b>, <i>IN: store mode</i>
+- int * <b>supportids</b>, <i>IN: internal ids for variables</i>
+- char ** <b>varnames</b>, <i>IN: names of variables: to be stored with nodes</i>
+- int * <b>outids</b>, <i>IN: output ids for variables</i>
+- FILE * <b>fp</b>, <i>IN: Store file</i>
+- int <b>idf</b>, <i>IN: index of the current node</i>
+- int <b>vf</b>, <i>IN: variable of the current node</i>
+- int <b>idT</b>, <i>IN: index of the Then node</i>
+- int <b>idE</b> <i>IN: index of the Else node</i>
+-)
+-</pre>
+-<dd> Store 1 0 0 for the terminal node.
+- Store id, left child pointer, right pointer for all the other nodes.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#NodeBinaryStore">NodeBinaryStore</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreAdd.c"TARGET="ABSTRACT"><CODE>dddmpStoreAdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="NodeTextStoreBdd"></A>
+-static int <I></I>
+-<B>NodeTextStoreBdd</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b>, <i>IN: DD node to be stored</i>
+- int <b>mode</b>, <i>IN: store mode</i>
+- int * <b>supportids</b>, <i>IN: internal ids for variables</i>
+- char ** <b>varnames</b>, <i>IN: names of variables: to be stored with nodes</i>
+- int * <b>outids</b>, <i>IN: output ids for variables</i>
+- FILE * <b>fp</b>, <i>IN: Store file</i>
+- int <b>idf</b>, <i>IN: index of the current node</i>
+- int <b>vf</b>, <i>IN: variable of the current node</i>
+- int <b>idT</b>, <i>IN: index of the Then node</i>
+- int <b>idE</b> <i>IN: index of the Else node</i>
+-)
+-</pre>
+-<dd> Store 1 0 0 for the terminal node.
+- Store id, left child pointer, right pointer for all the other nodes.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#NodeBinaryStoreBdd">NodeBinaryStoreBdd</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreBdd.c"TARGET="ABSTRACT"><CODE>dddmpStoreBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="NumberNodeRecurAdd"></A>
+-static int <I></I>
+-<B>NumberNodeRecurAdd</B>(
+- DdNode * <b>f</b>, <i>IN: root of the BDD to be numbered</i>
+- int <b>id</b> <i>IN/OUT: index to be assigned to the node</i>
+-)
+-</pre>
+-<dd> Number nodes recursively in post-order.
+- The "visited" flag is used with inverse polarity, because all nodes
+- were set "visited" when removing them from unique.
+-<p>
+-
+-<dd> <b>Side Effects</b> "visited" flags are reset.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeAdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeAdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="NumberNodeRecurBdd"></A>
+-static int <I></I>
+-<B>NumberNodeRecurBdd</B>(
+- DdNode * <b>f</b>, <i>IN: root of the BDD to be numbered</i>
+- int <b>id</b> <i>IN/OUT: index to be assigned to the node</i>
+-)
+-</pre>
+-<dd> Number nodes recursively in post-order.
+- The "visited" flag is used with inverse polarity, because all nodes
+- were set "visited" when removing them from unique.
+-<p>
+-
+-<dd> <b>Side Effects</b> "visited" flags are reset.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="NumberNodeRecurCnf"></A>
+-static int <I></I>
+-<B>NumberNodeRecurCnf</B>(
+- DdNode * <b>f</b>, <i>IN: root of the BDD to be numbered</i>
+- int * <b>cnfIds</b>, <i>IN: possible source for numbering</i>
+- int <b>id</b> <i>IN/OUT: possible source for numbering</i>
+-)
+-</pre>
+-<dd> Number nodes recursively in post-order.
+- The "visited" flag is used with inverse polarity, because all nodes
+- were set "visited" when removing them from unique.
+-<p>
+-
+-<dd> <b>Side Effects</b> "visited" flags are reset.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="NumberNodeRecurCnf"></A>
+-static int <I></I>
+-<B>NumberNodeRecurCnf</B>(
+- DdNode * <b>f</b>, <i>IN: root of the BDD to be numbered</i>
+- int * <b>cnfIds</b>, <i>IN: possible source for numbering</i>
+- int <b>id</b> <i>IN/OUT: possible source for numbering</i>
+-)
+-</pre>
+-<dd> Number nodes recursively in post-order.
+- The "visited" flag is used with inverse polarity, because all nodes
+- were set "visited" when removing them from unique.
+-<p>
+-
+-<dd> <b>Side Effects</b> "visited" flags are reset.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="NumberNodeRecur"></A>
+-static int <I></I>
+-<B>NumberNodeRecur</B>(
+- DdNode * <b>f</b>, <i>IN: root of the BDD to be numbered</i>
+- int <b>id</b> <i>IN/OUT: index to be assigned to the node</i>
+-)
+-</pre>
+-<dd> Number nodes recursively in post-order.
+- The "visited" flag is used with inverse polarity, because all nodes
+- were set "visited" when removing them from unique.
+-<p>
+-
+-<dd> <b>Side Effects</b> "visited" flags are reset.
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="QsortStrcmp"></A>
+-int <I></I>
+-<B>QsortStrcmp</B>(
+- const void * <b>ps1</b>, <i>IN: pointer to the first string</i>
+- const void * <b>ps2</b> <i>IN: pointer to the second string</i>
+-)
+-</pre>
+-<dd> String compare for qsort
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpUtil.c"TARGET="ABSTRACT"><CODE>dddmpUtil.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="ReadByteBinary"></A>
+-static int <I></I>
+-<B>ReadByteBinary</B>(
+- FILE * <b>fp</b>, <i>IN: file where to read the byte</i>
+- unsigned char * <b>cp</b> <i>OUT: the read byte</i>
+-)
+-</pre>
+-<dd> inputs a byte to file fp. 0x00 has been used as escape character
+- to filter <CR>, <LF> and <ctrl-Z>. This is done for
+- compatibility between unix and dos/windows systems.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#WriteByteBinary()">WriteByteBinary()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpBinary.c"TARGET="ABSTRACT"><CODE>dddmpBinary.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="RemoveFromUniqueRecurAdd"></A>
+-static void <I></I>
+-<B>RemoveFromUniqueRecurAdd</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b> <i>IN: root of the BDD to be extracted</i>
+-)
+-</pre>
+-<dd> Removes a node from the unique table by locating the proper
+- subtable and unlinking the node from it. It recurs on the
+- children of the node. Constants remain untouched.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are left with the "visited" flag true.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RestoreInUniqueRecurAdd">RestoreInUniqueRecurAdd</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeAdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeAdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="RemoveFromUniqueRecurBdd"></A>
+-static void <I></I>
+-<B>RemoveFromUniqueRecurBdd</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b> <i>IN: root of the BDD to be extracted</i>
+-)
+-</pre>
+-<dd> Removes a node from the unique table by locating the proper
+- subtable and unlinking the node from it. It recurs on the
+- children of the node. Constants remain untouched.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are left with the "visited" flag true.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RestoreInUniqueRecurBdd">RestoreInUniqueRecurBdd</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="RemoveFromUniqueRecurCnf"></A>
+-static void <I></I>
+-<B>RemoveFromUniqueRecurCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b> <i>IN: root of the BDD to be extracted</i>
+-)
+-</pre>
+-<dd> Removes a node from the unique table by locating the proper
+- subtable and unlinking the node from it. It recurs on on the
+- children of the node. Constants remain untouched.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are left with the "visited" flag true.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RestoreInUniqueRecurCnf()">RestoreInUniqueRecurCnf()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="RemoveFromUniqueRecurCnf"></A>
+-static void <I></I>
+-<B>RemoveFromUniqueRecurCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b> <i>IN: root of the BDD to be extracted</i>
+-)
+-</pre>
+-<dd> Removes a node from the unique table by locating the proper
+- subtable and unlinking the node from it. It recurs on son nodes.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are left with the "visited" flag true.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RestoreInUniqueRecurCnf()">RestoreInUniqueRecurCnf()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="RemoveFromUniqueRecur"></A>
+-static void <I></I>
+-<B>RemoveFromUniqueRecur</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b> <i>IN: root of the BDD to be extracted</i>
+-)
+-</pre>
+-<dd> Removes a node from the unique table by locating the proper
+- subtable and unlinking the node from it. It recurs on the
+- children of the node.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are left with the "visited" flag true.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RestoreInUniqueRecur()">RestoreInUniqueRecur()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="RestoreInUniqueRecurAdd"></A>
+-static void <I></I>
+-<B>RestoreInUniqueRecurAdd</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b> <i>IN: root of the BDD to be restored</i>
+-)
+-</pre>
+-<dd> Restores a node in unique table (recursively)
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are not restored in the same order as before removal
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RemoveFromUniqueAdd">RemoveFromUniqueAdd</a>
+-()
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeAdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeAdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="RestoreInUniqueRecurBdd"></A>
+-static void <I></I>
+-<B>RestoreInUniqueRecurBdd</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b> <i>IN: root of the BDD to be restored</i>
+-)
+-</pre>
+-<dd> Restores a node in unique table (recursively)
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are not restored in the same order as before removal
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RemoveFromUnique()">RemoveFromUnique()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="RestoreInUniqueRecurCnf"></A>
+-static void <I></I>
+-<B>RestoreInUniqueRecurCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b> <i>IN: root of the BDD to be restored</i>
+-)
+-</pre>
+-<dd> Restores a node in unique table (recursive)
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are not restored in the same order as before removal
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RemoveFromUnique()">RemoveFromUnique()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="RestoreInUniqueRecurCnf"></A>
+-static void <I></I>
+-<B>RestoreInUniqueRecurCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b> <i>IN: root of the BDD to be restored</i>
+-)
+-</pre>
+-<dd> Restores a node in unique table (recursive)
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are not restored in the same order as before removal
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RemoveFromUnique()">RemoveFromUnique()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpNodeCnf.c"TARGET="ABSTRACT"><CODE>dddmpNodeCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="RestoreInUniqueRecur"></A>
+-static void <I></I>
+-<B>RestoreInUniqueRecur</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b> <i>IN: root of the BDD to be restored</i>
+-)
+-</pre>
+-<dd> Restores a node in unique table (recursively)
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are not restored in the same order as before removal
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#RemoveFromUnique()">RemoveFromUnique()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpDdNodeBdd.c"TARGET="ABSTRACT"><CODE>dddmpDdNodeBdd.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="StoreCnfBestNotSharedRecur"></A>
+-static int <I></I>
+-<B>StoreCnfBestNotSharedRecur</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>node</b>, <i>IN: BDD to store</i>
+- int <b>idf</b>, <i>IN: Id to store</i>
+- int * <b>bddIds</b>, <i>IN: BDD identifiers</i>
+- int * <b>cnfIds</b>, <i>IN: corresponding CNF identifiers</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- int * <b>list</b>, <i>IN: temporary array to store cubes</i>
+- int * <b>clauseN</b>, <i>OUT: number of stored clauses</i>
+- int * <b>varMax</b> <i>OUT: maximum identifier of the variables created</i>
+-)
+-</pre>
+-<dd> Performs the recursive step of Print Best on Not Shared
+- sub-BDDs, i.e., print out information for the nodes belonging to
+- BDDs not shared (whose root has just one incoming edge).
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreCnf.c"TARGET="ABSTRACT"><CODE>dddmpStoreCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="StoreCnfBestSharedRecur"></A>
+-static int <I></I>
+-<B>StoreCnfBestSharedRecur</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>node</b>, <i>IN: BDD to store</i>
+- int * <b>bddIds</b>, <i>IN: BDD identifiers</i>
+- int * <b>cnfIds</b>, <i>IN: corresponding CNF identifiers</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- int * <b>list</b>, <i>IN: temporary array to store cubes</i>
+- int * <b>clauseN</b>, <i>OUT: number of stored clauses</i>
+- int * <b>varMax</b> <i>OUT: maximum identifier of the variables created</i>
+-)
+-</pre>
+-<dd> Performs the recursive step of Print Best on Not Shared
+- sub-BDDs, i.e., print out information for the nodes belonging to
+- BDDs not shared (whose root has just one incoming edge).
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreCnf.c"TARGET="ABSTRACT"><CODE>dddmpStoreCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="StoreCnfBest"></A>
+-static int <I></I>
+-<B>StoreCnfBest</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDDs to store</i>
+- int <b>rootN</b>, <i>IN: number of BDD in the array</i>
+- int * <b>bddIds</b>, <i>IN: BDD identifiers</i>
+- int * <b>cnfIds</b>, <i>IN: corresponding CNF identifiers</i>
+- int <b>idInitial</b>, <i>IN: initial value for numbering new CNF variables</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- int * <b>varMax</b>, <i>OUT: maximum identifier of the variables created</i>
+- int * <b>clauseN</b>, <i>OUT: number of stored clauses</i>
+- int * <b>rootStartLine</b> <i>OUT: line where root starts</i>
+-)
+-</pre>
+-<dd> Prints a disjoint sum of product cover for the function
+- rooted at node intorducing cutting points whenever necessary.
+- Each product corresponds to a path from node a leaf
+- node different from the logical zero, and different from the
+- background value. Uses the standard output. Returns 1 if
+- successful, 0 otherwise.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#StoreCnfMaxtermByMaxterm">StoreCnfMaxtermByMaxterm</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreCnf.c"TARGET="ABSTRACT"><CODE>dddmpStoreCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="StoreCnfMaxtermByMaxtermRecur"></A>
+-static void <I></I>
+-<B>StoreCnfMaxtermByMaxtermRecur</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>node</b>, <i>IN: BDD to store</i>
+- int * <b>bddIds</b>, <i>IN: BDD identifiers</i>
+- int * <b>cnfIds</b>, <i>IN: corresponding CNF identifiers</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- int * <b>list</b>, <i>IN: temporary array to store cubes</i>
+- int * <b>clauseN</b>, <i>OUT: number of stored clauses</i>
+- int * <b>varMax</b> <i>OUT: maximum identifier of the variables created</i>
+-)
+-</pre>
+-<dd> Performs the recursive step of Print Maxterm.
+- Traverse a BDD a print out a cube in CNF format each time a terminal
+- node is reached.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreCnf.c"TARGET="ABSTRACT"><CODE>dddmpStoreCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="StoreCnfMaxtermByMaxterm"></A>
+-static int <I></I>
+-<B>StoreCnfMaxtermByMaxterm</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDDs to store</i>
+- int <b>rootN</b>, <i>IN: number of BDDs in the array</i>
+- int * <b>bddIds</b>, <i>IN: BDD Identifiers</i>
+- int * <b>cnfIds</b>, <i>IN: corresponding CNF Identifiers</i>
+- int <b>idInitial</b>, <i>IN: initial value for numbering new CNF variables</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- int * <b>varMax</b>, <i>OUT: maximum identifier of the variables created</i>
+- int * <b>clauseN</b>, <i>OUT: number of stored clauses</i>
+- int * <b>rootStartLine</b> <i>OUT: line where root starts</i>
+-)
+-</pre>
+-<dd> Prints a disjoint sum of product cover for the function
+- rooted at node. Each product corresponds to a path from node a
+- leaf node different from the logical zero, and different from
+- the background value. Uses the standard output. Returns 1 if
+- successful, 0 otherwise.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#StoreCnfBest">StoreCnfBest</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreCnf.c"TARGET="ABSTRACT"><CODE>dddmpStoreCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="StoreCnfNodeByNodeRecur"></A>
+-static int <I></I>
+-<B>StoreCnfNodeByNodeRecur</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b>, <i>IN: BDD node to be stored</i>
+- int * <b>bddIds</b>, <i>IN: BDD ids for variables</i>
+- int * <b>cnfIds</b>, <i>IN: CNF ids for variables</i>
+- FILE * <b>fp</b>, <i>IN: store file</i>
+- int * <b>clauseN</b>, <i>OUT: number of clauses written in the CNF file</i>
+- int * <b>varMax</b> <i>OUT: maximum value of id written in the CNF file</i>
+-)
+-</pre>
+-<dd> Performs the recursive step of Dddmp_bddStore.
+- Traverse the BDD and store a CNF formula for each "terminal" node.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreCnf.c"TARGET="ABSTRACT"><CODE>dddmpStoreCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="StoreCnfNodeByNode"></A>
+-static int <I></I>
+-<B>StoreCnfNodeByNode</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: BDD array to be stored</i>
+- int <b>rootN</b>, <i>IN: number of BDDs in the array</i>
+- int * <b>bddIds</b>, <i>IN: BDD ids for variables</i>
+- int * <b>cnfIds</b>, <i>IN: CNF ids for variables</i>
+- FILE * <b>fp</b>, <i>IN: store file</i>
+- int * <b>clauseN</b>, <i>IN/OUT: number of clauses written in the CNF file</i>
+- int * <b>varMax</b>, <i>IN/OUT: maximum value of id written in the CNF file</i>
+- int * <b>rootStartLine</b> <i>OUT: CNF line where root starts</i>
+-)
+-</pre>
+-<dd> Store the BDD as CNF clauses.
+- Use a multiplexer description for each BDD node.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreCnf.c"TARGET="ABSTRACT"><CODE>dddmpStoreCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="StoreCnfOneNode"></A>
+-static int <I></I>
+-<B>StoreCnfOneNode</B>(
+- DdNode * <b>f</b>, <i>IN: node to be stored</i>
+- int <b>idf</b>, <i>IN: node CNF Index</i>
+- int <b>vf</b>, <i>IN: node BDD Index</i>
+- int <b>idT</b>, <i>IN: Then CNF Index with sign = inverted edge</i>
+- int <b>idE</b>, <i>IN: Else CNF Index with sign = inverted edge</i>
+- FILE * <b>fp</b>, <i>IN: store file</i>
+- int * <b>clauseN</b>, <i>OUT: number of clauses</i>
+- int * <b>varMax</b> <i>OUT: maximun Index of variable stored</i>
+-)
+-</pre>
+-<dd> Store One Single BDD Node translating it as a multiplexer.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreCnf.c"TARGET="ABSTRACT"><CODE>dddmpStoreCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="WriteByteBinary"></A>
+-static int <I></I>
+-<B>WriteByteBinary</B>(
+- FILE * <b>fp</b>, <i>IN: file where to write the byte</i>
+- unsigned char <b>c</b> <i>IN: the byte to be written</i>
+-)
+-</pre>
+-<dd> outputs a byte to file fp. Uses 0x00 as escape character
+- to filter <CR>, <LF> and <ctrl-Z>.
+- This is done for compatibility between unix and dos/windows systems.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#ReadByteBinary()">ReadByteBinary()</a>
+-</code>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpBinary.c"TARGET="ABSTRACT"><CODE>dddmpBinary.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME="printCubeCnf"></A>
+-static int <I></I>
+-<B>printCubeCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>node</b>, <i>IN: BDD to store</i>
+- int * <b>cnfIds</b>, <i>IN: CNF identifiers</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- int * <b>list</b>, <i>IN: temporary array to store cubes</i>
+- int * <b>varMax</b> <i>OUT: maximum identifier of the variables created</i>
+-)
+-</pre>
+-<dd> Print One Cube in CNF Format.
+- Return DDDMP_SUCCESS if something is printed out, DDDMP_FAILURE
+- is nothing is printed out.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpStoreCnf.c"TARGET="ABSTRACT"><CODE>dddmpStoreCnf.c</CODE></A>
+-
+-<dt><pre>
+-<A NAME=""></A>
+- <I></I>
+-<B></B>(
+- <b></b> <i></i>
+-)
+-</pre>
+-<dd> Checks for Warnings: If expr==1 it prints out the warning
+- on stderr.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmp.h"TARGET="ABSTRACT"><CODE>dddmp.h</CODE></A>
+-
+-<dt><pre>
+-<A NAME=""></A>
+- <I></I>
+-<B></B>(
+- <b></b> <i></i>
+-)
+-</pre>
+-<dd> Checks for fatal bugs and go to the label to deal with
+- the error.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmp.h"TARGET="ABSTRACT"><CODE>dddmp.h</CODE></A>
+-
+-<dt><pre>
+-<A NAME=""></A>
+- <I></I>
+-<B></B>(
+- <b></b> <i></i>
+-)
+-</pre>
+-<dd> Checks for fatal bugs and return the DDDMP_FAILURE flag.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmp.h"TARGET="ABSTRACT"><CODE>dddmp.h</CODE></A>
+-
+-<dt><pre>
+-<A NAME=""></A>
+- <I></I>
+-<B></B>(
+- <b></b> <i></i>
+-)
+-</pre>
+-<dd> Conditional safety assertion. It prints out the file
+- name and line number where the fatal error occurred.
+- Messages are printed out on stderr.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmp.h"TARGET="ABSTRACT"><CODE>dddmp.h</CODE></A>
+-
+-<dt><pre>
+-<A NAME=""></A>
+- <I></I>
+-<B></B>(
+- <b></b> <i></i>
+-)
+-</pre>
+-<dd> Memory Allocation Macro for DDDMP
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpInt.h"TARGET="ABSTRACT"><CODE>dddmpInt.h</CODE></A>
+-
+-<dt><pre>
+-<A NAME=""></A>
+- <I></I>
+-<B></B>(
+- <b></b> <i></i>
+-)
+-</pre>
+-<dd> Memory Free Macro for DDDMP
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<DD> <B>Defined in </B> <A HREF="dddmpAllFile.html#dddmpInt.h"TARGET="ABSTRACT"><CODE>dddmpInt.h</CODE></A>
+-
+-
+-</DL>
+-<HR>
+-Last updated on 1040218 17h14
+-</BODY></HTML>
+diff --git a/Cudd/dddmp/doc/dddmpAllFile.html b/Cudd/dddmp/doc/dddmpAllFile.html
+deleted file mode 100644
+index 2664d07..0000000
+--- a/Cudd/dddmp/doc/dddmpAllFile.html
++++ /dev/null
+@@ -1,679 +0,0 @@
+-<HTML>
+-<HEAD><TITLE>The dddmp package: files</TITLE></HEAD>
+-<BODY>
+-
+-<DL>
+- <DT> <A HREF="#dddmp.h"><CODE>dddmp.h</CODE></A>
+- <DD> External header file
+- <DT> <A HREF="#dddmpInt.h"><CODE>dddmpInt.h</CODE></A>
+- <DD> Internal header file
+- <DT> <A HREF="#dddmpBinary.c"><CODE>dddmpBinary.c</CODE></A>
+- <DD> Input and output BDD codes and integers from/to file
+- <DT> <A HREF="#dddmpConvert.c"><CODE>dddmpConvert.c</CODE></A>
+- <DD> Conversion between ASCII and binary formats
+- <DT> <A HREF="#dddmpDbg.c"><CODE>dddmpDbg.c</CODE></A>
+- <DD> Functions to display BDD files
+- <DT> <A HREF="#dddmpDdNodeBdd.c"><CODE>dddmpDdNodeBdd.c</CODE></A>
+- <DD> Functions to handle BDD node infos and numbering
+- <DT> <A HREF="#dddmpDdNodeCnf.c"><CODE>dddmpDdNodeCnf.c</CODE></A>
+- <DD> Functions to handle BDD node infos and numbering
+- while storing a CNF formula from a BDD or an array of BDDs
+- <DT> <A HREF="#dddmpLoad.c"><CODE>dddmpLoad.c</CODE></A>
+- <DD> Functions to read in bdds to file
+- <DT> <A HREF="#dddmpLoadCnf.c"><CODE>dddmpLoadCnf.c</CODE></A>
+- <DD> Functions to read in CNF from file as BDDs.
+- <DT> <A HREF="#dddmpNodeAdd.c"><CODE>dddmpNodeAdd.c</CODE></A>
+- <DD> Functions to handle ADD node infos and numbering
+- <DT> <A HREF="#dddmpNodeBdd.c"><CODE>dddmpNodeBdd.c</CODE></A>
+- <DD> Functions to handle BDD node infos and numbering
+- <DT> <A HREF="#dddmpNodeCnf.c"><CODE>dddmpNodeCnf.c</CODE></A>
+- <DD> Functions to handle BDD node infos and numbering
+- while storing a CNF formula from a BDD or an array of BDDs
+- <DT> <A HREF="#dddmpStoreAdd.c"><CODE>dddmpStoreAdd.c</CODE></A>
+- <DD> Functions to write ADDs to file.
+- <DT> <A HREF="#dddmpStoreBdd.c"><CODE>dddmpStoreBdd.c</CODE></A>
+- <DD> Functions to write BDDs to file.
+- <DT> <A HREF="#dddmpStoreCnf.c"><CODE>dddmpStoreCnf.c</CODE></A>
+- <DD> Functions to write out BDDs to file in a CNF format
+- <DT> <A HREF="#dddmpStoreMisc.c"><CODE>dddmpStoreMisc.c</CODE></A>
+- <DD> Functions to write out bdds to file in prefixed
+- and in Blif form.
+- <DT> <A HREF="#dddmpUtil.c"><CODE>dddmpUtil.c</CODE></A>
+- <DD> Util Functions for the dddmp package
+-</DL><HR>
+-<A NAME="dddmp.h"><H1>dddmp.h</H1></A>
+-External header file <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#" TARGET="MAIN"><CODE>()</CODE></A>
+- <DD> Checks for fatal bugs
+-
+- <DT> <A HREF="dddmpAllDet.html#" TARGET="MAIN"><CODE>()</CODE></A>
+- <DD> Checks for Warnings: If expr==1 it prints out the warning
+- on stderr.
+-
+- <DT> <A HREF="dddmpAllDet.html#" TARGET="MAIN"><CODE>()</CODE></A>
+- <DD> Checks for fatal bugs and return the DDDMP_FAILURE flag.
+-
+- <DT> <A HREF="dddmpAllDet.html#" TARGET="MAIN"><CODE>()</CODE></A>
+- <DD> Checks for fatal bugs and go to the label to deal with
+- the error.
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpInt.h"><H1>dddmpInt.h</H1></A>
+-Internal header file <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#" TARGET="MAIN"><CODE>()</CODE></A>
+- <DD> Memory Allocation Macro for DDDMP
+-
+- <DT> <A HREF="dddmpAllDet.html#" TARGET="MAIN"><CODE>()</CODE></A>
+- <DD> Memory Free Macro for DDDMP
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpBinary.c"><H1>dddmpBinary.c</H1></A>
+-Input and output BDD codes and integers from/to file <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-Input and output BDD codes and integers from/to file
+- in binary mode.
+- DD node codes are written as one byte.
+- Integers of any length are written as sequences of "linked" bytes.
+- For each byte 7 bits are used for data and one (MSBit) as link with
+- a further byte (MSB = 1 means one more byte).
+- Low level read/write of bytes filter <CR>, <LF> and <ctrl-Z>
+- with escape sequences. <P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#DddmpWriteCode" TARGET="MAIN"><CODE>DddmpWriteCode()</CODE></A>
+- <DD> Writes 1 byte node code
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpReadCode" TARGET="MAIN"><CODE>DddmpReadCode()</CODE></A>
+- <DD> Reads a 1 byte node code
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpWriteInt" TARGET="MAIN"><CODE>DddmpWriteInt()</CODE></A>
+- <DD> Writes a "packed integer"
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpReadInt" TARGET="MAIN"><CODE>DddmpReadInt()</CODE></A>
+- <DD> Reads a "packed integer"
+-
+- <DT> <A HREF="dddmpAllDet.html#WriteByteBinary" TARGET="MAIN"><CODE>WriteByteBinary()</CODE></A>
+- <DD> Writes a byte to file filtering <CR>, <LF> and <ctrl-Z>
+-
+- <DT> <A HREF="dddmpAllDet.html#ReadByteBinary" TARGET="MAIN"><CODE>ReadByteBinary()</CODE></A>
+- <DD> Reads a byte from file with escaped <CR>, <LF> and <ctrl-Z>
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpConvert.c"><H1>dddmpConvert.c</H1></A>
+-Conversion between ASCII and binary formats <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-Conversion between ASCII and binary formats is presently
+- supported by loading a BDD in the source format and storing it
+- in the target one. We plan to introduce ad hoc procedures
+- avoiding explicit BDD node generation. <P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_Text2Bin" TARGET="MAIN"><CODE>Dddmp_Text2Bin()</CODE></A>
+- <DD> Converts from ASCII to binary format
+-
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_Bin2Text" TARGET="MAIN"><CODE>Dddmp_Bin2Text()</CODE></A>
+- <DD> Converts from binary to ASCII format
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpDbg.c"><H1>dddmpDbg.c</H1></A>
+-Functions to display BDD files <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-Functions to display BDD files in binary format <P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddDisplayBinary" TARGET="MAIN"><CODE>Dddmp_cuddBddDisplayBinary()</CODE></A>
+- <DD> Display a binary dump file in a text file
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpDdNodeBdd.c"><H1>dddmpDdNodeBdd.c</H1></A>
+-Functions to handle BDD node infos and numbering <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-Functions to handle BDD node infos and numbering. <P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#DddmpNumberDdNodes" TARGET="MAIN"><CODE>DddmpNumberDdNodes()</CODE></A>
+- <DD> Removes nodes from unique table and number them
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpUnnumberDdNodes" TARGET="MAIN"><CODE>DddmpUnnumberDdNodes()</CODE></A>
+- <DD> Restores nodes in unique table, loosing numbering
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpWriteNodeIndex" TARGET="MAIN"><CODE>DddmpWriteNodeIndex()</CODE></A>
+- <DD> Write index to node
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpReadNodeIndex" TARGET="MAIN"><CODE>DddmpReadNodeIndex()</CODE></A>
+- <DD> Reads the index of a node
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpVisited" TARGET="MAIN"><CODE>DddmpVisited()</CODE></A>
+- <DD> Returns true if node is visited
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpSetVisited" TARGET="MAIN"><CODE>DddmpSetVisited()</CODE></A>
+- <DD> Marks a node as visited
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpClearVisited" TARGET="MAIN"><CODE>DddmpClearVisited()</CODE></A>
+- <DD> Marks a node as not visited
+-
+- <DT> <A HREF="dddmpAllDet.html#NumberNodeRecur" TARGET="MAIN"><CODE>NumberNodeRecur()</CODE></A>
+- <DD> Number nodes recursively in post-order
+-
+- <DT> <A HREF="dddmpAllDet.html#RemoveFromUniqueRecur" TARGET="MAIN"><CODE>RemoveFromUniqueRecur()</CODE></A>
+- <DD> Removes a node from unique table
+-
+- <DT> <A HREF="dddmpAllDet.html#RestoreInUniqueRecur" TARGET="MAIN"><CODE>RestoreInUniqueRecur()</CODE></A>
+- <DD> Restores a node in unique table
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpDdNodeCnf.c"><H1>dddmpDdNodeCnf.c</H1></A>
+-Functions to handle BDD node infos and numbering
+- while storing a CNF formula from a BDD or an array of BDDs <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-Functions to handle BDD node infos and numbering
+- while storing a CNF formula from a BDD or an array of BDDs. <P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#DddmpNumberDdNodesCnf" TARGET="MAIN"><CODE>DddmpNumberDdNodesCnf()</CODE></A>
+- <DD> Removes nodes from unique table and numbers them
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpDdNodesCountEdgesAndNumber" TARGET="MAIN"><CODE>DddmpDdNodesCountEdgesAndNumber()</CODE></A>
+- <DD> Removes nodes from unique table and numbers each node according
+- to the number of its incoming BDD edges.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpUnnumberDdNodesCnf" TARGET="MAIN"><CODE>DddmpUnnumberDdNodesCnf()</CODE></A>
+- <DD> Restores nodes in unique table, loosing numbering
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpPrintBddAndNext" TARGET="MAIN"><CODE>DddmpPrintBddAndNext()</CODE></A>
+- <DD> Prints debug information
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpWriteNodeIndexCnfBis" TARGET="MAIN"><CODE>DddmpWriteNodeIndexCnfBis()</CODE></A>
+- <DD> Write index to node
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpWriteNodeIndexCnf" TARGET="MAIN"><CODE>DddmpWriteNodeIndexCnf()</CODE></A>
+- <DD> Write index to node
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpReadNodeIndexCnf" TARGET="MAIN"><CODE>DddmpReadNodeIndexCnf()</CODE></A>
+- <DD> Reads the index of a node
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpClearVisitedCnfRecur" TARGET="MAIN"><CODE>DddmpClearVisitedCnfRecur()</CODE></A>
+- <DD> Mark ALL nodes as not visited
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpVisitedCnf" TARGET="MAIN"><CODE>DddmpVisitedCnf()</CODE></A>
+- <DD> Returns true if node is visited
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpSetVisitedCnf" TARGET="MAIN"><CODE>DddmpSetVisitedCnf()</CODE></A>
+- <DD> Marks a node as visited
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpClearVisitedCnf" TARGET="MAIN"><CODE>DddmpClearVisitedCnf()</CODE></A>
+- <DD> Marks a node as not visited
+-
+- <DT> <A HREF="dddmpAllDet.html#NumberNodeRecurCnf" TARGET="MAIN"><CODE>NumberNodeRecurCnf()</CODE></A>
+- <DD> Number nodes recursively in post-order
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpDdNodesCheckIncomingAndScanPath" TARGET="MAIN"><CODE>DddmpDdNodesCheckIncomingAndScanPath()</CODE></A>
+- <DD> Number nodes recursively in post-order
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpDdNodesNumberEdgesRecur" TARGET="MAIN"><CODE>DddmpDdNodesNumberEdgesRecur()</CODE></A>
+- <DD> Number nodes recursively in post-order
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpDdNodesResetCountRecur" TARGET="MAIN"><CODE>DddmpDdNodesResetCountRecur()</CODE></A>
+- <DD> Resets counter and visited flag for ALL nodes of a BDD
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpDdNodesCountEdgesRecur" TARGET="MAIN"><CODE>DddmpDdNodesCountEdgesRecur()</CODE></A>
+- <DD> Counts the number of incoming edges for each node of a BDD
+-
+- <DT> <A HREF="dddmpAllDet.html#RemoveFromUniqueRecurCnf" TARGET="MAIN"><CODE>RemoveFromUniqueRecurCnf()</CODE></A>
+- <DD> Removes a node from unique table
+-
+- <DT> <A HREF="dddmpAllDet.html#RestoreInUniqueRecurCnf" TARGET="MAIN"><CODE>RestoreInUniqueRecurCnf()</CODE></A>
+- <DD> Restores a node in unique table
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpPrintBddAndNextRecur" TARGET="MAIN"><CODE>DddmpPrintBddAndNextRecur()</CODE></A>
+- <DD> Prints debug info
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpLoad.c"><H1>dddmpLoad.c</H1></A>
+-Functions to read in bdds to file <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-Functions to read in bdds to file. BDDs
+- are represended on file either in text or binary format under the
+- following rules. A file contains a forest of BDDs (a vector of
+- Boolean functions). BDD nodes are numbered with contiguous numbers,
+- from 1 to NNodes (total number of nodes on a file). 0 is not used to
+- allow negative node indexes for complemented edges. A file contains
+- a header, including information about variables and roots to BDD
+- functions, followed by the list of nodes. BDD nodes are listed
+- according to their numbering, and in the present implementation
+- numbering follows a post-order strategy, in such a way that a node
+- is never listed before its Then/Else children. <P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddLoad" TARGET="MAIN"><CODE>Dddmp_cuddBddLoad()</CODE></A>
+- <DD> Reads a dump file representing the argument BDD.
+-
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddArrayLoad" TARGET="MAIN"><CODE>Dddmp_cuddBddArrayLoad()</CODE></A>
+- <DD> Reads a dump file representing the argument BDDs.
+-
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddAddLoad" TARGET="MAIN"><CODE>Dddmp_cuddAddLoad()</CODE></A>
+- <DD> Reads a dump file representing the argument ADD.
+-
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddAddArrayLoad" TARGET="MAIN"><CODE>Dddmp_cuddAddArrayLoad()</CODE></A>
+- <DD> Reads a dump file representing the argument ADDs.
+-
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddHeaderLoad" TARGET="MAIN"><CODE>Dddmp_cuddHeaderLoad()</CODE></A>
+- <DD> Reads the header of a dump file representing the argument BDDs
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayLoad" TARGET="MAIN"><CODE>DddmpCuddDdArrayLoad()</CODE></A>
+- <DD> Reads a dump file representing the argument BDDs.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpBddReadHeader" TARGET="MAIN"><CODE>DddmpBddReadHeader()</CODE></A>
+- <DD> Reads a the header of a dump file representing the
+- argument BDDs.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpFreeHeader" TARGET="MAIN"><CODE>DddmpFreeHeader()</CODE></A>
+- <DD> Frees the internal header structure.
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpLoadCnf.c"><H1>dddmpLoadCnf.c</H1></A>
+-Functions to read in CNF from file as BDDs. <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-Functions to read in CNF from file as BDDs. <P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddLoadCnf" TARGET="MAIN"><CODE>Dddmp_cuddBddLoadCnf()</CODE></A>
+- <DD> Reads a dump file in a CNF format.
+-
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddArrayLoadCnf" TARGET="MAIN"><CODE>Dddmp_cuddBddArrayLoadCnf()</CODE></A>
+- <DD> Reads a dump file in a CNF format.
+-
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddHeaderLoadCnf" TARGET="MAIN"><CODE>Dddmp_cuddHeaderLoadCnf()</CODE></A>
+- <DD> Reads the header of a dump file representing the argument BDDs
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayLoadCnf" TARGET="MAIN"><CODE>DddmpCuddDdArrayLoadCnf()</CODE></A>
+- <DD> Reads a dump file representing the argument BDDs in CNF
+- format.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpBddReadHeaderCnf" TARGET="MAIN"><CODE>DddmpBddReadHeaderCnf()</CODE></A>
+- <DD> Reads a the header of a dump file representing the argument
+- BDDs.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpFreeHeaderCnf" TARGET="MAIN"><CODE>DddmpFreeHeaderCnf()</CODE></A>
+- <DD> Frees the internal header structure.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpReadCnfClauses" TARGET="MAIN"><CODE>DddmpReadCnfClauses()</CODE></A>
+- <DD> Read the CNF clauses from the file in the standard DIMACS
+- format.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpCnfClauses2Bdd" TARGET="MAIN"><CODE>DddmpCnfClauses2Bdd()</CODE></A>
+- <DD> Transforms CNF clauses into BDDs.
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpNodeAdd.c"><H1>dddmpNodeAdd.c</H1></A>
+-Functions to handle ADD node infos and numbering <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-Functions to handle ADD node infos and numbering. <P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#DddmpNumberAddNodes" TARGET="MAIN"><CODE>DddmpNumberAddNodes()</CODE></A>
+- <DD> Removes nodes from unique table and number them
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpUnnumberAddNodes" TARGET="MAIN"><CODE>DddmpUnnumberAddNodes()</CODE></A>
+- <DD> Restores nodes in unique table, loosing numbering
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpWriteNodeIndexAdd" TARGET="MAIN"><CODE>DddmpWriteNodeIndexAdd()</CODE></A>
+- <DD> Write index to node
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpReadNodeIndexAdd" TARGET="MAIN"><CODE>DddmpReadNodeIndexAdd()</CODE></A>
+- <DD> Reads the index of a node
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpVisitedAdd" TARGET="MAIN"><CODE>DddmpVisitedAdd()</CODE></A>
+- <DD> Returns true if node is visited
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpSetVisitedAdd" TARGET="MAIN"><CODE>DddmpSetVisitedAdd()</CODE></A>
+- <DD> Marks a node as visited
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpClearVisitedAdd" TARGET="MAIN"><CODE>DddmpClearVisitedAdd()</CODE></A>
+- <DD> Marks a node as not visited
+-
+- <DT> <A HREF="dddmpAllDet.html#NumberNodeRecurAdd" TARGET="MAIN"><CODE>NumberNodeRecurAdd()</CODE></A>
+- <DD> Number nodes recursively in post-order
+-
+- <DT> <A HREF="dddmpAllDet.html#RemoveFromUniqueRecurAdd" TARGET="MAIN"><CODE>RemoveFromUniqueRecurAdd()</CODE></A>
+- <DD> Removes a node from unique table
+-
+- <DT> <A HREF="dddmpAllDet.html#RestoreInUniqueRecurAdd" TARGET="MAIN"><CODE>RestoreInUniqueRecurAdd()</CODE></A>
+- <DD> Restores a node in unique table
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpNodeBdd.c"><H1>dddmpNodeBdd.c</H1></A>
+-Functions to handle BDD node infos and numbering <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-Functions to handle BDD node infos and numbering. <P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#DddmpNumberBddNodes" TARGET="MAIN"><CODE>DddmpNumberBddNodes()</CODE></A>
+- <DD> Removes nodes from unique table and number them
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpUnnumberBddNodes" TARGET="MAIN"><CODE>DddmpUnnumberBddNodes()</CODE></A>
+- <DD> Restores nodes in unique table, loosing numbering
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpWriteNodeIndexBdd" TARGET="MAIN"><CODE>DddmpWriteNodeIndexBdd()</CODE></A>
+- <DD> Write index to node
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpReadNodeIndexBdd" TARGET="MAIN"><CODE>DddmpReadNodeIndexBdd()</CODE></A>
+- <DD> Reads the index of a node
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpVisitedBdd" TARGET="MAIN"><CODE>DddmpVisitedBdd()</CODE></A>
+- <DD> Returns true if node is visited
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpSetVisitedBdd" TARGET="MAIN"><CODE>DddmpSetVisitedBdd()</CODE></A>
+- <DD> Marks a node as visited
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpClearVisitedBdd" TARGET="MAIN"><CODE>DddmpClearVisitedBdd()</CODE></A>
+- <DD> Marks a node as not visited
+-
+- <DT> <A HREF="dddmpAllDet.html#NumberNodeRecurBdd" TARGET="MAIN"><CODE>NumberNodeRecurBdd()</CODE></A>
+- <DD> Number nodes recursively in post-order
+-
+- <DT> <A HREF="dddmpAllDet.html#RemoveFromUniqueRecurBdd" TARGET="MAIN"><CODE>RemoveFromUniqueRecurBdd()</CODE></A>
+- <DD> Removes a node from unique table
+-
+- <DT> <A HREF="dddmpAllDet.html#RestoreInUniqueRecurBdd" TARGET="MAIN"><CODE>RestoreInUniqueRecurBdd()</CODE></A>
+- <DD> Restores a node in unique table
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpNodeCnf.c"><H1>dddmpNodeCnf.c</H1></A>
+-Functions to handle BDD node infos and numbering
+- while storing a CNF formula from a BDD or an array of BDDs <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-Functions to handle BDD node infos and numbering
+- while storing a CNF formula from a BDD or an array of BDDs. <P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#DddmpNumberDdNodesCnf" TARGET="MAIN"><CODE>DddmpNumberDdNodesCnf()</CODE></A>
+- <DD> Removes nodes from unique table and numbers them
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpDdNodesCountEdgesAndNumber" TARGET="MAIN"><CODE>DddmpDdNodesCountEdgesAndNumber()</CODE></A>
+- <DD> Removes nodes from unique table and numbers each node according
+- to the number of its incoming BDD edges.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpUnnumberDdNodesCnf" TARGET="MAIN"><CODE>DddmpUnnumberDdNodesCnf()</CODE></A>
+- <DD> Restores nodes in unique table, loosing numbering
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpPrintBddAndNext" TARGET="MAIN"><CODE>DddmpPrintBddAndNext()</CODE></A>
+- <DD> Prints debug information
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpWriteNodeIndexCnf" TARGET="MAIN"><CODE>DddmpWriteNodeIndexCnf()</CODE></A>
+- <DD> Write index to node
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpVisitedCnf" TARGET="MAIN"><CODE>DddmpVisitedCnf()</CODE></A>
+- <DD> Returns true if node is visited
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpSetVisitedCnf" TARGET="MAIN"><CODE>DddmpSetVisitedCnf()</CODE></A>
+- <DD> Marks a node as visited
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpReadNodeIndexCnf" TARGET="MAIN"><CODE>DddmpReadNodeIndexCnf()</CODE></A>
+- <DD> Reads the index of a node
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpWriteNodeIndexCnfWithTerminalCheck" TARGET="MAIN"><CODE>DddmpWriteNodeIndexCnfWithTerminalCheck()</CODE></A>
+- <DD> Write index to node
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpClearVisitedCnfRecur" TARGET="MAIN"><CODE>DddmpClearVisitedCnfRecur()</CODE></A>
+- <DD> Mark ALL nodes as not visited
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpClearVisitedCnf" TARGET="MAIN"><CODE>DddmpClearVisitedCnf()</CODE></A>
+- <DD> Marks a node as not visited
+-
+- <DT> <A HREF="dddmpAllDet.html#NumberNodeRecurCnf" TARGET="MAIN"><CODE>NumberNodeRecurCnf()</CODE></A>
+- <DD> Number nodes recursively in post-order
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpDdNodesCheckIncomingAndScanPath" TARGET="MAIN"><CODE>DddmpDdNodesCheckIncomingAndScanPath()</CODE></A>
+- <DD> Number nodes recursively in post-order
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpDdNodesNumberEdgesRecur" TARGET="MAIN"><CODE>DddmpDdNodesNumberEdgesRecur()</CODE></A>
+- <DD> Number nodes recursively in post-order
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpDdNodesResetCountRecur" TARGET="MAIN"><CODE>DddmpDdNodesResetCountRecur()</CODE></A>
+- <DD> Resets counter and visited flag for ALL nodes of a BDD
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpDdNodesCountEdgesRecur" TARGET="MAIN"><CODE>DddmpDdNodesCountEdgesRecur()</CODE></A>
+- <DD> Counts the number of incoming edges for each node of a BDD
+-
+- <DT> <A HREF="dddmpAllDet.html#RemoveFromUniqueRecurCnf" TARGET="MAIN"><CODE>RemoveFromUniqueRecurCnf()</CODE></A>
+- <DD> Removes a node from unique table
+-
+- <DT> <A HREF="dddmpAllDet.html#RestoreInUniqueRecurCnf" TARGET="MAIN"><CODE>RestoreInUniqueRecurCnf()</CODE></A>
+- <DD> Restores a node in unique table
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpPrintBddAndNextRecur" TARGET="MAIN"><CODE>DddmpPrintBddAndNextRecur()</CODE></A>
+- <DD> Prints debug info
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpStoreAdd.c"><H1>dddmpStoreAdd.c</H1></A>
+-Functions to write ADDs to file. <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-Functions to write ADDs to file.
+- ADDs are represended on file either in text or binary format under the
+- following rules. A file contains a forest of ADDs (a vector of
+- Boolean functions). ADD nodes are numbered with contiguous numbers,
+- from 1 to NNodes (total number of nodes on a file). 0 is not used to
+- allow negative node indexes for complemented edges. A file contains
+- a header, including information about variables and roots to ADD
+- functions, followed by the list of nodes.
+- ADD nodes are listed according to their numbering, and in the present
+- implementation numbering follows a post-order strategy, in such a way
+- that a node is never listed before its Then/Else children. <P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddAddStore" TARGET="MAIN"><CODE>Dddmp_cuddAddStore()</CODE></A>
+- <DD> Writes a dump file representing the argument ADD.
+-
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddAddArrayStore" TARGET="MAIN"><CODE>Dddmp_cuddAddArrayStore()</CODE></A>
+- <DD> Writes a dump file representing the argument Array of ADDs.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStoreBdd" TARGET="MAIN"><CODE>DddmpCuddDdArrayStoreBdd()</CODE></A>
+- <DD> Writes a dump file representing the argument Array of
+- BDDs/ADDs.
+-
+- <DT> <A HREF="dddmpAllDet.html#NodeStoreRecurAdd" TARGET="MAIN"><CODE>NodeStoreRecurAdd()</CODE></A>
+- <DD> Performs the recursive step of Dddmp_bddStore.
+-
+- <DT> <A HREF="dddmpAllDet.html#NodeTextStoreAdd" TARGET="MAIN"><CODE>NodeTextStoreAdd()</CODE></A>
+- <DD> Store One Single Node in Text Format.
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpStoreBdd.c"><H1>dddmpStoreBdd.c</H1></A>
+-Functions to write BDDs to file. <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-Functions to write BDDs to file.
+- BDDs are represended on file either in text or binary format under the
+- following rules. A file contains a forest of BDDs (a vector of
+- Boolean functions). BDD nodes are numbered with contiguous numbers,
+- from 1 to NNodes (total number of nodes on a file). 0 is not used to
+- allow negative node indexes for complemented edges. A file contains
+- a header, including information about variables and roots to BDD
+- functions, followed by the list of nodes. BDD nodes are listed
+- according to their numbering, and in the present implementation
+- numbering follows a post-order strategy, in such a way that a node
+- is never listed before its Then/Else children. <P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddStore" TARGET="MAIN"><CODE>Dddmp_cuddBddStore()</CODE></A>
+- <DD> Writes a dump file representing the argument BDD.
+-
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddArrayStore" TARGET="MAIN"><CODE>Dddmp_cuddBddArrayStore()</CODE></A>
+- <DD> Writes a dump file representing the argument Array of BDDs.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpCuddBddArrayStore" TARGET="MAIN"><CODE>DddmpCuddBddArrayStore()</CODE></A>
+- <DD> Writes a dump file representing the argument Array of
+- BDDs.
+-
+- <DT> <A HREF="dddmpAllDet.html#NodeStoreRecurBdd" TARGET="MAIN"><CODE>NodeStoreRecurBdd()</CODE></A>
+- <DD> Performs the recursive step of Dddmp_bddStore.
+-
+- <DT> <A HREF="dddmpAllDet.html#NodeTextStoreBdd" TARGET="MAIN"><CODE>NodeTextStoreBdd()</CODE></A>
+- <DD> Store One Single Node in Text Format.
+-
+- <DT> <A HREF="dddmpAllDet.html#NodeBinaryStoreBdd" TARGET="MAIN"><CODE>NodeBinaryStoreBdd()</CODE></A>
+- <DD> Store One Single Node in Binary Format.
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpStoreCnf.c"><H1>dddmpStoreCnf.c</H1></A>
+-Functions to write out BDDs to file in a CNF format <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-Functions to write out BDDs to file in a CNF format. <P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddStoreCnf" TARGET="MAIN"><CODE>Dddmp_cuddBddStoreCnf()</CODE></A>
+- <DD> Writes a dump file representing the argument BDD in
+- a CNF format.
+-
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddArrayStoreCnf" TARGET="MAIN"><CODE>Dddmp_cuddBddArrayStoreCnf()</CODE></A>
+- <DD> Writes a dump file representing the argument array of BDDs
+- in CNF format.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpCuddBddArrayStoreCnf" TARGET="MAIN"><CODE>DddmpCuddBddArrayStoreCnf()</CODE></A>
+- <DD> Writes a dump file representing the argument Array of
+- BDDs in the CNF standard format.
+-
+- <DT> <A HREF="dddmpAllDet.html#StoreCnfNodeByNode" TARGET="MAIN"><CODE>StoreCnfNodeByNode()</CODE></A>
+- <DD> Store the BDD as CNF clauses.
+-
+- <DT> <A HREF="dddmpAllDet.html#StoreCnfNodeByNodeRecur" TARGET="MAIN"><CODE>StoreCnfNodeByNodeRecur()</CODE></A>
+- <DD> Performs the recursive step of Dddmp_bddStore.
+-
+- <DT> <A HREF="dddmpAllDet.html#StoreCnfOneNode" TARGET="MAIN"><CODE>StoreCnfOneNode()</CODE></A>
+- <DD> Store One Single BDD Node.
+-
+- <DT> <A HREF="dddmpAllDet.html#StoreCnfMaxtermByMaxterm" TARGET="MAIN"><CODE>StoreCnfMaxtermByMaxterm()</CODE></A>
+- <DD> Prints a disjoint sum of products.
+-
+- <DT> <A HREF="dddmpAllDet.html#StoreCnfBest" TARGET="MAIN"><CODE>StoreCnfBest()</CODE></A>
+- <DD> Prints a disjoint sum of products with intermediate
+- cutting points.
+-
+- <DT> <A HREF="dddmpAllDet.html#StoreCnfMaxtermByMaxtermRecur" TARGET="MAIN"><CODE>StoreCnfMaxtermByMaxtermRecur()</CODE></A>
+- <DD> Performs the recursive step of Print Maxterm.
+-
+- <DT> <A HREF="dddmpAllDet.html#StoreCnfBestNotSharedRecur" TARGET="MAIN"><CODE>StoreCnfBestNotSharedRecur()</CODE></A>
+- <DD> Performs the recursive step of Print Best on Not Shared
+- sub-BDDs.
+-
+- <DT> <A HREF="dddmpAllDet.html#StoreCnfBestSharedRecur" TARGET="MAIN"><CODE>StoreCnfBestSharedRecur()</CODE></A>
+- <DD> Performs the recursive step of Print Best on Shared
+- sub-BDDs.
+-
+- <DT> <A HREF="dddmpAllDet.html#printCubeCnf" TARGET="MAIN"><CODE>printCubeCnf()</CODE></A>
+- <DD> Print One Cube in CNF Format.
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpStoreMisc.c"><H1>dddmpStoreMisc.c</H1></A>
+-Functions to write out bdds to file in prefixed
+- and in Blif form. <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-Functions to write out bdds to file.
+- BDDs are represended on file in text format.
+- Each node is stored as a multiplexer in a prefix notation format for
+- the prefix notation file or in PLA format for the blif file. <P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddStorePrefix" TARGET="MAIN"><CODE>Dddmp_cuddBddStorePrefix()</CODE></A>
+- <DD> Writes a dump file representing the argument BDD in
+- a prefix notation.
+-
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddArrayStorePrefix" TARGET="MAIN"><CODE>Dddmp_cuddBddArrayStorePrefix()</CODE></A>
+- <DD> Writes a dump file representing the argument BDD in
+- a prefix notation.
+-
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddStoreBlif" TARGET="MAIN"><CODE>Dddmp_cuddBddStoreBlif()</CODE></A>
+- <DD> Writes a dump file representing the argument BDD in
+- a Blif/Exlif notation.
+-
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddArrayStoreBlif" TARGET="MAIN"><CODE>Dddmp_cuddBddArrayStoreBlif()</CODE></A>
+- <DD> Writes a dump file representing the argument BDD in
+- a Blif/Exlif notation.
+-
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddStoreSmv" TARGET="MAIN"><CODE>Dddmp_cuddBddStoreSmv()</CODE></A>
+- <DD> Writes a dump file representing the argument BDD in
+- a prefix notation.
+-
+- <DT> <A HREF="dddmpAllDet.html#Dddmp_cuddBddArrayStoreSmv" TARGET="MAIN"><CODE>Dddmp_cuddBddArrayStoreSmv()</CODE></A>
+- <DD> Writes a dump file representing the argument BDD in
+- a prefix notation.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStorePrefix" TARGET="MAIN"><CODE>DddmpCuddDdArrayStorePrefix()</CODE></A>
+- <DD> Internal function to writes a dump file representing the
+- argument BDD in a prefix notation.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStorePrefixBody" TARGET="MAIN"><CODE>DddmpCuddDdArrayStorePrefixBody()</CODE></A>
+- <DD> Internal function to writes a dump file representing the
+- argument BDD in a prefix notation. Writes the body of the file.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStorePrefixStep" TARGET="MAIN"><CODE>DddmpCuddDdArrayStorePrefixStep()</CODE></A>
+- <DD> Performs the recursive step of
+- DddmpCuddDdArrayStorePrefixBody.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStoreBlif" TARGET="MAIN"><CODE>DddmpCuddDdArrayStoreBlif()</CODE></A>
+- <DD> Writes a blif file representing the argument BDDs.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStoreBlifBody" TARGET="MAIN"><CODE>DddmpCuddDdArrayStoreBlifBody()</CODE></A>
+- <DD> Writes a blif body representing the argument BDDs.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStoreBlifStep" TARGET="MAIN"><CODE>DddmpCuddDdArrayStoreBlifStep()</CODE></A>
+- <DD> Performs the recursive step of DddmpCuddDdArrayStoreBlif.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStoreSmv" TARGET="MAIN"><CODE>DddmpCuddDdArrayStoreSmv()</CODE></A>
+- <DD> Internal function to writes a dump file representing the
+- argument BDD in a SMV notation.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStoreSmvBody" TARGET="MAIN"><CODE>DddmpCuddDdArrayStoreSmvBody()</CODE></A>
+- <DD> Internal function to writes a dump file representing the
+- argument BDD in a SMV notation. Writes the body of the file.
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpCuddDdArrayStoreSmvStep" TARGET="MAIN"><CODE>DddmpCuddDdArrayStoreSmvStep()</CODE></A>
+- <DD> Performs the recursive step of
+- DddmpCuddDdArrayStoreSmvBody.
+-
+-</DL>
+-<HR>
+-<A NAME="dddmpUtil.c"><H1>dddmpUtil.c</H1></A>
+-Util Functions for the dddmp package <P>
+-<B>By: Gianpiero Cabodi and Stefano Quer</B><P>
+-Functions to manipulate arrays. <P>
+-<DL>
+- <DT> <A HREF="dddmpAllDet.html#QsortStrcmp" TARGET="MAIN"><CODE>QsortStrcmp()</CODE></A>
+- <DD> String compare for qsort
+-
+- <DT> <A HREF="dddmpAllDet.html#FindVarname" TARGET="MAIN"><CODE>FindVarname()</CODE></A>
+- <DD> Performs binary search of a name within a sorted array
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpStrDup" TARGET="MAIN"><CODE>DddmpStrDup()</CODE></A>
+- <DD> Duplicates a string
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpStrArrayDup" TARGET="MAIN"><CODE>DddmpStrArrayDup()</CODE></A>
+- <DD> Duplicates an array of strings
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpStrArrayRead" TARGET="MAIN"><CODE>DddmpStrArrayRead()</CODE></A>
+- <DD> Inputs an array of strings
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpStrArrayWrite" TARGET="MAIN"><CODE>DddmpStrArrayWrite()</CODE></A>
+- <DD> Outputs an array of strings
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpStrArrayFree" TARGET="MAIN"><CODE>DddmpStrArrayFree()</CODE></A>
+- <DD> Frees an array of strings
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpIntArrayDup" TARGET="MAIN"><CODE>DddmpIntArrayDup()</CODE></A>
+- <DD> Duplicates an array of ints
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpIntArrayRead" TARGET="MAIN"><CODE>DddmpIntArrayRead()</CODE></A>
+- <DD> Inputs an array of ints
+-
+- <DT> <A HREF="dddmpAllDet.html#DddmpIntArrayWrite" TARGET="MAIN"><CODE>DddmpIntArrayWrite()</CODE></A>
+- <DD> Outputs an array of ints
+-
+-</DL>
+-<HR>
+-Last updated on 1040218 17h14
+-</BODY></HTML>
+diff --git a/Cudd/dddmp/doc/dddmpDesc.html b/Cudd/dddmp/doc/dddmpDesc.html
+deleted file mode 100644
+index a27b184..0000000
+--- a/Cudd/dddmp/doc/dddmpDesc.html
++++ /dev/null
+@@ -1,28 +0,0 @@
+-<HTML>
+-<HEAD><TITLE>The dddmp package: Overview</TITLE></HEAD>
+-<BODY>
+-
+-<H1>The dddmp package</H1>
+-<H2>Functions to read in and write out BDDs, ADDs
+- and CNF formulas from and to files.</H2>
+-<H3>By Gianpiero Cabodi and Stefano Quer</H3>
+-
+-<UL>
+- <LI> <A HREF="dddmpExt.html" TARGET="_top">
+- Information for programmers</A>
+- <LI> <A HREF="dddmpAllByFunc.html" TARGET="_top">
+- Information for developers sorted by function</A>
+- <LI> <A HREF="dddmpAllByFile.html" TARGET="_top">
+- Information for developers sorted by file</A>
+-</UL>
+-
+-<HR>
+-
+-
+-
+-<HR>
+-
+-Last updated on 1040218 17h14
+-
+-</BODY>
+-</HTML>
+diff --git a/Cudd/dddmp/doc/dddmpExt.html b/Cudd/dddmp/doc/dddmpExt.html
+deleted file mode 100644
+index fe026ec..0000000
+--- a/Cudd/dddmp/doc/dddmpExt.html
++++ /dev/null
+@@ -1,13 +0,0 @@
+-<HTML>
+-<HEAD><TITLE>The dddmp Package for Programmers</TITLE></HEAD>
+-
+-<FRAMESET ROWS="5%,90%,5%">
+- <FRAME SRC="dddmpTitle.html">
+- <FRAMESET COLS="40%,60%">
+- <FRAME SRC="dddmpExtAbs.html" NAME="ABSTRACT">
+- <FRAME SRC="dddmpExtDet.html" NAME="MAIN">
+- </FRAMESET>
+- <FRAME SRC="credit.html">
+-</FRAMESET>
+-
+-</HTML>
+diff --git a/Cudd/dddmp/doc/dddmpExtAbs.html b/Cudd/dddmp/doc/dddmpExtAbs.html
+deleted file mode 100644
+index 612554f..0000000
+--- a/Cudd/dddmp/doc/dddmpExtAbs.html
++++ /dev/null
+@@ -1,91 +0,0 @@
+-<html>
+-<head><title>dddmp package abstract</title></head>
+-<body>
+-
+-
+-<!-- Function Abstracts -->
+-
+-<dl>
+-<dt> <a href="dddmpAllDet.html#Dddmp_Bin2Text" TARGET="MAIN"><code>Dddmp_Bin2Text()</code></a>
+-<dd> Converts from binary to ASCII format
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_Text2Bin" TARGET="MAIN"><code>Dddmp_Text2Bin()</code></a>
+-<dd> Converts from ASCII to binary format
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddAddArrayLoad" TARGET="MAIN"><code>Dddmp_cuddAddArrayLoad()</code></a>
+-<dd> Reads a dump file representing the argument ADDs.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddAddArrayStore" TARGET="MAIN"><code>Dddmp_cuddAddArrayStore()</code></a>
+-<dd> Writes a dump file representing the argument Array of ADDs.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddAddLoad" TARGET="MAIN"><code>Dddmp_cuddAddLoad()</code></a>
+-<dd> Reads a dump file representing the argument ADD.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddAddStore" TARGET="MAIN"><code>Dddmp_cuddAddStore()</code></a>
+-<dd> Writes a dump file representing the argument ADD.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddBddArrayLoadCnf" TARGET="MAIN"><code>Dddmp_cuddBddArrayLoadCnf()</code></a>
+-<dd> Reads a dump file in a CNF format.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddBddArrayLoad" TARGET="MAIN"><code>Dddmp_cuddBddArrayLoad()</code></a>
+-<dd> Reads a dump file representing the argument BDDs.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddBddArrayStoreBlif" TARGET="MAIN"><code>Dddmp_cuddBddArrayStoreBlif()</code></a>
+-<dd> Writes a dump file representing the argument BDD in
+- a Blif/Exlif notation.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddBddArrayStoreCnf" TARGET="MAIN"><code>Dddmp_cuddBddArrayStoreCnf()</code></a>
+-<dd> Writes a dump file representing the argument array of BDDs
+- in CNF format.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddBddArrayStorePrefix" TARGET="MAIN"><code>Dddmp_cuddBddArrayStorePrefix()</code></a>
+-<dd> Writes a dump file representing the argument BDD in
+- a prefix notation.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddBddArrayStoreSmv" TARGET="MAIN"><code>Dddmp_cuddBddArrayStoreSmv()</code></a>
+-<dd> Writes a dump file representing the argument BDD in
+- a prefix notation.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddBddArrayStore" TARGET="MAIN"><code>Dddmp_cuddBddArrayStore()</code></a>
+-<dd> Writes a dump file representing the argument Array of BDDs.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddBddDisplayBinary" TARGET="MAIN"><code>Dddmp_cuddBddDisplayBinary()</code></a>
+-<dd> Display a binary dump file in a text file
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddBddLoadCnf" TARGET="MAIN"><code>Dddmp_cuddBddLoadCnf()</code></a>
+-<dd> Reads a dump file in a CNF format.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddBddLoad" TARGET="MAIN"><code>Dddmp_cuddBddLoad()</code></a>
+-<dd> Reads a dump file representing the argument BDD.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddBddStoreBlif" TARGET="MAIN"><code>Dddmp_cuddBddStoreBlif()</code></a>
+-<dd> Writes a dump file representing the argument BDD in
+- a Blif/Exlif notation.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddBddStoreCnf" TARGET="MAIN"><code>Dddmp_cuddBddStoreCnf()</code></a>
+-<dd> Writes a dump file representing the argument BDD in
+- a CNF format.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddBddStorePrefix" TARGET="MAIN"><code>Dddmp_cuddBddStorePrefix()</code></a>
+-<dd> Writes a dump file representing the argument BDD in
+- a prefix notation.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddBddStoreSmv" TARGET="MAIN"><code>Dddmp_cuddBddStoreSmv()</code></a>
+-<dd> Writes a dump file representing the argument BDD in
+- a prefix notation.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddBddStore" TARGET="MAIN"><code>Dddmp_cuddBddStore()</code></a>
+-<dd> Writes a dump file representing the argument BDD.
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddHeaderLoadCnf" TARGET="MAIN"><code>Dddmp_cuddHeaderLoadCnf()</code></a>
+-<dd> Reads the header of a dump file representing the argument BDDs
+-
+-<dt> <a href="dddmpAllDet.html#Dddmp_cuddHeaderLoad" TARGET="MAIN"><code>Dddmp_cuddHeaderLoad()</code></a>
+-<dd> Reads the header of a dump file representing the argument BDDs
+-
+-</dl>
+-
+-<hr>
+-
+-Last updated on 1040218 17h14
+-</body></html>
+diff --git a/Cudd/dddmp/doc/dddmpExtDet.html b/Cudd/dddmp/doc/dddmpExtDet.html
+deleted file mode 100644
+index 38fb590..0000000
+--- a/Cudd/dddmp/doc/dddmpExtDet.html
++++ /dev/null
+@@ -1,693 +0,0 @@
+-<HTML>
+-<HEAD><TITLE>The dddmp package</TITLE></HEAD>
+-<BODY>
+-
+-<DL>
+-<dt><pre>
+-<A NAME="Dddmp_Bin2Text"></A>
+-int <I></I>
+-<B>Dddmp_Bin2Text</B>(
+- char * <b>filein</b>, <i>IN: name of binary file</i>
+- char * <b>fileout</b> <i>IN: name of ASCII file</i>
+-)
+-</pre>
+-<dd> Converts from binary to ASCII format. A BDD array is loaded and
+- and stored to the target file.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_Text2Bin()">Dddmp_Text2Bin()</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_Text2Bin"></A>
+-int <I></I>
+-<B>Dddmp_Text2Bin</B>(
+- char * <b>filein</b>, <i>IN: name of ASCII file</i>
+- char * <b>fileout</b> <i>IN: name of binary file</i>
+-)
+-</pre>
+-<dd> Converts from ASCII to binary format. A BDD array is loaded and
+- and stored to the target file.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_Bin2Text()">Dddmp_Bin2Text()</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddAddArrayLoad"></A>
+-int <I></I>
+-<B>Dddmp_cuddAddArrayLoad</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- Dddmp_RootMatchType <b>rootMatchMode</b>, <i>IN: storing mode selector</i>
+- char ** <b>rootmatchnames</b>, <i>IN: sorted names for loaded roots</i>
+- Dddmp_VarMatchType <b>varMatchMode</b>, <i>IN: storing mode selector</i>
+- char ** <b>varmatchnames</b>, <i>IN: array of variable names, by ids</i>
+- int * <b>varmatchauxids</b>, <i>IN: array of variable auxids, by ids</i>
+- int * <b>varcomposeids</b>, <i>IN: array of new ids, by ids</i>
+- int <b>mode</b>, <i>IN: requested input file format</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- DdNode *** <b>pproots</b> <i>OUT: array of returned BDD roots</i>
+-)
+-</pre>
+-<dd> Reads a dump file representing the argument ADDs. See
+- BDD load functions for detailed explanation.
+-<p>
+-
+-<dd> <b>Side Effects</b> A vector of pointers to DD nodes is allocated and freed.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayStore">Dddmp_cuddBddArrayStore</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddAddArrayStore"></A>
+-int <I></I>
+-<B>Dddmp_cuddAddArrayStore</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- char * <b>ddname</b>, <i>IN: DD name (or NULL)</i>
+- int <b>nRoots</b>, <i>IN: number of output BDD roots to be stored</i>
+- DdNode ** <b>f</b>, <i>IN: array of ADD roots to be stored</i>
+- char ** <b>rootnames</b>, <i>IN: array of root names (or NULL)</i>
+- char ** <b>varnames</b>, <i>IN: array of variable names (or NULL)</i>
+- int * <b>auxids</b>, <i>IN: array of converted var IDs</i>
+- int <b>mode</b>, <i>IN: storing mode selector</i>
+- Dddmp_VarInfoType <b>varinfo</b>, <i>IN: extra info for variables in text mode</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument array of ADDs to file. Dumping is
+- either in text or binary form. see the corresponding BDD dump
+- function for further details.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from the unique hash
+- table. They are re-linked after the store operation in a
+- modified order.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddAddStore">Dddmp_cuddAddStore</a>
+-<a href="#Dddmp_cuddAddLoad">Dddmp_cuddAddLoad</a>
+-<a href="#Dddmp_cuddAddArrayLoad">Dddmp_cuddAddArrayLoad</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddAddLoad"></A>
+-DdNode * <I></I>
+-<B>Dddmp_cuddAddLoad</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: Manager</i>
+- Dddmp_VarMatchType <b>varMatchMode</b>, <i>IN: storing mode selector</i>
+- char ** <b>varmatchnames</b>, <i>IN: array of variable names by IDs</i>
+- int * <b>varmatchauxids</b>, <i>IN: array of variable auxids by IDs</i>
+- int * <b>varcomposeids</b>, <i>IN: array of new ids by IDs</i>
+- int <b>mode</b>, <i>IN: requested input file format</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b> <i>IN: file pointer</i>
+-)
+-</pre>
+-<dd> Reads a dump file representing the argument ADD.
+- Dddmp_cuddAddArrayLoad is used through a dummy array.
+-<p>
+-
+-<dd> <b>Side Effects</b> A vector of pointers to DD nodes is allocated and freed.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddAddStore">Dddmp_cuddAddStore</a>
+-<a href="#Dddmp_cuddAddArrayLoad">Dddmp_cuddAddArrayLoad</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddAddStore"></A>
+-int <I></I>
+-<B>Dddmp_cuddAddStore</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- char * <b>ddname</b>, <i>IN: DD name (or NULL)</i>
+- DdNode * <b>f</b>, <i>IN: ADD root to be stored</i>
+- char ** <b>varnames</b>, <i>IN: array of variable names (or NULL)</i>
+- int * <b>auxids</b>, <i>IN: array of converted var ids</i>
+- int <b>mode</b>, <i>IN: storing mode selector</i>
+- Dddmp_VarInfoType <b>varinfo</b>, <i>IN: extra info for variables in text mode</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument ADD to file. Dumping is done through
+- Dddmp_cuddAddArrayStore, And a dummy array of 1 ADD root is
+- used for this purpose.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from unique hash. They are
+- re-linked after the store operation in a modified order.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddAddLoad">Dddmp_cuddAddLoad</a>
+-<a href="#Dddmp_cuddAddArrayLoad">Dddmp_cuddAddArrayLoad</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddArrayLoadCnf"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddArrayLoadCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- Dddmp_RootMatchType <b>rootmatchmode</b>, <i>IN: storing mode selector</i>
+- char ** <b>rootmatchnames</b>, <i>IN: sorted names for loaded roots</i>
+- Dddmp_VarMatchType <b>varmatchmode</b>, <i>IN: storing mode selector</i>
+- char ** <b>varmatchnames</b>, <i>IN: array of variable names, by IDs</i>
+- int * <b>varmatchauxids</b>, <i>IN: array of variable auxids, by IDs</i>
+- int * <b>varcomposeids</b>, <i>IN: array of new ids, by IDs</i>
+- int <b>mode</b>, <i>IN: computation Mode</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- DdNode *** <b>rootsPtrPtr</b>, <i>OUT: array of returned BDD roots</i>
+- int * <b>nRoots</b> <i>OUT: number of BDDs returned</i>
+-)
+-</pre>
+-<dd> Reads a dump file representing the argument BDD in a
+- CNF formula.
+-<p>
+-
+-<dd> <b>Side Effects</b> A vector of pointers to DD nodes is allocated and freed.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddArrayLoad"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddArrayLoad</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- Dddmp_RootMatchType <b>rootMatchMode</b>, <i>IN: storing mode selector</i>
+- char ** <b>rootmatchnames</b>, <i>IN: sorted names for loaded roots</i>
+- Dddmp_VarMatchType <b>varMatchMode</b>, <i>IN: storing mode selector</i>
+- char ** <b>varmatchnames</b>, <i>IN: array of variable names, by ids</i>
+- int * <b>varmatchauxids</b>, <i>IN: array of variable auxids, by ids</i>
+- int * <b>varcomposeids</b>, <i>IN: array of new ids, by ids</i>
+- int <b>mode</b>, <i>IN: requested input file format</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- DdNode *** <b>pproots</b> <i>OUT: array of returned BDD roots</i>
+-)
+-</pre>
+-<dd> Reads a dump file representing the argument BDDs. The header is
+- common to both text and binary mode. The node list is either
+- in text or binary format. A dynamic vector of DD pointers
+- is allocated to support conversion from DD indexes to pointers.
+- Several criteria are supported for variable match between file
+- and dd manager. Several changes/permutations/compositions are allowed
+- for variables while loading DDs. Variable of the dd manager are allowed
+- to match with variables on file on ids, permids, varnames,
+- varauxids; also direct composition between ids and
+- composeids is supported. More in detail:
+- <ol>
+- <li> varMatchMode=DDDMP_VAR_MATCHIDS <p>
+- allows the loading of a DD keeping variable IDs unchanged
+- (regardless of the variable ordering of the reading manager); this
+- is useful, for example, when swapping DDs to file and restoring them
+- later from file, after possible variable reordering activations.
+-
+- <li> varMatchMode=DDDMP_VAR_MATCHPERMIDS <p>
+- is used to allow variable match according to the position in the
+- ordering.
+-
+- <li> varMatchMode=DDDMP_VAR_MATCHNAMES <p>
+- requires a non NULL varmatchnames parameter; this is a vector of
+- strings in one-to-one correspondence with variable IDs of the
+- reading manager. Variables in the DD file read are matched with
+- manager variables according to their name (a non NULL varnames
+- parameter was required while storing the DD file).
+-
+- <li> varMatchMode=DDDMP_VAR_MATCHIDS <p>
+- has a meaning similar to DDDMP_VAR_MATCHNAMES, but integer auxiliary
+- IDs are used instead of strings; the additional non NULL
+- varmatchauxids parameter is needed.
+-
+- <li> varMatchMode=DDDMP_VAR_COMPOSEIDS <p>
+- uses the additional varcomposeids parameter is used as array of
+- variable ids to be composed with ids stored in file.
+- </ol>
+-
+- In the present implementation, the array varnames (3), varauxids (4)
+- and composeids (5) need to have one entry for each variable in the
+- DD manager (NULL pointers are allowed for unused variables
+- in varnames). Hence variables need to be already present in the
+- manager. All arrays are sorted according to IDs.
+-
+- All the loaded BDDs are referenced before returning them.
+-<p>
+-
+-<dd> <b>Side Effects</b> A vector of pointers to DD nodes is allocated and freed.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayStore">Dddmp_cuddBddArrayStore</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddArrayStoreBlif"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddArrayStoreBlif</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- int <b>nroots</b>, <i>IN: number of output BDD roots to be stored</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDD roots to be stored</i>
+- char ** <b>inputNames</b>, <i>IN: array of variable names (or NULL)</i>
+- char ** <b>outputNames</b>, <i>IN: array of root names (or NULL)</i>
+- char * <b>modelName</b>, <i>IN: Model Name</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStoreBLif.
+- A dummy array of 1 BDD root is used for this purpose.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayStorePrefix">Dddmp_cuddBddArrayStorePrefix</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddArrayStoreCnf"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddArrayStoreCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDD roots to be stored</i>
+- int <b>rootN</b>, <i>IN: # output BDD roots to be stored</i>
+- Dddmp_DecompCnfStoreType <b>mode</b>, <i>IN: format selection</i>
+- int <b>noHeader</b>, <i>IN: do not store header iff 1</i>
+- char ** <b>varNames</b>, <i>IN: array of variable names (or NULL)</i>
+- int * <b>bddIds</b>, <i>IN: array of converted var IDs</i>
+- int * <b>bddAuxIds</b>, <i>IN: array of BDD node Auxiliary Ids</i>
+- int * <b>cnfIds</b>, <i>IN: array of converted var IDs</i>
+- int <b>idInitial</b>, <i>IN: starting id for cutting variables</i>
+- int <b>edgeInTh</b>, <i>IN: Max # Incoming Edges</i>
+- int <b>pathLengthTh</b>, <i>IN: Max Path Length</i>
+- char * <b>fname</b>, <i>IN: file name</i>
+- FILE * <b>fp</b>, <i>IN: pointer to the store file</i>
+- int * <b>clauseNPtr</b>, <i>OUT: number of clause stored</i>
+- int * <b>varNewNPtr</b> <i>OUT: number of new variable created</i>
+-)
+-</pre>
+-<dd> Dumps the argument array of BDDs to file.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from the unique hash
+- table. They are re-linked after the store operation in a
+- modified order.
+- Three methods are allowed:
+- * NodeByNode method: Insert a cut-point for each BDD node (but the
+- terminal nodes)
+- * MaxtermByMaxterm method: Insert no cut-points, i.e. the off-set of
+- trhe function is stored
+- * Best method: Tradeoff between the previous two methods.
+- Auxiliary variables, i.e., cut points are inserted following these
+- criterias:
+- * edgeInTh
+- indicates the maximum number of incoming edges up to which
+- no cut point (auxiliary variable) is inserted.
+- If edgeInTh:
+- * is equal to -1 no cut point due to incoming edges are inserted
+- (MaxtermByMaxterm method.)
+- * is equal to 0 a cut point is inserted for each node with a single
+- incoming edge, i.e., each node, (NodeByNode method).
+- * is equal to n a cut point is inserted for each node with (n+1)
+- incoming edges.
+- * pathLengthTh
+- indicates the maximum length path up to which no cut points
+- (auxiliary variable) is inserted.
+- If the path length between two nodes exceeds this value, a cut point
+- is inserted.
+- If pathLengthTh:
+- * is equal to -1 no cut point due path length are inserted
+- (MaxtermByMaxterm method.)
+- * is equal to 0 a cut point is inserted for each node (NodeByNode
+- method).
+- * is equal to n a cut point is inserted on path whose length is
+- equal to (n+1).
+- Notice that the maximum number of literals in a clause is equal
+- to (pathLengthTh + 2), i.e., for each path we have to keep into
+- account a CNF variable for each node plus 2 added variables for
+- the bottom and top-path cut points.
+- The stored file can contain a file header or not depending on the
+- noHeader parameter (IFF 0, usual setting, the header is usually stored.
+- This option can be useful in storing multiple BDDs, as separate BDDs,
+- on the same file leaving the opening of the file to the caller.
+-<p>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddArrayStorePrefix"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddArrayStorePrefix</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- int <b>nroots</b>, <i>IN: number of output BDD roots to be stored</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDD roots to be stored</i>
+- char ** <b>inputNames</b>, <i>IN: array of variable names (or NULL)</i>
+- char ** <b>outputNames</b>, <i>IN: array of root names (or NULL)</i>
+- char * <b>modelName</b>, <i>IN: Model Name</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStorePrefix.
+- A dummy array of 1 BDD root is used for this purpose.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayStore">Dddmp_cuddBddArrayStore</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddArrayStoreSmv"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddArrayStoreSmv</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- int <b>nroots</b>, <i>IN: number of output BDD roots to be stored</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDD roots to be stored</i>
+- char ** <b>inputNames</b>, <i>IN: array of variable names (or NULL)</i>
+- char ** <b>outputNames</b>, <i>IN: array of root names (or NULL)</i>
+- char * <b>modelName</b>, <i>IN: Model Name</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStorePrefix.
+- A dummy array of 1 BDD root is used for this purpose.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayStore">Dddmp_cuddBddArrayStore</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddArrayStore"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddArrayStore</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- char * <b>ddname</b>, <i>IN: dd name (or NULL)</i>
+- int <b>nRoots</b>, <i>IN: number of output BDD roots to be stored</i>
+- DdNode ** <b>f</b>, <i>IN: array of BDD roots to be stored</i>
+- char ** <b>rootnames</b>, <i>IN: array of root names (or NULL)</i>
+- char ** <b>varnames</b>, <i>IN: array of variable names (or NULL)</i>
+- int * <b>auxids</b>, <i>IN: array of converted var IDs</i>
+- int <b>mode</b>, <i>IN: storing mode selector</i>
+- Dddmp_VarInfoType <b>varinfo</b>, <i>IN: extra info for variables in text mode</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument array of BDDs to file. Dumping is either
+- in text or binary form. BDDs are stored to the fp (already
+- open) file if not NULL. Otherwise the file whose name is
+- fname is opened in write mode. The header has the same format
+- for both textual and binary dump. Names are allowed for input
+- variables (vnames) and for represented functions (rnames).
+- For sake of generality and because of dynamic variable
+- ordering both variable IDs and permuted IDs are included.
+- New IDs are also supported (auxids). Variables are identified
+- with incremental numbers. according with their positiom in
+- the support set. In text mode, an extra info may be added,
+- chosen among the following options: name, ID, PermID, or an
+- auxiliary id. Since conversion from DD pointers to integers
+- is required, DD nodes are temporarily removed from the unique
+- hash table. This allows the use of the next field to store
+- node IDs.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from the unique hash
+- table. They are re-linked after the store operation in a
+- modified order.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddStore">Dddmp_cuddBddStore</a>
+-<a href="#Dddmp_cuddBddLoad">Dddmp_cuddBddLoad</a>
+-<a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddDisplayBinary"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddDisplayBinary</B>(
+- char * <b>fileIn</b>, <i>IN: name of binary file</i>
+- char * <b>fileOut</b> <i>IN: name of text file</i>
+-)
+-</pre>
+-<dd> Display a binary dump file in a text file
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddStore">Dddmp_cuddBddStore</a>
+-<a href="#Dddmp_cuddBddLoad">Dddmp_cuddBddLoad</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddLoadCnf"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddLoadCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- Dddmp_VarMatchType <b>varmatchmode</b>, <i>IN: storing mode selector</i>
+- char ** <b>varmatchnames</b>, <i>IN: array of variable names, by IDs</i>
+- int * <b>varmatchauxids</b>, <i>IN: array of variable auxids, by IDs</i>
+- int * <b>varcomposeids</b>, <i>IN: array of new ids accessed, by IDs</i>
+- int <b>mode</b>, <i>IN: computation mode</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b>, <i>IN: file pointer</i>
+- DdNode *** <b>rootsPtrPtr</b>, <i>OUT: array of returned BDD roots</i>
+- int * <b>nRoots</b> <i>OUT: number of BDDs returned</i>
+-)
+-</pre>
+-<dd> Reads a dump file representing the argument BDD in a
+- CNF formula.
+- Dddmp_cuddBddArrayLoadCnf is used through a dummy array.
+- The results is returned in different formats depending on the
+- mode selection:
+- IFF mode == 0 Return the Clauses without Conjunction
+- IFF mode == 1 Return the sets of BDDs without Quantification
+- IFF mode == 2 Return the sets of BDDs AFTER Existential Quantification
+-<p>
+-
+-<dd> <b>Side Effects</b> A vector of pointers to DD nodes is allocated and freed.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddLoad">Dddmp_cuddBddLoad</a>
+-<a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddLoad"></A>
+-DdNode * <I></I>
+-<B>Dddmp_cuddBddLoad</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- Dddmp_VarMatchType <b>varMatchMode</b>, <i>IN: storing mode selector</i>
+- char ** <b>varmatchnames</b>, <i>IN: array of variable names - by IDs</i>
+- int * <b>varmatchauxids</b>, <i>IN: array of variable auxids - by IDs</i>
+- int * <b>varcomposeids</b>, <i>IN: array of new ids accessed - by IDs</i>
+- int <b>mode</b>, <i>IN: requested input file format</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b> <i>IN: file pointer</i>
+-)
+-</pre>
+-<dd> Reads a dump file representing the argument BDD.
+- Dddmp_cuddBddArrayLoad is used through a dummy array (see this
+- function's description for more details).
+- Mode, the requested input file format, is checked against
+- the file format.
+- The loaded BDDs is referenced before returning it.
+-<p>
+-
+-<dd> <b>Side Effects</b> A vector of pointers to DD nodes is allocated and freed.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddStore">Dddmp_cuddBddStore</a>
+-<a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddStoreBlif"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddStoreBlif</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- int <b>nRoots</b>, <i>IN: Number of BDD roots</i>
+- DdNode * <b>f</b>, <i>IN: BDD root to be stored</i>
+- char ** <b>inputNames</b>, <i>IN: Array of variable names</i>
+- char ** <b>outputNames</b>, <i>IN: Array of root names</i>
+- char * <b>modelName</b>, <i>IN: Model Name</i>
+- char * <b>fileName</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStoreBlif.
+- A dummy array of 1 BDD root is used for this purpose.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddStorePrefix">Dddmp_cuddBddStorePrefix</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddStoreCnf"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddStoreCnf</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- DdNode * <b>f</b>, <i>IN: BDD root to be stored</i>
+- Dddmp_DecompCnfStoreType <b>mode</b>, <i>IN: format selection</i>
+- int <b>noHeader</b>, <i>IN: do not store header iff 1</i>
+- char ** <b>varNames</b>, <i>IN: array of variable names (or NULL)</i>
+- int * <b>bddIds</b>, <i>IN: array of var ids</i>
+- int * <b>bddAuxIds</b>, <i>IN: array of BDD node Auxiliary Ids</i>
+- int * <b>cnfIds</b>, <i>IN: array of CNF var ids</i>
+- int <b>idInitial</b>, <i>IN: starting id for cutting variables</i>
+- int <b>edgeInTh</b>, <i>IN: Max # Incoming Edges</i>
+- int <b>pathLengthTh</b>, <i>IN: Max Path Length</i>
+- char * <b>fname</b>, <i>IN: file name</i>
+- FILE * <b>fp</b>, <i>IN: pointer to the store file</i>
+- int * <b>clauseNPtr</b>, <i>OUT: number of clause stored</i>
+- int * <b>varNewNPtr</b> <i>OUT: number of new variable created</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file.
+- This task is performed by calling the function
+- Dddmp_cuddBddArrayStoreCnf.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from unique hash. They are
+- re-linked after the store operation in a modified order.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayStoreCnf">Dddmp_cuddBddArrayStoreCnf</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddStorePrefix"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddStorePrefix</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- int <b>nRoots</b>, <i>IN: Number of BDD roots</i>
+- DdNode * <b>f</b>, <i>IN: BDD root to be stored</i>
+- char ** <b>inputNames</b>, <i>IN: Array of variable names</i>
+- char ** <b>outputNames</b>, <i>IN: Array of root names</i>
+- char * <b>modelName</b>, <i>IN: Model Name</i>
+- char * <b>fileName</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStorePrefix.
+- A dummy array of 1 BDD root is used for this purpose.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddStore">Dddmp_cuddBddStore</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddStoreSmv"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddStoreSmv</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- int <b>nRoots</b>, <i>IN: Number of BDD roots</i>
+- DdNode * <b>f</b>, <i>IN: BDD root to be stored</i>
+- char ** <b>inputNames</b>, <i>IN: Array of variable names</i>
+- char ** <b>outputNames</b>, <i>IN: Array of root names</i>
+- char * <b>modelName</b>, <i>IN: Model Name</i>
+- char * <b>fileName</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file.
+- Dumping is done through Dddmp_cuddBddArrayStorePrefix.
+- A dummy array of 1 BDD root is used for this purpose.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddStore">Dddmp_cuddBddStore</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddBddStore"></A>
+-int <I></I>
+-<B>Dddmp_cuddBddStore</B>(
+- DdManager * <b>ddMgr</b>, <i>IN: DD Manager</i>
+- char * <b>ddname</b>, <i>IN: DD name (or NULL)</i>
+- DdNode * <b>f</b>, <i>IN: BDD root to be stored</i>
+- char ** <b>varnames</b>, <i>IN: array of variable names (or NULL)</i>
+- int * <b>auxids</b>, <i>IN: array of converted var ids</i>
+- int <b>mode</b>, <i>IN: storing mode selector</i>
+- Dddmp_VarInfoType <b>varinfo</b>, <i>IN: extra info for variables in text mode</i>
+- char * <b>fname</b>, <i>IN: File name</i>
+- FILE * <b>fp</b> <i>IN: File pointer to the store file</i>
+-)
+-</pre>
+-<dd> Dumps the argument BDD to file. Dumping is done through
+- Dddmp_cuddBddArrayStore. A dummy array of 1 BDD root is
+- used for this purpose.
+-<p>
+-
+-<dd> <b>Side Effects</b> Nodes are temporarily removed from unique hash. They are
+- re-linked after the store operation in a modified order.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddLoad">Dddmp_cuddBddLoad</a>
+-<a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddHeaderLoadCnf"></A>
+-int <I></I>
+-<B>Dddmp_cuddHeaderLoadCnf</B>(
+- int * <b>nVars</b>, <i>OUT: number of DD variables</i>
+- int * <b>nsuppvars</b>, <i>OUT: number of support variables</i>
+- char *** <b>suppVarNames</b>, <i>OUT: array of support variable names</i>
+- char *** <b>orderedVarNames</b>, <i>OUT: array of variable names</i>
+- int ** <b>varIds</b>, <i>OUT: array of variable ids</i>
+- int ** <b>varComposeIds</b>, <i>OUT: array of permids ids</i>
+- int ** <b>varAuxIds</b>, <i>OUT: array of variable aux ids</i>
+- int * <b>nRoots</b>, <i>OUT: number of root in the file</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b> <i>IN: file pointer</i>
+-)
+-</pre>
+-<dd> Reads the header of a dump file representing the argument BDDs.
+- Returns main information regarding DD type stored in the file,
+- the variable ordering used, the number of variables, etc.
+- It reads only the header of the file NOT the BDD/ADD section.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-<dt><pre>
+-<A NAME="Dddmp_cuddHeaderLoad"></A>
+-int <I></I>
+-<B>Dddmp_cuddHeaderLoad</B>(
+- Dddmp_DecompType * <b>ddType</b>, <i>OUT: selects the proper decomp type</i>
+- int * <b>nVars</b>, <i>OUT: number of DD variables</i>
+- int * <b>nsuppvars</b>, <i>OUT: number of support variables</i>
+- char *** <b>suppVarNames</b>, <i>OUT: array of support variable names</i>
+- char *** <b>orderedVarNames</b>, <i>OUT: array of variable names</i>
+- int ** <b>varIds</b>, <i>OUT: array of variable ids</i>
+- int ** <b>varComposeIds</b>, <i>OUT: array of permids ids</i>
+- int ** <b>varAuxIds</b>, <i>OUT: array of variable aux ids</i>
+- int * <b>nRoots</b>, <i>OUT: number of root in the file</i>
+- char * <b>file</b>, <i>IN: file name</i>
+- FILE * <b>fp</b> <i>IN: file pointer</i>
+-)
+-</pre>
+-<dd> Reads the header of a dump file representing the argument BDDs.
+- Returns main information regarding DD type stored in the file,
+- the variable ordering used, the number of variables, etc.
+- It reads only the header of the file NOT the BDD/ADD section.
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="#Dddmp_cuddBddArrayLoad">Dddmp_cuddBddArrayLoad</a>
+-</code>
+-
+-
+-</DL>
+-<HR>
+-Last updated on 1040218 17h14
+-</BODY></HTML>
+diff --git a/Cudd/dddmp/doc/dddmpTitle.html b/Cudd/dddmp/doc/dddmpTitle.html
+deleted file mode 100644
+index 25a3694..0000000
+--- a/Cudd/dddmp/doc/dddmpTitle.html
++++ /dev/null
+@@ -1,17 +0,0 @@
+-<HTML>
+-<HEAD><TITLE>The dddmp package: Title</TITLE></HEAD>
+-<BODY>
+-
+-<TABLE BORDER WIDTH="100%">
+- <TR>
+- <TD ALIGN=center> <A HREF="dddmpExt.html" TARGET="_top">
+- Programmer view</A> </TD>
+- <TD ALIGN=center> <A HREF="dddmpAllByFunc.html" TARGET="_top">
+- Maintainer by function</A> </TD>
+- <TD ALIGN=center> <A HREF="dddmpAllByFile.html" TARGET="_top">
+- Maintainer by file</A> </TD>
+- </TR>
+-</TABLE>
+-
+-</BODY>
+-</HTML>
+diff --git a/Cudd/dddmp/doc/packages.html b/Cudd/dddmp/doc/packages.html
+deleted file mode 100644
+index 27e4ace..0000000
+--- a/Cudd/dddmp/doc/packages.html
++++ /dev/null
+@@ -1,12 +0,0 @@
+-<HTML>
+-<HEAD><TITLE>Package Documentation</TITLE></HEAD>
+-
+-<FRAMESET ROWS="95%,5%">
+- <FRAMESET COLS="40%,60%">
+- <FRAME SRC="pkgIndex.html">
+- <FRAME SRC="credit.html" NAME="MAIN">
+- </FRAMESET>
+- <FRAME SRC="credit.html">
+-</FRAMESET>
+-
+-</HTML>
+diff --git a/Cudd/dddmp/doc/pkgIndex.html b/Cudd/dddmp/doc/pkgIndex.html
+deleted file mode 100644
+index f2efd6b..0000000
+--- a/Cudd/dddmp/doc/pkgIndex.html
++++ /dev/null
+@@ -1,13 +0,0 @@
+-<HTML>
+-<HEAD><TITLE>Package Documentation</TITLE></HEAD>
+-<BODY>
+-<H1>Package Documentation</H1><HR><TABLE CELLSPACING=0 CELLPADDING=1>
+-<TR>
+- <TD VALIGN=top><A HREF="dddmpDesc.html" TARGET="MAIN"><CODE>dddmp</CODE></A></TD>
+- <TD VALIGN=top>Functions to read in and write out BDDs, ADDs
+-</TD>
+-</TR>
+-</TABLE>
+-<HR>
+-Last updated on 1040218 17h15
+-</BODY></HTML>
+diff --git a/Cudd/dddmp/exp/0.add b/Cudd/dddmp/exp/0.add
+deleted file mode 100644
+index ba6bb3d..0000000
+--- a/Cudd/dddmp/exp/0.add
++++ /dev/null
+@@ -1,21 +0,0 @@
+-.ver DDDMP-2.0
+-.add
+-.mode A
+-.varinfo 0
+-.nnodes 5
+-.nvars 3
+-.nsuppvars 2
+-.suppvarnames DUMMY1 DUMMY2
+-.orderedvarnames DUMMY0 DUMMY1 DUMMY2
+-.ids 1 2
+-.permids 1 2
+-.auxids 1 2
+-.nroots 1
+-.rootids 5
+-.nodes
+-1 T 1 0 0
+-2 T 2 0 0
+-3 T 0 0 0
+-4 2 1 2 3
+-5 1 0 1 4
+-.end
+diff --git a/Cudd/dddmp/exp/0.bdd b/Cudd/dddmp/exp/0.bdd
+deleted file mode 100644
+index 5092978..0000000
+--- a/Cudd/dddmp/exp/0.bdd
++++ /dev/null
+@@ -1,19 +0,0 @@
+-.ver DDDMP-2.0
+-.mode A
+-.varinfo 0
+-.nnodes 5
+-.nvars 50
+-.nsuppvars 3
+-.suppvarnames DUMMY1 DUMMY2 DUMMY3
+-.ids 1 2 3
+-.permids 1 2 3
+-.auxids 1 2 3
+-.nroots 1
+-.rootids -5
+-.nodes
+-1 T 1 0 0
+-2 3 2 1 -1
+-3 2 1 1 2
+-4 2 1 1 -2
+-5 1 0 3 4
+-.end
+diff --git a/Cudd/dddmp/exp/0or1.bdd b/Cudd/dddmp/exp/0or1.bdd
+deleted file mode 100644
+index 4fda5f2..0000000
+--- a/Cudd/dddmp/exp/0or1.bdd
++++ /dev/null
+@@ -1,119 +0,0 @@
+-.ver DDDMP-2.0
+-.mode A
+-.varinfo 0
+-.nnodes 104
+-.nvars 50
+-.nsuppvars 16
+-.suppvarnames DUMMY0 DUMMY1 DUMMY2 DUMMY3 DUMMY4 DUMMY10 DUMMY11 DUMMY12 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22
+-.orderedvarnames DUMMY0 DUMMY1 DUMMY2 DUMMY3 DUMMY4 DUMMY5 DUMMY6 DUMMY7 DUMMY8 DUMMY9 DUMMY10 DUMMY11 DUMMY12 DUMMY13 DUMMY14 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22 DUMMY23 DUMMY24 DUMMY25 DUMMY26 DUMMY27 DUMMY28 DUMMY29 DUMMY30 DUMMY31 DUMMY32 DUMMY33 DUMMY34 DUMMY35 DUMMY36 DUMMY37 DUMMY38 DUMMY39 DUMMY40 DUMMY41 DUMMY42 DUMMY43 DUMMY44 DUMMY45 DUMMY46 DUMMY47 DUMMY48 DUMMY49
+-.ids 0 1 2 3 4 10 11 12 15 16 17 18 19 20 21 22
+-.permids 0 1 2 3 4 10 11 12 15 16 17 18 19 20 21 22
+-.auxids 0 1 2 3 4 10 11 12 15 16 17 18 19 20 21 22
+-.nroots 1
+-.rootids -104
+-.nodes
+-1 T 1 0 0
+-2 22 15 1 -1
+-3 21 14 1 -2
+-4 20 13 1 3
+-5 19 12 1 4
+-6 20 13 3 1
+-7 21 14 1 2
+-8 20 13 1 7
+-9 19 12 6 8
+-10 18 11 5 9
+-11 17 10 1 10
+-12 18 11 1 9
+-13 17 10 1 12
+-14 16 9 11 13
+-15 20 13 7 -1
+-16 21 14 2 -1
+-17 20 13 16 -3
+-18 19 12 15 -17
+-19 21 14 2 1
+-20 20 13 19 7
+-21 19 12 6 20
+-22 18 11 18 21
+-23 17 10 1 22
+-24 16 9 23 13
+-25 18 11 18 9
+-26 17 10 1 25
+-27 16 9 26 13
+-28 15 8 24 27
+-29 12 7 28 27
+-30 11 6 28 29
+-31 11 6 28 27
+-32 10 5 30 31
+-33 4 4 14 32
+-34 3 3 33 -1
+-35 2 2 33 34
+-36 19 12 1 8
+-37 18 11 5 36
+-38 17 10 1 37
+-39 16 9 38 1
+-40 19 12 1 20
+-41 18 11 18 40
+-42 17 10 1 41
+-43 16 9 42 1
+-44 18 11 18 36
+-45 17 10 1 44
+-46 16 9 45 1
+-47 15 8 43 46
+-48 12 7 47 46
+-49 11 6 47 48
+-50 11 6 47 46
+-51 10 5 49 50
+-52 4 4 39 51
+-53 3 3 1 -52
+-54 2 2 52 -53
+-55 1 1 35 54
+-56 20 13 16 -1
+-57 21 14 1 -1
+-58 20 13 1 57
+-59 19 12 56 -58
+-60 18 11 59 -9
+-61 17 10 1 -60
+-62 19 12 56 -8
+-63 18 11 62 -9
+-64 17 10 1 -63
+-65 16 9 61 64
+-66 21 14 2 -2
+-67 20 13 66 1
+-68 20 13 16 -57
+-69 19 12 67 68
+-70 18 11 69 -21
+-71 17 10 1 -70
+-72 16 9 71 64
+-73 18 11 69 -9
+-74 17 10 1 -73
+-75 16 9 74 64
+-76 15 8 72 75
+-77 12 7 76 75
+-78 11 6 76 77
+-79 11 6 76 75
+-80 10 5 78 79
+-81 4 4 65 80
+-82 3 3 81 -1
+-83 2 2 81 82
+-84 18 11 59 -36
+-85 17 10 1 -84
+-86 18 11 62 -1
+-87 17 10 1 -86
+-88 16 9 85 87
+-89 18 11 69 -40
+-90 17 10 1 -89
+-91 16 9 90 87
+-92 18 11 69 -36
+-93 17 10 1 -92
+-94 16 9 93 87
+-95 15 8 91 94
+-96 12 7 95 94
+-97 11 6 95 96
+-98 11 6 95 94
+-99 10 5 97 98
+-100 4 4 88 99
+-101 3 3 1 -100
+-102 2 2 100 -101
+-103 1 1 83 102
+-104 0 0 55 103
+-.end
+diff --git a/Cudd/dddmp/exp/1.add b/Cudd/dddmp/exp/1.add
+deleted file mode 100644
+index ab6ab4d..0000000
+--- a/Cudd/dddmp/exp/1.add
++++ /dev/null
+@@ -1,28 +0,0 @@
+-.ver DDDMP-2.0
+-.add
+-.mode A
+-.varinfo 0
+-.nnodes 12
+-.nvars 50
+-.nsuppvars 4
+-.suppvarnames DUMMY1 DUMMY2 DUMMY3 DUMMY4
+-.orderedvarnames DUMMY0 DUMMY1 DUMMY2 DUMMY3 DUMMY4 DUMMY5 DUMMY6 DUMMY7 DUMMY8 DUMMY9 DUMMY10 DUMMY11 DUMMY12 DUMMY13 DUMMY14 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22 DUMMY23 DUMMY24 DUMMY25 DUMMY26 DUMMY27 DUMMY28 DUMMY29 DUMMY30 DUMMY31 DUMMY32 DUMMY33 DUMMY34 DUMMY35 DUMMY36 DUMMY37 DUMMY38 DUMMY39 DUMMY40 DUMMY41 DUMMY42 DUMMY43 DUMMY44 DUMMY45 DUMMY46 DUMMY47 DUMMY48 DUMMY49
+-.ids 1 2 3 4
+-.permids 1 2 3 4
+-.auxids 2 3 4 0
+-.nroots 1
+-.rootids 12
+-.nodes
+-1 T 0 0 0
+-2 T 2 0 0
+-3 4 3 1 2
+-4 T 1 0 0
+-5 4 3 4 1
+-6 3 2 3 5
+-7 4 3 2 4
+-8 3 2 7 3
+-9 2 1 6 8
+-10 3 2 5 7
+-11 2 1 10 6
+-12 1 0 9 11
+-.end
+diff --git a/Cudd/dddmp/exp/1.bdd b/Cudd/dddmp/exp/1.bdd
+deleted file mode 100644
+index b7139aa..0000000
+--- a/Cudd/dddmp/exp/1.bdd
++++ /dev/null
+@@ -1,110 +0,0 @@
+-.ver DDDMP-2.0
+-.mode A
+-.varinfo 0
+-.nnodes 96
+-.nvars 50
+-.nsuppvars 14
+-.suppvarnames DUMMY0 DUMMY1 DUMMY4 DUMMY10 DUMMY11 DUMMY12 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22
+-.ids 0 1 4 10 11 12 15 16 17 18 19 20 21 22
+-.permids 0 1 4 10 11 12 15 16 17 18 19 20 21 22
+-.auxids 0 1 4 10 11 12 15 16 17 18 19 20 21 22
+-.nroots 1
+-.rootids -96
+-.nodes
+-1 T 1 0 0
+-2 22 13 1 -1
+-3 21 12 1 -2
+-4 20 11 1 3
+-5 19 10 1 4
+-6 20 11 3 1
+-7 21 12 1 2
+-8 20 11 1 7
+-9 19 10 6 8
+-10 18 9 5 9
+-11 17 8 1 10
+-12 18 9 1 9
+-13 17 8 1 12
+-14 16 7 11 13
+-15 20 11 7 -1
+-16 21 12 2 -1
+-17 20 11 16 -3
+-18 19 10 15 -17
+-19 21 12 2 1
+-20 20 11 19 7
+-21 19 10 6 20
+-22 18 9 18 21
+-23 17 8 1 22
+-24 16 7 23 13
+-25 18 9 18 9
+-26 17 8 1 25
+-27 16 7 26 13
+-28 15 6 24 27
+-29 12 5 28 27
+-30 11 4 28 29
+-31 11 4 28 27
+-32 10 3 30 31
+-33 4 2 14 32
+-34 19 10 1 8
+-35 18 9 5 34
+-36 17 8 1 35
+-37 16 7 36 1
+-38 19 10 1 20
+-39 18 9 18 38
+-40 17 8 1 39
+-41 16 7 40 1
+-42 18 9 18 34
+-43 17 8 1 42
+-44 16 7 43 1
+-45 15 6 41 44
+-46 12 5 45 44
+-47 11 4 45 46
+-48 11 4 45 44
+-49 10 3 47 48
+-50 4 2 37 49
+-51 1 1 33 50
+-52 20 11 16 -1
+-53 21 12 1 -1
+-54 20 11 1 53
+-55 19 10 52 -54
+-56 18 9 55 -9
+-57 17 8 1 -56
+-58 19 10 52 -8
+-59 18 9 58 -9
+-60 17 8 1 -59
+-61 16 7 57 60
+-62 21 12 2 -2
+-63 20 11 62 1
+-64 20 11 16 -53
+-65 19 10 63 64
+-66 18 9 65 -21
+-67 17 8 1 -66
+-68 16 7 67 60
+-69 18 9 65 -9
+-70 17 8 1 -69
+-71 16 7 70 60
+-72 15 6 68 71
+-73 12 5 72 71
+-74 11 4 72 73
+-75 11 4 72 71
+-76 10 3 74 75
+-77 4 2 61 76
+-78 18 9 55 -34
+-79 17 8 1 -78
+-80 18 9 58 -1
+-81 17 8 1 -80
+-82 16 7 79 81
+-83 18 9 65 -38
+-84 17 8 1 -83
+-85 16 7 84 81
+-86 18 9 65 -34
+-87 17 8 1 -86
+-88 16 7 87 81
+-89 15 6 85 88
+-90 12 5 89 88
+-91 11 4 89 90
+-92 11 4 89 88
+-93 10 3 91 92
+-94 4 2 82 93
+-95 1 1 77 94
+-96 0 0 51 95
+-.end
+diff --git a/Cudd/dddmp/exp/2.bdd b/Cudd/dddmp/exp/2.bdd
+deleted file mode 100644
+index c23a160..0000000
+--- a/Cudd/dddmp/exp/2.bdd
++++ /dev/null
+@@ -1,118 +0,0 @@
+-.ver DDDMP-2.0
+-.mode A
+-.varinfo 0
+-.nnodes 104
+-.nvars 50
+-.nsuppvars 16
+-.suppvarnames DUMMY0 DUMMY1 DUMMY2 DUMMY3 DUMMY4 DUMMY10 DUMMY11 DUMMY12 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22
+-.ids 0 1 2 3 4 10 11 12 15 16 17 18 19 20 21 22
+-.permids 0 1 2 3 4 10 11 12 15 16 17 18 19 20 21 22
+-.auxids 0 1 2 3 4 10 11 12 15 16 17 18 19 20 21 22
+-.nroots 1
+-.rootids -104
+-.nodes
+-1 T 1 0 0
+-2 22 15 1 -1
+-3 21 14 1 -2
+-4 20 13 1 3
+-5 19 12 1 4
+-6 20 13 3 1
+-7 21 14 1 2
+-8 20 13 1 7
+-9 19 12 6 8
+-10 18 11 5 9
+-11 17 10 1 10
+-12 18 11 1 9
+-13 17 10 1 12
+-14 16 9 11 13
+-15 20 13 7 -1
+-16 21 14 2 -1
+-17 20 13 16 -3
+-18 19 12 15 -17
+-19 21 14 2 1
+-20 20 13 19 7
+-21 19 12 6 20
+-22 18 11 18 21
+-23 17 10 1 22
+-24 16 9 23 13
+-25 18 11 18 9
+-26 17 10 1 25
+-27 16 9 26 13
+-28 15 8 24 27
+-29 12 7 28 27
+-30 11 6 28 29
+-31 11 6 28 27
+-32 10 5 30 31
+-33 4 4 14 32
+-34 3 3 1 33
+-35 2 2 1 34
+-36 19 12 1 8
+-37 18 11 5 36
+-38 17 10 1 37
+-39 16 9 38 1
+-40 19 12 1 20
+-41 18 11 18 40
+-42 17 10 1 41
+-43 16 9 42 1
+-44 18 11 18 36
+-45 17 10 1 44
+-46 16 9 45 1
+-47 15 8 43 46
+-48 12 7 47 46
+-49 11 6 47 48
+-50 11 6 47 46
+-51 10 5 49 50
+-52 4 4 39 51
+-53 3 3 52 1
+-54 2 2 1 53
+-55 1 1 35 54
+-56 20 13 16 -1
+-57 21 14 1 -1
+-58 20 13 1 57
+-59 19 12 56 -58
+-60 18 11 59 -9
+-61 17 10 1 -60
+-62 19 12 56 -8
+-63 18 11 62 -9
+-64 17 10 1 -63
+-65 16 9 61 64
+-66 21 14 2 -2
+-67 20 13 66 1
+-68 20 13 16 -57
+-69 19 12 67 68
+-70 18 11 69 -21
+-71 17 10 1 -70
+-72 16 9 71 64
+-73 18 11 69 -9
+-74 17 10 1 -73
+-75 16 9 74 64
+-76 15 8 72 75
+-77 12 7 76 75
+-78 11 6 76 77
+-79 11 6 76 75
+-80 10 5 78 79
+-81 4 4 65 80
+-82 3 3 1 81
+-83 2 2 1 82
+-84 18 11 59 -36
+-85 17 10 1 -84
+-86 18 11 62 -1
+-87 17 10 1 -86
+-88 16 9 85 87
+-89 18 11 69 -40
+-90 17 10 1 -89
+-91 16 9 90 87
+-92 18 11 69 -36
+-93 17 10 1 -92
+-94 16 9 93 87
+-95 15 8 91 94
+-96 12 7 95 94
+-97 11 6 95 96
+-98 11 6 95 94
+-99 10 5 97 98
+-100 4 4 88 99
+-101 3 3 100 1
+-102 2 2 1 101
+-103 1 1 83 102
+-104 0 0 55 103
+-.end
+diff --git a/Cudd/dddmp/exp/2and3.bdd b/Cudd/dddmp/exp/2and3.bdd
+deleted file mode 100644
+index 650c454..0000000
+--- a/Cudd/dddmp/exp/2and3.bdd
++++ /dev/null
+@@ -1,76 +0,0 @@
+-.ver DDDMP-2.0
+-.mode A
+-.varinfo 0
+-.nnodes 61
+-.nvars 50
+-.nsuppvars 16
+-.suppvarnames DUMMY0 DUMMY1 DUMMY2 DUMMY3 DUMMY4 DUMMY10 DUMMY11 DUMMY12 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22
+-.orderedvarnames DUMMY0 DUMMY1 DUMMY2 DUMMY3 DUMMY4 DUMMY5 DUMMY6 DUMMY7 DUMMY8 DUMMY9 DUMMY10 DUMMY11 DUMMY12 DUMMY13 DUMMY14 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22 DUMMY23 DUMMY24 DUMMY25 DUMMY26 DUMMY27 DUMMY28 DUMMY29 DUMMY30 DUMMY31 DUMMY32 DUMMY33 DUMMY34 DUMMY35 DUMMY36 DUMMY37 DUMMY38 DUMMY39 DUMMY40 DUMMY41 DUMMY42 DUMMY43 DUMMY44 DUMMY45 DUMMY46 DUMMY47 DUMMY48 DUMMY49
+-.ids 0 1 2 3 4 10 11 12 15 16 17 18 19 20 21 22
+-.permids 0 1 2 3 4 10 11 12 15 16 17 18 19 20 21 22
+-.auxids 0 1 2 3 4 10 11 12 15 16 17 18 19 20 21 22
+-.nroots 1
+-.rootids -61
+-.nodes
+-1 T 1 0 0
+-2 22 15 1 -1
+-3 21 14 1 2
+-4 20 13 3 -1
+-5 21 14 2 -1
+-6 20 13 5 -1
+-7 19 12 4 -6
+-8 21 14 2 1
+-9 20 13 8 1
+-10 19 12 1 9
+-11 18 11 7 10
+-12 17 10 1 11
+-13 16 9 12 1
+-14 19 12 4 1
+-15 18 11 14 1
+-16 17 10 1 15
+-17 16 9 16 1
+-18 15 8 13 17
+-19 18 11 7 1
+-20 17 10 1 19
+-21 16 9 20 1
+-22 15 8 21 17
+-23 12 7 18 22
+-24 11 6 18 23
+-25 11 6 23 22
+-26 10 5 24 25
+-27 4 4 1 26
+-28 3 3 1 27
+-29 2 2 1 28
+-30 3 3 27 1
+-31 2 2 1 30
+-32 1 1 29 31
+-33 19 12 6 -1
+-34 18 11 33 -1
+-35 17 10 1 -34
+-36 21 14 2 -2
+-37 20 13 36 1
+-38 19 12 37 6
+-39 18 11 38 -10
+-40 17 10 1 -39
+-41 16 9 40 35
+-42 19 12 37 -1
+-43 18 11 42 -1
+-44 17 10 1 -43
+-45 16 9 44 35
+-46 15 8 41 45
+-47 18 11 38 -1
+-48 17 10 1 -47
+-49 16 9 48 35
+-50 15 8 49 45
+-51 12 7 46 50
+-52 11 6 46 51
+-53 11 6 51 50
+-54 10 5 52 53
+-55 4 4 35 54
+-56 3 3 1 55
+-57 2 2 1 56
+-58 3 3 55 1
+-59 2 2 1 58
+-60 1 1 57 59
+-61 0 0 32 60
+-.end
+diff --git a/Cudd/dddmp/exp/3.bdd b/Cudd/dddmp/exp/3.bdd
+deleted file mode 100644
+index 33d6ddf..0000000
+--- a/Cudd/dddmp/exp/3.bdd
++++ /dev/null
+@@ -1,304 +0,0 @@
+-.ver DDDMP-2.0
+-.mode A
+-.varinfo 0
+-.nnodes 290
+-.nvars 50
+-.nsuppvars 17
+-.suppvarnames DUMMY0 DUMMY1 DUMMY2 DUMMY3 DUMMY4 DUMMY5 DUMMY10 DUMMY11 DUMMY12 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22
+-.ids 0 1 2 3 4 5 10 11 12 15 16 17 18 19 20 21 22
+-.permids 0 1 2 3 4 5 10 11 12 15 16 17 18 19 20 21 22
+-.auxids 0 1 2 3 4 5 10 11 12 15 16 17 18 19 20 21 22
+-.nroots 1
+-.rootids -290
+-.nodes
+-1 T 1 0 0
+-2 22 16 1 -1
+-3 21 15 2 1
+-4 20 14 3 1
+-5 19 13 4 1
+-6 18 12 1 5
+-7 17 11 1 6
+-8 20 14 2 1
+-9 19 13 8 1
+-10 18 12 1 9
+-11 17 11 1 10
+-12 5 5 7 11
+-13 21 15 1 2
+-14 20 14 13 -1
+-15 21 15 2 -1
+-16 20 14 15 -1
+-17 19 13 14 -16
+-18 20 14 3 -1
+-19 21 15 1 -1
+-20 20 14 19 -1
+-21 19 13 18 -20
+-22 18 12 17 21
+-23 17 11 1 22
+-24 20 14 13 -15
+-25 19 13 24 1
+-26 20 14 3 -15
+-27 19 13 26 1
+-28 18 12 25 27
+-29 17 11 1 28
+-30 16 10 23 29
+-31 19 13 14 1
+-32 19 13 18 1
+-33 18 12 31 32
+-34 17 11 1 33
+-35 16 10 34 29
+-36 15 9 30 35
+-37 19 13 18 -16
+-38 18 12 17 37
+-39 17 11 1 38
+-40 16 10 39 29
+-41 15 9 40 35
+-42 12 8 36 41
+-43 11 7 36 42
+-44 11 7 42 36
+-45 10 6 43 44
+-46 20 14 2 -1
+-47 19 13 46 -20
+-48 18 12 17 47
+-49 17 11 1 48
+-50 20 14 2 -15
+-51 19 13 50 1
+-52 18 12 25 51
+-53 17 11 1 52
+-54 16 10 49 53
+-55 19 13 46 1
+-56 18 12 31 55
+-57 17 11 1 56
+-58 16 10 57 53
+-59 15 9 54 58
+-60 19 13 46 -16
+-61 18 12 17 60
+-62 17 11 1 61
+-63 16 10 62 53
+-64 15 9 63 58
+-65 12 8 59 64
+-66 11 7 59 65
+-67 11 7 65 59
+-68 10 6 66 67
+-69 5 5 45 68
+-70 4 4 12 69
+-71 21 15 2 -2
+-72 20 14 71 1
+-73 19 13 72 1
+-74 18 12 1 73
+-75 17 11 1 74
+-76 20 14 1 13
+-77 19 13 72 76
+-78 18 12 1 77
+-79 17 11 1 78
+-80 16 10 75 79
+-81 20 14 15 1
+-82 19 13 81 1
+-83 18 12 1 82
+-84 17 11 1 83
+-85 19 13 81 76
+-86 18 12 1 85
+-87 17 11 1 86
+-88 16 10 84 87
+-89 5 5 80 88
+-90 20 14 71 -1
+-91 19 13 90 -20
+-92 18 12 17 91
+-93 17 11 1 92
+-94 20 14 71 -15
+-95 19 13 94 76
+-96 18 12 25 95
+-97 17 11 1 96
+-98 16 10 93 97
+-99 19 13 90 1
+-100 18 12 31 99
+-101 17 11 1 100
+-102 16 10 101 97
+-103 15 9 98 102
+-104 19 13 90 -16
+-105 18 12 17 104
+-106 17 11 1 105
+-107 16 10 106 97
+-108 15 9 107 102
+-109 12 8 103 108
+-110 11 7 103 109
+-111 11 7 109 103
+-112 10 6 110 111
+-113 19 13 16 -20
+-114 18 12 17 113
+-115 17 11 1 114
+-116 20 14 15 -15
+-117 19 13 116 76
+-118 18 12 25 117
+-119 17 11 1 118
+-120 16 10 115 119
+-121 19 13 16 1
+-122 18 12 31 121
+-123 17 11 1 122
+-124 16 10 123 119
+-125 15 9 120 124
+-126 19 13 16 -16
+-127 18 12 17 126
+-128 17 11 1 127
+-129 16 10 128 119
+-130 15 9 129 124
+-131 12 8 125 130
+-132 11 7 125 131
+-133 11 7 131 125
+-134 10 6 132 133
+-135 5 5 112 134
+-136 4 4 89 135
+-137 3 3 70 136
+-138 5 5 75 84
+-139 19 13 94 1
+-140 18 12 25 139
+-141 17 11 1 140
+-142 16 10 93 141
+-143 16 10 101 141
+-144 15 9 142 143
+-145 16 10 106 141
+-146 15 9 145 143
+-147 12 8 144 146
+-148 11 7 144 147
+-149 11 7 147 144
+-150 10 6 148 149
+-151 19 13 116 1
+-152 18 12 25 151
+-153 17 11 1 152
+-154 16 10 115 153
+-155 16 10 123 153
+-156 15 9 154 155
+-157 16 10 128 153
+-158 15 9 157 155
+-159 12 8 156 158
+-160 11 7 156 159
+-161 11 7 159 156
+-162 10 6 160 161
+-163 5 5 150 162
+-164 4 4 138 163
+-165 3 3 70 164
+-166 2 2 137 165
+-167 1 1 70 166
+-168 19 13 16 -1
+-169 18 12 168 -5
+-170 17 11 1 -169
+-171 18 12 168 -9
+-172 17 11 1 -171
+-173 5 5 170 172
+-174 19 13 72 16
+-175 18 12 174 -21
+-176 17 11 1 -175
+-177 20 14 71 15
+-178 19 13 177 -1
+-179 18 12 178 -27
+-180 17 11 1 -179
+-181 16 10 176 180
+-182 19 13 72 -1
+-183 18 12 182 -32
+-184 17 11 1 -183
+-185 16 10 184 180
+-186 15 9 181 185
+-187 18 12 174 -37
+-188 17 11 1 -187
+-189 16 10 188 180
+-190 15 9 189 185
+-191 12 8 186 190
+-192 11 7 186 191
+-193 11 7 191 186
+-194 10 6 192 193
+-195 18 12 174 -47
+-196 17 11 1 -195
+-197 18 12 178 -51
+-198 17 11 1 -197
+-199 16 10 196 198
+-200 18 12 182 -55
+-201 17 11 1 -200
+-202 16 10 201 198
+-203 15 9 199 202
+-204 18 12 174 -60
+-205 17 11 1 -204
+-206 16 10 205 198
+-207 15 9 206 202
+-208 12 8 203 207
+-209 11 7 203 208
+-210 11 7 208 203
+-211 10 6 209 210
+-212 5 5 194 211
+-213 4 4 173 212
+-214 18 12 168 -73
+-215 17 11 1 -214
+-216 18 12 168 -77
+-217 17 11 1 -216
+-218 16 10 215 217
+-219 18 12 168 -82
+-220 17 11 1 -219
+-221 18 12 168 -85
+-222 17 11 1 -221
+-223 16 10 220 222
+-224 5 5 218 223
+-225 18 12 174 -91
+-226 17 11 1 -225
+-227 18 12 178 -95
+-228 17 11 1 -227
+-229 16 10 226 228
+-230 18 12 182 -99
+-231 17 11 1 -230
+-232 16 10 231 228
+-233 15 9 229 232
+-234 18 12 174 -104
+-235 17 11 1 -234
+-236 16 10 235 228
+-237 15 9 236 232
+-238 12 8 233 237
+-239 11 7 233 238
+-240 11 7 238 233
+-241 10 6 239 240
+-242 18 12 174 -113
+-243 17 11 1 -242
+-244 18 12 178 -117
+-245 17 11 1 -244
+-246 16 10 243 245
+-247 18 12 182 -121
+-248 17 11 1 -247
+-249 16 10 248 245
+-250 15 9 246 249
+-251 18 12 174 -126
+-252 17 11 1 -251
+-253 16 10 252 245
+-254 15 9 253 249
+-255 12 8 250 254
+-256 11 7 250 255
+-257 11 7 255 250
+-258 10 6 256 257
+-259 5 5 241 258
+-260 4 4 224 259
+-261 3 3 213 260
+-262 5 5 215 220
+-263 18 12 178 -139
+-264 17 11 1 -263
+-265 16 10 226 264
+-266 16 10 231 264
+-267 15 9 265 266
+-268 16 10 235 264
+-269 15 9 268 266
+-270 12 8 267 269
+-271 11 7 267 270
+-272 11 7 270 267
+-273 10 6 271 272
+-274 18 12 178 -151
+-275 17 11 1 -274
+-276 16 10 243 275
+-277 16 10 248 275
+-278 15 9 276 277
+-279 16 10 252 275
+-280 15 9 279 277
+-281 12 8 278 280
+-282 11 7 278 281
+-283 11 7 281 278
+-284 10 6 282 283
+-285 5 5 273 284
+-286 4 4 262 285
+-287 3 3 213 286
+-288 2 2 261 287
+-289 1 1 213 288
+-290 0 0 167 289
+-.end
+diff --git a/Cudd/dddmp/exp/4.bdd b/Cudd/dddmp/exp/4.bdd
+deleted file mode 100644
+index fb774ba..0000000
+--- a/Cudd/dddmp/exp/4.bdd
++++ /dev/null
+@@ -1,50 +0,0 @@
+-.ver DDDMP-2.0
+-.mode A
+-.varinfo 3
+-.nnodes 35
+-.nvars 50
+-.nsuppvars 15
+-.suppvarnames V2 V3 V8 V9 V10 V12 V22 V23 V24 V37 V38 V39 V48 V49 V50
+-.orderedvarnames V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21 V22 V23 V24 V25 V26 V27 V28 V29 V30 V31 V32 V33 V34 V35 V36 V37 V38 V39 V40 V41 V42 V43 V44 V45 V46 V47 V48 V49 V50
+-.ids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.permids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.auxids 3 5 15 17 19 23 43 45 47 73 75 77 95 97 99
+-.nroots 1
+-.rootids -35
+-.nodes
+-1 T 1 0 0
+-2 V50 14 1 -1
+-3 V49 13 1 2
+-4 V48 12 3 1
+-5 V48 12 1 -1
+-6 V48 12 2 1
+-7 V39 11 5 -6
+-8 V49 13 1 -1
+-9 V48 12 8 1
+-10 V39 11 9 4
+-11 V38 10 7 -10
+-12 V37 9 1 -11
+-13 V38 10 5 -9
+-14 V37 9 1 -13
+-15 V24 8 12 14
+-16 V37 9 1 -7
+-17 V37 9 1 -5
+-18 V24 8 16 17
+-19 V23 7 15 18
+-20 V22 6 19 1
+-21 V23 7 14 17
+-22 V22 6 21 1
+-23 V12 5 20 22
+-24 V10 4 23 1
+-25 V22 6 18 1
+-26 V12 5 20 25
+-27 V10 4 26 1
+-28 V9 3 24 27
+-29 V12 5 20 1
+-30 V10 4 29 1
+-31 V10 4 20 1
+-32 V9 3 30 31
+-33 V8 2 28 32
+-34 V3 1 4 33
+-35 V2 0 1 34
+-.end
+diff --git a/Cudd/dddmp/exp/4.bdd.bis1 b/Cudd/dddmp/exp/4.bdd.bis1
+deleted file mode 100644
+index 220059d..0000000
+--- a/Cudd/dddmp/exp/4.bdd.bis1
++++ /dev/null
+@@ -1,50 +0,0 @@
+-.ver DDDMP-2.0
+-.mode A
+-.varinfo 0
+-.nnodes 35
+-.nvars 150
+-.nsuppvars 15
+-.suppvarnames V3 V8 V23 V24 V37 V39 DUMMY21 DUMMY22 DUMMY23 DUMMY36 DUMMY37 DUMMY38 DUMMY47 DUMMY48 DUMMY49
+-.orderedvarnames V2 V3 V8 V9 V10 V12 V22 V23 V24 V37 V38 V39 V48 V49 V50 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22 DUMMY23 DUMMY24 DUMMY25 DUMMY26 DUMMY27 DUMMY28 DUMMY29 DUMMY30 DUMMY31 DUMMY32 DUMMY33 DUMMY34 DUMMY35 DUMMY36 DUMMY37 DUMMY38 DUMMY39 DUMMY40 DUMMY41 DUMMY42 DUMMY43 DUMMY44 DUMMY45 DUMMY46 DUMMY47 DUMMY48 DUMMY49 DUMMY50 DUMMY51 DUMMY52 DUMMY53 DUMMY54 DUMMY55 DUMMY56 DUMMY57 DUMMY58 DUMMY59 DUMMY60 DUMMY61 DUMMY62 DUMMY63 DUMMY64 DUMMY65 DUMMY66 DUMMY67 DUMMY68 DUMMY69 DUMMY70 DUMMY71 DUMMY72 DUMMY73 DUMMY74 DUMMY75 DUMMY76 DUMMY77 DUMMY78 DUMMY79 DUMMY80 DUMMY81 DUMMY82 DUMMY83 DUMMY84 DUMMY85 DUMMY86 DUMMY87 DUMMY88 DUMMY89 DUMMY90 DUMMY91 DUMMY92 DUMMY93 DUMMY94 DUMMY95 DUMMY96 DUMMY97 DUMMY98 DUMMY99 DUMMY100 DUMMY101 DUMMY102 DUMMY103 DUMMY104 DUMMY105 DUMMY106 DUMMY107 DUMMY108 DUMMY109 DUMMY110 DUMMY111 DUMMY112 DUMMY113 DUMMY114 DUMMY115 DUMMY116 DUMMY117 DUMMY118 DUMMY119 DUMMY120 DUMMY121 DUMMY122 DUMMY123 DUMMY124 DUMMY125 DUMMY126 DUMMY127 DUMMY128 DUMMY129 DUMMY130 DUMMY131 DUMMY132 DUMMY133 DUMMY134 DUMMY135 DUMMY136 DUMMY137 DUMMY138 DUMMY139 DUMMY140 DUMMY141 DUMMY142 DUMMY143 DUMMY144 DUMMY145 DUMMY146 DUMMY147 DUMMY148 DUMMY149
+-.ids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.permids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.auxids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.nroots 1
+-.rootids -35
+-.nodes
+-1 T 1 0 0
+-2 49 14 1 -1
+-3 48 13 1 2
+-4 47 12 3 1
+-5 47 12 1 -1
+-6 47 12 2 1
+-7 38 11 5 -6
+-8 48 13 1 -1
+-9 47 12 8 1
+-10 38 11 9 4
+-11 37 10 7 -10
+-12 36 9 1 -11
+-13 37 10 5 -9
+-14 36 9 1 -13
+-15 23 8 12 14
+-16 36 9 1 -7
+-17 36 9 1 -5
+-18 23 8 16 17
+-19 22 7 15 18
+-20 21 6 19 1
+-21 22 7 14 17
+-22 21 6 21 1
+-23 11 5 20 22
+-24 9 4 23 1
+-25 21 6 18 1
+-26 11 5 20 25
+-27 9 4 26 1
+-28 8 3 24 27
+-29 11 5 20 1
+-30 9 4 29 1
+-31 9 4 20 1
+-32 8 3 30 31
+-33 7 2 28 32
+-34 2 1 4 33
+-35 1 0 1 34
+-.end
+diff --git a/Cudd/dddmp/exp/4.bdd.bis2 b/Cudd/dddmp/exp/4.bdd.bis2
+deleted file mode 100644
+index 220059d..0000000
+--- a/Cudd/dddmp/exp/4.bdd.bis2
++++ /dev/null
+@@ -1,50 +0,0 @@
+-.ver DDDMP-2.0
+-.mode A
+-.varinfo 0
+-.nnodes 35
+-.nvars 150
+-.nsuppvars 15
+-.suppvarnames V3 V8 V23 V24 V37 V39 DUMMY21 DUMMY22 DUMMY23 DUMMY36 DUMMY37 DUMMY38 DUMMY47 DUMMY48 DUMMY49
+-.orderedvarnames V2 V3 V8 V9 V10 V12 V22 V23 V24 V37 V38 V39 V48 V49 V50 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22 DUMMY23 DUMMY24 DUMMY25 DUMMY26 DUMMY27 DUMMY28 DUMMY29 DUMMY30 DUMMY31 DUMMY32 DUMMY33 DUMMY34 DUMMY35 DUMMY36 DUMMY37 DUMMY38 DUMMY39 DUMMY40 DUMMY41 DUMMY42 DUMMY43 DUMMY44 DUMMY45 DUMMY46 DUMMY47 DUMMY48 DUMMY49 DUMMY50 DUMMY51 DUMMY52 DUMMY53 DUMMY54 DUMMY55 DUMMY56 DUMMY57 DUMMY58 DUMMY59 DUMMY60 DUMMY61 DUMMY62 DUMMY63 DUMMY64 DUMMY65 DUMMY66 DUMMY67 DUMMY68 DUMMY69 DUMMY70 DUMMY71 DUMMY72 DUMMY73 DUMMY74 DUMMY75 DUMMY76 DUMMY77 DUMMY78 DUMMY79 DUMMY80 DUMMY81 DUMMY82 DUMMY83 DUMMY84 DUMMY85 DUMMY86 DUMMY87 DUMMY88 DUMMY89 DUMMY90 DUMMY91 DUMMY92 DUMMY93 DUMMY94 DUMMY95 DUMMY96 DUMMY97 DUMMY98 DUMMY99 DUMMY100 DUMMY101 DUMMY102 DUMMY103 DUMMY104 DUMMY105 DUMMY106 DUMMY107 DUMMY108 DUMMY109 DUMMY110 DUMMY111 DUMMY112 DUMMY113 DUMMY114 DUMMY115 DUMMY116 DUMMY117 DUMMY118 DUMMY119 DUMMY120 DUMMY121 DUMMY122 DUMMY123 DUMMY124 DUMMY125 DUMMY126 DUMMY127 DUMMY128 DUMMY129 DUMMY130 DUMMY131 DUMMY132 DUMMY133 DUMMY134 DUMMY135 DUMMY136 DUMMY137 DUMMY138 DUMMY139 DUMMY140 DUMMY141 DUMMY142 DUMMY143 DUMMY144 DUMMY145 DUMMY146 DUMMY147 DUMMY148 DUMMY149
+-.ids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.permids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.auxids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.nroots 1
+-.rootids -35
+-.nodes
+-1 T 1 0 0
+-2 49 14 1 -1
+-3 48 13 1 2
+-4 47 12 3 1
+-5 47 12 1 -1
+-6 47 12 2 1
+-7 38 11 5 -6
+-8 48 13 1 -1
+-9 47 12 8 1
+-10 38 11 9 4
+-11 37 10 7 -10
+-12 36 9 1 -11
+-13 37 10 5 -9
+-14 36 9 1 -13
+-15 23 8 12 14
+-16 36 9 1 -7
+-17 36 9 1 -5
+-18 23 8 16 17
+-19 22 7 15 18
+-20 21 6 19 1
+-21 22 7 14 17
+-22 21 6 21 1
+-23 11 5 20 22
+-24 9 4 23 1
+-25 21 6 18 1
+-26 11 5 20 25
+-27 9 4 26 1
+-28 8 3 24 27
+-29 11 5 20 1
+-30 9 4 29 1
+-31 9 4 20 1
+-32 8 3 30 31
+-33 7 2 28 32
+-34 2 1 4 33
+-35 1 0 1 34
+-.end
+diff --git a/Cudd/dddmp/exp/4.bdd.bis3 b/Cudd/dddmp/exp/4.bdd.bis3
+deleted file mode 100644
+index 220059d..0000000
+--- a/Cudd/dddmp/exp/4.bdd.bis3
++++ /dev/null
+@@ -1,50 +0,0 @@
+-.ver DDDMP-2.0
+-.mode A
+-.varinfo 0
+-.nnodes 35
+-.nvars 150
+-.nsuppvars 15
+-.suppvarnames V3 V8 V23 V24 V37 V39 DUMMY21 DUMMY22 DUMMY23 DUMMY36 DUMMY37 DUMMY38 DUMMY47 DUMMY48 DUMMY49
+-.orderedvarnames V2 V3 V8 V9 V10 V12 V22 V23 V24 V37 V38 V39 V48 V49 V50 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22 DUMMY23 DUMMY24 DUMMY25 DUMMY26 DUMMY27 DUMMY28 DUMMY29 DUMMY30 DUMMY31 DUMMY32 DUMMY33 DUMMY34 DUMMY35 DUMMY36 DUMMY37 DUMMY38 DUMMY39 DUMMY40 DUMMY41 DUMMY42 DUMMY43 DUMMY44 DUMMY45 DUMMY46 DUMMY47 DUMMY48 DUMMY49 DUMMY50 DUMMY51 DUMMY52 DUMMY53 DUMMY54 DUMMY55 DUMMY56 DUMMY57 DUMMY58 DUMMY59 DUMMY60 DUMMY61 DUMMY62 DUMMY63 DUMMY64 DUMMY65 DUMMY66 DUMMY67 DUMMY68 DUMMY69 DUMMY70 DUMMY71 DUMMY72 DUMMY73 DUMMY74 DUMMY75 DUMMY76 DUMMY77 DUMMY78 DUMMY79 DUMMY80 DUMMY81 DUMMY82 DUMMY83 DUMMY84 DUMMY85 DUMMY86 DUMMY87 DUMMY88 DUMMY89 DUMMY90 DUMMY91 DUMMY92 DUMMY93 DUMMY94 DUMMY95 DUMMY96 DUMMY97 DUMMY98 DUMMY99 DUMMY100 DUMMY101 DUMMY102 DUMMY103 DUMMY104 DUMMY105 DUMMY106 DUMMY107 DUMMY108 DUMMY109 DUMMY110 DUMMY111 DUMMY112 DUMMY113 DUMMY114 DUMMY115 DUMMY116 DUMMY117 DUMMY118 DUMMY119 DUMMY120 DUMMY121 DUMMY122 DUMMY123 DUMMY124 DUMMY125 DUMMY126 DUMMY127 DUMMY128 DUMMY129 DUMMY130 DUMMY131 DUMMY132 DUMMY133 DUMMY134 DUMMY135 DUMMY136 DUMMY137 DUMMY138 DUMMY139 DUMMY140 DUMMY141 DUMMY142 DUMMY143 DUMMY144 DUMMY145 DUMMY146 DUMMY147 DUMMY148 DUMMY149
+-.ids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.permids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.auxids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.nroots 1
+-.rootids -35
+-.nodes
+-1 T 1 0 0
+-2 49 14 1 -1
+-3 48 13 1 2
+-4 47 12 3 1
+-5 47 12 1 -1
+-6 47 12 2 1
+-7 38 11 5 -6
+-8 48 13 1 -1
+-9 47 12 8 1
+-10 38 11 9 4
+-11 37 10 7 -10
+-12 36 9 1 -11
+-13 37 10 5 -9
+-14 36 9 1 -13
+-15 23 8 12 14
+-16 36 9 1 -7
+-17 36 9 1 -5
+-18 23 8 16 17
+-19 22 7 15 18
+-20 21 6 19 1
+-21 22 7 14 17
+-22 21 6 21 1
+-23 11 5 20 22
+-24 9 4 23 1
+-25 21 6 18 1
+-26 11 5 20 25
+-27 9 4 26 1
+-28 8 3 24 27
+-29 11 5 20 1
+-30 9 4 29 1
+-31 9 4 20 1
+-32 8 3 30 31
+-33 7 2 28 32
+-34 2 1 4 33
+-35 1 0 1 34
+-.end
+diff --git a/Cudd/dddmp/exp/4.bdd.bis4 b/Cudd/dddmp/exp/4.bdd.bis4
+deleted file mode 100644
+index 220059d..0000000
+--- a/Cudd/dddmp/exp/4.bdd.bis4
++++ /dev/null
+@@ -1,50 +0,0 @@
+-.ver DDDMP-2.0
+-.mode A
+-.varinfo 0
+-.nnodes 35
+-.nvars 150
+-.nsuppvars 15
+-.suppvarnames V3 V8 V23 V24 V37 V39 DUMMY21 DUMMY22 DUMMY23 DUMMY36 DUMMY37 DUMMY38 DUMMY47 DUMMY48 DUMMY49
+-.orderedvarnames V2 V3 V8 V9 V10 V12 V22 V23 V24 V37 V38 V39 V48 V49 V50 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22 DUMMY23 DUMMY24 DUMMY25 DUMMY26 DUMMY27 DUMMY28 DUMMY29 DUMMY30 DUMMY31 DUMMY32 DUMMY33 DUMMY34 DUMMY35 DUMMY36 DUMMY37 DUMMY38 DUMMY39 DUMMY40 DUMMY41 DUMMY42 DUMMY43 DUMMY44 DUMMY45 DUMMY46 DUMMY47 DUMMY48 DUMMY49 DUMMY50 DUMMY51 DUMMY52 DUMMY53 DUMMY54 DUMMY55 DUMMY56 DUMMY57 DUMMY58 DUMMY59 DUMMY60 DUMMY61 DUMMY62 DUMMY63 DUMMY64 DUMMY65 DUMMY66 DUMMY67 DUMMY68 DUMMY69 DUMMY70 DUMMY71 DUMMY72 DUMMY73 DUMMY74 DUMMY75 DUMMY76 DUMMY77 DUMMY78 DUMMY79 DUMMY80 DUMMY81 DUMMY82 DUMMY83 DUMMY84 DUMMY85 DUMMY86 DUMMY87 DUMMY88 DUMMY89 DUMMY90 DUMMY91 DUMMY92 DUMMY93 DUMMY94 DUMMY95 DUMMY96 DUMMY97 DUMMY98 DUMMY99 DUMMY100 DUMMY101 DUMMY102 DUMMY103 DUMMY104 DUMMY105 DUMMY106 DUMMY107 DUMMY108 DUMMY109 DUMMY110 DUMMY111 DUMMY112 DUMMY113 DUMMY114 DUMMY115 DUMMY116 DUMMY117 DUMMY118 DUMMY119 DUMMY120 DUMMY121 DUMMY122 DUMMY123 DUMMY124 DUMMY125 DUMMY126 DUMMY127 DUMMY128 DUMMY129 DUMMY130 DUMMY131 DUMMY132 DUMMY133 DUMMY134 DUMMY135 DUMMY136 DUMMY137 DUMMY138 DUMMY139 DUMMY140 DUMMY141 DUMMY142 DUMMY143 DUMMY144 DUMMY145 DUMMY146 DUMMY147 DUMMY148 DUMMY149
+-.ids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.permids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.auxids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.nroots 1
+-.rootids -35
+-.nodes
+-1 T 1 0 0
+-2 49 14 1 -1
+-3 48 13 1 2
+-4 47 12 3 1
+-5 47 12 1 -1
+-6 47 12 2 1
+-7 38 11 5 -6
+-8 48 13 1 -1
+-9 47 12 8 1
+-10 38 11 9 4
+-11 37 10 7 -10
+-12 36 9 1 -11
+-13 37 10 5 -9
+-14 36 9 1 -13
+-15 23 8 12 14
+-16 36 9 1 -7
+-17 36 9 1 -5
+-18 23 8 16 17
+-19 22 7 15 18
+-20 21 6 19 1
+-21 22 7 14 17
+-22 21 6 21 1
+-23 11 5 20 22
+-24 9 4 23 1
+-25 21 6 18 1
+-26 11 5 20 25
+-27 9 4 26 1
+-28 8 3 24 27
+-29 11 5 20 1
+-30 9 4 29 1
+-31 9 4 20 1
+-32 8 3 30 31
+-33 7 2 28 32
+-34 2 1 4 33
+-35 1 0 1 34
+-.end
+diff --git a/Cudd/dddmp/exp/4.cnf b/Cudd/dddmp/exp/4.cnf
+deleted file mode 100644
+index d1a946c..0000000
+--- a/Cudd/dddmp/exp/4.cnf
++++ /dev/null
+@@ -1,130 +0,0 @@
+-c # BDD stored by the DDDMP tool in CNF format
+-c #
+-c # Warning: AUX IDs missing ... equal to BDD IDs.
+-c #
+-c .ver DDDMP-2.0
+-c .nnodes 35
+-c .nvars 50
+-c .nsuppvars 15
+-c .suppvarnames V2 V3 V8 V9 V10 V12 V22 V23 V24 V37 V38 V39 V48 V49 V50
+-c .orderedvarnames V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21 V22 V23 V24 V25 V26 V27 V28 V29 V30 V31 V32 V33 V34 V35 V36 V37 V38 V39 V40 V41 V42 V43 V44 V45 V46 V47 V48 V49 V50
+-c .ids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-c .permids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-c .auxids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-c .cnfids 2 3 8 9 10 12 22 23 24 37 38 39 48 49 50
+-c .nroots 1
+-c .rootids 1
+-c .nAddedCnfVar 31
+-c #
+-c # Init CNF Clauses
+-c #
+-p cnf 130 108
+-100 -49 0
+-100 -50 0
+--100 49 50 0
+-101 48 0
+-101 -100 0
+--101 -48 100 0
+-102 48 0
+-102 -50 0
+--102 -48 50 0
+-103 39 102 0
+--103 39 -102 0
+-103 -39 -48 0
+--103 -39 48 0
+-104 48 0
+-104 -49 0
+--104 -48 49 0
+-105 39 -101 0
+--105 39 101 0
+-105 -39 -104 0
+--105 -39 104 0
+-106 38 105 0
+--106 38 -105 0
+-106 -38 -103 0
+--106 -38 103 0
+-107 -37 0
+-107 106 0
+--107 37 -106 0
+-108 38 104 0
+--108 38 -104 0
+-108 -38 -48 0
+--108 -38 48 0
+-109 -37 0
+-109 108 0
+--109 37 -108 0
+-110 24 -109 0
+--110 24 109 0
+-110 -24 -107 0
+--110 -24 107 0
+-111 -37 0
+-111 103 0
+--111 37 -103 0
+-112 -37 0
+-112 48 0
+--112 37 -48 0
+-113 24 -112 0
+--113 24 112 0
+-113 -24 -111 0
+--113 -24 111 0
+-114 23 -113 0
+--114 23 113 0
+-114 -23 -110 0
+--114 -23 110 0
+-115 22 0
+-115 -114 0
+--115 -22 114 0
+-116 23 -112 0
+--116 23 112 0
+-116 -23 -109 0
+--116 -23 109 0
+-117 22 0
+-117 -116 0
+--117 -22 116 0
+-118 12 -117 0
+--118 12 117 0
+-118 -12 -115 0
+--118 -12 115 0
+-119 10 0
+-119 -118 0
+--119 -10 118 0
+-120 22 0
+-120 -113 0
+--120 -22 113 0
+-121 12 -120 0
+--121 12 120 0
+-121 -12 -115 0
+--121 -12 115 0
+-122 10 0
+-122 -121 0
+--122 -10 121 0
+-123 9 -122 0
+--123 9 122 0
+-123 -9 -119 0
+--123 -9 119 0
+-124 12 0
+-124 -115 0
+--124 -12 115 0
+-125 10 0
+-125 -124 0
+--125 -10 124 0
+-126 10 0
+-126 -115 0
+--126 -10 115 0
+-127 9 -126 0
+--127 9 126 0
+-127 -9 -125 0
+--127 -9 125 0
+-128 8 -127 0
+--128 8 127 0
+-128 -8 -123 0
+--128 -8 123 0
+-129 3 -128 0
+--129 3 128 0
+-129 -3 -101 0
+--129 -3 101 0
+-130 -2 0
+-130 -129 0
+--130 2 129 0
+--130 0
+-c # End of Cnf From dddmp-2.0
+diff --git a/Cudd/dddmp/exp/4.cnf.bis b/Cudd/dddmp/exp/4.cnf.bis
+deleted file mode 100644
+index d4faf78..0000000
+--- a/Cudd/dddmp/exp/4.cnf.bis
++++ /dev/null
+@@ -1,130 +0,0 @@
+-c # BDD stored by the DDDMP tool in CNF format
+-c #
+-c # Warning: AUX IDs missing ... equal to BDD IDs.
+-c #
+-c .ver DDDMP-2.0
+-c .nnodes 35
+-c .nvars 150
+-c .nsuppvars 15
+-c .suppvarnames V3 V8 V23 V24 V37 V39 DUMMY21 DUMMY22 DUMMY23 DUMMY36 DUMMY37 DUMMY38 DUMMY47 DUMMY48 DUMMY49
+-c .orderedvarnames V2 V3 V8 V9 V10 V12 V22 V23 V24 V37 V38 V39 V48 V49 V50 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22 DUMMY23 DUMMY24 DUMMY25 DUMMY26 DUMMY27 DUMMY28 DUMMY29 DUMMY30 DUMMY31 DUMMY32 DUMMY33 DUMMY34 DUMMY35 DUMMY36 DUMMY37 DUMMY38 DUMMY39 DUMMY40 DUMMY41 DUMMY42 DUMMY43 DUMMY44 DUMMY45 DUMMY46 DUMMY47 DUMMY48 DUMMY49 DUMMY50 DUMMY51 DUMMY52 DUMMY53 DUMMY54 DUMMY55 DUMMY56 DUMMY57 DUMMY58 DUMMY59 DUMMY60 DUMMY61 DUMMY62 DUMMY63 DUMMY64 DUMMY65 DUMMY66 DUMMY67 DUMMY68 DUMMY69 DUMMY70 DUMMY71 DUMMY72 DUMMY73 DUMMY74 DUMMY75 DUMMY76 DUMMY77 DUMMY78 DUMMY79 DUMMY80 DUMMY81 DUMMY82 DUMMY83 DUMMY84 DUMMY85 DUMMY86 DUMMY87 DUMMY88 DUMMY89 DUMMY90 DUMMY91 DUMMY92 DUMMY93 DUMMY94 DUMMY95 DUMMY96 DUMMY97 DUMMY98 DUMMY99 DUMMY100 DUMMY101 DUMMY102 DUMMY103 DUMMY104 DUMMY105 DUMMY106 DUMMY107 DUMMY108 DUMMY109 DUMMY110 DUMMY111 DUMMY112 DUMMY113 DUMMY114 DUMMY115 DUMMY116 DUMMY117 DUMMY118 DUMMY119 DUMMY120 DUMMY121 DUMMY122 DUMMY123 DUMMY124 DUMMY125 DUMMY126 DUMMY127 DUMMY128 DUMMY129 DUMMY130 DUMMY131 DUMMY132 DUMMY133 DUMMY134 DUMMY135 DUMMY136 DUMMY137 DUMMY138 DUMMY139 DUMMY140 DUMMY141 DUMMY142 DUMMY143 DUMMY144 DUMMY145 DUMMY146 DUMMY147 DUMMY148 DUMMY149
+-c .ids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-c .permids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-c .auxids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-c .cnfids 2 3 8 9 10 12 22 23 24 37 38 39 48 49 50
+-c .nroots 1
+-c .rootids 1
+-c .nAddedCnfVar 31
+-c #
+-c # Init CNF Clauses
+-c #
+-p cnf 130 108
+-100 -49 0
+-100 -50 0
+--100 49 50 0
+-101 48 0
+-101 -100 0
+--101 -48 100 0
+-102 48 0
+-102 -50 0
+--102 -48 50 0
+-103 39 102 0
+--103 39 -102 0
+-103 -39 -48 0
+--103 -39 48 0
+-104 48 0
+-104 -49 0
+--104 -48 49 0
+-105 39 -101 0
+--105 39 101 0
+-105 -39 -104 0
+--105 -39 104 0
+-106 38 105 0
+--106 38 -105 0
+-106 -38 -103 0
+--106 -38 103 0
+-107 -37 0
+-107 106 0
+--107 37 -106 0
+-108 38 104 0
+--108 38 -104 0
+-108 -38 -48 0
+--108 -38 48 0
+-109 -37 0
+-109 108 0
+--109 37 -108 0
+-110 24 -109 0
+--110 24 109 0
+-110 -24 -107 0
+--110 -24 107 0
+-111 -37 0
+-111 103 0
+--111 37 -103 0
+-112 -37 0
+-112 48 0
+--112 37 -48 0
+-113 24 -112 0
+--113 24 112 0
+-113 -24 -111 0
+--113 -24 111 0
+-114 23 -113 0
+--114 23 113 0
+-114 -23 -110 0
+--114 -23 110 0
+-115 22 0
+-115 -114 0
+--115 -22 114 0
+-116 23 -112 0
+--116 23 112 0
+-116 -23 -109 0
+--116 -23 109 0
+-117 22 0
+-117 -116 0
+--117 -22 116 0
+-118 12 -117 0
+--118 12 117 0
+-118 -12 -115 0
+--118 -12 115 0
+-119 10 0
+-119 -118 0
+--119 -10 118 0
+-120 22 0
+-120 -113 0
+--120 -22 113 0
+-121 12 -120 0
+--121 12 120 0
+-121 -12 -115 0
+--121 -12 115 0
+-122 10 0
+-122 -121 0
+--122 -10 121 0
+-123 9 -122 0
+--123 9 122 0
+-123 -9 -119 0
+--123 -9 119 0
+-124 12 0
+-124 -115 0
+--124 -12 115 0
+-125 10 0
+-125 -124 0
+--125 -10 124 0
+-126 10 0
+-126 -115 0
+--126 -10 115 0
+-127 9 -126 0
+--127 9 126 0
+-127 -9 -125 0
+--127 -9 125 0
+-128 8 -127 0
+--128 8 127 0
+-128 -8 -123 0
+--128 -8 123 0
+-129 3 -128 0
+--129 3 128 0
+-129 -3 -101 0
+--129 -3 101 0
+-130 -2 0
+-130 -129 0
+--130 2 129 0
+--130 0
+-c # End of Cnf From dddmp-2.0
+diff --git a/Cudd/dddmp/exp/4.max1 b/Cudd/dddmp/exp/4.max1
+deleted file mode 100644
+index d9a4984..0000000
+--- a/Cudd/dddmp/exp/4.max1
++++ /dev/null
+@@ -1,125 +0,0 @@
+-c # BDD stored by the DDDMP tool in CNF format
+-c #
+-c # Warning: AUX IDs missing ... equal to BDD IDs.
+-c #
+-c .ver DDDMP-2.0
+-c .nnodes 35
+-c .nvars 150
+-c .nsuppvars 15
+-c .suppvarnames V3 V8 V23 V24 V37 V39 DUMMY21 DUMMY22 DUMMY23 DUMMY36 DUMMY37 DUMMY38 DUMMY47 DUMMY48 DUMMY49
+-c .orderedvarnames V2 V3 V8 V9 V10 V12 V22 V23 V24 V37 V38 V39 V48 V49 V50 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22 DUMMY23 DUMMY24 DUMMY25 DUMMY26 DUMMY27 DUMMY28 DUMMY29 DUMMY30 DUMMY31 DUMMY32 DUMMY33 DUMMY34 DUMMY35 DUMMY36 DUMMY37 DUMMY38 DUMMY39 DUMMY40 DUMMY41 DUMMY42 DUMMY43 DUMMY44 DUMMY45 DUMMY46 DUMMY47 DUMMY48 DUMMY49 DUMMY50 DUMMY51 DUMMY52 DUMMY53 DUMMY54 DUMMY55 DUMMY56 DUMMY57 DUMMY58 DUMMY59 DUMMY60 DUMMY61 DUMMY62 DUMMY63 DUMMY64 DUMMY65 DUMMY66 DUMMY67 DUMMY68 DUMMY69 DUMMY70 DUMMY71 DUMMY72 DUMMY73 DUMMY74 DUMMY75 DUMMY76 DUMMY77 DUMMY78 DUMMY79 DUMMY80 DUMMY81 DUMMY82 DUMMY83 DUMMY84 DUMMY85 DUMMY86 DUMMY87 DUMMY88 DUMMY89 DUMMY90 DUMMY91 DUMMY92 DUMMY93 DUMMY94 DUMMY95 DUMMY96 DUMMY97 DUMMY98 DUMMY99 DUMMY100 DUMMY101 DUMMY102 DUMMY103 DUMMY104 DUMMY105 DUMMY106 DUMMY107 DUMMY108 DUMMY109 DUMMY110 DUMMY111 DUMMY112 DUMMY113 DUMMY114 DUMMY115 DUMMY116 DUMMY117 DUMMY118 DUMMY119 DUMMY120 DUMMY121 DUMMY122 DUMMY123 DUMMY124 DUMMY125 DUMMY126 DUMMY127 DUMMY128 DUMMY129 DUMMY130 DUMMY131 DUMMY132 DUMMY133 DUMMY134 DUMMY135 DUMMY136 DUMMY137 DUMMY138 DUMMY139 DUMMY140 DUMMY141 DUMMY142 DUMMY143 DUMMY144 DUMMY145 DUMMY146 DUMMY147 DUMMY148 DUMMY149
+-c .ids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-c .permids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-c .auxids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-c .cnfids 2 3 8 9 10 12 22 23 24 37 38 39 48 49 50
+-c .nroots 1
+-c .rootids 1
+-c .nAddedCnfVar 0
+-c #
+-c # Init CNF Clauses
+-c #
+-p cnf 50 103
+-3 8 9 10 0
+-3 8 9 22 0
+-3 8 9 23 24 48 0
+-3 8 9 23 24 -37 0
+-3 8 9 23 -24 39 48 0
+-3 8 9 23 -24 39 -50 0
+-3 8 9 23 -24 -39 48 0
+-3 8 9 23 -24 -37 0
+-3 8 9 -23 24 38 48 0
+-3 8 9 -23 24 38 -49 0
+-3 8 9 -23 24 -38 48 0
+-3 8 9 -23 24 -37 0
+-3 8 9 -23 -24 38 39 48 0
+-3 8 9 -23 -24 38 39 -50 0
+-3 8 9 -23 -24 38 39 -49 0
+-3 8 9 -23 -24 38 -39 48 0
+-3 8 9 -23 -24 38 -39 -49 0
+-3 8 9 -23 -24 -38 39 48 0
+-3 8 9 -23 -24 -38 39 -50 0
+-3 8 9 -23 -24 -38 -39 48 0
+-3 8 9 -23 -24 -37 0
+-3 8 -9 10 0
+-3 8 -9 12 0
+-3 8 -9 22 0
+-3 8 -9 23 24 48 0
+-3 8 -9 23 24 -37 0
+-3 8 -9 23 -24 39 48 0
+-3 8 -9 23 -24 39 -50 0
+-3 8 -9 23 -24 -39 48 0
+-3 8 -9 23 -24 -37 0
+-3 8 -9 -23 24 38 48 0
+-3 8 -9 -23 24 38 -49 0
+-3 8 -9 -23 24 -38 48 0
+-3 8 -9 -23 24 -37 0
+-3 8 -9 -23 -24 38 39 48 0
+-3 8 -9 -23 -24 38 39 -50 0
+-3 8 -9 -23 -24 38 39 -49 0
+-3 8 -9 -23 -24 38 -39 48 0
+-3 8 -9 -23 -24 38 -39 -49 0
+-3 8 -9 -23 -24 -38 39 48 0
+-3 8 -9 -23 -24 -38 39 -50 0
+-3 8 -9 -23 -24 -38 -39 48 0
+-3 8 -9 -23 -24 -37 0
+-3 -8 9 10 0
+-3 -8 9 12 22 0
+-3 -8 9 12 24 48 0
+-3 -8 9 12 24 -37 0
+-3 -8 9 12 -24 39 48 0
+-3 -8 9 12 -24 39 -50 0
+-3 -8 9 12 -24 -39 48 0
+-3 -8 9 12 -24 -37 0
+-3 -8 9 -12 22 0
+-3 -8 9 -12 23 24 48 0
+-3 -8 9 -12 23 24 -37 0
+-3 -8 9 -12 23 -24 39 48 0
+-3 -8 9 -12 23 -24 39 -50 0
+-3 -8 9 -12 23 -24 -39 48 0
+-3 -8 9 -12 23 -24 -37 0
+-3 -8 9 -12 -23 24 38 48 0
+-3 -8 9 -12 -23 24 38 -49 0
+-3 -8 9 -12 -23 24 -38 48 0
+-3 -8 9 -12 -23 24 -37 0
+-3 -8 9 -12 -23 -24 38 39 48 0
+-3 -8 9 -12 -23 -24 38 39 -50 0
+-3 -8 9 -12 -23 -24 38 39 -49 0
+-3 -8 9 -12 -23 -24 38 -39 48 0
+-3 -8 9 -12 -23 -24 38 -39 -49 0
+-3 -8 9 -12 -23 -24 -38 39 48 0
+-3 -8 9 -12 -23 -24 -38 39 -50 0
+-3 -8 9 -12 -23 -24 -38 -39 48 0
+-3 -8 9 -12 -23 -24 -37 0
+-3 -8 -9 10 0
+-3 -8 -9 12 22 0
+-3 -8 -9 12 23 48 0
+-3 -8 -9 12 23 -37 0
+-3 -8 -9 12 -23 38 48 0
+-3 -8 -9 12 -23 38 -49 0
+-3 -8 -9 12 -23 -38 48 0
+-3 -8 -9 12 -23 -37 0
+-3 -8 -9 -12 22 0
+-3 -8 -9 -12 23 24 48 0
+-3 -8 -9 -12 23 24 -37 0
+-3 -8 -9 -12 23 -24 39 48 0
+-3 -8 -9 -12 23 -24 39 -50 0
+-3 -8 -9 -12 23 -24 -39 48 0
+-3 -8 -9 -12 23 -24 -37 0
+-3 -8 -9 -12 -23 24 38 48 0
+-3 -8 -9 -12 -23 24 38 -49 0
+-3 -8 -9 -12 -23 24 -38 48 0
+-3 -8 -9 -12 -23 24 -37 0
+-3 -8 -9 -12 -23 -24 38 39 48 0
+-3 -8 -9 -12 -23 -24 38 39 -50 0
+-3 -8 -9 -12 -23 -24 38 39 -49 0
+-3 -8 -9 -12 -23 -24 38 -39 48 0
+-3 -8 -9 -12 -23 -24 38 -39 -49 0
+-3 -8 -9 -12 -23 -24 -38 39 48 0
+-3 -8 -9 -12 -23 -24 -38 39 -50 0
+-3 -8 -9 -12 -23 -24 -38 -39 48 0
+-3 -8 -9 -12 -23 -24 -37 0
+--3 48 0
+--3 -50 0
+--3 -49 0
+--2 0
+-c # End of Cnf From dddmp-2.0
+diff --git a/Cudd/dddmp/exp/4.max2 b/Cudd/dddmp/exp/4.max2
+deleted file mode 100644
+index d9a4984..0000000
+--- a/Cudd/dddmp/exp/4.max2
++++ /dev/null
+@@ -1,125 +0,0 @@
+-c # BDD stored by the DDDMP tool in CNF format
+-c #
+-c # Warning: AUX IDs missing ... equal to BDD IDs.
+-c #
+-c .ver DDDMP-2.0
+-c .nnodes 35
+-c .nvars 150
+-c .nsuppvars 15
+-c .suppvarnames V3 V8 V23 V24 V37 V39 DUMMY21 DUMMY22 DUMMY23 DUMMY36 DUMMY37 DUMMY38 DUMMY47 DUMMY48 DUMMY49
+-c .orderedvarnames V2 V3 V8 V9 V10 V12 V22 V23 V24 V37 V38 V39 V48 V49 V50 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22 DUMMY23 DUMMY24 DUMMY25 DUMMY26 DUMMY27 DUMMY28 DUMMY29 DUMMY30 DUMMY31 DUMMY32 DUMMY33 DUMMY34 DUMMY35 DUMMY36 DUMMY37 DUMMY38 DUMMY39 DUMMY40 DUMMY41 DUMMY42 DUMMY43 DUMMY44 DUMMY45 DUMMY46 DUMMY47 DUMMY48 DUMMY49 DUMMY50 DUMMY51 DUMMY52 DUMMY53 DUMMY54 DUMMY55 DUMMY56 DUMMY57 DUMMY58 DUMMY59 DUMMY60 DUMMY61 DUMMY62 DUMMY63 DUMMY64 DUMMY65 DUMMY66 DUMMY67 DUMMY68 DUMMY69 DUMMY70 DUMMY71 DUMMY72 DUMMY73 DUMMY74 DUMMY75 DUMMY76 DUMMY77 DUMMY78 DUMMY79 DUMMY80 DUMMY81 DUMMY82 DUMMY83 DUMMY84 DUMMY85 DUMMY86 DUMMY87 DUMMY88 DUMMY89 DUMMY90 DUMMY91 DUMMY92 DUMMY93 DUMMY94 DUMMY95 DUMMY96 DUMMY97 DUMMY98 DUMMY99 DUMMY100 DUMMY101 DUMMY102 DUMMY103 DUMMY104 DUMMY105 DUMMY106 DUMMY107 DUMMY108 DUMMY109 DUMMY110 DUMMY111 DUMMY112 DUMMY113 DUMMY114 DUMMY115 DUMMY116 DUMMY117 DUMMY118 DUMMY119 DUMMY120 DUMMY121 DUMMY122 DUMMY123 DUMMY124 DUMMY125 DUMMY126 DUMMY127 DUMMY128 DUMMY129 DUMMY130 DUMMY131 DUMMY132 DUMMY133 DUMMY134 DUMMY135 DUMMY136 DUMMY137 DUMMY138 DUMMY139 DUMMY140 DUMMY141 DUMMY142 DUMMY143 DUMMY144 DUMMY145 DUMMY146 DUMMY147 DUMMY148 DUMMY149
+-c .ids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-c .permids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-c .auxids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-c .cnfids 2 3 8 9 10 12 22 23 24 37 38 39 48 49 50
+-c .nroots 1
+-c .rootids 1
+-c .nAddedCnfVar 0
+-c #
+-c # Init CNF Clauses
+-c #
+-p cnf 50 103
+-3 8 9 10 0
+-3 8 9 22 0
+-3 8 9 23 24 48 0
+-3 8 9 23 24 -37 0
+-3 8 9 23 -24 39 48 0
+-3 8 9 23 -24 39 -50 0
+-3 8 9 23 -24 -39 48 0
+-3 8 9 23 -24 -37 0
+-3 8 9 -23 24 38 48 0
+-3 8 9 -23 24 38 -49 0
+-3 8 9 -23 24 -38 48 0
+-3 8 9 -23 24 -37 0
+-3 8 9 -23 -24 38 39 48 0
+-3 8 9 -23 -24 38 39 -50 0
+-3 8 9 -23 -24 38 39 -49 0
+-3 8 9 -23 -24 38 -39 48 0
+-3 8 9 -23 -24 38 -39 -49 0
+-3 8 9 -23 -24 -38 39 48 0
+-3 8 9 -23 -24 -38 39 -50 0
+-3 8 9 -23 -24 -38 -39 48 0
+-3 8 9 -23 -24 -37 0
+-3 8 -9 10 0
+-3 8 -9 12 0
+-3 8 -9 22 0
+-3 8 -9 23 24 48 0
+-3 8 -9 23 24 -37 0
+-3 8 -9 23 -24 39 48 0
+-3 8 -9 23 -24 39 -50 0
+-3 8 -9 23 -24 -39 48 0
+-3 8 -9 23 -24 -37 0
+-3 8 -9 -23 24 38 48 0
+-3 8 -9 -23 24 38 -49 0
+-3 8 -9 -23 24 -38 48 0
+-3 8 -9 -23 24 -37 0
+-3 8 -9 -23 -24 38 39 48 0
+-3 8 -9 -23 -24 38 39 -50 0
+-3 8 -9 -23 -24 38 39 -49 0
+-3 8 -9 -23 -24 38 -39 48 0
+-3 8 -9 -23 -24 38 -39 -49 0
+-3 8 -9 -23 -24 -38 39 48 0
+-3 8 -9 -23 -24 -38 39 -50 0
+-3 8 -9 -23 -24 -38 -39 48 0
+-3 8 -9 -23 -24 -37 0
+-3 -8 9 10 0
+-3 -8 9 12 22 0
+-3 -8 9 12 24 48 0
+-3 -8 9 12 24 -37 0
+-3 -8 9 12 -24 39 48 0
+-3 -8 9 12 -24 39 -50 0
+-3 -8 9 12 -24 -39 48 0
+-3 -8 9 12 -24 -37 0
+-3 -8 9 -12 22 0
+-3 -8 9 -12 23 24 48 0
+-3 -8 9 -12 23 24 -37 0
+-3 -8 9 -12 23 -24 39 48 0
+-3 -8 9 -12 23 -24 39 -50 0
+-3 -8 9 -12 23 -24 -39 48 0
+-3 -8 9 -12 23 -24 -37 0
+-3 -8 9 -12 -23 24 38 48 0
+-3 -8 9 -12 -23 24 38 -49 0
+-3 -8 9 -12 -23 24 -38 48 0
+-3 -8 9 -12 -23 24 -37 0
+-3 -8 9 -12 -23 -24 38 39 48 0
+-3 -8 9 -12 -23 -24 38 39 -50 0
+-3 -8 9 -12 -23 -24 38 39 -49 0
+-3 -8 9 -12 -23 -24 38 -39 48 0
+-3 -8 9 -12 -23 -24 38 -39 -49 0
+-3 -8 9 -12 -23 -24 -38 39 48 0
+-3 -8 9 -12 -23 -24 -38 39 -50 0
+-3 -8 9 -12 -23 -24 -38 -39 48 0
+-3 -8 9 -12 -23 -24 -37 0
+-3 -8 -9 10 0
+-3 -8 -9 12 22 0
+-3 -8 -9 12 23 48 0
+-3 -8 -9 12 23 -37 0
+-3 -8 -9 12 -23 38 48 0
+-3 -8 -9 12 -23 38 -49 0
+-3 -8 -9 12 -23 -38 48 0
+-3 -8 -9 12 -23 -37 0
+-3 -8 -9 -12 22 0
+-3 -8 -9 -12 23 24 48 0
+-3 -8 -9 -12 23 24 -37 0
+-3 -8 -9 -12 23 -24 39 48 0
+-3 -8 -9 -12 23 -24 39 -50 0
+-3 -8 -9 -12 23 -24 -39 48 0
+-3 -8 -9 -12 23 -24 -37 0
+-3 -8 -9 -12 -23 24 38 48 0
+-3 -8 -9 -12 -23 24 38 -49 0
+-3 -8 -9 -12 -23 24 -38 48 0
+-3 -8 -9 -12 -23 24 -37 0
+-3 -8 -9 -12 -23 -24 38 39 48 0
+-3 -8 -9 -12 -23 -24 38 39 -50 0
+-3 -8 -9 -12 -23 -24 38 39 -49 0
+-3 -8 -9 -12 -23 -24 38 -39 48 0
+-3 -8 -9 -12 -23 -24 38 -39 -49 0
+-3 -8 -9 -12 -23 -24 -38 39 48 0
+-3 -8 -9 -12 -23 -24 -38 39 -50 0
+-3 -8 -9 -12 -23 -24 -38 -39 48 0
+-3 -8 -9 -12 -23 -24 -37 0
+--3 48 0
+--3 -50 0
+--3 -49 0
+--2 0
+-c # End of Cnf From dddmp-2.0
+diff --git a/Cudd/dddmp/exp/4bis.bdd b/Cudd/dddmp/exp/4bis.bdd
+deleted file mode 100644
+index fc242f3..0000000
+--- a/Cudd/dddmp/exp/4bis.bdd
++++ /dev/null
+@@ -1,47 +0,0 @@
+-.ver DDDMP-2.0
+-.mode A
+-.varinfo 3
+-.nnodes 35
+-.nvars 50
+-.nsuppvars 15
+-.ids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.permids 1 2 7 8 9 11 21 22 23 36 37 38 47 48 49
+-.nroots 1
+-.rootids -35
+-.nodes
+-1 1 0 0
+-2 14 1 -1
+-3 13 1 2
+-4 12 3 1
+-5 12 1 -1
+-6 12 2 1
+-7 11 5 -6
+-8 13 1 -1
+-9 12 8 1
+-10 11 9 4
+-11 10 7 -10
+-12 9 1 -11
+-13 10 5 -9
+-14 9 1 -13
+-15 8 12 14
+-16 9 1 -7
+-17 9 1 -5
+-18 8 16 17
+-19 7 15 18
+-20 6 19 1
+-21 7 14 17
+-22 6 21 1
+-23 5 20 22
+-24 4 23 1
+-25 6 18 1
+-26 5 20 25
+-27 4 26 1
+-28 3 24 27
+-29 5 20 1
+-30 4 29 1
+-31 4 20 1
+-32 3 30 31
+-33 2 28 32
+-34 1 4 33
+-35 0 1 34
+-.end
+diff --git a/Cudd/dddmp/exp/4xor5.bdd b/Cudd/dddmp/exp/4xor5.bdd
+deleted file mode 100644
+index 9967a67..0000000
+--- a/Cudd/dddmp/exp/4xor5.bdd
++++ /dev/null
+@@ -1,120 +0,0 @@
+-.ver DDDMP-2.0
+-.mode A
+-.varinfo 0
+-.nnodes 105
+-.nvars 50
+-.nsuppvars 18
+-.suppvarnames DUMMY1 DUMMY2 DUMMY7 DUMMY8 DUMMY9 DUMMY11 DUMMY19 DUMMY20 DUMMY21 DUMMY22 DUMMY23 DUMMY24 DUMMY36 DUMMY37 DUMMY38 DUMMY47 DUMMY48 DUMMY49
+-.orderedvarnames DUMMY0 DUMMY1 DUMMY2 DUMMY3 DUMMY4 DUMMY5 DUMMY6 DUMMY7 DUMMY8 DUMMY9 DUMMY10 DUMMY11 DUMMY12 DUMMY13 DUMMY14 DUMMY15 DUMMY16 DUMMY17 DUMMY18 DUMMY19 DUMMY20 DUMMY21 DUMMY22 DUMMY23 DUMMY24 DUMMY25 DUMMY26 DUMMY27 DUMMY28 DUMMY29 DUMMY30 DUMMY31 DUMMY32 DUMMY33 DUMMY34 DUMMY35 DUMMY36 DUMMY37 DUMMY38 DUMMY39 DUMMY40 DUMMY41 DUMMY42 DUMMY43 DUMMY44 DUMMY45 DUMMY46 DUMMY47 DUMMY48 DUMMY49
+-.ids 1 2 7 8 9 11 19 20 21 22 23 24 36 37 38 47 48 49
+-.permids 1 2 7 8 9 11 19 20 21 22 23 24 36 37 38 47 48 49
+-.auxids 1 2 7 8 9 11 19 20 21 22 23 24 36 37 38 47 48 49
+-.nroots 1
+-.rootids 105
+-.nodes
+-1 T 1 0 0
+-2 24 11 1 -1
+-3 23 10 1 -2
+-4 22 9 3 -2
+-5 21 8 4 -2
+-6 23 10 1 -1
+-7 22 9 6 -1
+-8 21 8 7 -1
+-9 20 7 5 8
+-10 23 10 2 -1
+-11 22 9 2 10
+-12 21 8 11 2
+-13 23 10 2 -2
+-14 22 9 3 -13
+-15 21 8 4 14
+-16 20 7 12 15
+-17 19 6 9 -16
+-18 49 17 1 -1
+-19 48 16 1 18
+-20 47 15 19 1
+-21 24 11 20 -20
+-22 23 10 20 -21
+-23 22 9 22 -21
+-24 21 8 23 -21
+-25 23 10 20 -20
+-26 22 9 25 -20
+-27 21 8 26 -20
+-28 20 7 24 27
+-29 23 10 21 -20
+-30 22 9 21 29
+-31 21 8 30 21
+-32 23 10 21 -21
+-33 22 9 22 -32
+-34 21 8 23 33
+-35 20 7 31 34
+-36 19 6 28 -35
+-37 47 15 1 -1
+-38 47 15 18 1
+-39 38 14 37 -38
+-40 48 16 1 -1
+-41 47 15 40 1
+-42 38 14 41 20
+-43 37 13 39 -42
+-44 36 12 1 -43
+-45 37 13 37 -41
+-46 36 12 1 -45
+-47 24 11 46 -46
+-48 23 10 44 -47
+-49 36 12 1 -39
+-50 24 11 49 -49
+-51 36 12 1 -37
+-52 24 11 51 -51
+-53 23 10 50 52
+-54 22 9 48 -53
+-55 21 8 54 -2
+-56 23 10 44 -46
+-57 23 10 49 51
+-58 22 9 56 -57
+-59 21 8 58 -1
+-60 20 7 55 59
+-61 24 11 44 -44
+-62 23 10 61 47
+-63 23 10 50 -51
+-64 22 9 62 63
+-65 21 8 64 2
+-66 21 8 54 14
+-67 20 7 65 66
+-68 19 6 60 -67
+-69 23 10 46 -47
+-70 22 9 69 -52
+-71 21 8 70 -2
+-72 23 10 46 -46
+-73 22 9 72 -51
+-74 21 8 73 -1
+-75 20 7 71 74
+-76 23 10 52 -51
+-77 22 9 47 76
+-78 21 8 77 2
+-79 21 8 70 14
+-80 20 7 78 79
+-81 19 6 75 -80
+-82 11 5 68 81
+-83 9 4 82 17
+-84 23 10 49 -52
+-85 22 9 84 -53
+-86 21 8 85 -2
+-87 23 10 49 -51
+-88 22 9 87 -57
+-89 21 8 88 -1
+-90 20 7 86 89
+-91 22 9 53 63
+-92 21 8 91 2
+-93 21 8 85 14
+-94 20 7 92 93
+-95 19 6 90 -94
+-96 11 5 68 95
+-97 9 4 96 17
+-98 8 3 83 97
+-99 11 5 68 17
+-100 9 4 99 17
+-101 9 4 68 17
+-102 8 3 100 101
+-103 7 2 98 102
+-104 2 1 36 103
+-105 1 0 17 104
+-.end
+diff --git a/Cudd/dddmp/exp/5.bdd b/Cudd/dddmp/exp/5.bdd
+deleted file mode 100644
+index 198f6bf..0000000
+--- a/Cudd/dddmp/exp/5.bdd
++++ /dev/null
+@@ -1,31 +0,0 @@
+-.ver DDDMP-2.0
+-.mode A
+-.varinfo 0
+-.nnodes 17
+-.nvars 50
+-.nsuppvars 6
+-.suppvarnames DUMMY19 DUMMY20 DUMMY21 DUMMY22 DUMMY23 DUMMY24
+-.ids 19 20 21 22 23 24
+-.permids 19 20 21 22 23 24
+-.auxids 19 20 21 22 23 24
+-.nroots 1
+-.rootids 17
+-.nodes
+-1 T 1 0 0
+-2 24 5 1 -1
+-3 23 4 1 -2
+-4 22 3 3 -2
+-5 21 2 4 -2
+-6 23 4 1 -1
+-7 22 3 6 -1
+-8 21 2 7 -1
+-9 20 1 5 8
+-10 23 4 2 -1
+-11 22 3 2 10
+-12 21 2 11 2
+-13 23 4 2 -2
+-14 22 3 3 -13
+-15 21 2 4 14
+-16 20 1 12 15
+-17 19 0 9 -16
+-.end
+diff --git a/Cudd/dddmp/exp/composeids.txt b/Cudd/dddmp/exp/composeids.txt
+deleted file mode 100644
+index 0e1340f..0000000
+--- a/Cudd/dddmp/exp/composeids.txt
++++ /dev/null
+@@ -1,20 +0,0 @@
+-0
+-2
+-4
+-6
+-8
+-10
+-12
+-14
+-16
+-18
+-20
+-22
+-24
+-26
+-28
+-30
+-32
+-34
+-36
+-38
+diff --git a/Cudd/dddmp/exp/one.bdd b/Cudd/dddmp/exp/one.bdd
+deleted file mode 100644
+index 836566f..0000000
+--- a/Cudd/dddmp/exp/one.bdd
++++ /dev/null
+@@ -1,13 +0,0 @@
+-.ver DDDMP-1.0
+-.mode A
+-.varinfo 0
+-.nnodes 1
+-.nvars 100
+-.nsuppvars 0
+-.ids
+-.permids
+-.nroots 1
+-.rootids 1
+-.nodes
+-1 T 1 0 0
+-.end
+diff --git a/Cudd/dddmp/exp/runAllTest.script b/Cudd/dddmp/exp/runAllTest.script
+deleted file mode 100755
+index 8d792ef..0000000
+--- a/Cudd/dddmp/exp/runAllTest.script
++++ /dev/null
+@@ -1,11 +0,0 @@
+-# !/bin/sh
+-#
+-# Run All Test Files
+-#
+-./test1.script
+-./test2.script
+-./test3.script
+-./test4.script
+-./test5.script
+-./test6.script
+-./test7.script
+diff --git a/Cudd/dddmp/exp/s27RP1.bdd b/Cudd/dddmp/exp/s27RP1.bdd
+deleted file mode 100644
+index 5653260..0000000
+--- a/Cudd/dddmp/exp/s27RP1.bdd
++++ /dev/null
+@@ -1,18 +0,0 @@
+-# MONO
+-.ver DDDMP-1.0
+-.mode A
+-.varinfo 3
+-.nnodes 3
+-.nvars 10
+-.nsuppvars 2
+-.varnames G5 G6
+-.ids 4 5
+-.permids 4 6
+-.auxids 4 5
+-.nroots 1
+-.rootids -3
+-.nodes
+-1 T 1 0 0
+-2 5 1 1 -1
+-3 4 0 2 -1
+-.end
+diff --git a/Cudd/dddmp/exp/s27deltaDddmp1.bdd b/Cudd/dddmp/exp/s27deltaDddmp1.bdd
+deleted file mode 100644
+index 11a5956..0000000
+--- a/Cudd/dddmp/exp/s27deltaDddmp1.bdd
++++ /dev/null
+@@ -1,31 +0,0 @@
+-.ver DDDMP-1.0
+-.mode A
+-.varinfo 0
+-.dd s27adelta.bdd
+-.nnodes 16
+-.nvars 10
+-.nsuppvars 7
+-.varnames G0 G1 G2 G3 G5 G6 G7
+-.ids 0 1 2 3 4 5 6
+-.permids 0 1 2 3 4 6 8
+-.auxids 0 1 2 3 4 5 6
+-.nroots 3
+-.rootids 6 -13 -16
+-.nodes
+-1 T 1 0 0
+-2 6 6 1 -1
+-3 4 4 1 2
+-4 3 3 3 1
+-5 1 1 1 4
+-6 0 0 5 -1
+-7 5 5 1 -1
+-8 4 4 1 -7
+-9 5 5 1 -2
+-10 4 4 1 -9
+-11 3 3 10 8
+-12 1 1 8 11
+-13 0 0 5 12
+-14 2 2 1 -1
+-15 2 2 1 -2
+-16 1 1 14 15
+-.end
+diff --git a/Cudd/dddmp/exp/s27deltaDddmp1.bdd.bis b/Cudd/dddmp/exp/s27deltaDddmp1.bdd.bis
+deleted file mode 100644
+index b7fb86b..0000000
+--- a/Cudd/dddmp/exp/s27deltaDddmp1.bdd.bis
++++ /dev/null
+@@ -1,31 +0,0 @@
+-.ver DDDMP-2.0
+-.mode A
+-.varinfo 0
+-.nnodes 16
+-.nvars 10
+-.nsuppvars 7
+-.suppvarnames G0 G1 G2 G3 G5 G6 G7
+-.orderedvarnames G0 G1 G2 G3 G5 G6 G7 DUMMY7 DUMMY8 DUMMY9
+-.ids 0 1 2 3 4 5 6
+-.permids 0 1 2 3 4 5 6
+-.auxids 0 1 2 3 4 5 6
+-.nroots 3
+-.rootids 6 -13 -16
+-.nodes
+-1 T 1 0 0
+-2 6 6 1 -1
+-3 4 4 1 2
+-4 3 3 3 1
+-5 1 1 1 4
+-6 0 0 5 -1
+-7 5 5 1 -1
+-8 4 4 1 -7
+-9 5 5 1 -2
+-10 4 4 1 -9
+-11 3 3 10 8
+-12 1 1 8 11
+-13 0 0 5 12
+-14 2 2 1 -1
+-15 2 2 1 -2
+-16 1 1 14 15
+-.end
+diff --git a/Cudd/dddmp/exp/s27deltaDddmp2.bdd b/Cudd/dddmp/exp/s27deltaDddmp2.bdd
+deleted file mode 100644
+index d247bd1..0000000
+--- a/Cudd/dddmp/exp/s27deltaDddmp2.bdd
++++ /dev/null
+@@ -1,32 +0,0 @@
+-.ver DDDMP-1.0
+-.mode A
+-.varinfo 0
+-.dd s27adelta.bdd
+-.nnodes 16
+-.nvars 10
+-.nsuppvars 7
+-.orderedvarnames G0 G1 G2 G3 G5 G6 G7 TMP1 TMP2 TMP3
+-.suppvarnames G0 G1 G2 G3 G5 G6 G7
+-.ids 0 1 2 3 4 5 6
+-.permids 0 1 2 3 4 6 8
+-.auxids 0 1 2 3 4 5 6
+-.nroots 3
+-.rootids 6 -13 -16
+-.nodes
+-1 T 1 0 0
+-2 6 6 1 -1
+-3 4 4 1 2
+-4 3 3 3 1
+-5 1 1 1 4
+-6 0 0 5 -1
+-7 5 5 1 -1
+-8 4 4 1 -7
+-9 5 5 1 -2
+-10 4 4 1 -9
+-11 3 3 10 8
+-12 1 1 8 11
+-13 0 0 5 12
+-14 2 2 1 -1
+-15 2 2 1 -2
+-16 1 1 14 15
+-.end
+diff --git a/Cudd/dddmp/exp/test1.script b/Cudd/dddmp/exp/test1.script
+deleted file mode 100755
+index 843e365..0000000
+--- a/Cudd/dddmp/exp/test1.script
++++ /dev/null
+@@ -1,26 +0,0 @@
+-# !/bin/sh
+-#
+-# Check Header Load/Store for BDD/ADD/CNFs:
+-# Load Header
+-# Write Information on Standard Output
+-#
+-rm -f *.*.tmp
+-echo "---------------------------------------------------------------------------"
+-echo "--------------------- TESTING Load and Write Header -----------------------"
+-echo "---------------------------------------------------------------------------"
+-./../testdddmp << END
+-mi
+-50
+-hlb
+-4.bdd
+-hw
+-hlb
+-0.add
+-hw
+-hlc
+-4.cnf
+-hw
+-mq
+-quit
+-END
+-echo "-------------------------------- ... END ----------------------------------"
+diff --git a/Cudd/dddmp/exp/test2.script b/Cudd/dddmp/exp/test2.script
+deleted file mode 100755
+index f719ed2..0000000
+--- a/Cudd/dddmp/exp/test2.script
++++ /dev/null
+@@ -1,30 +0,0 @@
+-# !/bin/sh
+-#
+-# Check BDDs from DDDMP-1.0:
+-# Load an Array of BDDs from DDDMP-1.0
+-# Store them
+-#
+-rm -f *.*.tmp
+-echo "---------------------------------------------------------------------------"
+-echo "-------------------- TESTING Load BDD from DDDMP-1.0 ----------------------"
+-echo "---------------------------------------------------------------------------"
+-./../testdddmp << END
+-mi
+-10
+-hlb
+-s27deltaDddmp1.bdd
+-hw
+-bal
+-s27deltaDddmp1.bdd
+-0
+-bas
+-s27deltaDddmp1.bdd.tmp
+-0
+-mq
+-quit
+-END
+-echo "----------------------------- ... RESULTS ... -----------------------------"
+-diff --brief s27deltaDddmp1.bdd.tmp s27deltaDddmp1.bdd.bis
+-echo "-------------------------------- ... END ----------------------------------"
+-rm -f *.*.tmp
+-
+diff --git a/Cudd/dddmp/exp/test3.script b/Cudd/dddmp/exp/test3.script
+deleted file mode 100755
+index 408496c..0000000
+--- a/Cudd/dddmp/exp/test3.script
++++ /dev/null
+@@ -1,69 +0,0 @@
+-# !/bin/sh
+-#
+-# BDD check:
+-# Load BDDs
+-# Make some operations
+-# Store BDDs
+-#
+-rm -f *.*.tmp
+-echo "---------------------------------------------------------------------------"
+-echo "----------------------- TESTING basic Load/Store ... ----------------------"
+-echo "---------------------------------------------------------------------------"
+-./../testdddmp << END
+-mi
+-50
+-hlb
+-0or1.bdd
+-bl
+-0.bdd
+-0
+-bl
+-1.bdd
+-1
+-op
+-or
+-0
+-1
+-2
+-bs
+-0or1.bdd.tmp
+-2
+-bl
+-2.bdd
+-2
+-bl
+-3.bdd
+-3
+-op
+-and
+-2
+-3
+-4
+-bs
+-2and3.bdd.tmp
+-4
+-hlb
+-4xor5.bdd
+-bl
+-4.bdd
+-4
+-bl
+-5.bdd
+-5
+-op
+-xor
+-4
+-5
+-6
+-bs
+-4xor5.bdd.tmp
+-6
+-mq
+-quit
+-END
+-echo "----------------------------- ... RESULTS ... -----------------------------"
+-diff --brief 0or1.bdd 0or1.bdd.tmp
+-diff --brief 2and3.bdd 2and3.bdd.tmp
+-diff --brief 4xor5.bdd 4xor5.bdd.tmp
+-echo "-------------------------------- ... END ----------------------------------"
+-rm -f *.*.tmp
+diff --git a/Cudd/dddmp/exp/test4.script b/Cudd/dddmp/exp/test4.script
+deleted file mode 100755
+index 2c50992..0000000
+--- a/Cudd/dddmp/exp/test4.script
++++ /dev/null
+@@ -1,56 +0,0 @@
+-# !/bin/sh
+-#
+-# BDD Check:
+-# Load BDDs
+-# Make some operations (with reordering)
+-# Store BDDs
+-#
+-rm -f *.*/tmp
+-echo "---------------------------------------------------------------------------"
+-echo "---------- TESTING Load/Store with sifting, varnames & varauxids ----------"
+-echo "---------------------------------------------------------------------------"
+-./../testdddmp << END1
+-mi
+-50
+-onl
+-varnames.ord
+-bl
+-4.bdd
+-4
+-oil
+-varauxids.ord
+-bs
+-4a.bdd.tmp
+-4
+-dr
+-4
+-bs
+-4b.bdd.tmp
+-4
+-mq
+-quit
+-END1
+-echo "------------------------- ... END PHASE 1 ... -----------------------------"
+-./../testdddmp << END2
+-mi
+-50
+-onl
+-varnames.ord
+-slm
+-3
+-bl
+-4b.bdd.tmp
+-4
+-oil
+-varauxids.ord
+-bs
+-4c.bdd.tmp
+-4
+-mq
+-quit
+-END2
+-echo "----------------------------- ... RESULTS ... -----------------------------"
+-diff --brief 4.bdd 4a.bdd.tmp
+-diff --brief 4a.bdd.tmp 4c.bdd.tmp
+-echo "-------------------------------- ... END ----------------------------------"
+-rm -f *.*.tmp
+diff --git a/Cudd/dddmp/exp/test5.script b/Cudd/dddmp/exp/test5.script
+deleted file mode 100755
+index 9676c94..0000000
+--- a/Cudd/dddmp/exp/test5.script
++++ /dev/null
+@@ -1,42 +0,0 @@
+-# !/bin/sh
+-#
+-# Check ADD:
+-# Load an ADD
+-# Store the same ADD
+-# Compare the two
+-# (done twice on a small - 0.add - and a medium - 1.add - ADD).
+-#
+-rm -f *.tmp*
+-echo "---------------------------------------------------------------------------"
+-echo "--------------------- TESTING Load ADD and Store ADD ----------------------"
+-echo "---------------------------------------------------------------------------"
+-./../testdddmp << END1
+-mi
+-3
+-hlb
+-0.add
+-al
+-0.add
+-0
+-as
+-0.add.tmp
+-0
+-mq
+-mi
+-50
+-hlb
+-1.add
+-al
+-1.add
+-1
+-as
+-1.add.tmp
+-1
+-mq
+-quit
+-END1
+-echo "----------------------------- ... RESULTS ... -----------------------------"
+-diff --brief 0.add 0.add.tmp
+-diff --brief 1.add 1.add.tmp
+-echo "-------------------------------- ... END ----------------------------------"
+-rm -f *.*.tmp
+diff --git a/Cudd/dddmp/exp/test6.script b/Cudd/dddmp/exp/test6.script
+deleted file mode 100755
+index 0b4295e..0000000
+--- a/Cudd/dddmp/exp/test6.script
++++ /dev/null
+@@ -1,50 +0,0 @@
+-# !/bin/sh
+-#
+-# Check CNF (short check - only NodeByNode method involved):
+-# Load BDDs
+-# Store corresponding CNF
+-# Read CNF
+-# Store corresponding BDD
+-# Compare original and final BDDs
+-#
+-rm -f *.tmp*
+-echo "---------------------------------------------------------------------------"
+-echo "--------------------- TESTING Load BDD and Store CNF ----------------------"
+-echo "---------------------------------------------------------------------------"
+-./../testdddmp << END1
+-mi
+-150
+-hlc
+-4.cnf.bis
+-bl
+-4.bdd
+-0
+-cs
+-4.cnf.tmp
+-0
+-N
+-100
+-mq
+-quit
+-END1
+-echo "--------------------- TESTING Load CNF and Store BDD ----------------------"
+-./../testdddmp << END2
+-mi
+-150
+-hlc
+-4.cnf.bis
+-cl
+-4.cnf.tmp
+-0
+-hw
+-bs
+-4.bdd.tmp
+-0
+-mq
+-quit
+-END2
+-echo "----------------------------- ... RESULTS ... -----------------------------"
+-diff --brief 4.cnf.bis 4.cnf.tmp
+-diff --brief 4.bdd.bis1 4.bdd.tmp
+-echo "-------------------------------- ... END ----------------------------------"
+-rm -f *.*.tmp
+diff --git a/Cudd/dddmp/exp/test7.script b/Cudd/dddmp/exp/test7.script
+deleted file mode 100755
+index dcef83f..0000000
+--- a/Cudd/dddmp/exp/test7.script
++++ /dev/null
+@@ -1,150 +0,0 @@
+-# !/bin/sh
+-#
+-# Check CNF (long check - all methods involved):
+-# Load BDDs
+-# Store corresponding CNF in different format:
+-# NodeByNode method -> file 4.node1.tmp
+-# MaxtermByMaxterm -> file 4.max1.tmp
+-# Best with different options:
+-# MaxEdge=-1 MaxPath= 0 -> similar to NodeByNode -> file 4.node2.tmp
+-# MaxEdge= 0 MaxPath=-1 -> similar to NodeByNode -> file 4.node3.tmp
+-# MaxEdge=-1 MaxPath=-1 -> = MaxtermByMaxterm -> file 4.max2.tmp
+-# MaxEdge= 1 MaxPath=-1 -> = Original Best -> file 4.best1.tmp
+-# MaxEdge= 1 MaxPath= 2 -> = Original Best, With Path Shorter than 3
+-# file 4.best2.tmp
+-# Read CNF
+-# Store corresponding BDD
+-# Compare original and final BDDs
+-#
+-rm -f *.tmp*
+-echo "---------------------------------------------------------------------------"
+-echo "--------------------- TESTING Load BDD and Store CNF ----------------------"
+-echo "---------------------------------------------------------------------------"
+-./../testdddmp << END1
+-mi
+-150
+-hlc
+-4.cnf.bis
+-bl
+-4.bdd
+-0
+-cs
+-4.node1.tmp
+-0
+-N
+-100
+-cs
+-4.max1.tmp
+-0
+-M
+-100
+-cs
+-4.node2.tmp
+-0
+-B
+--1
+-0
+-100
+-cs
+-4.node3.tmp
+-0
+-B
+-0
+--1
+-100
+-cs
+-4.max2.tmp
+-0
+-B
+--1
+--1
+-100
+-cs
+-4.best1.tmp
+-0
+-B
+-1
+--1
+-100
+-cs
+-4.best2.tmp
+-0
+-B
+-1
+-2
+-100
+-mq
+-quit
+-END1
+-echo "---------------------------------------------------------------------------"
+-echo "--------------------- TESTING Load CNF and Store BDD ----------------------"
+-echo "---------------------------------------------------------------------------"
+-./../testdddmp << END2
+-mi
+-150
+-hlc
+-4.node2.tmp
+-cl
+-4.node2.tmp
+-0
+-hw
+-bs
+-4.node2.bdd.tmp
+-0
+-mq
+-quit
+-END2
+-./../testdddmp << END3
+-mi
+-150
+-hlc
+-4.node3.tmp
+-cl
+-4.node3.tmp
+-0
+-hw
+-bs
+-4.node3.bdd.tmp
+-0
+-mq
+-quit
+-END3
+-./../testdddmp << END4
+-mi
+-150
+-hlc
+-4.best1.tmp
+-cl
+-4.best1.tmp
+-0
+-hw
+-bs
+-4.best1.bdd.tmp
+-0
+-mq
+-quit
+-END4
+-./../testdddmp << END5
+-mi
+-150
+-hlc
+-4.best2.tmp
+-cl
+-4.best2.tmp
+-0
+-hw
+-bs
+-4.best2.bdd.tmp
+-0
+-mq
+-quit
+-END5
+-echo "----------------------------- ... RESULTS ... -----------------------------"
+-diff --brief 4.max1 4.max1.tmp
+-diff --brief 4.max2 4.max2.tmp
+-diff --brief 4.bdd.bis1 4.node2.bdd.tmp
+-diff --brief 4.bdd.bis2 4.node3.bdd.tmp
+-diff --brief 4.bdd.bis3 4.best1.bdd.tmp
+-diff --brief 4.bdd.bis4 4.best2.bdd.tmp
+-echo "-------------------------------- ... END ----------------------------------"
+-rm -f *.tmp*
+diff --git a/Cudd/dddmp/exp/varauxids.ord b/Cudd/dddmp/exp/varauxids.ord
+deleted file mode 100644
+index 9dc8856..0000000
+--- a/Cudd/dddmp/exp/varauxids.ord
++++ /dev/null
+@@ -1,50 +0,0 @@
+-1
+-3
+-5
+-7
+-9
+-11
+-13
+-15
+-17
+-19
+-21
+-23
+-25
+-27
+-29
+-31
+-33
+-35
+-37
+-39
+-41
+-43
+-45
+-47
+-49
+-51
+-53
+-55
+-57
+-59
+-61
+-63
+-65
+-67
+-69
+-71
+-73
+-75
+-77
+-79
+-81
+-83
+-85
+-87
+-89
+-91
+-93
+-95
+-97
+-99
+diff --git a/Cudd/dddmp/exp/varnames.ord b/Cudd/dddmp/exp/varnames.ord
+deleted file mode 100644
+index 541f21e..0000000
+--- a/Cudd/dddmp/exp/varnames.ord
++++ /dev/null
+@@ -1,50 +0,0 @@
+-V1
+-V2
+-V3
+-V4
+-V5
+-V6
+-V7
+-V8
+-V9
+-V10
+-V11
+-V12
+-V13
+-V14
+-V15
+-V16
+-V17
+-V18
+-V19
+-V20
+-V21
+-V22
+-V23
+-V24
+-V25
+-V26
+-V27
+-V28
+-V29
+-V30
+-V31
+-V32
+-V33
+-V34
+-V35
+-V36
+-V37
+-V38
+-V39
+-V40
+-V41
+-V42
+-V43
+-V44
+-V45
+-V46
+-V47
+-V48
+-V49
+-V50
+diff --git a/Cudd/dddmp/exp/zero.bdd b/Cudd/dddmp/exp/zero.bdd
+deleted file mode 100644
+index 4c229f7..0000000
+--- a/Cudd/dddmp/exp/zero.bdd
++++ /dev/null
+@@ -1,13 +0,0 @@
+-.ver DDDMP-1.0
+-.mode A
+-.varinfo 0
+-.nnodes 1
+-.nvars 100
+-.nsuppvars 0
+-.ids
+-.permids
+-.nroots 1
+-.rootids -1
+-.nodes
+-1 T 1 0 0
+-.end
+diff --git a/Cudd/dddmp/testdddmp.c b/Cudd/dddmp/testdddmp.c
+deleted file mode 100644
+index 6879dcc..0000000
+--- a/Cudd/dddmp/testdddmp.c
++++ /dev/null
+@@ -1,2279 +0,0 @@
+-/**CFile**********************************************************************
+-
+- FileName [testdddmp.c]
+-
+- PackageName [dddmp]
+-
+- Synopsis [A simple test function for Dddmp package]
+-
+- Description [This program constitutes a simple test program
+- for the dddmp library (version 2.0).
+- A simple interactive command selection allow the users to perform the
+- main operation on BDDs, ADDs, and CNF, such as loading and storing.
+- It can work also as a BDD calculators.
+- ]
+-
+- Author [Gianpiero Cabodi and Stefano Quer]
+-
+- Copyright [
+- Copyright (c) 2004 by Politecnico di Torino.
+- All Rights Reserved. This software is for educational purposes only.
+- Permission is given to academic institutions to use, copy, and modify
+- this software and its documentation provided that this introductory
+- message is not removed, that this software and its documentation is
+- used for the institutions' internal research and educational purposes,
+- and that no monies are exchanged. No guarantee is expressed or implied
+- by the distribution of this code.
+- Send bug-reports and/or questions to:
+- {gianpiero.cabodi,stefano.quer}@polito.it.
+- ]
+-
+-******************************************************************************/
+-
+-#include <string.h>
+-#include <stdio.h>
+-#include "dddmpInt.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Constant declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-#define DDDMPTEST_MAX_FILENAME_LENGTH 256
+-#define DDDMPTEST_MAX_STRING_LENGTH 80
+-#define DDDMPTEST_MAX_OPERAND 20
+-#define DDDMPTEST_MAX_VARIABLE 50
+-#define DDDMP_MAX_BDDARRAY_LEN 1000
+-
+-/**Enum************************************************************************
+-
+- Synopsis [Message type for output messages]
+-
+- Description [Type supported by the output function to print-out
+- the proper message.
+- ]
+-
+-******************************************************************************/
+-
+-typedef enum {
+- /* Int Messages */
+- DDDMP_MESSAGE_MANAGER_VAR,
+- DDDMP_MESSAGE_BDD,
+- DDDMP_MESSAGE_BDD_ARRAY,
+- DDDMP_MESSAGE_SOURCE1,
+- DDDMP_MESSAGE_SOURCE2,
+- DDDMP_MESSAGE_DESTINATION,
+- DDDMP_MESSAGE_CUBE,
+- DDDMP_MESSAGE_INDEX,
+- DDDMP_MESSAGE_I_ID,
+- DDDMP_MESSAGE_EDGE_MAX,
+- DDDMP_MESSAGE_LENGHT_MAX,
+- DDDMP_MESSAGE_REORDERING,
+- /* String Messages */
+- DDDMP_MESSAGE_PROMPT,
+- DDDMP_MESSAGE_FILE,
+- DDDMP_MESSAGE_OP,
+- DDDMP_MESSAGE_FORMAT
+-} Dddmp_MessageType;
+-
+-#if !defined(RAND_MAX) && defined(sun) && defined(sparc)
+-#define RAND_MAX 2147483647
+-#endif
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-typedef struct dddmpVarInfo {
+- /*
+- * Local Information
+- */
+-
+- int nDdVars; /* Local Manager Number of Variables */
+- char **rootNames; /* Root Names */
+-
+- /*
+- * Header File Information
+- */
+-
+- Dddmp_DecompType ddType;
+-
+- int nVars; /* File Manager Number of Variables */
+- int nSuppVars; /* File Structure Number of Variables */
+-
+- int varNamesFlagUpdate; /* 0 to NOT Update */
+- char **suppVarNames;
+- char **orderedVarNames;
+-
+- int varIdsFlagUpdate; /* 0 to NOT Update */
+- int *varIds; /* File ids - nSuppVars size */
+- int *varIdsAll; /* ALL ids - nVars size */
+-
+- int varComposeIdsFlagUpdate; /* 0 to NOT Update */
+- int *varComposeIds; /* File permids - nSuppVars size */
+- int *varComposeIdsAll; /* ALL permids - nVars size */
+-
+- int varAuxIdsFlagUpdate; /* 0 to NOT Update */
+- int *varAuxIds; /* File auxids - nSuppVars size */
+- int *varAuxIdsAll; /* ALL auxids - nVars size */
+-
+- int nRoots;
+-} dddmpVarInfo_t;
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-Dddmp_RootMatchType rootmatchmode;
+-Dddmp_VarMatchType varmatchmode;
+-Dddmp_VarInfoType varoutinfo;
+-char varname[DDDMPTEST_MAX_STRING_LENGTH];
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-static DdManager *ManagerInit (dddmpVarInfo_t *varInfo);
+-static void ManagerQuit (DdManager **ddMgr, dddmpVarInfo_t *varInfo);
+-static int OneCreate(DdManager *ddMgr, DdNode **operandBdd);
+-static int BddZeroCreate(DdManager *ddMgr, DdNode **operandBdd);
+-static int LeafCreate(DdManager *ddMgr, DdNode **operandBdd);
+-static int BddCreate(DdManager *ddMgr, DdNode **operandBdd);
+-static int A2B(void);
+-static int B2A(void);
+-static int HeaderLoadBdd(dddmpVarInfo_t *varInfo);
+-static int HeaderLoadCnf(dddmpVarInfo_t *varInfo);
+-static int HeaderWrite(dddmpVarInfo_t *varInfo);
+-static int Help(void);
+-static int OrderNamesLoad(dddmpVarInfo_t *varInfo);
+-static int IntArrayLoad(dddmpVarInfo_t *varInfo, const char *mode);
+-static int BddLoad(DdManager *ddMgr, DdNode **operandBdd, dddmpVarInfo_t *varInfo);
+-static int BddArrayLoad(DdManager *ddMgr, DdNode ***operandBddArray, int *operandBddArraySize, dddmpVarInfo_t *varInfo);
+-static int AddLoad(DdManager *ddMgr, DdNode **operandBdd, dddmpVarInfo_t *varInfo);
+-static int AddArrayLoad(DdManager *ddMgr, DdNode ***operandBddArray, int *operandBddArraySize, dddmpVarInfo_t *varInfo);
+-static int BddLoadCnf(DdManager *ddMgr, DdNode **operandBdd, dddmpVarInfo_t *varInfo);
+-static int BddArrayLoadCnf(DdManager *ddMgr, DdNode ***operandBddArray, int *operandBddArraySize, dddmpVarInfo_t *varInfo);
+-static int Operation(DdManager *ddMgr, DdNode **operandBdd);
+-static int BddStore(DdManager *ddMgr, DdNode **operandBdd, dddmpVarInfo_t *varInfo);
+-static int BddArrayStore(DdManager *ddMgr, DdNode ***operandBddArray, int *operandBddArraySize, dddmpVarInfo_t *varInfo);
+-static int AddStore(DdManager *ddMgr, DdNode **operandBdd, dddmpVarInfo_t *varInfo);
+-static int AddArrayStore(DdManager *ddMgr, DdNode ***operandBddArray, int *operandBddArraySize, dddmpVarInfo_t *varInfo);
+-static int BddStoreCnf(DdManager *ddMgr, DdNode **operandBdd, dddmpVarInfo_t *varInfo);
+-static int BddArrayStoreCnf(DdManager *ddMgr, DdNode ***operandBddArray, int *operandBddArraySize, dddmpVarInfo_t *varInfo);
+-static int DynamicReordering(DdManager *ddMgr);
+-static int SetLoadMatchmode();
+-static int CompleteInfoStruct(Dddmp_DecompType ddType, int nVars, int nSuppVars, char **suppVarNames, char **orderedVarNames, int *varIds, int *varComposeIds, int *varAuxIds, int nRoots, dddmpVarInfo_t *varInfo);
+-static void ReadInt(Dddmp_MessageType message, int *i);
+-static void ReadString(Dddmp_MessageType message, char string[]);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-int
+-main(
+- int argc,
+- char **argv
+- )
+-{
+- DdManager *ddMgr = NULL;
+- DdNode **operandBdd = NULL;
+- DdNode ***operandBddArray = NULL;
+- int *operandBddArraySize = NULL;
+- char *row = NULL;
+- dddmpVarInfo_t varInfo;
+- int i;
+-
+- /*--------------------- Echo command line and arguments -------------------*/
+-
+- fprintf (stdout, "#");
+- for (i=0; i<argc; i++) {
+- fprintf (stdout, "%s Version 2.0.2 (use command help)", argv[i]);
+- }
+- fprintf (stdout, "\n");
+- if (argc>1) {
+- Help();
+- }
+-
+- /*-------------------------- Init Array of BDDs ---------------------------*/
+-
+- rootmatchmode = DDDMP_ROOT_MATCHLIST;
+-#if 1
+- varmatchmode = DDDMP_VAR_MATCHIDS;
+-#else
+- varmatchmode = DDDMP_VAR_MATCHNAMES;
+-#endif
+- varoutinfo = DDDMP_VARIDS;
+-
+- row = DDDMP_ALLOC (char, DDDMPTEST_MAX_STRING_LENGTH);
+- Dddmp_CheckAndReturn (row==NULL, "Allocation error.");
+-
+- operandBdd = DDDMP_ALLOC (DdNode *, DDDMPTEST_MAX_OPERAND);
+- Dddmp_CheckAndReturn (operandBdd==NULL, "Allocation error.");
+-
+- operandBddArray = DDDMP_ALLOC (DdNode **, DDDMPTEST_MAX_OPERAND);
+- Dddmp_CheckAndReturn (operandBddArray==NULL, "Allocation error.");
+-
+- operandBddArraySize = DDDMP_ALLOC (int, DDDMPTEST_MAX_OPERAND);
+- Dddmp_CheckAndReturn (operandBddArraySize==NULL, "Allocation error.");
+-
+- for (i=0; i<DDDMPTEST_MAX_OPERAND; i++) {
+- operandBdd[i] = NULL;
+- operandBddArray[i] = NULL;
+- operandBddArraySize[i] = 0;
+- }
+-
+- /*--------------------- Manage command line parameters --------------------*/
+-
+- while (1) {
+- ReadString (DDDMP_MESSAGE_PROMPT, row);
+- if (row[0]=='\n') {
+- continue;
+- }
+- if (strncmp (row, "help", 4)==0) {
+- Help();
+- } else if (strncmp (row, "mi", 2)==0) {
+- ddMgr = ManagerInit (&varInfo);
+- } else if (strncmp (row, "mq", 2)==0) {
+- ManagerQuit (&ddMgr, &varInfo);
+- } else if (strncmp (row, "onl", 3)==0) {
+- OrderNamesLoad (&varInfo);
+- } else if (strncmp (row, "oil", 3)==0) {
+- IntArrayLoad (&varInfo, "oil");
+- } else if (strncmp (row, "cil", 3)==0) {
+- IntArrayLoad (&varInfo, "cil");
+- } else if (strncmp (row, "slm", 3)==0) {
+- SetLoadMatchmode ();
+- } else if (strncmp (row, "op", 2)==0) {
+- Operation (ddMgr, operandBdd);
+- } else if (strncmp (row, "oc", 2)==0) {
+- OneCreate (ddMgr, operandBdd);
+- } else if (strncmp (row, "zc", 2)==0) {
+- BddZeroCreate (ddMgr, operandBdd);
+- } else if (strncmp (row, "lc", 2)==0) {
+- LeafCreate (ddMgr, operandBdd);
+- } else if (strncmp (row, "bc", 2)==0) {
+- BddCreate (ddMgr, operandBdd);
+- } else if (strncmp (row, "a2b", 3)==0) {
+- A2B ();
+- } else if (strncmp (row, "b2a", 3)==0) {
+- B2A ();
+- } else if (strncmp (row, "hlb", 3)==0) {
+- HeaderLoadBdd (&varInfo);
+- } else if (strncmp (row, "hlc", 3)==0) {
+- HeaderLoadCnf (&varInfo);
+- } else if (strncmp (row, "bl", 3)==0) {
+- BddLoad (ddMgr, operandBdd, &varInfo);
+- } else if (strncmp (row, "bal", 3)==0) {
+- BddArrayLoad (ddMgr, operandBddArray, operandBddArraySize, &varInfo);
+- } else if (strncmp (row, "al", 2)==0) {
+- AddLoad (ddMgr, operandBdd, &varInfo);
+- } else if (strncmp (row, "aal", 3)==0) {
+- AddArrayLoad (ddMgr, operandBddArray, operandBddArraySize, &varInfo);
+- } else if (strncmp (row, "cl", 2)==0) {
+- BddLoadCnf (ddMgr, operandBdd, &varInfo);
+- } else if (strncmp (row, "cal", 3)==0) {
+- BddArrayLoadCnf (ddMgr, operandBddArray, operandBddArraySize, &varInfo);
+- } else if (strncmp (row, "hw", 2)==0) {
+- HeaderWrite (&varInfo);
+- } else if (strncmp (row, "bs", 2)==0) {
+- BddStore (ddMgr, operandBdd, &varInfo);
+- } else if (strncmp (row, "bas", 3)==0) {
+- BddArrayStore (ddMgr, operandBddArray, operandBddArraySize, &varInfo);
+- } else if (strncmp (row, "as", 2)==0) {
+- AddStore (ddMgr, operandBdd, &varInfo);
+- } else if (strncmp (row, "aas", 2)==0) {
+- AddArrayStore (ddMgr, operandBddArray, operandBddArraySize, &varInfo);
+- } else if (strncmp (row, "cs", 2)==0) {
+- BddStoreCnf (ddMgr, operandBdd, &varInfo);
+- } else if (strncmp (row, "cas", 2)==0) {
+- BddArrayStoreCnf (ddMgr, operandBddArray, operandBddArraySize, &varInfo);
+- } else if (strncmp (row, "dr", 2)==0) {
+- DynamicReordering (ddMgr);
+- } else if (strncmp (row, "quit", 4)==0) {
+- break;
+- } else {
+- fprintf (stderr, "Command not found: %s\n", row);
+- }
+- }
+-
+- /*-------------------------------- Free Memory ----------------------------*/
+-
+- ManagerQuit (&ddMgr, &varInfo);
+-
+- DDDMP_FREE (row);
+- DDDMP_FREE (operandBdd);
+- for (i=0; i<DDDMPTEST_MAX_OPERAND; i++) {
+- if (operandBddArray[i] != NULL) {
+- DDDMP_FREE (operandBddArray[i]);
+- }
+- }
+- DDDMP_FREE (operandBddArray);
+- DDDMP_FREE (operandBddArraySize);
+-
+- fprintf (stdout, "End of test.\n");
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Create a CUDD Manager with nVars variables.]
+-
+- Description [Create a CUDD Manager with nVars variables.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static DdManager *
+-ManagerInit (
+- dddmpVarInfo_t *varInfo
+- )
+-{
+- DdManager *ddMgr = NULL;
+- int nVars;
+-
+- ReadInt (DDDMP_MESSAGE_MANAGER_VAR, &nVars);
+-
+- /*----------------------- Init Var Information Structure ------------------*/
+-
+- varInfo->nDdVars = nVars;
+-
+- varInfo->rootNames = NULL;
+- varInfo->ddType = DDDMP_NONE;
+- varInfo->nVars = (-1);
+- varInfo->nSuppVars = (-1);
+- varInfo->varNamesFlagUpdate = 1;
+- varInfo->suppVarNames = NULL;
+- varInfo->orderedVarNames = NULL;
+- varInfo->varIdsFlagUpdate = 1;
+- varInfo->varIds = NULL;
+- varInfo->varIdsAll = NULL;
+- varInfo->varComposeIdsFlagUpdate = 1;
+- varInfo->varComposeIds = NULL;
+- varInfo->varComposeIdsAll = NULL;
+- varInfo->varAuxIdsFlagUpdate = 1;
+- varInfo->varAuxIds = NULL;
+- varInfo->varAuxIdsAll = NULL;
+- varInfo->nRoots = (-1);
+-
+- /*------------------------------ Init DD Manager --------------------------*/
+-
+- ddMgr = Cudd_Init (nVars, 0, CUDD_UNIQUE_SLOTS,
+- CUDD_CACHE_SLOTS, 0);
+-
+- Dddmp_CheckAndReturn (ddMgr==NULL, "DdManager NOT inizializated.");
+-
+- return (ddMgr);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Quit a CUDD Manager.]
+-
+- Description [Quit a CUDD Manager.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static void
+-ManagerQuit (
+- DdManager **ddMgrPtr /* IN: CUDD Manager */,
+- dddmpVarInfo_t *varInfo /* IN: Internal Manager */
+- )
+-{
+- if (*ddMgrPtr == NULL) {
+- return;
+- }
+-
+- fprintf (stdout, "Quitting CUDD Manager.\n");
+- Cudd_Quit (*ddMgrPtr);
+- *ddMgrPtr = NULL;
+-
+- DddmpStrArrayFree (varInfo->rootNames, varInfo->nRoots);
+- DddmpStrArrayFree (varInfo->suppVarNames, varInfo->nSuppVars);
+- DddmpStrArrayFree (varInfo->orderedVarNames, varInfo->nVars);
+- DDDMP_FREE (varInfo->varIds);
+- DDDMP_FREE (varInfo->varIdsAll);
+- DDDMP_FREE (varInfo->varComposeIds);
+- DDDMP_FREE (varInfo->varComposeIdsAll);
+- DDDMP_FREE (varInfo->varAuxIds);
+- DDDMP_FREE (varInfo->varAuxIdsAll);
+-
+- varInfo->nDdVars = (-1);
+- varInfo->rootNames = NULL;
+- varInfo->ddType = DDDMP_NONE;
+- varInfo->nVars = (-1);
+- varInfo->nSuppVars = (-1);
+- varInfo->varNamesFlagUpdate = 1;
+- varInfo->suppVarNames = NULL;
+- varInfo->orderedVarNames = NULL;
+- varInfo->varIdsFlagUpdate = 1;
+- varInfo->varIds = NULL;
+- varInfo->varIdsAll = NULL;
+- varInfo->varComposeIdsFlagUpdate = 1;
+- varInfo->varComposeIds = NULL;
+- varInfo->varComposeIdsAll = NULL;
+- varInfo->varAuxIdsFlagUpdate = 1;
+- varInfo->varAuxIds = NULL;
+- varInfo->varAuxIdsAll = NULL;
+- varInfo->nRoots = (-1);
+-
+- return;
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Create a One-BDD Leaf.]
+-
+- Description [Create a One-BDD Leaf.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-OneCreate(
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode **operandBdd /* In/OUT: Array of operand */
+- )
+-{
+- int i;
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadInt (DDDMP_MESSAGE_BDD, &i);
+-
+- operandBdd[i] = Cudd_ReadOne (ddMgr);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Create a Zero-BDD Leaf.]
+-
+- Description [Create a Zero-BDD Leaf.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-BddZeroCreate(
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode **operandBdd /* IN/OUT: array of operand */
+- )
+-{
+- int i;
+- DdNode *one = NULL;
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadInt (DDDMP_MESSAGE_BDD, &i);
+-
+- one = Cudd_ReadOne(ddMgr);
+- operandBdd[i] = Cudd_Not(one);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Create a One-Node BDD.]
+-
+- Description [Create a One-Node BDD.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-LeafCreate(
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode **operandBdd /* IN/OUT: Array of operandBdd */
+- )
+-{
+- int i, j;
+- DdNode *f = NULL;
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadInt (DDDMP_MESSAGE_BDD, &i);
+- ReadInt (DDDMP_MESSAGE_INDEX, &j);
+-
+- f = Cudd_bddIthVar (ddMgr, j);
+- Cudd_Ref(f);
+- operandBdd[i] = f;
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Create a BDD.]
+-
+- Description [Create a BDD: Variable index and number of cubes selection.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-BddCreate (
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode **operandBdd /* array of operandBdd */
+- )
+-{
+- DdNode **vet, *f, *g, *h;
+- int nb, nv, vi0, vi1, nc, i, j;
+- char row[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadInt (DDDMP_MESSAGE_BDD, &nb);
+-
+- fprintf (stdout, "Variables Index [n-m] (m-n = number of variables): ");
+- fgets (row, DDDMPTEST_MAX_STRING_LENGTH, stdin);
+- sscanf (row, "%d-%d", &vi0, &vi1);
+- nv = vi1-vi0+1;
+-
+- ReadInt (DDDMP_MESSAGE_CUBE, &nc);
+-
+- /* Leaf Creation */
+- vet = DDDMP_ALLOC (DdNode *, nv);
+- for (i=0; i<nv; i++) {
+- vet[i] = Cudd_bddIthVar (ddMgr, vi0+i);
+- }
+-
+- /* Cubes and BDD creation */
+- f = Cudd_Not (Cudd_ReadOne (ddMgr));
+- for (i=0; i<nc; i++)
+- {
+- g = Cudd_ReadOne (ddMgr);
+- for (j=0; j<nv; j++)
+- {
+- if ( ((float) rand())/((float) RAND_MAX) > 0.5 ) {
+- h = Cudd_bddAnd (ddMgr, g, vet[j]);
+- } else {
+- h = Cudd_bddAnd (ddMgr, g, Cudd_Not (vet[j]));
+- }
+- Cudd_Ref (h);
+- Cudd_RecursiveDeref (ddMgr, g);
+- g = h;
+- }
+- h = Cudd_bddOr (ddMgr, f, g);
+- Cudd_Ref (h);
+- Cudd_RecursiveDeref (ddMgr, f);
+- Cudd_RecursiveDeref (ddMgr, g);
+- f = h;
+- }
+-
+- operandBdd[nb] = f;
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Transform a BDD from the ASCII to the Binary format].]
+-
+- Description [Input and Output file selection.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-A2B(
+- void
+-)
+-{
+- fprintf (stderr, "Not yet Implemented!!!\n");
+-
+- return (DDDMP_FAILURE);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Transform a BDD from the Binary to the ASCII format].]
+-
+- Description [Input and Output file selection.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-B2A(
+- void
+-)
+-{
+- fprintf (stderr, "Not yet Implemented!!!\n");
+-
+- return (DDDMP_FAILURE);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Read the Header of a file containing a BDD.]
+-
+- Description [File name Selection.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-HeaderLoadBdd (
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */
+- )
+-{
+- Dddmp_DecompType ddType;
+- int retValue, nRoots, nVars, nSuppVars;
+- int *tmpVarIds = NULL;
+- int *tmpVarAuxIds = NULL;
+- int *tmpVarComposeIds = NULL;
+- char **tmpOrderedVarNames = NULL;
+- char **tmpSuppVarNames = NULL;
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+-
+- retValue = Dddmp_cuddHeaderLoad (&ddType, &nVars, &nSuppVars,
+- &tmpSuppVarNames, &tmpOrderedVarNames, &tmpVarIds, &tmpVarComposeIds,
+- &tmpVarAuxIds, &nRoots, fileName, NULL);
+-
+- if (retValue == DDDMP_FAILURE) {
+- return (DDDMP_FAILURE);
+- }
+-
+- /*---------------------------- Tail Operations ----------------------------*/
+-
+- CompleteInfoStruct (ddType, nVars, nSuppVars,
+- tmpSuppVarNames, tmpOrderedVarNames, tmpVarIds, tmpVarComposeIds,
+- tmpVarAuxIds, nRoots, varInfo);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Read the Header of a file containing a CNF formula.]
+-
+- Description [File name Selection.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-HeaderLoadCnf (
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */
+- )
+-{
+- int retValue, nRoots, nVars, nSuppVars;
+- int *tmpVarIds = NULL;
+- int *tmpVarComposeIds = NULL;
+- int *tmpVarAuxIds = NULL;
+- char **tmpOrderedVarNames = NULL;
+- char **tmpSuppVarNames = NULL;
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+-
+- retValue = Dddmp_cuddHeaderLoadCnf (&nVars, &nSuppVars,
+- &tmpSuppVarNames, &tmpOrderedVarNames, &tmpVarIds, &tmpVarComposeIds,
+- &tmpVarAuxIds, &nRoots, fileName, NULL);
+-
+- if (retValue == DDDMP_FAILURE) {
+- return (DDDMP_FAILURE);
+- }
+-
+- /*---------------------------- Tail Operations ----------------------------*/
+-
+- CompleteInfoStruct (DDDMP_CNF, nVars, nSuppVars,
+- tmpSuppVarNames, tmpOrderedVarNames, tmpVarIds, tmpVarComposeIds,
+- tmpVarAuxIds, nRoots, varInfo);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Read the Header of a filke containing a BDD.]
+-
+- Description [File name Selection.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-HeaderWrite(
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */
+- )
+-{
+- int i;
+-
+- switch (varInfo->ddType) {
+- case DDDMP_BDD:
+- fprintf (stdout, "DD TYPE: DDDMP_BDD\n");
+- break;
+- case DDDMP_ADD:
+- fprintf (stdout, "DD TYPE: DDDMP_ADD\n");
+- break;
+- case DDDMP_CNF:
+- fprintf (stdout, "DD TYPE: DDDMP_CNF\n");
+- break;
+- case DDDMP_NONE:
+- fprintf (stdout, "DD TYPE: NONE - Error\n");
+- break;
+- }
+-
+- fprintf (stdout, "Number of variables: %d\n", varInfo->nVars);
+- fprintf (stdout, "Number of support variables: %d\n", varInfo->nSuppVars);
+-
+- if (varInfo->suppVarNames != NULL) {
+- fprintf (stdout, "suppVarNames: ");
+- for (i=0; i<varInfo->nSuppVars; i++) {
+- if (varInfo->suppVarNames[i] != NULL) {
+- fprintf (stdout, "%s ", varInfo->suppVarNames[i]);
+- }
+- }
+- fprintf (stdout, "\n");
+- }
+-
+- if (varInfo->orderedVarNames != NULL) {
+- fprintf (stdout, "orderedVarNames: ");
+- for (i=0; i<varInfo->nVars; i++) {
+- if (varInfo->orderedVarNames[i] != NULL) {
+- fprintf (stdout, "%s ", varInfo->orderedVarNames[i]);
+- }
+- }
+- fprintf (stdout, "\n");
+- }
+-
+- if (varInfo->varIds != NULL) {
+- fprintf (stdout, "varIds: ");
+- for (i=0; i<varInfo->nSuppVars; i++) {
+- fprintf (stdout, "%d ", varInfo->varIds[i]);
+- }
+- fprintf (stdout, "\n");
+- }
+-
+- if (varInfo->varIdsAll != NULL) {
+- fprintf (stdout, "varIds for ALL Manager Variables: ");
+- for (i=0; i<varInfo->nVars; i++) {
+- fprintf (stdout, "%d ", varInfo->varIdsAll[i]);
+- }
+- fprintf (stdout, "\n");
+- }
+-
+- if (varInfo->varComposeIds != NULL) {
+- fprintf (stdout, "varComposeIds: ");
+- for (i=0; i<varInfo->nSuppVars; i++) {
+- fprintf (stdout, "%d ", varInfo->varComposeIds[i]);
+- }
+- fprintf (stdout, "\n");
+- }
+-
+- if (varInfo->varComposeIdsAll != NULL) {
+- fprintf (stdout, "varComposeIds for ALL Manager Variables: ");
+- for (i=0; i<varInfo->nVars; i++) {
+- fprintf (stdout, "%d ", varInfo->varComposeIdsAll[i]);
+- }
+- fprintf (stdout, "\n");
+- }
+-
+- if (varInfo->varAuxIds != NULL) {
+- fprintf (stdout, "varAuxIds: ");
+- for (i=0; i<varInfo->nSuppVars; i++) {
+- fprintf (stdout, "%d ", varInfo->varAuxIds[i]);
+- }
+- fprintf (stdout, "\n");
+- }
+-
+- if (varInfo->varAuxIdsAll != NULL) {
+- fprintf (stdout, "varAuxIds for ALL Manager Variables: ");
+- for (i=0; i<varInfo->nVars; i++) {
+- fprintf (stdout, "%d ", varInfo->varAuxIdsAll[i]);
+- }
+- fprintf (stdout, "\n");
+- }
+-
+- fprintf (stdout, "Number of roots: %d\n", varInfo->nRoots);
+-
+- fflush (stdout);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Print the Help messages.]
+-
+- Description [Print the Help messages.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-Help(
+- void
+- )
+-{
+- fprintf (stdout, "Commands:\n");
+- fprintf (stdout, "MAIN\n");
+-
+- fprintf (stdout, "\thelp : Print this set of messages.\n");
+- fprintf (stdout, "\tquit : Quit the test program.\n");
+-
+- fprintf (stdout, "MANAGER OPERATIONs\n");
+-
+- fprintf (stdout,
+- "\thmi : Manager Init (To do BEFORE any BDD/ADD operation).\n");
+- fprintf (stdout, "\thmq : Manager Quit.\n");
+-
+- fprintf (stdout, "LOAD\n");
+-
+- fprintf (stdout, "\thlb : Load the header from a BDD/ADD file.\n");
+- fprintf (stdout, "\thlc : Load the header from a CNF file.\n");
+- fprintf (stdout, "\tbl : Load a BDD from a file.\n");
+- fprintf (stdout, "\tbal : Load an Array-BDD from a file.\n");
+- fprintf (stdout, "\tal : Load an ADD from a file.\n");
+- fprintf (stdout, "\taal : Load an Array-ADD from a file.\n");
+- fprintf (stdout, "\tcl : Load a CNF Formula from a file.\n");
+- fprintf (stdout, "\tcal : Load an Array of CNF Formulas from a file.\n");
+-
+- fprintf (stdout, "STORE\n");
+-
+- fprintf (stdout,
+- "\thw : (Header) Write variable information on stdout.\n");
+- fprintf (stdout, "\tbs : Store a BDD into a file.\n");
+- fprintf (stdout, "\tbas : Store an Array-BDD from a file.\n");
+- fprintf (stdout, "\tas : Store an ADD into a file.\n");
+- fprintf (stdout, "\taas : Store an Array-ADD into a file.\n");
+- fprintf (stdout, "\tcs : Store BDD as a CNF formula.\n");
+- fprintf (stdout, "\tcas : Store and Array of BDDs as a CNF formula.\n");
+-
+- fprintf (stdout, "MISC\n");
+-
+- fprintf (stdout, "\tdr : Activate Dynamic Reordering.\n");
+- fprintf (stdout, "\tonl : Load the order from a file (varNames).\n");
+- fprintf (stdout, "\toil : Load the order from a file (varAuxIds).\n");
+- fprintf (stdout, "\tcil : Load compose IDs from a file.\n");
+- fprintf (stdout, "\tslm : Set Load matchmode for variables.\n");
+- fprintf (stdout,
+- "\top : Operation (or, and, xor, not, =) between BDDs.\n");
+- fprintf (stdout, "\toc : Create a terminal-one BDD.\n");
+- fprintf (stdout, "\tzc : Create a terminal-zero BDD.\n");
+- fprintf (stdout, "\tlc : Create a single variable BDD (1 node).\n");
+- fprintf (stdout, "\tbc : Create a random BDD.\n");
+-
+- fprintf (stdout, "NOT YET IMPLEMENTED\n");
+-
+- fprintf (stdout,
+- "\ta2b : Convert a file from the ASCII format to the binary one.\n");
+- fprintf (stdout,
+- "\tb2a : Convert a file from the binary format to the ASCII one.\n");
+-
+- fprintf (stdout, "HINT\n");
+-
+- fprintf (stdout,
+- " Command 'mi' has to be the first instruction to build:\n");
+- fprintf (stdout, " a) The CUDD manager.\n");
+- fprintf (stdout,
+- " b) The internal manager (containing name and variable IDs).\n");
+- fprintf (stdout,
+- " After that load an header file with 'hlb' or 'hlc' to have proper\n");
+- fprintf (stdout,
+- " names and ids for each subsequent load/store operation.\n");
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Load the BDD order from a file (varNames).]
+-
+- Description [Load the BDD order from a file (varNames).
+- Force the orderedVarNames field of the varInfo structure,
+- i.e., the local manager, to be stucked to this array of values.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-OrderNamesLoad(
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */
+- )
+-{
+- FILE *fp = NULL;
+- int i;
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+- char tmpBuf[DDDMPTEST_MAX_STRING_LENGTH];
+- char tmpName[DDDMPTEST_MAX_STRING_LENGTH];
+- char **tmpOrderedVarNames = NULL;
+-
+- /*------------------------- Red New Var Names Array ----------------------*/
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+-
+- fp = fopen (fileName, "r");
+- Dddmp_CheckAndReturn (fp==NULL, "Cannot open file.");
+-
+- varoutinfo = DDDMP_VARNAMES;
+- tmpOrderedVarNames = DDDMP_ALLOC (char *, varInfo->nDdVars);
+-
+- i=0;
+- while (fgets (tmpBuf, DDDMPTEST_MAX_STRING_LENGTH, fp)!=NULL) {
+- if (tmpBuf[0]=='#') {
+- continue;
+- }
+-
+- if (i>=varInfo->nDdVars) {
+- fprintf (stdout,
+- "Number of variables in files higher than DD manager vars (%d)\n",
+- varInfo->nDdVars);
+- fprintf (stdout, "Exceeding variables ignored\n");
+- fprintf (stdout,
+- "You might increase the DDDMPTEST_MAX_VARIABLE constant\n");
+- break;
+- }
+-
+- sscanf (tmpBuf, "%s", tmpName);
+- tmpOrderedVarNames[i] = DDDMP_ALLOC (char, (strlen (tmpName) + 1));
+- if (tmpOrderedVarNames[i]==NULL) {
+- fprintf (stdout, "Error allocating memory\n");
+- } else {
+- strcpy (tmpOrderedVarNames[i], tmpName);
+- }
+- i++;
+- }
+-
+- for ( ;i<varInfo->nDdVars; i++) {
+- tmpOrderedVarNames[i] = NULL;
+- }
+-
+- fclose(fp);
+-
+- /*----------------------- Free and Set Var Names Array --------------------*/
+-
+- DddmpStrArrayFree (varInfo->orderedVarNames, varInfo->nVars);
+- varInfo->orderedVarNames = tmpOrderedVarNames;
+- varInfo->nVars = varInfo->nDdVars;
+-
+- /* DO NOT ALLOW FURTHER UPDATES */
+- varInfo->varNamesFlagUpdate = 0;
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Load the BDD order from a file (varauxids).]
+-
+- Description [Load the BDD order from a file (varauxids).
+- Force the
+- varAuxIds and varAuxIdsAll
+- or the
+- varComposeIds and varComposeIdsAll
+- fields of the varInfo structure, i.e., the local manager, to be
+- stucked to this array of values.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-IntArrayLoad (
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */,
+- const char *mode
+- )
+-{
+- FILE *fp = NULL;
+- int i;
+- int *tmpArray1 = NULL;
+- int *tmpArray2 = NULL;
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+- char buf[DDDMPTEST_MAX_STRING_LENGTH];
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+-
+- fp = fopen(fileName, "r");
+- Dddmp_CheckAndReturn (fp==NULL, "Cannot open file.");
+-
+- tmpArray1 = DDDMP_ALLOC (int, varInfo->nDdVars);
+- tmpArray2 = DDDMP_ALLOC (int, varInfo->nDdVars);
+- Dddmp_CheckAndReturn (tmpArray1==NULL, "Error allocating memory.");
+- Dddmp_CheckAndReturn (tmpArray2==NULL, "Error allocating memory.");
+-
+- i=0;
+- while (fgets(buf, DDDMPTEST_MAX_STRING_LENGTH, fp)!=NULL) {
+- if (buf[0]=='#') {
+- continue;
+- }
+- if (i>=varInfo->nDdVars) {
+- fprintf (stdout,
+- "Number of variables in files higher than DD manager vars (%d)\n",
+- varInfo->nDdVars);
+- fprintf (stdout, "Exceeding variables ignored.\n");
+- fprintf (stdout, "(Increase the DDDMPTEST_MAX_VARIABLE constant.)\n");
+- break;
+- }
+- sscanf(buf, "%d", &tmpArray1[i]);
+- sscanf(buf, "%d", &tmpArray2[i++]);
+- }
+-
+- for (;i<varInfo->nDdVars;i++) {
+- tmpArray1[i]= -1;
+- tmpArray2[i]= -1;
+- }
+-
+- fclose(fp);
+-
+- if (strcmp (mode, "oil") == 0) {
+- varInfo->varAuxIds = tmpArray1;
+- varInfo->varAuxIdsAll = tmpArray2;
+-
+- /* DO NOT ALLOW FURTHER UPDATES */
+- varInfo->varAuxIdsFlagUpdate = 0;
+- } else {
+- if (strcmp (mode, "cil") == 0) {
+- varInfo->varComposeIds = tmpArray1;
+- varInfo->varComposeIdsAll = tmpArray2;
+-
+- /* DO NOT ALLOW FURTHER UPDATES */
+- varInfo->varComposeIdsFlagUpdate = 0;
+- }
+- }
+-
+- varInfo->nVars = varInfo->nDdVars;
+- varInfo->nSuppVars = varInfo->nDdVars;
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Load a BDD from a file.]
+-
+- Description [Load a BDD from a file.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-BddLoad (
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode **operandBdd /* IN: Operand BDD */,
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */
+- )
+-{
+- DdNode *f = NULL;
+- int i;
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+- ReadInt (DDDMP_MESSAGE_BDD, &i);
+-
+- /*-------------------------------- Load BDD -------------------------------*/
+-
+- fprintf (stdout, "Loading %s ...\n", fileName);
+-
+- f = Dddmp_cuddBddLoad (ddMgr, varmatchmode, varInfo->orderedVarNames,
+- varInfo->varIdsAll, varInfo->varComposeIdsAll, DDDMP_MODE_DEFAULT,
+- fileName, NULL);
+-
+- if (f==NULL) {
+- fprintf (stderr, "Dddmp Test Error : %s is not loaded from file\n",
+- fileName);
+- } else {
+- operandBdd[i] = f;
+- }
+-
+- /*---------------------------- Tail Operations ----------------------------*/
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Load an array of BDDs from a file.]
+-
+- Description [Load an array of BDDs from a file.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-BddArrayLoad(
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode ***operandBddArray /* IN: Array of operand BDD */,
+- int *operandBddArraySize /* IN: Number of ADD in the Array */,
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */
+- )
+-{
+- DdNode **bddArray = NULL;
+- int i, j, nRoots;
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+- ReadInt (DDDMP_MESSAGE_BDD_ARRAY, &i);
+-
+- /*---------------------------- Load BDDs ----------------------------------*/
+-
+- nRoots = Dddmp_cuddBddArrayLoad (ddMgr, rootmatchmode,
+- varInfo->rootNames, varmatchmode,
+- varInfo->orderedVarNames, varInfo->varIdsAll, varInfo->varComposeIdsAll,
+- DDDMP_MODE_DEFAULT, fileName, NULL, &bddArray);
+-
+- Dddmp_CheckAndReturn (nRoots>DDDMP_MAX_BDDARRAY_LEN,
+- "DDDMP_MAX_BDDARRAY_LEN exceeded by BDD array len (increase it).");
+-
+- if (nRoots<=0) {
+- return (DDDMP_FAILURE);
+- }
+-
+- varInfo->nRoots = nRoots;
+- operandBddArray[i] = DDDMP_ALLOC (DdNode *, nRoots);
+- Dddmp_CheckAndReturn (operandBddArray[i]==NULL, "Allocation error.");
+-
+- for (j=0; j<nRoots; j++) {
+- operandBddArray[i][j] = bddArray[j];
+- }
+- operandBddArraySize[i] = nRoots;
+-
+- /*---------------------------- Tail Operations ----------------------------*/
+-
+- /* free array */
+- DDDMP_FREE (bddArray);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Load an ADD from a file.]
+-
+- Description [Load an ADD from a file.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-AddLoad(
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode **operandBdd /* IN: Operand BDD */,
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */
+- )
+-{
+- DdNode *f = NULL;
+- int i;
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+- ReadInt (DDDMP_MESSAGE_BDD, &i);
+-
+- /*-------------------------------- Load ADD -------------------------------*/
+-
+- fprintf (stdout, "Loading %s ...\n", fileName);
+-
+- f = Dddmp_cuddAddLoad (ddMgr, varmatchmode, varInfo->orderedVarNames,
+- varInfo->varIdsAll, varInfo->varComposeIdsAll, DDDMP_MODE_DEFAULT,
+- fileName, NULL);
+-
+- if (f==NULL) {
+- fprintf (stderr, "Dddmp Test Error : %s is not loaded from file\n",
+- fileName);
+- } else {
+- operandBdd[i] = f;
+- }
+-
+- /*---------------------------- Tail Operations ----------------------------*/
+-
+- fprintf (stdout, "Load:\n");
+- Cudd_PrintMinterm (ddMgr, f);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Load an array of ADDs from a file.]
+-
+- Description [Load an array of ADDs from a file.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-AddArrayLoad(
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode ***operandBddArray /* IN: Array of operand BDD */,
+- int *operandBddArraySize /* IN: Number of ADD in the Array */,
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */
+- )
+-{
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+- int i, j, nRoots;
+- DdNode **bddArray = NULL;
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+- ReadInt (DDDMP_MESSAGE_BDD_ARRAY, &i);
+-
+- /*------------------------------- Load ADDs -------------------------------*/
+-
+- nRoots = Dddmp_cuddAddArrayLoad (ddMgr, rootmatchmode,
+- varInfo->rootNames, varmatchmode,
+- varInfo->orderedVarNames, varInfo->varIdsAll, varInfo->varComposeIdsAll,
+- DDDMP_MODE_DEFAULT, fileName, NULL, &bddArray);
+-
+- Dddmp_CheckAndReturn (nRoots>DDDMP_MAX_BDDARRAY_LEN,
+- "DDDMP_MAX_BDDARRAY_LEN exceeded by BDD array len (increase it).");
+-
+- if (nRoots<=0) {
+- return (DDDMP_FAILURE);
+- }
+-
+- varInfo->nRoots = nRoots;
+- operandBddArray[i] = DDDMP_ALLOC (DdNode *, nRoots);
+- Dddmp_CheckAndReturn (operandBddArray[i]==NULL, "Allocation error.");
+-
+- for (j=0; j<nRoots; j++) {
+- operandBddArray[i][j] = bddArray[j];
+- }
+- operandBddArraySize[i] = nRoots;
+-
+- /*---------------------------- Tail Operations ----------------------------*/
+-
+- /* Free array */
+- DDDMP_FREE (bddArray);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Load a CNF formula from a file, and create a BDD.]
+-
+- Description [Load a CNF formula from a file, and create a BDD.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-BddLoadCnf (
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode **operandBdd /* IN: Operand BDD */,
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */
+- )
+-{
+- DdNode **rootsPtr = NULL;
+- Dddmp_DecompCnfLoadType loadingMode = DDDMP_CNF_MODE_CONJ_QUANT;
+- int i, retValue, nRoots;
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+- ReadInt (DDDMP_MESSAGE_BDD, &i);
+-
+- /*------------------------------- Load BDDs -------------------------------*/
+-
+- fprintf (stdout, "Loading %s ...\n", fileName);
+-
+- retValue = Dddmp_cuddBddLoadCnf (ddMgr, varmatchmode,
+- varInfo->orderedVarNames, varInfo->varAuxIdsAll, varInfo->varComposeIdsAll,
+- loadingMode, fileName, NULL, &rootsPtr, &nRoots);
+-
+- Dddmp_CheckAndGotoLabel (retValue==DDDMP_FAILURE,
+- "Dddmp Test: Load From File Error.\n", failure);
+-
+- operandBdd[i] = rootsPtr[0];
+-
+- /*---------------------------- Tail Operations ----------------------------*/
+-
+- /* Free array */
+- DDDMP_FREE (rootsPtr);
+-
+- return (DDDMP_SUCCESS);
+-
+- failure:
+- return(DDDMP_FAILURE);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Load a CNF formula from a file, and create an array of
+- BDDs.
+- ]
+-
+- Description [Load a CNF formula from a file, and create an array of
+- BDDs.
+- ]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-BddArrayLoadCnf (
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode ***operandBddArray /* IN: Array of operand BDD */,
+- int *operandBddArraySize /* IN: Number of ADD in the Array */,
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */
+- )
+-{
+- DdNode **rootsPtr = NULL;
+- Dddmp_DecompCnfLoadType loadingMode = DDDMP_CNF_MODE_CONJ_QUANT;
+- int i, j, nRoots, retValue;
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+- ReadInt (DDDMP_MESSAGE_BDD_ARRAY, &i);
+-
+- /*--------------------------- Loading BDDs --------------------------------*/
+-
+- retValue = Dddmp_cuddBddArrayLoadCnf (ddMgr, rootmatchmode,
+- varInfo->rootNames, varmatchmode,
+- varInfo->orderedVarNames, varInfo->varIdsAll, varInfo->varComposeIdsAll,
+- loadingMode, fileName, NULL, &rootsPtr, &nRoots);
+-
+- Dddmp_CheckAndReturn (nRoots>DDDMP_MAX_BDDARRAY_LEN,
+- "DDDMP_MAX_BDDARRAY_LEN exceeded by BDD array len (increase it).");
+-
+- if (nRoots<=0) {
+- return (DDDMP_FAILURE);
+- }
+-
+- varInfo->nRoots = nRoots;
+- operandBddArray[i] = DDDMP_ALLOC (DdNode *, nRoots);
+- Dddmp_CheckAndReturn (operandBddArray[i]==NULL, "Allocation error.");
+-
+- for (j=0; j<nRoots; j++) {
+- operandBddArray[i][j] = rootsPtr[j];
+- }
+- operandBddArraySize[i] = nRoots;
+-
+- /*---------------------------- Tail Operations ----------------------------*/
+-
+- /* Free array */
+- DDDMP_FREE (rootsPtr);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Perform an Operation among BDDs.]
+-
+- Description [Perform an Operation among BDDs.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-Operation(
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode **operandBdd /* IN: Array of operandBdd */
+- )
+-{
+- DdNode *f, *g, *h;
+- char buf[DDDMPTEST_MAX_STRING_LENGTH];
+- int i;
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadString (DDDMP_MESSAGE_OP, buf);
+- ReadInt (DDDMP_MESSAGE_SOURCE1, &i);
+-
+- f = operandBdd[i];
+-
+- /*-------------------------- Compute Operation ----------------------------*/
+-
+- if ((strcmp(buf, "or")==0)|| (strcmp(buf, "OR")==0)) {
+- ReadInt (DDDMP_MESSAGE_SOURCE2, &i);
+- g = operandBdd[i];
+- h = Cudd_bddOr(ddMgr, f, g);
+- Cudd_RecursiveDeref(ddMgr, f);
+- Cudd_Ref(h);
+- Cudd_RecursiveDeref(ddMgr, g);
+- } else if ((strcmp(buf, "and")==0) || (strcmp(buf, "AND")==0)) {
+- ReadInt (DDDMP_MESSAGE_SOURCE2, &i);
+- g = operandBdd[i];
+- h = Cudd_bddAnd(ddMgr, f, g);
+- Cudd_Ref(h);
+- Cudd_RecursiveDeref(ddMgr, f);
+- Cudd_RecursiveDeref(ddMgr, g);
+- } else if ((strcmp(buf, "xor")==0) || (strcmp(buf, "XOR")==0)) {
+- ReadInt (DDDMP_MESSAGE_SOURCE2, &i);
+- g = operandBdd[i];
+- h = Cudd_bddXor(ddMgr, f, g);
+- Cudd_Ref(h);
+- Cudd_RecursiveDeref(ddMgr, f);
+- Cudd_RecursiveDeref(ddMgr, g);
+- } else if (strcmp(buf, "!")==0) {
+- h = Cudd_Not(f);
+- Cudd_Ref(h);
+- Cudd_RecursiveDeref(ddMgr, f);
+- } else if ((strcmp(buf, "buf")==0)|| (strcmp(buf, "BUF")==0)) {
+- h = f;
+- } else {
+- fprintf (stderr, "Dddmp Test Error : Operation %s unknown\n", buf);
+- h = NULL;
+- }
+-
+- ReadInt (DDDMP_MESSAGE_DESTINATION, &i);
+-
+- operandBdd[i] = h;
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Store a BDD in a file.]
+-
+- Description [Store a BDD in a file.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-BddStore (
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode **operandBdd /* IN: Operand BDD */,
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */
+- )
+-{
+- DdNode *f = NULL;
+- int i, retValue;
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+- ReadInt (DDDMP_MESSAGE_BDD, &i);
+-
+- fprintf (stdout, "Storing %s ...\n", fileName);
+- fflush (stdout);
+- f = operandBdd[i];
+-
+- /*----------------------------- Store BDDs -------------------------------*/
+-
+- retValue = Dddmp_cuddBddStore(ddMgr, NULL, f, varInfo->orderedVarNames,
+- varInfo->varAuxIdsAll, DDDMP_MODE_TEXT, varoutinfo, fileName, NULL);
+-
+- Dddmp_CheckAndGotoLabel (retValue!=DDDMP_SUCCESS, "BDD NOT stored.",
+- failure);
+-
+- return (DDDMP_SUCCESS);
+-
+- failure:
+- return(DDDMP_FAILURE);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Store an Array of BDD in a file.]
+-
+- Description [Store an Array of BDD in a file.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-BddArrayStore (
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode ***operandBddArray /* IN: Array of operand BDD */,
+- int *operandBddArraySize /* IN: Number of ADD in the Array */,
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */
+- )
+-{
+- int i, retValue, nRoots;
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+- ReadInt (DDDMP_MESSAGE_BDD_ARRAY, &i);
+-
+- nRoots = operandBddArraySize[i];
+-
+- /*----------------------------- Store BDDs -------------------------------*/
+-
+- fprintf (stdout, "Storing Array of BDDs in file %s ...\n", fileName);
+- fflush (stdout);
+-
+- retValue = Dddmp_cuddBddArrayStore (ddMgr, NULL, nRoots, operandBddArray[i],
+- NULL, varInfo->orderedVarNames, varInfo->varAuxIdsAll, DDDMP_MODE_TEXT,
+- DDDMP_VARIDS, fileName, NULL);
+-
+- Dddmp_CheckAndGotoLabel (retValue!=DDDMP_SUCCESS, "BDD NOT stored.",
+- failure);
+- fprintf (stdout, "done.\n");
+-
+- return (DDDMP_SUCCESS);
+-
+- failure:
+- return(DDDMP_FAILURE);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Store an ADD in a file.]
+-
+- Description [Store an ADD in a file.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-AddStore(
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode **operandBdd /* IN: operand Bdd */,
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */
+- )
+-{
+- DdNode *f;
+- int i, retValue;
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+- ReadInt (DDDMP_MESSAGE_BDD, &i);
+-
+- fprintf (stdout, "Storing %s ...\n", fileName);
+- fflush (stdout);
+- f = operandBdd[i];
+-
+-#if 0
+- /* StQ Patch - CREATE temporary ADD to Store */
+- f = Cudd_addResidue (ddMgr, 4, 3, 1, 1);
+- fprintf (stderr, "Store:\n");
+- Cudd_PrintMinterm (ddMgr, f);
+- /* end ... StQ Patch */
+-#endif
+-
+- retValue = Dddmp_cuddAddStore (ddMgr, NULL, f, varInfo->orderedVarNames,
+- varInfo->varAuxIdsAll, DDDMP_MODE_TEXT, varoutinfo, fileName, NULL);
+-
+- Dddmp_CheckAndReturn (retValue!=DDDMP_SUCCESS, "BDD NOT stored.");
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Store a BDD in a file.]
+-
+- Description [Store a BDD in a file.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-AddArrayStore (
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode ***operandBddArray /* IN: Array of operand ADD */,
+- int *operandBddArraySize /* IN: Number of ADD in the Array */,
+- dddmpVarInfo_t *varInfo
+- )
+-{
+- int i, retValue, nRoots;
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+- ReadInt (DDDMP_MESSAGE_BDD_ARRAY, &i);
+-
+- nRoots = operandBddArraySize[i];
+-
+- fprintf (stdout, "Storing Array of BDDs in file %s ...\n", fileName);
+- fflush (stdout);
+-
+- retValue = Dddmp_cuddAddArrayStore (ddMgr, NULL, nRoots, operandBddArray[i],
+- NULL, varInfo->orderedVarNames, varInfo->varAuxIdsAll, DDDMP_MODE_TEXT,
+- DDDMP_VARIDS, fileName, NULL);
+-
+- Dddmp_CheckAndReturn (retValue!=DDDMP_SUCCESS, "BDD NOT stored.");
+-
+- fprintf (stdout, "done.\n");
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Store a BDD as CNF format in a file.]
+-
+- Description [Store a BDD as CNF format in a file.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-BddStoreCnf(
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode **operandBdd /* IN: Array of operand ADD */,
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */
+- )
+-{
+- DdNode *f = NULL;
+- Dddmp_DecompCnfStoreType storingMode = DDDMP_CNF_MODE_BEST;
+- int noHeader = 0;
+- int i, nVars, retValue, idInitial, varNewN, clauseNewN;
+- int edgeInTh = (-1);
+- int pathLengthTh = (-1);
+- int *tmpBddIds = NULL;
+- int *tmpCnfIds = NULL;
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+- char row[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+- ReadInt (DDDMP_MESSAGE_BDD, &i);
+- ReadString (DDDMP_MESSAGE_FORMAT, row);
+-
+- switch (row[0]) {
+- case 'N':
+- storingMode = DDDMP_CNF_MODE_NODE;
+- break;
+- case 'M':
+- storingMode = DDDMP_CNF_MODE_MAXTERM;
+- break;
+- case 'B':
+- storingMode = DDDMP_CNF_MODE_BEST;
+- ReadInt (DDDMP_MESSAGE_EDGE_MAX, &edgeInTh);
+- ReadInt (DDDMP_MESSAGE_LENGHT_MAX, &pathLengthTh);
+- break;
+- }
+- ReadInt (DDDMP_MESSAGE_I_ID, &idInitial);
+-
+- fprintf (stdout, "Storing %s ...\n", fileName);
+- fflush (stdout);
+-
+- f = operandBdd[i];
+-
+- nVars = varInfo->nDdVars;
+-
+- /*------------ From BDD and CNF ids to Proper Array of ids ----------------*/
+-
+- tmpBddIds = DDDMP_ALLOC (int, nVars);
+- Dddmp_CheckAndGotoLabel (tmpBddIds==NULL, "Error allocating memory.",
+- failure);
+- tmpCnfIds = DDDMP_ALLOC (int, nVars);
+- Dddmp_CheckAndGotoLabel (tmpBddIds==NULL, "Error allocating memory.",
+- failure);
+-
+- for (i=0; i<nVars; i++) {
+- tmpBddIds[i] = i;
+- tmpCnfIds[i] = i+1;
+- }
+-
+- retValue = Dddmp_cuddBddStoreCnf (ddMgr, f, storingMode, noHeader,
+- varInfo->orderedVarNames, tmpBddIds, NULL, tmpCnfIds, idInitial,
+- edgeInTh, pathLengthTh, fileName, NULL, &clauseNewN, &varNewN);
+-
+- Dddmp_CheckAndGotoLabel (retValue!=DDDMP_SUCCESS, "BDD NOT stored.",
+- failure);
+-
+- fprintf (stdout, "Number of Clauses Stored = %d\n", clauseNewN);
+- fprintf (stdout, "Number of New Variable Created Storing = %d\n",
+- varNewN);
+- fflush (stdout);
+-
+- DDDMP_FREE (tmpBddIds);
+- DDDMP_FREE (tmpCnfIds);
+-
+- return (DDDMP_SUCCESS);
+-
+- failure:
+- DDDMP_FREE (tmpBddIds);
+- DDDMP_FREE (tmpCnfIds);
+-
+- return(DDDMP_FAILURE);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Store a BDD as CNF format in a file.]
+-
+- Description [Store a BDD as CNF format in a file.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-BddArrayStoreCnf(
+- DdManager *ddMgr /* IN: CUDD Manager */,
+- DdNode ***operandBddArray /* IN: Array of operand ADD */,
+- int *operandBddArraySize /* IN: Number of ADD in the Array */,
+- dddmpVarInfo_t *varInfo /* IN/OUT: Variable Information */
+- )
+-{
+- Dddmp_DecompCnfStoreType storingMode = DDDMP_CNF_MODE_BEST;
+- int noHeader = 0;
+- int i, nVars, bddN, retValue, idInitial, varNewN, clauseNewN;
+- int edgeInTh = (-1);
+- int pathLengthTh = (-1);
+- int *tmpBddIds = NULL;
+- int *tmpCnfIds = NULL;
+- char fileName[DDDMPTEST_MAX_FILENAME_LENGTH];
+- char row[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadString (DDDMP_MESSAGE_FILE, fileName);
+- ReadInt (DDDMP_MESSAGE_BDD_ARRAY, &bddN);
+- ReadString (DDDMP_MESSAGE_FORMAT, row);
+- switch (row[0]) {
+- case 'N':
+- storingMode = DDDMP_CNF_MODE_NODE;
+- break;
+- case 'M':
+- storingMode = DDDMP_CNF_MODE_MAXTERM;
+- break;
+- case 'B':
+- storingMode = DDDMP_CNF_MODE_BEST;
+- ReadInt (DDDMP_MESSAGE_EDGE_MAX, &edgeInTh);
+- ReadInt (DDDMP_MESSAGE_LENGHT_MAX, &pathLengthTh);
+- break;
+- }
+- ReadInt (DDDMP_MESSAGE_I_ID, &idInitial);
+-
+- nVars = varInfo->nDdVars;
+-
+- /*------------ From BDD and CNF ids to Proper Array of ids ----------------*/
+-
+- tmpBddIds = DDDMP_ALLOC (int, nVars);
+- Dddmp_CheckAndReturn (tmpBddIds==NULL, "Allocation error.");
+- tmpCnfIds = DDDMP_ALLOC (int, nVars);
+- Dddmp_CheckAndReturn (tmpCnfIds==NULL, "Allocation error.");
+-
+- for (i=0; i<nVars; i++) {
+- tmpBddIds[i] = i;
+- tmpCnfIds[i] = i*10+1;
+- }
+-
+- fprintf (stdout, "Storing %s ...\n", fileName);
+- fflush (stdout);
+-
+- retValue = Dddmp_cuddBddArrayStoreCnf (ddMgr, operandBddArray[bddN],
+- operandBddArraySize[bddN], storingMode, noHeader, varInfo->orderedVarNames,
+- tmpBddIds, NULL, tmpCnfIds, idInitial, edgeInTh, pathLengthTh, fileName,
+- NULL, &varNewN, &clauseNewN);
+-
+- Dddmp_CheckAndGotoLabel (retValue!=DDDMP_SUCCESS, "BDD NOT stored.",
+- failure);
+-
+- fprintf (stdout, "Number of Clauses Stored = %d\n", clauseNewN);
+- fprintf (stdout, "Number of New Variable Created Storing = %d\n",
+- varNewN);
+- fflush (stdout);
+-
+- DDDMP_FREE (tmpBddIds);
+- DDDMP_FREE (tmpCnfIds);
+-
+- return (DDDMP_SUCCESS);
+-
+- failure:
+- DDDMP_FREE (tmpBddIds);
+- DDDMP_FREE (tmpCnfIds);
+-
+- return(DDDMP_FAILURE);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Dynamic Reordering BDDs.]
+-
+- Description [Dynamic Reordering BDDs using one of the allowed CUDD
+- methods.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-DynamicReordering (
+- DdManager *ddMgr /* IN: CUDD Manager */
+- )
+-{
+- Cudd_ReorderingType approach = CUDD_REORDER_SIFT;
+- int method;
+-
+- /*------------------------ Read Operation Operands ------------------------*/
+-
+- ReadInt (DDDMP_MESSAGE_REORDERING, &method);
+- approach = (Cudd_ReorderingType) method;
+-
+- Cudd_ReduceHeap (ddMgr, approach, 5);
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Selects variable matching mode.]
+-
+- Description [Selects variable matching mode.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-SetLoadMatchmode (
+- )
+-{
+- int sel;
+- char row[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- fprintf (stdout, "Variable matchmode:\n");
+- fprintf (stdout, "Match IDs (1)\n");
+- fprintf (stdout, "Match permIDs (2)\n");
+- fprintf (stdout, "Match names (must have been loaded) (3)\n");
+- fprintf (stdout, "Match auxids (must have been loaded) (4)\n");
+- fprintf (stdout, "Match composeids (must have been loaded) (5)\n");
+- fprintf (stdout, "Your choice: ");
+- fflush (stdout);
+-
+- fgets (row, DDDMPTEST_MAX_STRING_LENGTH, stdin);
+- sscanf (row, "%d", &sel);
+-
+- switch (sel) {
+- case 1:
+- varmatchmode = DDDMP_VAR_MATCHIDS;
+- break;
+- case 2:
+- varmatchmode = DDDMP_VAR_MATCHPERMIDS;
+- break;
+- case 3:
+- varmatchmode = DDDMP_VAR_MATCHNAMES;
+- break;
+- case 4:
+- varmatchmode = DDDMP_VAR_MATCHAUXIDS;
+- break;
+- case 5:
+- varmatchmode = DDDMP_VAR_COMPOSEIDS;
+- break;
+- default:
+- fprintf (stderr, "Wrong choice!\n");
+- break;
+- }
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Complete the internal manager structure for subsequent
+- BDD/ADD/CNF operations.
+- ]
+-
+- Description [Complete the internal manager structure for subsequent
+- BDD/ADD/CNF operations.
+- The phylosophy is simple: to have proper names and ids it is necessary
+- to load an header before each actual load/store operation.
+- An header load should initialize variable names, variable ids,
+- variable compose ids, and variable auxiliary ids for all variables
+- stored in the file.
+- This information has to be extended for all variables in the
+- *current* CUDD manager (before any store operation).
+- CompleteInfoStruct does this job.
+- Arrays varIds, varComposeIds, and varAuxIds contain information for
+- all the variable in the BDD/ADD/CNF while arrays varIdsAll,
+- varComposeIdsAll, and varAuxIdsAll contain information for *all*
+- variable in the current CUDD manager.
+- ]
+-
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static int
+-CompleteInfoStruct (
+- Dddmp_DecompType ddType /* IN: selects the proper decomp type */,
+- int nVars /* IN: number of DD variables */,
+- int nSuppVars /* IN: number of support variables */,
+- char **suppVarNames /* IN: array of support variable names */,
+- char **orderedVarNames /* IN: array of variable names */,
+- int *varIds /* IN: array of variable ids */,
+- int *varComposeIds /* IN: array of permids ids */,
+- int *varAuxIds /* IN: array of variable aux ids */,
+- int nRoots /* IN: number of root in the file */,
+- dddmpVarInfo_t *varInfo /* IN: Variable Information */
+- )
+-{
+- int i;
+- char tmpString[DDDMPTEST_MAX_STRING_LENGTH];
+-
+- /*------------------------- Updates Variable Names ------------------------*/
+-
+- DddmpStrArrayFree (varInfo->suppVarNames, varInfo->nSuppVars);
+- varInfo->suppVarNames = suppVarNames;
+-
+- if (varInfo->varNamesFlagUpdate == 1) {
+-
+- DddmpStrArrayFree (varInfo->orderedVarNames, varInfo->nVars);
+-
+- if (orderedVarNames != NULL) {
+- varInfo->orderedVarNames = orderedVarNames;
+- } else {
+- varInfo->orderedVarNames = DDDMP_ALLOC (char *, nVars);
+- Dddmp_CheckAndReturn (varInfo->orderedVarNames==NULL,
+- "Allocation error.");
+-
+- for (i=0; i<nVars; i++) {
+- varInfo->orderedVarNames[i] = NULL;
+- }
+-
+- if (varInfo->suppVarNames != NULL) {
+- for (i=0; i<nSuppVars; i++) {
+- varInfo->orderedVarNames[i] = DDDMP_ALLOC (char,
+- (strlen (varInfo->suppVarNames[i]) + 1));
+- strcpy (varInfo->orderedVarNames[i], varInfo->suppVarNames[i]);
+- }
+- }
+-
+- for (i=0; i<nVars; i++) {
+- if (varInfo->orderedVarNames[i] == NULL) {
+- sprintf (tmpString, "DUMMY%d", i);
+- varInfo->orderedVarNames[i] = DDDMP_ALLOC (char,
+- (strlen (tmpString) + 1));
+- strcpy (varInfo->orderedVarNames[i], tmpString);
+- }
+- }
+- }
+- }
+-
+- /*------------------------------ Updates IDs ------------------------------*/
+-
+- DDDMP_FREE (varInfo->varIds);
+- varInfo->varIds = varIds;
+-
+- if (varInfo->varIdsFlagUpdate == 1) {
+-
+- /* Free Previously Allocated Memory */
+- DDDMP_FREE (varInfo->varIdsAll);
+-
+- /* Allocate New Memory and Check */
+- varInfo->varIdsAll = DDDMP_ALLOC (int, nVars);
+- Dddmp_CheckAndReturn (varInfo->varIdsAll==NULL, "Allocation error.");
+-
+- /* Set New Values */
+- for (i=0; i<nVars; i++) {
+- varInfo->varIdsAll[i] = (-1);
+- }
+-
+- if (varInfo->varIds != NULL) {
+- for (i=0; i<nSuppVars; i++) {
+- varInfo->varIdsAll[varInfo->varIds[i]] = varInfo->varIds[i];
+- }
+- }
+- }
+-
+-
+- /*-------------------------- Updates Compose IDs --------------------------*/
+-
+- DDDMP_FREE (varInfo->varComposeIds);
+- varInfo->varComposeIds = varComposeIds;
+-
+- if (varInfo->varComposeIdsFlagUpdate == 1) {
+-
+- /* Free Previously Allocated Memory */
+- DDDMP_FREE (varInfo->varComposeIdsAll);
+-
+- /* Allocate New Memory and Check */
+- varInfo->varComposeIdsAll = DDDMP_ALLOC (int, nVars);
+- Dddmp_CheckAndReturn (varInfo->varComposeIdsAll==NULL,
+- "Allocation error.");
+-
+- /* Set New Values */
+- for (i=0; i<nVars; i++) {
+- varInfo->varComposeIdsAll[i] = (-1);
+- }
+-
+- if (varInfo->varComposeIds != NULL) {
+- for (i=0; i<nSuppVars; i++) {
+- varInfo->varComposeIdsAll[varInfo->varIds[i]] =
+- varInfo->varComposeIds[i];
+- }
+- }
+- }
+-
+- /*------------------------- Updates Auxiliary IDs -------------------------*/
+-
+- DDDMP_FREE (varInfo->varAuxIds);
+- varInfo->varAuxIds = varAuxIds;
+-
+- if (varInfo->varAuxIdsFlagUpdate == 1) {
+-
+- /* Free Previously Allocated Memory */
+- DDDMP_FREE (varInfo->varAuxIdsAll);
+-
+- /* Allocate New Memory and Check */
+- varInfo->varAuxIdsAll = DDDMP_ALLOC (int, nVars);
+- Dddmp_CheckAndReturn (varInfo->varAuxIdsAll==NULL, "Allocation error.");
+-
+- /* Set New Values */
+- for (i=0; i<nVars; i++) {
+- varInfo->varAuxIdsAll[i] = (-1);
+- }
+-
+- if (varInfo->varAuxIds != NULL) {
+- for (i=0; i<nSuppVars; i++) {
+- varInfo->varAuxIdsAll[varInfo->varIds[i]] = varInfo->varAuxIds[i];
+- }
+- }
+- }
+-
+- /*----------------------------- Updates Sizes -----------------------------*/
+-
+- varInfo->ddType = ddType;
+- varInfo->nVars = nVars;
+- varInfo->nSuppVars = nSuppVars;
+- Dddmp_CheckAndReturn (varInfo->nDdVars<varInfo->nVars,
+- "Local Manager with Not Enough Variables.");
+- varInfo->nRoots = nRoots;
+-
+- return (DDDMP_SUCCESS);
+-}
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads an integer value from standard input.]
+-
+- Description [Reads an integer value from standard input.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static void
+-ReadInt (
+- Dddmp_MessageType message,
+- int *i
+- )
+-{
+- char row[DDDMPTEST_MAX_FILENAME_LENGTH];
+-
+- switch (message) {
+- case DDDMP_MESSAGE_MANAGER_VAR:
+- fprintf (stdout, "Number of Variables: ");
+- break;
+- case DDDMP_MESSAGE_BDD:
+- fprintf (stdout, "Which BDDs [0..%d]: ",
+- DDDMPTEST_MAX_OPERAND-1);
+- break;
+- case DDDMP_MESSAGE_BDD_ARRAY:
+- fprintf (stdout, "Which Array of BDDs [0..%d]: ",
+- DDDMPTEST_MAX_OPERAND-1);
+- break;
+- case DDDMP_MESSAGE_CUBE:
+- fprintf (stdout, "How many cubes [1..]: ");
+- break;
+- case DDDMP_MESSAGE_INDEX:
+- fprintf (stdout, "Index: ");
+- break;
+- case DDDMP_MESSAGE_SOURCE1:
+- fprintf (stdout, "Source1 [0..%d]: ", DDDMPTEST_MAX_OPERAND-1);
+- break;
+- case DDDMP_MESSAGE_SOURCE2:
+- fprintf (stdout, "Source2 [0..%d]: ", DDDMPTEST_MAX_OPERAND-1);
+- break;
+- case DDDMP_MESSAGE_DESTINATION:
+- fprintf (stdout, "Destination [0..%d]: ", DDDMPTEST_MAX_OPERAND-1);
+- break;
+- case DDDMP_MESSAGE_I_ID:
+- fprintf (stdout, "Initial ID : ");
+- break;
+- case DDDMP_MESSAGE_EDGE_MAX:
+- fprintf (stdout,
+- "Max Number of Edges (Insert cut-point from there on) : ");
+- break;
+- case DDDMP_MESSAGE_LENGHT_MAX:
+- fprintf (stdout,
+- "Max BDD-Path Length (Insert cut-point from there on) : ");
+- break;
+- case DDDMP_MESSAGE_REORDERING:
+- fprintf (stdout, "Reordering Approach (1..17): ");
+- break;
+- default:
+- fprintf (stdout, "Input Generic Integer: ");
+- break;
+- }
+- fflush (stdout);
+-
+- fgets (row, DDDMPTEST_MAX_STRING_LENGTH, stdin);
+- sscanf (row, "%d", i);
+- fflush (stdin);
+-
+- return;
+-}
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reads a string from standard input.]
+-
+- Description [Reads a string from standard input.]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-
+-static void
+-ReadString (
+- Dddmp_MessageType message,
+- char string[]
+- )
+-{
+- char localString[DDDMPTEST_MAX_STRING_LENGTH];
+-
+- switch (message) {
+- case DDDMP_MESSAGE_PROMPT:
+- fprintf (stdout, "TestDddmp> ");
+- break;
+- case DDDMP_MESSAGE_FILE:
+- fprintf (stdout, "File : ");
+- break;
+- case DDDMP_MESSAGE_OP:
+- fprintf (stdout, "Operation [or,and,xor,!,buf(=)] : ");
+- break;
+- case DDDMP_MESSAGE_FORMAT:
+- fprintf (stdout, "Format (Node=N, Maxterm=M, Best=B) : ");
+- break;
+- default:
+- fprintf (stdout, "Input Generic String : ");
+- break;
+- }
+- fflush (stdout);
+-
+- fgets (localString, DDDMPTEST_MAX_STRING_LENGTH, stdin);
+- sscanf (localString, "%s", string);
+- fflush (stdin);
+-
+- return;
+-}
+-
+-
+-
+-
+diff --git a/Cudd/mnemosyne/Makefile b/Cudd/mnemosyne/Makefile
+deleted file mode 100644
+index 3c593a2..0000000
+--- a/Cudd/mnemosyne/Makefile
++++ /dev/null
+@@ -1,53 +0,0 @@
+-# $Id$
+-#
+-# Makefile for the Mnemosyne memory allocation tracker.
+-#
+-# Marcus J. Ranum, 1990
+-#
+-#Options:
+-# define MALLOC_IS_VOIDSTAR if your system's malloc is declared as a (void *)
+-# otherwise, it is assumed to be a (char *). a "mall_t" is typedeffed in
+-# mnemconf.h and mnemosyne.h to implement this.
+-OPTNS = -DMALLOC_IS_VOIDSTAR
+-#OPTNS =
+-
+-CC = cc
+-RANLIB = ranlib
+-
+-#compiler flags
+-CFLAGS = -g $(OPTNS) $(XCFLAGS)
+-
+-#loader flags
+-LDFLGS =
+-
+-HDRS = mnemosyne.h mnemconf.h
+-
+-all: mnemalyse libmnem.a
+-
+-mnemalyse: mnemalyse.o
+- $(CC) $(LDFLGS) -o $@ mnemalyse.o
+-
+-libmnem.a: mnemosyne.o
+- ar rcv $@ mnemosyne.o
+- $(RANLIB) $@
+-
+-mtest: mtest.o libmnem.a
+- $(CC) $(LDFLGS) -o $@ mtest.o libmnem.a
+-
+-runmtest: all mtest
+- @echo "running memory waster"
+- mtest
+- @echo "press return for symbol list"; read ff
+- @cat mnem.syms
+- @echo "press return for waste analysis"; read ff
+- mnemalyse
+-
+-clean:
+- rm -f mtest core *.o mnem.dat mnem.syms
+-
+-distclean: clean
+- rm -f *.bak *~ libmnem.a mnemalyse
+-
+-
+-mnemosyne.o: Makefile mnemosyne.c $(HDRS)
+-mnemalyse.o: Makefile mnemalyse.c $(HDRS)
+diff --git a/Cudd/mnemosyne/README b/Cudd/mnemosyne/README
+deleted file mode 100644
+index 182bbd2..0000000
+--- a/Cudd/mnemosyne/README
++++ /dev/null
+@@ -1,39 +0,0 @@
+-
+- This is a set of tools designed to help find memory leaks in
+-programs, and to locate memory-hogging functions. It's implemented as
+-a wrapper library that goes around malloc/free/etc, and an include file
+-that "intercepts" calls to malloc/free/etc and makes them call the
+-wrappers. Thus, you can get extensive memory profiling and leak
+-detection by just adding one #include directive at the top of your
+-file and recompiling/linking.
+-
+- Unlike some similar tools I've seen in the past, this makes
+-sure that it keeps its on-disk data current, so that if the program
+-is crashed or interrupted, the results still have some validity. The
+-on-disk data is as compacted as I could make it, to give a chance of
+-this being useable in debugging big memory pigs. It adds some cost
+-in performance and memory size (since it keeps its own in-memory
+-symbol tables) but since it's only a debugging tool, I think the
+-cost is worth the benefit. This library can also be used to track
+-only allocations in a single module, or set of modules, and doesn't
+-interfere with calls to the "real" malloc() that are made in other
+-library routines.
+-
+- Every effort has been made to ensure that the code is
+-portable and won't interfere with running code - it should just
+-plug in or out. The biggest hindrances are forward declarations of
+-malloc() [which the preprocessor gleefully turns into syntax errors
+-for you] and structure elements named "free". The code has been
+-tested under Ultrix on DEC Risc and VAX systems, and under SunOS
+-on a Motorola platform. Please send patches, suggestions, etc,
+-to the author, who will probably not have time to do anything with
+-them.
+-
+-Compiling and building:
+- You may wish to edit the Makefile and glance at mnemconf.h,
+-then simply type "make". "make mtest" will build a simple test program
+-that will give you an idea of how things work. "make runmtest" will
+-run the test and do analysis on it.
+-
+-Marcus J. Ranum
+-mjr at decuac.dec.com
+diff --git a/Cudd/mnemosyne/mnemalyse.c b/Cudd/mnemosyne/mnemalyse.c
+deleted file mode 100644
+index 60d2b91..0000000
+--- a/Cudd/mnemosyne/mnemalyse.c
++++ /dev/null
+@@ -1,197 +0,0 @@
+-/************************************************************************
+- * *
+- * Copyright (c) 1985 by *
+- * Digital Equipment Corporation, Maynard, MA *
+- * All rights reserved. *
+- * *
+- * The information in this software is subject to change without *
+- * notice and should not be construed as a commitment by Digital *
+- * Equipment Corporation. *
+- * *
+- * Digital assumes no responsibility for the use or reliability *
+- * of its software on equipment which is not supplied by Digital. *
+- * *
+- * Redistribution and use in source and binary forms are permitted *
+- * provided that the above copyright notice and this paragraph are *
+- * duplicated in all such forms and that any documentation, *
+- * advertising materials, and other materials related to such *
+- * distribution and use acknowledge that the software was developed *
+- * by Digital Equipment Corporation. The name of Digital Equipment *
+- * Corporation may not be used to endorse or promote products derived *
+- * from this software without specific prior written permission. *
+- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR *
+- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED *
+- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.*
+- * Do not take internally. In case of accidental ingestion, contact *
+- * your physician immediately. *
+- * *
+- ************************************************************************/
+-
+-/* DO NOT INCLUDE "mnemosyne.h" !!! */
+-#include <stdio.h>
+-#include <ctype.h>
+-#include <sys/types.h>
+-#include <sys/file.h>
+-
+-static char rcsid[] = "/fats/tools/hsv/mnemosyne/mnemalyse.c,v 1.1.1.1 1995/06/06 18:18:28 fabio Exp";
+-
+-#include "mnemconf.h"
+-
+-extern char *index();
+-
+-/*
+-post-processor to interpret memory allocation maps and search for
+-pointers that were allocated but never freed.
+-
+- Marcus J. Ranum, 1990. (mjr at decuac.dec.com)
+-*/
+-
+-
+-/*
+-simple and braindead, read in the ".lines" file, and store it in a
+-table by number. then read the pointer map, and crossref any unfreed
+-pointers. simple as dereferencing NULL...
+-
+-this could use some cleaning and buffing, but it's damn effective as
+-it is. again, fancier symbol table routines would make this faster,
+-but who gives a damn? it only has to be faster than finding memory
+-leaks by hand...
+-*/
+-
+-struct xsym {
+- char *dat;
+- int lnum;
+- int map;
+- struct xsym *nxt;
+-};
+-
+-
+-
+-main()
+-{
+- register struct xsym *sp;
+- register struct xsym *zp;
+- struct ptr p;
+- struct xsym *shash[HASHSIZ];
+- char inbuf[BUFSIZ];
+- FILE *lp;
+- int fd;
+-
+- /* statistics */
+- int ptrcnt = 0;
+- int ptrbad = 0;
+- int ptrlos = 0;
+-
+- /* to chop up lines */
+- char *cpmap;
+- char *cpcalls;
+- char *cpave;
+- char *cplnum;
+- char *cpfnam;
+-
+- for(fd = 0; fd < HASHSIZ; fd++)
+- shash[fd] = (struct xsym *)0;
+-
+- if((lp = fopen(LINESFILE,"r")) == (FILE *)0) {
+- perror(LINESFILE);
+- exit(1);
+- }
+-
+- if((fd = open(PTRFILE,O_RDONLY|O_RDWR)) < 0) {
+- perror(PTRFILE);
+- exit(1);
+- }
+-
+- /* this is ugly, but I refuse to trust !@(#&U!@#&! sscanf() */
+- while((cpmap = fgets(inbuf,sizeof(inbuf),lp)) != (char *)0) {
+- if(inbuf[0] == '#')
+- continue;
+-
+- sp = (struct xsym *)malloc(sizeof(struct xsym));
+- if(sp == (struct xsym *)0) {
+- perror("malloc");
+- exit(1);
+- }
+- sp->lnum = sp->map = 0;
+-
+- if((cpcalls = index(cpmap,'\t')) != (char *)0)
+- *cpcalls++ = '\0';
+-
+- if((cpave = index(cpcalls,'\t')) != (char *)0)
+- *cpave++ = '\0';
+-
+- if((cplnum = index(cpave,'\t')) != (char *)0)
+- *cplnum++ = '\0';
+-
+- if((cpfnam = index(cplnum,'\t')) != (char *)0)
+- *cpfnam++ = '\0';
+-
+- /* setup symbol */
+- sp->map = atoi(cpmap);
+-
+- if(cplnum == (char *)0)
+- sp->lnum = -1;
+- else
+- sp->lnum = atoi(cplnum);
+-
+- if(cpfnam != (char *)0) {
+- char *x;
+- if((x = index(cpfnam,'\n')) != (char *)0)
+- *x = '\0';
+-
+- sp->dat = malloc((unsigned)(strlen(cpfnam) + 1));
+- if(sp->dat == (char *)0) {
+- perror("malloc");
+- exit(1);
+- }
+- (void)strcpy(sp->dat,cpfnam);
+- } else
+- sp->dat = "unknown";
+-
+- /* check to make sure it is not already in table */
+- zp = shash[sp->map % HASHSIZ];
+- while(zp != (struct xsym *)0) {
+- if(zp->map == sp->map) {
+- (void)fprintf(stderr,
+- "mnemalyse: duplicate map entry ignored");
+- (void)fprintf(stderr,
+- " (point at both %s and %s)\n",sp->dat,zp->dat);
+- (void)free(sp);
+-
+- /* can't free dat - may not be malloced! */
+- sp = (struct xsym *)0;
+- break;
+- }
+- zp = zp->nxt;
+- }
+-
+- /* shrug, link it in */
+- if(sp != (struct xsym *)0) {
+- sp->nxt = shash[sp->map % HASHSIZ];
+- shash[sp->map % HASHSIZ] = sp;
+- }
+- }
+- (void)fclose(lp);
+-
+- while(read(fd,(char *)&(p.dsk),sizeof(p.dsk)) == sizeof(p.dsk)) {
+-
+- /* if the pointer was not deallocated, note it */
+- if(p.dsk.siz != 0) {
+- zp = shash[p.dsk.smap % HASHSIZ];
+- while(zp != (struct xsym *)0) {
+- if(zp->map == p.dsk.smap) {
+- printf("%d bytes missing %s line:%d\n",
+- p.dsk.siz,zp->dat,zp->lnum);
+- }
+- zp = zp->nxt;
+- }
+- ptrbad++;
+- ptrlos += p.dsk.siz;
+- }
+- ptrcnt++;
+- }
+-
+- printf("%d pointers, %d lost totalling %d bytes\n",
+- ptrcnt,ptrbad,ptrlos);
+- exit(0);
+-}
+diff --git a/Cudd/mnemosyne/mnemconf.h b/Cudd/mnemosyne/mnemconf.h
+deleted file mode 100644
+index 9ea8f75..0000000
+--- a/Cudd/mnemosyne/mnemconf.h
++++ /dev/null
+@@ -1,89 +0,0 @@
+-/************************************************************************
+- * *
+- * Copyright (c) 1985 by *
+- * Digital Equipment Corporation, Maynard, MA *
+- * All rights reserved. *
+- * *
+- * The information in this software is subject to change without *
+- * notice and should not be construed as a commitment by Digital *
+- * Equipment Corporation. *
+- * *
+- * Digital assumes no responsibility for the use or reliability *
+- * of its software on equipment which is not supplied by Digital. *
+- * *
+- * Redistribution and use in source and binary forms are permitted *
+- * provided that the above copyright notice and this paragraph are *
+- * duplicated in all such forms and that any documentation, *
+- * advertising materials, and other materials related to such *
+- * distribution and use acknowledge that the software was developed *
+- * by Digital Equipment Corporation. The name of Digital Equipment *
+- * Corporation may not be used to endorse or promote products derived *
+- * from this software without specific prior written permission. *
+- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR *
+- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED *
+- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.*
+- * Do not take internally. In case of accidental ingestion, contact *
+- * your physician immediately. *
+- * *
+- ************************************************************************/
+-
+-#ifndef _INCL_MNEMCONF_H
+-
+-/*
+-/fats/tools/hsv/mnemosyne/mnemconf.h,v 1.1.1.1 1995/06/06 18:18:29 fabio Exp
+-*/
+-
+-/*
+-site specific and shared internal data structures used by mnemosyne.
+-the only data structure that may need to be shared is the struct ptr,
+-which is defined herein.
+-
+- Marcus J. Ranum, 1990. (mjr at decuac.dec.com)
+-*/
+-
+-
+-
+-/* if your machine has malloc and all declared as a (void *) not a (char *) */
+-#ifdef MALLOC_IS_VOIDSTAR
+-typedef void *mall_t;
+-#else
+-typedef char *mall_t;
+-#endif
+-
+-
+-/* size of internal hash tables - don't go wild - this is slow anyhow */
+-#define HASHSIZ 2027
+-
+-
+-/* names of files to write */
+-#define LINESFILE "mnem.syms"
+-#define PTRFILE "mnem.dat"
+-
+-
+-extern mall_t malloc();
+-extern mall_t realloc();
+-extern mall_t calloc();
+-extern void free();
+-
+-
+-/*
+-storage for a pointer map entry - the only data structure we share
+-a whole mess of these get written to mnem.dat as calls to malloc and
+-whatnot are made. the distinction between an *allocated* pointer and
+-and unallocated one is that 'siz' is 0 in freed ptrs. this is used
+-by the post-processor to look for memory leaks.
+-*/
+-struct ptr {
+- mall_t ptr; /* pointer to allocated memory */
+- int map; /* this pointer's map # */
+- struct ptr *next;
+-
+- /* only part that gets written to the disk */
+- struct {
+- unsigned siz; /* size allocated (or 0) */
+- int smap; /* symbol map # */
+- } dsk;
+-};
+-
+-#define _INCL_MNEMCONF_H
+-#endif
+diff --git a/Cudd/mnemosyne/mnemosyne.c b/Cudd/mnemosyne/mnemosyne.c
+deleted file mode 100644
+index 0d759da..0000000
+--- a/Cudd/mnemosyne/mnemosyne.c
++++ /dev/null
+@@ -1,670 +0,0 @@
+-/************************************************************************
+- * *
+- * Copyright (c) 1985 by *
+- * Digital Equipment Corporation, Maynard, MA *
+- * All rights reserved. *
+- * *
+- * The information in this software is subject to change without *
+- * notice and should not be construed as a commitment by Digital *
+- * Equipment Corporation. *
+- * *
+- * Digital assumes no responsibility for the use or reliability *
+- * of its software on equipment which is not supplied by Digital. *
+- * *
+- * Redistribution and use in source and binary forms are permitted *
+- * provided that the above copyright notice and this paragraph are *
+- * duplicated in all such forms and that any documentation, *
+- * advertising materials, and other materials related to such *
+- * distribution and use acknowledge that the software was developed *
+- * by Digital Equipment Corporation. The name of Digital Equipment *
+- * Corporation may not be used to endorse or promote products derived *
+- * from this software without specific prior written permission. *
+- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR *
+- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED *
+- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.*
+- * Do not take internally. In case of accidental ingestion, contact *
+- * your physician immediately. *
+- * *
+- ************************************************************************/
+-
+-/* DO NOT INCLUDE "mnemosyne.h" !!! */
+-#include <stdio.h>
+-#include <sys/types.h>
+-#include <sys/file.h>
+-
+-/* shared stuff - and decl of struct ptr */
+-#include "mnemconf.h"
+-
+-static char rcsid[] = "/fats/tools/hsv/mnemosyne/mnemosyne.c,v 1.1.1.1 1995/06/06 18:18:28 fabio Exp";
+-
+-
+-/*
+-malloc() realloc() and family wrappers - these functions manage a set
+-of data files that are updated whenever a pointer is allocated or freed,
+-as well as gathering stats about dynamic memory use and leakage.
+-
+- Marcus J. Ranum, 1990. (mjr at decuac.dec.com)
+-*/
+-
+-
+-/*
+-there is some egregious use of globals, void functions, and whatnot
+-in this code. it is mostly due to the constraint that nothing must
+-be visible to the outside, and that the code must be structurally
+-simple. error checking is pitched out the window in spots, since an
+-error in the mnemosyne code should not affect whatever is being
+-instrumented if at all possible. this means no errors, no signals,
+-nothing. (this message brought to you by my ego, in case you think
+-I don't know how to write better code than this) :)
+-
+-mjr, hacking on Christmas, 1990.
+-*/
+-
+-#define REC_UNINIT 000
+-#define REC_INITTED 001
+-#define REC_ERR 002
+-#define REC_ON 010
+-#define REC_ONOFF 020
+-static int rec_state = REC_UNINIT;
+-
+-/*
+-this method of storing the symbol maps is not the most efficient, but
+-then that's not important here, since all we're trying to do is find
+-memory leaks. if you choose to improve the symbol management to use
+-bucketed hash tables, please contact the author and the code will be
+-updated :) - besides, since we do file I/O every time you malloc or
+-free something, there's no way in hell this is going to set any new
+-records for speed.
+-*/
+-
+-
+-/* storage for code/line # entry */
+-struct sym {
+- char *labl;
+- int lineno;
+- int mapno;
+- int mallcnt;
+- float avsiz;
+- struct sym *next;
+-};
+-
+-
+-
+-/* static symbol map */
+-static struct {
+- FILE *fp;
+- FILE *log;
+- int fd;
+-
+- long nalloc; /* count of allocations */
+- long nrlloc; /* count of re-allocations */
+- long nfree; /* count of frees */
+- long nbfree; /* count of bad frees */
+- long ninuse; /* known allocated memory in use */
+- float avgsiz; /* average malloc size */
+-
+- /* one entry per pointer returned by malloc */
+- int pmap; /* current next ptr map to alloc */
+- struct ptr *phash[HASHSIZ];
+-
+- /* one entry per line of code that calls malloc/realloc, etc */
+- int lmap; /* current next line map to alloc */
+- struct sym *shash[HASHSIZ]; /* hash access */
+-} map;
+-
+-
+-
+-
+-/* print a locale record with checks for closed log file */
+-static void
+-ploc(lab,lin,siz)
+-char *lab;
+-int lin;
+-int siz;
+-{
+- if(map.log == (FILE *)0)
+- return;
+- if(lab != (char *)0)
+- (void)fprintf(map.log," \"%s\"",lab);
+- else
+- (void)fprintf(map.log," unknown");
+- if(lin != -1)
+- (void)fprintf(map.log," line:%d",lin);
+- if(siz != -1)
+- (void)fprintf(map.log," size:%d",siz);
+-}
+-
+-
+-
+-
+-/* print a symbol map entry with checks for closed log file */
+-static void
+-psym(s)
+-struct sym *s;
+-{
+- if(map.log == (FILE *)0)
+- return;
+- (void)fprintf(map.log," \"%s\"",s->labl);
+- if(s->lineno != -1)
+- (void)fprintf(map.log," line:%d",s->lineno);
+-}
+-
+-
+-
+-
+-/* output a warning message with checks for closed log file */
+-static void
+-pmsg(s)
+-char *s;
+-{
+- if(map.log == (FILE *)0)
+- return;
+- (void)fprintf(map.log,"%s",s);
+-}
+-
+-
+-
+-
+-/* save an entry to the .lines file */
+-static void
+-savesym(s)
+-struct sym *s;
+-{
+- if(map.fp == (FILE *)0)
+- return;
+-
+- (void)fprintf(map.fp,"%d\t%d\t%.1f\t%d\t%s\n",
+- s->mapno,s->mallcnt,s->avsiz,s->lineno,s->labl);
+-}
+-
+-
+-
+-
+-/* save an entry in the pointer map file */
+-static void
+-saveptr(p)
+-register struct ptr *p;
+-{
+- if(lseek(map.fd,(off_t)(p->map * sizeof(p->dsk)),0) !=
+- (off_t)(p->map * sizeof(p->dsk))) {
+- pmsg("mnemosyne: cannot seek in pointer map file\n");
+- rec_state |= REC_ERR;
+- return;
+- }
+-
+- if(write(map.fd,(char *)&(p->dsk),sizeof(p->dsk)) != sizeof(p->dsk)) {
+- pmsg("mnemosyne: cannot write in pointer map file\n");
+- rec_state |= REC_ERR;
+- return;
+- }
+-}
+-
+-
+-
+-
+-/* initialize everything - symbol tables, files, and maps */
+-static void
+-initmap()
+-{
+- register int xp;
+-
+- if(rec_state & REC_INITTED)
+- return;
+-
+- if((map.fp = fopen(LINESFILE,"w")) == (FILE *)0)
+- return;
+- if((map.fd = open(PTRFILE,O_RDWR|O_CREAT|O_TRUNC,0600)) < 0) {
+- (void)fclose(map.fp);
+- return;
+- }
+-
+- map.log = stderr;
+- map.lmap = map.pmap = 0;
+- map.nalloc = map.nrlloc = map.nfree = map.nbfree = 0L;
+- map.ninuse = 0L;
+- map.avgsiz = 0.0;
+-
+- for(xp = 0; xp < HASHSIZ; xp++) {
+- map.phash[xp] = (struct ptr *)0;
+- map.shash[xp] = (struct sym *)0;
+- }
+-
+- rec_state = REC_INITTED | REC_ON;
+-}
+-
+-
+-
+-
+-/* set logging to a FILE * */
+-void
+-mnem_setlog(fp)
+-FILE *fp;
+-{
+- map.log = fp;
+-}
+-
+-
+-
+-
+-/* return state of the recorder */
+-int
+-mnem_recording()
+-{
+- return((rec_state & REC_ON) && !(rec_state & REC_ERR));
+-}
+-
+-
+-
+-
+-/* turn on or off recording */
+-int
+-mnem_setrecording(val)
+-int val;
+-{
+- if(!(rec_state & REC_INITTED))
+- initmap();
+-
+- if(val)
+- rec_state |= REC_ON;
+- else
+- rec_state &= ~REC_ON;
+-
+- if(map.fp != (FILE *)0)
+- (void)fflush(map.fp);
+-
+- rec_state |= REC_ONOFF;
+- return(0);
+-}
+-
+-
+-
+-
+-/* lookup a pointer record - search pointer hash table */
+-static struct ptr *
+-lookupptr(ptr)
+-mall_t ptr;
+-{
+- register struct ptr *p;
+-
+- /* this probably give simply terrible hash performance */
+- p = map.phash[(unsigned long)ptr % HASHSIZ];
+- while(p != (struct ptr *)0) {
+- if(ptr == p->ptr)
+- return(p);
+- p = p->next;
+- }
+- return((struct ptr *)0);
+-}
+-
+-
+-
+-
+-/*
+- * polynomial conversion ignoring overflows
+- * [this seems to work remarkably well, in fact better
+- * then the ndbm hash function. Replace at your own risk]
+- * use: 65599 nice.
+- * 65587 even better.
+- * author: oz at nexus.yorku.ca
+- */
+-static unsigned int
+-dbm_hash(str)
+-register char *str;
+-{
+- register unsigned int n = 0;
+-
+- while(*str != '\0')
+- n = *str++ + 65599 * n;
+- return(n);
+-}
+-
+-
+-
+-
+-/* lookup a line/source entry by name (search hash table) */
+-static struct sym *
+-lookupsymbyname(nam,lin)
+-char *nam;
+-int lin;
+-{
+- register struct sym *s;
+- char *p = nam;
+-
+- if(p == (char *)0)
+- p = "unknown";
+-
+- s = map.shash[(dbm_hash(p) + lin) % HASHSIZ];
+- while(s != (struct sym *)0) {
+- if(!strcmp(s->labl,nam) && s->lineno == lin)
+- return(s);
+- s = s->next;
+- }
+-
+- return((struct sym *)0);
+-}
+-
+-
+-
+-
+-/* lookup a line/source entry by number (exhaustively search hash table) */
+-static struct sym *
+-lookupsymbynum(num)
+-int num;
+-{
+- register struct sym *s;
+- register int x;
+-
+- for(x = 0; x < HASHSIZ; x++) {
+- s = map.shash[x];
+- while(s != (struct sym *)0) {
+- if(s->mapno == num)
+- return(s);
+- s = s->next;
+- }
+- }
+- return((struct sym *)0);
+-}
+-
+-
+-
+-/* stuff a pointer's value in the pointer map table */
+-static void
+-storeptr(ptr,siz,lab,lin)
+-mall_t ptr;
+-int siz;
+-char *lab;
+-int lin;
+-{
+- register struct ptr *p;
+- register struct sym *s;
+- int hv;
+-
+- /*
+- is there is no existing symbol entry for this line of code...
+- we must needs make one - and painful it is...
+- */
+- if((s = lookupsymbyname(lab,lin)) == (struct sym *)0) {
+- s = (struct sym *)malloc(sizeof(struct sym));
+- if(s == (struct sym *)0) {
+- pmsg("mnemosyne: cannot allocate sym entry\n");
+- rec_state |= REC_ERR;
+- return;
+- }
+-
+- /*
+- this is funky - since we know the label is (?)
+- compiled-in, we can just keep a pointer to it,
+- rather than copying our own version of it.
+- */
+- if(lab != (char *)0)
+- s->labl = lab;
+- else
+- s->labl = "unknown";
+-
+- s->mapno = map.lmap++;
+-
+- /* add sym to hash table */
+- s->next = map.shash[hv = ((dbm_hash(s->labl) + lin) % HASHSIZ)];
+- map.shash[hv] = s;
+-
+- s->lineno = lin;
+- s->mallcnt = 1;
+- s->avsiz = siz;
+- savesym(s);
+- } else {
+- /* found an already defined symbol. store some averages */
+- s->avsiz = ((s->avsiz * s->mallcnt) + siz) / (s->mallcnt + 1);
+- (s->mallcnt)++;
+- }
+-
+- p = lookupptr(ptr);
+- if(p != (struct ptr *)0 && p->dsk.siz != 0) {
+- struct sym *x;
+-
+- pmsg("pointer re-allocated without being freed");
+- ploc(lab,lin,(int)siz);
+- if((x = lookupsymbynum(p->dsk.smap)) != (struct sym *)0) {
+- pmsg(" last allocated ");
+- psym(x);
+- }
+- pmsg("\n");
+- }
+-
+- /* heavy sigh. no entry for this pointer. make one. */
+- if(p == (struct ptr *)0) {
+- p = (struct ptr *)malloc(sizeof(struct ptr));
+- if(p == (struct ptr *)0) {
+- pmsg("mnemosyne: cannot expand pointer table\n");
+- rec_state |= REC_ERR;
+- return;
+- }
+-
+- /* link it in */
+- p->next = map.phash[(unsigned long)ptr % HASHSIZ];
+- map.phash[(unsigned long)ptr % HASHSIZ] = p;
+- }
+-
+- /* if we get to here (hazoo! hazaa!) both 's' and 'p' are OK */
+- p->ptr = ptr;
+- p->dsk.siz = siz;
+- p->dsk.smap = s->mapno;
+- p->map = map.pmap++;
+-
+- /* store the size */
+- map.ninuse += siz;
+-
+- saveptr(p);
+-}
+-
+-
+-
+-
+-/*
+-mark a pointer as now being free. note that a 1 is returned IF
+-the actual value should NOT be really passed to free()
+-*/
+-static int
+-freeptr(ptr,lab,lin)
+-mall_t ptr;
+-char *lab;
+-int lin;
+-{
+- register struct ptr *p;
+-
+- p = lookupptr(ptr);
+- if(p == (struct ptr *)0) {
+- pmsg("pointer freed that was never allocated");
+- ploc(lab,lin,-1);
+- pmsg("\n");
+- return(1);
+- }
+-
+- if(p != (struct ptr *)0 && p->dsk.siz == 0) {
+- struct sym *x;
+-
+- pmsg("pointer re-freed when already free");
+- ploc(lab,lin,-1);
+- if((x = lookupsymbynum(p->dsk.smap)) != (struct sym *)0) {
+- pmsg(" last allocated:");
+- psym(x);
+- }
+- pmsg("\n");
+- return(1);
+- }
+-
+- /* get some free */
+- map.ninuse -= p->dsk.siz;
+-
+- /* write in the map that it is free */
+- p->dsk.siz = 0;
+- saveptr(p);
+-
+- return(0);
+-}
+-
+-
+-
+-
+-/* pretend we are malloc() */
+-mall_t
+-mnem_malloc(siz,lab,lin)
+-unsigned siz;
+-char *lab;
+-int lin;
+-{
+- mall_t ret;
+-
+- if(!(rec_state & REC_INITTED))
+- initmap();
+-
+- if((ret = malloc(siz)) == (mall_t)0) {
+- pmsg("malloc returned null pointer at");
+- ploc(lab,lin,(int)siz);
+- pmsg("\n");
+- return(ret);
+- }
+-
+- if((rec_state & REC_ON) && !(rec_state & REC_ERR))
+- storeptr(ret,(int)siz,lab,lin);
+-
+- map.avgsiz = ((map.avgsiz * map.nalloc) + siz) / (map.nalloc + 1);
+- map.nalloc++;
+- return(ret);
+-}
+-
+-
+-
+-
+-/* pretend we are calloc() */
+-mall_t
+-mnem_calloc(cnt,siz,lab,lin)
+-unsigned cnt;
+-unsigned siz;
+-char *lab;
+-int lin;
+-{
+- mall_t ret;
+-
+- if(!(rec_state & REC_INITTED))
+- initmap();
+-
+- if((ret = calloc(cnt,siz)) == (mall_t)0) {
+- pmsg("calloc returned null pointer at");
+- ploc(lab,lin,(int)(siz * cnt));
+- pmsg("\n");
+- return(ret);
+- }
+-
+- if((rec_state & REC_ON) && !(rec_state & REC_ERR))
+- storeptr(ret,(int)(cnt * siz),lab,lin);
+-
+- map.avgsiz = ((map.avgsiz * map.nalloc) + siz) / (map.nalloc + 1);
+- map.nalloc++;
+- return(ret);
+-}
+-
+-
+-
+-
+-/* pretend we are realloc() */
+-mall_t
+-mnem_realloc(ptr,siz,lab,lin)
+-mall_t ptr;
+-unsigned siz;
+-char *lab;
+-int lin;
+-{
+- mall_t ret;
+-
+- if(!(rec_state & REC_INITTED))
+- initmap();
+-
+- if((ret = realloc(ptr,siz)) == (mall_t)0) {
+- pmsg("realloc returned null pointer at");
+- ploc(lab,lin,(int)siz);
+- pmsg("\n");
+- return(ret);
+- }
+-
+- if((rec_state & REC_ON) && !(rec_state & REC_ERR)) {
+- if(!freeptr(ptr,lab,lin))
+- storeptr(ret,(int)siz,lab,lin);
+- }
+-
+- map.nrlloc++;
+- return(ret);
+-}
+-
+-
+-
+-
+-
+-/* pretend we are free() */
+-void
+-mnem_free(ptr,lab,lin)
+-mall_t ptr;
+-char *lab;
+-int lin;
+-{
+- if(!(rec_state & REC_INITTED))
+- initmap();
+-
+- if((rec_state & REC_ON) && !(rec_state & REC_ERR))
+- if(freeptr(ptr,lab,lin) == 0) {
+- (void)free(ptr);
+- map.nfree++;
+- } else
+- map.nbfree++;
+-}
+-
+-
+-
+-
+-/* dump everything we know about nothing in particular */
+-int
+-mnem_writestats()
+-{
+- register struct sym *s;
+- register int x;
+-
+- if(map.fp == (FILE *)0)
+- return(-1);
+-
+- (void)fseek(map.fp,0L,0);
+-
+- /* dump our life's story */
+- (void)fprintf(map.fp,"#total allocations:%ld\n",map.nalloc);
+- (void)fprintf(map.fp,"#total re-allocations:%ld\n",map.nrlloc);
+- (void)fprintf(map.fp,"#total frees:%ld\n",map.nfree);
+-
+- if(map.nbfree != 0L)
+- (void)fprintf(map.fp,"#bad/dup frees:%ld\n",map.nbfree);
+-
+- (void)fprintf(map.fp,"#total allocated never freed:%ld\n",map.ninuse);
+-
+- (void)fprintf(map.fp,"#average size of allocations:%.1f\n",map.avgsiz);
+-
+- /* note if we detected an internal error */
+- if(rec_state & REC_ERR)
+- (void)fprintf(map.fp,
+- "#(figures likely inaccurate due to error)\n");
+-
+- /* note if the system was on all the time ? */
+- if(!(rec_state & REC_ON) || (rec_state & REC_ONOFF))
+- (void)fprintf(map.fp,
+- "#(figures likely inaccurate as recording was off)\n");
+-
+- /* write the legend */
+- (void)fprintf(map.fp,"#map#\tcalls\tave\tline#\tfile\n");
+-
+- for(x = 0; x < HASHSIZ; x++) {
+- s = map.shash[x];
+- while(s != (struct sym *)0) {
+- savesym(s);
+- s = s->next;
+- }
+- }
+-
+- (void)fflush(map.fp);
+- return(0);
+-}
+diff --git a/Cudd/mnemosyne/mnemosyne.h b/Cudd/mnemosyne/mnemosyne.h
+deleted file mode 100644
+index 910af91..0000000
+--- a/Cudd/mnemosyne/mnemosyne.h
++++ /dev/null
+@@ -1,73 +0,0 @@
+-/************************************************************************
+- * *
+- * Copyright (c) 1985 by *
+- * Digital Equipment Corporation, Maynard, MA *
+- * All rights reserved. *
+- * *
+- * The information in this software is subject to change without *
+- * notice and should not be construed as a commitment by Digital *
+- * Equipment Corporation. *
+- * *
+- * Digital assumes no responsibility for the use or reliability *
+- * of its software on equipment which is not supplied by Digital. *
+- * *
+- * Redistribution and use in source and binary forms are permitted *
+- * provided that the above copyright notice and this paragraph are *
+- * duplicated in all such forms and that any documentation, *
+- * advertising materials, and other materials related to such *
+- * distribution and use acknowledge that the software was developed *
+- * by Digital Equipment Corporation. The name of Digital Equipment *
+- * Corporation may not be used to endorse or promote products derived *
+- * from this software without specific prior written permission. *
+- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR *
+- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED *
+- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.*
+- * Do not take internally. In case of accidental ingestion, contact *
+- * your physician immediately. *
+- * *
+- ************************************************************************/
+-
+-#ifndef _INCL_MNEMOSYNE_H
+-
+-/*
+-/fats/tools/hsv/mnemosyne/mnemosyne.h,v 1.1.1.1 1995/06/06 18:18:28 fabio Exp
+-*/
+-
+-
+-/*
+-main include file for the mnemosyne memory allocation tracker. this file
+-provides some pre-processor fakes for malloc(), realloc() and family,
+-as well as forward declarations for the mnemosyne functions.
+-
+- Marcus J. Ranum, 1990. (mjr at decuac.dec.com)
+-*/
+-
+-
+-/* these disguise mnemosyne calls as calls to malloc and family */
+-#ifndef NOFAKEMALLOC
+-#define malloc(siz) mnem_malloc(siz,__FILE__,__LINE__)
+-#define calloc(siz,cnt) mnem_calloc(siz,cnt,__FILE__,__LINE__)
+-#define realloc(ptr,siz) mnem_realloc(ptr,siz,__FILE__,__LINE__)
+-#define free(ptr) mnem_free(ptr,__FILE__,__LINE__)
+-#endif
+-
+-
+-#ifdef MALLOC_IS_VOIDSTAR
+-typedef void *mall_t;
+-#else
+-typedef char *mall_t;
+-#endif
+-
+-extern mall_t mnem_malloc();
+-extern mall_t mnem_calloc();
+-extern mall_t mnem_realloc();
+-extern void mnem_free();
+-
+-/* some internal functions and oddimentia */
+-extern int mnem_recording();
+-extern int mnem_setrecording();
+-extern void mnem_setlog();
+-extern int mnem_writestats();
+-
+-#define _INCL_MNEMOSYNE_H
+-#endif
+diff --git a/Cudd/mnemosyne/mtest.c b/Cudd/mnemosyne/mtest.c
+deleted file mode 100644
+index 5a51a0a..0000000
+--- a/Cudd/mnemosyne/mtest.c
++++ /dev/null
+@@ -1,38 +0,0 @@
+-#include "mnemosyne.h"
+-
+-static char rcsid[] = "/fats/tools/hsv/mnemosyne/mtest.c,v 1.1.1.1 1995/06/06 18:18:27 fabio Exp";
+-
+-/*
+-test harness/demo of mnemosyne library. deliberately leaks memory on the
+-floor, double frees, frees unallocated memory, etc.
+-
+- Marcus J. Ranum, 1990. (mjr at decuac.dec.com)
+-*/
+-
+-
+-main()
+-{
+- char *d = "foobar";
+- char *xx;
+- int x;
+-
+- xx = malloc(922);
+- xx = malloc(123);
+-
+- /* huh ? */
+- xx = malloc(-9);
+-
+- /* waste some memory */
+- for(x = 1; x < 8; x++)
+- xx = malloc(x);
+-
+- /* free something we don't own */
+- free(d);
+-
+- /* double free something */
+- free(xx);
+- free(xx);
+-
+- /* not necessary - this triggers a better printout of statistics */
+- mnem_writestats();
+-}
+diff --git a/Cudd/sis/Makefile.sis b/Cudd/sis/Makefile.sis
+deleted file mode 100644
+index fb0c3e6..0000000
+--- a/Cudd/sis/Makefile.sis
++++ /dev/null
+@@ -1,97 +0,0 @@
+-# $Id$
+-#
+-# Cudd - DD package
+-#---------------------------
+-.SUFFIXES: .o .c .u
+-
+-RANLIB = ranlib
+-
+-CAD = /projects/octtools/octtools/$(MACHINE)
+-SIS = ..
+-LINTCREATEFLAG = -C
+-
+-# files for the package
+-P = bdd
+-PSRC = cuddAPI.c cuddAddAbs.c cuddAddApply.c cuddAddFind.c cuddAddIte.c \
+- cuddAddInv.c cuddAddNeg.c cuddAddWalsh.c cuddAndAbs.c \
+- cuddAnneal.c cuddApa.c cuddApprox.c cuddBddAbs.c cuddBddCorr.c \
+- cuddBddIte.c cuddBddPort.c cuddBridge.c cuddCache.c cuddCheck.c \
+- cuddClip.c cuddCof.c cuddCompose.c cuddDecomp.c cuddEssent.c \
+- cuddExact.c cuddExport.c cuddGenCof.c \
+- cuddGenetic.c cuddGroup.c cuddHarwell.c cuddInit.c cuddInteract.c \
+- cuddLCache.c cuddLevelQ.c cuddLinear.c cuddLiteral.c \
+- cuddMatMult.c cuddPriority.c cuddPwPt.c \
+- cuddRead.c cuddRef.c cuddReorder.c cuddSat.c cuddSign.c \
+- cuddSolve.c cuddSplit.c cuddSubsetHB.c cuddSubsetSP.c cuddSymmetry.c \
+- cuddTable.c cuddUtil.c cuddWindow.c cuddZddCount.c cuddZddFuncs.c \
+- cuddZddGroup.c cuddZddIsop.c cuddZddLin.c cuddZddMisc.c \
+- cuddZddPort.c cuddZddReord.c cuddZddSetop.c cuddZddSymm.c \
+- cuddZddUtil.c
+-POBJ = $(PSRC:.c=.o)
+-PHDR = cudd.h cuddInt.h cuddBdd.h
+-
+-# files for the test program
+-TARGET = testcudd
+-SRC = testcudd.c
+-OBJ = $(SRC:.c=.o)
+-HDR =
+-
+-LIBS = ../util/libutil.a ../st/libst.a
+-LINTLIBS= ../util/llib-lutil.ln ../st/llib-lst.ln
+-INCLUDE = -I$(CAD)/include -I$(SIS)/include
+-
+-CFLAGS = -g $(INCLUDE)
+-LDFLAGS = -g
+-LINTFLAGS = $(INCLUDE) ${LINTEXTRAS}
+-
+-#------------------------------------------------------
+-
+-$(TARGET): $(PHDR) $(OBJ) $(POBJ) $(LIBS)
+- $(CC) $(LDFLAGS) -o $(TARGET) $(OBJ) $(POBJ) $(LIBS)
+-
+-lint: $(PSRC) $(PHDR) $(SRC) $(HDR)
+- lint $(LINTFLAGS) $(SRC) $(PSRC) $(LINTLIBS)
+-
+-install: lib$(P).a llib-l$(P).ln
+-
+-lib$(P).a: $(POBJ)
+- ar cr $@ $?
+- $(RANLIB) $@
+-
+-unpack: lib$(P).a
+- @for i in $(POBJ); do \
+- ln -s $(SIS)/$(P)/$$i $(SIS)/unpack; \
+- done
+-
+-llib-l$(P).ln: $(PSRC) $(PHDR)
+- lint $(LINTFLAGS) ${LINTCREATEFLAG}$(P) -n $(PSRC)
+-
+-clean:
+- rm -f $(TARGET) *.a *.ln *.o \
+- [Tt]ags [Mm]ake.out lint malloc.out gmon.out __.SYMDEF *~
+-
+-tags: _force
+- @for i in $(PSRC) $(PHDR); do \
+- cwd=`pwd`; ctags -a $$cwd/$$i;
+- done;
+-
+-strip_depend:
+- sed '/^#--DO NOT CHANGE ANYTHING AFTER THIS LINE/,$$d' Makefile >mktemp
+- mv mktemp Makefile
+-
+-depend:
+- sed '/^#--DO NOT CHANGE ANYTHING AFTER THIS LINE/,$$d' Makefile >mktemp
+- echo '#--DO NOT CHANGE ANYTHING AFTER THIS LINE' >>mktemp
+- $(CAD)/bin/cc-M $(CFLAGS) $(PSRC) | \
+- sed 's|$(CAD)|$$(CAD)|g' | \
+- grep -v '/usr/include' >>mktemp
+- mv mktemp Makefile
+-
+-#-------------------------- IBM 3090 support -----------------
+-IBMHOST = opua
+-IBMDIST = /users2/sis
+-ibmdist: $(PSRC) $(PHDR)
+- rdist -Richw $(PSRC) $(PHDR) $(IBMHOST):$(IBMDIST)
+-#-------------------------------------------------------------
+-_force:
+-
+diff --git a/Cudd/sis/cuddBdd.h b/Cudd/sis/cuddBdd.h
+deleted file mode 100644
+index 2a688d7..0000000
+--- a/Cudd/sis/cuddBdd.h
++++ /dev/null
+@@ -1,382 +0,0 @@
+-/**CHeaderFile*****************************************************************
+-
+- FileName [cuddBdd.h]
+-
+- PackageName [cudd]
+-
+- Synopsis [Defines interface for the CU package to work with the
+- ucb interface.]
+-
+- Description []
+-
+- Author [Abelardo Pardo]
+-
+- Copyright [Copyright (c) 1994-1996 The Univ. of Colorado.
+- All rights reserved.
+-
+- Permission is hereby granted, without written agreement and without license
+- or royalty fees, to use, copy, modify, and distribute this software and its
+- documentation for any purpose, provided that the above copyright notice and
+- the following two paragraphs appear in all copies of this software.
+-
+- IN NO EVENT SHALL THE UNIVERSITY OF COLORADO BE LIABLE TO ANY PARTY FOR
+- DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
+- OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
+- COLORADO HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-
+- THE UNIVERSITY OF COLORADO SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+- FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN
+- "AS IS" BASIS, AND THE UNIVERSITY OF COLORADO HAS NO OBLIGATION TO PROVIDE
+- MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.]
+-
+- Revision [$Id: cuddBdd.h,v 1.2 1996/07/30 20:42:04 bobbie Exp $]
+-
+-******************************************************************************/
+-
+-#ifndef _BDD
+-#define _BDD
+-
+-/*---------------------------------------------------------------------------*/
+-/* Nested includes */
+-/*---------------------------------------------------------------------------*/
+-
+-#include "var_set.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-/*---------------------------------------------------------------------------*/
+-/* Constant declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-#define boolean int
+-/*
+- * foreach macro in the most misesque tradition
+- * bdd_gen_free always returns 0
+- *
+- * CAUTION: in the context of the port to the CUDD package, it is assumed that
+- * dynamic reordering will not occur while there are open generators. It is
+- * the user's responsibility to make sure dynamic reordering doesn't occur.
+- * As long as new nodes are not created during generation, and you don't
+- * explicitly call dynamic reordering, you should be okay.
+- */
+-
+-/*
+- * foreach_bdd_cube(fn, gen, cube)
+- * bdd_t *fn;
+- * bdd_gen *gen;
+- * array_t *cube; - return
+- *
+- * foreach_bdd_cube(fn, gen, cube) {
+- * ...
+- * }
+- */
+-#define foreach_bdd_cube(fn, gen, cube)\
+- for((gen) = bdd_first_cube(fn, &cube);\
+- bdd_is_gen_empty(gen) ? bdd_gen_free(gen) : TRUE;\
+- (void) bdd_next_cube(gen, &cube))
+-
+-/*
+- * foreach_bdd_node(fn, gen, node)
+- * bdd_t *fn;
+- * bdd_gen *gen;
+- * bdd_node *node; - return
+- */
+-#define foreach_bdd_node(fn, gen, node)\
+- for((gen) = bdd_first_node(fn, &node);\
+- bdd_is_gen_empty(gen) ? bdd_gen_free(gen) : TRUE;\
+- (void) bdd_next_node(gen, &node))
+-
+-/*
+- * Default settings.
+- */
+-#define BDD_NO_LIMIT ((1<<30)-2)
+-#define BDD_DFLT_ITE_ON TRUE
+-#define BDD_DFLT_ITE_RESIZE_AT 75
+-#define BDD_DFLT_ITE_MAX_SIZE 1000000
+-#define BDD_DFLT_ITE_CONST_ON TRUE
+-#define BDD_DFLT_ITE_CONST_RESIZE_AT 75
+-#define BDD_DFLT_ITE_CONST_MAX_SIZE 1000000
+-#define BDD_DFLT_ADHOC_ON TRUE
+-#define BDD_DFLT_ADHOC_RESIZE_AT 0
+-#define BDD_DFLT_ADHOC_MAX_SIZE 10000000
+-#define BDD_DFLT_GARB_COLLECT_ON TRUE
+-#define BDD_DFLT_DAEMON NIL(void)
+-#define BDD_DFLT_MEMORY_LIMIT BDD_NO_LIMIT
+-#define BDD_DFLT_NODE_RATIO 2.0
+-#define BDD_DFLT_INIT_BLOCKS 10
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-typedef struct DdManager bdd_manager; /* referenced via a pointer only */
+-typedef unsigned int bdd_variableId; /* the id of the variable in a bdd node */
+-typedef struct DdNode bdd_node; /* referenced via a pointer only */
+-typedef int bdd_literal; /* integers in the set { 0, 1, 2 } */
+-
+-/* This is to avoid problems with the mnemosyne library, which redefines
+-** free.
+-*/
+-#ifdef MNEMOSYNE
+-#undef free
+-#endif
+-
+-typedef struct bdd_t {
+- boolean free; /* TRUE if this is free, FALSE otherwise ... */
+- bdd_node *node; /* ptr to the top node of the function */
+- bdd_manager *mgr; /* the manager */
+-} bdd_t;
+-
+-/*
+- * Initialization data structure. Not supported in CMU package.
+- */
+-typedef struct bdd_mgr_init {
+- struct {
+- boolean on; /* TRUE/FALSE: is the cache on */
+- unsigned int resize_at; /* percentage at which to resize (e.g. 85% is 85); doesn't apply to adhoc */
+- unsigned int max_size; /* max allowable number of buckets; for adhoc, max allowable number of entries */
+- } ITE_cache,
+- ITE_const_cache,
+- adhoc_cache;
+- struct {
+- boolean on; /* TRUE/FALSE: is the garbage collector on */
+- } garbage_collector;
+- struct {
+- void (*daemon)(); /* used for callback when memory limit exceeded */
+- unsigned int limit; /* upper bound on memory allocated by the manager; in megabytes */
+- } memory;
+- struct {
+- float ratio; /* allocate new bdd_nodes to achieve ratio of used to unused nodes */
+- unsigned int init_blocks; /* number of bdd_nodeBlocks initially allocated */
+- } nodes;
+-} bdd_mgr_init;
+-
+-/*
+- * Match types for BDD minimization.
+- */
+-typedef enum {
+- BDD_MIN_TSM, /* two-side match */
+- BDD_MIN_OSM, /* one-side match */
+- BDD_MIN_OSDM /* one-side DC match */
+-} bdd_min_match_type_t;
+-
+-/*
+- * Statistics and Other Queries
+- */
+-typedef struct bdd_cache_stats {
+- unsigned int hits;
+- unsigned int misses;
+- unsigned int collisions;
+- unsigned int inserts;
+-} bdd_cache_stats;
+-
+-typedef struct bdd_stats {
+- struct {
+- bdd_cache_stats hashtable; /* the unique table; collisions and inserts fields not used */
+- bdd_cache_stats itetable;
+- bdd_cache_stats consttable;
+- bdd_cache_stats adhoc;
+- } cache; /* various cache statistics */
+- struct {
+- unsigned int calls;
+- struct {
+- unsigned int trivial;
+- unsigned int cached;
+- unsigned int full;
+- } returns;
+- } ITE_ops,
+- ITE_constant_ops,
+- adhoc_ops;
+- struct {
+- unsigned int total;
+- } blocks; /* bdd_nodeBlock count */
+- struct {
+- unsigned int used;
+- unsigned int unused;
+- unsigned int total;
+- unsigned int peak;
+- } nodes; /* bdd_node count */
+- struct {
+- unsigned int used;
+- unsigned int unused;
+- unsigned int total;
+- unsigned int blocks;
+- } extptrs; /* bdd_t count */
+- struct {
+- unsigned int times; /* the number of times the garbage-collector has run */
+- unsigned int nodes_collected; /* cumulative number of nodes collected over life of manager */
+- long runtime; /* cumulative CPU time spent garbage collecting */
+- } gc;
+- struct {
+- int first_sbrk; /* value of sbrk at start of manager; used to analyze memory usage */
+- int last_sbrk; /* value of last sbrk (see "man sbrk") fetched; used to analyze memory usage */
+- unsigned int manager;
+- unsigned int nodes;
+- unsigned int hashtable;
+- unsigned int ext_ptrs;
+- unsigned int ITE_cache;
+- unsigned int ITE_const_cache;
+- unsigned int adhoc_cache;
+- unsigned int total;
+- } memory; /* memory usage */
+-} bdd_stats;
+-
+-/*
+- * Traversal of BDD Formulas
+- */
+-
+-typedef struct bdd_gen bdd_gen;
+-
+-/*
+- * These are the hooks for stuff that uses bdd's
+- *
+- * There are three hooks, and users may use them in whatever
+- * way they wish; these hooks are guaranteed to never be used
+- * by the bdd package.
+- */
+-typedef struct bdd_external_hooks {
+- char *network;
+- char *mdd;
+- char *undef1;
+-} bdd_external_hooks;
+-
+-/*
+- * Dynamic reordering.
+- */
+-typedef enum {
+- BDD_REORDER_SIFT,
+- BDD_REORDER_WINDOW,
+- BDD_REORDER_NONE,
+- BDD_REORDER_SAME,
+- BDD_REORDER_RANDOM,
+- BDD_REORDER_RANDOM_PIVOT,
+- BDD_REORDER_SIFT_CONVERGE,
+- BDD_REORDER_SYMM_SIFT,
+- BDD_REORDER_SYMM_SIFT_CONV,
+- BDD_REORDER_WINDOW2,
+- BDD_REORDER_WINDOW3,
+- BDD_REORDER_WINDOW4,
+- BDD_REORDER_WINDOW2_CONV,
+- BDD_REORDER_WINDOW3_CONV,
+- BDD_REORDER_WINDOW4_CONV,
+- BDD_REORDER_GROUP_SIFT,
+- BDD_REORDER_GROUP_SIFT_CONV,
+- BDD_REORDER_ANNEALING,
+- BDD_REORDER_GENETIC
+-} bdd_reorder_type_t;
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*
+- * BDD Manager Allocation And Destruction
+- */
+-extern void bdd_end (bdd_manager *);
+-extern void bdd_register_daemon (bdd_manager *, void (*daemon)());
+-extern void bdd_set_mgr_init_dflts (bdd_mgr_init *);
+-extern bdd_manager *bdd_start (int);
+-extern bdd_manager *bdd_start_with_params (int, bdd_mgr_init *);
+-
+-/*
+- * BDD Variable Allocation
+- */
+-extern bdd_t *bdd_create_variable (bdd_manager *);
+-extern bdd_t *bdd_get_variable (bdd_manager *, bdd_variableId);
+-
+-/*
+- * BDD Formula Management
+- */
+-extern bdd_t *bdd_dup (bdd_t *);
+-extern void bdd_free (bdd_t *);
+-
+-/*
+- * Operations on BDD Formulas
+- */
+-extern bdd_t *bdd_and (bdd_t *, bdd_t *, boolean, boolean);
+-extern bdd_t *bdd_and_smooth (bdd_t *, bdd_t *, array_t *);
+-extern bdd_t *bdd_between (bdd_t *, bdd_t *);
+-extern bdd_t *bdd_cofactor (bdd_t *, bdd_t *);
+-extern bdd_t *bdd_compose (bdd_t *, bdd_t *, bdd_t *);
+-extern bdd_t *bdd_consensus (bdd_t *, array_t *);
+-extern bdd_t *bdd_cproject (bdd_t *, array_t *);
+-extern bdd_t *bdd_else (bdd_t *);
+-extern bdd_t *bdd_ite (bdd_t *, bdd_t *, bdd_t *, boolean, boolean, boolean);
+-extern bdd_t *bdd_minimize (bdd_t *, bdd_t *);
+-extern bdd_t *bdd_minimize_with_params (bdd_t *, bdd_t *, bdd_min_match_type_t, boolean, boolean, boolean);
+-extern bdd_t *bdd_not (bdd_t *);
+-extern bdd_t *bdd_one (bdd_manager *);
+-extern bdd_t *bdd_or (bdd_t *, bdd_t *, boolean, boolean);
+-extern bdd_t *bdd_smooth (bdd_t *, array_t *);
+-extern bdd_t *bdd_substitute (bdd_t *, array_t *, array_t *);
+-extern bdd_t *bdd_then (bdd_t *);
+-extern bdd_t *bdd_top_var (bdd_t *);
+-extern bdd_t *bdd_xnor (bdd_t *, bdd_t *);
+-extern bdd_t *bdd_xor (bdd_t *, bdd_t *);
+-extern bdd_t *bdd_zero (bdd_manager *);
+-
+-/*
+- * Queries about BDD Formulas
+- */
+-extern boolean bdd_equal (bdd_t *, bdd_t *);
+-extern boolean bdd_is_cube (bdd_t *);
+-extern boolean bdd_is_tautology (bdd_t *, boolean);
+-extern boolean bdd_leq (bdd_t *, bdd_t *, boolean, boolean);
+-
+-extern double bdd_count_onset (bdd_t *, array_t *);
+-extern bdd_manager *bdd_get_manager (bdd_t *);
+-extern bdd_node *bdd_get_node (bdd_t *, boolean *);
+-extern void bdd_get_stats (bdd_manager *, bdd_stats *);
+-extern var_set_t *bdd_get_support (bdd_t *);
+-extern array_t *bdd_get_varids (array_t *);
+-extern unsigned int bdd_num_vars (bdd_manager *);
+-extern void bdd_print (bdd_t *);
+-extern void bdd_print_stats (bdd_stats, FILE *);
+-extern int bdd_size (bdd_t *);
+-extern bdd_variableId bdd_top_var_id (bdd_t *);
+-extern bdd_t *bdd_create_variable_after (bdd_manager *, bdd_variableId);
+-extern bdd_variableId bdd_get_id_from_level (bdd_manager *, long);
+-extern long bdd_top_var_level (bdd_manager *, bdd_t *);
+-
+-extern int bdd_gen_free (bdd_gen *);
+-
+-/*
+- * These are NOT to be used directly; only indirectly in the macros.
+- */
+-extern bdd_gen *bdd_first_cube (bdd_t *, array_t **);
+-extern boolean bdd_next_cube (bdd_gen *, array_t **);
+-extern bdd_gen *bdd_first_node (bdd_t *, bdd_node **);
+-extern boolean bdd_next_node (bdd_gen *, bdd_node **);
+-extern boolean bdd_is_gen_empty (bdd_gen *);
+-
+-/*
+- * Miscellaneous
+- */
+-extern void bdd_set_gc_mode (bdd_manager *, boolean);
+-
+-extern bdd_external_hooks *bdd_get_external_hooks (bdd_manager *);
+-
+-extern void bdd_dynamic_reordering (bdd_manager *, bdd_reorder_type_t);
+-
+-extern int bdd_read_reordering_flag (bdd_manager *);
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-
+-#endif /* _BDD */
+diff --git a/Cudd/sis/cuddBddPort.c b/Cudd/sis/cuddBddPort.c
+deleted file mode 100644
+index 7b97956..0000000
+--- a/Cudd/sis/cuddBddPort.c
++++ /dev/null
+@@ -1,1954 +0,0 @@
+-/**CFile***********************************************************************
+-
+- FileName [cuddBddPort.c]
+-
+- PackageName [cudd]
+-
+- Synopsis [SIS interface to the Decision Diagram Package of the
+- University of Colorado.]
+-
+- Description [This file implements an interface between the functions in
+- the Berkeley BDD package and the functions provided by the CUDD (decision
+- diagram) package from the University of Colorado. The CUDD package is a
+- generic implementation of a decision diagram data structure. For the time
+- being, only Boole expansion is implemented and the leaves in the
+- in the nodes can be the constants zero, one or any arbitrary value.]
+-
+- Author [Abelardo Pardo]
+-
+- Copyright [Copyright (c) 1994-1996 The Univ. of Colorado.
+- All rights reserved.
+-
+- Permission is hereby granted, without written agreement and without license
+- or royalty fees, to use, copy, modify, and distribute this software and its
+- documentation for any purpose, provided that the above copyright notice and
+- the following two paragraphs appear in all copies of this software.
+-
+- IN NO EVENT SHALL THE UNIVERSITY OF COLORADO BE LIABLE TO ANY PARTY FOR
+- DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
+- OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
+- COLORADO HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-
+- THE UNIVERSITY OF COLORADO SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+- FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN
+- "AS IS" BASIS, AND THE UNIVERSITY OF COLORADO HAS NO OBLIGATION TO PROVIDE
+- MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.]
+-
+-******************************************************************************/
+-
+-#include "util.h"
+-#include "array.h"
+-#include "st.h"
+-
+-#ifdef EXTERN
+-#undef EXTERN
+-#endif
+-#define EXTERN
+-#include "cuddInt.h"
+-#include "cuddBdd.h"
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Constant declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-struct bdd_gen {
+- bdd_manager *manager;
+- DdGen *ddGen;
+- array_t *cube;
+-};
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-#ifndef lint
+-static char rcsid[] DD_UNUSED = "$Id: cuddBddPort.c,v 1.11 1996/05/08 06:13:08 fabio Exp $";
+-#endif
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-static bdd_t * bdd_construct_bdd_t (DdManager *mgr, DdNode * fn);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Terminates the bdd package.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-void
+-bdd_end(mgr)
+-bdd_manager *mgr;
+-{
+- if (mgr->hooks != NULL) FREE(mgr->hooks);
+- Cudd_Quit(mgr);
+-
+-} /* end of bdd_end */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Initialize manager with the options given in mgr_init.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-void
+-bdd_set_mgr_init_dflts(mgr_init)
+-bdd_mgr_init *mgr_init;
+-{
+- fprintf(stderr,"CU DD Package: bdd_set_mgr_init_dflts translated to no-op\n");
+- return;
+-
+-} /* end of bdd_set_mgr_init_dflts */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Starts the manager with nvariables variables.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_manager *
+-bdd_start(nvariables)
+-int nvariables;
+-{
+- DdManager *mgr;
+- bdd_external_hooks *hooks;
+-
+- mgr = Cudd_Init((unsigned int)nvariables,0,CUDD_UNIQUE_SLOTS,
+- CUDD_CACHE_SLOTS,0);
+-
+- hooks = ALLOC(bdd_external_hooks,1);
+- hooks->mdd = hooks->network = hooks->undef1 = (char *) 0;
+- mgr->hooks = (char *) hooks;
+-
+- return (bdd_manager *)mgr;
+-
+-} /* end of bdd_start */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Starts the manager with parameters.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_manager *
+-bdd_start_with_params(nvariables, mgr_init)
+-int nvariables;
+-bdd_mgr_init *mgr_init;
+-{
+- fprintf(stderr,"CU DD Package: bdd_start_with_parameters bypassed\n");
+- return (bdd_manager *)Cudd_Init((unsigned int)nvariables,0,
+- CUDD_UNIQUE_SLOTS,CUDD_CACHE_SLOTS,0);
+-
+-} /* end of bdd_start_with_params */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Creates a new variable in the manager.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_create_variable(mgr)
+-bdd_manager *mgr;
+-{
+- DdNode *var;
+- DdManager *dd = (DdManager *) mgr;
+- DdNode *one = DD_ONE(dd);
+-
+- if (dd->size >= CUDD_MAXINDEX -1) return(NULL);
+- do {
+- dd->reordered = 0;
+- var = cuddUniqueInter(dd,dd->size,one,Cudd_Not(one));
+- } while (dd->reordered == 1);
+-
+- if (var == NULL) return(NULL);
+- cuddRef(var);
+- return(bdd_construct_bdd_t(dd,var));
+-
+-} /* end of bdd_create_variable */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Creates a new variable and positions it after the
+- variable with the specified index.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_create_variable_after(mgr, after_id)
+-bdd_manager *mgr;
+-bdd_variableId after_id;
+-{
+- DdNode *var;
+- DdManager *dd = (DdManager *) mgr;
+- int level;
+-
+- if (after_id >= dd->size) return(NULL);
+- level = 1 + dd->perm[after_id];
+- var = Cudd_bddNewVarAtLevel(dd,level);
+- if (var == NULL) return(NULL);
+- cuddRef(var);
+- return(bdd_construct_bdd_t(dd,var));
+-
+-} /* end of bdd_create_variable_after */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns the BDD representing the variable with given ID.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_get_variable(mgr, variable_ID)
+-bdd_manager *mgr;
+-bdd_variableId variable_ID; /* unsigned int */
+-{
+- DdNode *var;
+- DdManager *dd = (DdManager *) mgr;
+- DdNode *one = DD_ONE(dd);
+-
+- if (variable_ID >= CUDD_MAXINDEX -1) return(NULL);
+- do {
+- dd->reordered = 0;
+- var = cuddUniqueInter(dd,(int)variable_ID,one,Cudd_Not(one));
+- } while (dd->reordered == 1);
+-
+- if (var == NULL) return(NULL);
+- cuddRef(var);
+- return(bdd_construct_bdd_t(dd,var));
+-
+-} /* end of bdd_get_variable */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Creates a copy of the BDD.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_dup(f)
+-bdd_t *f;
+-{
+- cuddRef(f->node);
+- return(bdd_construct_bdd_t((DdManager *)f->mgr,f->node));
+-
+-} /* end of bdd_dup */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Deletes the BDD of f.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-void
+-bdd_free(f)
+-bdd_t *f;
+-{
+- if (f == NULL) {
+- fail("bdd_free: trying to free a NULL bdd_t");
+- }
+-
+- if (f->free == TRUE) {
+- fail("bdd_free: trying to free a freed bdd_t");
+- }
+-
+- Cudd_RecursiveDeref((DdManager *)f->mgr,f->node);
+- /* This is a bit overconservative. */
+- f->node = 0;
+- f->mgr = 0;
+- f->free = 0;
+- FREE(f);
+- return;
+-
+-} /* end of bdd_free */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [And of two BDDs.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_and(f, g, f_phase, g_phase)
+-bdd_t *f;
+-bdd_t *g;
+-boolean f_phase;
+-boolean g_phase;
+-{
+- DdManager *dd;
+- DdNode *newf,*newg,*fandg;
+- bdd_t *result;
+-
+- /* Make sure both BDDs belong to the same manager. */
+- assert(f->mgr == g->mgr);
+-
+- /* Modify the phases of the operands according to the parameters. */
+- if (!f_phase) {
+- newf = Cudd_Not(f->node);
+- } else {
+- newf = f->node;
+- }
+- if (!g_phase) {
+- newg = Cudd_Not(g->node);
+- } else {
+- newg = g->node;
+- }
+-
+- /* Perform the AND operation */
+- dd = (DdManager *)f->mgr;
+- fandg = Cudd_bddAnd((DdManager *)f->mgr,newf,newg);
+- if (fandg == NULL) return(NULL);
+- cuddRef(fandg);
+- result = bdd_construct_bdd_t(dd,fandg);
+-
+- return(result);
+-
+-} /* end of bdd_and */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Abstracts variables from the product of two BDDs.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_and_smooth(f, g, smoothing_vars)
+-bdd_t *f;
+-bdd_t *g;
+-array_t *smoothing_vars; /* of bdd_t *'s */
+-{
+- int i;
+- bdd_t *variable;
+- DdNode *cube,*tmpDd,*result;
+- DdManager *mgr;
+-
+- /* Make sure both operands belong to the same manager. */
+- assert(f->mgr == g->mgr);
+-
+- /* The Boulder package needs the smothing variables passed as a cube.
+- ** Therefore we must build that cube from the indices of variables
+- ** in the array before calling the procedure.
+- */
+- mgr = (DdManager *)f->mgr;
+- Cudd_Ref(cube = DD_ONE(mgr));
+- for (i = 0; i < array_n(smoothing_vars); i++) {
+- variable = array_fetch(bdd_t *,smoothing_vars,i);
+-
+- /* Make sure the variable belongs to the same manager. */
+- assert(mgr == variable->mgr);
+-
+- tmpDd = Cudd_bddAnd(mgr,cube,variable->node);
+- if (tmpDd == NULL) {
+- Cudd_RecursiveDeref(mgr,cube);
+- return(NULL);
+- }
+- cuddRef(tmpDd);
+- Cudd_RecursiveDeref(mgr, cube);
+- cube = tmpDd;
+- }
+-
+- /* Perform the smoothing */
+- result = Cudd_bddAndAbstract(mgr,f->node,g->node,cube);
+- if (result == NULL) {
+- Cudd_RecursiveDeref(mgr, cube);
+- return(NULL);
+- }
+- cuddRef(result);
+- /* Get rid of temporary results. */
+- Cudd_RecursiveDeref(mgr, cube);
+-
+- /* Build the bdd_t structure for the result */
+- return(bdd_construct_bdd_t(mgr,result));
+-
+-} /* end of bdd_and_smooth */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Return a minimum size BDD between bounds.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_between(f_min, f_max)
+-bdd_t *f_min;
+-bdd_t *f_max;
+-{
+- bdd_t *temp, *ret;
+-
+- temp = bdd_or(f_min, f_max, 1, 0);
+- ret = bdd_minimize(f_min, temp);
+- bdd_free(temp);
+- return(ret);
+-
+-} /* end of bdd_between */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Computes the cofactor of f with respect to g.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_cofactor(f, g)
+-bdd_t *f;
+-bdd_t *g;
+-{
+- DdNode *result;
+-
+- /* Make sure both operands belong to the same manager */
+- assert(f->mgr == g->mgr);
+-
+- /* We use Cudd_bddConstrain instead of Cudd_Cofactor for generality. */
+- result = Cudd_bddConstrain((DdManager *)f->mgr,f->node,g->node);
+- if (result == NULL) return(NULL);
+- cuddRef(result);
+- return(bdd_construct_bdd_t((DdManager *)f->mgr,result));
+-
+-} /* end of bdd_cofactor */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Functional composition of a function by a variable.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_compose(f, v, g)
+-bdd_t *f;
+-bdd_t *v;
+-bdd_t *g;
+-{
+- DdNode *result;
+-
+- /* Make sure all operands belong to the same manager. */
+- assert(f->mgr == g->mgr);
+- assert(f->mgr == v->mgr);
+-
+- result = Cudd_bddCompose(f->mgr,f->node,g->node,(int)Cudd_Regular(v->node)->index);
+- if (result == NULL) return(NULL);
+- cuddRef(result);
+- return(bdd_construct_bdd_t(f->mgr,result));
+-
+-} /* end of bdd_compose */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Universal Abstraction of Variables.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_consensus(f, quantifying_vars)
+-bdd_t *f;
+-array_t *quantifying_vars; /* of bdd_t *'s */
+-{
+- int i;
+- bdd_t *variable;
+- DdNode *cube,*tmpDd,*result;
+- bdd_manager *mgr;
+-
+- /* The Boulder package needs the smothing variables passed as a cube.
+- ** Therefore we must build that cube from the indices of the variables
+- ** in the array before calling the procedure.
+- */
+- mgr = f->mgr;
+- Cudd_Ref(cube = DD_ONE(mgr));
+- for (i = 0; i < array_n(quantifying_vars); i++) {
+- variable = array_fetch(bdd_t *,quantifying_vars,i);
+-
+- /* Make sure the variable belongs to the same manager */
+- assert(mgr == variable->mgr);
+-
+- tmpDd = Cudd_bddAnd(mgr,cube,variable->node);
+- if (tmpDd == NULL) {
+- Cudd_RecursiveDeref(mgr, cube);
+- return(NULL);
+- }
+- cuddRef(tmpDd);
+- Cudd_RecursiveDeref(mgr, cube);
+- cube = tmpDd;
+- }
+-
+- /* Perform the consensus */
+- result = Cudd_bddUnivAbstract(mgr,f->node,cube);
+- if (result == NULL) {
+- Cudd_RecursiveDeref(mgr, cube);
+- return(NULL);
+- }
+- cuddRef(result);
+- /* Get rid of temporary results */
+- Cudd_RecursiveDeref(mgr, cube);
+-
+- /* Build the bdd_t structure for the result */
+- return(bdd_construct_bdd_t(mgr,result));
+-
+-} /* end of bdd_consensus */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [The compatible projection function.]
+-
+- Description [The compatible projection function. The reference minterm
+- is chosen based on the phases of the quantifying variables. If all
+- variables are in positive phase, the minterm 111...111 is used as
+- reference.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_cproject(f, quantifying_vars)
+-bdd_t *f;
+-array_t *quantifying_vars; /* of bdd_t* */
+-{
+- DdManager *dd;
+- DdNode *cube;
+- DdNode *res;
+- bdd_t *fi;
+- int nvars, i;
+-
+- if (f == NULL) {
+- fail ("bdd_cproject: invalid BDD");
+- }
+-
+- nvars = array_n(quantifying_vars);
+- if (nvars <= 0) {
+- fail("bdd_cproject: no projection variables");
+- }
+- dd = f->mgr;
+-
+- cube = DD_ONE(dd);
+- cuddRef(cube);
+- for (i = nvars - 1; i >= 0; i--) {
+- DdNode *tmpp;
+- fi = array_fetch(bdd_t *, quantifying_vars, i);
+- tmpp = Cudd_bddAnd(dd,fi->node,cube);
+- if (tmpp == NULL) {
+- Cudd_RecursiveDeref(dd,cube);
+- return(NULL);
+- }
+- cuddRef(tmpp);
+- Cudd_RecursiveDeref(dd,cube);
+- cube = tmpp;
+- }
+-
+- res = Cudd_CProjection(dd,f->node,cube);
+- if (res == NULL) {
+- Cudd_RecursiveDeref(dd,cube);
+- return(NULL);
+- }
+- cuddRef(res);
+- Cudd_RecursiveDeref(dd,cube);
+-
+- return(bdd_construct_bdd_t(dd,res));
+-
+-} /* end of bdd_cproject */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [ITE.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_ite(i, t, e, i_phase, t_phase, e_phase)
+-bdd_t *i;
+-bdd_t *t;
+-bdd_t *e;
+-boolean i_phase;
+-boolean t_phase;
+-boolean e_phase;
+-{
+- DdNode *newi,*newt,*newe,*ite;
+-
+- /* Make sure both bdds belong to the same mngr */
+- assert(i->mgr == t->mgr);
+- assert(i->mgr == e->mgr);
+-
+- /* Modify the phases of the operands according to the parameters */
+- if (!i_phase) {
+- newi = Cudd_Not(i->node);
+- } else {
+- newi = i->node;
+- }
+- if (!t_phase) {
+- newt = Cudd_Not(t->node);
+- } else {
+- newt = t->node;
+- }
+- if (!e_phase) {
+- newe = Cudd_Not(e->node);
+- } else {
+- newe = e->node;
+- }
+-
+- /* Perform the ITE operation */
+- ite = Cudd_bddIte(i->mgr,newi,newt,newe);
+- if (ite == NULL) return(NULL);
+- cuddRef(ite);
+- return(bdd_construct_bdd_t(i->mgr,ite));
+-
+-} /* end of bdd_ite */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Restric operator as described in Coudert et al. ICCAD90.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_minimize(f, c)
+-bdd_t *f;
+-bdd_t *c;
+-{
+- DdNode *result;
+-
+- /* Make sure both operands belong to the same manager. */
+- assert(f->mgr == c->mgr);
+-
+- result = Cudd_bddRestrict(f->mgr,f->node,c->node);
+- if (result == NULL) return(NULL);
+- cuddRef(result);
+-
+- return(bdd_construct_bdd_t(f->mgr,result));
+-
+-} /* end of bdd_minimize */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Parametrized version of the Restrict operator.]
+-
+- Description [Parametrized version of the Restrict operator. Currently
+- defaults to bdd_minimize.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-/*ARGSUSED*/
+-bdd_t *
+-bdd_minimize_with_params(f, c, match_type, compl, no_new_vars, return_min)
+-bdd_t *f;
+-bdd_t *c;
+-bdd_min_match_type_t match_type;
+-boolean compl;
+-boolean no_new_vars;
+-boolean return_min;
+-{
+- return(bdd_minimize(f,c));
+-
+-} /* end of bdd_minimize_with_params */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Negation.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_not(f)
+-bdd_t *f;
+-{
+- DdNode *result;
+-
+- Cudd_Ref(result = Cudd_Not(f->node));
+- return(bdd_construct_bdd_t((DdManager *)f->mgr,result));
+-
+-} /* end of bdd_not */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns the one BDD.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_one(mgr)
+-bdd_manager *mgr;
+-{
+- DdNode *result;
+-
+- Cudd_Ref(result = DD_ONE((DdManager *)mgr));
+- return(bdd_construct_bdd_t((DdManager *)mgr,result));
+-
+-} /* end of bdd_one */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Or of two BDDs.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_or(f, g, f_phase, g_phase)
+-bdd_t *f;
+-bdd_t *g;
+-boolean f_phase;
+-boolean g_phase;
+-{
+- DdNode *newf,*newg,*forg;
+- bdd_t *result;
+-
+- /* Make sure both bdds belong to the same mngr */
+- assert(f->mgr == g->mgr);
+-
+- /* Modify the phases of the operands according to the parameters */
+- if (f_phase) {
+- newf = Cudd_Not(f->node);
+- } else {
+- newf = f->node;
+- }
+- if (g_phase) {
+- newg = Cudd_Not(g->node);
+- } else {
+- newg = g->node;
+- }
+-
+- /* Perform the OR operation */
+- forg = Cudd_bddAnd(f->mgr,newf,newg);
+- if (forg == NULL) return(NULL);
+- forg = Cudd_Not(forg);
+- cuddRef(forg);
+- result = bdd_construct_bdd_t(f->mgr,forg);
+-
+- return(result);
+-
+-} /* end of bdd_or */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Existential abstraction of variables.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_smooth(f, smoothing_vars)
+-bdd_t *f;
+-array_t *smoothing_vars; /* of bdd_t *'s */
+-{
+- int i;
+- bdd_t *variable;
+- DdNode *cube,*tmpDd,*result;
+- bdd_manager *mgr;
+-
+- /* The Boulder package needs the smothing variables passed as a cube.
+- ** Therefore we must build that cube from the indices of the variables
+- ** in the array before calling the procedure.
+- */
+- mgr = f->mgr;
+- Cudd_Ref(cube = DD_ONE(mgr));
+- for (i = 0; i < array_n(smoothing_vars); i++) {
+- variable = array_fetch(bdd_t *,smoothing_vars,i);
+-
+- /* Make sure the variable belongs to the same manager. */
+- assert(mgr == variable->mgr);
+-
+- tmpDd = Cudd_bddAnd(mgr,cube,variable->node);
+- if (tmpDd == NULL) {
+- Cudd_RecursiveDeref(mgr, cube);
+- return(NULL);
+- }
+- cuddRef(tmpDd);
+- Cudd_RecursiveDeref(mgr, cube);
+- cube = tmpDd;
+- }
+-
+- /* Perform the smoothing */
+- result = Cudd_bddExistAbstract(mgr,f->node,cube);
+- if (result == NULL) {
+- Cudd_RecursiveDeref(mgr, cube);
+- return(NULL);
+- }
+- cuddRef(result);
+-
+- /* Get rid of temporary results */
+- Cudd_RecursiveDeref(mgr, cube);
+-
+- /* Build the bdd_t structure for the result */
+- return(bdd_construct_bdd_t(mgr,result));
+-
+-} /* end of bdd_smooth */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Permutes the variables.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_substitute(f, old_array, new_array)
+-bdd_t *f;
+-array_t *old_array; /* of bdd_t *'s */
+-array_t *new_array; /* of bdd_t *'s */
+-{
+- int maxOld;
+- int i,varIndex,from,to;
+- int *permut;
+- bdd_t *variable;
+- DdNode *result;
+-
+- /* Make sure both arrays have the same number of elements. */
+- assert(array_n(old_array) == array_n(new_array));
+-
+- /* Detect what is the highest index of variable to rename. */
+- maxOld = 0;
+- for (i = 0; i < array_n(old_array); i++) {
+- variable = array_fetch(bdd_t *, old_array, i);
+- /* Make sure the variable belongs to this manager. */
+- assert(f->mgr == variable->mgr);
+-
+- varIndex = Cudd_Regular(variable->node)->index;
+- if (varIndex > maxOld) {
+- maxOld = varIndex;
+- }
+- }
+- maxOld++;
+-
+- /* Allocate and fill the array with the trivial permutation. */
+- permut = ALLOC(int, maxOld);
+- for (i = 0; i < maxOld; i++) permut[i] = i;
+-
+- /* Modify the permutation by looking at both arrays old and new. */
+- for (i = 0; i < array_n(old_array); i++) {
+- variable = array_fetch(bdd_t *, old_array, i);
+- from = Cudd_Regular(variable->node)->index;
+- variable = array_fetch(bdd_t *, new_array, i);
+- /* Make sure the variable belongs to this manager. */
+- assert(f->mgr == variable->mgr);
+-
+- to = Cudd_Regular(variable->node)->index;
+- permut[from] = to;
+- }
+-
+- result = Cudd_bddPermute(f->mgr,f->node,permut);
+- FREE(permut);
+- if (result == NULL) return(NULL);
+- cuddRef(result);
+- return(bdd_construct_bdd_t(f->mgr,result));
+-
+-} /* end of bdd_substitute */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns the Then branch of the BDD.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_then(f)
+-bdd_t *f;
+-{
+- DdNode *result;
+-
+- result = Cudd_T(f->node);
+- result = Cudd_NotCond(result,Cudd_IsComplement(f->node));
+- cuddRef(result);
+- return(bdd_construct_bdd_t(f->mgr,result));
+-
+-} /* end of bdd_then */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns the else branch of a BDD.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_else(f)
+-bdd_t *f;
+-{
+- DdNode *result;
+-
+- result = Cudd_E(f->node);
+- result = Cudd_NotCond(result,Cudd_IsComplement(f->node));
+- cuddRef(result);
+- return(bdd_construct_bdd_t(f->mgr,result));
+-
+-} /* end of bdd_else */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns the BDD of the top variable.]
+-
+- Description [Returns the BDD of the top variable of the argument. If
+- the argument is constant, it returns the constant function itself.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_top_var(f)
+-bdd_t *f;
+-{
+- DdNode *result;
+-
+- if (Cudd_IsConstant(f->node)) {
+- result = f->node;
+- } else {
+- result = f->mgr->vars[Cudd_Regular(f->node)->index];
+- }
+- cuddRef(result);
+- return(bdd_construct_bdd_t(f->mgr,result));
+-
+-} /* end of bdd_top_var */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Computes the exclusive nor of two BDDs.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_xnor(f, g)
+-bdd_t *f;
+-bdd_t *g;
+-{
+- DdNode *result;
+-
+- /* Make sure both operands belong to the same manager. */
+- assert(f->mgr == g->mgr);
+-
+- result = Cudd_bddIte(f->mgr,f->node,g->node,Cudd_Not(g->node));
+- if (result == NULL) return(NULL);
+- cuddRef(result);
+- return(bdd_construct_bdd_t(f->mgr,result));
+-
+-} /* end of bdd_xnor */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Computes the exclusive or of two BDDs.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_xor(f, g)
+-bdd_t *f;
+-bdd_t *g;
+-{
+- DdNode *result;
+-
+- /* Make sure both operands belong to the same manager. */
+- assert(f->mgr == g->mgr);
+-
+- result = Cudd_bddIte(f->mgr,f->node,Cudd_Not(g->node),g->node);
+- if (result == NULL) return(NULL);
+- cuddRef(result);
+- return(bdd_construct_bdd_t(f->mgr,result));
+-
+-} /* end of bdd_xor */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns the constant zero BDD.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_zero(mgr)
+-bdd_manager *mgr;
+-{
+- DdNode *result;
+-
+- Cudd_Ref(result = Cudd_Not(DD_ONE((mgr))));
+- return(bdd_construct_bdd_t(mgr,result));
+-
+-} /* end of bdd_zero */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Equality check.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-boolean
+-bdd_equal(f, g)
+-bdd_t *f;
+-bdd_t *g;
+-{
+- return(f->node == g->node);
+-
+-} /* end of bdd_equal */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns a BDD included in the intersection of f and g.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_intersects(f, g)
+-bdd_t *f;
+-bdd_t *g;
+-{
+- DdNode *result;
+-
+- /* Make sure both operands belong to the same manager. */
+- assert(f->mgr == g->mgr);
+-
+- result = Cudd_bddIntersect(f->mgr,f->node,g->node);
+- if (result == NULL) return(NULL);
+- cuddRef(result);
+- return(bdd_construct_bdd_t(f->mgr,result));
+-
+-} /* end of bdd_intersects */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Checks a BDD for tautology.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-boolean
+-bdd_is_tautology(f, phase)
+-bdd_t *f;
+-boolean phase;
+-{
+- if (phase) {
+- return(f->node == DD_ONE(f->mgr));
+- } else {
+- return(f->node == Cudd_Not(DD_ONE(f->mgr)));
+- }
+-
+-} /* end of bdd_is_tautology */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Tests for containment of f in g.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-boolean
+-bdd_leq(f, g, f_phase, g_phase)
+-bdd_t *f;
+-bdd_t *g;
+-boolean f_phase;
+-boolean g_phase;
+-{
+- DdNode *newf, *newg;
+-
+- /* Make sure both operands belong to the same manager. */
+- assert(f->mgr == g->mgr);
+-
+- if (f_phase) {
+- newf = f->node;
+- } else {
+- newf = Cudd_Not(f->node);
+- }
+- if (g_phase) {
+- newg = g->node;
+- } else {
+- newg = Cudd_Not(g->node);
+- }
+-
+- return(Cudd_bddLeq(f->mgr,newf,newg));
+-
+-} /* end of bdd_leq */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Counts the number of minterms in the on set.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-double
+-bdd_count_onset(f, var_array)
+-bdd_t *f;
+-array_t *var_array; /* of bdd_t *'s */
+-{
+- return(Cudd_CountMinterm(f->mgr,f->node,array_n(var_array)));
+-
+-} /* end of bdd_count_onset */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Obtains the manager of the BDD.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_manager *
+-bdd_get_manager(f)
+-bdd_t *f;
+-{
+- return(f->mgr);
+-
+-} /* end of bdd_get_manager */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns the node of the BDD.]
+-
+- SideEffects [Sets is_complemented.]
+-
+-******************************************************************************/
+-bdd_node *
+-bdd_get_node(f, is_complemented)
+-bdd_t *f;
+-boolean *is_complemented; /* return */
+-{
+- if (Cudd_IsComplement(f->node)) {
+- *is_complemented = TRUE;
+- return(Cudd_Regular(f->node));
+- }
+- *is_complemented = FALSE;
+- return(f->node);
+-
+-} /* end of bdd_get_node */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns the free field of the BDD.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-int
+-bdd_get_free(f)
+-bdd_t *f;
+-{
+- return (f->free);
+-
+-} /* end of bdd_get_free */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Obtains some statistics of the BDD package.]
+-
+- SideEffects [Sets stats.]
+-
+-******************************************************************************/
+-/*ARGSUSED*/
+-void
+-bdd_get_stats(mgr, stats)
+-bdd_manager *mgr;
+-bdd_stats *stats; /* return */
+-{
+- stats->nodes.total = mgr->keys;
+- stats->nodes.used = mgr->keys - mgr->dead;
+- stats->nodes.unused = mgr->dead;
+- stats->cache.itetable.hits = (unsigned int) Cudd_ReadCacheHits(mgr);
+- stats->cache.itetable.misses = (unsigned int)
+- (Cudd_ReadCacheLookUps(mgr) - Cudd_ReadCacheHits(mgr));
+- stats->cache.itetable.collisions = mgr->cachecollisions;
+- stats->cache.itetable.inserts = mgr->cacheinserts;
+- stats->gc.times = Cudd_ReadGarbageCollections(mgr);
+- return;
+-
+-} /* end of bdd_get_stats */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Obtains the support of the BDD.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-var_set_t *
+-bdd_get_support(f)
+-bdd_t *f;
+-{
+- DdNode *support, *scan;
+- var_set_t *result;
+-
+- support = Cudd_Support(f->mgr,f->node);
+- if (support == NULL) return(NULL);
+- cuddRef(support);
+-
+- result = var_set_new((int) f->mgr->size);
+- scan = support;
+- while (!cuddIsConstant(scan)) {
+- var_set_set_elt(result, scan->index);
+- scan = cuddT(scan);
+- }
+- Cudd_RecursiveDeref(f->mgr,support);
+-
+- return(result);
+-
+-} /* end of bdd_get_support */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Obtains the array of indices of an array of variables.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-array_t *
+-bdd_get_varids(var_array)
+-array_t *var_array;
+-{
+- int i;
+- int index;
+- bdd_t *var;
+- array_t *result = array_alloc(int,array_n(var_array));
+-
+- for (i = 0; i < array_n(var_array); i++) {
+- var = array_fetch(bdd_t *, var_array, i);
+- index = Cudd_Regular(var->node)->index;
+- (void) array_insert_last(int, result, index);
+- }
+- return(result);
+-
+-} /* end of bdd_get_varids */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns the number of variables in the manager.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-unsigned int
+-bdd_num_vars(mgr)
+-bdd_manager *mgr;
+-{
+- return(mgr->size);
+-
+-} /* end of bdd_num_vars */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Prints the BDD.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-void
+-bdd_print(f)
+-bdd_t *f;
+-{
+- (void) cuddP(f->mgr,f->node);
+-
+-} /* end of bdd_print */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Prints statistics about the package.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-void
+-bdd_print_stats(stats, file)
+-bdd_stats stats;
+-FILE *file;
+-{
+-#ifndef DD_STATS
+- fprintf(stderr,"CU DD package: bdd_print_stats: Statistics turned off. No output\n");
+-#else
+- fprintf(file,"CU DD Package Statistics\n");
+- fprintf(file," Cache hits : %d\n",stats.cache.itetable.hits);
+- fprintf(file," Cache misses : %d\n",stats.cache.itetable.misses);
+- fprintf(file," Cache collisions : %d\n",stats.cache.itetable.collisions);
+- fprintf(file," Cache inserts: %d\n",stats.cache.itetable.inserts);
+-#endif
+- return;
+-
+-} /* end of bdd_print_stats */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Computes the number of nodes of a BDD.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-int
+-bdd_size(f)
+-bdd_t *f;
+-{
+- return(Cudd_DagSize(f->node));
+-
+-} /* end of bdd_size */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Accesses the id of the top variable.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_variableId
+-bdd_top_var_id(f)
+-bdd_t *f;
+-{
+- return(Cudd_Regular(f->node)->index);
+-
+-} /* end of bdd_top_var_id */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Accesses the external_hooks field of the manager.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_external_hooks *
+-bdd_get_external_hooks(mgr)
+-bdd_manager *mgr;
+-{
+- return((bdd_external_hooks *)(mgr->hooks));
+-
+-} /* end of bdd_get_external_hooks */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Registers a new hook with the manager.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-/*ARGSUSED*/
+-void
+-bdd_register_daemon(mgr, daemon)
+-bdd_manager *mgr;
+-void (*daemon)();
+-{
+- fprintf(stderr,"CU DD Package: bdd_register_daemon translated to no-op.\n");
+- return;
+-
+-} /* end of bdd_register_daemon */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Turns on or off garbage collection.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-void
+-bdd_set_gc_mode(mgr, no_gc)
+-bdd_manager *mgr;
+-boolean no_gc;
+-{
+- if (no_gc) {
+- Cudd_DisableGarbageCollection(mgr);
+- } else {
+- Cudd_EnableGarbageCollection(mgr);
+- }
+- return;
+-
+-} /* end of bdd_set_gc_mode */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reorders the BDD pool.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-void
+-bdd_dynamic_reordering(mgr, algorithm_type)
+-bdd_manager *mgr;
+-bdd_reorder_type_t algorithm_type;
+-{
+- switch (algorithm_type) {
+- case BDD_REORDER_SIFT:
+- mgr->autoMethod = CUDD_REORDER_SIFT;
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_WINDOW:
+- case BDD_REORDER_WINDOW4:
+- mgr->autoMethod = CUDD_REORDER_WINDOW4;
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_NONE:
+- mgr->autoDyn = 0;
+- break;
+- case BDD_REORDER_SAME:
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_RANDOM:
+- mgr->autoMethod = CUDD_REORDER_RANDOM;
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_RANDOM_PIVOT:
+- mgr->autoMethod = CUDD_REORDER_RANDOM_PIVOT;
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_SIFT_CONVERGE:
+- mgr->autoMethod = CUDD_REORDER_SIFT_CONVERGE;
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_SYMM_SIFT:
+- mgr->autoMethod = CUDD_REORDER_SYMM_SIFT;
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_SYMM_SIFT_CONV:
+- mgr->autoMethod = CUDD_REORDER_SYMM_SIFT_CONV;
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_WINDOW2:
+- mgr->autoMethod = CUDD_REORDER_WINDOW2;
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_WINDOW3:
+- mgr->autoMethod = CUDD_REORDER_WINDOW3;
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_WINDOW2_CONV:
+- mgr->autoMethod = CUDD_REORDER_WINDOW2_CONV;
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_WINDOW3_CONV:
+- mgr->autoMethod = CUDD_REORDER_WINDOW3_CONV;
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_WINDOW4_CONV:
+- mgr->autoMethod = CUDD_REORDER_WINDOW4_CONV;
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_GROUP_SIFT:
+- mgr->autoMethod = CUDD_REORDER_GROUP_SIFT;
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_GROUP_SIFT_CONV:
+- mgr->autoMethod = CUDD_REORDER_GROUP_SIFT_CONV;
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_ANNEALING:
+- mgr->autoMethod = CUDD_REORDER_ANNEALING;
+- mgr->autoDyn = 1;
+- break;
+- case BDD_REORDER_GENETIC:
+- mgr->autoMethod = CUDD_REORDER_GENETIC;
+- mgr->autoDyn = 1;
+- break;
+- default:
+- fprintf(stderr,"CU DD Package: Reordering algorithm not considered\n");
+- }
+-
+-} /* end of bdd_dynamic_reordering */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Calls reordering explicitly.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-void
+-bdd_reorder(mgr)
+-bdd_manager *mgr;
+-{
+- (void) Cudd_ReduceHeap(mgr,mgr->autoMethod,10); /* 10 = whatever (Verbatim from file ddTable.c) */
+- return;
+-
+-} /* end of bdd_reorder */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Read the number of reorderings the package has performed
+- so far.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-int
+-bdd_read_reorderings(mgr)
+-bdd_manager *mgr;
+-{
+- return Cudd_ReadReorderings((DdManager *)mgr);
+-
+-} /* end of bdd_read_reorderings */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Gets the id variable for one level in the BDD.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_variableId
+-bdd_get_id_from_level(mgr, level)
+-bdd_manager *mgr;
+-long level;
+-{
+- return(mgr->invperm[level]);
+-
+-} /* end of bdd_get_id_from_level */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Gets the level of the top variable of the BDD.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-long
+-bdd_top_var_level(mgr, fn)
+-bdd_manager *mgr;
+-bdd_t *fn;
+-{
+- return((long) cuddI(mgr,Cudd_Regular(fn->node)->index));
+-
+-} /* end of bdd_top_var_level */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns TRUE if the argument BDD is a cube; FALSE
+- otherwise.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-boolean
+-bdd_is_cube(f)
+-bdd_t *f;
+-{
+- struct DdManager *manager;
+-
+- if (f == NULL) {
+- fail("bdd_is_cube: invalid BDD");
+- }
+- if (f->free) fail ("Freed BDD passed to bdd_is_cube");
+- manager = (DdManager *) f->mgr;
+- return((boolean)cuddCheckCube(manager,f->node));
+-
+-} /* end of bdd_is_cube */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Calls the garbage collector explicitly.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-void
+-bdd_gc(mgr)
+-bdd_manager *mgr;
+-{
+- cuddGarbageCollect(mgr,1);
+-
+-} /* end of bdd_gc */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Computes the shared size of an array of BDDs.]
+-
+- Description [Computes the shared size of an array of BDDs. Returns
+- CUDD_OUT_OF_MEM in case of failure.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-long
+-bdd_size_multiple(bddArray)
+-array_t *bddArray;
+-{
+- DdNode **nodeArray;
+- bdd_t *bddUnit;
+- long result;
+- int i;
+-
+- nodeArray = ALLOC(DdNode *, array_n(bddArray));
+- if (nodeArray == NULL) return(CUDD_OUT_OF_MEM);
+- for (i = 0; i < array_n(bddArray); i++) {
+- bddUnit = array_fetch(bdd_t *, bddArray, i);
+- nodeArray[i] = bddUnit->node;
+- }
+-
+- result = Cudd_SharingSize(nodeArray,array_n(bddArray));
+-
+- /* Clean up */
+- FREE(nodeArray);
+-
+- return(result);
+-
+-} /* end of bdd_size_multiple */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns the first cube of the function.
+- A generator is also returned, which will iterate over the rest.]
+-
+- Description [Defines an iterator on the onset of a BDD. Two routines
+- are provided: bdd_first_cube, which extracts one cube from a BDD and
+- returns a bdd_gen structure containing the information necessary to
+- continue the enumeration; and bdd_next_cube, which returns 1 if
+- another cube was found, and 0 otherwise. A cube is represented as an
+- array of bdd_literal (which are integers in {0, 1, 2}), where 0
+- represents negated literal, 1 for literal, and 2 for don't care.
+- Returns a disjoint cover. A third routine is there to clean up.]
+-
+- SideEffects []
+-
+- SeeAlso [bdd_next_cube bdd_gen_free]
+-
+-******************************************************************************/
+-bdd_gen *
+-bdd_first_cube(fn, cube)
+-bdd_t *fn;
+-array_t **cube; /* of bdd_literal */
+-{
+- bdd_manager *manager;
+- bdd_gen *gen;
+- int i;
+- int *icube;
+- CUDD_VALUE_TYPE value;
+-
+- /* Make sure we receive a valid bdd_t. (So to speak.) */
+- assert(fn != 0);
+-
+- manager = fn->mgr;
+-
+- /* Initialize the generator. */
+- gen = ALLOC(bdd_gen,1);
+- if (gen == NULL) return(NULL);
+- gen->manager = manager;
+-
+- gen->cube = array_alloc(bdd_literal, manager->size);
+- if (gen->cube == NULL) {
+- fail("Bdd Package: Out of memory in bdd_first_cube");
+- }
+-
+- gen->ddGen = Cudd_FirstCube(manager,fn->node,&icube,&value);
+- if (gen->ddGen == NULL) {
+- fail("Cudd Package: Out of memory in bdd_first_cube");
+- }
+-
+- if (!Cudd_IsGenEmpty(gen->ddGen)) {
+- /* Copy icube to the array_t cube. */
+- for (i = 0; i < manager->size; i++) {
+- int myconst = icube[i];
+- array_insert(bdd_literal, gen->cube, i, myconst);
+- }
+- *cube = gen->cube;
+- }
+-
+- return(gen);
+-
+-} /* end of bdd_first_cube */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Gets the next cube on the generator. Returns {TRUE,
+- FALSE} when {more, no more}.]
+-
+- SideEffects []
+-
+- SeeAlso [bdd_first_cube bdd_gen_free]
+-
+-******************************************************************************/
+-boolean
+-bdd_next_cube(gen, cube)
+-bdd_gen *gen;
+-array_t **cube; /* of bdd_literal */
+-{
+- int retval;
+- int *icube;
+- CUDD_VALUE_TYPE value;
+- int i;
+-
+- retval = Cudd_NextCube(gen->ddGen,&icube,&value);
+- if (!Cudd_IsGenEmpty(gen->ddGen)) {
+- /* Copy icube to the array_t cube. */
+- for (i = 0; i < gen->manager->size; i++) {
+- int myconst = icube[i];
+- array_insert(bdd_literal, gen->cube, i, myconst);
+- }
+- *cube = gen->cube;
+- }
+-
+- return(retval);
+-
+-} /* end of bdd_next_cube */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Gets the first node in the BDD and returns a generator.]
+-
+- SideEffects []
+-
+- SeeAlso [bdd_next_node]
+-
+-******************************************************************************/
+-bdd_gen *
+-bdd_first_node(fn, node)
+-bdd_t *fn;
+-bdd_node **node; /* return */
+-{
+- bdd_manager *manager;
+- bdd_gen *gen;
+-
+- /* Make sure we receive a valid bdd_t. (So to speak.) */
+- assert(fn != 0);
+-
+- manager = fn->mgr;
+-
+- /* Initialize the generator. */
+- gen = ALLOC(bdd_gen,1);
+- if (gen == NULL) return(NULL);
+- gen->manager = manager;
+- gen->cube = NULL;
+-
+- gen->ddGen = Cudd_FirstNode(manager,fn->node,node);
+- if (gen->ddGen == NULL) {
+- fail("Cudd Package: Out of memory in bdd_first_node");
+- }
+-
+- return(gen);
+-
+-} /* end of bdd_first_node */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Gets the next node in the BDD. Returns {TRUE, FALSE} when
+- {more, no more}.]
+-
+- SideEffects []
+-
+- SeeAlso [bdd_first_node]
+-
+-******************************************************************************/
+-boolean
+-bdd_next_node(gen, node)
+-bdd_gen *gen;
+-bdd_node **node; /* return */
+-{
+- return(Cudd_NextNode(gen->ddGen,node));
+-
+-} /* end of bdd_next_node */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Frees up the space used by the generator. Returns an int
+- so that it is easier to fit in a foreach macro. Returns 0 (to make it
+- easy to put in expressions).]
+-
+- SideEffects []
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-int
+-bdd_gen_free(gen)
+-bdd_gen *gen;
+-{
+- if (gen->cube != NULL) array_free(gen->cube);
+- Cudd_GenFree(gen->ddGen);
+- FREE(gen);
+- return(0);
+-
+-} /* end of bdd_gen_free */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Queries the status of a generator.]
+-
+- Description [Queries the status of a generator. Returns 1 if the
+- generator is empty or NULL; 0 otherswise.]
+-
+- SideEffects []
+-
+- SeeAlso [bdd_first_cube bdd_next_cube bdd_first_node bdd_next_node
+- bdd_gen_free]
+-
+-******************************************************************************/
+-boolean
+-bdd_is_gen_empty(gen)
+-bdd_gen *gen;
+-{
+- return(Cudd_IsGenEmpty(gen->ddGen));
+-
+-} /* end of bdd_is_gen_empty */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Function that creates a variable of a given index.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-bdd_t *
+-bdd_var_with_index(manager, index)
+-bdd_manager *manager;
+-int index;
+-{
+- DdNode *var;
+-
+- var = Cudd_bddIthVar(manager, index);
+- cuddRef(var);
+- return(bdd_construct_bdd_t(manager, var));
+-
+-} /* end of bdd_var_with_index */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Temporary function that is empty.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-/*ARGSUSED*/
+-void
+-bdd_new_var_block(f, n)
+-bdd_t *f;
+-long n;
+-{
+- return;
+-
+-} /* end of bdd_new_var_block */
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Builds the bdd_t structure.]
+-
+- Description [Builds the bdd_t structure from manager and node.
+- Assumes that the reference count of the node has already been
+- increased.]
+-
+- SideEffects []
+-
+-******************************************************************************/
+-static bdd_t *
+-bdd_construct_bdd_t(mgr,fn)
+-DdManager *mgr;
+-DdNode * fn;
+-{
+- bdd_t *result;
+-
+- result = ALLOC(bdd_t, 1);
+- if (result == NULL) {
+- Cudd_RecursiveDeref(mgr,fn);
+- return(NULL);
+- }
+- result->mgr = mgr;
+- result->node = fn;
+- result->free = FALSE;
+- return(result);
+-
+-} /* end of bdd_construct_bdd_t */
+diff --git a/Cudd/sis/cuddPwPt.c b/Cudd/sis/cuddPwPt.c
+deleted file mode 100644
+index 823f7b9..0000000
+--- a/Cudd/sis/cuddPwPt.c
++++ /dev/null
+@@ -1,147 +0,0 @@
+-/**CFile***********************************************************************
+-
+- FileName [cuddPwPt.c]
+-
+- PackageName [cudd]
+-
+- Synopsis [Emulation functions for the power package in SIS.]
+-
+- Description [This file contains functions that are necessary for the
+- power package in SIS. This package directly calls a few functions of
+- the CMU BDD package. Therefore, functions with identical names and
+- equivalent functionality are provided here.
+- External procedures included in this file:
+- <ul>
+- <li> cmu_bdd_zero()
+- <li> cmu_bdd_one()
+- <li> cmu_bdd_if_index()
+- </ul>
+- Internal procedures included in this module:
+- <ul>
+- <li>
+- </ul>]
+-
+- Author [Fabio Somenzi]
+-
+- Copyright [This file was created at the University of Colorado at
+- Boulder. The University of Colorado at Boulder makes no warranty
+- about the suitability of this software for any purpose. It is
+- presented on an AS IS basis.]
+-
+-******************************************************************************/
+-
+-#include "util.h"
+-#include "array.h"
+-#include "st.h"
+-#include "cuddInt.h"
+-#include "cuddBdd.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Constant declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-#ifndef lint
+-static char rcsid[] DD_UNUSED = "$Id: cuddPwPt.c,v 1.3 1997/01/18 19:43:19 fabio Exp $";
+-#endif
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-/**AutomaticEnd***************************************************************/
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns a pointer to the one constant.]
+-
+- Description [Returns a pointer to the one constant. Used by the power
+- package in SIS. For new code, use Cudd_ReadOne instead.]
+-
+- SideEffects [None]
+-
+- SeeAlso [Cudd_ReadOne]
+-
+-******************************************************************************/
+-bdd_node *
+-cmu_bdd_one(dd)
+-bdd_manager *dd;
+-{
+- return((bdd_node *)((DdManager *)dd)->one);
+-
+-} /* end of cmu_bdd_one */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns a pointer to the zero constant.]
+-
+- Description [Returns a pointer to the zero constant. Used by the power
+- package in SIS. For new code, use Cudd_ReadZero instead.]
+-
+- SideEffects [None]
+-
+- SeeAlso [Cudd_ReadZero]
+-
+-******************************************************************************/
+-bdd_node *
+-cmu_bdd_zero(dd)
+-bdd_manager *dd;
+-{
+- return((bdd_node *)Cudd_Not(((DdManager *)dd)->one));
+-
+-} /* end of cmu_bdd_zero */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns the index of the top variable in a BDD.]
+-
+- Description [Returns the index of the top variable in a BDD. Used by
+- the power package in SIS. For new code, use Cudd_ReadIndex instead.]
+-
+- SideEffects [None]
+-
+- SeeAlso [Cudd_ReadIndex]
+-
+-******************************************************************************/
+-int
+-cmu_bdd_if_index(dd, node)
+-bdd_manager *dd;
+-bdd_node *node;
+-{
+- return(Cudd_Regular(node)->index);
+-
+-} /* end of cmu_bdd_if_index */
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+diff --git a/Cudd/sis/st.c b/Cudd/sis/st.c
+deleted file mode 100644
+index 426c79c..0000000
+--- a/Cudd/sis/st.c
++++ /dev/null
+@@ -1,554 +0,0 @@
+-/*
+- * Revision Control Information
+- *
+- * /projects/hsis/CVS/utilities/st/st.c,v
+- * serdar
+- * 1.1
+- * 1993/07/29 01:00:13
+- *
+- */
+-#include <stdio.h>
+-#include "util.h"
+-#include "st.h"
+-
+-#define ST_NUMCMP(x,y) ((x) != (y))
+-#define ST_NUMHASH(x,size) (ABS((long)x)%(size))
+-#define ST_PTRHASH(x,size) ((int)((unsigned long)(x)>>2)%size)
+-#define EQUAL(func, x, y) \
+- ((((func) == st_numcmp) || ((func) == st_ptrcmp)) ?\
+- (ST_NUMCMP((x),(y)) == 0) : ((*func)((x), (y)) == 0))
+-
+-
+-#define do_hash(key, table)\
+- ((int)((table->hash == st_ptrhash) ? ST_PTRHASH((key),(table)->num_bins) :\
+- (table->hash == st_numhash) ? ST_NUMHASH((key), (table)->num_bins) :\
+- (*table->hash)((key), (table)->num_bins)))
+-
+-static int rehash (st_table *);
+-
+-st_table *
+-st_init_table_with_params(
+- ST_PFICPCP compare,
+- ST_PFICPI hash,
+- int size,
+- int density,
+- double grow_factor,
+- int reorder_flag)
+-{
+- int i;
+- st_table *newt;
+-
+- newt = ALLOC(st_table, 1);
+- if (newt == NIL(st_table)) {
+- return NIL(st_table);
+- }
+- newt->compare = (int (*)(const char *, const char *)) compare;
+- newt->hash = (int (*)(char *, int)) hash;
+- newt->num_entries = 0;
+- newt->max_density = density;
+- newt->grow_factor = grow_factor;
+- newt->reorder_flag = reorder_flag;
+- if (size <= 0) {
+- size = 1;
+- }
+- newt->num_bins = size;
+- newt->bins = ALLOC(st_table_entry *, size);
+- if (newt->bins == NIL(st_table_entry *)) {
+- FREE(newt);
+- return NIL(st_table);
+- }
+- for(i = 0; i < size; i++) {
+- newt->bins[i] = 0;
+- }
+- return newt;
+-}
+-
+-st_table *
+-st_init_table(ST_PFICPCP compare, ST_PFICPI hash)
+-{
+- return st_init_table_with_params(compare, hash, ST_DEFAULT_INIT_TABLE_SIZE,
+- ST_DEFAULT_MAX_DENSITY,
+- ST_DEFAULT_GROW_FACTOR,
+- ST_DEFAULT_REORDER_FLAG);
+-}
+-
+-void
+-st_free_table(st_table *table)
+-{
+- register st_table_entry *ptr, *next;
+- int i;
+-
+- for(i = 0; i < table->num_bins ; i++) {
+- ptr = table->bins[i];
+- while (ptr != NIL(st_table_entry)) {
+- next = ptr->next;
+- FREE(ptr);
+- ptr = next;
+- }
+- }
+- FREE(table->bins);
+- FREE(table);
+-}
+-
+-#define PTR_NOT_EQUAL(table, ptr, user_key)\
+-(ptr != NULL && !EQUAL(table->compare, user_key, (ptr)->key))
+-
+-#define FIND_ENTRY(table, hash_val, key, ptr, last) \
+- (last) = &(table)->bins[hash_val];\
+- (ptr) = *(last);\
+- while (PTR_NOT_EQUAL((table), (ptr), (key))) {\
+- (last) = &(ptr)->next; (ptr) = *(last);\
+- }\
+- if ((ptr) != NULL && (table)->reorder_flag) {\
+- *(last) = (ptr)->next;\
+- (ptr)->next = (table)->bins[hash_val];\
+- (table)->bins[hash_val] = (ptr);\
+- }
+-
+-int
+-st_lookup(st_table *table, char *key, char **value)
+-{
+- int hash_val;
+- register st_table_entry *ptr, **last;
+-
+- hash_val = do_hash(key, table);
+-
+- FIND_ENTRY(table, hash_val, key, ptr, last);
+-
+- if (ptr == NIL(st_table_entry)) {
+- return 0;
+- } else {
+- if (value != NIL(char *)) {
+- *value = ptr->record;
+- }
+- return 1;
+- }
+-}
+-
+-int
+-st_lookup_int(st_table *table, char *key, int *value)
+-{
+- int hash_val;
+- register st_table_entry *ptr, **last;
+-
+- hash_val = do_hash(key, table);
+-
+- FIND_ENTRY(table, hash_val, key, ptr, last);
+-
+- if (ptr == NIL(st_table_entry)) {
+- return 0;
+- } else {
+- if (value != NIL(int)) {
+- *value = (int) (util_ptrint) ptr->record;
+- }
+- return 1;
+- }
+-}
+-
+-/* This macro does not check if memory allocation fails. Use at you own risk */
+-#define ADD_DIRECT(table, key, value, hash_val, newt)\
+-{\
+- if (table->num_entries/table->num_bins >= table->max_density) {\
+- rehash(table);\
+- hash_val = do_hash(key,table);\
+- }\
+- \
+- newt = ALLOC(st_table_entry, 1);\
+- \
+- newt->key = key;\
+- newt->record = value;\
+- newt->next = table->bins[hash_val];\
+- table->bins[hash_val] = newt;\
+- table->num_entries++;\
+-}
+-
+-int
+-st_insert(st_table *table, char *key, char *value)
+-{
+- int hash_val;
+- st_table_entry *newt;
+- register st_table_entry *ptr, **last;
+-
+- hash_val = do_hash(key, table);
+-
+- FIND_ENTRY(table, hash_val, key, ptr, last);
+-
+- if (ptr == NIL(st_table_entry)) {
+- if (table->num_entries/table->num_bins >= table->max_density) {
+- if (rehash(table) == ST_OUT_OF_MEM) {
+- return ST_OUT_OF_MEM;
+- }
+- hash_val = do_hash(key, table);
+- }
+- newt = ALLOC(st_table_entry, 1);
+- if (newt == NIL(st_table_entry)) {
+- return ST_OUT_OF_MEM;
+- }
+- newt->key = key;
+- newt->record = value;
+- newt->next = table->bins[hash_val];
+- table->bins[hash_val] = newt;
+- table->num_entries++;
+- return 0;
+- } else {
+- ptr->record = value;
+- return 1;
+- }
+-}
+-
+-int
+-st_add_direct(st_table *table, char *key, char *value)
+-{
+- int hash_val;
+- st_table_entry *newt;
+-
+- hash_val = do_hash(key, table);
+- if (table->num_entries / table->num_bins >= table->max_density) {
+- if (rehash(table) == ST_OUT_OF_MEM) {
+- return ST_OUT_OF_MEM;
+- }
+- }
+- hash_val = do_hash(key, table);
+- newt = ALLOC(st_table_entry, 1);
+- if (newt == NIL(st_table_entry)) {
+- return ST_OUT_OF_MEM;
+- }
+- newt->key = key;
+- newt->record = value;
+- newt->next = table->bins[hash_val];
+- table->bins[hash_val] = newt;
+- table->num_entries++;
+- return 1;
+-}
+-
+-int
+-st_find_or_add(st_table *table, char *key, char ***slot)
+-{
+- int hash_val;
+- st_table_entry *newt, *ptr, **last;
+-
+- hash_val = do_hash(key, table);
+-
+- FIND_ENTRY(table, hash_val, key, ptr, last);
+-
+- if (ptr == NIL(st_table_entry)) {
+- if (table->num_entries / table->num_bins >= table->max_density) {
+- if (rehash(table) == ST_OUT_OF_MEM) {
+- return ST_OUT_OF_MEM;
+- }
+- hash_val = do_hash(key, table);
+- }
+- newt = ALLOC(st_table_entry, 1);
+- if (newt == NIL(st_table_entry)) {
+- return ST_OUT_OF_MEM;
+- }
+- newt->key = key;
+- newt->record = (char *) 0;
+- newt->next = table->bins[hash_val];
+- table->bins[hash_val] = newt;
+- table->num_entries++;
+- if (slot != NIL(char **)) *slot = &newt->record;
+- return 0;
+- } else {
+- if (slot != NIL(char **)) *slot = &ptr->record;
+- return 1;
+- }
+-}
+-
+-int
+-st_find(st_table *table, char *key, char ***slot)
+-{
+- int hash_val;
+- st_table_entry *ptr, **last;
+-
+- hash_val = do_hash(key, table);
+-
+- FIND_ENTRY(table, hash_val, key, ptr, last);
+-
+- if (ptr == NIL(st_table_entry)) {
+- return 0;
+- } else {
+- if (slot != NIL(char **)) {
+- *slot = &ptr->record;
+- }
+- return 1;
+- }
+-}
+-
+-static int
+-rehash(st_table *table)
+-{
+- register st_table_entry *ptr, *next, **old_bins;
+- int i, old_num_bins, hash_val, old_num_entries;
+-
+- /* save old values */
+- old_bins = table->bins;
+- old_num_bins = table->num_bins;
+- old_num_entries = table->num_entries;
+-
+- /* rehash */
+- table->num_bins = (int) (table->grow_factor * old_num_bins);
+- if (table->num_bins % 2 == 0) {
+- table->num_bins += 1;
+- }
+- table->num_entries = 0;
+- table->bins = ALLOC(st_table_entry *, table->num_bins);
+- if (table->bins == NIL(st_table_entry *)) {
+- table->bins = old_bins;
+- table->num_bins = old_num_bins;
+- table->num_entries = old_num_entries;
+- return ST_OUT_OF_MEM;
+- }
+- /* initialize */
+- for (i = 0; i < table->num_bins; i++) {
+- table->bins[i] = 0;
+- }
+-
+- /* copy data over */
+- for (i = 0; i < old_num_bins; i++) {
+- ptr = old_bins[i];
+- while (ptr != NIL(st_table_entry)) {
+- next = ptr->next;
+- hash_val = do_hash(ptr->key, table);
+- ptr->next = table->bins[hash_val];
+- table->bins[hash_val] = ptr;
+- table->num_entries++;
+- ptr = next;
+- }
+- }
+- FREE(old_bins);
+-
+- return 1;
+-}
+-
+-st_table *
+-st_copy(st_table *old_table)
+-{
+- st_table *new_table;
+- st_table_entry *ptr, *newptr, *next, *newt;
+- int i, j, num_bins = old_table->num_bins;
+-
+- new_table = ALLOC(st_table, 1);
+- if (new_table == NIL(st_table)) {
+- return NIL(st_table);
+- }
+-
+- *new_table = *old_table;
+- new_table->bins = ALLOC(st_table_entry *, num_bins);
+- if (new_table->bins == NIL(st_table_entry *)) {
+- FREE(new_table);
+- return NIL(st_table);
+- }
+- for(i = 0; i < num_bins ; i++) {
+- new_table->bins[i] = NIL(st_table_entry);
+- ptr = old_table->bins[i];
+- while (ptr != NIL(st_table_entry)) {
+- newt = ALLOC(st_table_entry, 1);
+- if (newt == NIL(st_table_entry)) {
+- for (j = 0; j <= i; j++) {
+- newptr = new_table->bins[j];
+- while (newptr != NIL(st_table_entry)) {
+- next = newptr->next;
+- FREE(newptr);
+- newptr = next;
+- }
+- }
+- FREE(new_table->bins);
+- FREE(new_table);
+- return NIL(st_table);
+- }
+- *newt = *ptr;
+- newt->next = new_table->bins[i];
+- new_table->bins[i] = newt;
+- ptr = ptr->next;
+- }
+- }
+- return new_table;
+-}
+-
+-int
+-st_delete(st_table *table, char **keyp, char **value)
+-{
+- int hash_val;
+- char *key = *keyp;
+- register st_table_entry *ptr, **last;
+-
+- hash_val = do_hash(key, table);
+-
+- FIND_ENTRY(table, hash_val, key, ptr ,last);
+-
+- if (ptr == NIL(st_table_entry)) {
+- return 0;
+- }
+-
+- *last = ptr->next;
+- if (value != NIL(char *)) *value = ptr->record;
+- *keyp = ptr->key;
+- FREE(ptr);
+- table->num_entries--;
+- return 1;
+-}
+-
+-int
+-st_delete_int(st_table *table, int *keyp, char **value)
+-{
+- int hash_val;
+- char *key = (char *) (util_ptrint) *keyp;
+- register st_table_entry *ptr, **last;
+-
+- hash_val = do_hash(key, table);
+-
+- FIND_ENTRY(table, hash_val, key, ptr ,last);
+-
+- if (ptr == NIL(st_table_entry)) {
+- return 0;
+- }
+-
+- *last = ptr->next;
+- if (value != NIL(char *)) *value = ptr->record;
+- *keyp = (int) (util_ptrint) ptr->key;
+- FREE(ptr);
+- table->num_entries--;
+- return 1;
+-}
+-
+-int
+-st_foreach(st_table *table, ST_PFSR func, char *arg)
+-{
+- st_table_entry *ptr, **last;
+- enum st_retval retval;
+- int i;
+-
+- for(i = 0; i < table->num_bins; i++) {
+- last = &table->bins[i]; ptr = *last;
+- while (ptr != NIL(st_table_entry)) {
+- retval = (*func)(ptr->key, ptr->record, arg);
+- switch (retval) {
+- case ST_CONTINUE:
+- last = &ptr->next; ptr = *last;
+- break;
+- case ST_STOP:
+- return 0;
+- case ST_DELETE:
+- *last = ptr->next;
+- table->num_entries--; /* cstevens at ic */
+- FREE(ptr);
+- ptr = *last;
+- }
+- }
+- }
+- return 1;
+-}
+-
+-int
+-st_strhash(char *string, int modulus)
+-{
+- register int val = 0;
+- register int c;
+-
+- while ((c = *string++) != '\0') {
+- val = val*997 + c;
+- }
+-
+- return ((val < 0) ? -val : val)%modulus;
+-}
+-
+-int
+-st_numhash(char *x, int size)
+-{
+- return ST_NUMHASH(x, size);
+-}
+-
+-int
+-st_ptrhash(char *x, int size)
+-{
+- return ST_PTRHASH(x, size);
+-}
+-
+-int
+-st_numcmp(const char *x, const char *y)
+-{
+- return ST_NUMCMP(x, y);
+-}
+-
+-int
+-st_ptrcmp(const char *x, const char *y)
+-{
+- return ST_NUMCMP(x, y);
+-}
+-
+-st_generator *
+-st_init_gen(st_table *table)
+-{
+- st_generator *gen;
+-
+- gen = ALLOC(st_generator, 1);
+- if (gen == NIL(st_generator)) {
+- return NIL(st_generator);
+- }
+- gen->table = table;
+- gen->entry = NIL(st_table_entry);
+- gen->index = 0;
+- return gen;
+-}
+-
+-
+-int
+-st_gen(st_generator *gen, char **key_p, char **value_p)
+-{
+- register int i;
+-
+- if (gen->entry == NIL(st_table_entry)) {
+- /* try to find next entry */
+- for(i = gen->index; i < gen->table->num_bins; i++) {
+- if (gen->table->bins[i] != NIL(st_table_entry)) {
+- gen->index = i+1;
+- gen->entry = gen->table->bins[i];
+- break;
+- }
+- }
+- if (gen->entry == NIL(st_table_entry)) {
+- return 0; /* that's all folks ! */
+- }
+- }
+- *key_p = gen->entry->key;
+- if (value_p != 0) {
+- *value_p = gen->entry->record;
+- }
+- gen->entry = gen->entry->next;
+- return 1;
+-}
+-
+-
+-int
+-st_gen_int(st_generator *gen, char **key_p, long *value_p)
+-{
+- register int i;
+-
+- if (gen->entry == NIL(st_table_entry)) {
+- /* try to find next entry */
+- for(i = gen->index; i < gen->table->num_bins; i++) {
+- if (gen->table->bins[i] != NIL(st_table_entry)) {
+- gen->index = i+1;
+- gen->entry = gen->table->bins[i];
+- break;
+- }
+- }
+- if (gen->entry == NIL(st_table_entry)) {
+- return 0; /* that's all folks ! */
+- }
+- }
+- *key_p = gen->entry->key;
+- if (value_p != NIL(long)) {
+- *value_p = (long) gen->entry->record;
+- }
+- gen->entry = gen->entry->next;
+- return 1;
+-}
+-
+-
+-void
+-st_free_gen(st_generator *gen)
+-{
+- FREE(gen);
+-}
+diff --git a/Cudd/sis/st.h b/Cudd/sis/st.h
+deleted file mode 100644
+index a1d8619..0000000
+--- a/Cudd/sis/st.h
++++ /dev/null
+@@ -1,97 +0,0 @@
+-/*
+- * Revision Control Information
+- *
+- * /projects/hsis/CVS/utilities/st/st.h,v
+- * serdar
+- * 1.1
+- * 1993/07/29 01:00:21
+- *
+- */
+-/* LINTLIBRARY */
+-
+-/* /projects/hsis/CVS/utilities/st/st.h,v 1.1 1993/07/29 01:00:21 serdar Exp */
+-
+-#ifndef ST_INCLUDED
+-#define ST_INCLUDED
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-typedef struct st_table_entry st_table_entry;
+-struct st_table_entry {
+- char *key;
+- char *record;
+- st_table_entry *next;
+-};
+-
+-typedef struct st_table st_table;
+-struct st_table {
+- int (*compare)(const char *, const char *);
+- int (*hash)(char *, int);
+- int num_bins;
+- int num_entries;
+- int max_density;
+- int reorder_flag;
+- double grow_factor;
+- st_table_entry **bins;
+-};
+-
+-typedef struct st_generator st_generator;
+-struct st_generator {
+- st_table *table;
+- st_table_entry *entry;
+- int index;
+-};
+-
+-#define st_is_member(table,key) st_lookup(table,key,(char **) 0)
+-#define st_count(table) ((table)->num_entries)
+-
+-enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE};
+-
+-typedef enum st_retval (*ST_PFSR)(char *, char *, char *);
+-typedef int (*ST_PFICPCP)(const char *, const char *); /* type for comparison function */
+-typedef int (*ST_PFICPI)(char *, int); /* type for hash function */
+-
+-extern st_table *st_init_table_with_params (ST_PFICPCP, ST_PFICPI, int, int, double, int);
+-extern st_table *st_init_table (ST_PFICPCP, ST_PFICPI);
+-extern void st_free_table (st_table *);
+-extern int st_lookup (st_table *, char *, char **);
+-extern int st_lookup_int (st_table *, char *, int *);
+-extern int st_insert (st_table *, char *, char *);
+-extern int st_add_direct (st_table *, char *, char *);
+-extern int st_find_or_add (st_table *, char *, char ***);
+-extern int st_find (st_table *, char *, char ***);
+-extern st_table *st_copy (st_table *);
+-extern int st_delete (st_table *, char **, char **);
+-extern int st_delete_int (st_table *, int *, char **);
+-extern int st_foreach (st_table *, ST_PFSR, char *);
+-extern int st_strhash (char *, int);
+-extern int st_numhash (char *, int);
+-extern int st_ptrhash (char *, int);
+-extern int st_numcmp (const char *, const char *);
+-extern int st_ptrcmp (const char *, const char *);
+-extern st_generator *st_init_gen (st_table *);
+-extern int st_gen (st_generator *, char **, char **);
+-extern int st_gen_int (st_generator *, char **, long *);
+-extern void st_free_gen (st_generator *);
+-
+-
+-#define ST_DEFAULT_MAX_DENSITY 5
+-#define ST_DEFAULT_INIT_TABLE_SIZE 11
+-#define ST_DEFAULT_GROW_FACTOR 2.0
+-#define ST_DEFAULT_REORDER_FLAG 0
+-
+-#define st_foreach_item(table, gen, key, value) \
+- for(gen=st_init_gen(table); st_gen(gen,key,value) || (st_free_gen(gen),0);)
+-
+-#define st_foreach_item_int(table, gen, key, value) \
+- for(gen=st_init_gen(table); st_gen_int(gen,key,value) || (st_free_gen(gen),0);)
+-
+-#define ST_OUT_OF_MEM -10000
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-
+-#endif /* ST_INCLUDED */
+diff --git a/Cudd/st/Makefile b/Cudd/st/Makefile
+deleted file mode 100644
+index 5fdc949..0000000
+--- a/Cudd/st/Makefile
++++ /dev/null
+@@ -1,64 +0,0 @@
+-# $Id: Makefile,v 1.3 2004/01/01 06:53:06 fabio Exp fabio $
+-#
+-# st -- hash table package
+-#---------------------------------------------------------------------------
+-.SUFFIXES: .c .o .u
+-
+-CC = gcc
+-RANLIB = ranlib
+-
+-MFLAG =
+-ICFLAGS = -g -O6 -Wall
+-CFLAGS = $(ICFLAGS) $(MFLAG) $(XCFLAGS)
+-
+-LINTFLAGS = -u -n
+-
+-# this is to create the lint library
+-LINTSWITCH = -o
+-
+-P = st
+-PSRC = st.c
+-PHDR = st.h
+-POBJ = $(PSRC:.c=.o)
+-PUBJ = $(PSRC:.c=.u)
+-
+-WHERE = ..
+-INCLUDE = $(WHERE)/include
+-
+-#---------------------------
+-
+-lib$(P).a: $(POBJ)
+- ar rv $@ $?
+- $(RANLIB) $@
+-
+-.c.o: $(PHDR)
+- $(CC) -c $< -I$(INCLUDE) $(CFLAGS)
+-
+-optimize_dec: lib$(P).b
+-
+-lib$(P).b: $(PUBJ)
+- ar rv $@ $?
+- $(RANLIB) $@
+-
+-.c.u: $(PSRC) $(PHDR)
+- cc -j $< -I$(INCLUDE) $(XCFLAGS)
+-
+-# if the header files change, recompile
+-$(POBJ): $(PHDR)
+-$(PUBJ): $(PHDR)
+-
+-lint: llib-l$(P).ln
+-
+-llib-l$(P).ln: $(PSRC) $(PHDR)
+- lint $(LINTFLAGS) $(LINTSWITCH)$(P) -I$(INCLUDE) $(PSRC)
+-
+-tags: $(PSRC) $(PHDR)
+- ctags $(PSRC) $(PHDR)
+-
+-all: lib$(P).a lib$(P).b llib-l$(P).ln tags
+-
+-clean:
+- rm -f *.o *.u .pure *.warnings
+-
+-distclean: clean
+- rm -f lib*.a lib$(P).b llib-l$(P).ln tags *~ *.bak *.qv *.qx
+diff --git a/Cudd/st/doc/stAllAbs.html b/Cudd/st/doc/stAllAbs.html
+deleted file mode 100644
+index 927c116..0000000
+--- a/Cudd/st/doc/stAllAbs.html
++++ /dev/null
+@@ -1,96 +0,0 @@
+-<html>
+-<head><title>st package abstract (Internal)</title></head>
+-<body>
+-
+-<h1>st package abstract (Internal)</h1>
+-<h2></h2>
+-<hr>
+-
+-<!-- Function Abstracts -->
+-
+-<dl>
+-<dt> <a href="stAllDet.html#st_add_direct"><code>st_add_direct()</code></a>
+-<dd> Place 'value' in 'table' under the key 'key'.
+-
+-<dt> <a href="stAllDet.html#st_copy"><code>st_copy()</code></a>
+-<dd> Return a copy of old_table and all its members.
+-
+-<dt> <a href="stAllDet.html#st_count"><code>st_count()</code></a>
+-<dd> Returns the number of entries in the table `table'.
+-
+-<dt> <a href="stAllDet.html#st_delete_int"><code>st_delete_int()</code></a>
+-<dd> Delete the entry with the key pointed to by `keyp'.
+-
+-<dt> <a href="stAllDet.html#st_delete"><code>st_delete()</code></a>
+-<dd> Delete the entry with the key pointed to by `keyp'.
+-
+-<dt> <a href="stAllDet.html#st_find_or_add"><code>st_find_or_add()</code></a>
+-<dd> Lookup `key' in `table'.
+-
+-<dt> <a href="stAllDet.html#st_find"><code>st_find()</code></a>
+-<dd> Lookup `key' in `table'.
+-
+-<dt> <a href="stAllDet.html#st_foreach_item_int"><code>st_foreach_item_int()</code></a>
+-<dd> Iteration macro.
+-
+-<dt> <a href="stAllDet.html#st_foreach_item"><code>st_foreach_item()</code></a>
+-<dd> Iteration macro.
+-
+-<dt> <a href="stAllDet.html#st_foreach"><code>st_foreach()</code></a>
+-<dd> Iterates over the elements of a table.
+-
+-<dt> <a href="stAllDet.html#st_free_gen"><code>st_free_gen()</code></a>
+-<dd> Reclaims the resources associated with `gen'.
+-
+-<dt> <a href="stAllDet.html#st_free_table"><code>st_free_table()</code></a>
+-<dd> Free a table.
+-
+-<dt> <a href="stAllDet.html#st_gen_int"><code>st_gen_int()</code></a>
+-<dd> Returns the next (key, value) pair in the generation sequence.
+-
+-<dt> <a href="stAllDet.html#st_gen"><code>st_gen()</code></a>
+-<dd> returns the next (key, value) pair in the generation sequence.
+-
+-<dt> <a href="stAllDet.html#st_init_gen"><code>st_init_gen()</code></a>
+-<dd> Initializes a generator.
+-
+-<dt> <a href="stAllDet.html#st_init_table_with_params"><code>st_init_table_with_params()</code></a>
+-<dd> Create a table with given parameters.
+-
+-<dt> <a href="stAllDet.html#st_init_table"><code>st_init_table()</code></a>
+-<dd> Create and initialize a table.
+-
+-<dt> <a href="stAllDet.html#st_insert"><code>st_insert()</code></a>
+-<dd> Insert value in table under the key 'key'.
+-
+-<dt> <a href="stAllDet.html#st_is_member"><code>st_is_member()</code></a>
+-<dd> Checks whethere `key' is in `table'.
+-
+-<dt> <a href="stAllDet.html#st_lookup_int"><code>st_lookup_int()</code></a>
+-<dd> Lookup up `key' in `table'.
+-
+-<dt> <a href="stAllDet.html#st_lookup"><code>st_lookup()</code></a>
+-<dd> Lookup up `key' in `table'.
+-
+-<dt> <a href="stAllDet.html#st_numcmp"><code>st_numcmp()</code></a>
+-<dd> Number comparison function.
+-
+-<dt> <a href="stAllDet.html#st_numhash"><code>st_numhash()</code></a>
+-<dd> Number hash function.
+-
+-<dt> <a href="stAllDet.html#st_ptrcmp"><code>st_ptrcmp()</code></a>
+-<dd> Pointer comparison function.
+-
+-<dt> <a href="stAllDet.html#st_ptrhash"><code>st_ptrhash()</code></a>
+-<dd> Pointer hash function.
+-
+-<dt> <a href="stAllDet.html#st_strhash"><code>st_strhash()</code></a>
+-<dd> String hash function.
+-
+-</dl>
+-
+-<hr>
+-
+-Generated automatically by <code>extdoc</code> on 20040102
+-
+-</body></html>
+diff --git a/Cudd/st/doc/stAllDet.html b/Cudd/st/doc/stAllDet.html
+deleted file mode 100644
+index e56d883..0000000
+--- a/Cudd/st/doc/stAllDet.html
++++ /dev/null
+@@ -1,462 +0,0 @@
+-<html>
+-<head><title>The st package (Internal) </title></head>
+-<body>
+-
+-<h1>The st package (Internal) </h1>
+-<h2></h2>
+-<h3></h3>
+-<hr>
+-<ul>
+-<li><a href="stExtAbs.html"><h3>External abstracts</h3></a>
+-<li><a href="stAllAbs.html"><h3>All abstracts</h3></a>
+-<li><a href="stExtDet.html#prototypes"><h3>External functions</h3></a>
+-<li><a href="stAllDet.html#prototypes"><h3>All functions</h3></a>
+-</ul>
+-
+-<hr>
+-
+-<a name="description">
+-
+-</a>
+-
+-<hr>
+-<!-- Function Prototypes and description -->
+-
+-<dl>
+-<a name="prototypes"></a>
+-<dt><pre>
+-int <i></i>
+-<a name="st_add_direct"><b>st_add_direct</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>key</b>, <i></i>
+- void * <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> Place 'value' in 'table' under the key 'key'. This is done without checking if 'key' is in 'table' already. This should only be used if you are sure there is not already an entry for 'key', since it is undefined which entry you would later get from st_lookup or st_find_or_add. Returns 1 if successful; ST_OUT_OF_MEM otherwise.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dt><pre>
+-st_table * <i></i>
+-<a name="st_copy"><b>st_copy</b></a>(
+- st_table * <b>old_table</b> <i></i>
+-)
+-</pre>
+-<dd> Return a copy of old_table and all its members. (st_table *) 0 is returned if there was insufficient memory to do the copy.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dt><pre>
+- <i></i>
+-<a name="st_count"><b>st_count</b></a>(
+- <b>table</b> <i></i>
+-)
+-</pre>
+-<dd> Returns the number of entries in the table `table'.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_delete_int"><b>st_delete_int</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>keyp</b>, <i></i>
+- int * <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> Delete the entry with the key pointed to by `keyp'. `value' must be a pointer to an integer. If the entry is found, 1 is returned, the variable pointed by `keyp' is set to the actual key and the variable pointed by `value' is set to the corresponding entry. (This allows the freeing of the associated storage.) If the entry is not found, then 0 is returned and nothing is changed.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_delete">st_delete</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_delete"><b>st_delete</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>keyp</b>, <i></i>
+- void * <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> Delete the entry with the key pointed to by `keyp'. If the entry is found, 1 is returned, the variable pointed by `keyp' is set to the actual key and the variable pointed by `value' is set to the corresponding entry. (This allows the freeing of the associated storage.) If the entry is not found, then 0 is returned and nothing is changed.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_delete_int">st_delete_int</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_find_or_add"><b>st_find_or_add</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>key</b>, <i></i>
+- void * <b>slot</b> <i></i>
+-)
+-</pre>
+-<dd> Lookup `key' in `table'. If not found, create an entry. In either case set slot to point to the field in the entry where the value is stored. The value associated with `key' may then be changed by accessing directly through slot. Returns 1 if an entry already existed, 0 if it did not exist and creation was successful; ST_OUT_OF_MEM otherwise. As an example: <pre> char **slot; </pre> <pre> char *key; </pre> <pre> char *value = (char *) item_ptr <-- ptr to a malloc'd structure </pre> <pre> if (st_find_or_add(table, key, &slot) == 1) { </pre> <pre> FREE(*slot); <-- free the old value of the record </pre> <pre> } </pre> <pre> *slot = value; <-- attach the new value to the record </pre> This replaces the equivelent code: <pre> if (st_lookup(table, key, &ovalue) == 1) { </pre> <pre> FREE(ovalue); </pre> <pre> } </pre> <pre> st_insert(table, key, value); </pre>
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_find">st_find</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_find"><b>st_find</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>key</b>, <i></i>
+- void * <b>slot</b> <i></i>
+-)
+-</pre>
+-<dd> Like st_find_or_add, but does not create an entry if one is not found.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_find_or_add">st_find_or_add</a>
+-</code>
+-
+-<dt><pre>
+- <i></i>
+-<a name="st_foreach_item_int"><b>st_foreach_item_int</b></a>(
+- <b>table</b>, <i></i>
+- <b>gen</b>, <i></i>
+- <b>key</b>, <i></i>
+- <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> An iteration macro which loops over all the entries in `table', setting `key' to point to the key and `value' to the associated value (if it is not nil). `value' is assumed to be a pointer to an integer. `gen' is a generator variable used internally. Sample usage: <pre> char *key; </pre> <pre> int value; </pre> <pre> st_generator *gen; </pre> <pre> st_foreach_item_int(table, gen, &key, &value) { </pre> <pre> process_item(value); </pre> <pre> } </pre>
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_foreach_item">st_foreach_item</a>
+-<a href="stAllDet.html#st_foreach">st_foreach</a>
+-</code>
+-
+-<dt><pre>
+- <i></i>
+-<a name="st_foreach_item"><b>st_foreach_item</b></a>(
+- <b>table</b>, <i></i>
+- <b>gen</b>, <i></i>
+- <b>key</b>, <i></i>
+- <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> An iteration macro which loops over all the entries in `table', setting `key' to point to the key and `value' to the associated value (if it is not nil). `gen' is a generator variable used internally. Sample usage: <pre> char *key, *value; </pre> <pre> st_generator *gen; </pre> <pre> st_foreach_item(table, gen, &key, &value) { </pre> <pre> process_item(value); </pre> <pre> } </pre>
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_foreach_item_int">st_foreach_item_int</a>
+-<a href="stAllDet.html#st_foreach">st_foreach</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_foreach"><b>st_foreach</b></a>(
+- st_table * <b>table</b>, <i></i>
+- ST_PFSR <b>func</b>, <i></i>
+- char * <b>arg</b> <i></i>
+-)
+-</pre>
+-<dd> For each (key, value) record in `table', st_foreach call func with the arguments <pre> (*func)(key, value, arg) </pre> If func returns ST_CONTINUE, st_foreach continues processing entries. If func returns ST_STOP, st_foreach stops processing and returns immediately. If func returns ST_DELETE, then the entry is deleted from the symbol table and st_foreach continues. In the case of ST_DELETE, it is func's responsibility to free the key and value, if necessary.<p> The routine returns 1 if all items in the table were generated and 0 if the generation sequence was aborted using ST_STOP. The order in which the records are visited will be seemingly random.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_foreach_item">st_foreach_item</a>
+-<a href="stAllDet.html#st_foreach_item_int">st_foreach_item_int</a>
+-</code>
+-
+-<dt><pre>
+-void <i></i>
+-<a name="st_free_gen"><b>st_free_gen</b></a>(
+- st_generator * <b>gen</b> <i></i>
+-)
+-</pre>
+-<dd> After generating all items in a generation sequence, this routine must be called to reclaim the resources associated with `gen'.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_gen">st_init_gen</a>
+-</code>
+-
+-<dt><pre>
+-void <i></i>
+-<a name="st_free_table"><b>st_free_table</b></a>(
+- st_table * <b>table</b> <i></i>
+-)
+-</pre>
+-<dd> Any internal storage associated with table is freed. It is the user's responsibility to free any storage associated with the pointers he placed in the table (by perhaps using st_foreach).
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table">st_init_table</a>
+-<a href="stAllDet.html#st_init_table_with_params">st_init_table_with_params</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_gen_int"><b>st_gen_int</b></a>(
+- st_generator * <b>gen</b>, <i></i>
+- void * <b>key_p</b>, <i></i>
+- int * <b>value_p</b> <i></i>
+-)
+-</pre>
+-<dd> Given a generator returned by st_init_gen(), this routine returns the next (key, value) pair in the generation sequence. `value_p' must be a pointer to an integer. The pointer `value_p' can be zero which means no value will be returned. When there are no more items in the generation sequence, the routine returns 0.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_gen">st_gen</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_gen"><b>st_gen</b></a>(
+- st_generator * <b>gen</b>, <i></i>
+- void * <b>key_p</b>, <i></i>
+- void * <b>value_p</b> <i></i>
+-)
+-</pre>
+-<dd> Given a generator returned by st_init_gen(), this routine returns the next (key, value) pair in the generation sequence. The pointer `value_p' can be zero which means no value will be returned. When there are no more items in the generation sequence, the routine returns 0. While using a generation sequence, deleting any (key, value) pair other than the one just generated may cause a fatal error when st_gen() is called later in the sequence and is therefore not recommended.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_gen_int">st_gen_int</a>
+-</code>
+-
+-<dt><pre>
+-st_generator * <i></i>
+-<a name="st_init_gen"><b>st_init_gen</b></a>(
+- st_table * <b>table</b> <i></i>
+-)
+-</pre>
+-<dd> Returns a generator handle which when used with st_gen() will progressively return each (key, value) record in `table'.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_free_gen">st_free_gen</a>
+-</code>
+-
+-<dt><pre>
+-st_table * <i></i>
+-<a name="st_init_table_with_params"><b>st_init_table_with_params</b></a>(
+- ST_PFICPCP <b>compare</b>, <i></i>
+- ST_PFICPI <b>hash</b>, <i></i>
+- int <b>size</b>, <i></i>
+- int <b>density</b>, <i></i>
+- double <b>grow_factor</b>, <i></i>
+- int <b>reorder_flag</b> <i></i>
+-)
+-</pre>
+-<dd> The full blown table initializer. compare and hash are the same as in st_init_table. density is the largest the average number of entries per hash bin there should be before the table is grown. grow_factor is the factor the table is grown by when it becomes too full. size is the initial number of bins to be allocated for the hash table. If reorder_flag is non-zero, then every time an entry is found, it is moved to the top of the chain.<p> st_init_table(compare, hash) is equivelent to <pre> st_init_table_with_params(compare, hash, ST_DEFAULT_INIT_TABLE_SIZE, ST_DEFAULT_MAX_DENSITY, ST_DEFAULT_GROW_FACTOR, ST_DEFAULT_REORDER_FLAG); </pre>
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table">st_init_table</a>
+-<a href="stAllDet.html#st_free_table">st_free_table</a>
+-</code>
+-
+-<dt><pre>
+-st_table * <i></i>
+-<a name="st_init_table"><b>st_init_table</b></a>(
+- ST_PFICPCP <b>compare</b>, <i></i>
+- ST_PFICPI <b>hash</b> <i></i>
+-)
+-</pre>
+-<dd> Create and initialize a table with the comparison function compare_fn and hash function hash_fn. compare_fn is <pre> int compare_fn(const char *key1, const char *key2) </pre> It returns <,=,> 0 depending on whether key1 <,=,> key2 by some measure.<p> hash_fn is <pre> int hash_fn(char *key, int modulus) </pre> It returns a integer between 0 and modulus-1 such that if compare_fn(key1,key2) == 0 then hash_fn(key1) == hash_fn(key2).<p> There are five predefined hash and comparison functions in st. For keys as numbers: <pre> st_numhash(key, modulus) { return (unsigned int) key % modulus; } </pre> <pre> st_numcmp(x,y) { return (int) x - (int) y; } </pre> For keys as pointers: <pre> st_ptrhash(key, modulus) { return ((unsigned int) key/4) % modulus } </pre> <pre> st_ptrcmp(x,y) { return (int) x - (int) y; } </pre> For keys as strings: <pre> st_strhash(x,y) - a reasonable hashing function for strings </pre> <pre> strcmp(x,y) - the standard library function </pre> It is recommended to use these particular functions if they fit your needs, since st will recognize certain of them and run more quickly because of it.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table_with_params">st_init_table_with_params</a>
+-<a href="stAllDet.html#st_free_table">st_free_table</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_insert"><b>st_insert</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>key</b>, <i></i>
+- void * <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> Insert value in table under the key 'key'. Returns 1 if there was an entry already under the key; 0 if there was no entry under the key and insertion was successful; ST_OUT_OF_MEM otherwise. In either of the first two cases the new value is added.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dt><pre>
+- <i></i>
+-<a name="st_is_member"><b>st_is_member</b></a>(
+- <b>table</b>, <i></i>
+- <b>key</b> <i></i>
+-)
+-</pre>
+-<dd> Returns 1 if there is an entry under `key' in `table', 0 otherwise.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_lookup">st_lookup</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_lookup_int"><b>st_lookup_int</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>key</b>, <i></i>
+- int * <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> Lookup up `key' in `table'. If an entry is found, 1 is returned and if `value' is not nil, the variable it points to is set to the associated integer value. If an entry is not found, 0 is return and the variable pointed by `value' is unchanged.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_lookup">st_lookup</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_lookup"><b>st_lookup</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>key</b>, <i></i>
+- void * <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> Lookup up `key' in `table'. If an entry is found, 1 is returned and if `value' is not nil, the variable it points to is set to the associated value. If an entry is not found, 0 is returned and the variable pointed by value is unchanged.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_lookup_int">st_lookup_int</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_numcmp"><b>st_numcmp</b></a>(
+- const char * <b>x</b>, <i></i>
+- const char * <b>y</b> <i></i>
+-)
+-</pre>
+-<dd> integer number comparison function.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table">st_init_table</a>
+-<a href="stAllDet.html#st_numhash">st_numhash</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_numhash"><b>st_numhash</b></a>(
+- char * <b>x</b>, <i></i>
+- int <b>size</b> <i></i>
+-)
+-</pre>
+-<dd> Integer number hash function.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table">st_init_table</a>
+-<a href="stAllDet.html#st_numcmp">st_numcmp</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_ptrcmp"><b>st_ptrcmp</b></a>(
+- const char * <b>x</b>, <i></i>
+- const char * <b>y</b> <i></i>
+-)
+-</pre>
+-<dd> Pointer comparison function.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table">st_init_table</a>
+-<a href="stAllDet.html#st_ptrhash">st_ptrhash</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_ptrhash"><b>st_ptrhash</b></a>(
+- char * <b>x</b>, <i></i>
+- int <b>size</b> <i></i>
+-)
+-</pre>
+-<dd> Pointer hash function.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table">st_init_table</a>
+-<a href="stAllDet.html#st_ptrcmp">st_ptrcmp</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_strhash"><b>st_strhash</b></a>(
+- char * <b>string</b>, <i></i>
+- int <b>modulus</b> <i></i>
+-)
+-</pre>
+-<dd> String hash function.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table">st_init_table</a>
+-</code>
+-
+-
+-</dl>
+-
+-<hr>
+-
+-Generated automatically by <code>extdoc</code> on 20040102
+-
+-</body></html>
+diff --git a/Cudd/st/doc/stExtAbs.html b/Cudd/st/doc/stExtAbs.html
+deleted file mode 100644
+index 5302461..0000000
+--- a/Cudd/st/doc/stExtAbs.html
++++ /dev/null
+@@ -1,96 +0,0 @@
+-<html>
+-<head><title>st package abstract</title></head>
+-<body>
+-
+-<h1>st package abstract</h1>
+-<h2>Symbol table package.</h2>
+-<hr>
+-
+-<!-- Function Abstracts -->
+-
+-<dl>
+-<dt> <a href="stExtDet.html#st_add_direct"><code>st_add_direct()</code></a>
+-<dd> Place 'value' in 'table' under the key 'key'.
+-
+-<dt> <a href="stExtDet.html#st_copy"><code>st_copy()</code></a>
+-<dd> Return a copy of old_table and all its members.
+-
+-<dt> <a href="stExtDet.html#st_count"><code>st_count()</code></a>
+-<dd> Returns the number of entries in the table `table'.
+-
+-<dt> <a href="stExtDet.html#st_delete_int"><code>st_delete_int()</code></a>
+-<dd> Delete the entry with the key pointed to by `keyp'.
+-
+-<dt> <a href="stExtDet.html#st_delete"><code>st_delete()</code></a>
+-<dd> Delete the entry with the key pointed to by `keyp'.
+-
+-<dt> <a href="stExtDet.html#st_find_or_add"><code>st_find_or_add()</code></a>
+-<dd> Lookup `key' in `table'.
+-
+-<dt> <a href="stExtDet.html#st_find"><code>st_find()</code></a>
+-<dd> Lookup `key' in `table'.
+-
+-<dt> <a href="stExtDet.html#st_foreach_item_int"><code>st_foreach_item_int()</code></a>
+-<dd> Iteration macro.
+-
+-<dt> <a href="stExtDet.html#st_foreach_item"><code>st_foreach_item()</code></a>
+-<dd> Iteration macro.
+-
+-<dt> <a href="stExtDet.html#st_foreach"><code>st_foreach()</code></a>
+-<dd> Iterates over the elements of a table.
+-
+-<dt> <a href="stExtDet.html#st_free_gen"><code>st_free_gen()</code></a>
+-<dd> Reclaims the resources associated with `gen'.
+-
+-<dt> <a href="stExtDet.html#st_free_table"><code>st_free_table()</code></a>
+-<dd> Free a table.
+-
+-<dt> <a href="stExtDet.html#st_gen_int"><code>st_gen_int()</code></a>
+-<dd> Returns the next (key, value) pair in the generation sequence.
+-
+-<dt> <a href="stExtDet.html#st_gen"><code>st_gen()</code></a>
+-<dd> returns the next (key, value) pair in the generation sequence.
+-
+-<dt> <a href="stExtDet.html#st_init_gen"><code>st_init_gen()</code></a>
+-<dd> Initializes a generator.
+-
+-<dt> <a href="stExtDet.html#st_init_table_with_params"><code>st_init_table_with_params()</code></a>
+-<dd> Create a table with given parameters.
+-
+-<dt> <a href="stExtDet.html#st_init_table"><code>st_init_table()</code></a>
+-<dd> Create and initialize a table.
+-
+-<dt> <a href="stExtDet.html#st_insert"><code>st_insert()</code></a>
+-<dd> Insert value in table under the key 'key'.
+-
+-<dt> <a href="stExtDet.html#st_is_member"><code>st_is_member()</code></a>
+-<dd> Checks whethere `key' is in `table'.
+-
+-<dt> <a href="stExtDet.html#st_lookup_int"><code>st_lookup_int()</code></a>
+-<dd> Lookup up `key' in `table'.
+-
+-<dt> <a href="stExtDet.html#st_lookup"><code>st_lookup()</code></a>
+-<dd> Lookup up `key' in `table'.
+-
+-<dt> <a href="stExtDet.html#st_numcmp"><code>st_numcmp()</code></a>
+-<dd> Number comparison function.
+-
+-<dt> <a href="stExtDet.html#st_numhash"><code>st_numhash()</code></a>
+-<dd> Number hash function.
+-
+-<dt> <a href="stExtDet.html#st_ptrcmp"><code>st_ptrcmp()</code></a>
+-<dd> Pointer comparison function.
+-
+-<dt> <a href="stExtDet.html#st_ptrhash"><code>st_ptrhash()</code></a>
+-<dd> Pointer hash function.
+-
+-<dt> <a href="stExtDet.html#st_strhash"><code>st_strhash()</code></a>
+-<dd> String hash function.
+-
+-</dl>
+-
+-<hr>
+-
+-Generated automatically by <code>extdoc</code> on 20040102
+-
+-</body></html>
+diff --git a/Cudd/st/doc/stExtDet.html b/Cudd/st/doc/stExtDet.html
+deleted file mode 100644
+index 43cb6f4..0000000
+--- a/Cudd/st/doc/stExtDet.html
++++ /dev/null
+@@ -1,463 +0,0 @@
+-<html>
+-<head><title>The st package</title></head>
+-<body>
+-
+-<h1>The st package</h1>
+-<h2>Symbol table package.</h2>
+-<h3></h3>
+-<hr>
+-<ul>
+-<li><a href="stExtAbs.html"><h3>External abstracts</h3></a>
+-<li><a href="stAllAbs.html"><h3>All abstracts</h3></a>
+-<li><a href="stExtDet.html#prototypes"><h3>External functions</h3></a>
+-<li><a href="stAllDet.html#prototypes"><h3>All functions</h3></a>
+-</ul>
+-
+-<hr>
+-
+-<a name="description">
+-The st library provides functions to create, maintain,
+- and query symbol tables.
+-</a>
+-
+-<hr>
+-<!-- Function Prototypes and description -->
+-
+-<dl>
+-<a name="prototypes"></a>
+-<dt><pre>
+-int <i></i>
+-<a name="st_add_direct"><b>st_add_direct</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>key</b>, <i></i>
+- void * <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> Place 'value' in 'table' under the key 'key'. This is done without checking if 'key' is in 'table' already. This should only be used if you are sure there is not already an entry for 'key', since it is undefined which entry you would later get from st_lookup or st_find_or_add. Returns 1 if successful; ST_OUT_OF_MEM otherwise.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dt><pre>
+-st_table * <i></i>
+-<a name="st_copy"><b>st_copy</b></a>(
+- st_table * <b>old_table</b> <i></i>
+-)
+-</pre>
+-<dd> Return a copy of old_table and all its members. (st_table *) 0 is returned if there was insufficient memory to do the copy.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dt><pre>
+- <i></i>
+-<a name="st_count"><b>st_count</b></a>(
+- <b>table</b> <i></i>
+-)
+-</pre>
+-<dd> Returns the number of entries in the table `table'.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_delete_int"><b>st_delete_int</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>keyp</b>, <i></i>
+- int * <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> Delete the entry with the key pointed to by `keyp'. `value' must be a pointer to an integer. If the entry is found, 1 is returned, the variable pointed by `keyp' is set to the actual key and the variable pointed by `value' is set to the corresponding entry. (This allows the freeing of the associated storage.) If the entry is not found, then 0 is returned and nothing is changed.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_delete">st_delete</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_delete"><b>st_delete</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>keyp</b>, <i></i>
+- void * <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> Delete the entry with the key pointed to by `keyp'. If the entry is found, 1 is returned, the variable pointed by `keyp' is set to the actual key and the variable pointed by `value' is set to the corresponding entry. (This allows the freeing of the associated storage.) If the entry is not found, then 0 is returned and nothing is changed.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_delete_int">st_delete_int</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_find_or_add"><b>st_find_or_add</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>key</b>, <i></i>
+- void * <b>slot</b> <i></i>
+-)
+-</pre>
+-<dd> Lookup `key' in `table'. If not found, create an entry. In either case set slot to point to the field in the entry where the value is stored. The value associated with `key' may then be changed by accessing directly through slot. Returns 1 if an entry already existed, 0 if it did not exist and creation was successful; ST_OUT_OF_MEM otherwise. As an example: <pre> char **slot; </pre> <pre> char *key; </pre> <pre> char *value = (char *) item_ptr <-- ptr to a malloc'd structure </pre> <pre> if (st_find_or_add(table, key, &slot) == 1) { </pre> <pre> FREE(*slot); <-- free the old value of the record </pre> <pre> } </pre> <pre> *slot = value; <-- attach the new value to the record </pre> This replaces the equivelent code: <pre> if (st_lookup(table, key, &ovalue) == 1) { </pre> <pre> FREE(ovalue); </pre> <pre> } </pre> <pre> st_insert(table, key, value); </pre>
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_find">st_find</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_find"><b>st_find</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>key</b>, <i></i>
+- void * <b>slot</b> <i></i>
+-)
+-</pre>
+-<dd> Like st_find_or_add, but does not create an entry if one is not found.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_find_or_add">st_find_or_add</a>
+-</code>
+-
+-<dt><pre>
+- <i></i>
+-<a name="st_foreach_item_int"><b>st_foreach_item_int</b></a>(
+- <b>table</b>, <i></i>
+- <b>gen</b>, <i></i>
+- <b>key</b>, <i></i>
+- <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> An iteration macro which loops over all the entries in `table', setting `key' to point to the key and `value' to the associated value (if it is not nil). `value' is assumed to be a pointer to an integer. `gen' is a generator variable used internally. Sample usage: <pre> char *key; </pre> <pre> int value; </pre> <pre> st_generator *gen; </pre> <pre> st_foreach_item_int(table, gen, &key, &value) { </pre> <pre> process_item(value); </pre> <pre> } </pre>
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_foreach_item">st_foreach_item</a>
+-<a href="stAllDet.html#st_foreach">st_foreach</a>
+-</code>
+-
+-<dt><pre>
+- <i></i>
+-<a name="st_foreach_item"><b>st_foreach_item</b></a>(
+- <b>table</b>, <i></i>
+- <b>gen</b>, <i></i>
+- <b>key</b>, <i></i>
+- <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> An iteration macro which loops over all the entries in `table', setting `key' to point to the key and `value' to the associated value (if it is not nil). `gen' is a generator variable used internally. Sample usage: <pre> char *key, *value; </pre> <pre> st_generator *gen; </pre> <pre> st_foreach_item(table, gen, &key, &value) { </pre> <pre> process_item(value); </pre> <pre> } </pre>
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_foreach_item_int">st_foreach_item_int</a>
+-<a href="stAllDet.html#st_foreach">st_foreach</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_foreach"><b>st_foreach</b></a>(
+- st_table * <b>table</b>, <i></i>
+- ST_PFSR <b>func</b>, <i></i>
+- char * <b>arg</b> <i></i>
+-)
+-</pre>
+-<dd> For each (key, value) record in `table', st_foreach call func with the arguments <pre> (*func)(key, value, arg) </pre> If func returns ST_CONTINUE, st_foreach continues processing entries. If func returns ST_STOP, st_foreach stops processing and returns immediately. If func returns ST_DELETE, then the entry is deleted from the symbol table and st_foreach continues. In the case of ST_DELETE, it is func's responsibility to free the key and value, if necessary.<p> The routine returns 1 if all items in the table were generated and 0 if the generation sequence was aborted using ST_STOP. The order in which the records are visited will be seemingly random.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_foreach_item">st_foreach_item</a>
+-<a href="stAllDet.html#st_foreach_item_int">st_foreach_item_int</a>
+-</code>
+-
+-<dt><pre>
+-void <i></i>
+-<a name="st_free_gen"><b>st_free_gen</b></a>(
+- st_generator * <b>gen</b> <i></i>
+-)
+-</pre>
+-<dd> After generating all items in a generation sequence, this routine must be called to reclaim the resources associated with `gen'.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_gen">st_init_gen</a>
+-</code>
+-
+-<dt><pre>
+-void <i></i>
+-<a name="st_free_table"><b>st_free_table</b></a>(
+- st_table * <b>table</b> <i></i>
+-)
+-</pre>
+-<dd> Any internal storage associated with table is freed. It is the user's responsibility to free any storage associated with the pointers he placed in the table (by perhaps using st_foreach).
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table">st_init_table</a>
+-<a href="stAllDet.html#st_init_table_with_params">st_init_table_with_params</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_gen_int"><b>st_gen_int</b></a>(
+- st_generator * <b>gen</b>, <i></i>
+- void * <b>key_p</b>, <i></i>
+- int * <b>value_p</b> <i></i>
+-)
+-</pre>
+-<dd> Given a generator returned by st_init_gen(), this routine returns the next (key, value) pair in the generation sequence. `value_p' must be a pointer to an integer. The pointer `value_p' can be zero which means no value will be returned. When there are no more items in the generation sequence, the routine returns 0.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_gen">st_gen</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_gen"><b>st_gen</b></a>(
+- st_generator * <b>gen</b>, <i></i>
+- void * <b>key_p</b>, <i></i>
+- void * <b>value_p</b> <i></i>
+-)
+-</pre>
+-<dd> Given a generator returned by st_init_gen(), this routine returns the next (key, value) pair in the generation sequence. The pointer `value_p' can be zero which means no value will be returned. When there are no more items in the generation sequence, the routine returns 0. While using a generation sequence, deleting any (key, value) pair other than the one just generated may cause a fatal error when st_gen() is called later in the sequence and is therefore not recommended.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_gen_int">st_gen_int</a>
+-</code>
+-
+-<dt><pre>
+-st_generator * <i></i>
+-<a name="st_init_gen"><b>st_init_gen</b></a>(
+- st_table * <b>table</b> <i></i>
+-)
+-</pre>
+-<dd> Returns a generator handle which when used with st_gen() will progressively return each (key, value) record in `table'.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_free_gen">st_free_gen</a>
+-</code>
+-
+-<dt><pre>
+-st_table * <i></i>
+-<a name="st_init_table_with_params"><b>st_init_table_with_params</b></a>(
+- ST_PFICPCP <b>compare</b>, <i></i>
+- ST_PFICPI <b>hash</b>, <i></i>
+- int <b>size</b>, <i></i>
+- int <b>density</b>, <i></i>
+- double <b>grow_factor</b>, <i></i>
+- int <b>reorder_flag</b> <i></i>
+-)
+-</pre>
+-<dd> The full blown table initializer. compare and hash are the same as in st_init_table. density is the largest the average number of entries per hash bin there should be before the table is grown. grow_factor is the factor the table is grown by when it becomes too full. size is the initial number of bins to be allocated for the hash table. If reorder_flag is non-zero, then every time an entry is found, it is moved to the top of the chain.<p> st_init_table(compare, hash) is equivelent to <pre> st_init_table_with_params(compare, hash, ST_DEFAULT_INIT_TABLE_SIZE, ST_DEFAULT_MAX_DENSITY, ST_DEFAULT_GROW_FACTOR, ST_DEFAULT_REORDER_FLAG); </pre>
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table">st_init_table</a>
+-<a href="stAllDet.html#st_free_table">st_free_table</a>
+-</code>
+-
+-<dt><pre>
+-st_table * <i></i>
+-<a name="st_init_table"><b>st_init_table</b></a>(
+- ST_PFICPCP <b>compare</b>, <i></i>
+- ST_PFICPI <b>hash</b> <i></i>
+-)
+-</pre>
+-<dd> Create and initialize a table with the comparison function compare_fn and hash function hash_fn. compare_fn is <pre> int compare_fn(const char *key1, const char *key2) </pre> It returns <,=,> 0 depending on whether key1 <,=,> key2 by some measure.<p> hash_fn is <pre> int hash_fn(char *key, int modulus) </pre> It returns a integer between 0 and modulus-1 such that if compare_fn(key1,key2) == 0 then hash_fn(key1) == hash_fn(key2).<p> There are five predefined hash and comparison functions in st. For keys as numbers: <pre> st_numhash(key, modulus) { return (unsigned int) key % modulus; } </pre> <pre> st_numcmp(x,y) { return (int) x - (int) y; } </pre> For keys as pointers: <pre> st_ptrhash(key, modulus) { return ((unsigned int) key/4) % modulus } </pre> <pre> st_ptrcmp(x,y) { return (int) x - (int) y; } </pre> For keys as strings: <pre> st_strhash(x,y) - a reasonable hashing function for strings </pre> <pre> strcmp(x,y) - the standard library function </pre> It is recommended to use these particular functions if they fit your needs, since st will recognize certain of them and run more quickly because of it.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table_with_params">st_init_table_with_params</a>
+-<a href="stAllDet.html#st_free_table">st_free_table</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_insert"><b>st_insert</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>key</b>, <i></i>
+- void * <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> Insert value in table under the key 'key'. Returns 1 if there was an entry already under the key; 0 if there was no entry under the key and insertion was successful; ST_OUT_OF_MEM otherwise. In either of the first two cases the new value is added.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dt><pre>
+- <i></i>
+-<a name="st_is_member"><b>st_is_member</b></a>(
+- <b>table</b>, <i></i>
+- <b>key</b> <i></i>
+-)
+-</pre>
+-<dd> Returns 1 if there is an entry under `key' in `table', 0 otherwise.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_lookup">st_lookup</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_lookup_int"><b>st_lookup_int</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>key</b>, <i></i>
+- int * <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> Lookup up `key' in `table'. If an entry is found, 1 is returned and if `value' is not nil, the variable it points to is set to the associated integer value. If an entry is not found, 0 is return and the variable pointed by `value' is unchanged.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_lookup">st_lookup</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_lookup"><b>st_lookup</b></a>(
+- st_table * <b>table</b>, <i></i>
+- void * <b>key</b>, <i></i>
+- void * <b>value</b> <i></i>
+-)
+-</pre>
+-<dd> Lookup up `key' in `table'. If an entry is found, 1 is returned and if `value' is not nil, the variable it points to is set to the associated value. If an entry is not found, 0 is returned and the variable pointed by value is unchanged.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_lookup_int">st_lookup_int</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_numcmp"><b>st_numcmp</b></a>(
+- const char * <b>x</b>, <i></i>
+- const char * <b>y</b> <i></i>
+-)
+-</pre>
+-<dd> integer number comparison function.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table">st_init_table</a>
+-<a href="stAllDet.html#st_numhash">st_numhash</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_numhash"><b>st_numhash</b></a>(
+- char * <b>x</b>, <i></i>
+- int <b>size</b> <i></i>
+-)
+-</pre>
+-<dd> Integer number hash function.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table">st_init_table</a>
+-<a href="stAllDet.html#st_numcmp">st_numcmp</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_ptrcmp"><b>st_ptrcmp</b></a>(
+- const char * <b>x</b>, <i></i>
+- const char * <b>y</b> <i></i>
+-)
+-</pre>
+-<dd> Pointer comparison function.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table">st_init_table</a>
+-<a href="stAllDet.html#st_ptrhash">st_ptrhash</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_ptrhash"><b>st_ptrhash</b></a>(
+- char * <b>x</b>, <i></i>
+- int <b>size</b> <i></i>
+-)
+-</pre>
+-<dd> Pointer hash function.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table">st_init_table</a>
+-<a href="stAllDet.html#st_ptrcmp">st_ptrcmp</a>
+-</code>
+-
+-<dt><pre>
+-int <i></i>
+-<a name="st_strhash"><b>st_strhash</b></a>(
+- char * <b>string</b>, <i></i>
+- int <b>modulus</b> <i></i>
+-)
+-</pre>
+-<dd> String hash function.
+-<p>
+-
+-<dd> <b>Side Effects</b> None
+-<p>
+-
+-<dd> <b>See Also</b> <code><a href="stAllDet.html#st_init_table">st_init_table</a>
+-</code>
+-
+-
+-</dl>
+-
+-<hr>
+-
+-Generated automatically by <code>extdoc</code> on 20040102
+-
+-</body></html>
+diff --git a/Cudd/st/st.c b/Cudd/st/st.c
+deleted file mode 100644
+index dd76fa5..0000000
+--- a/Cudd/st/st.c
++++ /dev/null
+@@ -1,1065 +0,0 @@
+-/**CFile***********************************************************************
+-
+- FileName [st.c]
+-
+- PackageName [st]
+-
+- Synopsis [Symbol table package.]
+-
+- Description [The st library provides functions to create, maintain,
+- and query symbol tables.]
+-
+- SeeAlso []
+-
+- Author []
+-
+- Copyright []
+-
+-******************************************************************************/
+-
+-#include "util.h"
+-#include "st.h"
+-
+-/*---------------------------------------------------------------------------*/
+-/* Constant declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-#ifndef lint
+-static char rcsid[] UTIL_UNUSED = " $Id: st.c,v 1.12 2010/04/22 19:00:55 fabio Exp fabio $";
+-#endif
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-#define ST_NUMCMP(x,y) ((x) != (y))
+-
+-#define ST_NUMHASH(x,size) ((unsigned long)(x)%(size))
+-
+-#if SIZEOF_VOID_P == 8
+-#define st_shift 3
+-#else
+-#define st_shift 2
+-#endif
+-
+-#define ST_PTRHASH(x,size) ((unsigned int)((unsigned long)(x)>>st_shift)%size)
+-
+-#define EQUAL(func, x, y) \
+- ((((func) == st_numcmp) || ((func) == st_ptrcmp)) ?\
+- (ST_NUMCMP((x),(y)) == 0) : ((*func)((x), (y)) == 0))
+-
+-#define do_hash(key, table)\
+- ((int)((table->hash == st_ptrhash) ? ST_PTRHASH((char *)(key),(table)->num_bins) :\
+- (table->hash == st_numhash) ? ST_NUMHASH((char *)(key), (table)->num_bins) :\
+- (*table->hash)((char *)(key), (table)->num_bins)))
+-
+-#define PTR_NOT_EQUAL(table, ptr, user_key)\
+-(ptr != NIL(st_table_entry) && !EQUAL(table->compare, (char *)user_key, (ptr)->key))
+-
+-#define FIND_ENTRY(table, hash_val, key, ptr, last) \
+- (last) = &(table)->bins[hash_val];\
+- (ptr) = *(last);\
+- while (PTR_NOT_EQUAL((table), (ptr), (key))) {\
+- (last) = &(ptr)->next; (ptr) = *(last);\
+- }\
+- if ((ptr) != NIL(st_table_entry) && (table)->reorder_flag) {\
+- *(last) = (ptr)->next;\
+- (ptr)->next = (table)->bins[hash_val];\
+- (table)->bins[hash_val] = (ptr);\
+- }
+-
+-/* This macro does not check if memory allocation fails. Use at you own risk */
+-#define ADD_DIRECT(table, key, value, hash_val, newt)\
+-{\
+- if (table->num_entries/table->num_bins >= table->max_density) {\
+- rehash(table);\
+- hash_val = do_hash(key,table);\
+- }\
+- \
+- newt = ALLOC(st_table_entry, 1);\
+- \
+- newt->key = (char *)key;\
+- newt->record = value;\
+- newt->next = table->bins[hash_val];\
+- table->bins[hash_val] = newt;\
+- table->num_entries++;\
+-}
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Static function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-static int rehash (st_table *);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of exported functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Create and initialize a table.]
+-
+- Description [Create and initialize a table with the comparison function
+- compare_fn and hash function hash_fn. compare_fn is
+- <pre>
+- int compare_fn(const char *key1, const char *key2)
+- </pre>
+- It returns <,=,> 0 depending on whether key1 <,=,> key2 by some measure.<p>
+- hash_fn is
+- <pre>
+- int hash_fn(char *key, int modulus)
+- </pre>
+- It returns a integer between 0 and modulus-1 such that if
+- compare_fn(key1,key2) == 0 then hash_fn(key1) == hash_fn(key2).<p>
+- There are five predefined hash and comparison functions in st.
+- For keys as numbers:
+- <pre>
+- st_numhash(key, modulus) { return (unsigned int) key % modulus; }
+- </pre>
+- <pre>
+- st_numcmp(x,y) { return (int) x - (int) y; }
+- </pre>
+- For keys as pointers:
+- <pre>
+- st_ptrhash(key, modulus) { return ((unsigned int) key/4) % modulus }
+- </pre>
+- <pre>
+- st_ptrcmp(x,y) { return (int) x - (int) y; }
+- </pre>
+- For keys as strings:
+- <pre>
+- st_strhash(x,y) - a reasonable hashing function for strings
+- </pre>
+- <pre>
+- strcmp(x,y) - the standard library function
+- </pre>
+- It is recommended to use these particular functions if they fit your
+- needs, since st will recognize certain of them and run more quickly
+- because of it.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_init_table_with_params st_free_table]
+-
+-******************************************************************************/
+-st_table *
+-st_init_table(ST_PFICPCP compare, ST_PFICPI hash)
+-{
+- return st_init_table_with_params(compare, hash, ST_DEFAULT_INIT_TABLE_SIZE,
+- ST_DEFAULT_MAX_DENSITY,
+- ST_DEFAULT_GROW_FACTOR,
+- ST_DEFAULT_REORDER_FLAG);
+-
+-} /* st_init_table */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Create a table with given parameters.]
+-
+- Description [The full blown table initializer. compare and hash are
+- the same as in st_init_table. density is the largest the average
+- number of entries per hash bin there should be before the table is
+- grown. grow_factor is the factor the table is grown by when it
+- becomes too full. size is the initial number of bins to be allocated
+- for the hash table. If reorder_flag is non-zero, then every time an
+- entry is found, it is moved to the top of the chain.<p>
+- st_init_table(compare, hash) is equivelent to
+- <pre>
+- st_init_table_with_params(compare, hash, ST_DEFAULT_INIT_TABLE_SIZE,
+- ST_DEFAULT_MAX_DENSITY,
+- ST_DEFAULT_GROW_FACTOR,
+- ST_DEFAULT_REORDER_FLAG);
+- </pre>
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_init_table st_free_table]
+-
+-******************************************************************************/
+-st_table *
+-st_init_table_with_params(
+- ST_PFICPCP compare,
+- ST_PFICPI hash,
+- int size,
+- int density,
+- double grow_factor,
+- int reorder_flag)
+-{
+- int i;
+- st_table *newt;
+-
+- newt = ALLOC(st_table, 1);
+- if (newt == NIL(st_table)) {
+- return NIL(st_table);
+- }
+- newt->compare = compare;
+- newt->hash = hash;
+- newt->num_entries = 0;
+- newt->max_density = density;
+- newt->grow_factor = grow_factor;
+- newt->reorder_flag = reorder_flag;
+- if (size <= 0) {
+- size = 1;
+- }
+- newt->num_bins = size;
+- newt->bins = ALLOC(st_table_entry *, size);
+- if (newt->bins == NIL(st_table_entry *)) {
+- FREE(newt);
+- return NIL(st_table);
+- }
+- for(i = 0; i < size; i++) {
+- newt->bins[i] = 0;
+- }
+- return newt;
+-
+-} /* st_init_table_with_params */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Free a table.]
+-
+- Description [Any internal storage associated with table is freed.
+- It is the user's responsibility to free any storage associated
+- with the pointers he placed in the table (by perhaps using
+- st_foreach).]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_init_table st_init_table_with_params]
+-
+-******************************************************************************/
+-void
+-st_free_table(st_table *table)
+-{
+- st_table_entry *ptr, *next;
+- int i;
+-
+- for(i = 0; i < table->num_bins ; i++) {
+- ptr = table->bins[i];
+- while (ptr != NIL(st_table_entry)) {
+- next = ptr->next;
+- FREE(ptr);
+- ptr = next;
+- }
+- }
+- FREE(table->bins);
+- FREE(table);
+-
+-} /* st_free_table */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Lookup up `key' in `table'.]
+-
+- Description [Lookup up `key' in `table'. If an entry is found, 1 is
+- returned and if `value' is not nil, the variable it points to is set
+- to the associated value. If an entry is not found, 0 is returned
+- and the variable pointed by value is unchanged.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_lookup_int]
+-
+-******************************************************************************/
+-int
+-st_lookup(st_table *table, void *key, void *value)
+-{
+- int hash_val;
+- st_table_entry *ptr, **last;
+-
+- hash_val = do_hash(key, table);
+-
+- FIND_ENTRY(table, hash_val, key, ptr, last);
+-
+- if (ptr == NIL(st_table_entry)) {
+- return 0;
+- } else {
+- if (value != NIL(void)) {
+- *(char **)value = ptr->record;
+- }
+- return 1;
+- }
+-
+-} /* st_lookup */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Lookup up `key' in `table'.]
+-
+- Description [Lookup up `key' in `table'. If an entry is found, 1 is
+- returned and if `value' is not nil, the variable it points to is
+- set to the associated integer value. If an entry is not found, 0 is
+- return and the variable pointed by `value' is unchanged.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_lookup]
+-
+-******************************************************************************/
+-int
+-st_lookup_int(st_table *table, void *key, int *value)
+-{
+- int hash_val;
+- st_table_entry *ptr, **last;
+-
+- hash_val = do_hash(key, table);
+-
+- FIND_ENTRY(table, hash_val, key, ptr, last);
+-
+- if (ptr == NIL(st_table_entry)) {
+- return 0;
+- } else {
+- if (value != NIL(int)) {
+- *value = (int) (long) ptr->record;
+- }
+- return 1;
+- }
+-
+-} /* st_lookup_int */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Insert value in table under the key 'key'.]
+-
+- Description [Insert value in table under the key 'key'. Returns 1
+- if there was an entry already under the key; 0 if there was no entry
+- under the key and insertion was successful; ST_OUT_OF_MEM otherwise.
+- In either of the first two cases the new value is added.]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-int
+-st_insert(st_table *table, void *key, void *value)
+-{
+- int hash_val;
+- st_table_entry *newt;
+- st_table_entry *ptr, **last;
+-
+- hash_val = do_hash(key, table);
+-
+- FIND_ENTRY(table, hash_val, key, ptr, last);
+-
+- if (ptr == NIL(st_table_entry)) {
+- if (table->num_entries/table->num_bins >= table->max_density) {
+- if (rehash(table) == ST_OUT_OF_MEM) {
+- return ST_OUT_OF_MEM;
+- }
+- hash_val = do_hash(key, table);
+- }
+- newt = ALLOC(st_table_entry, 1);
+- if (newt == NIL(st_table_entry)) {
+- return ST_OUT_OF_MEM;
+- }
+- newt->key = (char *)key;
+- newt->record = (char *)value;
+- newt->next = table->bins[hash_val];
+- table->bins[hash_val] = newt;
+- table->num_entries++;
+- return 0;
+- } else {
+- ptr->record = (char *)value;
+- return 1;
+- }
+-
+-} /* st_insert */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Place 'value' in 'table' under the key 'key'.]
+-
+- Description [Place 'value' in 'table' under the key 'key'. This is
+- done without checking if 'key' is in 'table' already. This should
+- only be used if you are sure there is not already an entry for
+- 'key', since it is undefined which entry you would later get from
+- st_lookup or st_find_or_add. Returns 1 if successful; ST_OUT_OF_MEM
+- otherwise.]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-int
+-st_add_direct(st_table *table, void *key, void *value)
+-{
+- int hash_val;
+- st_table_entry *newt;
+-
+- hash_val = do_hash(key, table);
+- if (table->num_entries / table->num_bins >= table->max_density) {
+- if (rehash(table) == ST_OUT_OF_MEM) {
+- return ST_OUT_OF_MEM;
+- }
+- }
+- hash_val = do_hash(key, table);
+- newt = ALLOC(st_table_entry, 1);
+- if (newt == NIL(st_table_entry)) {
+- return ST_OUT_OF_MEM;
+- }
+- newt->key = (char *)key;
+- newt->record = (char *)value;
+- newt->next = table->bins[hash_val];
+- table->bins[hash_val] = newt;
+- table->num_entries++;
+- return 1;
+-
+-} /* st_add_direct */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Lookup `key' in `table'.]
+-
+- Description [Lookup `key' in `table'. If not found, create an
+- entry. In either case set slot to point to the field in the entry
+- where the value is stored. The value associated with `key' may then
+- be changed by accessing directly through slot. Returns 1 if an
+- entry already existed, 0 if it did not exist and creation was
+- successful; ST_OUT_OF_MEM otherwise. As an example:
+- <pre>
+- char **slot;
+- </pre>
+- <pre>
+- char *key;
+- </pre>
+- <pre>
+- char *value = (char *) item_ptr <-- ptr to a malloc'd structure
+- </pre>
+- <pre>
+- if (st_find_or_add(table, key, &slot) == 1) {
+- </pre>
+- <pre>
+- FREE(*slot); <-- free the old value of the record
+- </pre>
+- <pre>
+- }
+- </pre>
+- <pre>
+- *slot = value; <-- attach the new value to the record
+- </pre>
+- This replaces the equivelent code:
+- <pre>
+- if (st_lookup(table, key, &ovalue) == 1) {
+- </pre>
+- <pre>
+- FREE(ovalue);
+- </pre>
+- <pre>
+- }
+- </pre>
+- <pre>
+- st_insert(table, key, value);
+- </pre>
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_find]
+-
+-******************************************************************************/
+-int
+-st_find_or_add(st_table *table, void *key, void *slot)
+-{
+- int hash_val;
+- st_table_entry *newt, *ptr, **last;
+-
+- hash_val = do_hash(key, table);
+-
+- FIND_ENTRY(table, hash_val, key, ptr, last);
+-
+- if (ptr == NIL(st_table_entry)) {
+- if (table->num_entries / table->num_bins >= table->max_density) {
+- if (rehash(table) == ST_OUT_OF_MEM) {
+- return ST_OUT_OF_MEM;
+- }
+- hash_val = do_hash(key, table);
+- }
+- newt = ALLOC(st_table_entry, 1);
+- if (newt == NIL(st_table_entry)) {
+- return ST_OUT_OF_MEM;
+- }
+- newt->key = (char *)key;
+- newt->record = (char *) 0;
+- newt->next = table->bins[hash_val];
+- table->bins[hash_val] = newt;
+- table->num_entries++;
+- if (slot != NIL(void)) *(char ***)slot = &newt->record;
+- return 0;
+- } else {
+- if (slot != NIL(void)) *(char ***)slot = &ptr->record;
+- return 1;
+- }
+-
+-} /* st_find_or_add */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Lookup `key' in `table'.]
+-
+- Description [Like st_find_or_add, but does not create an entry if
+- one is not found.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_find_or_add]
+-
+-******************************************************************************/
+-int
+-st_find(st_table *table, void *key, void *slot)
+-{
+- int hash_val;
+- st_table_entry *ptr, **last;
+-
+- hash_val = do_hash(key, table);
+-
+- FIND_ENTRY(table, hash_val, key, ptr, last);
+-
+- if (ptr == NIL(st_table_entry)) {
+- return 0;
+- } else {
+- if (slot != NIL(void)) {
+- *(char ***)slot = &ptr->record;
+- }
+- return 1;
+- }
+-
+-} /* st_find */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Return a copy of old_table and all its members.]
+-
+- Description [Return a copy of old_table and all its members.
+- (st_table *) 0 is returned if there was insufficient memory to do
+- the copy.]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-st_table *
+-st_copy(st_table *old_table)
+-{
+- st_table *new_table;
+- st_table_entry *ptr, *newptr, *next, *newt;
+- int i, j, num_bins = old_table->num_bins;
+-
+- new_table = ALLOC(st_table, 1);
+- if (new_table == NIL(st_table)) {
+- return NIL(st_table);
+- }
+-
+- *new_table = *old_table;
+- new_table->bins = ALLOC(st_table_entry *, num_bins);
+- if (new_table->bins == NIL(st_table_entry *)) {
+- FREE(new_table);
+- return NIL(st_table);
+- }
+- for(i = 0; i < num_bins ; i++) {
+- new_table->bins[i] = NIL(st_table_entry);
+- ptr = old_table->bins[i];
+- while (ptr != NIL(st_table_entry)) {
+- newt = ALLOC(st_table_entry, 1);
+- if (newt == NIL(st_table_entry)) {
+- for (j = 0; j <= i; j++) {
+- newptr = new_table->bins[j];
+- while (newptr != NIL(st_table_entry)) {
+- next = newptr->next;
+- FREE(newptr);
+- newptr = next;
+- }
+- }
+- FREE(new_table->bins);
+- FREE(new_table);
+- return NIL(st_table);
+- }
+- *newt = *ptr;
+- newt->next = new_table->bins[i];
+- new_table->bins[i] = newt;
+- ptr = ptr->next;
+- }
+- }
+- return new_table;
+-
+-} /* st_copy */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Delete the entry with the key pointed to by `keyp'.]
+-
+- Description [Delete the entry with the key pointed to by `keyp'. If
+- the entry is found, 1 is returned, the variable pointed by `keyp' is
+- set to the actual key and the variable pointed by `value' is set to
+- the corresponding entry. (This allows the freeing of the associated
+- storage.) If the entry is not found, then 0 is returned and nothing
+- is changed.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_delete_int]
+-
+-******************************************************************************/
+-int
+-st_delete(st_table *table, void *keyp, void *value)
+-{
+- int hash_val;
+- char *key = *(char **)keyp;
+- st_table_entry *ptr, **last;
+-
+- hash_val = do_hash(key, table);
+-
+- FIND_ENTRY(table, hash_val, key, ptr ,last);
+-
+- if (ptr == NIL(st_table_entry)) {
+- return 0;
+- }
+-
+- *last = ptr->next;
+- if (value != NIL(void)) *(char **)value = ptr->record;
+- *(char **)keyp = ptr->key;
+- FREE(ptr);
+- table->num_entries--;
+- return 1;
+-
+-} /* st_delete */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Delete the entry with the key pointed to by `keyp'.]
+-
+- Description [Delete the entry with the key pointed to by `keyp'.
+- `value' must be a pointer to an integer. If the entry is found, 1
+- is returned, the variable pointed by `keyp' is set to the actual key
+- and the variable pointed by `value' is set to the corresponding
+- entry. (This allows the freeing of the associated storage.) If the
+- entry is not found, then 0 is returned and nothing is changed.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_delete]
+-
+-******************************************************************************/
+-int
+-st_delete_int(st_table *table, void *keyp, int *value)
+-{
+- int hash_val;
+- char *key = *(char **)keyp;
+- st_table_entry *ptr, **last;
+-
+- hash_val = do_hash(key, table);
+-
+- FIND_ENTRY(table, hash_val, key, ptr ,last);
+-
+- if (ptr == NIL(st_table_entry)) {
+- return 0;
+- }
+-
+- *last = ptr->next;
+- if (value != NIL(int)) *value = (int) (long) ptr->record;
+- *(char **)keyp = ptr->key;
+- FREE(ptr);
+- table->num_entries--;
+- return 1;
+-
+-} /* st_delete_int */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Iterates over the elements of a table.]
+-
+- Description [For each (key, value) record in `table', st_foreach
+- call func with the arguments
+- <pre>
+- (*func)(key, value, arg)
+- </pre>
+- If func returns ST_CONTINUE, st_foreach continues processing
+- entries. If func returns ST_STOP, st_foreach stops processing and
+- returns immediately. If func returns ST_DELETE, then the entry is
+- deleted from the symbol table and st_foreach continues. In the case
+- of ST_DELETE, it is func's responsibility to free the key and value,
+- if necessary.<p>
+-
+- The routine returns 1 if all items in the table were generated and 0
+- if the generation sequence was aborted using ST_STOP. The order in
+- which the records are visited will be seemingly random.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_foreach_item st_foreach_item_int]
+-
+-******************************************************************************/
+-int
+-st_foreach(st_table *table, ST_PFSR func, char *arg)
+-{
+- st_table_entry *ptr, **last;
+- enum st_retval retval;
+- int i;
+-
+- for(i = 0; i < table->num_bins; i++) {
+- last = &table->bins[i]; ptr = *last;
+- while (ptr != NIL(st_table_entry)) {
+- retval = (*func)(ptr->key, ptr->record, arg);
+- switch (retval) {
+- case ST_CONTINUE:
+- last = &ptr->next; ptr = *last;
+- break;
+- case ST_STOP:
+- return 0;
+- case ST_DELETE:
+- *last = ptr->next;
+- table->num_entries--; /* cstevens at ic */
+- FREE(ptr);
+- ptr = *last;
+- }
+- }
+- }
+- return 1;
+-
+-} /* st_foreach */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [String hash function.]
+-
+- Description [String hash function.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_init_table]
+-
+-******************************************************************************/
+-int
+-st_strhash(char *string, int modulus)
+-{
+- int val = 0;
+- int c;
+-
+- while ((c = *string++) != '\0') {
+- val = val*997 + c;
+- }
+-
+- return ((val < 0) ? -val : val)%modulus;
+-
+-} /* st_strhash */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Number hash function.]
+-
+- Description [Integer number hash function.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_init_table st_numcmp]
+-
+-******************************************************************************/
+-int
+-st_numhash(char *x, int size)
+-{
+- return ST_NUMHASH(x, size);
+-
+-} /* st_numhash */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Pointer hash function.]
+-
+- Description [Pointer hash function.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_init_table st_ptrcmp]
+-
+-******************************************************************************/
+-int
+-st_ptrhash(char *x, int size)
+-{
+- return ST_PTRHASH(x, size);
+-
+-} /* st_ptrhash */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Number comparison function.]
+-
+- Description [integer number comparison function.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_init_table st_numhash]
+-
+-******************************************************************************/
+-int
+-st_numcmp(const char *x, const char *y)
+-{
+- return ST_NUMCMP(x, y);
+-
+-} /* st_numcmp */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Pointer comparison function.]
+-
+- Description [Pointer comparison function.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_init_table st_ptrhash]
+-
+-******************************************************************************/
+-int
+-st_ptrcmp(const char *x, const char *y)
+-{
+- return ST_NUMCMP(x, y);
+-
+-} /* st_ptrcmp */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Initializes a generator.]
+-
+- Description [Returns a generator handle which when used with
+- st_gen() will progressively return each (key, value) record in
+- `table'.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_free_gen]
+-
+-******************************************************************************/
+-st_generator *
+-st_init_gen(st_table *table)
+-{
+- st_generator *gen;
+-
+- gen = ALLOC(st_generator, 1);
+- if (gen == NIL(st_generator)) {
+- return NIL(st_generator);
+- }
+- gen->table = table;
+- gen->entry = NIL(st_table_entry);
+- gen->index = 0;
+- return gen;
+-
+-} /* st_init_gen */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [returns the next (key, value) pair in the generation
+- sequence. ]
+-
+- Description [Given a generator returned by st_init_gen(), this
+- routine returns the next (key, value) pair in the generation
+- sequence. The pointer `value_p' can be zero which means no value
+- will be returned. When there are no more items in the generation
+- sequence, the routine returns 0.
+-
+- While using a generation sequence, deleting any (key, value) pair
+- other than the one just generated may cause a fatal error when
+- st_gen() is called later in the sequence and is therefore not
+- recommended.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_gen_int]
+-
+-******************************************************************************/
+-int
+-st_gen(st_generator *gen, void *key_p, void *value_p)
+-{
+- int i;
+-
+- if (gen->entry == NIL(st_table_entry)) {
+- /* try to find next entry */
+- for(i = gen->index; i < gen->table->num_bins; i++) {
+- if (gen->table->bins[i] != NIL(st_table_entry)) {
+- gen->index = i+1;
+- gen->entry = gen->table->bins[i];
+- break;
+- }
+- }
+- if (gen->entry == NIL(st_table_entry)) {
+- return 0; /* that's all folks ! */
+- }
+- }
+- *(char **)key_p = gen->entry->key;
+- if (value_p != NIL(void)) {
+- *(char **)value_p = gen->entry->record;
+- }
+- gen->entry = gen->entry->next;
+- return 1;
+-
+-} /* st_gen */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Returns the next (key, value) pair in the generation
+- sequence.]
+-
+- Description [Given a generator returned by st_init_gen(), this
+- routine returns the next (key, value) pair in the generation
+- sequence. `value_p' must be a pointer to an integer. The pointer
+- `value_p' can be zero which means no value will be returned. When
+- there are no more items in the generation sequence, the routine
+- returns 0.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_gen]
+-
+-******************************************************************************/
+-int
+-st_gen_int(st_generator *gen, void *key_p, int *value_p)
+-{
+- int i;
+-
+- if (gen->entry == NIL(st_table_entry)) {
+- /* try to find next entry */
+- for(i = gen->index; i < gen->table->num_bins; i++) {
+- if (gen->table->bins[i] != NIL(st_table_entry)) {
+- gen->index = i+1;
+- gen->entry = gen->table->bins[i];
+- break;
+- }
+- }
+- if (gen->entry == NIL(st_table_entry)) {
+- return 0; /* that's all folks ! */
+- }
+- }
+- *(char **)key_p = gen->entry->key;
+- if (value_p != NIL(int)) {
+- *value_p = (int) (long) gen->entry->record;
+- }
+- gen->entry = gen->entry->next;
+- return 1;
+-
+-} /* st_gen_int */
+-
+-
+-/**Function********************************************************************
+-
+- Synopsis [Reclaims the resources associated with `gen'.]
+-
+- Description [After generating all items in a generation sequence,
+- this routine must be called to reclaim the resources associated with
+- `gen'.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_init_gen]
+-
+-******************************************************************************/
+-void
+-st_free_gen(st_generator *gen)
+-{
+- FREE(gen);
+-
+-} /* st_free_gen */
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of internal functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Definition of static functions */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Function********************************************************************
+-
+- Synopsis [Rehashes a symbol table.]
+-
+- Description [Rehashes a symbol table.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_insert]
+-
+-******************************************************************************/
+-static int
+-rehash(st_table *table)
+-{
+- st_table_entry *ptr, *next, **old_bins;
+- int i, old_num_bins, hash_val, old_num_entries;
+-
+- /* save old values */
+- old_bins = table->bins;
+- old_num_bins = table->num_bins;
+- old_num_entries = table->num_entries;
+-
+- /* rehash */
+- table->num_bins = (int) (table->grow_factor * old_num_bins);
+- if (table->num_bins % 2 == 0) {
+- table->num_bins += 1;
+- }
+- table->num_entries = 0;
+- table->bins = ALLOC(st_table_entry *, table->num_bins);
+- if (table->bins == NIL(st_table_entry *)) {
+- table->bins = old_bins;
+- table->num_bins = old_num_bins;
+- table->num_entries = old_num_entries;
+- return ST_OUT_OF_MEM;
+- }
+- /* initialize */
+- for (i = 0; i < table->num_bins; i++) {
+- table->bins[i] = 0;
+- }
+-
+- /* copy data over */
+- for (i = 0; i < old_num_bins; i++) {
+- ptr = old_bins[i];
+- while (ptr != NIL(st_table_entry)) {
+- next = ptr->next;
+- hash_val = do_hash(ptr->key, table);
+- ptr->next = table->bins[hash_val];
+- table->bins[hash_val] = ptr;
+- table->num_entries++;
+- ptr = next;
+- }
+- }
+- FREE(old_bins);
+-
+- return 1;
+-
+-} /* rehash */
+diff --git a/Cudd/st/st.h b/Cudd/st/st.h
+deleted file mode 100644
+index dbb14bb..0000000
+--- a/Cudd/st/st.h
++++ /dev/null
+@@ -1,232 +0,0 @@
+-/**CHeaderFile*****************************************************************
+-
+- FileName [st.h]
+-
+- PackageName [st]
+-
+- Synopsis [Symbol table package.]
+-
+- Description [The st library provides functions to create, maintain,
+- and query symbol tables.]
+-
+- SeeAlso []
+-
+- Author []
+-
+- Copyright []
+-
+- Revision [$Id: st.h,v 1.10 2004/01/02 07:40:31 fabio Exp fabio $]
+-
+-******************************************************************************/
+-
+-#ifndef ST_INCLUDED
+-#define ST_INCLUDED
+-
+-/*---------------------------------------------------------------------------*/
+-/* Nested includes */
+-/*---------------------------------------------------------------------------*/
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-/*---------------------------------------------------------------------------*/
+-/* Constant declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-#define ST_DEFAULT_MAX_DENSITY 5
+-#define ST_DEFAULT_INIT_TABLE_SIZE 11
+-#define ST_DEFAULT_GROW_FACTOR 2.0
+-#define ST_DEFAULT_REORDER_FLAG 0
+-#define ST_OUT_OF_MEM -10000
+-
+-/*---------------------------------------------------------------------------*/
+-/* Stucture declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Type declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-typedef struct st_table_entry st_table_entry;
+-struct st_table_entry {
+- char *key;
+- char *record;
+- st_table_entry *next;
+-};
+-
+-typedef struct st_table st_table;
+-struct st_table {
+- int (*compare)(const char *, const char *);
+- int (*hash)(char *, int);
+- int num_bins;
+- int num_entries;
+- int max_density;
+- int reorder_flag;
+- double grow_factor;
+- st_table_entry **bins;
+-};
+-
+-typedef struct st_generator st_generator;
+-struct st_generator {
+- st_table *table;
+- st_table_entry *entry;
+- int index;
+-};
+-
+-enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE};
+-
+-typedef enum st_retval (*ST_PFSR)(char *, char *, char *);
+-
+-typedef int (*ST_PFICPCP)(const char *, const char *); /* type for comparison function */
+-
+-typedef int (*ST_PFICPI)(char *, int); /* type for hash function */
+-
+-/*---------------------------------------------------------------------------*/
+-/* Variable declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-
+-/*---------------------------------------------------------------------------*/
+-/* Macro declarations */
+-/*---------------------------------------------------------------------------*/
+-
+-/**Macro***********************************************************************
+-
+- Synopsis [Checks whethere `key' is in `table'.]
+-
+- Description [Returns 1 if there is an entry under `key' in `table', 0
+- otherwise.]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_lookup]
+-
+-******************************************************************************/
+-#define st_is_member(table,key) st_lookup(table,key,(char **) 0)
+-
+-
+-/**Macro***********************************************************************
+-
+- Synopsis [Returns the number of entries in the table `table'.]
+-
+- Description [Returns the number of entries in the table `table'.]
+-
+- SideEffects [None]
+-
+- SeeAlso []
+-
+-******************************************************************************/
+-#define st_count(table) ((table)->num_entries)
+-
+-
+-/**Macro***********************************************************************
+-
+- Synopsis [Iteration macro.]
+-
+- Description [An iteration macro which loops over all the entries in
+- `table', setting `key' to point to the key and `value' to the
+- associated value (if it is not nil). `gen' is a generator variable
+- used internally. Sample usage:
+- <pre>
+- char *key, *value;
+- </pre>
+- <pre>
+- st_generator *gen;
+- </pre>
+- <pre>
+-
+- st_foreach_item(table, gen, &key, &value) {
+- </pre>
+- <pre>
+- process_item(value);
+- </pre>
+- <pre>
+- }
+- </pre>
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_foreach_item_int st_foreach]
+-
+-******************************************************************************/
+-#define st_foreach_item(table, gen, key, value) \
+- for(gen=st_init_gen(table); st_gen(gen,key,value) || (st_free_gen(gen),0);)
+-
+-
+-/**Macro***********************************************************************
+-
+- Synopsis [Iteration macro.]
+-
+- Description [An iteration macro which loops over all the entries in
+- `table', setting `key' to point to the key and `value' to the
+- associated value (if it is not nil). `value' is assumed to be a
+- pointer to an integer. `gen' is a generator variable used
+- internally. Sample usage:
+- <pre>
+- char *key;
+- </pre>
+- <pre>
+- int value;
+- </pre>
+- <pre>
+- st_generator *gen;
+- </pre>
+- <pre>
+-
+- st_foreach_item_int(table, gen, &key, &value) {
+- </pre>
+- <pre>
+- process_item(value);
+- </pre>
+- <pre>
+- }
+- </pre>
+- ]
+-
+- SideEffects [None]
+-
+- SeeAlso [st_foreach_item st_foreach]
+-
+-******************************************************************************/
+-#define st_foreach_item_int(table, gen, key, value) \
+- for(gen=st_init_gen(table); st_gen_int(gen,key,value) || (st_free_gen(gen),0);)
+-
+-/**AutomaticStart*************************************************************/
+-
+-/*---------------------------------------------------------------------------*/
+-/* Function prototypes */
+-/*---------------------------------------------------------------------------*/
+-
+-extern st_table *st_init_table_with_params (ST_PFICPCP, ST_PFICPI, int, int, double, int);
+-extern st_table *st_init_table (ST_PFICPCP, ST_PFICPI);
+-extern void st_free_table (st_table *);
+-extern int st_lookup (st_table *, void *, void *);
+-extern int st_lookup_int (st_table *, void *, int *);
+-extern int st_insert (st_table *, void *, void *);
+-extern int st_add_direct (st_table *, void *, void *);
+-extern int st_find_or_add (st_table *, void *, void *);
+-extern int st_find (st_table *, void *, void *);
+-extern st_table *st_copy (st_table *);
+-extern int st_delete (st_table *, void *, void *);
+-extern int st_delete_int (st_table *, void *, int *);
+-extern int st_foreach (st_table *, ST_PFSR, char *);
+-extern int st_strhash (char *, int);
+-extern int st_numhash (char *, int);
+-extern int st_ptrhash (char *, int);
+-extern int st_numcmp (const char *, const char *);
+-extern int st_ptrcmp (const char *, const char *);
+-extern st_generator *st_init_gen (st_table *);
+-extern int st_gen (st_generator *, void *, void *);
+-extern int st_gen_int (st_generator *, void *, int *);
+-extern void st_free_gen (st_generator *);
+-
+-/**AutomaticEnd***************************************************************/
+-
+-#ifdef __cplusplus
+-} /* end of extern "C" */
+-#endif
+-
+-#endif /* ST_INCLUDED */
+diff --git a/Cudd/util/Makefile b/Cudd/util/Makefile
+deleted file mode 100644
+index 61543ba..0000000
+--- a/Cudd/util/Makefile
++++ /dev/null
+@@ -1,64 +0,0 @@
+-# $Id$
+-#
+-# util -- miscellaneous utility routines
+-#---------------------------------------------------------------------------
+-.SUFFIXES: .c .o .u
+-
+-CC = gcc
+-RANLIB = ranlib
+-
+-FLAGS = -DUNIX
+-MFLAG =
+-ICFLAGS = -g
+-CFLAGS = $(ICFLAGS) $(MFLAG) $(XCFLAGS)
+-
+-LINTFLAGS = -u -n
+-
+-# this is to create the lint library
+-LINTSWITCH = -o
+-
+-P = util
+-PSRC = cpu_time.c cpu_stats.c safe_mem.c strsav.c texpand.c \
+- ptime.c prtime.c pipefork.c pathsearch.c stub.c datalimit.c
+-POBJ = $(PSRC:.c=.o)
+-PUBJ = $(PSRC:.c=.u)
+-PHDR = util.h
+-
+-WHERE = ..
+-INCLUDE = $(WHERE)/include
+-
+-lib$(P).a: $(POBJ)
+- ar rv $@ $?
+- $(RANLIB) $@
+-
+-.c.o: $(PHDR)
+- $(CC) -c $< -I$(INCLUDE) $(FLAGS) $(CFLAGS)
+-
+-optimize_dec: lib$(P).b
+-
+-lib$(P).b: $(PUBJ)
+- ar rv $@ $?
+- $(RANLIB) $@
+-
+-.c.u: $(PHDR)
+- cc -j $< -I$(INCLUDE) $(FLAGS) $(XCFLAGS)
+-
+-# if the header files change, recompile
+-$(POBJ): $(PHDR)
+-$(PUBJ): $(PHDR)
+-
+-lint: llib-l$(P).ln
+-
+-llib-l$(P).ln: $(PSRC) $(PHDR)
+- lint $(LINTFLAGS) $(LINTSWITCH)$(P) -I$(INCLUDE) $(PSRC)
+-
+-tags: $(PSRC) $(PHDR)
+- ctags $(PSRC) $(PHDR)
+-
+-all: lib$(P).a lib$(P).b llib-l$(P).ln tags
+-
+-clean:
+- rm -f *.o *.u core *.warnings
+-
+-distclean: clean
+- rm -f lib$(P).a lib$(P).b llib-l$(P).ln tags *.bak *~ .pure
+diff --git a/Cudd/util/cpu_stats.c b/Cudd/util/cpu_stats.c
+deleted file mode 100644
+index 40117d4..0000000
+--- a/Cudd/util/cpu_stats.c
++++ /dev/null
+@@ -1,89 +0,0 @@
+-/* LINTLIBRARY */
+-
+-#include "util.h"
+-
+-
+-#ifdef BSD
+-#include <sys/types.h>
+-#include <sys/time.h>
+-#include <sys/resource.h>
+-
+-#if defined(_IBMR2)
+-#define etext _etext
+-#define edata _edata
+-#define end _end
+-#endif
+-
+-extern int end, etext, edata;
+-
+-#endif
+-
+-void
+-util_print_cpu_stats(FILE *fp)
+-{
+-#ifdef BSD
+- struct rusage rusage;
+- struct rlimit rlp;
+- long text, data, vm_limit, vm_soft_limit;
+- double user, system, scale;
+- char hostname[257];
+- long vm_text, vm_init_data, vm_uninit_data, vm_sbrk_data;
+-
+- /* Get the hostname */
+- (void) gethostname(hostname, 256);
+- hostname[256] = '\0'; /* just in case */
+-
+- /* Get the virtual memory sizes */
+- vm_text = (long) (((long) (&etext)) / 1024.0 + 0.5);
+- vm_init_data = (long) (((long) (&edata) - (long) (&etext)) / 1024.0 + 0.5);
+- vm_uninit_data = (long) (((long) (&end) - (long) (&edata)) / 1024.0 + 0.5);
+- vm_sbrk_data = (long) (((long) sbrk(0) - (long) (&end)) / 1024.0 + 0.5);
+-
+- /* Get virtual memory limits */
+- (void) getrlimit(RLIMIT_DATA, &rlp);
+- vm_limit = (long) (rlp.rlim_max / 1024.0 + 0.5);
+- vm_soft_limit = (long) (rlp.rlim_cur / 1024.0 + 0.5);
+-
+- /* Get usage stats */
+- (void) getrusage(RUSAGE_SELF, &rusage);
+- user = rusage.ru_utime.tv_sec + rusage.ru_utime.tv_usec/1.0e6;
+- system = rusage.ru_stime.tv_sec + rusage.ru_stime.tv_usec/1.0e6;
+- scale = (user + system)*100.0;
+- if (scale == 0.0) scale = 0.001;
+-
+- (void) fprintf(fp, "Runtime Statistics\n");
+- (void) fprintf(fp, "------------------\n");
+- (void) fprintf(fp, "Machine name: %s\n", hostname);
+- (void) fprintf(fp, "User time %6.1f seconds\n", user);
+- (void) fprintf(fp, "System time %6.1f seconds\n\n", system);
+-
+- text = (int) (rusage.ru_ixrss / scale + 0.5);
+- data = (int) ((rusage.ru_idrss + rusage.ru_isrss) / scale + 0.5);
+- (void) fprintf(fp, "Average resident text size = %5ldK\n", text);
+- (void) fprintf(fp, "Average resident data+stack size = %5ldK\n", data);
+- (void) fprintf(fp, "Maximum resident size = %5ldK\n\n",
+- rusage.ru_maxrss/2);
+- (void) fprintf(fp, "Virtual text size = %5ldK\n",
+- vm_text);
+- (void) fprintf(fp, "Virtual data size = %5ldK\n",
+- vm_init_data + vm_uninit_data + vm_sbrk_data);
+- (void) fprintf(fp, " data size initialized = %5ldK\n",
+- vm_init_data);
+- (void) fprintf(fp, " data size uninitialized = %5ldK\n",
+- vm_uninit_data);
+- (void) fprintf(fp, " data size sbrk = %5ldK\n",
+- vm_sbrk_data);
+- (void) fprintf(fp, "Virtual memory limit = %5ldK (%ldK)\n\n",
+- vm_soft_limit, vm_limit);
+-
+- (void) fprintf(fp, "Major page faults = %ld\n", rusage.ru_majflt);
+- (void) fprintf(fp, "Minor page faults = %ld\n", rusage.ru_minflt);
+- (void) fprintf(fp, "Swaps = %ld\n", rusage.ru_nswap);
+- (void) fprintf(fp, "Input blocks = %ld\n", rusage.ru_inblock);
+- (void) fprintf(fp, "Output blocks = %ld\n", rusage.ru_oublock);
+- (void) fprintf(fp, "Context switch (voluntary) = %ld\n", rusage.ru_nvcsw);
+- (void) fprintf(fp, "Context switch (involuntary) = %ld\n", rusage.ru_nivcsw);
+-#else
+- (void) fprintf(fp, "Usage statistics not available\n");
+-#endif
+-}
+diff --git a/Cudd/util/cpu_time.c b/Cudd/util/cpu_time.c
+deleted file mode 100644
+index 2a4be92..0000000
+--- a/Cudd/util/cpu_time.c
++++ /dev/null
+@@ -1,76 +0,0 @@
+-/* LINTLIBRARY */
+-
+-#include <stdio.h>
+-#include "util.h"
+-
+-#ifdef IBM_WATC /* IBM Waterloo-C compiler (same as bsd 4.2) */
+-#define void int
+-#define BSD
+-#endif
+-
+-#ifdef BSD
+-#include <sys/types.h>
+-#include <sys/time.h>
+-#include <sys/resource.h>
+-#endif
+-
+-#if defined(UNIX60) || defined(UNIX100) || defined(__CYGWIN32__)
+-#include <sys/types.h>
+-#include <sys/times.h>
+-#endif
+-
+-#ifdef vms /* VAX/C compiler -- times() with 100 HZ clock */
+-#include <types.h>
+-#include <time.h>
+-#endif
+-
+-
+-
+-/*
+- * util_cpu_time -- return a long which represents the elapsed processor
+- * time in milliseconds since some constant reference
+- */
+-long
+-util_cpu_time()
+-{
+- long t = 0;
+-
+-#ifdef BSD
+- struct rusage rusage;
+- (void) getrusage(RUSAGE_SELF, &rusage);
+- t = (long) rusage.ru_utime.tv_sec*1000 + rusage.ru_utime.tv_usec/1000;
+-#endif
+-
+-#ifdef IBMPC
+- long ltime;
+- (void) time(<ime);
+- t = ltime * 1000;
+-#endif
+-
+-#ifdef UNIX60 /* times() with 60 Hz resolution */
+- struct tms buffer;
+- times(&buffer);
+- t = buffer.tms_utime * 16.6667;
+-#endif
+-
+-#ifdef UNIX100
+- struct tms buffer; /* times() with 100 Hz resolution */
+- times(&buffer);
+- t = buffer.tms_utime * 10;
+-#endif
+-
+-#ifdef __CYGWIN32__
+- /* Works under Windows NT but not Windows 95. */
+- struct tms buffer; /* times() with 1000 Hz resolution */
+- times(&buffer);
+- t = buffer.tms_utime;
+-#endif
+-
+-#ifdef vms
+- tbuffer_t buffer; /* times() with 100 Hz resolution */
+- times(&buffer);
+- t = buffer.proc_user_time * 10;
+-#endif
+-
+- return t;
+-}
+diff --git a/Cudd/util/datalimit.c b/Cudd/util/datalimit.c
+deleted file mode 100644
+index f140414..0000000
+--- a/Cudd/util/datalimit.c
++++ /dev/null
+@@ -1,50 +0,0 @@
+-/* $Id: datalimit.c,v 1.5 2007/08/24 18:17:31 fabio Exp fabio $ */
+-
+-#ifndef HAVE_SYS_RESOURCE_H
+-#define HAVE_SYS_RESOURCE_H 1
+-#endif
+-#ifndef HAVE_SYS_TIME_H
+-#define HAVE_SYS_TIME_H 1
+-#endif
+-#ifndef HAVE_GETRLIMIT
+-#define HAVE_GETRLIMIT 1
+-#endif
+-
+-#if HAVE_SYS_RESOURCE_H == 1
+-#if HAVE_SYS_TIME_H == 1
+-#include <sys/time.h>
+-#endif
+-#include <sys/resource.h>
+-#endif
+-
+-#ifndef RLIMIT_DATA_DEFAULT
+-#define RLIMIT_DATA_DEFAULT 67108864 /* assume 64MB by default */
+-#endif
+-
+-#ifndef EXTERN
+-# ifdef __cplusplus
+-# define EXTERN extern "C"
+-# else
+-# define EXTERN extern
+-# endif
+-#endif
+-
+-EXTERN unsigned long getSoftDataLimit(void);
+-
+-unsigned long
+-getSoftDataLimit(void)
+-{
+-#if HAVE_SYS_RESOURCE_H == 1 && HAVE_GETRLIMIT == 1 && defined(RLIMIT_DATA)
+- struct rlimit rl;
+- int result;
+-
+- result = getrlimit(RLIMIT_DATA, &rl);
+- if (result != 0 || rl.rlim_cur == RLIM_INFINITY)
+- return((unsigned long) RLIMIT_DATA_DEFAULT);
+- else
+- return((unsigned long) rl.rlim_cur);
+-#else
+- return((unsigned long) RLIMIT_DATA_DEFAULT);
+-#endif
+-
+-} /* end of getSoftDataLimit */
+diff --git a/Cudd/util/getopt.c b/Cudd/util/getopt.c
+deleted file mode 100644
+index e06f12d..0000000
+--- a/Cudd/util/getopt.c
++++ /dev/null
+@@ -1,72 +0,0 @@
+-/* LINTLIBRARY */
+-
+-#include <stdio.h>
+-#include "util.h"
+-
+-
+-/* File : getopt.c
+- * Author : Henry Spencer, University of Toronto
+- * Updated: 28 April 1984
+- *
+- * Changes: (R Rudell)
+- * changed index() to strchr();
+- * added getopt_reset() to reset the getopt argument parsing
+- *
+- * Purpose: get option letter from argv.
+- */
+-
+-char *util_optarg; /* Global argument pointer. */
+-int util_optind = 0; /* Global argv index. */
+-static char *scan;
+-
+-
+-void
+-util_getopt_reset()
+-{
+- util_optarg = 0;
+- util_optind = 0;
+- scan = 0;
+-}
+-
+-
+-
+-int
+-util_getopt(int argc, char *argv[], char *optstring)
+-{
+- register int c;
+- register char *place;
+-
+- util_optarg = NIL(char);
+-
+- if (scan == NIL(char) || *scan == '\0') {
+- if (util_optind == 0) util_optind++;
+- if (util_optind >= argc) return EOF;
+- place = argv[util_optind];
+- if (place[0] != '-' || place[1] == '\0') return EOF;
+- util_optind++;
+- if (place[1] == '-' && place[2] == '\0') return EOF;
+- scan = place+1;
+- }
+-
+- c = *scan++;
+- place = strchr(optstring, c);
+- if (place == NIL(char) || c == ':') {
+- (void) fprintf(stderr, "%s: unknown option %c\n", argv[0], c);
+- return '?';
+- }
+- if (*++place == ':') {
+- if (*scan != '\0') {
+- util_optarg = scan;
+- scan = NIL(char);
+- } else {
+- if (util_optind >= argc) {
+- (void) fprintf(stderr, "%s: %c requires an argument\n",
+- argv[0], c);
+- return '?';
+- }
+- util_optarg = argv[util_optind];
+- util_optind++;
+- }
+- }
+- return c;
+-}
+diff --git a/Cudd/util/pathsearch.c b/Cudd/util/pathsearch.c
+deleted file mode 100644
+index 67c34b8..0000000
+--- a/Cudd/util/pathsearch.c
++++ /dev/null
+@@ -1,94 +0,0 @@
+-/* LINTLIBRARY */
+-
+-#include <stdio.h>
+-#include "util.h"
+-
+-static int check_file (char const *, char const *);
+-
+-char *
+-util_path_search(char const *prog)
+-{
+-#ifdef UNIX
+- return util_file_search(prog, getenv("PATH"), (char *) "x");
+-#else
+- return util_file_search(prog, NIL(char), (char *) "x");
+-#endif
+-}
+-
+-
+-char *
+-util_file_search(
+- char const *file, /* file we're looking for */
+- char *path, /* search path, colon separated */
+- char const *mode /* "r", "w", or "x" */)
+-{
+- int quit;
+- char *buffer, *filename, *save_path, *cp;
+-
+- if (path == 0 || strcmp(path, "") == 0) {
+- path = (char *) "."; /* just look in the current directory */
+- }
+-
+- save_path = path = strsav(path);
+- quit = 0;
+- do {
+- cp = strchr(path, ':');
+- if (cp != 0) {
+- *cp = '\0';
+- } else {
+- quit = 1;
+- }
+-
+- /* cons up the filename out of the path and file name */
+- if (strcmp(path, ".") == 0) {
+- buffer = strsav(file);
+- } else {
+- buffer = ALLOC(char, strlen(path) + strlen(file) + 4);
+- (void) sprintf(buffer, "%s/%s", path, file);
+- }
+- filename = util_tilde_expand(buffer);
+- FREE(buffer);
+-
+- /* see if we can access it */
+- if (check_file(filename, mode)) {
+- FREE(save_path);
+- return filename;
+- }
+- FREE(filename);
+- path = ++cp;
+- } while (! quit);
+-
+- FREE(save_path);
+- return 0;
+-}
+-
+-
+-static int
+-check_file(char const *filename, char const *mode)
+-{
+-#ifdef UNIX
+- int access_mode = /*F_OK*/ 0;
+-
+- if (strcmp(mode, "r") == 0) {
+- access_mode = /*R_OK*/ 4;
+- } else if (strcmp(mode, "w") == 0) {
+- access_mode = /*W_OK*/ 2;
+- } else if (strcmp(mode, "x") == 0) {
+- access_mode = /*X_OK*/ 1;
+- }
+- return access(filename, access_mode) == 0;
+-#else
+- FILE *fp;
+- int got_file;
+-
+- if (strcmp(mode, "x") == 0) {
+- mode = "r";
+- }
+- fp = fopen(filename, mode);
+- got_file = (fp != 0);
+- if (fp != 0) {
+- (void) fclose(fp);
+- }
+- return got_file;
+-#endif
+-}
+diff --git a/Cudd/util/pipefork.c b/Cudd/util/pipefork.c
+deleted file mode 100644
+index ead02d4..0000000
+--- a/Cudd/util/pipefork.c
++++ /dev/null
+@@ -1,93 +0,0 @@
+-/*
+- * Revision Control Information
+- *
+- * $Id: pipefork.c,v 1.7 2012/02/05 05:34:04 fabio Exp fabio $
+- *
+- */
+-/* LINTLIBRARY */
+-
+-#include "util.h"
+-#include <sys/wait.h>
+-
+-/*
+- * util_pipefork - fork a command and set up pipes to and from
+- *
+- * Rick L Spickelmier, 3/23/86
+- * Richard Rudell, 4/6/86
+- * Rick L Spickelmier, 4/30/90, got rid of slimey vfork semantics
+- *
+- * Returns:
+- * 1 for success, with toCommand and fromCommand pointing to the streams
+- * 0 for failure
+- */
+-
+-/* ARGSUSED */
+-int
+-util_pipefork(
+- char * const *argv, /* normal argv argument list */
+- FILE **toCommand, /* pointer to the sending stream */
+- FILE **fromCommand, /* pointer to the reading stream */
+- int *pid)
+-{
+-#ifdef UNIX
+- int forkpid, waitPid;
+- int topipe[2], frompipe[2];
+- char buffer[1024];
+- int status;
+-
+- /* create the PIPES...
+- * fildes[0] for reading from command
+- * fildes[1] for writing to command
+- */
+- if (pipe(topipe)) return(0);
+- if (pipe(frompipe)) return(0);
+-
+-#ifdef __CYGWIN32__
+- if ((forkpid = fork()) == 0) {
+-#else
+- if ((forkpid = vfork()) == 0) {
+-#endif
+- /* child here, connect the pipes */
+- (void) dup2(topipe[0], fileno(stdin));
+- (void) dup2(frompipe[1], fileno(stdout));
+-
+- (void) close(topipe[0]);
+- (void) close(topipe[1]);
+- (void) close(frompipe[0]);
+- (void) close(frompipe[1]);
+-
+- (void) execvp(argv[0], argv);
+- (void) sprintf(buffer, "util_pipefork: can not exec %s", argv[0]);
+- perror(buffer);
+- (void) _exit(1);
+- }
+-
+- if (pid) {
+- *pid = forkpid;
+- }
+-
+-#ifdef __CYGWIN32__
+- waitPid = waitpid(-1, &status, WNOHANG);
+-#else
+- waitPid = wait3(&status, WNOHANG, NULL);
+-#endif
+-
+- /* parent here, use slimey vfork() semantics to get return status */
+- if (waitPid == forkpid && WIFEXITED(status)) {
+- return 0;
+- }
+- if ((*toCommand = fdopen(topipe[1], "w")) == NULL) {
+- return 0;
+- }
+- if ((*fromCommand = fdopen(frompipe[0], "r")) == NULL) {
+- return 0;
+- }
+- (void) close(topipe[0]);
+- (void) close(frompipe[1]);
+- return 1;
+-#else
+- (void) fprintf(stderr,
+- "util_pipefork: not implemented on your operating system\n");
+- return 0;
+-#endif
+-}
+diff --git a/Cudd/util/prtime.c b/Cudd/util/prtime.c
+deleted file mode 100644
+index 236eafb..0000000
+--- a/Cudd/util/prtime.c
++++ /dev/null
+@@ -1,21 +0,0 @@
+-/* LINTLIBRARY */
+-
+-#include <stdio.h>
+-#include "util.h"
+-
+-
+-/*
+- * util_print_time -- massage a long which represents a time interval in
+- * milliseconds, into a string suitable for output
+- *
+- * Hack for IBM/PC -- avoids using floating point
+- */
+-
+-char *
+-util_print_time(unsigned long t)
+-{
+- static char s[40];
+-
+- (void) sprintf(s, "%lu.%02lu sec", t/1000, (t%1000)/10);
+- return s;
+-}
+diff --git a/Cudd/util/ptime.c b/Cudd/util/ptime.c
+deleted file mode 100644
+index 4510857..0000000
+--- a/Cudd/util/ptime.c
++++ /dev/null
+@@ -1,9 +0,0 @@
+-/* LINTLIBRARY */
+-#include "util.h"
+-
+-/* backwards compatibility */
+-long
+-ptime()
+-{
+- return util_cpu_time();
+-}
+diff --git a/Cudd/util/restart.c b/Cudd/util/restart.c
+deleted file mode 100644
+index b81dcb8..0000000
+--- a/Cudd/util/restart.c
++++ /dev/null
+@@ -1,137 +0,0 @@
+-#include <stdio.h>
+-#include "util.h"
+-
+-#if (defined(sun) && ! defined(sparc)) || defined(vax)
+-
+-#include <signal.h>
+-#include <sys/types.h>
+-#include <sys/time.h>
+-
+-static char *save_stack_base;
+-static char *stack_lo_addr;
+-static char *stack_hi_addr;
+-static int stack_size;
+-
+-static int restart_global_flag;
+-static char *old_file_name;
+-static char *new_file_name;
+-
+-char *util_save_sp; /* set by util_restart_save_state() */
+-extern char *sbrk();
+-
+-static void
+-grow_stack()
+-{
+- int i, space[256];
+-
+- for(i = 0; i < 256; i++) {
+- space[i] = 0;
+- }
+- if ((char *) &i > stack_lo_addr) {
+- grow_stack();
+- }
+-}
+-
+-
+-/* ARGSUSED */
+-static int
+-handle_sigquit(int sig, int code, struct sigcontext *scp)
+-{
+- if (util_restart_save_state()) {
+- /* we are restarting ! -- return from signal */
+-
+- } else {
+- /* copy stack to user data space */
+- stack_lo_addr = util_save_sp;
+- stack_size = stack_hi_addr - stack_lo_addr + 1;
+- save_stack_base = sbrk(stack_size);
+- (void) memcpy(save_stack_base, stack_lo_addr, stack_size);
+-
+- /* write a new executable */
+- (void) fprintf(stderr, "Writing executable %s ...\n", new_file_name);
+- (void) util_save_image(old_file_name, new_file_name);
+-
+- /* terminate if signal was a QUIT */
+- if (sig == SIGQUIT) {
+- (void) _exit(1);
+- }
+- }
+-}
+-
+-
+-static void
+-restart_program()
+-{
+- (void) fprintf(stderr, "Continuing execution ...\n");
+-
+- /* create the stack */
+- grow_stack();
+-
+-#ifdef vax
+- asm("movl _util_save_sp,sp");
+-#endif
+-#ifdef sun
+- asm("movl _util_save_sp,sp");
+-#endif
+-
+- /* copy the stack back from user space */
+- (void) memcpy(stack_lo_addr, save_stack_base, stack_size);
+-
+- /* remove the sbrk for the stack */
+- if (sbrk(-stack_size) < 0) {
+- perror("sbrk");
+- }
+-
+- util_restart_restore_state(); /* jump back into handle_sigquit() */
+-}
+-
+-void
+-util_restart(char const *old, char const *neW, int interval)
+-{
+- struct itimerval itimer;
+-
+-#ifdef vax
+-#ifdef ultrix
+- stack_hi_addr = (char *) 0x7fffe3ff; /* ultrix */
+-#else
+- stack_hi_addr = (char *) 0x7fffebff; /* bsd 4.3 */
+-#endif
+-#endif
+-#ifdef sun
+- stack_hi_addr = (char *) 0x0effffff; /* Sun OS 3.2, 3.4 */
+-#endif
+-
+- old_file_name = old;
+- new_file_name = neW;
+-
+- (void) signal(SIGQUIT, handle_sigquit);
+-
+- if (interval > 0) {
+- (void) signal(SIGVTALRM, handle_sigquit);
+- itimer.it_interval.tv_sec = interval;
+- itimer.it_interval.tv_usec = 0;
+- itimer.it_value.tv_sec = interval;
+- itimer.it_value.tv_usec = 0;
+- if (setitimer(ITIMER_VIRTUAL, &itimer, (struct itimerval *) 0) < 0) {
+- perror("setitimer");
+- exit(1);
+- }
+- }
+-
+- if (restart_global_flag) {
+- restart_program();
+- }
+- restart_global_flag = 1;
+-}
+-
+-#else
+-
+-/* ARGSUSED */
+-void
+-util_restart(char const *old, char const *neW, int interval)
+-{
+- (void) fprintf(stderr,
+- "util_restart: not supported on your operating system/hardware\n");
+-}
+-
+-#endif
+diff --git a/Cudd/util/safe_mem.c b/Cudd/util/safe_mem.c
+deleted file mode 100644
+index 597cc89..0000000
+--- a/Cudd/util/safe_mem.c
++++ /dev/null
+@@ -1,97 +0,0 @@
+-/* LINTLIBRARY */
+-
+-#include <stdio.h>
+-#include "util.h"
+-
+-/*
+- * These are interface routines to be placed between a program and the
+- * system memory allocator.
+- *
+- * It forces well-defined semantics for several 'borderline' cases:
+- *
+- * malloc() of a 0 size object is guaranteed to return something
+- * which is not 0, and can safely be freed (but not dereferenced)
+- * free() accepts (silently) an 0 pointer
+- * realloc of a 0 pointer is allowed, and is equiv. to malloc()
+- * For the IBM/PC it forces no object > 64K; note that the size argument
+- * to malloc/realloc is a 'long' to catch this condition
+- *
+- * The function pointer MMoutOfMemory() contains a vector to handle a
+- * 'out-of-memory' error (which, by default, points at a simple wrap-up
+- * and exit routine).
+- */
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-extern char *MMalloc(long);
+-extern void MMout_of_memory(long);
+-extern char *MMrealloc(char *, long);
+-
+-void (*MMoutOfMemory)(long) = MMout_of_memory;
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-
+-
+-/* MMout_of_memory -- out of memory for lazy people, flush and exit */
+-void
+-MMout_of_memory(long size)
+-{
+- (void) fflush(stdout);
+- (void) fprintf(stderr, "\nout of memory allocating %lu bytes\n",
+- (unsigned long) size);
+- exit(1);
+-}
+-
+-
+-char *
+-MMalloc(long size)
+-{
+- char *p;
+-
+-#ifdef IBMPC
+- if (size > 65000L) {
+- if (MMoutOfMemory != (void (*)(long)) 0 ) (*MMoutOfMemory)(size);
+- return NIL(char);
+- }
+-#endif
+- if (size == 0) size = sizeof(long);
+- if ((p = (char *) malloc((unsigned long) size)) == NIL(char)) {
+- if (MMoutOfMemory != 0 ) (*MMoutOfMemory)(size);
+- return NIL(char);
+- }
+- return p;
+-}
+-
+-
+-char *
+-MMrealloc(char *obj, long size)
+-{
+- char *p;
+-
+-#ifdef IBMPC
+- if (size > 65000L) {
+- if (MMoutOfMemory != 0 ) (*MMoutOfMemory)(size);
+- return NIL(char);
+- }
+-#endif
+- if (obj == NIL(char)) return MMalloc(size);
+- if (size <= 0) size = sizeof(long);
+- if ((p = (char *) realloc(obj, (unsigned long) size)) == NIL(char)) {
+- if (MMoutOfMemory != 0 ) (*MMoutOfMemory)(size);
+- return NIL(char);
+- }
+- return p;
+-}
+-
+-
+-void
+-MMfree(char *obj)
+-{
+- if (obj != 0) {
+- free(obj);
+- }
+-}
+diff --git a/Cudd/util/saveimage.c b/Cudd/util/saveimage.c
+deleted file mode 100644
+index 32332ef..0000000
+--- a/Cudd/util/saveimage.c
++++ /dev/null
+@@ -1,229 +0,0 @@
+-/* LINTLIBRARY */
+-
+-
+-/*
+- * saveimage.c --
+- *
+- * Function to save an executable copy of the current process's
+- * image in a file.
+- *
+- */
+-
+-#include <stdio.h>
+-#include "util.h"
+-
+-#ifdef BSD
+-#include <sys/types.h>
+-#include <sys/stat.h>
+-#include <a.out.h>
+-#include <errno.h>
+-
+-extern int errno;
+-
+-#define BUFSIZE 8192
+-
+-extern long lseek(); /* For lint */
+-extern int getpagesize();
+-extern char *sbrk();
+-
+-static int copy_file();
+-static int pad_file();
+-
+-
+-int
+-util_save_image(char const *orig_file_name, char const *save_file_name)
+-{
+- int origFd = -1, saveFd = -1;
+- char *start_data, *end_data, *start_text, *end_round;
+- struct exec old_hdr, new_hdr;
+- struct stat old_stat;
+- int n, page_size, length_text, length_data;
+-
+- if ((origFd = open(orig_file_name, 0)) < 0) {
+- perror(orig_file_name);
+- (void) fprintf(stderr, "Cannot open original a.out file\n");
+- goto bad;
+- }
+-
+- if (fstat(origFd, &old_stat) < 0) {
+- perror(orig_file_name);
+- (void) fprintf(stderr, "Cannot stat original a.out file\n");
+- goto bad;
+- }
+-
+- /*
+- * Read the a.out header from the original file.
+- */
+- if (read(origFd, (char *) &old_hdr, sizeof(old_hdr)) != sizeof(old_hdr)) {
+- perror(orig_file_name);
+- (void) fprintf(stderr, "Cannot read original a.out header\n");
+- goto bad;
+- }
+- if (N_BADMAG(old_hdr)) {
+- (void) fprintf(stderr, "File %s has a bad magic number (%o)\n",
+- orig_file_name, old_hdr.a_magic);
+- goto bad;
+- }
+- if (old_hdr.a_magic != ZMAGIC) {
+- (void) fprintf(stderr, "File %s is not demand-paged\n", orig_file_name);
+- goto bad;
+- }
+-
+- /*
+- * Open the output file.
+- */
+- if (access(save_file_name, /* F_OK */ 0) == 0) {
+- (void) unlink(save_file_name);
+- }
+- if ((saveFd = creat(save_file_name, 0777)) < 0) {
+- if (errno == ETXTBSY) {
+- (void) unlink(save_file_name);
+- saveFd = creat(save_file_name, 0777);
+- }
+- if (saveFd < 0) {
+- perror(save_file_name);
+- (void) fprintf(stderr, "Cannot create save file.\n");
+- goto bad;
+- }
+- }
+-
+- /*
+- * Find out how far the data segment extends.
+- */
+- new_hdr = old_hdr;
+- end_data = sbrk(0);
+- page_size = getpagesize();
+- n = ((((int) end_data) + page_size - 1) / page_size) * page_size;
+- end_round = (char *) n;
+- if (end_round > end_data) {
+- end_data = sbrk(end_round - end_data);
+- }
+-
+-#ifdef vax
+- start_text = 0;
+- length_text = new_hdr.a_text;
+- start_data = (char *) old_hdr.a_text;
+- length_data = end_data - start_data;
+-#endif vax
+-#ifdef sun
+- start_text = (char *) N_TXTADDR(old_hdr) + sizeof(old_hdr);
+- length_text = old_hdr.a_text - sizeof(old_hdr);
+- start_data = (char *) N_DATADDR(old_hdr);
+- length_data = end_data - start_data;
+-#endif sun
+- new_hdr.a_data = end_data - start_data;
+- new_hdr.a_bss = 0;
+-
+- /*
+- * First, the header plus enough pad to extend up to N_TXTOFF.
+- */
+- if (write(saveFd, (char *) &new_hdr, (int) sizeof(new_hdr)) !=
+- sizeof(new_hdr)) {
+- perror("write");
+- (void) fprintf(stderr, "Error while copying header.\n");
+- goto bad;
+- }
+- if (! pad_file(saveFd, N_TXTOFF(old_hdr) - sizeof(new_hdr))) {
+- (void) fprintf(stderr, "Error while padding.\n");
+- goto bad;
+- }
+-
+-
+- /*
+- * Copy our text segment
+- */
+- if (write(saveFd, start_text, length_text) != length_text) {
+- perror("write");
+- (void) fprintf(stderr, "Error while copying text segment.\n");
+- goto bad;
+- }
+-
+-
+- /*
+- * Copy our data segment
+- */
+- if (write(saveFd, start_data, length_data) != length_data) {
+- perror("write");
+- (void) fprintf(stderr, "Error while copying data segment.\n");
+- goto bad;
+- }
+-
+- /*
+- * Copy the symbol table and everything else.
+- * This takes us to the end of the original file.
+- */
+- (void) lseek(origFd, (long) N_SYMOFF(old_hdr), 0);
+- if (! copy_file(origFd, saveFd, old_stat.st_size - N_SYMOFF(old_hdr))) {
+- (void) fprintf(stderr, "Error while copying symbol table.\n");
+- goto bad;
+- }
+- (void) close(origFd);
+- (void) close(saveFd);
+- return 1;
+-
+-bad:
+- if (origFd >= 0) (void) close(origFd);
+- if (saveFd >= 0) (void) close(saveFd);
+- return 0;
+-}
+-
+-
+-static int
+-copy_file(inFd, outFd, nbytes)
+-int inFd, outFd;
+-unsigned long nbytes;
+-{
+- char buf[BUFSIZE];
+- int nread, ntoread;
+-
+- while (nbytes > 0) {
+- ntoread = nbytes;
+- if (ntoread > sizeof buf) ntoread = sizeof buf;
+- if ((nread = read(inFd, buf, ntoread)) != ntoread) {
+- perror("read");
+- return (0);
+- }
+- if (write(outFd, buf, nread) != nread) {
+- perror("write");
+- return (0);
+- }
+- nbytes -= nread;
+- }
+-
+- return (1);
+-}
+-
+-
+-static int
+-pad_file(outFd, nbytes)
+-int outFd;
+-int nbytes;
+-{
+- char buf[BUFSIZE];
+- int nzero;
+-
+- nzero = (nbytes > sizeof(buf)) ? sizeof(buf) : nbytes;
+- bzero(buf, nzero);
+- while (nbytes > 0) {
+- nzero = (nbytes > sizeof(buf)) ? sizeof(buf) : nbytes;
+- if (write(outFd, buf, nzero) != nzero) {
+- perror("write");
+- return (0);
+- }
+- nbytes -= nzero;
+- }
+-
+- return (1);
+-}
+-#else
+-
+-/* ARGSUSED */
+-int
+-util_save_image(char const *orig_file_name, char const *save_file_name)
+-{
+- (void) fprintf(stderr,
+- "util_save_image: not implemented on your operating system\n");
+- return 0;
+-}
+-
+-#endif
+diff --git a/Cudd/util/state.c b/Cudd/util/state.c
+deleted file mode 100644
+index ef830aa..0000000
+--- a/Cudd/util/state.c
++++ /dev/null
+@@ -1,82 +0,0 @@
+-#ifdef lint
+-util_restart_save_state()
+-{
+- return 0;
+-}
+-
+-
+-util_restart_restore_state()
+-{
+-}
+-
+-#else
+-
+-static char rcsid[] = "$Id: state.c,v 1.1 1997/11/04 22:38:50 fabio Exp $";
+-
+-#ifdef vax
+-int util_restart_state[32];
+-
+-util_restart_save_state()
+-{
+- asm("movl sp,_util_save_sp");
+- asm("movl r1,_util_restart_state");
+- asm("movl r2,_util_restart_state+4");
+- asm("movl r3,_util_restart_state+8");
+- asm("movl r4,_util_restart_state+12");
+- asm("movl r5,_util_restart_state+16");
+- asm("movl r6,_util_restart_state+20");
+- asm("movl r7,_util_restart_state+24");
+- asm("movl r8,_util_restart_state+28");
+- asm("movl r9,_util_restart_state+32");
+- asm("movl r10,_util_restart_state+36");
+- asm("movl r11,_util_restart_state+40");
+- asm("movl 8(fp),_util_restart_state+44");
+- asm("movl 12(fp),_util_restart_state+48");
+- asm("movl 16(fp),_util_restart_state+52");
+- asm("movl $0,r0");
+-}
+-
+-util_restart_restore_state()
+-{
+- asm("movl _util_restart_state,r1");
+- asm("movl _util_restart_state+4,r2");
+- asm("movl _util_restart_state+8,r3");
+- asm("movl _util_restart_state+12,r4");
+- asm("movl _util_restart_state+16,r5");
+- asm("movl _util_restart_state+20,r6");
+- asm("movl _util_restart_state+24,r7");
+- asm("movl _util_restart_state+28,r8");
+- asm("movl _util_restart_state+32,r9");
+- asm("movl _util_restart_state+36,r10");
+- asm("movl _util_restart_state+40,r11");
+- asm("movl _util_restart_state+44,ap");
+- asm("movl _util_restart_state+48,fp");
+- asm("addl3 fp,$4,sp");
+- asm("movl _util_restart_state+52,r0");
+- asm("jmp (r0)");
+-}
+-#endif
+-
+-
+-#if defined(sun) && ! defined(sparc)
+-int util_restart_state[32];
+-
+-util_restart_save_state()
+-{
+- asm("movel sp,_util_save_sp");
+- asm("movel sp@,_util_restart_state");
+- asm("movel sp@(0x4),_util_restart_state+4");
+- asm("moveml #0xFFFF,_util_restart_state+8");
+- return 0;
+-}
+-
+-util_restart_restore_state()
+-{
+- asm("moveml _util_restart_state+8,#0xFFFF");
+- asm("movel _util_restart_state+4,sp@(0x4)");
+- asm("movel _util_restart_state,sp@");
+- return 1;
+-}
+-#endif
+-
+-#endif
+diff --git a/Cudd/util/strsav.c b/Cudd/util/strsav.c
+deleted file mode 100644
+index 454e237..0000000
+--- a/Cudd/util/strsav.c
++++ /dev/null
+@@ -1,14 +0,0 @@
+-/* LINTLIBRARY */
+-
+-#include <stdio.h>
+-#include "util.h"
+-
+-
+-/*
+- * util_strsav -- save a copy of a string
+- */
+-char *
+-util_strsav(char const *s)
+-{
+- return strcpy(ALLOC(char, strlen(s)+1), s);
+-}
+diff --git a/Cudd/util/stub.c b/Cudd/util/stub.c
+deleted file mode 100644
+index 93f57e6..0000000
+--- a/Cudd/util/stub.c
++++ /dev/null
+@@ -1,82 +0,0 @@
+-/* LINTLIBRARY */
+-
+-#ifdef LACK_SYS5
+-
+-char *
+-memcpy(s1, s2, n)
+-char *s1, *s2;
+-int n;
+-{
+- extern bcopy();
+- bcopy(s2, s1, n);
+- return s1;
+-}
+-
+-char *
+-memset(s, c, n)
+-char *s;
+-int c;
+-int n;
+-{
+- extern bzero();
+- register int i;
+-
+- if (c == 0) {
+- bzero(s, n);
+- } else {
+- for(i = n-1; i >= 0; i--) {
+- *s++ = c;
+- }
+- }
+- return s;
+-}
+-
+-char *
+-strchr(s, c)
+-char *s;
+-int c;
+-{
+- extern char *index();
+- return index(s, c);
+-}
+-
+-char *
+-strrchr(s, c)
+-char *s;
+-int c;
+-{
+- extern char *rindex();
+- return rindex(s, c);
+-}
+-
+-
+-#endif
+-
+-#ifndef UNIX
+-#include <stdio.h>
+-
+-FILE *
+-popen(string, mode)
+-const char *string;
+-const char *mode;
+-{
+- (void) fprintf(stderr, "popen not supported on your operating system\n");
+- return NULL;
+-}
+-
+-
+-int
+-pclose(fp)
+-FILE *fp;
+-{
+- (void) fprintf(stderr, "pclose not supported on your operating system\n");
+- return -1;
+-}
+-#endif
+-
+-/* put something here in case some compilers abort on empty files ... */
+-int
+-util_do_nothing()
+-{
+- return 1;
+-}
+diff --git a/Cudd/util/test-res.c b/Cudd/util/test-res.c
+deleted file mode 100644
+index e7af9c9..0000000
+--- a/Cudd/util/test-res.c
++++ /dev/null
+@@ -1,57 +0,0 @@
+-#include <stdio.h>
+-#include "util.h"
+-
+-
+-main(argc, argv, environ)
+-int argc;
+-char **argv;
+-char **environ;
+-{
+- int i;
+- char **ep, *prog;
+-
+- prog = util_path_search(argv[0]);
+- if (prog == NIL(char)) {
+- (void) fprintf(stderr, "Cannot find current executable\n");
+- exit(1);
+- }
+- util_restart(prog, "a.out", 0);
+-
+- i = recur(10);
+- (void) fprintf(stderr, "terminated normally with i = %d\n", i);
+-
+- (void) printf("argc is %d\n", argc);
+-
+- for(i = 0, ep = argv; *ep != 0; i++, ep++) {
+- (void) printf("%08x (%08x-%08x)\targv[%d]:\t%s\n",
+- ep, *ep, *ep + strlen(*ep), i, *ep);
+- }
+-
+- i = 0;
+- for(i = 0, ep = environ; *ep != 0; ep++, i++) {
+- (void) printf("%08x (%08x-%08x)\tenviron[%d]:\t%s\n",
+- ep, *ep, *ep + strlen(*ep), i, *ep);
+- }
+-
+- (void) fprintf(stderr, "returning with status=4\n");
+- return 4;
+-}
+-
+-
+-recur(cnt)
+-{
+- int i, j, sum;
+-
+- if (cnt > 0) {
+- return recur(cnt-1);
+- } else {
+- sum = 0;
+- for(j = 0; j < 20; j++) {
+- for(i = 0; i < 100000; i++) {
+- sum += 1;
+- }
+- (void) printf("done loop %d\n", j);
+- }
+- return sum;
+- }
+-}
+diff --git a/Cudd/util/test-sav.c b/Cudd/util/test-sav.c
+deleted file mode 100644
+index 3140671..0000000
+--- a/Cudd/util/test-sav.c
++++ /dev/null
+@@ -1,39 +0,0 @@
+-#include <stdio.h>
+-#include "util.h"
+-
+-
+-/* ARGSUSED */
+-static int
+-saveit(prog, file2)
+-char *prog, *file2;
+-{
+- char *file1;
+-
+- /* get current executable name by searching the path ... */
+- file1 = util_path_search(prog);
+- if (file1 == 0) {
+- (void) fprintf(stderr, "cannot locate current executable\n");
+- return 1;
+- }
+-
+- /* users name for the new executable -- perform tilde-expansion */
+- if (! util_save_image(file1, file2)) {
+- (void) fprintf(stderr, "error occured during save ...\n");
+- return 1;
+- }
+- FREE(file1);
+- return 0;
+-}
+-
+-int restart;
+-
+-main(argc, argv)
+-char **argv;
+-{
+- if (restart) {
+- (void) printf("restarted ...\n");
+- exit(0);
+- }
+- restart = 1;
+- exit(saveit(argv[0], "foobar"));
+-}
+diff --git a/Cudd/util/texpand.c b/Cudd/util/texpand.c
+deleted file mode 100644
+index 10c7773..0000000
+--- a/Cudd/util/texpand.c
++++ /dev/null
+@@ -1,57 +0,0 @@
+-/* LINTLIBRARY */
+-
+-#include <stdio.h>
+-#include "util.h"
+-
+-#if defined(BSD) || defined(hpux)
+-#include <pwd.h>
+-#endif
+-
+-
+-char *
+-util_tilde_expand(char const *fname)
+-{
+-#ifdef BSD
+- struct passwd *userRecord;
+- char username[256], *filename;
+- register int i, j;
+-
+- filename = ALLOC(char, strlen(fname) + 256);
+-
+- /* Clear the return string */
+- i = 0;
+- filename[0] = '\0';
+-
+- /* Tilde? */
+- if (fname[0] == '~') {
+- j = 0;
+- i = 1;
+- while ((fname[i] != '\0') && (fname[i] != '/')) {
+- username[j++] = fname[i++];
+- }
+- username[j] = '\0';
+-
+- if (username[0] == '\0') {
+- /* ~/ resolves to home directory of current user */
+- if ((userRecord = getpwuid(getuid())) != 0) {
+- (void) strcat(filename, userRecord->pw_dir);
+- } else {
+- i = 0;
+- }
+- } else {
+- /* ~user/ resolves to home directory of 'user' */
+- if ((userRecord = getpwnam(username)) != 0) {
+- (void) strcat(filename, userRecord->pw_dir);
+- } else {
+- i = 0;
+- }
+- }
+- }
+-
+- /* Concantenate remaining portion of file name */
+- (void) strcat(filename, fname + i);
+- return filename;
+-#else
+- return strsav(fname);
+-#endif
+-}
+diff --git a/Cudd/util/tmpfile.c b/Cudd/util/tmpfile.c
+deleted file mode 100644
+index 682e199..0000000
+--- a/Cudd/util/tmpfile.c
++++ /dev/null
+@@ -1,44 +0,0 @@
+-/*
+- * tmpfile -- open an unnamed temporary file
+- *
+- * This is the ANSI C standard routine; we have hacks here because many
+- * compilers/systems do not have it yet.
+- */
+-
+-/* LINTLIBRARY */
+-
+-
+-#include <stdio.h>
+-#include "util.h"
+-
+-
+-#ifdef UNIX
+-
+-extern char *mktemp (char *);
+-
+-FILE *
+-tmpfile()
+-{
+- FILE *fp;
+- char *filename, *junk;
+-
+- junk = strsav((char *)"/usr/tmp/misIIXXXXXX");
+- filename = mktemp(junk);
+- if ((fp = fopen(filename, "w+")) == NULL) {
+- FREE(junk);
+- return NULL;
+- }
+- (void) unlink(filename);
+- FREE(junk);
+- return fp;
+-}
+-
+-#else
+-
+-FILE *
+-tmpfile()
+-{
+- return fopen("utiltmp", "w+");
+-}
+-
+-#endif
+diff --git a/Cudd/util/util.h b/Cudd/util/util.h
+deleted file mode 100644
+index bcd4787..0000000
+--- a/Cudd/util/util.h
++++ /dev/null
+@@ -1,209 +0,0 @@
+-/* $Id: util.h,v 1.10 2012/02/05 05:34:04 fabio Exp fabio $ */
+-
+-#ifndef UTIL_H
+-#define UTIL_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-#if defined(__GNUC__)
+-# define UTIL_INLINE __inline__
+-# if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
+-# define UTIL_UNUSED __attribute__ ((unused))
+-# else
+-# define UTIL_UNUSED
+-# endif
+-#else
+-# define UTIL_INLINE
+-# define UTIL_UNUSED
+-#endif
+-
+-#ifndef SIZEOF_VOID_P
+-#define SIZEOF_VOID_P 4
+-#endif
+-#ifndef SIZEOF_INT
+-#define SIZEOF_INT 4
+-#endif
+-#ifndef SIZEOF_LONG
+-#define SIZEOF_LONG 4
+-#endif
+-
+-#if SIZEOF_VOID_P == 8 && SIZEOF_INT == 4
+-typedef long util_ptrint;
+-#else
+-typedef int util_ptrint;
+-#endif
+-
+-/* #define USE_MM */ /* choose libmm.a as the memory allocator */
+-
+-/* these are too entrenched to get away with changing the name */
+-#define strsav util_strsav
+-#include <unistd.h>
+-
+-#define NIL(type) ((type *) 0)
+-
+-#if defined(USE_MM) || defined(MNEMOSYNE)
+-/*
+- * assumes the memory manager is either libmm.a or libmnem.a
+- * libmm.a:
+- * - allows malloc(0) or realloc(obj, 0)
+- * - catches out of memory (and calls MMout_of_memory())
+- * - catch free(0) and realloc(0, size) in the macros
+- * libmnem.a:
+- * - reports memory leaks
+- * - is used in conjunction with the mnemalyse postprocessor
+- */
+-#ifdef MNEMOSYNE
+-#include "mnemosyne.h"
+-#define ALLOC(type, num) \
+- ((num) ? ((type *) malloc(sizeof(type) * (num))) : \
+- ((type *) malloc(sizeof(long))))
+-#else
+-#define ALLOC(type, num) \
+- ((type *) malloc(sizeof(type) * (num)))
+-#endif
+-#define REALLOC(type, obj, num) \
+- (obj) ? ((type *) realloc((char *) obj, sizeof(type) * (num))) : \
+- ((type *) malloc(sizeof(type) * (num)))
+-#define FREE(obj) \
+- ((obj) ? (free((char *) (obj)), (obj) = 0) : 0)
+-#else
+-/*
+- * enforce strict semantics on the memory allocator
+- * - when in doubt, delete the '#define USE_MM' above
+- */
+-#define ALLOC(type, num) \
+- ((type *) MMalloc((long) sizeof(type) * (long) (num)))
+-#define REALLOC(type, obj, num) \
+- ((type *) MMrealloc((char *) (obj), (long) sizeof(type) * (long) (num)))
+-#define FREE(obj) \
+- ((obj) ? (free((char *) (obj)), (obj) = 0) : 0)
+-#endif
+-
+-
+-/* Ultrix (and SABER) have 'fixed' certain functions which used to be int */
+-#if defined(ultrix) || defined(SABER) || defined(aiws) || defined(hpux) || defined(apollo) || defined(__osf__) || defined(__SVR4) || defined(__GNUC__)
+-#define VOID_OR_INT void
+-#define VOID_OR_CHAR void
+-#else
+-#define VOID_OR_INT int
+-#define VOID_OR_CHAR char
+-#endif
+-
+-
+-/* No machines seem to have much of a problem with these */
+-#include <stdio.h>
+-#include <ctype.h>
+-
+-
+-/* Some machines fail to define some functions in stdio.h */
+-#if !defined(__STDC__) && !defined(__cplusplus)
+-extern FILE *popen(), *tmpfile();
+-extern int pclose();
+-#endif
+-
+-
+-/* most machines don't give us a header file for these */
+-#if (defined(__STDC__) || defined(__cplusplus) || defined(ultrix)) && !defined(MNEMOSYNE) || defined(__SVR4)
+-# include <stdlib.h>
+-#else
+-# ifndef _IBMR2
+- extern VOID_OR_INT abort(), exit();
+-# endif
+-# if !defined(MNEMOSYNE) && !defined(_IBMR2)
+- extern VOID_OR_INT free (void *);
+- extern VOID_OR_CHAR *malloc(), *realloc();
+-# endif
+- extern char *getenv();
+- extern int system();
+- extern double atof();
+-#endif
+-
+-
+-/* some call it strings.h, some call it string.h; others, also have memory.h */
+-#if defined(__STDC__) || defined(__cplusplus) || defined(_IBMR2) || defined(ultrix)
+-#include <string.h>
+-#else
+-/* ANSI C string.h -- 1/11/88 Draft Standard */
+-extern char *strcpy(), *strncpy(), *strcat(), *strncat(), *strerror();
+-extern char *strpbrk(), *strtok(), *strchr(), *strrchr(), *strstr();
+-extern int strcoll(), strxfrm(), strncmp(), strlen(), strspn(), strcspn();
+-extern char *memmove(), *memccpy(), *memchr(), *memcpy(), *memset();
+-extern int memcmp(), strcmp();
+-#endif
+-
+-
+-#ifdef __STDC__
+-#include <assert.h>
+-#else
+-#ifndef NDEBUG
+-#define assert(ex) {\
+- if (! (ex)) {\
+- (void) fprintf(stderr,\
+- "Assertion failed: file %s, line %d\n\"%s\"\n",\
+- __FILE__, __LINE__, "ex");\
+- (void) fflush(stdout);\
+- abort();\
+- }\
+-}
+-#else
+-#define assert(ex) ;
+-#endif
+-#endif
+-
+-
+-#define fail(why) {\
+- (void) fprintf(stderr, "Fatal error: file %s, line %d\n%s\n",\
+- __FILE__, __LINE__, why);\
+- (void) fflush(stdout);\
+- abort();\
+-}
+-
+-
+-#ifdef lint
+-#undef putc /* correct lint '_flsbuf' bug */
+-#undef ALLOC /* allow for lint -h flag */
+-#undef REALLOC
+-#define ALLOC(type, num) (((type *) 0) + (num))
+-#define REALLOC(type, obj, num) ((obj) + (num))
+-#endif
+-
+-
+-/* These arguably do NOT belong in util.h */
+-#ifndef ABS
+-#define ABS(a) ((a) < 0 ? -(a) : (a))
+-#endif
+-#ifndef MAX
+-#define MAX(a,b) ((a) > (b) ? (a) : (b))
+-#endif
+-#ifndef MIN
+-#define MIN(a,b) ((a) < (b) ? (a) : (b))
+-#endif
+-
+-#ifndef USE_MM
+-extern char *MMalloc (long);
+-extern void MMout_of_memory (long);
+-extern void (*MMoutOfMemory) (long);
+-extern char *MMrealloc (char *, long);
+-#endif
+-
+-extern long util_cpu_time (void);
+-extern char *util_path_search (char const *);
+-extern char *util_file_search (char const *, char *, char const *);
+-extern int util_pipefork (char * const *, FILE **, FILE **, int *);
+-extern void util_print_cpu_stats (FILE *);
+-extern char *util_print_time (unsigned long);
+-extern int util_save_image (char const *, char const *);
+-extern char *util_strsav (char const *);
+-extern char *util_tilde_expand (char const *);
+-extern void util_restart (char const *, char const *, int);
+-
+-
+-extern unsigned long getSoftDataLimit (void);
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-
+-#endif /* UTIL_H */
+--
diff --git a/debian/patches/series b/debian/patches/series
index 72c3a3b..010db01 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,4 @@
0001-make-LIBRARY_VERSION-customizable.patch
0002-Supporting-pkg-config-file.patch
0003-Upstream-patch-for-broken-PolyGUI.patch
+0004-Drop-unused-files-from-Cudd-due-to-possible-license-.patch
--
polybori: Polynomials over Boolean Rings
More information about the debian-science-commits
mailing list