• <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)  編輯 收藏 引用
            九九久久精品国产| 69久久精品无码一区二区| 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久夜色精品国产欧美乱| 国产精品毛片久久久久久久 | 久久亚洲精品成人av无码网站| 亚洲精品乱码久久久久久自慰| 久久精品国产亚洲AV麻豆网站| 国产精品视频久久| 久久精品国产日本波多野结衣| 国产午夜福利精品久久2021| 久久国产精品免费| 久久夜色精品国产噜噜噜亚洲AV| 品成人欧美大片久久国产欧美...| 少妇内射兰兰久久| 亚洲人成电影网站久久| 久久婷婷综合中文字幕| 久久综合亚洲欧美成人| 久久久久久av无码免费看大片| 欧美一区二区三区久久综合 | 综合久久一区二区三区 | 国产精品久久新婚兰兰| 国内精品久久久久久久久电影网| 亚洲精品乱码久久久久66| 久久久这里有精品中文字幕| 日韩精品久久久久久久电影蜜臀| 三级片免费观看久久| 久久久老熟女一区二区三区| 97精品依人久久久大香线蕉97 | 久久精品亚洲福利| 97精品国产97久久久久久免费| 久久天天躁狠狠躁夜夜avapp| 日韩欧美亚洲综合久久| 亚洲欧美成人久久综合中文网| 久久久久久久综合综合狠狠| 国产高潮国产高潮久久久91| 狠狠色丁香婷婷久久综合不卡| 91精品国产综合久久精品| 久久国产精品一国产精品金尊| 久久久久久久久无码精品亚洲日韩| 婷婷国产天堂久久综合五月|