/* ---------------------------------------------------------- 
%   (C)1992 Institute for New Generation Computer Technology 
%       (Read COPYRIGHT for detailed information.) 
----------------------------------------------------------- */
ICOT$B%U%j!<%=%U%H%&%'%"(B No.33  $B!X7ABVAG<-=q!Y(B

---------------------------------------------------------------
$BC10L@Z$j%W%m%0%i%`!!!A$=$N#2!&%X%C%@!<%U%!%$%k!A(B

$B!&C10L@Z$j%W%m%0%i%`$K$O!"$D$.$N#2$D$N%X%C%@!<%U%!%$%k$,MQ0U$5$l$F$$$k!#(B

$B!!!!!!(Bsepa*.h$B!!!!!!!!%W%m%H%?%$%W@k8@$J$I(B
$B!!!!!!(Bsepa*_g.h$B!!!!!!Bg0hJQ?t$N5-21%/%i%9$NDj5A(B

$B#1!!(Bsepa*.h

$B!&$3$N%U%!%$%k$O!"$D$.$N#4$D$NItJ,$+$i9=@.$5$l$F$$$k!#(B

$B!!!!!!%$%s%/%k!<%I%U%!%$%k(B
$B!!!!!!J8;zNsCV49!J(B#define$B!KItJ,(B
$B!!!!!!%f!<%6Dj5A%G!<%?7?!J9=B$BN!"Ns5s7?!K(B
$B!!!!!!%f!<%6Dj5A4X?t$N%W%m%H%?%$%W@k8@(B

$B!JJ8;zNsCV49!K(B

$B!&%W%m%0%i%`Cf$GDj?t$H$7$F;HMQ$7$F$$$kJ8;zNs$rDj5A$7$F$$$k!#(B

$B!!!!(BMAXLEN$B!!!!8l$N:GBgD9(B (MAXimum LENgth of a word)
$B!!!!!!!!!!!!!!(Bused in : set_suppldata(), entry_node(), make_nodes(),
$B!!!!!!!!!!!!!!(Bex. char word[MAXLEN];

$B!!!!(BMAXIN     $BF~NOJ8$N:GBgD9(B (MAXimum length of a INput string)
$B!!!!!!!!!!!!!!(Bused in : main(), str_head_cmp(), jextract(), find_isj(),
$B!!!!!!!!!!!!!!!!!!!!!!!!(Binit_headtabl(), make_nodes(), check_disjunction()
$B!!!!!!!!!!!!!!(Bex. char substr[MAXIN];

$B!!!!(BMAXOUT    $B=PNOJ8$N:GBgD9(B (MAXimum length of a OUTput string)
$B!!!!!!!!!!!!!!(Bused in : new_slist(), join_slist(), trace_net()
$B!!!!!!!!!!!!!!(Bex. char str[MAXOUT];

$B!!!!(BMAXNODE   $B%N!<%I$N:GBg8D?t(B (MAXimun number of morpheme NODE)
$B!!!!!!!!!!!!!!(Bused in : main(), find_isj(), init_xnode(), print_xnode(),
$B!!!!!!!!!!!!!!!!!!!!!!!!(Bfind_solutions(), make_nodes(), check_and_make_net(),
$B!!!!!!!!!!!!!!!!!!!!!!!!(Bcheck_disjunction()
$B!!!!!!!!!!!!!!(Bex. struct node xnode[MAXNODE];

$B!!!!(BMAXMORP   $B7ABVAG%3!<%I$N:GBgCM(B
$B!!!!!!!!!!!!!!(Bused in : init_conjtabl(), set_conjtabl()
$B!!!!!!!!!!!!!!(Bex. for (i=0; i<=MAXMORP; i++) {

$B!!!!(BMAXSUPPL  $BDI2CC18l$N:GBg8D?t(B
$B!!!!!!!!!!!!!!(Bused in : set_suppldata()
$B!!!!!!!!!!!!!!(Bex. for (n=0; n<MAXSUPPL; n++) {

$B!JJ8;zNsCV49!A7ABVAG%3!<%I!K(B

$B!!!!(BBUNTOU    $BJ8F,$N7ABVAGJ,N`%3!<%I(B (1)
$B!!!!!!!!!!!!!!(Bused in : find_solutions(), check_disjunction()
$B!!!!!!!!!!!!!!(Bex. if ( x[i].head==0 && check_conj(BUNTOU,x[i].code)==1 ) {

$B!!!!(BKUTEN     $B6gE@$N7ABVAGJ,N`%3!<%I(B (2)

$B!!!!(BTOUTEN    $BFIE@$N7ABVAGJ,N`%3!<%I(B (3)
$B!!!!!!!!!!!!!!(Bused in : trace_net()
$B!!!!!!!!!!!!!!(Bex. if ( (x.code==TOUTEN || strcmp(x.word,"$B$r(B")==0)

$B!!!!(BBUNMATU   $BJ8Kv$N7ABVAGJ,N`%3!<%I(B (6)
$B!!!!!!!!!!!!!!(Bused in : trace_net()
$B!!!!!!!!!!!!!!(Bex. if ( x.tail==len_initstr && check_conj(x.code,BUNMATU)==1) {

$B!!!!(BMEIFU     $BL>;l0lHL$N7ABVAGJ,N`%3!<%I(B (10)
$B!!!!!!!!!!!!!!(Bused in : entry_node(), make_nodes()
$B!!!!!!!!!!!!!!(Bex. if ( (xn[id].code == MEISA && code == MEIFU)

$B!!!!(BMEIKE     $BBeL>;l$N7ABVAGJ,N`%3!<%I(B (11)
$B!!!!!!!!!!!!!!(Bused in : entry_node()
$B!!!!!!!!!!!!!!(Bex. if (xn[id].code == MEIFU && code == MEIKE)

$B!!!!(BSUUSI     $B?t;l$N7ABVAGJ,N`%3!<%I(B (13)
$B!!!!!!!!!!!!!!(Bused in : make_nodes()
$B!!!!!!!!!!!!!!(Bex. find_isj(str,isjdigit,SUUSI,&node_id,xn);

$B!!!!(BMEIJI     $B?ML>$N7ABVAGJ,N`%3!<%I(B (14)
$B!!!!!!!!!!!!!!(Bused in : entry_node()
$B!!!!!!!!!!!!!!(Bex. else if ( (xn[id].code == MEIJI && code == MEIKO)

$B!!!!(BMEIKO     $B8GM-L>;l!J?ML>0J30!K$N7ABVAGJ,N`%3!<%I(B (15)
$B!!!!!!!!!!!!!!(Bused in : entry_node()
$B!!!!!!!!!!!!!!(Bex. else if ( (xn[id].code == MEIJI && code == MEIKO)

$B!!!!(BMEISA     $B%5JQ@-L>;l$N7ABVAGJ,N`%3!<%I(B (16)
$B!!!!!!!!!!!!!!(Bused in : entry_node()
$B!!!!!!!!!!!!!!(Bex. if ( (xn[id].code == MEISA && code == MEIFU)

$B!J%f!<%6Dj5A%G!<%?7?!K(B

$B!!!!(Bilist     $B@0?tCM$N%j%9%H!#(B"node"$B7?$NDj5A$J$I$K;HMQ(B
$B!!!!!!!!!!!!!!(Bused in : new_ilist(), join_ilist(), print_ilist(),
$B!!!!!!!!!!!!!!!!!!!!!!!!(Bjoin_headtabl(), print_ilist2(), trace_net(),
$B!!!!!!!!!!!!!!!!!!!!!!!!(Bcheck_and_make_net()
$B!!!!!!!!!!!!!!(Bex. struct ilist *headtabl[MAXIN];

$B!!!!(Bnode      $B7ABVAG%N!<%I$N7?!#(B
$B!!!!!!!!!!!!!!7ABVAG$NI=AXI=8=(B(word)$B!"F~NOJ8Cf$G$N7ABVAG$N3+;O0LCV(B(head)$B!"(B
$B!!!!!!!!!!!!!!=*N;0LCV(B(tail)$B!"7ABVAGJ,N`%3!<%I(B(code)$B!"$*$h$S$=$N7ABVAG$K8e@\(B
$B!!!!!!!!!!!!!!$G$-$k7ABVAG%N!<%I$NHV9f(B(nodelist)$B$+$i$J$k!#!#(B"nodelist"$B$K$h$C(B
$B!!!!!!!!!!!!!!$F!"7ABVAG%M%C%H%o!<%/$r9=C[$9$k$3$H$,$G$-$k!#(B
$B!!!!!!!!!!!!!!(Bused in : find_isj(), print_xnode(), trace_net(),
$B!!!!!!!!!!!!!!!!!!!!!!!!(Bfind_solutions(), make_nodes(), check_and_make_net(),
$B!!!!!!!!!!!!!!!!!!!!!!!!(Bcheck_disjunction()
$B!!!!!!!!!!!!!!(Bex. struct node xnode[MAXNODE];

$B!!!!(Bworddata$B!!%f!<%6JdB-<-=q$N7ABVAG$rEPO?$9$k$?$a$NG[Ns!#7ABVAG$NI=AXI=8=(B
$B!!!!!!!!!!!!!!(B(word)$B$H7ABVAGJ,N`%3!<%I(B(code)$B$+$i$J$k!#DI2CC18l$H:o=|C18l$N(B
$B!!!!!!!!!!!!!!N>J}$KMQ$$$k!#(B
$B!!!!!!!!!!!!!!(Bused in : main()
$B!!!!!!!!!!!!!!(Bex. struct worddata plusdata[MAXSUPPL];

$B!!!!(Bslist     $B2r$NJ8;zNs$N%j%9%H!#J8;zNs(B(str)$B!"2r@O7k2L$NE,@Z$5$r<($9;XI8CM(B
$B!!!!!!!!!!!!!!(B(magic)$B!"%j%9%H$N<!$NMWAG(B(next)$B$+$i$J$k!#(B
$B!!!!!!!!!!!!!!(Bused in : main(), new_slist(), join_slist(),
$B!!!!!!!!!!!!!!!!!!!!!!!!(Bprint_all_solutions(), print_best_solutions(),
$B!!!!!!!!!!!!!!(Bex. struct slist *solutions;


$B#2!!(Bsepa*_g.h

$B!&0J2<$NBg0hJQ?t$N5-21%/%i%9$r30ItJQ?t$HDj5A$7$F$$$k!#(B

$B!J(BFILE$B7?!K(B
$B!!!!(Bfp1, fp2, fp3, fpp, fopen()

$B!!!!(Bfp_suc$B!!!!2r@O7k2L$N=PNO%U%!%$%k(B
$B!!!!(Bfp_fai$B!!!!2r@O<:GTItJ,$N=PNO%U%!%$%k(B
$B!!!!(Bkiji.dat$B!!?7J95-;v%G!<%?%U%!%$%k(B

$B!J@0?t7?!K(B
$B!!!!(Bnum_nodes $B!!!!!!7ABVAG%N!<%I$NAm?t(B
$B!!!!(Bnum_plus  $B!!!!!!%f!<%6JdB-<-=q$NDI2C7ABVAG$NAm?t(B
$B!!!!(Bnum_minus $B!!!!!!%f!<%6JdB-<-=q$N:o=|7ABVAG$NAm?t(B
$B!!!!(Bnum_solutions$B!!(B $B2r$NAm?t(B
$B!!!!(Blen_initstr$B!!!!(B $BF~NOF|K\8lJ8$ND9$5(B
$B!!!!(Bmin_magic $B!!!!!!2r$N;XI8CM$N:G>.CM(B
$B!!!!(Bmax_nbest $B!!!!!!:GE,2r$NAm?t$N>e8BCM(B
$B!!!!(Bpass_time $B!!!!!!J8F,$+$i7ABVAG%M%C%H%o!<%/$rC)$k$K$"$?$j!"C)$C$?7PO)$N?t(B
$B!!!!(Bmax_pass_time$B!!(B $BJ8F,$+$i7ABVAG%M%C%H%o!<%/$rC)$k$K$"$?$j!"C)$C$?7PO)$N?t$N(B
$B!!!!!!!!!!!!!!!!!!(B  $B>e8BCM(B
$B!!!!(Bcutting_point$B!!(B $B7ABVAG%M%C%H%o!<%/$rC)$k$K$"$?$j!"$=$l$h$jA0$X$N%P%C%/%H%l(B
$B!!!!!!!!!!!!!!!!!!!!!<%9$r6X;_$9$kF~NOJ8Cf$N0LCV(B

$B!JJ8;zNs7?!K(B
$B!!!!(Bconjtabl  $B!!!!!!7ABVAG@\B3%F!<%V%k!#(B512x512$B$NBg$-$5(B

$B!J%f!<%6Dj5A7?!K(B
$B!!!!(Bxnode[MAXNODE]$B!!7ABVAG%N!<%I$NG[Ns(B
$B!!!!(Bheadtabl[MAXIN] $B7ABVAG%M%C%H%o!<%/$rC5:w$9$k$?$a$N%F!<%V%k(B
$B!!!!(Bsolutions$B!!!!!!(B $B2r$N%j%9%H(B
$B!!!!(Bplusdata[MAXSUPPL]$B!!%f!<%6JdB-<-=q$NDI2C7ABVAG$NG[Ns(B
$B!!!!(Bminusdata[MAXSUPPL] $B%f!<%6JdB-<-=q$N:o=|7ABVAG$NG[Ns(B

