/*
先判不可行的情况:n/2的是单一字符
判只切割一次能不能组成回文
枚举每个切割点,交换两个串的位置
剩下就是割两次
*/
#include<bits/stdc++.h>
#include<vector>
using namespace std;
#define maxn 5005
char s[maxn];
int n;
int judge(int pos){
vector<char>v;
v.clear();
for(int i=pos+1;i<=n;i++)
v.push_back(s[i]);
for(int i=1;i<=pos;i++)
v.push_back(s[i]);
int flag=0;//判是否和原串一样
for(int i=0;i<n;i++)
if(s[i+1]!=v[i])flag=1;
if(!flag)return 0;
int i=0,j=n-1;
while(i<j){
if(v[i]!=v[j])return 0;
i++,j--;
}
return 1;
}
int main(){
cin>>s+1;n=strlen(s+1);
int flag=0;
for(int i=2;i<=n/2;i++)
if(s[i]!=s[1])flag=1;
if(!flag){
puts("Impossible");
return 0;
}
for(int i=1;i<=n-1;i++){
if(judge(i)){
cout<<1<<endl;
return 0;
}
}
cout<<2<<endl;
}