sg函数ε唉,令人自闭的东西.
考虑有向图建边(sg函数mex定义只是针对0?...不是很懂ε唉)
对于每个局面单独考虑,计算出它能转移的状态,然后根据sg^和为0判定游戏胜负.
代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N=1005;
int a[N];
int f[N];

int yue_mo(int *yue,int n)
{
    int cnt=0;
    for(int i=1;i<n;i++)
    {
        if(n%i==0)  yue[++cnt]=i;
    }
    return cnt;
}

int solve(int x)
{
    if(f[x]!=-1)    return f[x];
    int yue[x];
    bool hash[N];
    memset(hash,false,sizeof hash);
    int len=yue_mo(yue,x),k=0;
    for(int i=1;i<=len;i++)
    {
        k^=solve(yue[i]);
    }
    for(int i=1;i<=len;i++)
    hash[solve(yue[i])^k]=1;
    for(int i=0;;i++)
    {
        if(!hash[i])
        {
            f[x]=i;
            break;
        }
    }
    return f[x];
}

int main()
{
    int n;
    while(cin>>n)
    {
        int ans=0;
        memset(f,-1,sizeof f);
        f[1]=0;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            ans^=solve(a[i]);
        }
        if(ans)    puts("freda");
        else       puts("rainbow");
    }
    return 0;
}