arXiv:1411.7631v2 [] 17 Nov 2015

Approximate Undirected Maximum Flows in
O(mpolylog(n)) Time
Richard Peng
Georgia Tech
rpeng@cc.gatech.edu
November 18, 2015
Abstract
We give the first O(mpolylog(n)) time algorithms for approximating maximum
flows in undirected graphs and constructing polylog(n)-quality cut-approximating
hierarchical tree decompositions. Our algorithm invokes existing algorithms for
these two problems recursively while gradually incorporating size reductions. These
size reductions are in turn obtained via ultra-sparsifiers, which are key tools in
solvers for symmetric diagonally dominant (SDD) linear systems.

1

Introduction

The problem of finding maximum flows and minimum cuts has been studied extensively
in algorithmic graph theory and combinatorial optimization. It led to important tools
in algorithm design such as augmenting paths [FJF56], blocking flows [Din70, EK72],
dynamic trees [GN80, ST83], dual algorithms [GT86], scaling algorithms [GR98], graph
sparsification [BK96], and electrical flows [CKM+ 11, Ma̧d13]. In its simplest form, the
maximum flow problem asks to route the most flow from a source to a sink while obeying
edge capacities. Its dual, the minimum cut problem, asks for the minimum capacity of
edges whose removal disconnects the sink from the source.
Approximating maximum flows in undirected graphs has received much attention recently due to its tighter interactions with randomized and numerical tools [CKM+ 11,
LRS13, She13a, KLOS14]. Algorithms for this variant have applications in graph partitioning [KRV09, OSVV08, She09], image processing [CMMP13], and as we will describe,
the construction of oblivious routing schemes [RST14].
Recently, algorithms that approximate undirected maximum flows in O(m1+o(1) ǫ−2 )
time were given by Sherman [She13a] and Kelner et. al. [KLOS14]. At the core of these
algorithms are congestion-approximators [Ma̧d10a] and oblivious routing schemes respectively [KLOS14]. Congestion-approximators can be viewed as a small set of representative
1

cuts in the graph, and oblivious routing schemes are more powerful in that they preserve
flows as well as cuts. The runtime of these algorithms stems from both the quality of these
approximators as well as the cost of constructing them. A natural question stemming from
them is to further improve this running time.
Oblivious routing schemes are of independent interest in the study of graph partitioning and routing. Schemes with quality polylog(n) were shown to exist by Räcke [Räc02],
and invoking them would lead to a better running time of mpolylog(n) after preprocessing. However, finding these schemes requires solving an intricate sequence of ratio cut
problems [HHR03, BKR03].
The current best algorithms for approximating ratio cuts are based on invoking (approximate) maximum flows [KRV09, OSVV08, She09]. Following the break-through on
approximate maximum flows, Räcke et al. [RST14] gave a more efficient algorithm for constructing oblivious routing schemes. This result can be viewed as producing a polylog(n)quality oblivious routing scheme by computing maximum flows on graphs of total size
O(mpolylog(n)). This leads to a chick-and-egg situation when approximators and maximum flow algorithms are viewed as black boxes: either gives the other via an overhead of
polylog(n), but to get the calls started we need to invoke routines that run in O(m1+o(1) )
time and produce mo(1) -approximations.
In this paper, we complete this cycle of algorithmic invocations by resolving this
chicken-and-egg situation, leading to improved algorithms to all intermediate problems.
The key observation is that the oblivious routing schemes produced by the Räcke et al.
algorithm have fixed size: producing them via recursive calls does not affect the cost of
invoking them, and any error introduced in the recursion will only show up as a slightly
larger overhead on this fixed size. The main steps of our algorithm on a graph G are:
1. Produce a graph H with size m/polylog(n) that can polylog(n)-approximate G.
2. Construct an approximator for H using the Räcke et. al. algorithm, making more
recursive maximum flow calls.
3. Convert this scheme to one for G, and use it to solve approximate maximum flows.
The size reduction allows us to bound the total size of the maximum flow instances
computed recursively by at most m/2, giving a total size bound of O(m). As H polylog(n)approximates G, the approximator for H returned by the recursive calls is still a polylog(n)quality approximator for G. The fact that its size is O(n) then allows us to bound the
overall cost by O(mpolylog(n)).
This recursive scheme allows us to bypass the more expensive approximators used to
initiate this sequence of algorithmic calls. The total cost in turn reduces from O(m1+o(1) )
to O(mpolylog(n)). Furthermore, these size reductions can be directly obtained via ultrasparsifiers from solvers for linear systems in graph Laplacians [ST14]. This results in
a short pseudocode when the pieces are viewed as black-boxes. Our algorithm is also
analogous to iterative schemes for computing row samples of matrices [LMP13]: the
2

