`UP/ModGcd` := proc(D) local a,b,s,x,v;
	s := {args[2..nargs]} minus {D[0]};
	if s = {} then RETURN( D[0] ) else a := s[1]; s := s minus {a} fi;
	v := D[Variable];
	a := subs(v=x,D[Output](a));
	for b in s while a <> 1 do a := gcd(a,subs(v=x,D[Output](b))) od;
	D[Input]( subs(x=v,a) )
end:

save `ModGcd.m`;
quit
