  We study two fundamental problems related to finding subgraphs: (1) given
graphs G and H, Subgraph Test asks if H is isomorphic to a subgraph of G, (2)
given graphs G, H, and an integer t, Packing asks if G contains t
vertex-disjoint subgraphs isomorphic to H. For every graph class F, let
F-Subgraph Test and F-Packing be the special cases of the two problems where H
is restricted to be in F. Our goal is to study which classes F make the two
problems tractable in one of the following senses:
  * (randomized) polynomial-time solvable,
  * admits a polynomial (many-one) kernel, or
  * admits a polynomial Turing kernel (that is, has an adaptive polynomial-time
procedure that reduces the problem to a polynomial number of instances, each of
which has size bounded polynomially by the size of the solution).
  We identify a simple combinatorial property such that if a hereditary class F
has this property, then F-Packing admits a polynomial kernel, and has no
polynomial (many-one) kernel otherwise, unless the polynomial hierarchy
collapses. Furthermore, if F does not have this property, then F-Packing is
either WK[1]-hard, W[1]-hard, or Long Path-hard, giving evidence that it does
not admit polynomial Turing kernels either.
  For F-Subgraph Test, we show that if every graph of a hereditary class F
satisfies the property that it is possible to delete a bounded number of
vertices such that every remaining component has size at most two, then
F-Subgraph Test is solvable in randomized polynomial time and it is NP-hard
otherwise. We introduce a combinatorial property called (a,b,c,d)-splittability
and show that if every graph in a hereditary class F has this property, then
F-Subgraph Test admits a polynomial Turing kernel and it is WK[1]-hard,
W[1]-hard, or Long Path-hard, otherwise.