congestion-approximator plays a similar role to the small row sample, and the call structure is analogous to what we use here, with ultra-sparsifiers being the size reductions.
We will introduce the algorithmic tools that we invoke in Section 2, and describe
our algorithm in Section 3. For simplicity, we will limit our presentation to the cut
setting and utilize the oblivious routing schemes as congestion-approximators. As the
oblivious routing construction by Räcke et al. [RST14] also produces embeddings, and size
reductions similar to ultra-sparsifiers were used in the flow based algorithm by Kelner et
al., we believe this scheme can be extended to the flow setting as well.
We will also not optimize for the exponent in log n because further runtime improvements based on this approach are likely. However, major obstacles remain in obtaining
running times of m log5 n or faster:
1. Random sampling based ultra-sparsifiers incur an overhead of log2 n in error.
2. Current oblivious routing constructions are based on top-down divide-and-conquer
with log n levels, each making a sequence of log n maximum flow calls through
rebalancings [RST14]. At present these routines also incur several additional log
factors due to error accumulations over levels of recursion.
3. Oblivious routing schemes incur a distortion of at least log n [Räc08].
4. Producing balanced cuts using maximum flows requires log n maximum flow invocation [OSVV08, She09].
5. The invocation of congestion-approximators to produce approximate maximum flows
requires an iteration count that’s at least quadratic in the distortion, as well as incurring another log n factor overhead. [She13a, KLOS14]. 1
Directly combining these estimates leads to a total cost of about m log11 n. An optimistic
view is that the algorithms using congestion-approximators can depend linearly on the
distortion, and reusing maximum flow calls across the construction scheme leads to recursion on graphs with total size m log n. Even in this case, the overall cost is still about
m log5 n. Therefore, we believe obtaining a running time of O(m log3 n) will require significant improvements to both algorithms that construct oblivious routings and iterative
methods that utilize them.

2

Background

Our presentation follows the notations from [She13a] and [KLOS14]. A flow f meets
demands b if for all vertices v, the total amount of flow enter/leaving v is b v . For edge
capacities u, the congestion of f is the maximum of |f e /u e | over all edges. By a standard
1
We cite the lower cost bounds from [KLOS14] here under the belief that these routines have inherent
connections.

3

reduction via binary search (e.g. Sections 2.2 and 3.1 of [CKM+ 11]), we can focus on the
decision version. For a fixed demand, the problem asks to either route it with congestion
at most 1 + ǫ, or certify via a cut that it cannot be routed with congestion less than 1.
A cut is defined by a subset of vertices S: its demand, b(S), is the total demand of
vertices in S, and its capacity, u(S), is the total capacity of edges leaving S. The ratio
between demand and capacity is a lower bound for the minimum congestion, and the
maxflow-mincut theorem states that the minimum congestion needed to route a demand
is in fact equal to the maximum demand/capacity ratio over all cuts S.
The connections between flows, cuts, congestion, and demand brings us to the notion of
(1 + ǫ)-approximate flow/cut solutions, which will be our standard notion of approximate
solutions. For a demand b and an error ǫ, such a pair consists of a flow and cut whose
congestion and demand/capacity value are within a factor of 1 + ǫ of each other.
We will make extensive use of approximations, and denote them using the ≈κ notation.
For two scalar quantities, x and y, we use x ≈κ y to mean that there exist parameters
γmin and γmax ≤ γmin κ such that γminx ≤ y ≤ γmax x.

2.1

Congestion Approximators

