#include <bits/stdc++.h>
using namespace std;
int t;
long long k, l, r, p;
long long powMod(long long a, long long b, long long mo) {
  if (b == 0)
    return 1;
  else {
    long long tmp = powMod(a, b / 2, mo);
    if (b % 2 == 0)
      return tmp * tmp % mo;
    else
      return tmp * tmp % mo * a % mo;
  }
}
int main() {
  scanf("%d", &t);
  while (t--) {
    scanf("%lld%lld%lld%lld", &k, &l, &r, &p);
    if (p == 2) {
      if (k % 2 == 0)
        printf("%d\n", 1);
      else
        printf("%d\n", 0);
    } else {
      if (k % p != 0 && (powMod(k, powMod(2, l, p - 1), p) - 1) % p == 0) {
        long long xans = powMod(2, r - l + 1, p);
        if (k % 2 == 0)
          printf("%lld\n", xans);
        else {
          xans = xans * powMod(powMod(2, r - l, p), p - 2, p) % p;
          printf("%lld\n", xans);
        }
      } else {
        if (k % p == 0) {
          long long xans = (p - 1) * powMod(p - 1, p - 2, p) % p;
          if (k % 2 == 0)
            printf("%lld\n", xans);
          else {
            xans = (xans * powMod(powMod(2, r - l, p), p - 2, p)) % p;
            printf("%lld\n", xans);
          }
        } else {
          long long xans =
              (powMod(k, powMod(2, r + 1, p - 1), p) - 1) % p *
              powMod((powMod(k, powMod(2, l, p - 1), p) - 1) % p, p - 2, p) % p;
          if (k % 2 == 0)
            printf("%lld\n", xans);
          else {
            xans = xans * powMod(powMod(2, r - l, p), p - 2, p) % p;
            printf("%lld\n", xans);
          }
        }
      }
    }
  }
  return 0;
}
