PROBLEM 1:  Following Orders

Given a list  of variable constraints of the form  x < y, you are  to
write a program that  prints all orderings of the variables that  are
consistent with the constraints.
   For example, given  the constraints x < y and x < z there are  two
orderings of  the variables  x,  y, and  z that  are consistent  with
these constraints:   x y z and x z y.

The Input

The input  consists of a  sequence of constraint  specifications.   A
specification consists  of two  lines:  a  list of  variables on  one
line  followed  by a  list  of  contraints  on  the next  line.     A
constraint is given by a pair of variables, where x y  indicates that
x < y.
   All  variables are single  character, lower-case letters.    There
will be at  least two variables, and no  more than 20 variables in  a
specification.   There will be at least  one constraint, and no  more
than 50 constraints in a specification.  There will be at  least one,
and no more  than 300 orderings consistent  with the contraints in  a
specification.
   Input is terminated by end-of-file.

The Output

For  each constraint  specification,  all orderings  consistent  with
the  constraints  should  be printed.     Orderings  are  printed  in
lexicographical (alphabetical) order, one per line.  Characters  on a
line are separated by whitespace.
   Output for  different constraint specifications is separated by  a
blank line.

Sample Input

a b f g
a b b f
v w x y z
v y x v z v w v

Sample Output
abfg
abgf
agbf
gabf

wxzvy
wzxvy
xwzvy
xzwvy
zwxvy
zxwvy


PROBLEM 2:  Numbering Paths

Given the intersections connected  by one-way streets in a city,  you
are  to write  a  program that  determines  the number  of  different
routes between each intersection.   A route is a sequence of  one-way
streets connecting two intersections.
   Intersections are identified by non-negative integers.   A one-way
street  is specified  by  a pair  of  intersections.    For  example,
j k indicates  that there  is a  one-way street  from intersection  j
to intersection  k.   Note  that two-way  streets can  be modeled  by
specifying two one-way streets:  j k and kj.
   Consider a  city of four intersections connected by the  following
one-way streets:

    0  1
    0  2
    1  2
    2  3

There is one route from  intersection 0 to 1, two routes from 0 to  2
(the routes  are 0->1->2  and 0->2), one  route from 2  to 3, and  no
other routes.
   It  is possible  for an  infinite number  of  different routes  to
exist.  For  example if the intersections above are augmented by  the
street 3 2, there  is still  only one route  from 0 to  1, but  there
are infinitely many  different routes from 0 to  2.  This is  because
the street  from 2  to 3 and  back to  2 can be  repeated yielding  a
different sequence of streets and hence a different route.   Thus the
route 0->2->3->2-> 3->2 is a different route than 0->2->3->2.

The Input

The input is a  sequence of city specifications.  Each  specification
begins  with the  number  of one-way  streets  in the  city  followed
by  that  many  one-way streets  given  as  pairs  of  intersections.
Each  pair  j k represents  a  one-way  street  from  intersection  j
to  intersection k.     In all  cities,  intersections  are  numbered
sequentially from  0 to the ``largest''  intersection.  All  integers
in the input  are separated by whitespace.   The input is  terminated
by end-of-file.
   There  will never  be a  one-way street  from  an intersection  to
itself.  No city will have more than 30 intersections.

The Output

For  each city  specification,  a  square  matrix of  the  number  of
different routes  from intersection j to  intersection k is  printed.
If the matrix is  denoted M, then M[j][k] is the number of  different
routes from intersection  j to intersection k.   The matrix M  should
be  printed in  row-major order,  one  row per  line.    Each  matrix
should  be preceded  by the  string  ``matrix for  city k''  (with  k
appropriately instantiated, beginning with 0).
   If  there are an  infinite number of  different paths between  two
intersections a -1 should be printed.  DO NOT worry  about justifying
and aligning the output of each matrix.  All entries in a  row should
be separated by whitespace.

Sample Input

7
0 1 0 2 0 4 2 4 2 3 3 1 4 3
5
0 2 0 1 1 5 2 5 2 1
9
0 1 0 2 0 3 0 4 1 4 2 1 2 0 3 0 3 1

Sample Output

matrix for city 0
  0  4  1  3  2
  0  0  0  0  0
  0  2  0  2  1
  0  1  0  0  0
  0  1  0  1  0
