{"id":464,"date":"2013-05-23T20:29:32","date_gmt":"2013-05-23T20:29:32","guid":{"rendered":"http:\/\/corner.mimuw.edu.pl\/?p=464"},"modified":"2022-09-12T10:14:39","modified_gmt":"2022-09-12T10:14:39","slug":"in-the-search-for-lost-ark-the-shortest-path-problem-we-have-forgotten-to-solve","status":"publish","type":"post","link":"https:\/\/corner.mimuw.edu.pl\/?p=464","title":{"rendered":"In the search for lost ark - the shortest path problem we have forgotten to solve"},"content":{"rendered":"<p>The shortest path problem is one of the central research problem in the algorithmic research. The main setup for this problem is to find distances from given start vertex to all other nodes in the graph. Probably, the most important results here are Dijkstra and Belmann-Ford algorithms -- both from around 1960. Dijkstra considered directed graphs with non-negative weight edges. His algorithm can be implemented to run in <em>O<\/em>(<em>m<\/em>+<em>n<\/em> log <em>n<\/em>) time using Fibonacci heaps. On the other hand, Belman-Ford solved the directed problem with negative weights in <em>O<\/em>(<em>nm<\/em>) time. You might note that for non-negative weights the shortest paths problem in undirected graph can be solved via reduction to directed case, so Dijkstra is applicable here as well. Although there exists a faster linear time solution for undirected graph with integral weights that is due to Thorup [1]. Similarly, for the case of directed graphs with negative weights there has been some progress. First, in 80s two scaling algorithms working in <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small O(sqrt{n}m log nW)\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small O(sqrt{n}m log nW)\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small O(sqrt{n}m log nW)\" alt=\"\" \/><\/a> [2] and <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small O(sqrt{n}m log W)\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small O(sqrt{n}m log W)\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small O(sqrt{n}m log W)\" alt=\"\" \/><\/a> [3] have been given. In these algorithms one assumes that edge weights are integral with absolute value bounded by <em>W<\/em>. Second, in 2005 two algebraic algorithms working in <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small O(Wn^{omega})\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small O(Wn^{omega})\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small O(Wn^{omega})\" alt=\"\" \/><\/a> time have been presented [4,5], where\u00a0<a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small omega &lt; 2.4\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small omega &lt; 2.4\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small omega &lt; 2.4\" alt=\"\" \/><\/a> is matrix multiplication exponent. There is even more work in between these results that I did not mention, and much more papers studying all pairs shortest paths, or special cases like planar graphs. However, we have not mentioned the undirected shortest path problem on graphs with negative weight edges yet... Is this problem actually solvable in polynomial time? Yet it is, this has been shown by Edmonds in '67 via a reduction to matchings [6]. These notes are probably lost... maybe not lost but probably hard to access. Anyway the reduction is given in Chapter 12.7 of [7]. Let us recall it We will essentially show that in order to find the distance from fixed source <em>s<\/em> to fixed sink <em>t<\/em> one needs to solve minimum weight perfect matching problem once.<\/p>\n<p>Let <em>G<\/em>=(<em>V<\/em>,<em>E<\/em>) be an undirected graph, let <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small w:E\to mathcal{R}\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small w:E\to mathcal{R}\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small w:E\to mathcal{R}\" alt=\"\" \/><\/a> be the edge weight function and let <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small E^{-}\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small E^{-}\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small E^{-}\" alt=\"\" \/><\/a> be the set of edges with negative weights. We will define a graph <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small ddot{G}\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small ddot{G}\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small ddot{G}\" alt=\"\" \/><\/a> that models paths in <em>G<\/em> by almost perfect matchings. We define the <em>split graph<\/em> <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small ddot{G}=(ddot{V},ddot{E})\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small ddot{G}=(ddot{V},ddot{E})\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small ddot{G}=(ddot{V},ddot{E})\" alt=\"\" \/><\/a> with the weight function <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small ddot{w}\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small ddot{w}\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small ddot{w}\" alt=\"\" \/><\/a> in the following way<\/p>\n<p><a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small ddot{V} = {v_1, v_2: v in V} cup {e_1,e_2: e in E^{-}},\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small ddot{V} = {v_1, v_2: v in V} cup {e_1,e_2: e in E^{-}},\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small ddot{V} = {v_1, v_2: v in V} cup {e_1,e_2: e in E^{-}},\" alt=\"\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small ddot{E} = {v_1 v_2: vin V} cup {u_1v_2, u_2v_1, u_1v_1, u_2v_2 : uvin E setminus E^{-}} \\ phantom             cup {u_1 e_1, u_2e_1, e_1 e_2, v_1 e_2, v_2 e_2 : e=uv in E^{-}, u&lt;v},\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small ddot{E} = {v_1 v_2: vin V} cup {u_1v_2, u_2v_1, u_1v_1, u_2v_2 : uvin E setminus E^{-}} \\ phantom             cup {u_1 e_1, u_2e_1, e_1 e_2, v_1 e_2, v_2 e_2 : e=uv in E^{-}, u&lt;v},\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small ddot{E} = {v_1 v_2: vin V} cup {u_1v_2, u_2v_1, u_1v_1, u_2v_2 : uvin E setminus E^{-}} \\ phantom             cup {u_1 e_1, u_2e_1, e_1 e_2, v_1 e_2, v_2 e_2 : e=uv in E^{-}, u&lt;v},\" alt=\"\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small ddot{w}(u_i v_j) = left{ egin{array}{rl} w(uv) &amp; \textrm{if } uv in Esetminus E^{-}, \\ w(e) &amp; \textrm{if } u_i=e_1 \textrm{ and } v_j\neq e_2 \textrm{ and } e in E^{-},\\ 0 &amp; \textrm{otherwise.} end{array} \night.\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small ddot{w}(u_i v_j) = left{ \begin{array}{rl} w(uv) &amp; \textrm{if } uv in Esetminus E^{-}, \\ w(e) &amp; \textrm{if } u_i=e_1 \textrm{ and } v_j\neq e_2 \textrm{ and } e in E^{-},\\ 0 &amp; \textrm{otherwise.} end{array} \night.\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small ddot{w}(u_i v_j) = left{ \begin{array}{rl} w(uv) &amp; \textrm{if } uv in Esetminus E^{-}, \\ w(e) &amp; \textrm{if } u_i=e_1 \textrm{ and } v_j\neq e_2 \textrm{ and } e in E^{-},\\ 0 &amp; \textrm{otherwise.} end{array} \night.\" alt=\"\" \/><\/a><\/p>\n<p>An undirected graph <em>G<\/em> and its graph <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small ddot{G}\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small ddot{G}\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small ddot{G}\" alt=\"\" \/><\/a> are shown on the figure below.<\/p>\n<p><a href=\"http:\/\/corner.mimuw.edu.pl\/wp-content\/uploads\/2013\/05\/fig5.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-470\" src=\"http:\/\/corner.mimuw.edu.pl\/wp-content\/uploads\/2013\/05\/fig5.png\" alt=\"fig5\" width=\"1277\" height=\"466\" srcset=\"https:\/\/corner.mimuw.edu.pl\/wp-content\/uploads\/2013\/05\/fig5.png 1277w, https:\/\/corner.mimuw.edu.pl\/wp-content\/uploads\/2013\/05\/fig5-300x109.png 300w, https:\/\/corner.mimuw.edu.pl\/wp-content\/uploads\/2013\/05\/fig5-1024x373.png 1024w, https:\/\/corner.mimuw.edu.pl\/wp-content\/uploads\/2013\/05\/fig5-500x182.png 500w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/p>\n<p>In <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small ddot{G}\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small ddot{G}\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small ddot{G}\" alt=\"\" \/><\/a> zigzag edges weigh -1, dashed edges weigh 1 and the remaining edges weigh 0. Vertices corresponding to negative edges of <em>G<\/em> are white squares. The far right shows a matching <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small M(a_2c_1)\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small M(a_2c_1)\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small M(a_2c_1)\" alt=\"\" \/><\/a> of weight -2, which corresponds to a shortest path between <em>a<\/em> and <em>c<\/em>. Note how a length-two path in <em>G<\/em>, say <em>a<\/em>,<em>b<\/em>,<em>c<\/em> with <em>w<\/em>(<em>ab<\/em>)?0&gt;<em>w<\/em>(<em>bc<\/em>) and <em>e<\/em>=<em>bc<\/em>, corresponds to<br \/>\na matching in <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small ddot{G}\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small ddot{G}\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small ddot{G}\" alt=\"\" \/><\/a> such as <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small a_1b_1, b_2e_1,e_2c_1\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small a_1b_1, b_2e_1,e_2c_1\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small a_1b_1, b_2e_1,e_2c_1\" alt=\"\" \/><\/a>, having the same total weight.<\/p>\n<p>An important property is that we can assume <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small ddot{n}=|ddot{V}| le 4n\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small ddot{n}=|ddot{V}| le 4n\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small ddot{n}=|ddot{V}| le 4n\" alt=\"\" \/><\/a>. This follows since we can assume <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small |E^{-}| &lt; n\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small |E^{-}| &lt; n\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small |E^{-}| &lt; n\" alt=\"\" \/><\/a>, as otherwise the set of negative edges contains a cycle.<\/p>\n<p>Let us consider minimum weight perfect matchings in <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small ddot{G}\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small ddot{G}\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small ddot{G}\" alt=\"\" \/><\/a>, then we can observe the following.<\/p>\n<p><strong>Lemma 1.<\/strong><br \/>\n<em>Let <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small u,vin V\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small u,vin V\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small u,vin V\" alt=\"\" \/><\/a>, let M be the minimum weight perfect matching, and let <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small M(u_2v_1)\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small M(u_2v_1)\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small M(u_2v_1)\" alt=\"\" \/><\/a> be the minimum weight almost perfect matching in <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small ddot{G}\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small ddot{G}\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small ddot{G}\" alt=\"\" \/><\/a> that does not match <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small v_1 \textrm{ nor } u_2\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small v_1 \textrm{ nor } u_2\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small v_1 \textrm{ nor } u_2\" alt=\"\" \/><\/a>. If G does not contain negative weight cycles then <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small ddot{w}(M)=0\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small ddot{w}(M)=0\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small ddot{w}(M)=0\" alt=\"\" \/><\/a> and the shortest path weight from u to v in G is equal to <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small ddot{w}(M(u_2v_1))\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small ddot{w}(M(u_2v_1))\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small ddot{w}(M(u_2v_1))\" alt=\"\" \/><\/a>.<\/em><\/p>\n<p>Hence, in order to solve the same problem as Belman and Ford did, i.e., to compute the distances from given source to all other nodes we need to run some matching algorithm <em>O<\/em>(<em>n<\/em>) times. This does not seem to be right. Even using fast implementation of Edmonds weighted matching algorithm [8] one needs <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small O(n^2(m@plus;n log n))\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small O(n^2(m+n log n))\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small O(n^2(m+n log n))\" alt=\"\" \/><\/a> time, whereas Belman-Ford algorithm works just in <em>O<\/em>(<em>nm<\/em>) time. There seem to be something lost here, or at least overlooked through the years. Searching through the literature one can find partial answers that shed some light on the structure of such shortest paths. Seb\u00f6 has characterized the structure of single-source shortest paths in undirected graphs, first for graphs with \u00b11 edge weights [9] and then extending to general weights by reduction [10]. Equation (4.2) of [9] (for \u00b11-weights, plus its version achieved by reduction for arbitrary weights) characterizes the shortest paths from a fixed source in terms of how they enter and leave \"level sets\" determined by the distance function. However, this is just a partial answer as it does not show how the shortest path \"tree\" looks like, or does not give an efficient way to compute it. We write \"tree\", because one might observe that the shortest paths do not necessary form a tree -- as shown on the figure below.<\/p>\n<p><a href=\"http:\/\/corner.mimuw.edu.pl\/wp-content\/uploads\/2013\/05\/triangle.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-473\" src=\"http:\/\/corner.mimuw.edu.pl\/wp-content\/uploads\/2013\/05\/triangle.png\" alt=\"triangle\" width=\"295\" height=\"273\" \/><\/a><\/p>\n<p>So how do shortest paths look like? Is there some notion of shortest path tree here? If yes then is this shortest path tree of <em>O<\/em>(<em>n<\/em>) size? In our recent paper with Hal Gabow, that is available on <a href=\"http:\/\/arxiv.org\/abs\/1304.6740\">arXiv<\/a>, we give answers to these question. For undirected shortest paths we get a somewhat simple definition of a generalized shortest-path tree -- see Section 6.1 of our paper. (It seems to us that such a definition may have been overlooked due to reliance on reductions.) The generalized shortest-path tree is a combination of the standard shortest-path tree and the matching blossom tree. This is not so astonishing if you recall the above reduction to matchings in general graphs. Examining the blossom structure of the resulting graph enables us to define our generalized shortest-path tree that, like the standard shortest-path tree for directed graphs, specifies a shortest path to every vertex from a chosen source. We give a complete derivation of the existence of this shortest-path structure, as well as an algebraic algorithm to construct it in time <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small \tilde{O}(Wn^omega)\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small \tilde{O}(Wn^omega)\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small \tilde{O}(Wn^omega)\" alt=\"\" \/><\/a>. We also construct the structure with combinatoric algorithms, in time <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small O(n(m@plus;nlog n))\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small O(n(m+nlog n))\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small O(n(m+nlog n))\" alt=\"\" \/><\/a> or <a href=\"http:\/\/www.codecogs.com\/eqnedit.php?latex=small O(sqrt{n alpha(m,n)log n} m log (nW))\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" title=\"small O(sqrt{n alpha(m,n)log n} m log (nW))\" src=\"http:\/\/latex.codecogs.com\/gif.latex?small O(sqrt{n alpha(m,n)log n} m log (nW))\" alt=\"\" \/><\/a>. Hence, this settles the problem, as these bounds are all within logarithmic factors of the best-known bounds for constructing the directed shortest-path tree with negative weights.<\/p>\n<p>[1] M. Thorup, Undirected single-source shortest paths with positive integer weights in linear time, JACM, 46(3):362--394, 1999.<\/p>\n<p>[2] H. N. Gabow and R. E. Tarjan, Faster scaling algorithms for network problems, SIAM Journal on Computing, 18(5):1013--1036, 1989.<\/p>\n<p>[3] A. V. Goldberg, Scaling algorithms for the shortest paths problem, SODA '93.<\/p>\n<p>[4] R. Yuster and U. Zwick, Answering distance queries in directed graphs using fast matrix multiplication, FOCS'05.<\/p>\n<p>[5] P. Sankowski,\u00a0 Shortest Paths in Matrix Multiplication Time, ESA'05.<\/p>\n<p>[6] J. Edmonds, An introduction to matching. Mimeographed notes, Engineering Summer Conference, U. Michigan, Ann Arbor, MI, 1967.<\/p>\n<p>[7] R. K. Ahuja, T. L. Magnanti and J.B. Orlin, Network Flows: Theory, Algorithms, and Applications, Prentice Hall, 1993.<\/p>\n<p>[8] H. N. Gabow, Data Structures for Weighted Matching and Nearest Common Ancestors with Linking, SODA'90.<\/p>\n<p>[9] A. Seb\u00f6, Undirected distances and the postman-structure of graphs, J. Combin. Theory Ser. B, 49(1):10--39, 1990.<\/p>\n<p>[10] A. Seb\u00f6, Potentials in Undirected Graphs and Planar Multiflows, SIAM J. Comput., 26(2):582--603, 1997.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The shortest path problem is one of the central research problem in the algorithmic research. The main setup for this problem is to find distances from given start vertex to all other nodes in the graph. Probably, the most important &hellip; <a href=\"https:\/\/corner.mimuw.edu.pl\/?p=464\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=\/wp\/v2\/posts\/464"}],"collection":[{"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=464"}],"version-history":[{"count":29,"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=\/wp\/v2\/posts\/464\/revisions"}],"predecessor-version":[{"id":1133,"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=\/wp\/v2\/posts\/464\/revisions\/1133"}],"wp:attachment":[{"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}