MPE Home Metamath Proof Explorer < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >  cusgrsize2inds Structured version   Visualization version   GIF version

Theorem cusgrsize2inds 29542
Description: Induction step in cusgrsize 29543. If the size of the complete graph with 𝑛 vertices reduced by one vertex is "(𝑛 − 1) choose 2", the size of the complete graph with 𝑛 vertices is "𝑛 choose 2". (Contributed by Alexander van der Vekens, 11-Jan-2018.) (Revised by AV, 9-Nov-2020.)
Hypotheses
Ref Expression
cusgrsizeindb0.v 𝑉 = (Vtx‘𝐺)
cusgrsizeindb0.e 𝐸 = (Edg‘𝐺)
cusgrsizeinds.f 𝐹 = {𝑒𝐸𝑁𝑒}
Assertion
Ref Expression
cusgrsize2inds (𝑌 ∈ ℕ0 → ((𝐺 ∈ ComplUSGraph ∧ (♯‘𝑉) = 𝑌𝑁𝑉) → ((♯‘𝐹) = ((♯‘(𝑉 ∖ {𝑁}))C2) → (♯‘𝐸) = ((♯‘𝑉)C2))))
Distinct variable groups:   𝑒,𝐸   𝑒,𝐺   𝑒,𝑁   𝑒,𝑉
Allowed substitution hints:   𝐹(𝑒)   𝑌(𝑒)