matrix for city 1
  0  2  1  0  0  3
  0  0  0  0  0  1
  0  1  0  0  0  2
  0  0  0  0  0  0
  0  0  0  0  0  0
  0  0  0  0  0  0
matrix for city 2
 -1 -1 -1 -1 -1
  0  0  0  0  1
 -1 -1 -1 -1 -1
 -1 -1 -1 -1 -1
  0  0  0  0  0


PROBLEM 3: Job Processing

A factory is running a production line. Two operations have to be performed on
each job: first operation "A", then operation "B". There is a certain
number of machines capable of performing each operation. Following figure shows
the organisation of the production lines.

---------------------------------------------------------------------------
                                      _____________________
Content of the input container        |*|*|*| | | | | | | |
                                      ~~~~~~~~~~~~~~~~~~~~~
                                      ________________
Type "A" machines                     | A1 | A2 | A3 |
                                      ~~~~~~~~~~~~~~~~
                                      _____________________
Content of the intermediate container |*|*| | | | | | | | |
                                      ~~~~~~~~~~~~~~~~~~~~~
                                      __________________________
Type "B" machines                     | B1 | B2 | B3 | B4 | B5 |
                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~
                                      _____________________
Content of the output container       |*|*|*|*|*| | | | | |
                                      ~~~~~~~~~~~~~~~~~~~~~
---------------------------------------------------------------------------

A type "A" machine takes a job from the input container, performs operation
"A" and puts the job into the intermediate container. A type "B" machine takes
a job from the intermediate container, performs operation "B" and puts the job
into the output container. All machines can work in parallel and
independently of each other, and the size of each container is unlimited. The
machines have different performance characteristics, a given machine
works with a given processing time. 

Give the earliest time operation "A" can be completed for all N jobs provided
that the jobs are available at time 0. (Subtask A). Also compute the
minimal amount of time that is necessary to perform both operations on N jobs
(Subtask B).

Input Data

The file INPUT.TXT contains positive integers in five lines. The first line
contains N, the number of jobs (1<=N<=1000). On the second line, the
number M1 of type "A" machines (1<=M1<=30) is given. In the third line there
are M1 integers, the job processing times of each type "A" machine.
The fourth and the fifth line contain the number M2 of type "B" machines
(1<=M2<=30) and the job processing times of each type "B" machine,
respectively. The job processing time is measured in units of time, which
includes the time needed for taking a job from a container before
processing and putting it into a container after processing. Each processing
time is at least 1 and at most 20.

Output Data

Your program should write two lines to file OUTPUT.TXT. The first line should
contain one positive integer: the solution of subtask A. The second line
should contain the solution of subtask B. 

Example Input and Output

INPUT

5
2
1 1
3
3 1 4

OUTPUT

3
5


PROBLEM 4: Network of Schools

A number of schools are connected to a computer network. Agreements have been
developed among those schools: each school maintains a list of
schools to which it distributes software (the "receiving schools"). Note that
if B is in the distribution list of school A, then A does not necessarily
appear in the list of school B

You are to write a program that computes the minimal number of schools that
must receive a copy of the new software in order for the software to
reach all schools in the network according to the agreement (Subtask A). As a
further task, we want to ensure that by sending the copy of new
software to an arbitrary school, this software will reach all schools in the
network. To achieve this goal we may have to extend the lists of receivers
by new members. Compute the minimal number of extensions that have to be made
so that whatever school we send the new software to, it will
reach all other schools (Subtask B). One extension means introducing one new
member into the list of receivers of one school.

Input Data

The first line of file INPUT.TXT contains an integer N: the number of schools
in the network (2<=N<=100). The schools are identified by the first N
positive integers. Each of the next N lines describes a list of receivers. The
line i+1 contains the identifiers of the receivers of school i. Each list
ends with a 0. An empty list contains a 0 alone in the line.

Output Data

Your program should write two lines to the file OUTPUT.TXT. The first line
should contain one positive integer: the solution of subtask A. The second
line should contain the solution of subtask B. 

Example Input and Output

INPUT

5
2 4 3 0
4 5 0
0
0
1 0

OUTPUT

1
2


    Source: geocities.com/ietk_csjmu/techmart

               ( geocities.com/ietk_csjmu)