input boxes vardef drawnodes(text t) = fixsize(t); forsuffixes s=t: fill bpath.s shifted (1pt, -1pt); unfill bpath.s; drawboxed(s); endfor enddef; def send(suffix s, d)(expr angle) = drawarrow s.c{(d.c-s.c) rotated angle}..d.c cutbefore bpath.s cutafter bpath.d; enddef; beginfig(1); u = 3mm; circleit.a(btex Alice etex); circleit.n(btex $N_i$ etex); circleit.p(btex $w_1$ etex); circleit.q(btex $w_2$ etex); circleit.r(btex $w_3$ etex); circleit.m(btex $N_{i+1}$ etex); n.c-a.c = q.c-n.c = m.c-q.c = (10u, 0); p.c-q.c = q.c-r.c = (0, 6u); a.e-a.c = n.e-n.c = p.e-p.c = q.e-q.c = r.e-r.c = m.e-m.c = (5mm, 0); a.n-a.c = n.n-n.c = p.n-p.c = q.n-q.c = r.n-r.c = m.n-m.c = (0, 4mm); drawnodes(a, n, p, q, r, m); send(a, n, 0); %btex $M_1$ etex); send(n, p, 12); send(n, q, 12); send(n, r, 0); send(p, m, 12); send(q, m, 0); send(m, p, 12); send(p, n, 12); send(q, n, 12); endfig; end