using System.Numerics;
using static IO;
public class IO
{
public static IO Cin = new();
public static StreamReader reader = new(Console.OpenStandardInput());
public static StreamWriter writer = new(Console.OpenStandardOutput());
public static implicit operator string(IO _) => reader.ReadLine();
public static implicit operator char[](IO _) => reader.ReadLine().ToArray();
public static implicit operator int(IO _) => int.Parse(reader.ReadLine());
public static implicit operator double(IO _) => double.Parse(reader.ReadLine());
public static implicit operator string[](IO _) => reader.ReadLine().Split();
public static implicit operator int[](IO _) => Array.ConvertAll(reader.ReadLine().Split(), int.Parse);
public void Deconstruct(out int a, out int b) { int[] r = Cin; (a, b) = (r[0], r[1]); }
public void Deconstruct(out int a, out int b, out int c) { int[] r = Cin; (a, b, c) = (r[0], r[1], r[2]); }
public static void Loop(int end, Action<int> action, int start = 0, in int add = 1) { for (; start < end; start += add) action(start); }
public static object? Cout { set { writer.Write(value); } }
public static object? Coutln { set { writer.WriteLine(value); } }
public static void Main() { Program.Coding(); writer.Flush(); }
}
class Program
{
public static void Coding()
{
checked {
List<BigInteger> fibo = new(capacity: 10_001) { 0,1 };
for (int i = 2; i < fibo.Capacity; i++)
{
fibo.Add(fibo[^1] + fibo[^2]);
}
Loop(1 + Cin, tc =>
{
(int p, int q) = Cin;
Coutln = $"Case #{tc}: {fibo[p] % q}";
}, 1);
}
}
}
dXNpbmcgU3lzdGVtLk51bWVyaWNzOwp1c2luZyBzdGF0aWMgSU87CnB1YmxpYyBjbGFzcyBJTwp7CnB1YmxpYyBzdGF0aWMgSU8gQ2luID0gbmV3KCk7CnB1YmxpYyBzdGF0aWMgU3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyhDb25zb2xlLk9wZW5TdGFuZGFyZElucHV0KCkpOwpwdWJsaWMgc3RhdGljIFN0cmVhbVdyaXRlciB3cml0ZXIgPSBuZXcoQ29uc29sZS5PcGVuU3RhbmRhcmRPdXRwdXQoKSk7CnB1YmxpYyBzdGF0aWMgaW1wbGljaXQgb3BlcmF0b3Igc3RyaW5nKElPIF8pID0+IHJlYWRlci5SZWFkTGluZSgpOwpwdWJsaWMgc3RhdGljIGltcGxpY2l0IG9wZXJhdG9yIGNoYXJbXShJTyBfKSA9PiByZWFkZXIuUmVhZExpbmUoKS5Ub0FycmF5KCk7CnB1YmxpYyBzdGF0aWMgaW1wbGljaXQgb3BlcmF0b3IgaW50KElPIF8pID0+IGludC5QYXJzZShyZWFkZXIuUmVhZExpbmUoKSk7CnB1YmxpYyBzdGF0aWMgaW1wbGljaXQgb3BlcmF0b3IgZG91YmxlKElPIF8pID0+IGRvdWJsZS5QYXJzZShyZWFkZXIuUmVhZExpbmUoKSk7CnB1YmxpYyBzdGF0aWMgaW1wbGljaXQgb3BlcmF0b3Igc3RyaW5nW10oSU8gXykgPT4gcmVhZGVyLlJlYWRMaW5lKCkuU3BsaXQoKTsKcHVibGljIHN0YXRpYyBpbXBsaWNpdCBvcGVyYXRvciBpbnRbXShJTyBfKSA9PiBBcnJheS5Db252ZXJ0QWxsKHJlYWRlci5SZWFkTGluZSgpLlNwbGl0KCksIGludC5QYXJzZSk7CnB1YmxpYyB2b2lkIERlY29uc3RydWN0KG91dCBpbnQgYSwgb3V0IGludCBiKSB7IGludFtdIHIgPSBDaW47IChhLCBiKSA9IChyWzBdLCByWzFdKTsgfQpwdWJsaWMgdm9pZCBEZWNvbnN0cnVjdChvdXQgaW50IGEsIG91dCBpbnQgYiwgb3V0IGludCBjKSB7IGludFtdIHIgPSBDaW47IChhLCBiLCBjKSA9IChyWzBdLCByWzFdLCByWzJdKTsgfQpwdWJsaWMgc3RhdGljIHZvaWQgTG9vcChpbnQgZW5kLCBBY3Rpb248aW50PiBhY3Rpb24sIGludCBzdGFydCA9IDAsIGluIGludCBhZGQgPSAxKSB7IGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gYWRkKSBhY3Rpb24oc3RhcnQpOyB9CnB1YmxpYyBzdGF0aWMgb2JqZWN0PyBDb3V0IHsgc2V0IHsgd3JpdGVyLldyaXRlKHZhbHVlKTsgfSB9CnB1YmxpYyBzdGF0aWMgb2JqZWN0PyBDb3V0bG4geyBzZXQgeyB3cml0ZXIuV3JpdGVMaW5lKHZhbHVlKTsgfSB9CnB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkgeyBQcm9ncmFtLkNvZGluZygpOyB3cml0ZXIuRmx1c2goKTsgfQp9CmNsYXNzIFByb2dyYW0KewogICAgcHVibGljIHN0YXRpYyB2b2lkIENvZGluZygpCiAgICB7CiAgICAgICAgY2hlY2tlZCB7CiAgICAgICAgICAgIExpc3Q8QmlnSW50ZWdlcj4gZmlibyA9IG5ldyhjYXBhY2l0eTogMTBfMDAxKSB7IDAsMSB9OwogICAgICAgICAgICBmb3IgKGludCBpID0gMjsgaSA8IGZpYm8uQ2FwYWNpdHk7IGkrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZmliby5BZGQoZmlib1teMV0gKyBmaWJvW14yXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIExvb3AoMSArIENpbiwgdGMgPT4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKGludCBwLCBpbnQgcSkgPSBDaW47CiAgICAgICAgICAgICAgICBDb3V0bG4gPSAkIkNhc2UgI3t0Y306IHtmaWJvW3BdICUgcX0iOwogICAgICAgICAgICB9LCAxKTsKICAgICAgICB9CiAgICB9Cn0=