用Mathematica解决下面的问题

问题描述:

用Mathematica解决下面的问题
有一个数组:
dd={{d[3]-5,d[2]-1,d[1]},{d[2]-5,d[1]-1,d[3]},{d[1]-5,d[3]-1,d[2]},
{d[3]-4,d[2]-2,d[1]},{d[2]-4,d[1]-2,d[3]},{d[1]-4,d[3]-2,d[2]}
{d[3]-3,d[2]-2,d[1]-1},{d[2]-3,d[1]-2,d[3]-1},{d[1]-3,d[3]-2,d[2]-1}}
和一个表达式:(这里只是列出了一部分)
hh=10 d[1](-1+d[2])( -5+d[3]) +14(-1+d[1]) d[2](-5+d[3])+
15 d[1](-2+d[2])(-4+d[3])+13(-2+d[1]) d[2](-4+d[3])+
19 (-1+d[1])(-2+d[2])(-3+d[3])+15(-1+d[1])(-3+d[2])(-2+d[3])+.
对这个表达式hh调用上面的数组dd
规律是:
如果表达式 hh 中的某一项,比如10 d[1](-1+d[2])( -5+d[3]) ,与上面数组 dd 中 {d[3]-5,d[2]-1,d[1]},内的元素全部对应相同,则让表达式这一项前面的系数取正;
否则就是取负值:
例如对于上面表达式 hh 里的第二项 14(-1+d[1]) d[2](-5+d[3]),数组内没有任何一组的全部元素与它对应相同,则应该取负值,即变为 -14(-1+d[1]) d[2](-5+d[3])
那么在调用数组之后,上面式子应变为
hh=10 d[1](-1+d[2])( -5+d[3]) -14(-1+d[1]) d[2](-5+d[3])+
15 d[1](-2+d[2])(-4+d[3]) -13(-2+d[1]) d[2](-4+d[3])+
19 (-1+d[1])(-2+d[2])(-3+d[3]) -15(-1+d[1])(-3+d[2])(-2+d[3])+.
最后想要的输出结果是
hh=-4 d[1](-1+d[2])( -5+d[3]) +
2d[1](-2+d[2])(-4+d[3]) +
4(-1+d[1])(-2+d[2])(-3+d[3])+.
就是在hh中
把d[1](-1+d[2])( -5+d[3]) ;(-1+d[1])d[2]( -5+d[3]) ;
(-5+d[1])d[2]( -1+d[3]) ;(-1+d[1])(-5+d[2])d[3].
全都看做一项:d[1] (-1+d[2])(-5+d[3]),把这些项前面系数相加减;
把 d[1](-2+d[2])(-4+d[3]);(-2+d[1]) d[2](-4+d[3]).
全都看做一项:d[1](-2+d[2])(-4+d[3]),把这些项前面系数相加减;
以此类推.

这样?:
r = Rule[#, -#] & /@ Times @@@ dd
hh /. r /. d[_] -> d
看不懂请追问.