[Question]
  [
## Introduction:
When we think about Ladybugs, we usually think of a red or dark orange bug with black spots. Although this isn't necessary true, since there are also [black with red/orange spotted ladybugs](https://kids.nationalgeographic.com/content/dam/kids/photos/animals/Bugs/H-P/ladybug-on-leaf.ngsversion.1412637651930.jpg), or [ladybugs without spots at all](http://cdn-3.ladybug-life-cycle.com/graphics/Ladybug_red.jpg), we mainly picture ladybugs something like this Asian Ladybug:
[![enter image description here](https://i.stack.imgur.com/kChGNm.jpg)](https://i.stack.imgur.com/kChGNm.jpg)
Another thing to note is that the spots on the ladybugs are almost always symmetric. And that is where this challenge comes in.
## Challenge:
Given an integer `n` (`>= 0`), output the following ASCII-art ladybug one or multiple times, with symmetric spots evenly divided between the two sides, as well as the two or more ladybugs.
Here is the default ladybug layout:
```
    _V_ 
  /(@I@)\
 /   |   \
|    |    |
 \   |   /
  ''-!-''
```
If `n=0`, we output the ladybug above as is.
When `n` is larger than zero, we either fill in the spaces of the ASCII-art bug with a lowercase `o`, or replace the `|` in the center with a capital `O`. The goal is to make `n` changes to the 'empty' ladybug(s), while still producing a symmetric output (per ladybug), and outputting as few ladybugs as possible.
So valid outputs for `n=1` are:
```
    _V_ 
  /(@I@)\
 /   O   \
|    |    |
 \   |   /
  ''-!-''
    _V_ 
  /(@I@)\
 /   |   \
|    O    |
 \   |   /
  ''-!-''
    _V_ 
  /(@I@)\
 /   |   \
|    |    |
 \   O   /
  ''-!-''
```
But this would be invalid:
```
    _V_ 
  /(@I@)\
 /   |   \
| o  |    |
 \   |   /
  ''-!-''
```
Valid outputs for `n=2` are:
```
    _V_ 
  /(@I@)\
 /   O   \
|    O    |
 \   |   /
  ''-!-''
    _V_ 
  /(@I@)\
 /   O   \
|    |    |
 \   O   /
  ''-!-''
    _V_ 
  /(@I@)\
 /  o|o  \
|    |    |
 \   |   /
  ''-!-''
    _V_ 
  /(@I@)\
 /   |   \
| o  |  o |
 \   |   /
  ''-!-''
etc. There are a lot of possible outputs.
```
The first `n` that isn't possible to fit into a single ladybug anymore is `n=24`. In which case you'll have to divide it as evenly as possible into two ladybugs (you can choose whether to output them next to each other, or under one another - with optionally one space or one new-line in between them). For example:
```
    _V_        _V_ 
  /(@I@)\    /(@I@)\
 /o o|o o\  /o o|o o\
|o o | o o||o o | o o|
 \o o|o o/  \o o|o o/
  ''-!-''    ''-!-''
```
OR:
```
    _V_ 
  /(@I@)\
 /ooo|ooo\
|    |    |
 \ooo|ooo/
  ''-!-''
    _V_ 
  /(@I@)\
 /ooo|ooo\
|    |    |
 \ooo|ooo/
  ''-!-''
```
## Challenge rules:
* `n` will be in the range of `0-1000`.
* You can choose to output to STDOUT, return as String or 2D-char array/list, etc. Your call.
* Leading new-lines or unnecessary whitespaces aren't allowed. Trailing white-spaces and a single trailing new-line are allowed.
* As mentioned above, when two or more ladybugs are necessary, you can choose whether to output them next to each other or below each other (or a mix of both..)
* When two or more ladybugs are printed next to each other, a single optional space in between is allowed. When two or more ladybugs are printed down one another, a single optional new-line in between is allowed.
* You can choose the layout of the ladybugs at any step during the sequence, as long as they are symmetric and equal to input `n`.
* Since the goal is to have `n` changes AND as few ladybugs as possible, you will start using more than one ladybug when above `n=23`. The layout of these ladybugs doesn't necessary have to be the same. In fact, this isn't even possible for some inputs, like `n=25` or `n=50` to name two.
* In addition, sometimes it isn't possible to evenly split the dots among two or more ladybugs. In that case you'll have to split them as evenly as possible, with at most a difference of 1 between them.
So for `n=50`, keeping the last two rules in mind, this would be a valid possible output (where the first bug has 16 spots, and the other two have 17):
```
    _V_        _V_        _V_ 
  /(@I@)\    /(@I@)\    /(@I@)\
 /oooOooo\  /   O   \  /o oOo o\
|ooooOoooo||ooooOoooo||o ooOoo o|
 \   |   /  \oooOooo/  \o oOo o/
  ''-!-''    ''-!-''    ''-!-''
```
## General rules:
* This is [code-golf](/questions/tagged/code-golf "show questions tagged 'code-golf'"), so shortest answer in bytes wins.  
Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.
* [Standard rules apply](https://codegolf.meta.stackexchange.com/questions/2419/default-for-code-golf-program-function-or-snippet/2422#2422) for your answer, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs. Your call.
* [Default Loopholes](https://codegolf.meta.stackexchange.com/questions/1061/loopholes-that-are-forbidden-by-default) are forbidden.
* If possible, please add a link with a test for your code.
* Also, please add an explanation if necessary.
  
[Answer]
# [Python 2](https://docs.python.org/2/), ~~252~~ ~~249~~ ~~238~~ ~~212~~ ~~211~~ ~~213~~ 209 bytes
```
n=input()
x=(n+22)/23or 1
for i in range(x):b=n/x+(n%x>i);c=r"""    _V_
  /(@I@)\
 /361%s163\
|408717804|
 \5201025/
  ''-!-''"""%'|O'[b%2];i=0;exec"c=c.replace(`i%9`,' |oO'[i>9::2][i<b/2],2);i+=1;"*11;print c
```
[Try it online!](https://tio.run/##DYy9bsMgGAB3noIiIaBOivns/JkSZe2UrUtsJTEiKVKFLepKVPK7u9xw0@nGv@lrCLAswfgw/k5coGR4KACEhGqIWKFHtsc@4HgPT8eTaHoTZCp4oOnohbYmEkJw5vp5RRhLfvo4iRZhWW0V/VHbqkVzXe53arcv6xnhdgOlKmEjc8zY@mXNWB5QNp/ZpafQaW9K7ZKzxBr7Ft34fbeO3zw93FYMz0PO/PHQNNBd/HsvoVuB0L4wSpNXpfQYfZiwXRao/wE "Python 2 – Try It Online")
* Saved 9 bytes thanks to Kevin Cruijssen
* Saved 18 bytes thanks to Mr. Xcoder
* Saved 2 bytes thanks to Jonathan Frech
[Answer]
# JavaScript (ES6), ~~183~~ 186 bytes
Uses the same formula as [TFeld's answer](https://codegolf.stackexchange.com/a/146896/58563) to split the spots among the ladybugs.
```
n=>(g=k=>k--?`    _V_
  /(@I@)\\
 /3\\
|4|
 \\3/
  ''-!-''
`.replace(/\d/g,i=>(h=s=>i--?h((p=N?(N-=2,'o'):' ')+s+p):s)('|O'[N>2*i|N&1&&+!!N--]),N=(n%j>k)+n/j|0)+g(k):'')(j=n/23+.99|0||1)
```
### Demo
```
let f =
n=>(g=k=>k--?`    _V_
  /(@I@)\\
 /3\\
|4|
 \\3/
  ''-!-''
`.replace(/\d/g,i=>(h=s=>i--?h((p=N?(N-=2,'o'):' ')+s+p):s)('|O'[N>2*i|N&1&&+!!N--]),N=(n%j>k)+n/j|0)+g(k):'')(j=n/23+.99|0||1)
console.log(f(0))
console.log(f(1))
console.log(f(9))
console.log(f(25))
```
[Answer]
# Befunge, ~~292~~ 279 bytes
```
#j07-00p&>::1-27*9+/\!!*:1+06pv-1_@#:<<g61$<<:
v"h"**95%2:+`g61%g60\/g60::p61<>-0g*+35*-,:!|
>\-30p2/:55+`:59**"g"\-40p-26pv^*84\!`"."::<<9
v\%+55+g62:%+55+4*g62:::-1<+55<>:"/n"$#->#<^#<
>`26g!+"O"*"Y"\-\-\5+0p:>#^_" 66<0<66// >,-"v
"n //>7OXO8k />'&%$%&'k !(*+)#)+*(! /k,-.$."<v
```
[Try it online!](http://befunge.tryitonline.net/#code=I2owNy0wMHAmPjo6MS0yNyo5Ky9cISEqOjErMDZwdi0xX0AjOjw8ZzYxJDw8Ogp2ImgiKio5NSUyOitgZzYxJWc2MFwvZzYwOjpwNjE8Pi0wZyorMzUqLSw6IXwKPlwtMzBwMi86NTUrYDo1OSoqImciXC00MHAtMjZwdl4qODRcIWAiLiI6Ojw8OQp2XCUrNTUrZzYyOiUrNTUrNCpnNjI6OjotMTwrNTU8PjoiL24iJCMtPiM8XiM8Cj5gMjZnISsiTyIqIlkiXC1cLVw1KzBwOj4jXl8iIDY2PDA8NjYvLyA+LC0idgoibiAvLz43T1hPOGsgLz4nJiUkJSYnayAhKCorKSMpKyooISAvaywtLiQuIjx2&input=OQ)
**Explanation**
The ASCII art for the ladybug is encoded in a single Befunge string, offset by 15, to allow the first 15 printable characters to be reserved for special purposes. The first two of these special characters represent the newline and the `|` character, both of which would otherwise not be printable. The third isn't used, because it's a `"`, which can't be used in a string. The next two represent the large spots in the centre. And the remaining ten are for the spots on the wings.
These special characters are translated into their final form via a lookup table, which is written over the first part of the first line.
To make it easier to explain, this is the code with the various component parts highlighted:
![Source code with execution paths highlighted](https://i.stack.imgur.com/rLld7.png)
![*](https://i.stack.imgur.com/jmV4j.png) We start by initialising the newline and `|` character in the lookup table, since these are constant.  
![*](https://i.stack.imgur.com/z4eIY.png) Next we read in the number of spots from stdin and calculate the number of ladybugs required.  
[Answer]
# [Charcoal](https://github.com/somebody1234/Charcoal), ~~84~~ 81 bytes
```
Ｎθ≔⌈∕∨θ¹¦²³ηＦη«≔⁺÷θη‹ι﹪θηζV_¶I@)↘²↙|/←''-↑!↑⎇›ζ²¹OO²§|OζＥ037×o⌊⟦⁻÷ζ²Ｉκ⁺³⁼κ3⟧↙»‖Ｂ←
```
[Try it online!](https://tio.run/##XZBNTwIxEIbP8CtqL0yTJX7sgSgXEYzZhBVC0Isas0KXbei20A8UxN@@ToUE5NJMnnln3r4zKTIz0ZmsqkQtvHv05Qc3sGTtesdaMVPQ5UIKNYOeWIkphwE2I3LJInIVM3wLVObaECgY@a7X9kND6S0kyu2HlkEXkT63FkREUj31Uu9o2LHBHbWhEcoBfX5/Vcktowd009OfaiRmhUPPE9znOVK6PT/W72Gj0TymTwtkZ6dkzI3KzBoeDM8cBt@gRwhHBwMa7A7yjkvUlH8B3YbO5qiTZgugF3EL8ViU3ALVWKZCidKX8ILFv2MEC3ToZtbBPMT/O1Yckfulz6SFObrHlLE3vE0wSfWKH9Ii@amPeC75xN15h3/O5XqXmbWr6rpVNVfyFw "Charcoal – Try It Online") Link is to verbose version of code. Explanation:
```
Ｎθ
```
Input the total number of spots.
```
≔⌈∕∨θ¹¦²³η
```
Calculate the number of ladybirds needed.
```
Ｆη«
```
Loop over each ladybird.
```
≔⁺÷θη‹ι﹪θηζ
```
Calculate the number of spots to put on this ladybird.
```
V_¶I@)↘²↙|/←''-↑!
```
Print the head and right wing of the ladybird.
```
↑⎇›ζ²¹OO²
```
If there are more than 21 spots, print two spots, otherwise print the back.
```
§|Oζ
```
If the number of spots is odd print another spot otherwise print the rest of the back.
```
Ｅ037×o⌊⟦⁻÷ζ²Ｉκ⁺³⁼κ3⟧
```
Divide the number of spots by two, and distribute them among three rows of 3, 4, and 3 spots.
```
↙»
```
Move to the start of the next ladybird.
```
‖Ｂ←
```
Reflect the canvas to the left, keeping the back.
[Answer]
# [Ruby](https://www.ruby-lang.org/), ~~203~~ ~~193~~ 190 bytes
```
f=->n{s=%q{    _V_ 
  /(@I@)\
 /137x731\
|0596x6950|
 \248x842/
  ''-!-''
}
n-=d=n>0?n/(1+~-n/23):0
s.gsub!(/\d/){$&.to_i<d/2??o:' '}
x=[d%2,d<=>21]*2
s.gsub!(?x){"|O|"[x.pop]}
n>0?s+f[n]:s}
```
[Try it online!](https://tio.run/##PY3LboMwEEX3/gpDmxqagB88kqAYsu2qUhfdAEKNLKouamgcJFdAf51aoDCrOVd3zly7y@801dxLZa/45qeHZqr3CgIIsXN@ObsFgJgGe70PaAEGEh1jHR8jMgBYsPCgDyHDpouQZ3kIgRFIjwsuU5JJ7NDtnycxC9yEAOV/qu5iObgQ2O0fn/xbU32dBGZZ1iQIohFonosN24kTTxktn9l6kmm3t4fXwc613zZtaZ4Yv9rWuSwTNU5td1PQJom9q3NSggXpjPSObEa2YrBwsAbhEoT3IFp80Sp8@5Ci@bbgQ6/51ewOpbE7ziVdTv8 "Ruby – Try It Online")
* Saved 10 bytes thanks to Jordan
]