#include <stdio.h>

int primechk(int num);

int get(int a, int b, int c);

int find(int arr[], int n, int target);

 

int main(){


 

    int i,j,k,tmp,tmp2,tests;

    scanf("%d", &tests);


 

    int* arr = (int*)malloc(tests*sizeof(int));

    char str[100][500];


 

    for(i=0; i<tests; i++){

        scanf("%d", &arr[i]);

        scanf("%s", &str[i][0]);

    }


 

    int primes[12];

    j=0;

    for(i=65; i<=90; i++){

        if(primechk(i)==1){

            primes[j]=i;

            j++;

        }

    }

    for(i=97; i<=122; i++){

        if(primechk(i)==1){

            primes[j]=i;

            j++;

        }

    }

    


 

    for(i=0; i<tests; i++){

        for(j=0; j<arr[i]; j++){

            if(str[i][j]<65 ){

                printf("C");

                continue;

            }

            if(str[i][j]>122){

                printf("%c", 113);

                continue;

            }

            if(primechk(str[i][j])==1){

                printf("%c", str[i][j]);

                continue;

            }

            else{

                tmp = find(primes,12,str[i][j]);

                printf("%c", tmp);

            }

        }

        printf("\n");

    }

}


 

int primechk(int num){

    int i;

    for(i=2; i<=num/2; i++){

        if(num%i==0){

            return 0;

        }

    }

    return 1;

}


 

int get(int val1, int val2, int target){

if (target-val1 > val2-target)

return val2;

else

return val1;

}


 

int find(int arr[], int n, int target){

 

if (target <= arr[0])

return arr[0];

if (target >= arr[n - 1])

return arr[n - 1];

 

int i=0,j=n,m;

while (i < j) {

 

        m = (i+j) / 2;

 

if (arr[m] == target)

return arr[m];

 

if (target < arr[m]) {

if (m>0 && target>arr[m-1])

return get(arr[m - 1], arr[m], target);

j = m;

}

else {

if (m<n-1 && target<arr[m+1])

return get(arr[m],

arr[m+1], target);

i = m+1;

}

}

return arr[m];

}
Language: C