#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <numeric>
#include <cassert>
#include <cmath>
using namespace std;
typedef unsigned int uint;

#define FOR(k,a,b) for(uint k(a); k < (b); ++k)
#define REP(k,a) for(uint k=0; k < (a); ++k)

uint MOD = 1e9+7;
double EPS = 1e-9;

uint inverse(uint a)
{
	uint pow = MOD - 2;
	unsigned long long act = a , res = 1;
	while( pow )
	{
		if(pow&1)
		{
			res *= act;
			res %= MOD;
		}
		act *= act;
		act %= MOD;
		pow >>= 1;
	}
	return res;
}

double add(double a, double b)
{
	double t = log10(b);
	int z = t;
	t -= z;
	a += t;
	z = a;
	a -= z;
	return a;
}

double sub(double a, double b)
{
	double t = log10(b);
	int z = t;
	t -= z + 1;
	a -= t;
	z = a;
	a -= z;
	return a;
}

int main (int argc, char** argv) {
#ifdef HOME
	freopen("in.txt","rb",stdin);
	freopen("out.txt","wb",stdout);
#endif
	uint N, Q, type, pos, newv, oldv;
	vector<uint> A, prod;
	vector<double> lsum;
	scanf("%u",&N);
	A.resize(N);
	uint NN = sqrt((double)N)+1;
	uint NNN = min<uint>(10,NN);
	prod.resize(NN, MOD);
	lsum.resize(NN);
	REP(i,N)
	{
		scanf("%u",&A[i]);
	}
	scanf("%u",&Q);
	int ctr = 0;
	REP(i,Q)
	{
		scanf("%u",&type);
		if(type == 1)
		{//update
			scanf("%d %d",&pos, &newv);
			pos--;
			oldv = A[pos];
			if(pos>=NNN)
			{
				FOR(i,1,NN) if(pos == 0 || ( pos % i == 0))
				{
					if(prod[i] == MOD)
					{//init
// 						prod[i] = A[0];
// 						lsum[i] = add(0, A[0]);
						prod[i] = 1;
						lsum[i] = 0;
						for (uint j = i; j<N; j+=i) if(j>=NNN)
						{
							prod[i] = ((unsigned long long)(prod[i]) * A[j]) % MOD;
							lsum[i] = add(lsum[i], A[j]);
						}
					}
					//update
					unsigned long long tmp = inverse(oldv);
					tmp *= newv;
					tmp %= MOD;
					prod[i] = (prod[i] * tmp) %MOD;
					lsum[i] = sub(lsum[i], oldv);
					lsum[i] = add(lsum[i], newv);
				}
			}
			A[pos] = newv;
		}
		else
		{//query
			scanf("%d",&pos);
			unsigned long long res = 1;
			double resd = 0;
			if(pos >= NN)
			{
				for (uint j = 0; j<N; j+=pos)
				{
					res = (res * A[j]) % MOD;
					resd = add(resd, A[j]);
				}
			}
			else if( prod[pos] != MOD)
			{
				res = prod[pos];
				resd = lsum[pos];
				REP(i,NNN) if(i%pos==0)
				{
					res = (res * A[i]) % MOD;
					resd = add(resd, A[i]);
				}
			}
			else
			{
				prod[pos] = 1;
				lsum[pos] = 0;
				for (uint j = 0; j<N; j+=pos) if(j>=NNN)
				{
					prod[pos] = ((unsigned long long)(prod[pos]) * A[j]) % MOD;
					lsum[pos] = add(lsum[pos], A[j]);
				}
				res = prod[pos];
				resd = lsum[pos];
				REP(i,NNN) if(i%pos==0)
				{
					res = (res * A[i]) % MOD;
					resd = add(resd, A[i]);
				}
			}
			int firstd = pow(10.0, resd + EPS);
			printf("%d %lld\n",firstd,res);
		}
	}
	return 0;
}