# [Haskell], 102 bytes

Port of my BQN answer.

<!-- language-all: lang-hs -->

 import Data.List
 n!([u,v]:e)=zipWith(-)(n!e)$0:tail n!nub[sort$take 2$(r++[v])\\[u]|r<-e]
 n!_=1:(0<$n)

[Try it online!][TIO-kzs8wc46]

[Haskell]: https://www.haskell.org/
[TIO-kzs8wc46]: https://tio.run/##hY89b4MwGIT3/IoXicFWnIqPGggKW5ZK3Ts4VuWqSLFCHAQmQ9T/Tu23qUoblC4nc757Du9Vf6ibZhz1sT11FrbKqodn3duFCYgY2FmWNa0uun3Rdk9WlJigpmFUWqUbMIEZ3kTveqFVhxqSkHTLpThLutuJQX50m1UtHei1iksSbUJDx6PSBip4Py0A2k4bCyGImCUslRAAERLKEoR4MlZKOpsR/iiZ09SpN@VNjj1Okwkmvflf8ofpdT7P@G0jdlmv/FfbK78ue/VnX5@nsozlrJhj8wkvm/By5BVOOfocnQwdj7q3w9Ysjr7Hpk/I/vx8gtD0@pACJ9c45vp@7WsTP3K8L/Ae@XL8BA "Haskell – Try It Online"

I feel like there should be a shorter way to replace \$u\$ with \$v\$ in a list (currently `take 2$(r++[v])\\[u]`).