module main;
import std.algorithm;
import std.functional;
import std.range;
import std.stdio;
import std.string;
import std.typecons;
void main(){
invFizzBuzz;
}
auto invFizzBuzz(){
return stdin.byLine.map!(a => a.split)
.map!(ln =>
(a => (a > 6) ? [] : ((b, s) =>
(c =>
(c.popFrontN(b), c)
)
(
recurrence!"a[n-1] + 1"(1)
.map!(c => tuple(c, (!(c % 3) ? "fizz" : "") ~ (!(c % 5) ? "buzz" : "")))
.filter!"a[1].length"
)
.take(s)
.map!"a[0]"
.array
)(a, ln.length)
)
(
iota(0, 7)
.map!(a =>
tuple(
iota(1, 16).map!q{(!(a % 3) ? "fizz" : "") ~ (!(a % 5) ? "buzz" : "")}
.array
.cycle
.zip(recurrence!"a[n-1] + 1"(1))
.filter!"a[0].length",
a
)
)
.map!(a => (a[0].popFrontN(a[1]), a))
.map!(a =>
tuple(
a[0].zip(ln).map!"a[0][0] == a[1]".reduce!"a && b",
a[1],
a[0].front[1],
a[0].take(ln.length).curry!(reduce!"max(a, b[1])", 0)
)
)
.chain([tuple(true, 7, 0, 0)])
.filter!"a[0]"
.reduce!((a, b) => (a[3] - a[2]) <= (b[3] - b[2]) ? a : (b[1] == 7 ? a : b))[1]
)
)
.map!(a => a.empty ? iota(0, 0) : iota(a[0], a[$-1] + 1))
.map!(a => (a.writeln, 0)).reduce!"a + b";
}
bW9kdWxlIG1haW47CgppbXBvcnQgc3RkLmFsZ29yaXRobTsKaW1wb3J0IHN0ZC5mdW5jdGlvbmFsOwppbXBvcnQgc3RkLnJhbmdlOwppbXBvcnQgc3RkLnN0ZGlvOwppbXBvcnQgc3RkLnN0cmluZzsKaW1wb3J0IHN0ZC50eXBlY29uczsKCnZvaWQgbWFpbigpewogICAgaW52Rml6ekJ1eno7Cn0KCmF1dG8gaW52Rml6ekJ1enooKXsKICAgIHJldHVybiBzdGRpbi5ieUxpbmUubWFwIShhID0+IGEuc3BsaXQpCiAgICAubWFwIShsbiA9PiAKICAgICAgICAoYSA9PiAoYSA+IDYpID8gW10gOiAoKGIsIHMpID0+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGMgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYy5wb3BGcm9udE4oYiksIGMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJyZW5jZSEiYVtuLTFdICsgMSIoMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwIShjID0+IHR1cGxlKGMsICghKGMgJSAzKSA/ICJmaXp6IiA6ICIiKSB+ICghKGMgJSA1KSA/ICJidXp6IiA6ICIiKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlciEiYVsxXS5sZW5ndGgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGFrZShzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCEiYVswXSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcnJheQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKShhLCBsbi5sZW5ndGgpCiAgICAgICAgKQogICAgICAgICgKICAgICAgICAgICAgaW90YSgwLCA3KQogICAgICAgICAgICAubWFwIShhID0+IAogICAgICAgICAgICAgICAgdHVwbGUoCiAgICAgICAgICAgICAgICAgICAgaW90YSgxLCAxNikubWFwIXF7KCEoYSAlIDMpID8gImZpenoiIDogIiIpIH4gKCEoYSAlIDUpID8gImJ1enoiIDogIiIpfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmN5Y2xlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC56aXAocmVjdXJyZW5jZSEiYVtuLTFdICsgMSIoMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIhImFbMF0ubGVuZ3RoIiwKICAgICAgICAgICAgICAgICAgICBhCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICAgICAgLm1hcCEoYSA9PiAoYVswXS5wb3BGcm9udE4oYVsxXSksIGEpKQogICAgICAgICAgICAubWFwIShhID0+IAogICAgICAgICAgICAgICAgdHVwbGUoCiAgICAgICAgICAgICAgICAgICAgYVswXS56aXAobG4pLm1hcCEiYVswXVswXSA9PSBhWzFdIi5yZWR1Y2UhImEgJiYgYiIsCiAgICAgICAgICAgICAgICAgICAgYVsxXSwKICAgICAgICAgICAgICAgICAgICBhWzBdLmZyb250WzFdLAogICAgICAgICAgICAgICAgICAgIGFbMF0udGFrZShsbi5sZW5ndGgpLmN1cnJ5IShyZWR1Y2UhIm1heChhLCBiWzFdKSIsIDApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICAgICAgLmNoYWluKFt0dXBsZSh0cnVlLCA3LCAwLCAwKV0pCiAgICAgICAgICAgIC5maWx0ZXIhImFbMF0iCiAgICAgICAgICAgIC5yZWR1Y2UhKChhLCBiKSA9PiAoYVszXSAtIGFbMl0pIDw9IChiWzNdIC0gYlsyXSkgPyBhIDogKGJbMV0gPT0gNyA/IGEgOiBiKSlbMV0KICAgICAgICApCiAgICApCiAgICAubWFwIShhID0+IGEuZW1wdHkgPyBpb3RhKDAsIDApIDogaW90YShhWzBdLCBhWyQtMV0gKyAxKSkKICAgIC5tYXAhKGEgPT4gKGEud3JpdGVsbiwgMCkpLnJlZHVjZSEiYSArIGIiOwp9Cg==