getting segmentation fault..help plz...
#include<iostream>
using namespace std;
char ip[1000][100000];
int main()
{
char key[30],msg[100000],temp,tem,temp1[100000],ch[26][2][27];
int i,j,k,n,p,q,r,s,t,x;
scanf("%d",&n);
for(k=0;k<n;k++)
{
temp='0';
scanf("%d %d",&p,&q);
for(j=0;j<q;j++)
scanf("%s",&ip[j]);
getchar();
cin.getline(msg,100000);
for(j=0,i=0;j<q;j++)
{
if(ip[j][0]!=temp)
{
temp=ip[j][0];
key[i++]=ip[j][0];
}
}
if(p==i)
{
strcpy(temp1,msg);
for(i=0;i<p;i++)
{
for(j=0;msg[j]!='\0';j++)
{
if(temp1[j]==key[i])
msg[j]=i+97;
}
}
printf("%s\n",msg);
continue;
}
t=i;
for(i=0;i<q-1;i++)
{
j=0;
while(ip[i][j]==ip[i+1][j])
j++;
if(ip[i][j]!='\0' && ip[i+1][j]!='\0')
{
for(r=0;r<t;r++)
{
if(key[r]==ip[i][j])
break;
}
for(s=0;s<t;s++)
{
if(key[s]==ip[i+1][j])
break;
}
if(r>=t && s>=t);
else if(r<t && s<t && s<=r)
break;
else if(r>=t && s==0)
{
t++;
for(int h=t;h>0;h--)
key[h]=key[h-1];
key[0]=ip[i][j];
}
else if(r<t && s>=t && r==t-1)
{
t++;
key[t-1]=ip[i+1][j];
}
else if(r<t && s>=t)
{
temp=ip[i+1][j];
tem=ip[i][j];
int z=0;
int uy=r;
while(ch[temp-97][1][z]!='\0')
{
for(r=0;r<t;r++)
{
if(key[r]==ch[temp-97][1][z])
break;
}
if(r-1==uy)
{
for(uy=t;uy>r;uy--)
key[uy]=key[uy-1];
key[r]=ip[i+1][j];
t++;
break;
}
z++;
}
if(ch[temp-97][1][z]=='\0')
{
ch[temp-97][0][z]=ip[i][j];
ch[temp-97][0][z+1]='\0';
}
}
else if(s<t && r>=t)
{
temp=ip[i][j];
tem=ip[i+1][j];
int z=0;
int uy=s;
while(ch[temp-97][0][z]!='\0')
{
for(s=0;s<t;s++)
{
if(key[s]==ch[temp-97][0][z])
break;
}
if(s+1==uy)
{
s--;
for(uy=t;uy>s+1;uy--)
key[uy]=key[uy-1];
key[s]=ip[i][j];
t++;
break;
}
z++;
}
if(ch[temp-97][0][z]=='\0')
{
ch[temp-97][1][z]=ip[i+1][j];
ch[temp-97][1][z+1]='\0';
}
}
}
}//cout<<key[0]<<" "<<key[1]<<" "<<key[2]<<" "<<key[3]<<" "<<endl;
strcpy(temp1,msg);
if(t<p)
strcpy(msg,"Message cannot be decrypted.");
else
{
for(i=0;i<p;i++)
{
for(j=0;msg[j]!='\0';j++)
{
if(temp1[j]==key[i])
msg[j]=i+97;
}
}
}
printf("%s\n",msg);
}
printf("\n");
system("pause");
}