from itertools import*
E=enumerate
L=len
U=lambda x:{L(x)-i:a for i,a in E(x,1)}
V=eval
def G(v,r=[]):
if[]==v:yield r;return
for k in product(*([[-1,0,1]]*L(v[0]))):N=[a+b for a,b in zip(v[0],k)];yield from G(v[1:],r+[[[-1]+N[1:]],[N]][N[0]!=0])
def P(p):
if[]==p:return{0:1}
s=U(p[0])
for e in p[1:]:
n={}
for i,a in E(e,1):
for A in s:n[j]=n.get(j:=A+L(e)-i,0)+s[A]*a
s=n
return s
def f(n,d):
S,D,M={*map(str,d)},[],{}
for i in S:Y=d.count(V(i));D+=[(i,Y)]+[(i,1)]*(Y>1==L(S));M[i]=max(Y,M.get(i,0))
N=U(n);q,O=[[(a,b,t:=P([V(i)for J,K in[(j,M[j])for j in{*M}-{a}]+[(a,M[a]-b)]*(M[a]>b)for i in[J]*K]),[1]+[0]*(max(N)-max(t)))for a,b in D]],[]
while q:
a=q.pop(0);O+=a,;r={}
for *_,p,o in a:
for A,B in P([[*p.values()],o]).items():r[A]=r.get(A,0)+B
if r==N:return[[i[-1],[V(i[0])]*int(i[1])]for i in a]
for i in G([j[-1]for j in a]):v=[(A,B,C,z)for(A,B,C,_),z in zip(a,i)];q+=-~-(v in O)*[v]
print(f([1,4], [[1,3], [1,2]]))
print(f([1,4], [[1,3], [1,3]]))
print(f([2,-1,4], [[1,0], [1,0,4]]))
ZnJvbSBpdGVydG9vbHMgaW1wb3J0KgpFPWVudW1lcmF0ZQpMPWxlbgpVPWxhbWJkYSB4OntMKHgpLWk6YSBmb3IgaSxhIGluIEUoeCwxKX0KVj1ldmFsCmRlZiBHKHYscj1bXSk6CiBpZltdPT12OnlpZWxkIHI7cmV0dXJuCiBmb3IgayBpbiBwcm9kdWN0KCooW1stMSwwLDFdXSpMKHZbMF0pKSk6Tj1bYStiIGZvciBhLGIgaW4gemlwKHZbMF0sayldO3lpZWxkIGZyb20gRyh2WzE6XSxyK1tbWy0xXStOWzE6XV0sW05dXVtOWzBdIT0wXSkKZGVmIFAocCk6CiBpZltdPT1wOnJldHVybnswOjF9CiBzPVUocFswXSkKIGZvciBlIGluIHBbMTpdOgogIG49e30KICBmb3IgaSxhIGluIEUoZSwxKToKICAgZm9yIEEgaW4gczpuW2pdPW4uZ2V0KGo6PUErTChlKS1pLDApK3NbQV0qYQogIHM9bgogcmV0dXJuIHMKZGVmIGYobixkKToKIFMsRCxNPXsqbWFwKHN0cixkKX0sW10se30KIGZvciBpIGluIFM6WT1kLmNvdW50KFYoaSkpO0QrPVsoaSxZKV0rWyhpLDEpXSooWT4xPT1MKFMpKTtNW2ldPW1heChZLE0uZ2V0KGksMCkpCiBOPVUobik7cSxPPVtbKGEsYix0Oj1QKFtWKGkpZm9yIEosSyBpblsoaixNW2pdKWZvciBqIGlueypNfS17YX1dK1soYSxNW2FdLWIpXSooTVthXT5iKWZvciBpIGluW0pdKktdKSxbMV0rWzBdKihtYXgoTiktbWF4KHQpKSlmb3IgYSxiIGluIERdXSxbXQogd2hpbGUgcToKICBhPXEucG9wKDApO08rPWEsO3I9e30KICBmb3IgKl8scCxvIGluIGE6CiAgIGZvciBBLEIgaW4gUChbWypwLnZhbHVlcygpXSxvXSkuaXRlbXMoKTpyW0FdPXIuZ2V0KEEsMCkrQgogIGlmIHI9PU46cmV0dXJuW1tpWy0xXSxbVihpWzBdKV0qaW50KGlbMV0pXWZvciBpIGluIGFdCiAgZm9yIGkgaW4gRyhbalstMV1mb3IgaiBpbiBhXSk6dj1bKEEsQixDLHopZm9yKEEsQixDLF8pLHogaW4gemlwKGEsaSldO3ErPS1+LSh2IGluIE8pKlt2XQogIApwcmludChmKFsxLDRdLCBbWzEsM10sIFsxLDJdXSkpCnByaW50KGYoWzEsNF0sIFtbMSwzXSwgWzEsM11dKSkKcHJpbnQoZihbMiwtMSw0XSwgW1sxLDBdLCBbMSwwLDRdXSkp