#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class S, class T> inline S chmin( S & a, T b) {
if ( a> b) {
a= b;
}
return a;
}
template < class S, class T> inline S chmax( S & a, T b) {
if ( a< b) {
a= b;
}
return a;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
int arr[ 500000 + 2 ] ;
int mn[ 100 ] ;
int mx[ 100 ] ;
class Solution{
public :
int findTheLongestSubstring( string s) {
int i;
int N = s.size ( ) ;
int res = 0 ;
arr[ 0 ] = 0 ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
arr[ i+ 1 ] = arr[ i] ;
if ( s[ i] == 'a' ) {
arr[ i+ 1 ] ^ = ( 1 << 0 ) ;
}
if ( s[ i] == 'i' ) {
arr[ i+ 1 ] ^ = ( 1 << 1 ) ;
}
if ( s[ i] == 'u' ) {
arr[ i+ 1 ] ^ = ( 1 << 2 ) ;
}
if ( s[ i] == 'e' ) {
arr[ i+ 1 ] ^ = ( 1 << 3 ) ;
}
if ( s[ i] == 'o' ) {
arr[ i+ 1 ] ^ = ( 1 << 4 ) ;
}
}
for ( i= ( 0 ) ; i< ( 1 << 5 ) ; i++ ) {
mn[ i] = 1073709056 ;
mx[ i] = - 1 ;
}
for ( i= ( 0 ) ; i< ( N+ 1 ) ; i++ ) {
chmin( mn[ arr[ i] ] , i) ;
chmax( mx[ arr[ i] ] , i) ;
}
for ( i= ( 0 ) ; i< ( 1 << 5 ) ; i++ ) {
chmax( res, mx[ i] - mn[ i] ) ;
}
return res;
}
}
;
// cLay varsion 20200308-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int arr[5d5+2];
// int mn[100], mx[100];
//
// class Solution {
// public:
// int findTheLongestSubstring(string s) {
// int N = s.size();
// int res = 0;
//
// arr[0] = 0;
// rep(i,N){
// arr[i+1] = arr[i];
// if(s[i]=='a') arr[i+1] ^= (1<<0);
// if(s[i]=='i') arr[i+1] ^= (1<<1);
// if(s[i]=='u') arr[i+1] ^= (1<<2);
// if(s[i]=='e') arr[i+1] ^= (1<<3);
// if(s[i]=='o') arr[i+1] ^= (1<<4);
// }
//
// rep(i,1<<5) mn[i] = int_inf, mx[i] = -1;
// rep(i,N+1){
// mn[arr[i]] <?= i;
// mx[arr[i]] >?= i;
// }
// rep(i,1<<5) res >?= mx[i]-mn[i];
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IGlubGluZSBTIGNobWluKFMgJmEsIFQgYil7CiAgaWYoYT5iKXsKICAgIGE9YjsKICB9CiAgcmV0dXJuIGE7Cn0KdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4gaW5saW5lIFMgY2htYXgoUyAmYSwgVCBiKXsKICBpZihhPGIpewogICAgYT1iOwogIH0KICByZXR1cm4gYTsKfQojZGVmaW5lIG1haW4gZHVtbXlfbWFpbgppbnQgbWFpbigpewogIHJldHVybiAwOwp9CiN1bmRlZiBtYWluCmludCBhcnJbNTAwMDAwKzJdOwppbnQgbW5bMTAwXTsKaW50IG14WzEwMF07CmNsYXNzIFNvbHV0aW9uewogIHB1YmxpYzoKICBpbnQgZmluZFRoZUxvbmdlc3RTdWJzdHJpbmcoc3RyaW5nIHMpewogICAgaW50IGk7CiAgICBpbnQgTiA9IHMuc2l6ZSgpOwogICAgaW50IHJlcyA9IDA7CiAgICBhcnJbMF0gPSAwOwogICAgZm9yKGk9KDApO2k8KE4pO2krKyl7CiAgICAgIGFycltpKzFdID0gYXJyW2ldOwogICAgICBpZihzW2ldPT0nYScpewogICAgICAgIGFycltpKzFdIF49ICgxPDwwKTsKICAgICAgfQogICAgICBpZihzW2ldPT0naScpewogICAgICAgIGFycltpKzFdIF49ICgxPDwxKTsKICAgICAgfQogICAgICBpZihzW2ldPT0ndScpewogICAgICAgIGFycltpKzFdIF49ICgxPDwyKTsKICAgICAgfQogICAgICBpZihzW2ldPT0nZScpewogICAgICAgIGFycltpKzFdIF49ICgxPDwzKTsKICAgICAgfQogICAgICBpZihzW2ldPT0nbycpewogICAgICAgIGFycltpKzFdIF49ICgxPDw0KTsKICAgICAgfQogICAgfQogICAgZm9yKGk9KDApO2k8KDE8PDUpO2krKyl7CiAgICAgIG1uW2ldID0gMTA3MzcwOTA1NjsKICAgICAgbXhbaV0gPSAtMTsKICAgIH0KICAgIGZvcihpPSgwKTtpPChOKzEpO2krKyl7CiAgICAgIGNobWluKG1uW2FycltpXV0sIGkpOwogICAgICBjaG1heChteFthcnJbaV1dLCBpKTsKICAgIH0KICAgIGZvcihpPSgwKTtpPCgxPDw1KTtpKyspewogICAgICBjaG1heChyZXMsIG14W2ldLW1uW2ldKTsKICAgIH0KICAgIHJldHVybiByZXM7CiAgfQp9CjsKLy8gY0xheSB2YXJzaW9uIDIwMjAwMzA4LTEKCi8vIC0tLSBvcmlnaW5hbCBjb2RlIC0tLQovLyAjZGVmaW5lIG1haW4gZHVtbXlfbWFpbgovLyB7fQovLyAjdW5kZWYgbWFpbgovLyAKLy8gaW50IGFycls1ZDUrMl07Ci8vIGludCBtblsxMDBdLCBteFsxMDBdOwovLyAKLy8gY2xhc3MgU29sdXRpb24gewovLyBwdWJsaWM6Ci8vICAgaW50IGZpbmRUaGVMb25nZXN0U3Vic3RyaW5nKHN0cmluZyBzKSB7Ci8vICAgICBpbnQgTiA9IHMuc2l6ZSgpOwovLyAgICAgaW50IHJlcyA9IDA7Ci8vIAovLyAgICAgYXJyWzBdID0gMDsKLy8gICAgIHJlcChpLE4pewovLyAgICAgICBhcnJbaSsxXSA9IGFycltpXTsKLy8gICAgICAgaWYoc1tpXT09J2EnKSBhcnJbaSsxXSBePSAoMTw8MCk7Ci8vICAgICAgIGlmKHNbaV09PSdpJykgYXJyW2krMV0gXj0gKDE8PDEpOwovLyAgICAgICBpZihzW2ldPT0ndScpIGFycltpKzFdIF49ICgxPDwyKTsKLy8gICAgICAgaWYoc1tpXT09J2UnKSBhcnJbaSsxXSBePSAoMTw8Myk7Ci8vICAgICAgIGlmKHNbaV09PSdvJykgYXJyW2krMV0gXj0gKDE8PDQpOwovLyAgICAgfQovLyAKLy8gICAgIHJlcChpLDE8PDUpIG1uW2ldID0gaW50X2luZiwgbXhbaV0gPSAtMTsKLy8gICAgIHJlcChpLE4rMSl7Ci8vICAgICAgIG1uW2FycltpXV0gPD89IGk7Ci8vICAgICAgIG14W2FycltpXV0gPj89IGk7Ci8vICAgICB9Ci8vICAgICByZXAoaSwxPDw1KSByZXMgPj89IG14W2ldLW1uW2ldOwovLyAgICAgcmV0dXJuIHJlczsKLy8gICB9Ci8vIH07Cg==