import java.util.Scanner;

public class Main {
    static final int P = 1_000_000_007;
    static final int PHI_P = 1_000_000_006;

    // 欧拉函数 (模板)
    public static long phi(long n) {
        long result = n;
        for (long i = 2; i * i <= n; i++) {
            if (n % i == 0) {
                while (n % i == 0)
                    n /= i;
                result -= result / i;
            }
        }
        if (n > 1)
            result -= result / n;
        return result;
    }

    public static long power(long base, long exp, long mod) {
        long res = 1;
        base %= mod;
        while (exp > 0) {
            if (exp % 2 == 1) res = (res * base) % mod;
            base = (base * base) % mod;
            exp /= 2;
        }
        return res;
    }

    public static long powerCapped(long base, long exp, long cap) {
        long res = 1;
        while (exp > 0) {
            if (exp % 2 == 1) {
                if (base != 0 && res > cap / base) return cap;
                res *= base;
                if (res >= cap) return cap;
            }
            if (exp > 1) {
                if (base != 0 && base > cap / base) return cap;
                base *= base;
                if (base >= cap) return cap;
            }
            exp /= 2;
        }
        return res;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        while (T-- > 0) {
            long a = sc.nextLong();
            long b = sc.nextLong();
            long c = sc.nextLong();

            long exp;
            long bcCapped = powerCapped(b, c, PHI_P);
            
            if (bcCapped < PHI_P) {
                exp = bcCapped;
            } else {
                exp = power(b, c, PHI_P) + PHI_P;
            }
            
            System.out.println(power(a, exp, P));
        }
    }
}