http://acm.pku.edu.cn/JudgeOnline/problem?id=1026

Код:
#include <stdio.h>
#include <string.h>
char ss[2][210];
int code[210];
int change[210];
int n;
int time;

int main()
{
   int i,j,k,l;
   scanf("%d",&n);
   while (n)
   {
      for (i = 0; i < n; i++)
      {
         scanf("%d",&code[i]);
         code[i]--;
      }
      memset(change,0,sizeof(change));
      for (i = 0; i < n; i++)
      {
         j = i; k = 0;
         do
         {
            j = code[j];
            k++;
         } while (j != i);
         change[i] = k;
      }
      scanf("%d",&time);
      while (time)
      {
         getchar();
         memset(ss,0,sizeof(ss));
         gets(ss[0]);
         j = strlen(ss[0]);l=0;
         while (ss[0][j-1] == ' ' || ss[0][j-1] == '\n')
         {
            j--;
            ss[0][j] = '\0';
            if (j == 0) break;
         }
         while (j < n)
         {
            ss[0][j] = ' ';
            ss[0][++j] = '\0';
         }
         for (i = 0; i < n; i++)
         {
            l = time % change[i];
            j = i;
            for ( k = 1; k <= l; k++)
            j = code[j];
            ss[1][j] = ss[0][i];
         }
         printf("%s\n",ss[1]);
         scanf("%d",&time);
      }
      printf("\n");
      scanf("%d",&n);
   }
   return 0;
}