We will use an algorithm by Sherman [She13a] on using congestion-approximators to
compute approximate maximum flows.
Definition 2.1 (Definition 1.1. in [She13b]). An α-congestion-approximator of G is a
matrix R such that for any demand vector b,
kRbk∞ ≈α opt(b)
where opt(b) is the minimum congestion required to route the demands b in G.
Theorem 2.2 (Theorem 1.2. from [She13b]). There is a routine ApproximatorMaxFlow that, given demands b and access to an α-congestion-approximator R, makes
O(α2 log2 nǫ−3 ) iterations and returns an (1 + ǫ)-approximate flow/cut solution for these
demands. Each iteration takes O(m) time, plus computing matrix-vector products involving R and RT .
Räcke et. al. [RST14] showed that these congestion approximators can be efficiently
computed using approximate maximum flow routines. This result can be pharaphrased
as:
Theorem 2.3 (main result of [RST14]). There is a routine CongestionApproximator
that takes a graph G, returns with high probability an O(log4 n)-congestion-approximator
R such that matrix-vector products in R and RT can be performed in O(n) time. Furthermore, this approximator is computed via a series of approximate flow/cut solutions
with error 1/Θ(log3 n) on graphs of sizes m1 , . . . mN such that
N
X
i=1

mi ≤ O(m log4 n),
4

plus an additional running time overhead of O(m log6 n).
This summarizes several aspects of the algorithm for constructing oblivious routings
by Räcke et. al. [RST14]: the fact that the oblivious routing scheme produced gives
a congestion-approximator was observed in the second paragraph of the abstract. The
approximation guarantee is from Theorem 4.1. The invocation costs of R and RT also
follow from oblivious routing scheme being a tree.
The error tolerance in the maximum flow calls of 1/Θ(log3 n) is stated in the abstract
and utilized in the rebalancing step of the proof of Lemma 3.1. Overall the algorithm
performs O(log n) levels of partition based recursion, and the total sizes of graphs at each
level is O(m). Each partition step may adjust the partition O(log n) times using the cutmatching game by Khandekar et. al. [KRV09], which in turn needs O(log2 n) approximate
flow/cut solutions. Combining these bounds gives a total size of O(m log4 n). The running
time overhead comes from applying the O(log2 n) matchings produced in the cut-matching
game to a random vector before routing it using approximate maximum flows.

2.2

Ultra-Sparsifiers and Size Reductions

Ultra-sparsifiers are controlled ways of reducing graphs to tree-like structures. As they
involve pairs of graphs on the same vertex set, we will use scripts to denote the graph
in question in our notations. The following construction can be obtained from [KMP14]
and [AN12].
Theorem 2.4. There is a routine Ultra-Sparsify that takes a graph G = (V, EG , u G )
with n vertices and m edges, and any parameter κ > 1, returns in O(m log n log log n) time
a graph H = (V, EH , u H ) on the same set of vertices with n − 1 + O(m log2 n log log n/κ)
edges such that with high probability we have
u G (S) ≈κ u H (S)
for all subsets of vertices S ⊆ V .

Since minimum cut seeks to minimize u(S)/b(S), u G (S) ≈kappa u H (S) for all S
implies optG (b) ≈κ optH (S), and an α-congestion-approximator for H is also a καcongestion-approximator for G. Note that since we only need to preserve cuts, the
Spielman-Teng construction of ultra-sparsifiers [ST14] with spectral sparsifiers replaced
by cut-sparsifiers [BK96] also gives a similar bound.
These edge reductions are complemented by vertex reductions, which also are crucial
in algorithms using ultra-sparsifiers [ST14, Ma̧d10a, KMP14, Pen13, She13a, KLOS14].
Lemma 2.5 (Lemma 5.8 of [Ma̧d10b], paraphrased). When given a graph H with n
vertices and m = n − 1 + m′ edges, we can produce a graph H ′ = Reduce(H) with O(m′ )
edges such that any α-congestion-approximator RH ′ for H ′ can be converted into an O(α)congestion-approximator R H for H. Furthermore, matrix-vector products involving RH
or RTH can be computed by performing a single matrix-vector product in RH ′ or RTH ′
respectively plus an overhead of O(m).
5

Combining these two steps for edge and vertex reductions gives our key size reduction
routines:
Corollary 2.6. There are routines UltraSparsifyAndReduce and Convert so that
when given a graph G with n vertices and m edges, and an approximation factor κ,
UltraSparsifyAndReduce(G, κ) produces G′ such that with high probability.
1. G′ has at most O(m log2 n log log n/κ) edges, and
2. given an α-congestion-approximator R G′ for G′ , RG = Convert(G, G′ , R′ )
(a) is an O(κα)-congestion-approximator for G, and
(b) matrix-vector products involving R G or RTG can each be performed using one
matrix-vector product involving RG′ or R TG′ plus an overhead of O(m).

