#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <ctime>
#include <unordered_map>
#include <iomanip>
#include <complex>
#include <cassert>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define all(v) (v).begin(),(v).end()
#define deb(a) cerr<< #a << "= " << (a)<<"\n";
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int uint;
typedef long double ld;
typedef complex<double> base;
typedef vector<int> vi;
typedef pair<int,int> pii;
const int mod=1000000007;
template<class T> ostream& operator<<(ostream& stream, const vector<T> v){ stream << "[ "; for (int i=0; i<(int)v.size(); i++) stream << v[i] << " "; stream << "]"; return stream; }
ll fpow(ll x, ll p, ll m){ll r=1; for (;p;p>>=1){ if (p&1) r=r*x%m; x=x*x%m; } return r;}
int gcd(int a, int b){ if (!b) return a; return gcd(b,a%b);}
ll gcd(ll a, ll b){ if (!b) return a; return gcd(b,a%b);}
void add(int &x, int y){
x=(1LL*x+y)%mod;
}
int N,dp1[5010][5010],dp2[5010][5010],ans[5010]; char a[5010];
string s;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> s;
N=s.length();
if (N==1){
cout << 1 << "\n";
return 0;
}
int i,j;
for (i=1; i<=N; i++)
a[i]=s[i-1];
dp1[N+1][1]=1;
for (i=N; i>0; i--){
for (j=1; j<=i; j++){
if (a[i]=='<'){
add(dp1[i][j],1LL*j*dp1[i+1][j]%mod);
add(dp1[i][j],1LL*(j-1)*dp1[i+1][j-1]%mod);
}
else{
add(dp1[i][j],1LL*j*dp1[i+1][j+1]%mod);
add(dp1[i][j],1LL*(j-1)*dp1[i+1][j]%mod);
}
}
}
if (a[1]!='<')
dp2[1][1]=1;
for (i=1; i<N; i++)
for (j=1; j<=i; j++){
if (a[i+1]=='<'){
add(dp2[i+1][j],1LL*j*dp2[i][j]%mod);
add(dp2[i+1][j-1],1LL*(j-1)*dp2[i][j]%mod);
}
else{
add(dp2[i+1][j],1LL*j*dp2[i][j]%mod);
add(dp2[i+1][j+1],1LL*(j+1)*dp2[i][j]%mod);
}
}
ans[1]=dp1[2][1];
ans[N]=dp2[N-1][1];
for (i=2; i<N; i++){
for (j=1; j<i; j++){
ll v=1LL*dp2[i-1][j]*(dp1[i+1][j]+dp1[i+1][j+1])%mod;
ans[i]=(1LL*ans[i]+v)%mod;
}
}
for (i=1; i<=N; i++)
cout << ans[i] << " ";
cout << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPGlvbWFuaXA+CiNpbmNsdWRlIDxjb21wbGV4PgojaW5jbHVkZSA8Y2Fzc2VydD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBhbGwodikgKHYpLmJlZ2luKCksKHYpLmVuZCgpCiNkZWZpbmUgZGViKGEpIGNlcnI8PCAjYSA8PCAiPSAiIDw8IChhKTw8IlxuIjsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7CnR5cGVkZWYgY29tcGxleDxkb3VibGU+IGJhc2U7CnR5cGVkZWYgdmVjdG9yPGludD4gdmk7CnR5cGVkZWYgcGFpcjxpbnQsaW50PiBwaWk7Cgpjb25zdCBpbnQgbW9kPTEwMDAwMDAwMDc7CnRlbXBsYXRlPGNsYXNzIFQ+IG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgc3RyZWFtLCBjb25zdCB2ZWN0b3I8VD4gdil7IHN0cmVhbSA8PCAiWyAiOyBmb3IgKGludCBpPTA7IGk8KGludCl2LnNpemUoKTsgaSsrKSBzdHJlYW0gPDwgdltpXSA8PCAiICI7IHN0cmVhbSA8PCAiXSI7IHJldHVybiBzdHJlYW07IH0KbGwgZnBvdyhsbCB4LCBsbCBwLCBsbCBtKXtsbCByPTE7IGZvciAoO3A7cD4+PTEpeyBpZiAocCYxKSByPXIqeCVtOyB4PXgqeCVtOyB9IHJldHVybiByO30KaW50IGdjZChpbnQgYSwgaW50IGIpeyBpZiAoIWIpIHJldHVybiBhOyByZXR1cm4gZ2NkKGIsYSViKTt9CmxsIGdjZChsbCBhLCBsbCBiKXsgaWYgKCFiKSByZXR1cm4gYTsgcmV0dXJuIGdjZChiLGElYik7fQoKdm9pZCBhZGQoaW50ICZ4LCBpbnQgeSl7Cgl4PSgxTEwqeCt5KSVtb2Q7Cn0KCmludCBOLGRwMVs1MDEwXVs1MDEwXSxkcDJbNTAxMF1bNTAxMF0sYW5zWzUwMTBdOyBjaGFyIGFbNTAxMF07CnN0cmluZyBzOwoKaW50IG1haW4oKXsKCWlvczo6c3luY193aXRoX3N0ZGlvKDApOwoJY2luLnRpZSgwKTsKCWNpbiA+PiBzOwoJTj1zLmxlbmd0aCgpOwoJCglpZiAoTj09MSl7CgkJY291dCA8PCAxIDw8ICJcbiI7CgkJcmV0dXJuIDA7Cgl9CglpbnQgaSxqOwoJZm9yIChpPTE7IGk8PU47IGkrKykKCQlhW2ldPXNbaS0xXTsKCQkKCQoJZHAxW04rMV1bMV09MTsKCWZvciAoaT1OOyBpPjA7IGktLSl7CgkJZm9yIChqPTE7IGo8PWk7IGorKyl7CgkJCWlmIChhW2ldPT0nPCcpewoJCQkJYWRkKGRwMVtpXVtqXSwxTEwqaipkcDFbaSsxXVtqXSVtb2QpOwoJCQkJYWRkKGRwMVtpXVtqXSwxTEwqKGotMSkqZHAxW2krMV1bai0xXSVtb2QpOwoJCQl9CgkJCWVsc2V7CgkJCQlhZGQoZHAxW2ldW2pdLDFMTCpqKmRwMVtpKzFdW2orMV0lbW9kKTsKCQkJCWFkZChkcDFbaV1bal0sMUxMKihqLTEpKmRwMVtpKzFdW2pdJW1vZCk7CgkJCX0KCQl9Cgl9CgkKCgkKCWlmIChhWzFdIT0nPCcpIAoJCWRwMlsxXVsxXT0xOwoJZm9yIChpPTE7IGk8TjsgaSsrKQoJCWZvciAoaj0xOyBqPD1pOyBqKyspewoJCQlpZiAoYVtpKzFdPT0nPCcpewoJCQkJYWRkKGRwMltpKzFdW2pdLDFMTCpqKmRwMltpXVtqXSVtb2QpOwoJCQkJYWRkKGRwMltpKzFdW2otMV0sMUxMKihqLTEpKmRwMltpXVtqXSVtb2QpOwoJCQl9CgkJCWVsc2V7CgkJCQlhZGQoZHAyW2krMV1bal0sMUxMKmoqZHAyW2ldW2pdJW1vZCk7CgkJCQlhZGQoZHAyW2krMV1baisxXSwxTEwqKGorMSkqZHAyW2ldW2pdJW1vZCk7CgkJCX0KCQl9CgkJCgkKCQkJCglhbnNbMV09ZHAxWzJdWzFdOwoJYW5zW05dPWRwMltOLTFdWzFdOwoJCglmb3IgKGk9MjsgaTxOOyBpKyspewoJCWZvciAoaj0xOyBqPGk7IGorKyl7CgkJCWxsIHY9MUxMKmRwMltpLTFdW2pdKihkcDFbaSsxXVtqXStkcDFbaSsxXVtqKzFdKSVtb2Q7CgkJCWFuc1tpXT0oMUxMKmFuc1tpXSt2KSVtb2Q7CgkJfQoJfQoJCglmb3IgKGk9MTsgaTw9TjsgaSsrKQoJCWNvdXQgPDwgYW5zW2ldIDw8ICIgIjsKCWNvdXQgPDwgIlxuIjsKCXJldHVybiAwOwp9Cg==