Solve a game of Accordion
Python 3, 274 272 271 bytes
2 bytes saved thanks to @orlp.

def g(p):
 q=lambda a:[[i,a]for i in range(len(p)-a)if p[i][:-1]==p[i+a][:-1]or p[i][-1]in p[i+a]]
 for n in q(1)+q(3):
  s=sum(n);c=p[:s]+p[s+1:];c[n[0]]=p[s]
  if g(c):return p[n[0]]+' &lt;- '+p[s]+','+g(c)
 return' 'if len(p)&lt;2else[]
print(g(input().split(','))[:-2]or'')

This is extremely slow. However, you can try it with a memoize. This has a few extra list-tuple conversions, but is otherwise equivalent.
import functools
@functools.lru_cache(maxsize=None)
def g(p):
 q=lambda a:[[i,a]for i in range(len(p)-a)if p[i][:-1]==p[i+a][:-1]or p[i][-1]in p[i+a]]
 for n in q(1)+q(3):
  s=sum(n);c=list(p[:s]+p[s+1:]);c[n[0]]=p[s]
  if g(tuple(c)):return p[n[0]]+' &lt;- '+p[s]+','+g(tuple(c))
 return' 'if len(p)&lt;2else[]
print(g(tuple(input().split(',')))[:-2]or'')

Even this one is astronomically slow with certain inputs.
The code uses strings, not numbers, so it also supports notation like KH instead of 13H.
Example:
$ python accordion.py
5H,9C,11H,7S,7D,12D,6H,10S,3H,4D,12C,2S,3C,5C,7H,6S,1H,8S,2H,11S,4C,10D,12H,9H,2D,4H,6C,13H,11C,2C,10H,8C,1S,11D,3S,12S,7C,5D,13S,8D,4S,6D,13C,3D,8H,13D,1D,9D,9S,1C,5S,10C
7S &lt;- 7D,7D &lt;- 12D,3C &lt;- 5C,12H &lt;- 9H,11C &lt;- 2C,3S &lt;- 12S,13D &lt;- 1D,1D &lt;- 9D,9D &lt;- 9S,2S &lt;- 6S,7H &lt;- 1H,6S &lt;- 8S,1H &lt;- 2H,8S &lt;- 11S,2H &lt;- 9H,10D &lt;- 2D,9H &lt;- 4H,4H &lt;- 4C,5C &lt;- 4C,4D &lt;- 4C,4C &lt;- 12C,10S &lt;- 11S,11H &lt;- 11S,6H &lt;- 3H,12D &lt;- 2D,12C &lt;- 2C,2C &lt;- 6C,6C &lt;- 8C,12S &lt;- 13S,5D &lt;- 6D,6D &lt;- 8D,8D &lt;- 3D,4S &lt;- 9S,13S &lt;- 9S,11D &lt;- 3D,7C &lt;- 1C,1S &lt;- 1C,1C &lt;- 13C,8C &lt;- 13C,13C &lt;- 13H,13H &lt;- 10H,2D &lt;- 3D,3D &lt;- 3H,3H &lt;- 8H,8H &lt;- 10H,11S &lt;- 5S,5H &lt;- 10H,5S &lt;- 9S,10H &lt;- 10C,10C &lt;- 9C,9C &lt;- 9S