3

Recursive Algorithm

Our algorithm recursively calls the two routines for utilizing and constructing congestionapproximators, while reducing sizes using UltraSparsifyAndReduce. Its pseudocode
is given in Figure 1

f = RecursiveApproxMaxFlow(G, ǫ, b)
1. Set κ ← C log6 n log log n for some absolute constant C.
2. G′ ← UltraSparsifyAndReduce(G, κ)
3. RG′ ← CongestionApproximator(G′ ), which in turm makes recursive calls to
RecursiveApproxMaxFlow.
4. RG ← Convert(G, G′ , RG′ )
5. Return ApproximatorMaxFlow(G, RG , ǫ) .
Figure 1: Recursive Algorithmm for Approximate Maximum Flow
We will simplify the analysis by bounding the size reductions at each recursive call
and the overall failure probability of any call.
Lemma 3.1. We have |EG′ | ≤ O(|EG |/(C log4 n)) during each recursive call, and with
high probability all the function invocations terminate correctly,

6

Proof. Corollary 2.6 gives that the size of G′ is at most O(m log2 n log log n/κ), and the
bound follows from the choice of κ = C log6 n log log n.
We can then follow the call structure of this algorithm and accumulate failure probabilities. At each step, Theorem 2.3 gives that the total size of the graphs recursed on
is bounded by O(|EG′ | log4 n) = O(|EG |/C). Therefore, a sufficiently large C means the
total number of recursive calls is bounded by O(m) with high probability. Accumulating
the failure probabilities over these steps using the union bound then gives the overall
success probability.
We remark that to bound the failure probability of each recursive call by 1 − nc , the
routines also need to use n̄, the initial vertex count, instead of the size of the current
instance. This is a situation that occur frequently in analyses of recursive invocations of
Monte-Carlo randomized algorithms [ST14, Pen13, CKM+ 14]. We omit the details here
due to the large number of routines used in black-box manners.
For the rest of this proof we will assume that all black-box invocations terminate
correctly.
Lemma 3.2. On input of a graph with size m, with high probability the cost of the final
call to ApproximatorMaxFlow is at most O(m log32 n log2 log nǫ−3 ).
Proof. The guarantees of CongestionApproximator from Theorem 2.3 gives that
RG′ is an O(log4 n)-congestion-approximator for G′ , and matrix-vector products involving RG′ and RG′ cost O(n). Combining this with Corollary 2.6 gives that RG as returned
by Convert on Line 4 of RecursiveApproxMaxFlow is an O(log10 n log log n)congestion-approximator for G, and the cost of matrix-vector products RG and RTG is
O(m). The running time and error guarantees then follow from Theorem 2.2.
Theorem 3.3. With high probability, RecursiveApproxMaxFlow returns an (1 + ǫ)approximate flow/cut solution in time O(m log32 n log2 log n max{log9 n, ǫ−3 }).
Proof. Theorem 2.3 guarantees that the error parameter in all intermediate calls is at
most ǫ = 1/Θ(log3 n). Let the running time of RecursiveApproxMaxFlow on a
graph with m edges and error ǫ be T (m). We will show by induction, or guess-and-check,
that we can choose C to ensure T (m) ≤ Cm log41 n log2 log n.
The base case of m ≤ log10 n̄, where n̄ is the top level vertex count, follows from
invoking existing approximate maximum flow algorithms [CKM+ 11]. For the inductive
case, let the graphs that we recurse on have sizes m1 . . . mN . Theorem 2.3 and Lemma 3.2
give the following recurrence:
T (m) ≤

N
X
i=1

T (mi ) + O(m log6 n)
+O(m log32 n log2 log nǫ−3 )

≤

N
X
i=1

T (mi ) + O(m log41 n log2 log n).
7

Since all graphs that we compute approximate maximum flows on are subgraphs of
G , Lemma 3.1 allows us to invoke the inductive hypothesis, giving
′

T (m) ≤

N
X

Cmi log41 n log2 log n + O(m log41 n log2 log n).

i=1

The total sizes of the graphs that we recurse on can in turn be bounded via Theorem 2.3
and Corollary 2.6.
N
X
i=1

