Codeforces Round 246 (Div. 2)
C
Prime Swaps
Codeforces
1800
原题
← BD →
翻译中…

You have an array $*a*[1], *a*[2], ..., *a*[*n*]$, containing distinct integers from $1$ to $*n*$. Your task is to sort this array in increasing order with the following operation (you may need to apply it multiple times):

翻译中…
  • choose two indexes, $*i*$ and $*j*$ ($1 ≤ *i* < *j* ≤ *n*$; $(*j* - *i* + 1)$ is a prime number);
  • swap the elements on positions $*i*$ and $*j*$; in other words, you are allowed to apply the following sequence of assignments: $*tmp* = *a*[*i*], *a*[*i*] = *a*[*j*], *a*[*j*] = *tmp*$ ($*tmp*$ is a temporary variable).
翻译中…

You do not need to minimize the number of used operations. However, you need to make sure that there are at most $5*n*$ operations.

翻译中…

Input

翻译中…

The first line contains integer $*n*$ $(1 ≤ *n* ≤ 10^{5})$. The next line contains $*n*$ distinct integers $*a*[1], *a*[2], ..., *a*[*n*]$ $(1 ≤ *a*[*i*] ≤ *n*)$.

翻译中…

Output

翻译中…

In the first line, print integer $*k*$ $(0 ≤ *k* ≤ 5*n*)$ — the number of used operations. Next, print the operations. Each operation must be printed as "$*i*$ $*j*$" ($1 ≤ *i* < *j* ≤ *n*$; $(*j* - *i* + 1)$ is a prime).

翻译中…

If there are multiple answers, you can print any of them.

翻译中…

样例

Input #1
3
3 2 1
Output #1
1
1 3
InputCopy OutputCopy
Input #2
2
1 2
Output #2
0
InputCopy OutputCopy
Input #3
4
4 2 3 1
Output #3
3
2 4
1 2
2 4
InputCopy OutputCopy
题目信息
题号
432C
时间限制
2 s
内存限制
256 MB
标签
贪心
排序

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。