莫名其妙TLE呜呜
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<iomanip>
#include<algorithm>
#include<cmath>
#include<vector>
#include<bitset>
#include<list>
#include<set>
#include<queue>
#include<map>
#include<stack>
#include<ctime>
#include<random>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define endl '\n'
const ll MAXN=1e6+2;
const ll inf=0x3f3f3f3f;
ll n;
int a[MAXN];
void solve(){
cin>>n;
int pos=0;
int neg=0;
int minn=30;
int maxn=-30;
int ind0=0;
int ind1=0;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]>=0){
if(a[i]>=maxn){
maxn=a[i];
ind1=i;
}
pos++;
}
else{
if(a[i]<=minn){
minn=a[i];
ind0=i;
}
neg++;
}
}
if(!pos){
cout<<n-1<<endl;
for(int i=n;i>=2;i--){
cout<<i-1<<' '<<i<<endl;
}
return;
}
if(!neg){
cout<<n-1<<endl;
for(int i=2;i<=n;i++){
cout<<i<<' '<<i-1<<endl;
}
return;
}
bool f=0;
if(maxn>=-minn){
f=1;
}
int num1=0;
int num0=0;
int k1=0;
int k0=0;
if(f){
num1=neg;
num0=pos;
while(-minn<maxn){
minn*=2;
num0++;
k0++;
}
}
else{
num0=pos;
num1=neg;
while(maxn<-minn){
maxn*=2;
num1++;
k1++;
}
}
cout<<31<<endl;
if(num0>=num1){
int tmp=0;
if(!f){
for(int i=1;i<=k1;i++){
cout<<ind1<<' '<<ind1<<endl;
tmp++;
}
}
for(int i=1;i<=n;i++){
if(a[i]<0){
cout<<i<<' '<<ind1<<endl;
tmp++;
}
}
for(int i=2;i<=n;i++){
cout<<i<<' '<<i-1<<endl;
tmp++;
}
for(int i=1;i<=31-tmp;i++){
cout<<n<<' '<<n<<endl;
}
}
else{
int tmp=0;
if(!f){
for(int i=1;i<=k0;i++){
cout<<ind0<<' '<<ind0<<endl;
tmp++;
}
}
for(int i=1;i<=n;i++){
if(a[i]>=0){
cout<<i<<' '<<ind0<<endl;
tmp++;
}
}
for(int i=n;i>=2;i--){
cout<<i-1<<' '<<i<<endl;
tmp++;
}
for(int i=1;i<=31-tmp;i++){
cout<<1<<' '<<1<<endl;
}
}
return;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T;
cin>>T;
while(T--){
solve();
}
return 0;
}