不会啊。。。
思路大概就是有向图游戏的和吧。

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdlib>
using namespace std;
const int N=1e3+5;
void div(int *y,int n)
{
    for(int i=1;i<n;i++)
        if(n%i==0)y[++y[0]]=i;
}
int f[N];
int mex(int x)
{
    if(f[x]!=-1)return f[x];
    int y[501],k=0;y[0]=0;bool hash[N<<2];
    div(y,x);memset(hash,0,sizeof(hash));
    for(int i=1;i<=y[0];i++)k^=mex(y[i]);
    for(int i=1;i<=y[0];i++)hash[k^f[y[i]]]=1;
    for(int i=0;;i++)if(!hash[i]){f[x]=i;break;}
    return f[x];
}
int main()
{
    int n;memset(f,-1,sizeof(f));f[1]=0;
    while(scanf("%d",&n)!=EOF)
    {
        int k=0;
        for(int i=1,x;i<=n;i++)
        {
            scanf("%d",&x);
            k^=mex(x);
        }
        if(k)puts("freda");
        else puts("rainbow");
    }
    return 0;
}