% ACM DOCUMENT STYLE -- Released 23 Apr 89
%	Based on ARTICLE.DOC of 16 March 1988
%	For LaTeX version 2.09
% ARTICLE.DOC is Copyright (C) 1988 by Leslie Lamport
% Modifications by Jerry Leichter
\typeout{Document Style `acm' <23 Apr 89>.}
 
 
% PREPARING A FOREIGN LANGUAGE VERSION:
%
% This document style is for documents prepared in the English language.
% To prepare a version for another language, various English words must
% be replaced.  All the English words that required replacement are
% indicated below, where we give the name of the command in which the
% words appear, and the entire line containing the word(s), with the
% actual words underlined.
% 
% \tableofcontents:
% \def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
%                                ~~~~~~~~         ~~~~~~~~  ~~~~~~~~
% \listoffigures:
% \def\listoffigures{\section*{List of Figures\@mkboth
%                              ~~~~~~~~~~~~~~~
%    {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
%     ~~~~~~~~~~~~~~~  ~~~~~~~~~~~~~~~
% \listoftables:
% \def\listoftables{\section*{List of Tables\@mkboth
%                             ~~~~~~~~~~~~~~
%    {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
%     ~~~~~~~~~~~~~~  ~~~~~~~~~~~~~~~
% \thebibliography:
% \def\thebibliography#1{\section*{References\@mkboth
%                                  ~~~~~~~~~~
%   {REFERENCES}{REFERENCES}}\list
%    ~~~~~~~~~~  ~~~~~~~~~~
% \theindex:
% \columnsep 35pt\twocolumn[\section*{Index}]
%                                     ~~~~~
%     \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
%              ~~~~~  ~~~~~
% figure and table environments:
% \def\fnum@figure{Figure \thefigure}
%                  ~~~~~~
% \def\fnum@table{Table \thetable}
%                 ~~~~~
% abstract environment:
% {\bf Abstract\vspace{-.5em}\vspace{0pt}} 
%      ~~~~~~~~
 
 
% CHOOSING THE TYPE SIZE:
%
%  The type size option is handled by reading a different file for each 
%  size, as follows:
%       10pt : ART10, 11pt : ART11, 12pt : ART12
%  Implemented by \def'ing \@ptsize to last digit of file name.
%
 
%
% The size specified is 9pt over 10pt, and cannot be changed.  Since there is
% stuff which uses \@ptsize, we arbitrarily leave it equal to 0.
\def\@ptsize{0}
\@namedef{ds@11pt}{\@warning{11pt option not supported by this style}}
\@namedef{ds@12pt}{\@warning{12pt option not supported by this style}}
 
% Two-side or one-side printing.  Two sided is unlikely to be useful, and
% in fact the margins aren't set up for it, but if someone wants it....
%
% \@twosidefalse               %  Default is one-sided printing.
\def\ds@twoside{\@twosidetrue  %  Defines twoside option.
           \@mparswitchtrue}   %    Marginpars go on outside of page.
 
%  draft option
%
% \overfullrule = 0pt             % Default is don't mark overfull hboxes.
\def\ds@draft{\overfullrule 5pt}  % Causes overfull hboxes to be marked.
 
% The \@options command causes the execution of every command \ds@FOO 
% which is defined and for which the user typed the FOO option in his
% \documentstyle command.  For every option BAR he typed for which
% \ds@BAR is not defined, the file BAR.sty will be read after the present
% (main) .STY file is executed.
 
\@options
 
% The following is a modified version of art10.doc
% ARTICLE DOCUMENT STYLE -- Released 22 Dec 1987
%    for LaTeX version 2.09
% Copyright (C) 1987 by Leslie Lamport
 
%  ****************************************
%  *               FONTS                  *
%  ****************************************
%
 
% Font for all subheads - Bold faced san serif at 9pt.  Note:  This is not
% in the standard LaTeX set, and must be generated using Metafont.  If you
% don't want to bother with that, just lcmssb8 isn't THAT far off.
\font\@subheadfont=lcmssb8 scaled\magstephalf
 
\lineskip 1pt            % \lineskip is 1pt for all font sizes.
\normallineskip 1pt
\def\baselinestretch{1}
 
% Each size-changing command \SIZE executes the command
%        \@setsize\SIZE{BASELINESKIP}\FONTSIZE\@FONTSIZE
% where:
%   BASELINESKIP = Normal value of \baselineskip for that size.  (Actual 
%                  value will be \baselinestretch * BASELINESKIP.)
%
%  \FONTSIZE     = Name of font-size command.  The currently available
%                  (preloaded) font sizes are: \vpt (5pt), \vipt (6pt),
%                  \viipt (etc.), \viiipt, \ixpt, \xpt, \xipt, \xiipt,
%                  \xivpt, \xviipt, \xxpt, \xxvpt.
%  \@FONTSIZE    = The same as the font-size command except with an
%                  '@' in front---e.g., if \FONTSIZE = \xivpt then
%                  \@FONTSIZE = \@xivpt.
%
% For reasons of efficiency that needn't concern the designer,
% the document style defines \@normalsize instead of \normalsize .  This is
% done only for \normalsize, not for any other size-changing commands.
%
% Note:  The leading is allowed to vary a bit to allow for adjustment of the
% columns.  The variation of .1pt allows for somewhat less than one line's
% worth of stretch or shrink on a full page (about 68 lines).  It's also well
% under one pixel at 300dpi....  The total variability on a page is at most
% about 6.8pt, which won't interfere TOO badly with the stretch and shrink
% for paragraphs, displays, and such.
%
% If you use the raggedbottom option mentioned in the "DIMENSION OF TEXT"
% section, you'll probably want to remove all the variability in the leading.
 
\def\@normalsize{\@setsize\normalsize{10pt plus .1pt minus .1pt}\ixpt\@ixpt
\abovedisplayskip 8pt plus 3pt minus 4pt%
\belowdisplayskip \abovedisplayskip
\abovedisplayshortskip \z@ plus2pt%
\belowdisplayshortskip 4pt plus2pt minus 2pt
\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
\topsep 3.5pt plus 2pt minus 2pt\parsep 2pt plus 1pt minus 1pt
\itemsep \parsep}}
 
\def\small{\@setsize\small{9pt plus .1pt minus .1pt}\viiipt\@viiipt
\abovedisplayskip 5.5pt plus 2pt minus 4pt%
\belowdisplayskip \abovedisplayskip
\abovedisplayshortskip \z@ plus 1pt%
\belowdisplayshortskip 3pt plus 1pt minus 2pt
\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87
\topsep 2.5pt plus 1pt minus 1pt\parsep 2pt plus 1pt minus 1pt
\itemsep \parsep}}
 
% For the really small sizes we don't let the leading shrink or stretch.
% (Note that if \footnotesize leading could change, we'd probably want
% to adjust \footnotesep as well so that all \footnotesize material gets
% the same apparent leading.)
%
\def\footnotesize{\@setsize\footnotesize{7.7pt}\viipt\@viipt}
\def\scriptsize{\@setsize\scriptsize{6pt}\vpt\@vpt}
\let\tiny\scriptsize
 
% For the larger sizes, we may as well allow some more stretch and shrink.
%
\def\large{\@setsize\large{12pt plus .1pt minus .1pt}\xpt\@xpt}
\def\Large{\@setsize\Large{14pt plus .2pt minus .2pt}\xiipt\@xiipt}
\def\LARGE{\@setsize\LARGE{18pt plus .2pt minus .2pt}\xivpt\@xivpt}
\def\huge{\@setsize\huge{22pt plus .3pt minus .3pt}\xviipt\@xviipt}
\def\Huge{\@setsize\Huge{25pt plus .3pt minus .3pt}\xxpt\@xxpt}
 
\normalsize  % Choose the normalsize font.
 
%  ****************************************
%  *            PAGE LAYOUT               *
%  ****************************************
%
% All margin dimensions measured from a point one inch from top and side
% of page.  THE TWO-SIDE MARGINS ARE MEANINGLESS IN THIS STYLE!!!
 
% SIDE MARGINS:
\if@twoside                 % Values for two-sided printing (meaningless):
   \oddsidemargin  44pt     %   Left margin on odd-numbered pages.
   \evensidemargin 82pt     %   Left margin on even-numbered pages.
   \marginparwidth 107pt    %   Width of marginal notes.
\else                       % Values for one-sided printing:
   \oddsidemargin  -.25in   %   Note that \oddsidemargin = \evensidemargin
   \evensidemargin -.25in   %   (Exact value is 4.5pc-1in)
   \marginparwidth 90pt 
\fi
\marginparsep 11pt          % Horizontal space between outer margin and 
                            % marginal note
 
 
% VERTICAL SPACING:        
                         % Top of page:
\topmargin -.25in        %    Nominal distance from top of page to top of
                         %    box containing running head.
\headheight \z@          %    Height of box containing running head.
\headsep \z@             %    Space between running head and text.
% \topskip = 10pt        %    '\baselineskip' for first line of page.
                         % Bottom of page:
\footskip \z@            %    Distance from baseline of box containing foot 
                         %    to baseline of last line of text.
 
% DIMENSION OF TEXT:
% ACM allows the page (column?) height to vary from 9 1/8" (9.125in) to
% 9 7/16" (9.4375).  Unfortunately, in LaTeX it's impossible, in any simple
% way, to allow the page height to vary without also allowing the height of
% the columns on a page to differ, which doesn't look great (to my eye, any-
% way).  So instead we use \flushbottom at the maximum length.
\textheight 9.4375in\flushbottom
 
% The commented-out definition of \@textbottom is an alternative.  It sets
% the column height to the mean (9.28125in), then sets up a "pseudo ragged
% bottom" with a filler which can expand or contract to the limits allowed
% (.15625in).  You'll probably want to change the definitions of the leading
% for the various sizes to eliminate their stretch and shrink if you enable
% this.
%\textheight 9.28125in
%\def\@textbottom{\vskip \z@ plus .15625in minus .15625in \let\@texttop\relax}
\textwidth 7.0in         % Width of text line.  (2*20pc + 2pc)
                         % For two-column mode (default): 
\columnsep .33in         %    Space between columns  (2pc)
\columnseprule 0pt       %    Width of rule between columns.
 
% FOOTNOTES:
 
\footnotesep 5.39pt   % Height of strut placed at the beginning of every
                      % footnote = height of normal \footnotesize strut,
                      % so no extra space between footnotes.
 
\skip\footins 8pt plus 4pt minus 2pt  % Space between last line of text and 
                                      % top of first footnote.
 
% FLOATS: (a float is something like a figure or table)
%
%  FOR FLOATS ON A TEXT PAGE:
%
%    ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
\floatsep 11pt plus 2pt minus 2pt        % Space between adjacent floats moved
                                         % to top or bottom of text page.
\textfloatsep 18pt plus 2pt minus 4pt    % Space between main text and floats
                                         % at top or bottom of page.
\intextsep 12pt plus 2pt minus 2pt       % Space between in-text figures and 
                                         % text.
\@maxsep 18pt                            % The maximum of \floatsep, 
                                         % \textfloatsep and \intextsep (minus
                                         % the stretch and shrink).
%    TWO-COLUMN FLOATS IN TWO-COLUMN MODE:
\dblfloatsep 11pt plus 2pt minus 2pt     % Same as \floatsep for double-column
                                         % figures in two-column mode.
\dbltextfloatsep 20pt plus 2pt minus 4pt % \textfloatsep for double-column 
                                         % floats.
\@dblmaxsep 20pt                         % The maximum of \dblfloatsep and 
                                         % \dbltexfloatsep.
 
%  FOR FLOATS ON A SEPARATE FLOAT PAGE OR COLUMN:
%    ONE-COLUMN MODE OR SINGLE-COLUMN FLOATS IN TWO-COLUMN MODE:
\@fptop 0pt plus 1fil    % Stretch at top of float page/column. (Must be    
                         % 0pt plus ...)                                    
\@fpsep 8pt plus 2fil    % Space between floats on float page/column.       
\@fpbot 0pt plus 1fil    % Stretch at bottom of float page/column. (Must be 
                         % 0pt plus ... )                                   
 
%   DOUBLE-COLUMN FLOATS IN TWO-COLUMN MODE.
\@dblfptop 0pt plus 1fil % Stretch at top of float page. (Must be 0pt plus ...)
\@dblfpsep 8pt plus 2fil % Space between floats on float page.
\@dblfpbot 0pt plus 1fil % Stretch at bottom of float page. (Must be 
                         % 0pt plus ... )                                   
% MARGINAL NOTES:
%
\marginparpush 5pt       % Minimum vertical separation between two marginal 
                         % notes.
 
%  ****************************************
%  *           PARAGRAPHING               *
%  ****************************************
%
\parskip 0pt plus 1pt              % Extra vertical space between paragraphs.
\parindent 1.5em                   % Width of paragraph indentation.
%\topsep 8pt plus 2pt minus 4pt    % Extra vertical space, in addition to 
                                   % \parskip, added above and below list and
                                   % paragraphing environments.
\partopsep 2pt plus 1pt minus 1pt  % Extra vertical space, in addition to 
                                   % \parskip and \topsep, added when user
                                   % leaves blank line before environment.
%\itemsep 4pt plus 2pt minus 1pt   % Extra vertical space, in addition to
                                   % \parskip, added between list items.
% See \@listI for values of \topsep and \itemsep
% (Change made 9 Jun 87)
 
% The following page-breaking penalties are defined
 
\@lowpenalty   51      % Produced by \nopagebreak[1] or \nolinebreak[1]
\@medpenalty  151      % Produced by \nopagebreak[2] or \nolinebreak[2]
\@highpenalty 301      % Produced by \nopagebreak[3] or \nolinebreak[3]
 
\@beginparpenalty -\@lowpenalty    % Before a list or paragraph environment.
\@endparpenalty   -\@lowpenalty    % After a list or paragraph environment.
\@itempenalty     -\@lowpenalty    % Between list items.
 
% \clubpenalty         % 'Club line'  at bottom of page.
% \widowpenalty        % 'Widow line' at top of page.
% \displaywidowpenalty % Math display widow line.
% \predisplaypenalty   % Breaking before a math display.
% \postdisplaypenalty  % Breaking after a math display.
% \interlinepenalty    % Breaking at a line within a paragraph.
% \brokenpenalty       % Breaking after a hyphenated line.
 
%    ****************************************
%    *             SECTIONS                 *
%    ****************************************
%
 
% \secdef{UNSTARCMDS}{STARCMDS} :
%    When defining a sectionioning command without using
%    \@startsection, you can use \secdef as follows:
%       \def\part { ... \secdef \CMDA \CMDB }
%       \def\CMDA  [#1]#2{ ... }     % Command to define \part[...]{...}
%       \def\CMDB  #1{ ... }         % Command to define \part*{...}
 
%
% This definition is unchanged from ART10 and probably not very useful
%
\def\part{\par               % New paragraph
   \addvspace{4ex}           % Adds vertical space above title.
   \@afterindentfalse        % Suppresses indent in first paragraph.  Change
   \secdef\@part\@spart}     % to \@afterindenttrue to have indent.
 
\def\@part[#1]#2{\ifnum \c@secnumdepth >\m@ne    % IF secnumdepth > -1
        \refstepcounter{part}                    %  THEN step part counter
        \addcontentsline{toc}{part}{\thepart     %       add toc line
        \hspace{1em}#1}\else                     %  ELSE add unnumbered line
      \addcontentsline{toc}{part}{#1}\fi         % FI
   { \parindent \z@ \raggedright 
    \ifnum \c@secnumdepth >\m@ne   % IF secnumdepth > -1 
      \Large \bf Part \thepart     %   THEN Print 'Part' and 
      \par \nobreak                %          number in \Large boldface.
    \fi                            % FI
    \huge \bf                      % Select \huge boldface.
    #2\markboth{}{}\par }          % Print title and set heading marks null.
    \nobreak                       % TeX penalty to prevent page break.
    \vskip 3ex                     % Space between title and text.
   \@afterheading                  % Routine called after part and
    }                              %     section heading.
 
% Heading for \part* command
\def\@spart#1{{\parindent 0pt \raggedright 
    \huge \bf                       
    #1\par}                         % Title.
    \nobreak                        % TeX penalty to prevent page break.
    \vskip 3ex                      % Space between title and text.
    \@afterheading                  % Routine called after part and
  }                                 %     section heading.
 
% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE} 
%            optional * [ALTHEADING]{HEADING}
%    Generic command to start a section.  
%    NAME       : e.g., 'subsection'
%    LEVEL      : a number, denoting depth of section -- i.e., section=1,
%                 subsection = 2, etc.  A section number will be printed if
%                 and only if LEVEL < or = the value of the secnumdepth
%                 counter.
%    INDENT     : Indentation of heading from left margin
%    BEFORESKIP : Absolute value = skip to leave above the heading.  
%                 If negative, then paragraph indent of text following 
%                 heading is suppressed.
%    AFTERSKIP  : if positive, then skip to leave below heading,
%                       else - skip to leave to right of run-in heading.
%    STYLE      : commands to set style
%  If '*' missing, then increments the counter.  If it is present, then
%  there should be no [ALTHEADING] argument.  A sectioning command
%  is normally defined to \@startsection + its first six arguments.
%
% Given the narrow columns, many section names break, and thus look funny.
% So we set all of the ones that are not run in with \raggedright.
\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus -1ex minus 
    -.2ex}{2.3ex plus .2ex}{\normalsize\@subheadfont\raggedright}}
\def\subsection{\@startsection{subsection}{2}{\z@}{-3.25ex plus -1ex minus 
   -.2ex}{1.5ex plus .2ex}{\normalsize\@subheadfont\raggedright}}
\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-3.25ex plus 
-1ex minus -.2ex}{1.5ex plus .2ex}{\normalsize\@subheadfont\raggedright}}
\def\paragraph{\@startsection
     {paragraph}{4}{\z@}{3.25ex plus 1ex minus .2ex}{-1em}%
	{\normalsize\@subheadfont}}
\def\subparagraph{\@startsection
     {subparagraph}{4}{\parindent}{3.25ex plus 1ex minus 
     .2ex}{-1em}{\normalsize\@subheadfont}}
 
%
% We need to force the section heading to all upper case.
%
\let\ltx@@sect=\@sect
\def\@sect#1#2#3#4#5#6[#7]#8{\ltx@@sect {#1}{#2}{#3}{#4}{#5}{#6}[#7]%
	{\uppercase{#8}}}
\let\ltx@@ssect=\@ssect
\def\@ssect#1#2#3#4#5{\ltx@@ssect{#1}{#2}{#3}{#4}{\uppercase{#5}}}
 
% Default initializations of \...mark commands.  See below for their
% us in defining page styles.
%
 
% \def\sectionmark#1{}           % Preloaded definitions
% \def\subsectionmark#1{}
% \def\subsubsectionmark#1{}
% \def\paragraphmark#1{}
% \def\subparagraphmark#1{}
 
% The value of the counter secnumdepth gives the depth of the
% highest-level sectioning command that is to produce section numbers.
%
 
\setcounter{secnumdepth}{2}
 
% APPENDIX
%
% The \appendix command must do the following:
%    -- reset the section and subsection counters to zero
%    -- redefine the section counter to produce appendix numbers
%    -- redefine the \section command if appendix titles and headings are
%       to look different from section titles and headings.
 
\def\appendix{\par
  \setcounter{section}{0}
  \setcounter{subsection}{0}
  \def\thesection{\Alph{section}}}
 
%    ****************************************
%    *                LISTS                 *
%    ****************************************
%
 
% The following commands are used to set the default values for the list
% environment's parameters. See the LaTeX manual for an explanation of
% the meanings of the parameters.  Defaults for the list environment are
% set as follows.  First, \rightmargin, \listparindent and \itemindent
% are set to 0pt.  Then, for a Kth level list, the command \@listK is
% called, where 'K' denotes 'i', 'ii', ... , 'vi'.  (I.e., \@listiii is
% called for a third-level list.)  By convention, \@listK should set
% \leftmargin to \leftmarginK.
%
% For efficiency, level-one list's values are defined at top level, and
% \@listi is defined to set only \leftmargin
 
\leftmargini 2.5em
\leftmarginii 2.2em    % > \labelsep + width of '(m)'
\leftmarginiii 1.87em  % > \labelsep + width of 'vii.'
\leftmarginiv 1.7em    % > \labelsep + width of 'M.'
\leftmarginv 1em
\leftmarginvi 1em
 
\leftmargin\leftmargini
\labelsep .5em
\labelwidth\leftmargini\advance\labelwidth-\labelsep
% \parsep 4pt plus 2pt minus 1pt (Removed 9 Jun 87)
 
% \@listI defines top level and \@listi values of
% \leftmargin, \topsep, \parsep, and \itemsep
% (Added 9 Jun 87)
\def\@listI{\leftmargin\leftmargini \parsep 3.5pt plus 2pt minus 1pt%
\topsep 7.5pt plus 2pt minus 4pt%
\itemsep 3.5pt plus 2pt minus 1pt}
 
\let\@listi\@listI
\@listi 
 
\def\@listii{\leftmargin\leftmarginii
   \labelwidth\leftmarginii\advance\labelwidth-\labelsep
   \topsep 3.5pt plus 2pt minus 1pt
   \parsep 2pt plus 1pt minus 1pt
   \itemsep \parsep}
 
\def\@listiii{\leftmargin\leftmarginiii
    \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
    \topsep 2pt plus 1pt minus 1pt 
    \parsep \z@ \partopsep 1pt plus 0pt minus 1pt
    \itemsep \topsep}
 
\def\@listiv{\leftmargin\leftmarginiv
     \labelwidth\leftmarginiv\advance\labelwidth-\labelsep}
 
\def\@listv{\leftmargin\leftmarginv
     \labelwidth\leftmarginv\advance\labelwidth-\labelsep}
 
\def\@listvi{\leftmargin\leftmarginvi
     \labelwidth\leftmarginvi\advance\labelwidth-\labelsep}
 
 
 
%    ****************************************
%    *                LISTS                 *
%    ****************************************
%
 
% ENUMERATE
%  Enumeration is done with four counters: enumi, enumii, enumiii
%  and enumiv, where enumN controls the numbering of the Nth level
%  enumeration.  The label is generated by the commands \labelenumi 
%  ... \labelenumiv.  The expansion of \p@enumN\theenumN defines the 
%  output of a \ref command.  
%
% 16 Mar 88 -- changed defs of \labelenum... to use \theenum...
 
\def\labelenumi{\theenumi.}    
\def\theenumi{\arabic{enumi}}     
 
\def\labelenumii{(\theenumii)}
\def\theenumii{\alph{enumii}}
\def\p@enumii{\theenumi}
 
\def\labelenumiii{\theenumiii.}
\def\theenumiii{\roman{enumiii}}
\def\p@enumiii{\theenumi(\theenumii)}
 
\def\labelenumiv{\theenumiv.}
\def\theenumiv{\Alph{enumiv}}     
\def\p@enumiv{\p@enumiii\theenumiii}
 
% ITEMIZE
% Itemization is controlled by four commands: \labelitemi, \labelitemii,
% \labelitemiii, and \labelitemiv, which define the labels of the various 
% itemization levels.
 
\def\labelitemi{$\bullet$}
\def\labelitemii{\bf --}
\def\labelitemiii{$\ast$}
\def\labelitemiv{$\cdot$}
 
 
% VERSE
%   The verse environment is defined by making clever use of the
%   list environment's parameters.  The user types \\ to end a line.
%   This is implemented by \let'in \\ equal \@centercr.
%
\def\verse{\let\\=\@centercr  
  \list{}{\itemsep\z@ \itemindent -1.5em\listparindent \itemindent 
          \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]}
\let\endverse\endlist
 
% QUOTATION
%   Fills lines
%   Indents paragraph
%   
\def\quotation{\list{}{\listparindent 1.5em
    \itemindent\listparindent
    \rightmargin\leftmargin \parsep 0pt plus 1pt}\item[]}
\let\endquotation=\endlist
 
% QUOTE -- same as quotation except no paragraph indentation,
%
\def\quote{\list{}{\rightmargin\leftmargin}\item[]}
\let\endquote=\endlist
 
% DESCRIPTION 
%
%  To change the formatting of the label, you must redefine 
%  \descriptionlabel.  
 
\def\descriptionlabel#1{\hspace\labelsep \bf #1}
\def\description{\list{}{\labelwidth\z@ \itemindent-\leftmargin
       \let\makelabel\descriptionlabel}}
 
\let\enddescription\endlist
 
%\newdimen\descriptionmargin
%\descriptionmargin=3em
%    ****************************************
%    *         OTHER ENVIRONMENTS           *
%    ****************************************
%
%
% THEOREM 
% \@begintheorem ... \@endtheorem are the commands executed at the
% beginning and end of a (user-defined) theorem-like environment.
% Except \@opargbegintheorem is executed when an optional argument is
% given.  Cf. LATEX.TEX.
%
% \def\@begintheorem#1#2{\it \trivlist \item[\hskip \labelsep{\bf #1\ #2}]}
% \def\@opargbegintheorem#1#2#3{\it \trivlist
%       \item[\hskip \labelsep{\bf #1\ #2\ (#3)}]}
% \def\@endtheorem{\endtrivlist}
 
 
% EQUATION and EQNARRAY 
%
% \newcounter{equation}    
%  Default is for left-hand side of equations to be flushleft.
%  To make them flushright, do:
%  \let\@eqnsel = \hfil
%
 
\def\theequation{\arabic{equation}}
 
% \jot = 3pt      % Extra space added between lines of an eqnarray environment
 
% The macro \@eqnnum defines how equation numbers are to appear in equations.
%
% \def\@eqnnum{(\theequation)} 
% 
 
% TITLEPAGE
%  In the normal environments, the titlepage environment does nothing but 
%  start and end a page, and inhibit page numbers.  It also resets the
%  page number to zero.
%
 
\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
     \else \newpage \fi \thispagestyle{empty}\c@page\z@}
 
\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
 
% ARRAY AND TABULAR
%
 
\arraycolsep 5pt     % Half the space between columns in an array environment.
\tabcolsep 6pt       % Half the space between columns in a tabular environment.
\arrayrulewidth .4pt % Width of rules in array and tabular environment.
\doublerulesep 2pt   % Space between adjacent rules in array or tabular env.
 
% TABBING
%
\tabbingsep \labelsep   % Space used by the \' command.  (See LaTeX manual.)
 
% MINIPAGE
%  \@minipagerestore is called upon entry to a minipage environment to
%  set up things that are to be handled differently inside a minipage
%  environment. In the current styles, it does nothing.
 
% \skip\@mpfootins : plays same role for footnotes in a minipage as
%                    \skip\footins does for ordinary footnotes
 
\skip\@mpfootins = \skip\footins
 
% FRAMEBOX
%
\fboxsep = 3pt    % Space left between box and text by \fbox and \framebox.
\fboxrule = .4pt  % Width of rules in box made by \fbox and \framebox.
 
%    ****************************************
%    *             SECTIONS                 *
%    ****************************************
%
% DEFINE COUNTERS:
%
% \newcounter{NEWCTR}[OLDCTR] : Defines NEWCTR to be a counter, which is 
%                               reset to zero when counter OLDCTR is stepped.  
%                               Counter OLDCTR must already be defined.
 
\newcounter{part}
\newcounter {section}
\newcounter {subsection}[section]
\newcounter {subsubsection}[subsection]
\newcounter {paragraph}[subsubsection]
\newcounter {subparagraph}[paragraph]
 
% For any counter CTR, \theCTR is a macro that defines the printed version
% of counter CTR.  It is defined in terms of the following macros:
%
%  \arabic{COUNTER} : The value of COUNTER printed as an arabic numeral.
%  \roman{COUNTER}  : Its value printed as a lower-case roman numberal.
%  \Roman{COUNTER}  : Its value printed as an upper-case roman numberal.
%  \alph{COUNTER}   : Value of COUNTER printed as a lower-case letter:
%                         1 = a, 2 = b, etc.
%  \Alph{COUNTER}   : Value of COUNTER printed as an upper-case letter:
%                           1 = A, 2 = B, etc.
%
 
\def\thepart{\Roman{part}} % Roman numeral part numbers.
\def\thesection       {\arabic{section}}
\def\thesubsection    {\thesection.\arabic{subsection}}
\def\thesubsubsection {\thesubsection .\arabic{subsubsection}}
\def\theparagraph     {\thesubsubsection.\arabic{paragraph}}
\def\thesubparagraph  {\theparagraph.\arabic{subparagraph}}
 
%    ****************************************
%    *         TABLE OF CONTENTS, ETC.      *
%    ****************************************
%
% A \subsection command writes a 
%       \contentsline{subsection}{TITLE}{PAGE}
% command on the .toc file, where TITLE contains the contents of the
% entry and PAGE is the page number.  If subsections are being numbered,
% then TITLE will be of the form
%       \numberline{NUM}{HEADING}
% where NUM is the number produced by \thesubsection.  Other sectioning
% commands work similarly.  
%
% A \caption command in a 'figure' environment writes
%    \contentsline{figure}{\numberline{NUM}{CAPTION}}{PAGE}
% on the .lof file, where NUM is the number produced by \thefigure and
% CAPTION is the figure caption.  It works similarly for a 'table' environment.
%
% The command \contentsline{NAME} expands to \l@NAME.  So, to specify
% the table of contents, we must define \l@section, 
% \l@subsection, ... ; to specify the list of figures, we must define
% \l@figure; and so on.  Most of these can be defined with the
% \@dottedtocline command, which works as follows.
%
% \@dottedtocline{LEVEL}{INDENT}{NUMWIDTH}{TITLE}{PAGE}
%    LEVEL    : An entry is produced only if LEVEL < or = value of 
%               'tocdepth' counter.  Note that \section is level 1, 
%               \subsection is level 2, etc.
%    INDENT   : The indentation from the outer left margin of the start of 
%               the contents line.
%    NUMWIDTH : The width of a box in which the section number is to go,
%               if TITLE includes a \numberline command.
%   
% This command uses the following three parameters, which are set
% with a \def (so em's can be used to make them depend upon the font).
%   \@pnumwidth : The width of a box in which the page number is put.
%   \@tocrmarg  : The right margin for multiple line entries.  One
%                 wants \@tocrmarg > or = \@pnumwidth
%   \@dotsep    : Separation between dots, in mu units.  Should be \def'd to
%                 a number like 2 or 1.7
 
\def\@pnumwidth{1.55em}
\def\@tocrmarg {2.55em}
\def\@dotsep{4.5}
\setcounter{tocdepth}{3}
 
 
% TABLEOFCONTENTS
%
\def\tableofcontents{\section*{Contents\@mkboth{CONTENTS}{CONTENTS}}
  \@starttoc{toc}}
 
\def\l@part#1#2{\addpenalty{\@secpenalty}
   \addvspace{2.25em plus 1pt}  % space above part line
   \begingroup
   \@tempdima 3em         % width of box holding part number, used by 
     \parindent \z@ \rightskip \@pnumwidth             %% \numberline
     \parfillskip -\@pnumwidth   
     {\large \bf          % set line in \large boldface
     \leavevmode          % TeX command to enter horizontal mode.       
     #1\hfil \hbox to\@pnumwidth{\hss #2}}\par
     \nobreak             % Never break after part entry
   \endgroup}
 
\def\l@section#1#2{\addpenalty{\@secpenalty}  % good place for page break
   \addvspace{1.0em plus 1pt}  % space above toc entry
   \@tempdima 1.5em            % width of box holding section number
   \begingroup
     \parindent \z@ \rightskip \@pnumwidth 
     \parfillskip -\@pnumwidth   
     \bf                  % Boldface.
     \leavevmode          % TeX command to enter horizontal mode.       
      \advance\leftskip\@tempdima  %% added 5 Feb 88 to conform to 
      \hskip -\leftskip            %% 25 Jan 88 change to \numberline
     #1\nobreak\hfil \nobreak\hbox to\@pnumwidth{\hss #2}\par
   \endgroup}
 
      
\def\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}}
\def\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}}
\def\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}}
\def\l@subparagraph{\@dottedtocline{5}{10em}{5em}}
 
% LIST OF FIGURES
%
\def\listoffigures{\section*{List of Figures\@mkboth
   {LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}}
 
\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
 
% LIST OF TABLES
%
\def\listoftables{\section*{List of Tables\@mkboth
   {LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}}
\let\l@table\l@figure
 
 
%    ****************************************
%    *             BIBLIOGRAPHY             *
%    ****************************************
%
% The thebibliography environment executes the following commands:
%
%  \def\newblock{\hskip .11em plus .33em minus .07em} --
%      Defines the `closed' format, where the blocks (major units of 
%      information) of an entry run together.
%
%  \sloppy  -- Used because it's rather hard to do line breaks in 
%      bibliographies,
% 
%  \sfcode`\.=1000\relax --
%      Causes a `.' (period) not toproduce an end-of-sentence space.
 