mi ≤ O(log4 n|EG′ |) ≤ O(m log6 n log2 log n/κ).

Choosing C appropriately then allows us to bound this by m/2, giving a total of
T (m) ≤

C
m log41 n log2 log n + O(m log41 n log2 log n).
2

The inductive hypothesis then follows by picking C to be twice the constant of the trailing
term.
This gives the bound of O(m log41 n log2 log n) when ǫ is set to 1/Θ(log3 n). For the
general case of arbitrary ǫ, Lemma 3.2 gives a bound of O(m log32 n log2 log nǫ−3 ). Note
that the first term is still present, since the second to last call is made on a graph of
size m/2 with ǫ = 1/Θ(log3 n). Summing over both terms then gives the overall runtime
bound.
We remark that the ǫ−3 term arises from a similar dependency in the congestionapproximator based flow routine by Sherman [She13a], which is stated in Theorem 2.2.
Invoking this algorithm in Theorem 2.3 also gives an O(mpolylog(n)) time algorithm
for constructing hierarchical tree decomposition based oblivious routing schemes.
Corollary 3.4. Given an undirected graph G, we can construct in O(m log45 n log2 log n)
time a tree that with high probability corresponds to an O(log4 n)-competitive oblivious
routing scheme .

References
[AN12]

Ittai Abraham and Ofer Neiman. Using petal decompositions to build a low
stretch spanning tree. In Proceedings of the 44th symposium on Theory of
Computing, STOC ’12, pages 395–406, 2012.

[BK96]

András A. Benczúr and David R. Karger. Approximating s-t minimum cuts
in Õ(n2 ) time. In Proceedings of the 28th annual ACM symposium on Theory
of computing, STOC ’96, pages 47–55, 1996.
8

[BKR03]

Marcin Bienkowski, Miroslaw Korzeniowski, and Harald Räcke. A practical
algorithm for constructing oblivious routing schemes. In Proceedings of the
15th annual ACM symposium on Parallel algorithms and architectures, SPAA
’03, pages 24–33, 2003.

[CKM+ 11] Paul Christiano, Jonathan A. Kelner, Aleksander Ma̧dry, Daniel A. Spielman,
and Shang-Hua Teng. Electrical flows, Laplacian systems, and faster approximation of maximum flow in undirected graphs. In Proceedings of the 43rd
annual ACM symposium on Theory of computing, STOC ’11, pages 273–282,
2011.
[CKM+ 14] Michael B. Cohen, Rasmus Kyng, Gary L. Miller, Jakub W. Pachocki,
Richard Peng, Anup B. Rao, and Shen Chen Xu. Solving SDD linear systems
in nearly mlog 1/2 n time. In Proceedings of the 46th Annual ACM Symposium
on Theory of Computing, STOC ’14, pages 343–352, 2014.
[CMMP13] Hui Han Chin, Aleksander Ma̧dry, Gary L. Miller, and Richard Peng. Runtime
guarantees for regression problems. In Proceedings of the 4th conference on
Innovations in Theoretical Computer Science, ITCS ’13, pages 269–282, 2013.
[Din70]

Yefim A. Dinitz. Algorithm for Solution of a Problem of Maximum Flow in a
Network with Power Estimation. Soviet Math Doklady, 11:1277–1280, 1970.

[EK72]

Jack Edmonds and Richard M. Karp. Theoretical improvements in algorithmic efficiency for network flow problems. Journal of the ACM, 19(2):248–264,
April 1972.

[FJF56]

Lester R. Ford Jr and Delbert R. Fulkerson. Maximal flow through a network.
Canadian Journal of Mathematics, 8:399–404, 1956.

[GN80]

Zvi Galil and Amnon Naamad. An O(EV log2 V ) algorithm for the maximal
flow problem. Journal of Computer and System Sciences, 21(2):203–217, 1980.

[GR98]

Andrew V. Goldberg and Satish Rao. Beyond the flow decomposition barrier.
Journal of the ACM, 45:783–797, September 1998.

[GT86]

Andrew V. Goldberg and Robert E. Tarjan. A new approach to the maximum
flow problem. In Proceedings of the 18th annual ACM symposium on Theory
of computing, STOC ’86, pages 136–146, 1986.

[HHR03]

