dfs即可,代码有注释.

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N],b[N],st[N],vis[N],flag=0,n;
char ans[N];
//确认过眼神是一个难难的题目Hhhh

bool dfs(int u,int step)//能不能用step步到第u个点.
{
    if(u>n||u<1) return false;//假如不合法直接返回.
    if(u==n)
    {
        ans[step]='\0';
        return true;
    }
    if(vis[u])
    {
        st[u]=1;
        return false;//不可能一直重复.会t的
    }
    vis[u]=1;
    //选择走第一种
    if(dfs(u+a[u],step+1))
    {
        ans[step]='a';
        if(st[u]) flag=1;
        return true;
    }
    //选择走第二种
    if(dfs(u+b[u],step+1))
    {
        ans[step]='b';
        if(st[u]) flag=1;
        return true;
    }
    return false;
}

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)    scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)    scanf("%d",&b[i]);
    //起始在1号小区,终点在n号小区
    if(dfs(1,0))
    {
        if(flag)    puts("Infinity!");
        else        puts(ans);
    }
    else
    {
        puts("No solution!");
    }
    return 0;
}