const int N = 1e5 + 50;
int n, s[N];
char S[N];
int fir[N], sec[N], sa[N], c[N];
void get_SA()
{
int m = n;
rep(i, 1, n)
c[fir[i] = s[i]]++;
rep(i, 2, m)
c[i] += c[i - 1];
per(i, n, 1)
sa[c[fir[i]]--] = i;
for (int k = 1, tot; k < n; k <<= 1)
{
tot = 0;
rep(i, n - k + 1, n)
sec[++tot] = i;
rep(i, 1, n) if (sa[i] > k)
sec[++tot] = sa[i] - k;
rep(i, 1, m)
c[i] = 0;
rep(i, 1, n)
c[fir[i]]++;
rep(i, 2, m)
c[i] += c[i - 1];
per(i, n, 1)
sa[c[fir[sec[i]]]--] = sec[i];
rep(i, 1, n)
swap(fir[i], sec[i]);
fir[sa[1]] = tot = 1;
rep(i, 2, n) if (sec[sa[i]] == sec[sa[i - 1]] && sec[sa[i] + k] == sec[sa[i - 1] + k])
fir[sa[i]] = tot;
else fir[sa[i]] = ++tot;
if (tot == n)
break;
m = tot;
}
}
int main()
{
while (~sd(n))
{
ss(S + 1);
rep(i, 1, n)
{
rep(j, i + 1, n)
{
if (S[j] == S[i])
{
s[i] = j - i;
break;
}
}
if (!s[i])
s[i] = n;
}
n++;
s[n] = n;
get_SA();
per(i, n - 1, 1)
printf("%d ", sa[i]);
printf("\n");
rep(i, 1, n)
s[i] = fir[i] = sec[i] = sa[i] = c[i] = 0;
}
}