Proof of Theorem cusgrsize2inds
StepHypRef Expression
1 cusgrsizeindb0.v . . . . 5 𝑉 = (Vtx‘𝐺)
21fvexi 6846 . . . 4 𝑉 ∈ V
3 hashnn0n0nn 14342 . . . . . . . 8 (((𝑉 ∈ V ∧ 𝑌 ∈ ℕ0) ∧ ((♯‘𝑉) = 𝑌𝑁𝑉)) → 𝑌 ∈ ℕ)
43anassrs 467 . . . . . . 7 ((((𝑉 ∈ V ∧ 𝑌 ∈ ℕ0) ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) → 𝑌 ∈ ℕ)
5 simplll 775 . . . . . . . . . . 11 ((((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) ∧ 𝑌 ∈ ℕ) → 𝑉 ∈ V)
6 simplr 769 . . . . . . . . . . 11 ((((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) ∧ 𝑌 ∈ ℕ) → 𝑁𝑉)
7 eleq1 2825 . . . . . . . . . . . . . . 15 (𝑌 = (♯‘𝑉) → (𝑌 ∈ ℕ ↔ (♯‘𝑉) ∈ ℕ))
87eqcoms 2745 . . . . . . . . . . . . . 14 ((♯‘𝑉) = 𝑌 → (𝑌 ∈ ℕ ↔ (♯‘𝑉) ∈ ℕ))
9 nnm1nn0 12467 . . . . . . . . . . . . . 14 ((♯‘𝑉) ∈ ℕ → ((♯‘𝑉) − 1) ∈ ℕ0)
108, 9biimtrdi 253 . . . . . . . . . . . . 13 ((♯‘𝑉) = 𝑌 → (𝑌 ∈ ℕ → ((♯‘𝑉) − 1) ∈ ℕ0))
1110ad2antlr 728 . . . . . . . . . . . 12 (((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) → (𝑌 ∈ ℕ → ((♯‘𝑉) − 1) ∈ ℕ0))
1211imp 406 . . . . . . . . . . 11 ((((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) ∧ 𝑌 ∈ ℕ) → ((♯‘𝑉) − 1) ∈ ℕ0)
13 nncn 12171 . . . . . . . . . . . . . . . 16 ((♯‘𝑉) ∈ ℕ → (♯‘𝑉) ∈ ℂ)
14 1cnd 11128 . . . . . . . . . . . . . . . 16 ((♯‘𝑉) ∈ ℕ → 1 ∈ ℂ)
1513, 14npcand 11498 . . . . . . . . . . . . . . 15 ((♯‘𝑉) ∈ ℕ → (((♯‘𝑉) − 1) + 1) = (♯‘𝑉))
1615eqcomd 2743 . . . . . . . . . . . . . 14 ((♯‘𝑉) ∈ ℕ → (♯‘𝑉) = (((♯‘𝑉) − 1) + 1))
178, 16biimtrdi 253 . . . . . . . . . . . . 13 ((♯‘𝑉) = 𝑌 → (𝑌 ∈ ℕ → (♯‘𝑉) = (((♯‘𝑉) − 1) + 1)))
1817ad2antlr 728 . . . . . . . . . . . 12 (((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) → (𝑌 ∈ ℕ → (♯‘𝑉) = (((♯‘𝑉) − 1) + 1)))
1918imp 406 . . . . . . . . . . 11 ((((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) ∧ 𝑌 ∈ ℕ) → (♯‘𝑉) = (((♯‘𝑉) − 1) + 1))
20 hashdifsnp1 14457 . . . . . . . . . . . 12 ((𝑉 ∈ V ∧ 𝑁𝑉 ∧ ((♯‘𝑉) − 1) ∈ ℕ0) → ((♯‘𝑉) = (((♯‘𝑉) − 1) + 1) → (♯‘(𝑉 ∖ {𝑁})) = ((♯‘𝑉) − 1)))
2120imp 406 . . . . . . . . . . 11 (((𝑉 ∈ V ∧ 𝑁𝑉 ∧ ((♯‘𝑉) − 1) ∈ ℕ0) ∧ (♯‘𝑉) = (((♯‘𝑉) − 1) + 1)) → (♯‘(𝑉 ∖ {𝑁})) = ((♯‘𝑉) − 1))
225, 6, 12, 19, 21syl31anc 1376 . . . . . . . . . 10 ((((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) ∧ 𝑌 ∈ ℕ) → (♯‘(𝑉 ∖ {𝑁})) = ((♯‘𝑉) − 1))
23 oveq1 7365 . . . . . . . . . . . . 13 ((♯‘(𝑉 ∖ {𝑁})) = ((♯‘𝑉) − 1) → ((♯‘(𝑉 ∖ {𝑁}))C2) = (((♯‘𝑉) − 1)C2))
2423eqeq2d 2748 . . . . . . . . . . . 12 ((♯‘(𝑉 ∖ {𝑁})) = ((♯‘𝑉) − 1) → ((♯‘𝐹) = ((♯‘(𝑉 ∖ {𝑁}))C2) ↔ (♯‘𝐹) = (((♯‘𝑉) − 1)C2)))
258ad2antlr 728 . . . . . . . . . . . . . . 15 (((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) → (𝑌 ∈ ℕ ↔ (♯‘𝑉) ∈ ℕ))
26 nnnn0 12433 . . . . . . . . . . . . . . . . . . . 20 ((♯‘𝑉) ∈ ℕ → (♯‘𝑉) ∈ ℕ0)
27 hashclb 14309 . . . . . . . . . . . . . . . . . . . 20 (𝑉 ∈ V → (𝑉 ∈ Fin ↔ (♯‘𝑉) ∈ ℕ0))
2826, 27syl5ibrcom 247 . . . . . . . . . . . . . . . . . . 19 ((♯‘𝑉) ∈ ℕ → (𝑉 ∈ V → 𝑉 ∈ Fin))
29 cusgrsizeindb0.e . . . . . . . . . . . . . . . . . . . . . . 23 𝐸 = (Edg‘𝐺)
30 cusgrsizeinds.f . . . . . . . . . . . . . . . . . . . . . . 23 𝐹 = {𝑒𝐸𝑁𝑒}
311, 29, 30cusgrsizeinds 29541 . . . . . . . . . . . . . . . . . . . . . 22 ((𝐺 ∈ ComplUSGraph ∧ 𝑉 ∈ Fin ∧ 𝑁𝑉) → (♯‘𝐸) = (((♯‘𝑉) − 1) + (♯‘𝐹)))
32 oveq2 7366 . . . . . . . . . . . . . . . . . . . . . . . . . . 27 ((♯‘𝐹) = (((♯‘𝑉) − 1)C2) → (((♯‘𝑉) − 1) + (♯‘𝐹)) = (((♯‘𝑉) − 1) + (((♯‘𝑉) − 1)C2)))
3332eqeq2d 2748 . . . . . . . . . . . . . . . . . . . . . . . . . 26 ((♯‘𝐹) = (((♯‘𝑉) − 1)C2) → ((♯‘𝐸) = (((♯‘𝑉) − 1) + (♯‘𝐹)) ↔ (♯‘𝐸) = (((♯‘𝑉) − 1) + (((♯‘𝑉) − 1)C2))))
3433adantl 481 . . . . . . . . . . . . . . . . . . . . . . . . 25 (((♯‘𝑉) ∈ ℕ ∧ (♯‘𝐹) = (((♯‘𝑉) − 1)C2)) → ((♯‘𝐸) = (((♯‘𝑉) − 1) + (♯‘𝐹)) ↔ (♯‘𝐸) = (((♯‘𝑉) − 1) + (((♯‘𝑉) − 1)C2))))
35 bcn2m1 14275 . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 ((♯‘𝑉) ∈ ℕ → (((♯‘𝑉) − 1) + (((♯‘𝑉) − 1)C2)) = ((♯‘𝑉)C2))
3635eqeq2d 2748 . . . . . . . . . . . . . . . . . . . . . . . . . . 27 ((♯‘𝑉) ∈ ℕ → ((♯‘𝐸) = (((♯‘𝑉) − 1) + (((♯‘𝑉) − 1)C2)) ↔ (♯‘𝐸) = ((♯‘𝑉)C2)))
3736biimpd 229 . . . . . . . . . . . . . . . . . . . . . . . . . 26 ((♯‘𝑉) ∈ ℕ → ((♯‘𝐸) = (((♯‘𝑉) − 1) + (((♯‘𝑉) − 1)C2)) → (♯‘𝐸) = ((♯‘𝑉)C2)))
3837adantr 480 . . . . . . . . . . . . . . . . . . . . . . . . 25 (((♯‘𝑉) ∈ ℕ ∧ (♯‘𝐹) = (((♯‘𝑉) − 1)C2)) → ((♯‘𝐸) = (((♯‘𝑉) − 1) + (((♯‘𝑉) − 1)C2)) → (♯‘𝐸) = ((♯‘𝑉)C2)))
3934, 38sylbid 240 . . . . . . . . . . . . . . . . . . . . . . . 24 (((♯‘𝑉) ∈ ℕ ∧ (♯‘𝐹) = (((♯‘𝑉) − 1)C2)) → ((♯‘𝐸) = (((♯‘𝑉) − 1) + (♯‘𝐹)) → (♯‘𝐸) = ((♯‘𝑉)C2)))
4039ex 412 . . . . . . . . . . . . . . . . . . . . . . 23 ((♯‘𝑉) ∈ ℕ → ((♯‘𝐹) = (((♯‘𝑉) − 1)C2) → ((♯‘𝐸) = (((♯‘𝑉) − 1) + (♯‘𝐹)) → (♯‘𝐸) = ((♯‘𝑉)C2))))
4140com3r 87 . . . . . . . . . . . . . . . . . . . . . 22 ((♯‘𝐸) = (((♯‘𝑉) − 1) + (♯‘𝐹)) → ((♯‘𝑉) ∈ ℕ → ((♯‘𝐹) = (((♯‘𝑉) − 1)C2) → (♯‘𝐸) = ((♯‘𝑉)C2))))
4231, 41syl 17 . . . . . . . . . . . . . . . . . . . . 21 ((𝐺 ∈ ComplUSGraph ∧ 𝑉 ∈ Fin ∧ 𝑁𝑉) → ((♯‘𝑉) ∈ ℕ → ((♯‘𝐹) = (((♯‘𝑉) − 1)C2) → (♯‘𝐸) = ((♯‘𝑉)C2))))
43423exp 1120 . . . . . . . . . . . . . . . . . . . 20 (𝐺 ∈ ComplUSGraph → (𝑉 ∈ Fin → (𝑁𝑉 → ((♯‘𝑉) ∈ ℕ → ((♯‘𝐹) = (((♯‘𝑉) − 1)C2) → (♯‘𝐸) = ((♯‘𝑉)C2))))))
4443com14 96 . . . . . . . . . . . . . . . . . . 19 ((♯‘𝑉) ∈ ℕ → (𝑉 ∈ Fin → (𝑁𝑉 → (𝐺 ∈ ComplUSGraph → ((♯‘𝐹) = (((♯‘𝑉) − 1)C2) → (♯‘𝐸) = ((♯‘𝑉)C2))))))
4528, 44syldc 48 . . . . . . . . . . . . . . . . . 18 (𝑉 ∈ V → ((♯‘𝑉) ∈ ℕ → (𝑁𝑉 → (𝐺 ∈ ComplUSGraph → ((♯‘𝐹) = (((♯‘𝑉) − 1)C2) → (♯‘𝐸) = ((♯‘𝑉)C2))))))
4645com23 86 . . . . . . . . . . . . . . . . 17 (𝑉 ∈ V → (𝑁𝑉 → ((♯‘𝑉) ∈ ℕ → (𝐺 ∈ ComplUSGraph → ((♯‘𝐹) = (((♯‘𝑉) − 1)C2) → (♯‘𝐸) = ((♯‘𝑉)C2))))))
4746adantr 480 . . . . . . . . . . . . . . . 16 ((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) → (𝑁𝑉 → ((♯‘𝑉) ∈ ℕ → (𝐺 ∈ ComplUSGraph → ((♯‘𝐹) = (((♯‘𝑉) − 1)C2) → (♯‘𝐸) = ((♯‘𝑉)C2))))))
4847imp 406 . . . . . . . . . . . . . . 15 (((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) → ((♯‘𝑉) ∈ ℕ → (𝐺 ∈ ComplUSGraph → ((♯‘𝐹) = (((♯‘𝑉) − 1)C2) → (♯‘𝐸) = ((♯‘𝑉)C2)))))
4925, 48sylbid 240 . . . . . . . . . . . . . 14 (((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) → (𝑌 ∈ ℕ → (𝐺 ∈ ComplUSGraph → ((♯‘𝐹) = (((♯‘𝑉) − 1)C2) → (♯‘𝐸) = ((♯‘𝑉)C2)))))
5049imp 406 . . . . . . . . . . . . 13 ((((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) ∧ 𝑌 ∈ ℕ) → (𝐺 ∈ ComplUSGraph → ((♯‘𝐹) = (((♯‘𝑉) − 1)C2) → (♯‘𝐸) = ((♯‘𝑉)C2))))
5150com13 88 . . . . . . . . . . . 12 ((♯‘𝐹) = (((♯‘𝑉) − 1)C2) → (𝐺 ∈ ComplUSGraph → ((((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) ∧ 𝑌 ∈ ℕ) → (♯‘𝐸) = ((♯‘𝑉)C2))))
5224, 51biimtrdi 253 . . . . . . . . . . 11 ((♯‘(𝑉 ∖ {𝑁})) = ((♯‘𝑉) − 1) → ((♯‘𝐹) = ((♯‘(𝑉 ∖ {𝑁}))C2) → (𝐺 ∈ ComplUSGraph → ((((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) ∧ 𝑌 ∈ ℕ) → (♯‘𝐸) = ((♯‘𝑉)C2)))))
5352com24 95 . . . . . . . . . 10 ((♯‘(𝑉 ∖ {𝑁})) = ((♯‘𝑉) − 1) → ((((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) ∧ 𝑌 ∈ ℕ) → (𝐺 ∈ ComplUSGraph → ((♯‘𝐹) = ((♯‘(𝑉 ∖ {𝑁}))C2) → (♯‘𝐸) = ((♯‘𝑉)C2)))))
5422, 53mpcom 38 . . . . . . . . 9 ((((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) ∧ 𝑌 ∈ ℕ) → (𝐺 ∈ ComplUSGraph → ((♯‘𝐹) = ((♯‘(𝑉 ∖ {𝑁}))C2) → (♯‘𝐸) = ((♯‘𝑉)C2))))
5554ex 412 . . . . . . . 8 (((𝑉 ∈ V ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) → (𝑌 ∈ ℕ → (𝐺 ∈ ComplUSGraph → ((♯‘𝐹) = ((♯‘(𝑉 ∖ {𝑁}))C2) → (♯‘𝐸) = ((♯‘𝑉)C2)))))
5655adantllr 720 . . . . . . 7 ((((𝑉 ∈ V ∧ 𝑌 ∈ ℕ0) ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) → (𝑌 ∈ ℕ → (𝐺 ∈ ComplUSGraph → ((♯‘𝐹) = ((♯‘(𝑉 ∖ {𝑁}))C2) → (♯‘𝐸) = ((♯‘𝑉)C2)))))
574, 56mpd 15 . . . . . 6 ((((𝑉 ∈ V ∧ 𝑌 ∈ ℕ0) ∧ (♯‘𝑉) = 𝑌) ∧ 𝑁𝑉) → (𝐺 ∈ ComplUSGraph → ((♯‘𝐹) = ((♯‘(𝑉 ∖ {𝑁}))C2) → (♯‘𝐸) = ((♯‘𝑉)C2))))
5857exp41 434 . . . . 5 (𝑉 ∈ V → (𝑌 ∈ ℕ0 → ((♯‘𝑉) = 𝑌 → (𝑁𝑉 → (𝐺 ∈ ComplUSGraph → ((♯‘𝐹) = ((♯‘(𝑉 ∖ {𝑁}))C2) → (♯‘𝐸) = ((♯‘𝑉)C2)))))))
5958com25 99 . . . 4 (𝑉 ∈ V → (𝐺 ∈ ComplUSGraph → ((♯‘𝑉) = 𝑌 → (𝑁𝑉 → (𝑌 ∈ ℕ0 → ((♯‘𝐹) = ((♯‘(𝑉 ∖ {𝑁}))C2) → (♯‘𝐸) = ((♯‘𝑉)C2)))))))
602, 59ax-mp 5 . . 3 (𝐺 ∈ ComplUSGraph → ((♯‘𝑉) = 𝑌 → (𝑁𝑉 → (𝑌 ∈ ℕ0 → ((♯‘𝐹) = ((♯‘(𝑉 ∖ {𝑁}))C2) → (♯‘𝐸) = ((♯‘𝑉)C2))))))
61603imp 1111 . 2 ((𝐺 ∈ ComplUSGraph ∧ (♯‘𝑉) = 𝑌𝑁𝑉) → (𝑌 ∈ ℕ0 → ((♯‘𝐹) = ((♯‘(𝑉 ∖ {𝑁}))C2) → (♯‘𝐸) = ((♯‘𝑉)C2))))
6261com12 32 1 (𝑌 ∈ ℕ0 → ((𝐺 ∈ ComplUSGraph ∧ (♯‘𝑉) = 𝑌𝑁𝑉) → ((♯‘𝐹) = ((♯‘(𝑉 ∖ {𝑁}))C2) → (♯‘𝐸) = ((♯‘𝑉)C2))))
Colors of variables: wff setvar class
Syntax hints:  wi 4  wb 206  wa 395  w3a 1087   = wceq 1542  wcel 2114  wnel 3037  {crab 3390  Vcvv 3430  cdif 3887  {csn 4568  cfv 6490  (class class class)co 7358  Fincfn 8884  1c1 11028   + caddc 11030  cmin 11366  cn 12163  2c2 12225  0cn0 12426  Ccbc 14253  chash 14281  Vtxcvtx 29084  Edgcedg 29135  ComplUSGraphccusgr 29498
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1797  ax-4 1811  ax-5 1912  ax-6 1969  ax-7 2010  ax-8 2116  ax-9 2124  ax-10 2147  ax-11 2163  ax-12 2185  ax-ext 2709  ax-rep 5212  ax-sep 5231  ax-nul 5241  ax-pow 5300  ax-pr 5368  ax-un 7680  ax-cnex 11083  ax-resscn 11084  ax-1cn 11085  ax-icn 11086  ax-addcl 11087  ax-addrcl 11088  ax-mulcl 11089  ax-mulrcl 11090  ax-mulcom 11091  ax-addass 11092  ax-mulass 11093  ax-distr 11094  ax-i2m1 11095  ax-1ne0 11096  ax-1rid 11097  ax-rnegex 11098  ax-rrecex 11099  ax-cnre 11100  ax-pre-lttri 11101  ax-pre-lttrn 11102  ax-pre-ltadd 11103  ax-pre-mulgt0 11104
This theorem depends on definitions:  df-bi 207  df-an 396  df-or 849  df-3or 1088  df-3an 1089  df-tru 1545  df-fal 1555  df-ex 1782  df-nf 1786  df-sb 2069  df-mo 2540  df-eu 2570  df-clab 2716  df-cleq 2729  df-clel 2812  df-nfc 2886  df-ne 2934  df-nel 3038  df-ral 3053  df-rex 3063  df-rmo 3343  df-reu 3344  df-rab 3391  df-v 3432  df-sbc 3730  df-csb 3839  df-dif 3893  df-un 3895  df-in 3897  df-ss 3907  df-pss 3910  df-nul 4275  df-if 4468  df-pw 4544  df-sn 4569  df-pr 4571  df-op 4575  df-uni 4852  df-int 4891  df-iun 4936  df-br 5087  df-opab 5149  df-mpt 5168  df-tr 5194  df-id 5517  df-eprel 5522  df-po 5530  df-so 5531  df-fr 5575  df-we 5577  df-xp 5628  df-rel 5629  df-cnv 5630  df-co 5631  df-dm 5632  df-rn 5633  df-res 5634  df-ima 5635  df-pred 6257  df-ord 6318  df-on 6319  df-lim 6320  df-suc 6321  df-iota 6446  df-fun 6492  df-fn 6493  df-f 6494  df-f1 6495  df-fo 6496  df-f1o 6497  df-fv 6498  df-riota 7315  df-ov 7361  df-oprab 7362  df-mpo 7363  df-om 7809  df-1st 7933  df-2nd 7934  df-frecs 8222  df-wrecs 8253  df-recs 8302  df-rdg 8340  df-1o 8396  df-2o 8397  df-oadd 8400  df-er 8634  df-en 8885  df-dom 8886  df-sdom 8887  df-fin 8888  df-dju 9814  df-card 9852  df-pnf 11170  df-mnf 11171  df-xr 11172  df-ltxr 11173  df-le 11174  df-sub 11368  df-neg 11369  df-div 11797  df-nn 12164  df-2 12233  df-n0 12427  df-xnn0 12500  df-z 12514  df-uz 12778  df-rp 12932  df-fz 13451  df-seq 13953  df-fac 14225  df-bc 14254  df-hash 14282  df-vtx 29086  df-iedg 29087  df-edg 29136  df-uhgr 29146  df-upgr 29170  df-umgr 29171  df-uspgr 29238  df-usgr 29239  df-fusgr 29405  df-nbgr 29421  df-uvtx 29474  df-cplgr 29499  df-cusgr 29500
This theorem is referenced by:  cusgrsize  29543
  Copyright terms: Public domain W3C validator