#include <iostream>
#include <string.h>
#include <iomanip>
#include <cmath>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <fstream>
using namespace std;
#define MOD 1000000007
long long int a[101010];
long long int poww(long long int a,long long int b)
{
if(b==0)
return 1;
long long int anss =1;
for(long long int i=b;i>=1;i--)
{
anss=anss*a;
// if(anss>=MOD)
// anss=anss%MOD;
}
return anss;
}
int main()
{
// freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
string s;
cin>>s;
std::map<char, long long int > map;
map['0']=0;
map['1']=1;
map['2']=2;
map['3']=3;
map['4']=4;
map['5']=5;
map['6']=6;
map['7']=7;
map['8']=8;
map['9']=9;
map['a']=36;
map['b']=37;
map['c']=38;
map['d']=39;
map['e']=40;
map['f']=41;
map['g']=42;
map['h']=43;
map['i']=44;
map['j']=45;
map['k']=46;
map['l']=47;
map['m']=48;
map['n']=49;
map['o']=50;
map['p']=51;
map['q']=52;
map['r']=53;
map['s']=54;
map['t']=55;
map['u']=56;
map['v']=57;
map['w']=58;
map['x']=59;
map['y']=60;
map['z']=61;
map['-']=62;
map['_']=63;
long long int len;
long long int number=0 ,mm=0;
for(long long int i=0;i<s.length();i++)
{
char temp = s[i];
long long int temper=map[temp];
if(tolower(temp)!=temp)
{
temper=map[tolower(temp)]-26;
}
long long int zz =(pow(64,s.length()-1-i)*temper);
number+=zz;
mm+=(poww(64,s.length()-1-i)*63);
}
long long int mlen = ceil(log2(mm));
len = ceil(log2(number));
long long int tempest = __builtin_popcountll(number);
long long int noofzeros = mlen-tempest;
long long int ans = pow(3,noofzeros);
if(ans>=MOD)
ans%=MOD;
cout<<ans;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPHN0YWNrPgojaW5jbHVkZSA8ZnN0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIE1PRCAxMDAwMDAwMDA3Cgpsb25nIGxvbmcgaW50IGFbMTAxMDEwXTsKCmxvbmcgbG9uZyBpbnQgcG93dyhsb25nIGxvbmcgaW50IGEsbG9uZyBsb25nIGludCBiKQp7CglpZihiPT0wKQoJCXJldHVybiAxOwoJbG9uZyBsb25nIGludCBhbnNzID0xOwoJZm9yKGxvbmcgbG9uZyBpbnQgaT1iO2k+PTE7aS0tKQoJewoJCWFuc3M9YW5zcyphOwoJCS8vIGlmKGFuc3M+PU1PRCkKCQkvLyAJYW5zcz1hbnNzJU1PRDsKCX0KCXJldHVybiBhbnNzOwp9CgppbnQgbWFpbigpCnsKCS8vIGZyZW9wZW4oImlucHV0LnR4dCIsInIiLHN0ZGluKTsKCS8vIGZyZW9wZW4oIm91dHB1dC50eHQiLCJ3IixzdGRvdXQpOwoJc3RyaW5nIHM7CgljaW4+PnM7CglzdGQ6Om1hcDxjaGFyLCBsb25nIGxvbmcgaW50ID4gbWFwOwoJbWFwWycwJ109MDsKCW1hcFsnMSddPTE7CgltYXBbJzInXT0yOwoJbWFwWyczJ109MzsKCW1hcFsnNCddPTQ7CgltYXBbJzUnXT01OwoJbWFwWyc2J109NjsKCW1hcFsnNyddPTc7CgltYXBbJzgnXT04OwoJbWFwWyc5J109OTsKCgltYXBbJ2EnXT0zNjsKCW1hcFsnYiddPTM3OwoJbWFwWydjJ109Mzg7CgltYXBbJ2QnXT0zOTsKCW1hcFsnZSddPTQwOwoJbWFwWydmJ109NDE7CgltYXBbJ2cnXT00MjsKCW1hcFsnaCddPTQzOwoJbWFwWydpJ109NDQ7CgltYXBbJ2onXT00NTsKCW1hcFsnayddPTQ2OwoJbWFwWydsJ109NDc7CgltYXBbJ20nXT00ODsKCW1hcFsnbiddPTQ5OwoJbWFwWydvJ109NTA7CgltYXBbJ3AnXT01MTsKCW1hcFsncSddPTUyOwoJbWFwWydyJ109NTM7CgltYXBbJ3MnXT01NDsKCW1hcFsndCddPTU1OwoJbWFwWyd1J109NTY7CgltYXBbJ3YnXT01NzsKCW1hcFsndyddPTU4OwoJbWFwWyd4J109NTk7CgltYXBbJ3knXT02MDsKCW1hcFsneiddPTYxOwoKCW1hcFsnLSddPTYyOwoJbWFwWydfJ109NjM7Cglsb25nIGxvbmcgaW50IGxlbjsKCWxvbmcgbG9uZyBpbnQgbnVtYmVyPTAgLG1tPTA7Cglmb3IobG9uZyBsb25nIGludCBpPTA7aTxzLmxlbmd0aCgpO2krKykKCXsJCgkJY2hhciB0ZW1wID0gc1tpXTsKCQlsb25nIGxvbmcgaW50IHRlbXBlcj1tYXBbdGVtcF07CgkJaWYodG9sb3dlcih0ZW1wKSE9dGVtcCkKCQl7CQoJCQl0ZW1wZXI9bWFwW3RvbG93ZXIodGVtcCldLTI2OwoJCX0KCQlsb25nIGxvbmcgaW50IHp6ID0ocG93KDY0LHMubGVuZ3RoKCktMS1pKSp0ZW1wZXIpOwoJCW51bWJlcis9eno7CgkJbW0rPShwb3d3KDY0LHMubGVuZ3RoKCktMS1pKSo2Myk7Cgl9Cglsb25nIGxvbmcgaW50IG1sZW4gPSBjZWlsKGxvZzIobW0pKTsKCWxlbiA9IGNlaWwobG9nMihudW1iZXIpKTsKCWxvbmcgbG9uZyBpbnQgdGVtcGVzdCA9IF9fYnVpbHRpbl9wb3Bjb3VudGxsKG51bWJlcik7Cglsb25nIGxvbmcgaW50IG5vb2Z6ZXJvcyA9IG1sZW4tdGVtcGVzdDsKCWxvbmcgbG9uZyBpbnQgYW5zID0gcG93KDMsbm9vZnplcm9zKTsKCWlmKGFucz49TU9EKQoJCWFucyU9TU9EOwoJY291dDw8YW5zOwoJcmV0dXJuIDA7Cn0=