Merging list tails in Scheme
A minor detail: In output it can be hard to tell the difference between (cons #f #f) and (cons #f #f) i.e. between uniq1 and uniq2. An alternative is to write (list 'uniq1) in order to get a unique value.

For comparison here is a version of merge-tail written using named let rather than using indices. Here the common tail between xs and ys are found, and two new lists using the shared tail is returned.

(define (reverse-append rxs ys)
  (if (null? rxs)
      ys
      (reverse-append (cdr rxs) (cons (car rxs) ys))))

(define (merge-tail xs ys)
  (let loop ([tail '()]
             [rxs  (reverse xs)]
             [rys  (reverse ys)])
    (cond
      [(eqv? (car rxs) (car rys))
       (loop (cons (car rxs) tail)
             (cdr rxs)
             (cdr rys))]
      [else
       ;; tail is now equal to the common tail of xs and ys
       (values (reverse-append rxs tail)
               (reverse-append rys tail))])))


This solution will fail if xs and ys are cyclic lists with equal elements.
So in the terminology of srfi 1, the solution only works for proper lists.