Chris Harrelson, Kirsten Hildrum, and Satish Rao. A polynomial-time tree
decomposition to minimize congestion. In Proceedings of the 15th annual ACM
symposium on Parallel algorithms and architectures, SPAA ‘03, pages 34–43,
2003.

9

[KLOS14] Jonathan A. Kelner, Yin Tat Lee, Lorenzo Orecchia, and Aaron Sidford. An
almost-linear-time algorithm for approximate max flow in undirected graphs,
and its multicommodity generalizations. In Proceedings of the 25th Annual
ACM-SIAM Symposium on Discrete Algorithms, SODA ‘14, pages 217–226,
2014.
[KMP14]

Ioannis Koutis, Gary L. Miller, and Richard Peng. Approaching optimality
for solving SDD linear systems. SIAM Journal on Computing, 43(1):337–354,
2014.

[KRV09]

Rohit Khandekar, Satish Rao, and Umesh Vazirani. Graph partitioning using
single commodity flows. Journal of the ACM, 56(4):19, 2009.

[LMP13]

Mu Li, Gary L. Miller, and Richard Peng. Iterative row sampling. In 54th
Annual IEEE Symposium on Foundations of Computer Science, FOCS ‘13,
pages 127–136, 2013.

[LRS13]

Yin Tat Lee, Satish Rao, and Nikhil Srivastava. A new approach to computing
maximum flows using electrical flows. In Proceedings of the 45th annual ACM
symposium on theory of computing, STOC ’13, pages 755–764, 2013.

[Ma̧d10a]

Aleksander Ma̧dry. Fast approximation algorithms for cut-based problems
in undirected graphs. In 51th Annual IEEE Symposium on Foundations of
Computer Science, FOCS ‘10, pages 245–254, 2010.

[Ma̧d10b]

Aleksander Ma̧dry. Fast approximation algorithms for cut-based problems in
undirected graphs. CoRR, abs/1008.1975, 2010.

[Ma̧d13]

Aleksander Ma̧dry. Navigating central path with electrical flows: From flows
to matchings, and back. In 54th Annual IEEE Symposium on Foundations of
Computer Science, FOCS ‘13, pages 253–262, 2013.

[OSVV08] Lorenzo Orecchia, Leonard J. Schulman, Umesh V. Vazirani, and Nisheeth K.
Vishnoi. On partitioning graphs via single commodity flows. In Proceedings of
the 40th annual ACM symposium on Theory of computing, STOC ’08, pages
461–470, 2008.
[Pen13]

Richard Peng. Algorithm Design Using Spectral Graph Theory. PhD thesis,
Carnegie Mellon University, August 2013. CMU CS Tech Report CMU-CS13-121.

[Räc02]

Harald Räcke. Minimizing congestion in general networks. In Proceedings of
the 43rd Symposium on Foundations of Computer Science, FOCS ‘02, pages
43–52, 2002.

10

[Räc08]

Harald Räcke. Optimal hierarchical decompositions for congestion minimization in networks. In Proceedings of the 40th annual ACM symposium on
Theory of computing, STOC ’08, pages 255–264, 2008.

[RST14]

Harald Räcke, Chintan Shah, and Hanjo Täubig. Computing cut-based hierarchical decompositions in almost linear time. In Proceedings of the 25th
Annual ACM-SIAM Symposium on Discrete Algorithms, SODA ‘14, pages
227–238, 2014.
√
Jonah Sherman. Breaking the multicommodity flow barrier for O( logn)approximations to sparsest cut. In 50th Annual IEEE Symposium on Foundations of Computer Science, FOCS ’09, pages 363–372, 2009.

[She09]

[She13a]

Jonah Sherman. Nearly maximum flows in nearly linear time. In 54th Annual
IEEE Symposium on Foundations of Computer Science, FOCS ‘13, pages
263–269, 2013.

[She13b]

Jonah Sherman. Nearly maximum flows in nearly linear time.
abs/1304.2077, 2013.

[ST83]

Daniel D Sleator and Robert Endre Tarjan. A data structure for dynamic
trees. Journal of Computer and System Sciences, 26(3):362–391, 1983.

[ST14]

Daniel A. Spielman and Shang-Hua Teng. Nearly linear time algorithms for
preconditioning and solving symmetric, diagonally dominant linear systems.
SIAM Journal on Matrix Analysis and Applications, 35(3):835–885, 2014.

11

CoRR,

