• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            #include <stdio.h>
            #include 
            <stdlib.h>
            #include 
            <string.h>

            #define MAX  500001

            struct Trie
            {
                
            int   num;
                Trie
            * next[26];    
            } a[
            5000000];

            Trie  root;
            int   location, id;
            int   set[MAX];

            void initial()
            {
                root.num
            = -1;
                
                memset( root.next, 
            0sizeof(root.next) );
                
                location
            = 0, id= 1;
            }

            void insert( char* s )
            {
                Trie
            * r= &root;
                
                
            while*s )
                {
                    
            int t= *s- 'a';    
                    
                    
            if( r->next[t]== NULL )
                    {
                        r
            ->next[t]= a+ location;
                        
                        a[location].num
            = -1;
                        memset( a[location].next, 
            0sizeof( a[location].next ) );
                        
                        location
            ++;
                    }
                    
                    r
            = r->next[t];
                    s
            ++;
                }
                
                
            if( r->num== -1 ) r->num= id++;
            }

            int degree[MAX];

            int search( char* s )
            {
                Trie
            * r= &root;
                
                
            while*s )
                {
                    
            int t= *s- 'a';
                    
                    
            if( r->next[t] ) r= r->next[t];
                    
            else return -1;
                    
                    s
            ++;
                }
                
                
            return r->num;
            }

            int find( int i )
            {
                
            while( i!= set[i] ) i= set[i];
                
                
            return i;
            }

            void Union( int a, int b )
            {
                
            int ta= find(a), tb= find(b);
                
                
            set[ta]= tb;
            }

            int main()
            {
                
            char s1[15],s2[15];
                
                initial();
                
            forint i= 0; i< MAX; ++i ) { degree[i]= 0set[i]= i; }
                
                
            while( scanf("%s%s",s1, s2)!= EOF )
                {
                    insert(s1); insert(s2);
                    
                    
            int a= search(s1), b= search(s2);
                    
                    degree[a]
            ++, degree[b]++;
                    Union(a,b);
                }
                
                
            int m= 0;
                
            forint i= 1; i< id; ++i )
                
            if( degree[i]& 1 ) m++;
                
                
            int t= find(1);
                
                
            forint i= 2; i< id; ++i )
                
            if( find(i)!= t )
                {
                    m
            = -1;
                    
            break;
                }
                
                
            if( m== 0  || m== 2 ) puts("Possible");
                
            else                  puts("Impossible");
                
                
            return 0;
            }





            #include <stdio.h>
            #include 
            <stdlib.h>
            #include 
            <string.h>
            #include 
            <vector>

            #define MAX  500001

            struct Node
            {
                
            int value, ID;
                Node(){}
                Node( 
            int a, int b ): value(a), ID(b) {}
            };

            int   set[MAX], id= 0;
            std::vector
            <Node> dict[MAX<<1];
            int   degree[MAX];

            int find( int i )
            {
                
            while( i!= set[i] ) i= set[i];
                
                
            return i;
            }

            void Union( int a, int b )
            {
                
            int ta= find(a), tb= find(b);
                
                
            set[ta]= tb;
            }

            int getvalue( char* s )
            {
                __int64 t
            = 0;
                
            while*s )
                {
                    t
            = t* 128+ *s- 'a';
                    s
            ++;
                }
                
                
            return t% 1000001;
            }

            int main()
            {
                
            char s1[15],s2[15];
                
                
            forint i= 0; i< MAX; ++i ) { degree[i]= 0set[i]= i; }
                
                
            while( scanf("%s%s",s1, s2)!= EOF )
                {
                    
            int t= getvalue(s1),a,b;
                    
                    
            if( dict[t].size()== 0 ) 
                    {
                        dict[t].push_back( Node(t,
            ++id) );
                        a
            = id;
                    }
                    
            else if( dict[t].size()== 1 )
                        a
            = dict[t][0].ID;
                    
            else 
                    {
                        
            bool ok= false;
                        
                        
            for( size_t i= 0; i< dict[t].size(); ++i )
                        
            if( dict[t][i].value== t )
                        {
                            a
            = dict[t][i].ID;
                            ok
            = true;
                            
            break;
                        }
                        
                        
            if!ok ) { dict[t].push_back( Node(t,++id) ); a= id; }
                    }
                    
                    t
            = getvalue(s2);
                    
            if( dict[t].size()== 0 ) 
                    {
                        dict[t].push_back( Node(t,
            ++id) );
                        b
            = id;
                    }
                    
            else if( dict[t].size()== 1 )
                        b
            = dict[t][0].ID;
                    
            else 
                    {
                        
            bool ok= false;
                        
                        
            for( size_t i= 0; i< dict[t].size(); ++i )
                        
            if( dict[t][i].value== t )
                        {
                            b
            = dict[t][i].ID;
                            ok
            = true;
                            
            break;
                        }
                        
                        
            if!ok ) { dict[t].push_back( Node(t,++id) ); b= id; }
                    }
                    
                    degree[a]
            ++, degree[b]++;
                    Union(a,b);
                }
                
                
            int m= 0;
                
            forint i= 1; i<= id; ++i )
                
            if( degree[i]& 1 ) m++;
                
                
            int t= find(1);
                
                
            forint i= 2; i<= id; ++i )
                
            if( find(i)!= t )
                {
                    m
            = -1;
                    
            break;
                }
                
                
            if( m== 0  || m== 2 ) puts("Possible");
                
            else                  puts("Impossible");
                
                
            return 0;
            }
            posted on 2008-11-25 10:31 Darren 閱讀(204) 評論(0)  編輯 收藏 引用
            日韩欧美亚洲综合久久| 久久国产免费直播| 国产综合久久久久| 国产精品视频久久久| 精品久久久无码中文字幕| 午夜精品久久久久久影视riav| 亚洲精品国产综合久久一线| 2021国产精品午夜久久| 久久AV高清无码| 国产精品久久久久久五月尺| 久久精品无码午夜福利理论片| AAA级久久久精品无码区| 久久91精品国产91| 国产成人精品久久亚洲高清不卡| 一本色道久久综合亚洲精品| 久久婷婷久久一区二区三区| 国产成人精品三上悠亚久久| 久久久WWW成人免费精品| 91精品国产91久久综合| 99久久国产精品免费一区二区| 一本色道久久88加勒比—综合| 久久综合丝袜日本网| 少妇高潮惨叫久久久久久 | 亚洲中文字幕无码久久精品1| 97久久久久人妻精品专区| 亚洲va中文字幕无码久久 | av无码久久久久久不卡网站 | 国产精品久久久久乳精品爆| 亚洲欧洲久久久精品| 久久精品中文字幕第23页| 国内精品久久久久影院网站| 青青青国产精品国产精品久久久久 | 久久天天躁狠狠躁夜夜2020| 精品久久久久久久| 久久亚洲欧美国产精品| 亚洲熟妇无码另类久久久| 久久久久久久波多野结衣高潮| 亚洲精品97久久中文字幕无码 | 日韩人妻无码一区二区三区久久| 大香伊人久久精品一区二区| 久久久这里有精品|