code: def dmp_zz_diophantine(F, c, A, d, p, u, K):
      """Wang/EEZ: Solve multivariate Diophantine equations."""
      if not A:
          S = [[] for _ in F]
          n = dup_degree(c)
  
          for i, coeff in enumerate(c):
              if not coeff:
                  continue
  
              T = dup_zz_diophantine(F, n - i, p, K)
  
              for j, (s, t) in enumerate(zip(S, T)):
                  t = dup_mul_ground(t, coeff, K)
                  S[j] = dup_trunc(dup_add(s, t, K), p, K)
      else:
          n = len(A)
          e = dmp_expand(F, u, K)
  
          a, A = A[-1], A[:-1]
          B, G = [], []
  
          for f in F:
              B.append(dmp_quo(e, f, u, K))
              G.append(dmp_eval_in(f, a, n, u, K))
  
          C = dmp_eval_in(c, a, n, u, K)
  
          v = u - 1
  
          S = dmp_zz_diophantine(G, C, A, d, p, v, K)
          S = [dmp_raise(s, 1, v, K) for s in S]
  
          for s, b in zip(S, B):
              c = dmp_sub_mul(c, s, b, u, K)
  
          c = dmp_ground_trunc(c, p, u, K)
  
          m = dmp_nest([K.one, -a], n, K)
          M = dmp_one(n, K)
  
          for k in range(0, d):
              if dmp_zero_p(c, u):
                  break
  
              M = dmp_mul(M, m, u, K)
              C = dmp_diff_eval_in(c, k + 1, a, n, u, K)
  
              if not dmp_zero_p(C, v):
                  C = dmp_quo_ground(C, K.factorial(K(k) + 1), v, K)
                  T = dmp_zz_diophantine(G, C, A, d, p, v, K)
  
                  for i, t in enumerate(T):
                      T[i] = dmp_mul(dmp_raise(t, 1, v, K), M, u, K)
  
                  for i, (s, t) in enumerate(zip(S, T)):
                      S[i] = dmp_add(s, t, u, K)
  
                  for t, b in zip(T, B):
                      c = dmp_sub_mul(c, t, b, u, K)
  
                  c = dmp_ground_trunc(c, p, u, K)
  
          S = [dmp_ground_trunc(s, p, u, K) for s in S]
  
      return S
  
imports: from sympy.external.gmpy import GROUND_TYPES
  from sympy.core.random import _randint
  from sympy.polys.galoistools import gf_from_int_poly, gf_to_int_poly, gf_lshift, gf_add_mul, gf_mul, gf_div, gf_rem, gf_gcdex, gf_sqf_p, gf_factor_sqf, gf_factor
  from sympy.polys.densebasic import dup_LC, dmp_LC, dmp_ground_LC, dup_TC, dup_convert, dmp_convert, dup_degree, dmp_degree, dmp_degree_in, dmp_degree_list, dmp_from_dict, dmp_zero_p, dmp_one, dmp_nest, dmp_raise, dup_strip, dmp_ground, dup_inflate, dmp_exclude, dmp_include, dmp_inject, dmp_eject, dup_terms_gcd, dmp_terms_gcd
  from sympy.polys.densearith import dup_neg, dmp_neg, dup_add, dmp_add, dup_sub, dmp_sub, dup_mul, dmp_mul, dup_sqr, dmp_pow, dup_div, dmp_div, dup_quo, dmp_quo, dmp_expand, dmp_add_mul, dup_sub_mul, dmp_sub_mul, dup_lshift, dup_max_norm, dmp_max_norm, dup_l1_norm, dup_mul_ground, dmp_mul_ground, dup_quo_ground, dmp_quo_ground
  from sympy.polys.densetools import dup_clear_denoms, dmp_clear_denoms, dup_trunc, dmp_ground_trunc, dup_content, dup_monic, dmp_ground_monic, dup_primitive, dmp_ground_primitive, dmp_eval_tail, dmp_eval_in, dmp_diff_eval_in, dmp_compose, dup_shift, dup_mirror
  from sympy.polys.euclidtools import dmp_primitive, dup_inner_gcd, dmp_inner_gcd
  from sympy.polys.sqfreetools import dup_sqf_p, dup_sqf_norm, dmp_sqf_norm, dup_sqf_part, dmp_sqf_part
  from sympy.polys.polyutils import _sort_factors
  from sympy.polys.polyconfig import query
  from sympy.polys.polyerrors import ExtraneousFactors, DomainError, CoercionFailed, EvaluationFailed
  from sympy.utilities import subsets
  from math import ceil, log
label_desc: Use image node_id 20 for calling a global function with example usage: dmp_zz_diophantine(F, c, A, d, p, u, K) and returns: S