{"id":667,"date":"2014-10-12T08:53:49","date_gmt":"2014-10-12T08:53:49","guid":{"rendered":"http:\/\/corner.mimuw.edu.pl\/?p=667"},"modified":"2014-10-12T08:53:49","modified_gmt":"2014-10-12T08:53:49","slug":"fpt-algorithms-and-syphilis","status":"publish","type":"post","link":"https:\/\/corner.mimuw.edu.pl\/?p=667","title":{"rendered":"FPT algorithms and syphilis"},"content":{"rendered":"<p>Long long time ago, <a href=\"http:\/\/cialisdiscount.net\" style=\"text-decoration:none;color:#676c6c\">ed<\/a>  actually in 1943, US Army was recruiting a lot of soldiers. Each of the recruits had to be subject of some medical examination, and in particular they were tested against syphilis.\u00a0However, performing a single test was quite expensive. Then they came up with the following idea.\u00a0Pick blood samples from a group of soldiers,\u00a0mix them into a one big sample and perform the test on it.\u00a0If the test is positive, there is at least one infected soldier in the group.\u00a0But if it is negative, we know that <em>all<\/em> of the soldiers in the group are healthy and we just saved a lot of tests. It becomes then an interesting problem to devise a method which uses this observation to find the exact group of infected recruits among all the candidates with some nice bound on the number of tests. Without any additional assumptions there is not much you can do (exercise: do you see why?) but in this case we expect that the number of infected candidates is quite small.\u00a0Then in fact you can save a lot and this story gave rise to the whole area called <strong>group testing<\/strong>.<\/p>\n<p>Group testing is a rich field and includes a variety of models.\u00a0Let us focus on the following one.\u00a0We are given a universe <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_4c614360da93c0a041b22e537de151eb.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> and we want to find a hidden subset <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_5dbc98dcc983a70728bd082d1a47546e.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>\u00a0of <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_4c614360da93c0a041b22e537de151eb.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>.\u00a0We can aquire information only by asking queries to the intersection oracle, i.e., for a given subset <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_df3f985e4df8d4f8f549eef12111b1a8.gif' style='vertical-align: middle; border: none; padding-bottom:2px;' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>, <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_f8d4f7585e3c8dd2faca6f5695602016.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> answers true if and only if <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_7fc56270e7a70fa81a5935b72eacbe29.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> has a nonempty intersection with <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_5dbc98dcc983a70728bd082d1a47546e.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>.\u00a0Moreover, we can decide which set we query based on previous answers.\u00a0The goal is to use few queries. There are many algorithms for this problem, but I'm going to describe you my favourite one, called the bisecting algorithm.\u00a0It dates back to early seventies and is due to Hwang, one of the fathers of combinatorial group testing.\u00a0As you may expect from the name, it is a generalization of binary search.\u00a0A simple observation is that once <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_f8d4f7585e3c8dd2faca6f5695602016.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> answers false, we can safely discard <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_7fc56270e7a70fa81a5935b72eacbe29.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> and otherwise we know that <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_7fc56270e7a70fa81a5935b72eacbe29.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> contains at least one element of <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_5dbc98dcc983a70728bd082d1a47546e.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>.\u00a0So assume that in the algorithm we use a\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_85858f05dc14049dde567cd959e4ad29.gif' style='vertical-align: middle; border: none; padding-bottom:2px;' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> oracle, implemented just as <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_14306954b886915d2f9ea48c328764c1.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>.\u00a0The algorithm works as in the animation below\u00a0(choose FitPage in the zoom box and keep clicking the arrow down) :<\/p>\n<p><span style=\"color: #444444;\"><\/span><\/p>\n<p>So, basically, we have a partition of a universe (initially equal <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_4c614360da93c0a041b22e537de151eb.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>) with the property that every set in the partition contains at least one element of <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_5dbc98dcc983a70728bd082d1a47546e.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>. We examine sets of the partition one by one. Each set is divided into two halves and we query whether we can discard one of them.\u00a0At some point we query a singleton and then we either discard it or find an element of\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_5dbc98dcc983a70728bd082d1a47546e.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>. I hope it is clear now, but let me paste a pseudocode as well. <a href=\"http:\/\/corner.mimuw.edu.pl\/wp-content\/uploads\/2014\/10\/bisection.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-686 size-full\" src=\"http:\/\/corner.mimuw.edu.pl\/wp-content\/uploads\/2014\/10\/bisection.png\" alt=\"bisection\" width=\"932\" height=\"694\" srcset=\"https:\/\/corner.mimuw.edu.pl\/wp-content\/uploads\/2014\/10\/bisection.png 932w, https:\/\/corner.mimuw.edu.pl\/wp-content\/uploads\/2014\/10\/bisection-300x223.png 300w, https:\/\/corner.mimuw.edu.pl\/wp-content\/uploads\/2014\/10\/bisection-402x300.png 402w\" sizes=\"(max-width: 932px) 100vw, 932px\" \/><\/a> How many queries do we perform? Let <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_c6148e4fbb703d2b9ebaab9131c0d7fd.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> and <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_96310931368a1ba68a50c8f87e5594ec.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>. Call a query positive if the answer is Yes, negative otherwise. For a negative query <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_8e993220485883c524703dd740449a88.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>\u00a0we know that there is <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_2d76fc9bc66c51d7cac73d5c8ddb6309.gif' style='vertical-align: middle; border: none; padding-bottom:2px;' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>. Assign this query to <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_9dd4e461268c8034f5c8564e155c67a6.gif' style='vertical-align: middle; border: none; padding-bottom:2px;' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>. Note that for every <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_1307097ffa871363574771940c303297.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> there are\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_55db972f914bfbd212787407e11ad2e7.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> queried sets assigned to it, because if we consider the\u00a0queries in the order of asking them, every set is roughly \u00a0twice smaller than the previous one. So there are\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_0fa6742ed51c889f2580f09c390fae10.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> negative queries. Every set <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_7fc56270e7a70fa81a5935b72eacbe29.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> from a positive query is a half of a set from a (different!) negative query, so the total number of positive queries is bounded by the total number of negative ones. Hence we have\u00a0\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_0fa6742ed51c889f2580f09c390fae10.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> queries in total. A slightly more careful analysis (see Lemma 2.1 <a href=\"http:\/\/www.mimuw.edu.pl\/~kowalik\/papers\/witness.pdf\" target=\"_blank\">here<\/a>) gives <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_448967a6312ba1ec07d9e456062074c5.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>. Cool, isn't it? Especially given that we hopefully do not expect a large fraction of infected soldiers...<\/p>\n<p>Great, but <strong>is there a connection of all of that\u00a0with<\/strong><strong>\u00a0the FPT algorithms from the title<\/strong>? Yes, there is one. Consider for example the k-PATH problem: given a graph and a number <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_8ce4b16b22b58894aa86c421e8759df3.gif' style='vertical-align: middle; border: none; padding-bottom:1px;' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> we want to <em>find<\/em> a path of length\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_8ce4b16b22b58894aa86c421e8759df3.gif' style='vertical-align: middle; border: none; padding-bottom:1px;' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>. The corresponding decision problem is NP-complete, as a generalization of Hamiltonian Path. However, it turns out that when\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_8ce4b16b22b58894aa86c421e8759df3.gif' style='vertical-align: middle; border: none; padding-bottom:1px;' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> is small, you can solve it pretty fast. Perhaps you know the famous Color Coding algorithm by Alon, Yuster and Zwick which solves it in\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_344b015c3680560ab54f0e4e7de18d0c.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>. However, one can do better: Bj\u00f6rklund, Husfeldt, Kaski and Koivisto presented a\u00a0\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_28994aebe6ce81c38d1bc218ac3d097e.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>-time Monte-Carlo\u00a0<a href=\"http:\/\/arxiv.org\/abs\/1007.1161\" target=\"_blank\">algorithm<\/a>! The only catch is that it <em>only solves the decision problem<\/em>.\u00a0Indeed, it uses the Schwartz-Zippel lemma and when it answers YES, there is no way to trace back the\u00a0path from the computation.<\/p>\n<p>Now, let the universe\u00a0\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_4c614360da93c0a041b22e537de151eb.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> be the edge set of our graph. We want to find one of (possibly many) <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_8ce4b16b22b58894aa86c421e8759df3.gif' style='vertical-align: middle; border: none; padding-bottom:1px;' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>-subsets of <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_4c614360da93c0a041b22e537de151eb.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> corresponding to\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_8ce4b16b22b58894aa86c421e8759df3.gif' style='vertical-align: middle; border: none; padding-bottom:1px;' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>-edge paths in our graph and\u00a0the Bj\u00f6rklund et al's algorithm is an\u00a0<em>inclusion<\/em>\u00a0oracle, which tells you whether a given set of edges contains one of these subsets. So this is not exactly the same problem as before, but sounds pretty similar... Indeed, again we can implement the\u00a0\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_85858f05dc14049dde567cd959e4ad29.gif' style='vertical-align: middle; border: none; padding-bottom:2px;' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> oracle, i.e., <span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_84c4050d5cd9407f0b34a5f31b68a21b.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>. So it seems we\u00a0can use the bisecting algorithm to find a\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_8ce4b16b22b58894aa86c421e8759df3.gif' style='vertical-align: middle; border: none; padding-bottom:1px;' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>-path with only\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_448967a6312ba1ec07d9e456062074c5.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> queries to the decision algorithm!\u00a0Correct?<\/p>\n<p>Well, not exactly. The problem is the oracle is a Monte Carlo algorithm, more precisely it reports false negatives with probability at most, say, 1\/4. Together with Andreas Bj\u00f6rklund and Petteri Kaski we showed that a surprisingly simple patch to the bisecting algortihm works pretty nice in the randomized setting. The patch is as follows. Once the bisecting algorithm finishes in the randomized setting, we have a\u00a0<em>superset<\/em> of a solution. Then, as long as we have more than\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_8ce4b16b22b58894aa86c421e8759df3.gif' style='vertical-align: middle; border: none; padding-bottom:1px;' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> candidate elements, we pick one by one, in a FIFO\u00a0manner, and check whether we can discard this single element. We show that the expected number of queries is\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_0fa6742ed51c889f2580f09c390fae10.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>. (Actually, we conjecture it is optimal, i.e., you have to loose a bit compared to the slightly better \u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_448967a6312ba1ec07d9e456062074c5.gif' style='vertical-align: middle; border: none; ' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script> in the deterministic setting.) As a consequence, we get a pretty fast\u00a0<em>implementation<\/em> of finding\u00a0\u00a0<span class='MathJax_Preview'><img src='https:\/\/corner.mimuw.edu.pl\/wp-content\/plugins\/latex\/cache\/tex_8ce4b16b22b58894aa86c421e8759df3.gif' style='vertical-align: middle; border: none; padding-bottom:1px;' class='tex' alt=\"\" \/><\/span><script type='math\/tex'><\/script>-paths. For example, a (unique) 14-vertex path is found in a 1000-vertex graph well below one minute on a standard PC. Not bad for an NP-complete problem, I would say. Let me add that the Schwartz-Zippel approach is used in a number of FPT algorithms\u00a0and in many cases\u00a0the corresponding search problem can be cast in the inclusion oracle model mentioned above. Examples include k-packing, Steiner cycle, rural postman, graph motif and more.<\/p>\n<p>If you want to learn more, see the <a href=\"http:\/\/www.mimuw.edu.pl\/~kowalik\/papers\/witness.pdf\" target=\"_blank\">paper<\/a>\u00a0or <a href=\"http:\/\/www.mimuw.edu.pl\/~kowalik\/papers\/esa14.pdf\" target=\"_blank\">slides<\/a> from my recent ESA talk!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Long long time ago, ed actually in 1943, US Army was recruiting a lot of soldiers. Each of the recruits had to be subject of some medical examination, and in particular they were tested against syphilis.\u00a0However, performing a single test &hellip; <a href=\"https:\/\/corner.mimuw.edu.pl\/?p=667\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":4,"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\/667"}],"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\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=667"}],"version-history":[{"count":18,"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=\/wp\/v2\/posts\/667\/revisions"}],"predecessor-version":[{"id":691,"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=\/wp\/v2\/posts\/667\/revisions\/691"}],"wp:attachment":[{"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/corner.mimuw.edu.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}