#include <bits/stdc++.h>
using namespace std;
long long int eleva(long long int x, long long int e, long long int p) {
  if (e == 0) return 1;
  if (e % 2 == 0) return eleva((x * x) % p, e / 2, p);
  return x * eleva((x * x) % p, e / 2, p) % p;
}
long long int inv(long long int x, long long int p) {
  return eleva(x, p - 2, p);
}
long long int k2e(long long int k, long long int e, long long int p) {
  if (k % p == 0) return 0;
  return eleva(k, eleva(2, e, p - 1), p);
}
int main() {
  int casos;
  cin >> casos;
  for (int cas = 0; cas < casos; cas++) {
    long long int k, l, r, p;
    cin >> k >> l >> r >> p;
    long long int sol;
    long long int bl = (k2e(k, l, p) + p - 1) % p;
    if (k % 2 == 0) {
      if (bl == 0) {
        sol = eleva(2, r - l + 1, p);
      } else {
        long long int brmas1 = (k2e(k, r + 1, p) + p - 1) % p;
        sol = brmas1 * inv(bl, p) % p;
      }
    } else {
      if (bl == 0) {
        sol = 2 % p;
      } else {
        long long int brmas1 = (k2e(k, r + 1, p) + p - 1) % p;
        sol = brmas1 * inv(bl, p) % p * inv(eleva(2, r - l, p), p) % p;
      }
    }
    cout << sol << endl;
  }
}
