B - Reversing Encryption
A string of length can be encrypted by the following algorithm:
- iterate over all divisors of in decreasing order (i.e. from to ),
- for each divisor , reverse the substring (i.e. the substring which starts at position and ends at position ).
For example, the above algorithm applied to the string ="codeforces" leads to the following changes: "codeforces" "secrofedoc" "orcesfedoc" "rocesfedoc" "rocesfedoc" (obviously, the last reverse operation doesn't change the string because ).
You are given the encrypted string . Your task is to decrypt this string, i.e., to find a string such that the above algorithm results in string . It can be proven that this string always exists and is unique.
Input
The first line of input consists of a single integer () — the length of the string . The second line of input consists of the string . The length of is , and it consists only of lowercase Latin letters.
Output
Print a string such that the above algorithm results in .
Examples
Input
代码语言:javascript复制10
rocesfedoc
Output
代码语言:javascript复制codeforces
Input
代码语言:javascript复制16
plmaetwoxesisiht
Output
代码语言:javascript复制thisisexampletwo
Input
代码语言:javascript复制1
z
Output
代码语言:javascript复制z
Note
The first example is described in the problem statement.
题目的意思就是例子里面写的那样,已知这个字符串的长度为n,如果一个数d为它的因子,那么从1到d都要逆序(字符串从1开始计数),将所有的因子求出,依次进行逆序就可以了,但是要注意的是,这里是从最小的因子开始逆序。
代码语言:javascript复制#include <bits/stdc .h>
using namespace std;
char s[105];
int main()
{
int n;
while(~scanf("%d",&n))
{
getchar();
scanf("%s",s);
for(int i = 1; i < n ; i )
{
if(n % i == 0)
{
for(int j = 0; j < i / 2; j )
{
char op = s[j];
s[j] = s[i - j - 1];
s[i-j -1 ] = op;
}
}
}
for(int i = 0; i <=(n -1)/2; i )
{
char op = s[i];
s[i] = s[n - i - 1];
s[n - i - 1] = op;
}
printf("%s",s);
printf("n");
}
return 0;
}