• <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)  編輯 收藏 引用
            久久久久国色AV免费看图片| 国产V综合V亚洲欧美久久| 久久精品无码一区二区三区| 91精品国产9l久久久久| 国产午夜电影久久| 久久精品免费全国观看国产| 国产精品美女久久久| 无码任你躁久久久久久| 国产精品久久久久无码av| 波多野结衣久久一区二区 | 精品人妻久久久久久888| 97精品伊人久久久大香线蕉| 色综合久久中文字幕无码| 久久亚洲AV无码西西人体| 99久久成人国产精品免费| 亚洲精品无码久久毛片| 色综合合久久天天综合绕视看| 中文字幕无码免费久久| 欧美激情精品久久久久久| 久久精品中文字幕久久| 久久国产精品无码一区二区三区| 欧美大战日韩91综合一区婷婷久久青草 | 久久香蕉超碰97国产精品| 色婷婷久久久SWAG精品| 伊人色综合久久| 狠狠色丁香婷综合久久| 蜜臀av性久久久久蜜臀aⅴ| 无码AV中文字幕久久专区 | 国产精品无码久久综合| 亚洲精品无码久久千人斩| 亚洲伊人久久成综合人影院| 久久精品无码一区二区日韩AV | 99久久综合国产精品免费| 伊人久久大香线蕉精品不卡| 亚州日韩精品专区久久久| 久久精品成人| 狠狠色综合久久久久尤物| 久久久久这里只有精品| 欧美性大战久久久久久| 一本色综合久久| 久久综合国产乱子伦精品免费|