\def\thebibliography#1{\section*{References\@mkboth
  {REFERENCES}{REFERENCES}}\list
  {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
    \advance\leftmargin\labelsep
    \usecounter{enumi}}
    \def\newblock{\hskip .11em plus .33em minus .07em}
    \sloppy\clubpenalty4000\widowpenalty4000
    \sfcode`\.=1000\relax}
 
\let\endthebibliography=\endlist
 
% \def\@biblabel#1{[#1]\hfill}  % Produces the label for a \bibitem[...]
                                % command. 
% \def\@cite#1{[#1]}            % Produces the output of the \cite command.
 
 
%    ****************************************
%    *              THE INDEX               *
%    ****************************************
%
% THE THEINDEX ENVIRONMENT
% Produces double column format, with each paragraph a separate entry.
% The user commands \item, \subitem and \subsubitem are used to
% produce the entries, and \indexspace adds an extra vertical space
% that's the right size to put above the first entry with a new letter
% of the alphabet.
 
\newif\if@restonecol
 
\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
\columnseprule \z@
\columnsep 35pt\twocolumn[\section*{Index}]
    \@mkboth{INDEX}{INDEX}\thispagestyle{plain}\parindent\z@
    \parskip\z@ plus .3pt\relax\let\item\@idxitem}
 
\def\@idxitem{\par\hangindent 40pt}
 
\def\subitem{\par\hangindent 40pt \hspace*{20pt}}
 
\def\subsubitem{\par\hangindent 40pt \hspace*{30pt}}
 
\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
 
\def\indexspace{\par \vskip 10pt plus 5pt minus 3pt\relax}
 
%    ****************************************
%    *             FOOTNOTES                *
%    ****************************************
%
% \footnoterule is a macro to draw the rule separating the footnotes from
% the text.  It should take zero vertical space, so it needs a negative
% skip to compensate for any positive space taken by the rule.  (See
% PLAIN.TEX.)
 
\def\footnoterule{\kern-3\p@   
  \hrule width .4\columnwidth 
  \kern 2.6\p@}                 % The \hrule has default height of .4pt .
 
% \newcounter{footnote}
 
% The numbering style (arabic, alph, etc.) for ordinary footnotes
% is defined by the macro \thefootnote.
%
%   \@makefntext{NOTE} :
%        Must produce the actual footnote, using \@thefnmark as the mark 
%        of the footnote and NOTE as the text.  It is called when effectively
%        inside a \parbox of width \columnwidth (i.e., with \hsize = 
%        \columnwidth).  
%
%        The following macro indents all lines of the footnote by 10pt, and 
%        indents the first line of a new paragraph by 1em.  To change these 
%        dimensions, just substitute the desired value for '10pt' [in both 
%        places] or '1em'.  The mark is flushright against the footnote. 
%          \long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize 
%             \advance\@tempdima-10pt\parshape \@ne 10pt \@tempdima}\par
%             \parindent 1em\noindent \hbox to \z@{\hss$^{\@thefnmark}$}#1}
%
%        A simpler macro is used, in which the footnote text is
%        set like an ordinary text paragraph, with no indentation except
%        on the first line of a paragraph, and the first line of the 
%        footnote.  Thus, all the macro must do is set \parindent
%        to the appropriate value for succeeding paragraphs and put the 
%        proper indentation before mark.
 
\long\def\@makefntext#1{\parindent 1em\noindent 
            \hbox to 1.8em{\hss$^{\@thefnmark}$}#1}
 
% \@makefnmark : A macro to generate the footnote marker that goes
%                in the text.  Default definition used.
 
 
%    ****************************************
%    *         FIGURES AND TABLES           *
%    ****************************************
% 
% Float placement parameters.  See LaTeX manual for their definition.
%
\setcounter{topnumber}{2}
\def\topfraction{.7}
\setcounter{bottomnumber}{1}
\def\bottomfraction{.3}
\setcounter{totalnumber}{3}
\def\textfraction{.2}
\def\floatpagefraction{.5}
\setcounter{dbltopnumber}{2}
\def\dbltopfraction{.7}
\def\dblfloatpagefraction{.5}
 
% \@makecaption{NUMBER}{TEXT} : Macro to make a figure or table caption.  
%      NUMBER : Figure or table number--e.g., 'Figure 3.2' 
%      TEXT   : The caption text.
%  Macro should be called inside a \parbox of right width, with \normalsize.
% changed 25 Jun 86 to fix according to Howard Trickey:
% instead of \unhbox\@tempboxa\par we do #1: #2\par
%
% This definition refers to the new \if@topcaption condition, which isn't
% in older LaTeX's.  So we define it, and set it permanently false, if
% necessary.  This needs a little hackery since \newif is \outer....
{\let\newif\relax \gdef\@tempa{\newif\if@topcaption}}
 \@ifundefined{if@topcaption}{\@tempa}{}
 
\long\def\@makecaption#1#2{\par\addvspace{10pt}
   \setbox\@tempboxa\hbox{#1: #2}
   \ifdim \wd\@tempboxa >\hsize   % IF longer than one line:
       #1: #2\par                 %   THEN set as ordinary paragraph.
     \else                        %   ELSE  center.
       \hbox to\hsize{\hfil\box\@tempboxa\hfil}  
   \fi
   \if@topcaption\vskip 10pt\fi}
 
 
% To define a float of type TYPE (e.g., TYPE = figure), the document style 
% must define the following.
%
%  \fps@TYPE   : The default placement specifier for floats of type TYPE.
%
%  \ftype@TYPE : The type number for floats of type TYPE.  Each TYPE has
%                associated a unique positive TYPE NUMBER, which is a power 
%                of two.  E.g., figures might have type number 1, tables type 
%                number 2, programs type number 4, etc.
%
%  \ext@TYPE   : The file extension indicating the file on which the 
%                contents list for float type TYPE is stored.  For example, 
%                \ext@figure = 'lof'.
%
%  \fnum@TYPE  : A macro to generate the figure number for a caption.
%                For example, \fnum@TYPE == Figure \thefigure.
%
%  The actual float-making environment commands--e.g., the commands
%  \figure and \endfigure--are defined in terms of the macros \@float
%  and \end@float, which are described below.
%
%  \@float{TYPE}[PLACEMENT] : Macro to begin a float environment for a 
%     single-column float of type TYPE with PLACEMENT as the placement 
%     specifier.  The default value of PLACEMENT is defined by \fps@TYPE.   
%     The environment is ended by \end@float.  
%     E.g., \figure == \@float{figure}, \endfigure == \end@float.
 
 
% FIGURE
 
\newcounter{figure}
\def\thefigure{\@arabic\c@figure}
 
\def\fps@figure{tbp}
\def\ftype@figure{1}
\def\ext@figure{lof}
\def\fnum@figure{Figure \thefigure}
\def\figure{\@float{figure}}
\let\endfigure\end@float
\@namedef{figure*}{\@dblfloat{figure}}
\@namedef{endfigure*}{\end@dblfloat}
 
% TABLE
%
\newcounter{table}
\def\thetable{\@arabic\c@table}
 
\def\fps@table{tbp}
\def\ftype@table{2}
\def\ext@table{lot}
\def\fnum@table{Table \thetable}
\def\table{\@float{table}}
\let\endtable\end@float
\@namedef{table*}{\@dblfloat{table}}
\@namedef{endtable*}{\end@dblfloat}
 
%    ****************************************
%    *         TITLE AND ABSTRACT           *
%    ****************************************
%
 
% \maketitle ==
%  BEGIN
%    \par
%    \begingroup
%      redefine \@makefnmark so footnote marks take zero space (this make
%        centering look better)
%      \thefootnote == \fnsymbol{footnote} % to number by *, dagger, etc.
%      if @twocolumn = true
%        then  \twocolumn[\@maketitle]  
%        else \@maketitle
%      fi
%   \thispagestyle{plain}
%   \@thanks   % \thanks defines \@thanks to have \footnotetext commands for
%              % producing footnotes.
%   \endgroup
%  END
 
\def\maketitle{\par
 \begingroup
   \def\thefootnote{\fnsymbol{footnote}}
   \def\@makefnmark{\hbox   
       to 0pt{$^{\@thefnmark}$\hss}}   
   \if@twocolumn               
     \twocolumn[\@maketitle]   
%			       % Leave room for ACM copyright stuff
     \begin{figure}[b]
	\vskip -\dbltextfloatsep	% Cancel extra space at top
%
% Text specs say .75in, but the example sheet says 1in.  Sigh
%	\vskip .75in			% Insert the 3/4in ACM wants
	\vskip 1in			% Insert the 1in ACM wants
     \end{figure}
     \global\@minipagefalse    % Avoid screwing up section headings etc.
     \else \newpage
     \global\@topnum\z@        % Prevents figures from going at top of page.
     \@maketitle \fi\thispagestyle{plain}\@thanks
 \endgroup
 \setcounter{footnote}{0}
 \let\maketitle\relax
 \let\@maketitle\relax
 \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
 
\def\@maketitle{\newpage
 \null
 \vbox to 2.35in{
 \vskip 2em plus .5fil minus 1.5em   % Vertical space above title.
 \begin{center}
  {\huge \@title \par}     % Title set in \huge size. 
  \vskip 1.5em minus .4em        % Vertical space after title.
  {\large                        % each author set in \large, in a
   \lineskip .5em           % tabular environment
   \begin{tabular}[t]{c}\@author 
   \end{tabular}\par}                   
  \vskip 1em              % Vertical space after author.
  {\large \@date}           % Date set in \large size.
 \end{center}
 \par
 \vskip 1.5em plus 1fil minus .5em}}             % Vertical space after date.
 
\def\abstract{\if@twocolumn
\section*{Abstract}
\else \small 
\begin{center}
{\bf Abstract\vspace{-.5em}\vspace{0pt}} 
\end{center}
\quotation 
\fi}
 
\def\endabstract{\if@twocolumn\else\endquotation\fi}
 
%    ****************************************
%    *            PAGE STYLES               *
%    ****************************************
%
% The page style 'foo' is defined by defining the command \ps@foo.  This
% command should make only local definitions.  There should be no stray
% spaces in the definition, since they could lead to mysterious extra
% spaces in the output.
%
% The \ps@... command defines the macros \@oddhead, \@oddfoot,
% \@evenhead, and \@evenfoot to define the running heads and
% feet---e.g., \@oddhead is the macro to produce the contents of the
% heading box for odd-numbered pages.  It is called inside an \hbox of
% width \textwidth.
%
% To make headings determined by the sectioning commands, the page style
% defines the commands \sectionmark, ... , where
% \sectionmark{TEXT} is called by \section to set a mark, and so on.
% The \...mark commands and the \...head macros are defined with the
% help of the following macros.  (All the \...mark commands should be
% initialized to no-ops.)
%
% MARKING CONVENTIONS:
% LaTeX extends TeX's \mark facility by producing two kinds of marks
% a 'left' and a 'right' mark, using the following commands:
%     \markboth{LEFT}{RIGHT} : Adds both marks.
%     \markright{RIGHT}      : Adds a 'right' mark.
%     \leftmark  : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
%                  macro, gets the current 'left'  mark.  Works like TeX's 
%                  \botmark command.
%     \rightmark : Used in the \@oddhead, \@oddfoot, \@evenhead or \@evenfoot
%                  macro, gets the current 'right'  mark.  Works like TeX's 
%                  \firstmark command.
% The marking commands work reasonably well for right marks 'numbered 
% within' left marks--e.g., the left mark is changed by a \section command and
% the right mark is changed by a \subsection command.  However, it does
% produce somewhat anomalous results if two \bothmark's occur on the same page.
% 
% Commands like \tableofcontents that should set the marks in some page styles
% use a \@mkboth command, which is \let by the pagestyle command (\ps@...)
% to \markboth for setting the heading or \@gobbletwo to do nothing.
 
\mark{{}{}}   % Initializes TeX's marks
 
% \ps@empty and \ps@plain defined in LATEX.TEX
 
%
% In this style, none of the headings are meaningful; we turn them all into
% "empty".
%
\let\ps@headings=\ps@empty
\let\ps@myheadings=\ps@empty
\let\ps@plain=\ps@empty
 
%    ****************************************
%    *            MISCELLANEOUS             *
%    ****************************************
%
% DATE
%
\def\today{\ifcase\month\or
  January\or February\or March\or April\or May\or June\or
  July\or August\or September\or October\or November\or December\fi
  \space\number\day, \number\year}
 
%    ****************************************
%    *           INITIALIZATION             *
%    ****************************************
%
% Default initializations.  For ACM, we require two column output.  This
% makes typesetting harder, so we default to \sloppy.
%
\ps@empty                   % 'empty' page style
\pagenumbering{arabic}      % Arabic page numbers (meaningless)
\twocolumn                  % Double-column
%\flushbottom		    % Set earlier
\sloppy			    % Make things easier for TeX
