import sys
input_stream = sys .stdin
cases = int ( input_stream.readline ( ) )
"""
Disclosure: I was struggling with the indexing idea..
and I got influenced by the solution in a stackoverflow post to improve my implementation.
It still reads like that solution instead of mine..
I was out of time anyway after submitting my naiver solution, so didn't get to take advantage of sneaking on the interwebs
"""
def next_pointer( lst, start) :
idx = start
# 0 indexed
out = start - 1
while idx < len ( lst) and lst[ idx] :
out = idx
idx += 1
return out
def line_list( input_stream) :
return map ( int , input_stream.readline ( ) .strip ( ) .split ( ) )
for t in xrange ( cases) :
n, k = line_list( input_stream)
a, b, c, r = line_list( input_stream)
# Storing 10^9 is expensive, do it in chunks
# 4 worked for the input from facebook
m = [ 0 ] * ( 4 *k)
# This is the lookup set guaranteed to not be > len(k)
# Lookup is used more like a dictionary..
# Each index stores the number of occurences of the value
lookup = [ 0 ] * ( k+1 )
m[ 0 ] = a
if m[ 0 ] <= k:
lookup[ m[ 0 ] ] = 1
for i in xrange ( 1 , k) :
# Linear Congruential Generator
m[ i] = ( b * m[ i-1 ] + c) % r
if m[ i] < k+1 :
lookup[ m[ i] ] += 1
pointer = next_pointer( lookup, 0 )
m[ k] = pointer + 1
pointer = next_pointer( lookup, pointer+2 )
for i in xrange ( k+1 , n) :
# Is the number > the index.. and have we seen it before?
if m[ i-k-1 ] > pointer or lookup[ m[ i-k-1 ] ] > 1 :
m[ i] = pointer + 1
# If the item isn't in the range we're tracking,
# decrement the counter at that index..
if m[ i-k-1 ] <= k:
lookup[ m[ i-k-1 ] ] -= 1
lookup[ m[ i] ] += 1
pointer = next_pointer( lookup, pointer+2 )
else :
m[ i] = m[ i-k-1 ]
if pointer == k:
break
if pointer != k:
out = m[ n-1 ]
else :
out = m[ i-k + ( n-i+k+k) % ( k+1 ) ]
print 'Case #%d: %d' % ( t+1 , out)
aW1wb3J0IHN5cwppbnB1dF9zdHJlYW0gPSBzeXMuc3RkaW4KY2FzZXMgPSBpbnQoaW5wdXRfc3RyZWFtLnJlYWRsaW5lKCkpCiIiIiAKRGlzY2xvc3VyZTogSSB3YXMgc3RydWdnbGluZyB3aXRoIHRoZSBpbmRleGluZyBpZGVhLi4gCmFuZCBJIGdvdCBpbmZsdWVuY2VkIGJ5IHRoZSBzb2x1dGlvbiBpbiBhIHN0YWNrb3ZlcmZsb3cgcG9zdCB0byBpbXByb3ZlIG15IGltcGxlbWVudGF0aW9uLgpJdCBzdGlsbCByZWFkcyBsaWtlIHRoYXQgc29sdXRpb24gaW5zdGVhZCBvZiBtaW5lLi4gCkkgd2FzIG91dCBvZiB0aW1lIGFueXdheSBhZnRlciBzdWJtaXR0aW5nIG15IG5haXZlciBzb2x1dGlvbiwgc28gZGlkbid0IGdldCB0byB0YWtlIGFkdmFudGFnZSBvZiBzbmVha2luZyBvbiB0aGUgaW50ZXJ3ZWJzCiIiIgogCmRlZiBuZXh0X3BvaW50ZXIobHN0LCBzdGFydCk6CiAgICBpZHggPSBzdGFydAogICAgIyAwIGluZGV4ZWQKICAgIG91dCA9IHN0YXJ0IC0gMQogICAgd2hpbGUgaWR4IDwgbGVuKGxzdCkgYW5kIGxzdFtpZHhdOgogICAgICAgIG91dCA9IGlkeAogICAgICAgIGlkeCArPSAxCiAgICByZXR1cm4gb3V0CiAKIAogCmRlZiBsaW5lX2xpc3QoaW5wdXRfc3RyZWFtKToKICByZXR1cm4gbWFwKGludCxpbnB1dF9zdHJlYW0ucmVhZGxpbmUoKS5zdHJpcCgpLnNwbGl0KCkpCiAKIApmb3IgdCBpbiB4cmFuZ2UoY2FzZXMpOgogIG4sayA9IGxpbmVfbGlzdChpbnB1dF9zdHJlYW0pCiAgYSxiLGMsciA9IGxpbmVfbGlzdChpbnB1dF9zdHJlYW0pCiAgIyBTdG9yaW5nIDEwXjkgaXMgZXhwZW5zaXZlLCBkbyBpdCBpbiBjaHVua3MKICAjIDQgd29ya2VkIGZvciB0aGUgaW5wdXQgZnJvbSBmYWNlYm9vawogIG0gPSBbMF0gKiAoNCprKQogICMgVGhpcyBpcyB0aGUgbG9va3VwIHNldCBndWFyYW50ZWVkIHRvIG5vdCBiZSA+IGxlbihrKQogICMgTG9va3VwIGlzIHVzZWQgbW9yZSBsaWtlIGEgZGljdGlvbmFyeS4uIAogICMgRWFjaCBpbmRleCBzdG9yZXMgdGhlIG51bWJlciBvZiBvY2N1cmVuY2VzIG9mIHRoZSB2YWx1ZQogIGxvb2t1cCA9IFswXSAqIChrKzEpCiAgbVswXSA9IGEKICBpZiBtWzBdIDw9IGs6CiAgICAgIGxvb2t1cFttWzBdXSA9IDEKICBmb3IgaSBpbiB4cmFuZ2UoMSwgayk6CiAgICAgICMgTGluZWFyIENvbmdydWVudGlhbCBHZW5lcmF0b3IKICAgICAgbVtpXSA9IChiICogbVtpLTFdICsgYykgJSByCiAgICAgIGlmIG1baV0gPCBrKzE6CiAgICAgICAgICBsb29rdXBbbVtpXV0gKz0gMQogCiAgcG9pbnRlciA9IG5leHRfcG9pbnRlcihsb29rdXAsIDApCiAgbVtrXSA9IHBvaW50ZXIgKyAxCiAgcG9pbnRlciA9IG5leHRfcG9pbnRlcihsb29rdXAsIHBvaW50ZXIrMikKIAogIGZvciBpIGluIHhyYW5nZShrKzEsIG4pOgogICAgICAjIElzIHRoZSBudW1iZXIgPiB0aGUgaW5kZXguLiBhbmQgaGF2ZSB3ZSBzZWVuIGl0IGJlZm9yZT8KICAgICAgaWYgbVtpLWstMV0gPiBwb2ludGVyIG9yIGxvb2t1cFttW2ktay0xXV0gPiAxOgogICAgICAgICAgbVtpXSA9IHBvaW50ZXIgKyAxCiAgICAgICAgICAjIElmIHRoZSBpdGVtIGlzbid0IGluIHRoZSByYW5nZSB3ZSdyZSB0cmFja2luZywgCiAgICAgICAgICAjIGRlY3JlbWVudCB0aGUgY291bnRlciBhdCB0aGF0IGluZGV4Li4gCiAgICAgICAgICBpZiBtW2ktay0xXSA8PSBrOgogICAgICAgICAgICAgIGxvb2t1cFttW2ktay0xXV0gLT0gMQogICAgICAgICAgbG9va3VwW21baV1dICs9IDEKICAgICAgICAgIHBvaW50ZXIgPSBuZXh0X3BvaW50ZXIobG9va3VwLCBwb2ludGVyKzIpCiAgICAgIGVsc2U6CiAgICAgICAgICBtW2ldID0gbVtpLWstMV0KICAgICAgaWYgcG9pbnRlciA9PSBrOgogICAgICAgICAgYnJlYWsKICAKICBpZiBwb2ludGVyICE9IGs6CiAgICBvdXQgPSBtW24tMV0KICBlbHNlOgogICAgb3V0ID0gbVtpLWsgKyAobi1pK2sraykgJSAoaysxKV0KICBwcmludCAnQ2FzZSAjJWQ6ICVkJyAlICh0KzEsIG91dCk=
stdin
MjAKMTAwMDAwMDAwMCAxMDAwMDAKMSAxIDAgMgoxMDAwMDAwMDAwIDEwMDAwMAo5OTk5OTk5OTkgMSA5OTk5OTk5OTkgMTAwMDAwMDAwMAo3MTQzMTExMjkgMzk1MjEKOSA1IDkgOTk5OTk4MTkyCjIyMCA4OAoxIDggMyA1ODI2NQoxNzcgNzMKNyA3IDUgNTY0MDEKMTMxIDc0CjEgOSAxMCA3ODczNgo0NTA2ODc1NCAyOTE1MwoyIDkgNSA5OTk5MDQ0MDIKNzMgMjYKNSA4IDQgNTQyMTQKNjQwODM0NTA1IDI4Nzg1CjMgOSAxIDk5OTk0NjEyNQoxODYgNzUKNjggMTYgNTM5IDE4NgoxMDAwMDAwMDAwIDEKMTIgNyA3NCAxMgoxMzcgNDkKNDggMTcgNDYxIDEzNwo0NiAxOAo3IDExIDkgNDYKNjYgMzkKMzUgMiA1ODkgNjYKMTAwMDAwMDAwMCAxMDAwMDAKMTAwMDAwIDEgMCAxMDAwMDAwMDAwCjI0OTcxODI4MiA5MzcyOQoxIDUgNiA5OTk5MTc5MDgKNDk3MTUxNzAwIDk2NTExCjkgNyA2IDk5OTkxOTYyNQoyMTg0OTIyMjEgNDYwODUKMyA3IDEgOTk5OTY5NDUzCjEwMDAwMDAwMDAgMTAwMDAwCjk5OTk5IDEgOTk5OTkgMTAwMDAwCjgyIDgxCjU4IDU2IDczOSA4Mgo=
20
1000000000 100000
1 1 0 2
1000000000 100000
999999999 1 999999999 1000000000
714311129 39521
9 5 9 999998192
220 88
1 8 3 58265
177 73
7 7 5 56401
131 74
1 9 10 78736
45068754 29153
2 9 5 999904402
73 26
5 8 4 54214
640834505 28785
3 9 1 999946125
186 75
68 16 539 186
1000000000 1
12 7 74 12
137 49
48 17 461 137
46 18
7 11 9 46
66 39
35 2 589 66
1000000000 100000
100000 1 0 1000000000
249718282 93729
1 5 6 999917908
497151700 96511
9 7 6 999919625
218492221 46085
3 7 1 999969453
1000000000 100000
99999 1 99999 100000
82 81
58 56 739 82