Algorítmica y complejidad computacional. DBCs: Novedades.

Me está pasando una cosa extrañísima: no puedo entrar en mi blog desde ninguno de los ordenadores de mi vivienda, pero sí desde otros (desde un cibercafé).  Ni para editar ni para ver entradas. Los problemas son sólo para entrar en mi blog y en otras páginas de WordPress. Por ejemplo la páginaeffler de acceso al blog. Pero no tengo problemas para entrar en otros blogs de WordPress de terceras personas. Tampoco en otras páginas web. ¿¿??. Es decir la navegación es perfecta excepto para la página de acceso al blog de WordPress. No me explico que puede pasar. He borrado la caché, reseteado el router etc…es decir técnicas que otras veces han funcionado. Lo extraño es que pase con todos los ordenadores de la vivienda y no sólo con el que uso habitualmente.

Actualización mismo día noche: ¡ Solucionado !. Sin hacer yo nada. Otra rareza de internet que no me explico. Y no estoy pensando en ninguna “agresión” dirigida específicamente a mi vivienda. Seguramente ha sido un tema general de wordpress, pero sigo sin entender pq en el ciber si podía acceder… Paso a pulir la entrada. Fin de actualización.

En fin escribo desde un ciber. Por fin he tenido un poco de tiempo para releer entradas anteriores que listamos en una entrada anterior, y antes de que se me complique de nuevo la vida (seguramente dentro de una semana), tengo ya algunos temas completamente claros que son los que quiero publicar en esta entrada muy brevemente. De nuevo me está costando coger ritmo y no se si me va a dar tiempo en una semana a sumergirme lo suficiente en el tema como para obtener resultados tan notables como hace un par de meses más o menos. Como en esa ocasión no publicaremos todo.

Es posible que los comentarios que siguen contengan errores o inexactitudes que corregiremos cuanto tengamos acceso al blog desde el domicilio):

–primero he encontrado algunos errores en el contenido de las anteriores entradas. Me es bastante incómodo redactar en el ciber y sólo voy a corregir uno que considero importante: en la última entrada del año pasado sobre este tema decíamos que un caso era smooth. No lo es, es 2-twisted, según la definición original. Es 2-twisted dado que un IAS entra en contacto con un IAS que está en contacto con el IAS identidad o el DAS a través de un ciclo de 4. Esto es técnicamente twisted dado que lo que pase en este IAS puede afectar directamente a lo que pasa en el IAS Identidad. No obstante el contacto entre los dos IASes es más largo que otros que 2-twisted que ya hemos mostrado. Es decir es más abierto que otros 2-twisted que hemos visto.

–segundo, resumimos muy brevemente la investigación.

a) Hemos identificado varias propiedades estructurales que son fuente necesaria de obstrucciones u obstáculos para el problema de RH en DCBs. La existencia de estas propiedades (nos queda determinar si la propiedad twisted consiste en un número finito de realizaciones (1-twisted, 2-twisted o un número infinito, 1-twisted, 2-twisted, 3-twisted…n-twisted; le damos máxima prioridad averiguar este tema) son condición necesaria pero no suficiente. Nos explicamos: todos los casos con obstrucciones (sean totales o condicionadas a un VI /VF) tienen necesariamente una de las propiedades estructurales que hemos identificado. Hemos mostrado ya varios casos en los que se muestra que las propiedades estructurales son “causa” de obstrucción, y también dónde se muestra que pueden existir sin ser causa de obstrucción. Y podemos mostrar estadísticas completas al respecto. Tenemos claro además que no hay más tipos de obstrucciones que los que hemos detectado.

b) por lo tanto es interesante, una vez que se conocer que el caso tiene la propiedad dada (twisted, entangled o cycle-entangled), tener un test rápido que nos diga si el caso en concreto, de manera incondicional o relativo a un VI / VF dados tiene obstrucciones o no, o va a tener sólo obstáculos.

c) En base al punto b) anterior, en otra entrada ya hemos dado un método general (lo hemos llamado método de la escalera, y que estamos estudiando ahora más detenidamente para determinar su complejidad computacional) y hemos comentado que pensamos que será rápido en el peor caso.

Nota. Queda claro que a efectos de determinar la algorítmica y complejidad computacional de estos métodos hay dos fases: fase de determinación de si el caso tiene la propiedad que puede ser causa de obstrucción o no la tiene y fase de demostración, en el caso de que resulte tenerla, de que la propiedad es fuente de obstrucción o no. Una tercera fase sería la de búsqueda. Fin de nota.

El método es interesante desde el punto de vista teórico ya que nos hace visualizar claramente porqué en algunos casos que tienen las propiedades señaladas (sobre todo la propiedad twisted) tienen obstrucciones y otros no. Es decir pq estas propiedades son necesarias, pero no suficientes. Depende de lo que hemos llamado rango de la distribución y de la media (todo esto lo hemos explicado muy claramente en las correspondientes entradas). A veces la propiedad hace que la media sea tan elevada que se salta el rango de pares factibles. A veces no se los salta.

Y el método es interesante ya que además de poder ser utilizado en casos concretos,  en principio permite demostrar que habrá obstrucciones en familias infinitas o en caso de ausencia de ostrucciones, que familias infinitas tendrán RHs en todos los VFs posibles o siempre en algunos de ellos. Pensamos que Witte y Williams han debido de utilizar, no el método de la escalera, pero las propiedades estructurales que hemos identificado, de manera explícita o implícita, para sus respectivas recientes publicaciones (las dos son bastante notables; en particular Witte muestra una familia infinita con obstrucciones para caminos cuyos generadores no tienen involuciones).  Tenemos pendiente de estudiar estos papers en detalle.

Nota.

Ya he estado mirando con un poco más de detalle el artículo de Witte.  La descripción de la familia infinita no es sencilla. Ojo, al copiarlo se pierde información. Se recomienda leer la descripción correcta en el artículo.

Let (i) 𝛼 be an even number that is relatively prime to (𝑝 − 1)/2, with 𝛼>𝑛; (ii) 𝛽 a multiple of (𝑝 − 1)/2 that is relatively prime to 𝛼, with 𝛽>𝑛; (iii) 𝑎 a generator of Z𝛼; (iv) 𝑏 a generator of Z𝛽; (v) 𝑧 a generator of Z𝑝; (vi) 𝑟 a primitive root modulo 𝑝; (vii) 𝐺=(Z𝛼 × Z𝛽) ⋉ Z𝑝, where 𝑧𝑎 = 𝑧−1 and 𝑧𝑏 = 𝑧𝑟 2 ; (viii) 𝑎 = 𝑎𝑧, so |𝑎| = 𝛼, and 𝑎 inverts Z𝑝; (ix) 𝑏 = 𝑏𝑧, so |𝑏| = 𝛽, and 𝑏 acts on Z𝑝 via an automorphism of order (𝑝 − 1)/2; (x) 𝐻 = ⟨𝑎𝑏^−1⟩=⟨barra arriba 𝑎 barra arriba 𝑏^ −1 ⟩ = Z𝛼 × Z𝛽.

No obstante queda claro que los dígrafos consisten en el producto semidirecto de un IAS por un ciclo. Uno de los generadores recorre el ciclo. Todavía no lo visualizo, pero me queda más o menos claro las propiedades.

En el artículo de wikipedia correspondiente a producto semidirecto, explican bien lo que es un producto semidirecto. Comprendiendo bien el caso dihédrico se comprende bien el caso general y se comprende mejor la descripción del paper:

The dihedral group D2n with 2n elements is isomorphic to a semidirect product of the cyclic groups Cn and C2.[2] Here, the non-identity element of C2 acts on Cn by inverting elements; this is an automorphism since Cn is abelian. The presentationfor this group is:

{\displaystyle \langle a,\;b\mid a^{2}=e,\;b^{n}=e,\;aba^{-1}=b^{-1}\rangle .}

More generally, a semidirect product of any two cyclic groups Cm with generator a and Cn with generator b is given by a single relation aba−1 = bk with k and n coprime; i.e., the presentation:[2]

{\displaystyle \langle a,\;b\mid a^{m}=e,\;b^{n}=e,\;aba^{-1}=b^{k}\;\rangle .}

If r and m are coprime, ar is a generator of Cm and arba−r = bkr, hence the presentation:

{\displaystyle \langle a,\;b\mid a^{m}=e,\;b^{n}=e,\;aba^{-1}=b^{k^{r}}\;\rangle }

gives a group isomorphic to the previous one.

Sin embargo sigo sin visualizar del todo, como dígrafo, el producto semidirecto de un IAS por un ciclo. En cualquier caso son casos de orden pequeño = orden IAS x orden del ciclo.

Creo que por fin ya tengo una idea de como visualizarlos. Idea que muestro en la imagen siguiente.

Faltaría por completar añadiendo el resto de ciclos de los dos generadores (faltan 2 de uno y 3 de otro). Se debe de completar teniendo en cuenta que se deben de obtener IASes del  mismo orden que los que ya existen, ciclos del generador del que ya aparece un ciclo del mismo orden y los 3 del otro del mismo orden los 3, y conservando todo la vértice simetría.

Por supuesto la imagen es una simplificación que no baja al detalle con respecto a los  verdaderos parámetros de la familia  infinita que publica este autor. Encontrar estos parámetros y demostrar que cuando existen en un caso no puede haber caminos hamiltonianos no es trivial.

Sólo queríamos saber si todos los casos pertenecientes a la familia infinita definida por este autor tienen alguna de las obstrucciones  que hemos identificado. Y, como no podía ser de otra manera, las tienen. Si estoy en lo correcto y esto es una buena descripción, el resultado será siempre un caso “superentangled” o muy entrelazado.

Relacionado: encuentro por casualidad este paper que veo interesante y reseño a continuación.

Semi-direct product in groups and Zig-zag product in graphs: Connections and applications

Abstract. We consider the standard semi-direct product A o B of finite groups A, B. We show that with certain choices of generators for these three groups, the Cayley graph of A o B is (essentially) the zigzag product of the Cayley graphs of A and B. Thus, using the results of [RVW00], the new Cayley graph is an expander if and only if its two components are. We develop some general ways of using this construction to obtain large constant-degree expanding Cayley graphs from small ones. In [LW93], Lubotzky and Weiss asked whether expansion is a group property; namely, is being expander for (a Cayley graph of) a group G depend solely on G and not on the choice of generators. We use the above construction to answer the question in negative, by showing an infinite family of groups AioBi which are expanders with one choice of (constant-size) set of generators and are not with another such choice. It is interesting to note that this problem is still open, though, for “natural” families of groups, like the symmetric groups Sn or the simple groups P SL(2, p).

Como es bien conocido, construir (familias infinitas de) expanders de manera explícita no es sencillo. Hasta que se encontró el zigzag product todas las construcciones eran algebraicas (basadas en grafos de Cayley). Resulta, tal y como demuestran en este artículo, que el zigzag product también tiene una base algebraica:

It is perhaps ironic that despite the attempt to break from the algebraic mold, the zigzag product can be viewed as a generalization of the semi-direct product – a classical algebraic operation. We show that with appropriate choices of generators for the groups A, B and A o B, the Cayley graph of the semi-direct product A o B turns out to be the zigzag product3 of the Cayley graphs of A and B. Thus the zigzag theorem has implications on the group theory side: whenever the generators satisfy the required properties, the semi-direct product now becomes a tool for constructing large expanding Cayley graphs from small ones

Relacionado 2.

Otros artículos que he encontrado informativos sobre productos semidirectos (tal cual):

http://www.math.columbia.edu/~bayer/S09/ModernAlgebra/semidirect.pdf

En el siguiente ponen como ejemplos los metacíclicos. Todos los metacíclicos se pueden construir como productos semidirectos. Pero creo recordar que no son conceptos equivalentes: hay productos directos que no son metacíclicos. Metacíclicos

http://www.sciencedirect.com/science/article/pii/S0097316503001419

Expander graph and their aplications, lecture 12: Cayley Graph expanders. Notes Taken by Eyal Rozenman. 2012. Creo que es un curso de Boaz barak.   

. Fin de nota.

De cualquier manera nos está costando aterrizarlo en la práctica. Lo hemos diseñado trabajando para casos de S5 y ahora lo vamos a generalizar. Una vez aterrizado, generalizado, podremos determinar su complejidad computacional. Pero nos está costando. Por ejemplo hay dos casos de 720 cuyas propiedades estructurales conozco (son 2-twisted) y quiero aplicar el método manualmente. Y no encuentro la manera más económica.

Actualización día siguente (domingo 21 mayo).

Ya voy cogiendo ritmo. Tras releer de nuevo con atención la entrada que redacté no veo ninguna dificultad en la generalización: es tal cual. El problema es que no es sencillo aplicar el método manualmente, incluso para casos de S6.

Se determina el rango de pares factibles del caso (con unas divisiones y restas). Luego se determina lo que hemos llamado la media mínima. Para ello se empieza por la identidad y se van seleccionando tantos IASes como sean necesarios para llegar a la frontera del rango para activarlos por C2, con el criterio de minimizar las activaciones de C4. Al llegar a la frontera se calcula la media y se proyecta para sumar el número total de IASes. Si en estas condiciones ya nos saltamos el rango de pares factibles, no puede haber RH. Todo está clarísimo.

Otra cosa es el problema de la complejidad computacional del método: ¿ el criterio de minimización exige un backtraking exhaustivo para seleccionar el IAS adecuado en cada caso o se puede cumplir de manera más o menos directa ?.

Si es directo, el método es muy rápido si tomamos como tamaño el número de vértices (sigue siendo subexponencial si tomamos como tamaño el grado de las permutaciones).

Señalar también que el método como tal se puede aplicar directamente, sin necesidad de hacer los tests de propiedades estructurales que puedan ser causa de obstrucciones. Pero como es más costoso que los propios tests, es mejor hacer el test de propiedades. Si son favorables, se puede ir directamente a la fase de búsqueda.

Actualización lunes 22 mayo.

Un caso interesante para poner a prueba este método es aquel que tenga uno o pocos RH dado un VF. En este caso no habrá salto de los pares viables de la distribución pero al llegar a la frontera tiene que dejar la cosa muy restringida.

Y al analizarlo podemos  ver si obtener la media es sencillo o no. Y quizás el analizarlo me de una pista de que hacer cuando empezamos el mismo proceso por el otro ciclo.  Como combinar la información que se obtiene al iniciarlo por ambos ciclos para que sea informativo. Esto todavía no lo tengo claro.

. Fin de actualizaciones.

Y ahora hacemos un extracto de la entrada en la que presentábamos el método, para que se comprenda la motivación del comentario siguiente:

Pero veo un problema: tenemos que estar seguros que estamos trabajando con la media mínima. Hemos dado por supuesto que determinar o encontrar la media mínima es un problema sencillo. Pero ¿ no estamos en realidad sustituyendo (reduciendo) un problema complicado (determinar si un caso tiene recorridos hamiltonianos, por otro problema complicado (encontrar esta media mínima) ?. Ya hemos visto que durante el proceso de determinación de la media mínima, en determinados momentos, hay varias alternativas que han resultado ser equivalentes. ¿ No es posible, no obstante  que sólo una secuencia de estas alternativas nos lleve a la media mínima ? Nos gustaría tener evidencias claras que obtener la media mínima es sencillo.

De momento, además de la  manera de pulir el método, esta es la principal objeción que le veo.  Y es seria.

 En base al comentario anterior, le hemos dedicado un poco de tiempo para determinar cual podría ser el tamaño del espacio a explorar en el caso de que no se cumplan nuestras expectativas, de que la media no se pudiese encontrar tan directamente como pensamos, en el caso de que hubiese que hacer backtraking para determinar esta media mínima.

La conclusión es que ya sería un cierto avance pues el backtraking sería mucho más reducido que el necesario para el DCB completo. Sólo hasta llegar a la frontera (ya hemos definido todos estos términos en otras entradas anteriores).

En general el bactraking será 2^(|V|/|c|/|IAS|) (aquí |x| indica cardinalidad u orden, V, vértices, ciclo, IAS = el IAS y / división).

Este método de la escalera lo hemos diseñado pensando en aplicarlo sobre todo en casos twisted (para casos cycle entangled y entangled hay tests más rápidos; y también para casos twisted, pero también pendientes  de generalizar). Y teniendo en cuenta el resultado Erdos-Turan (una permutación de grado n elegida al azar es de esperar que tenga un orden de ¿e?^Raiz cuadrada[n/logn], tenemos que para un par de permutaciones elegidas al azar (que generen Sn) aplicando el método directamente antes de testar la propiedad de twisted, el backtraking sería (n! / ¿e?^Raiz cuadrada [n/log n]*¿e?^Raiz cuadrada [n/log n])). ¿pq? Ya hemos visto en otras entradas que el orden esperado del IAS es similar al de una permutación. De aquí y la fórmula que hemos dado anteriormente, se sigue el resultado directamente. ¿ Como crece esa función asintoticamente ? Mathematica me dice que tiende a infinito. ¿ Cuan rápidamente ?. Bastante rápida a efectos prácticos. De lo primero vemos que asíntoticamente la búsqueda sigue siendo ¿subexponencial? (de confirmarse que el método de la escalera no funciona directamente como pensamos).

Algunas muestras de lo que digo a efectos prácticos (números aproximados): 9! =362880 vértices y la formula nos baja a 4251. Realmente la comparación no es justa pues ya sabemos que dividiendo el orden del grupo (el número de vértices) por  el orden del IAS, obtenemos una posibilidad de backtraking más corta. Lo que se hace además ahora es dividir por el orden del ciclo. Esto entiendo que ya es completamente impracticable si no se puede pulir este backtraking. Como comentamos más adelante, pensamos que no es necesario pulirlo. Para 8 != 40320 y con la fórmula tenemos 541, seguramente todavía impracticable. Finalmente, para 7!=5040 y la fórmula nos da 78, lo cual está dentro del estado del arte. Por otra parte, teniendo en cuenta que asintoticamente el caso típico será sencillo lo interesante sería hacer estas consideraciones para casos más extremos. Y sobre todo, insisto: pensamos que no hará falta hacer este backtraking más reducido, que hay (ya lo hemos visto en algunos casos) un método determinista o probabilista que lo harán evitar.

Nota. He estado revisando de nuevo muy por encima las 3 tesis que se han publicado para este problema (Effler, Ramyaa, Shields) y he visto que Ruskey y Effler testaron las hamiltonicidad de todos los DCBs hasta el grado de permutación 9 para casos cúbicos de tipo 1 (son aquellos en los que un generador es una involución y el otro no; para convertirlos en grafos cúbicos se les añade el inverso del generador que no es involución), pero habiendo añadido el inverso de la no involución, y por lo tanto los han analizado como grafos y no como dígrafos.  Y han testado para hamiltonicidad  todos los DCBs (también aquellos en los que ninguno de los dos generadores es una involución) hasta el grado 8, en este caso como dígrafos y por lo tanto perfectamente comparables con nuestros casos. 

Extracto.

All 2-generated Cayley digraphs where n=<8 were tested for  directed hamiltoncity. Also all class 1 cubic Cayley graphs where n=<9 and all class 2 cubic Cayley graphs where n=< 7 were tested for undirected hailtonicity

Lamentablemente yo sólo tengo los resultados hasta grado 6 y siempre de Sn. Y me gustaría poder conocer los datos hasta grado 9 (por ejemplo ¿ hay muchos que no tengan ciclos hamiltonianos sin tener la obstrucción Rankin ?; ¿ hay muchos unknown ?). Las otras dos tesis citadas, que beben de la base de datos de Ruskey y Effler (que fue pública) se centran en estos mismos casos cúbicos. Me consuela que he visto que en la tesis de Shields se recogen (bebiendo de la base de datos de Ruskey y Effler),  algunos pares de permutaciones de tamaño mayor.

Como hemos visto en otras entradas los cúbicos de tipo 1 que además tengan alguna de las propiedades que hemos identificado, pueden estar entre los complicados, pero también algorítmicamente (es decir si se aplica un algoritmo de búsqueda) son los más sencillos: el hecho de que un generador sea una involución facilita las cosas. Por supuesto no es para quitar mérito: son una tesis y base de datos muy muy notables y es una pena que ya no sea pública.

Es más en general todos estos autores señalan que los DCBs tienen en general un buen comportamiento para el problema de ciclos hamiltonianos (ellos no estudian caminos). Implícitamente  vienen a decir que lo difícil no es tanto encontrar un RH, sino encontrar casos que sean difíciles. Esto cuadra con nuestras conclusiones de que asíntoticamente la mayoría de los DCBs tendrán RHs en todos los vértices finales posibles. Effler comenta: all but one of the class 1 cubic Caley Graphs were |V|=<40320 and n=< 9 have had a hamiltonian cycle found for them. Ojo estos ya no son DCBs: se les  ha añadido un generador. Destacamos también los comentarios de Effler en su tesis, apartado conclusiones, página 80.

En la tesis de Effler, para dígrafos, utilizan el algoritmo Digham, específicamente diseñado por Brendan McKay (el mismo investigador que diseñó el famoso algoritmo para isomorfismo de grafos) para dígrafos 2-in-2-out (que son más generales que los DCBs y ya NP-completos, por Plesnik). El paso básico de este algoritmo es la propagación, que básicamente utiliza de manera implícita la idea de que  un IAS sólo puede ser activado por un generador o por el otro. Como sabemos este algoritmo, que ya fue sugerido por Hausman en uno de sus artículos y en general por cualquier investigador que haya estudiado el problema tiene una complejidad peor caso O(2^|V|/|IAS|).

No hace falta decir que nuestro algoritmo incorpora esta propagación añadiendo más pasos que tienen en cuenta las propiedades estructurales fuentes de obstrucciones que hemos identificado. Tal y como lo tenemos programado (y sin incorporar pasos relativos a todas las propiedades estructurales) no funciona rápidamente y ya para casos de S6 sencillos puede tardar horas y para casos del mismo grupo complicados días. No es mucho más complejo que el señalado y entiendo que con una programación optimizada el tiempo sería mucho menor.

El lector se preguntará como es posible que un algoritmo subexponencial resuelva tamaños de grado 8 = 40320 (nos limitamos en nuestros comentarios a dígrafos). A mi esto sólo me sorprende en parte. La mayoría de estos casos son fáciles. Esto significa que tienen abundantes RHs en todos los VFs posibles y estos se pueden encontrar fácilmente (ya se que estos investigadores sólo les interesa los ciclos; esto no cambia nada: hay abundantes ciclos). Entonces la proporción de activaciones de los IASes que generan un RH es elevada, se va a encontrar rápidamente una activación que sea un RH y se puede evitar un backtraking.

Digo que me sorprende en parte pq con que haya un caso complicado de este tamaño que exija hacer un backtraking un poco profundo, ya estamos hablando de unos tamaños considerables para que un algoritmo subexponencial trabaje rápidamente. ¿ No encontraron ningún caso complicado de este tamaño, de 40320 vértices al igual que les sucedión con los de 720 vértices dónde ya una proporción considerable daban como resultado unknown ?. Nosotros ya hemos comentado que asíntoticamente el problema para An y Sn será fácil, pero esto no significa que el 100% de los casos de estos grupos sean fáciles asíntoticamente.

Los otros tamaños considerables para los que hay grupos de este tamaño y que por lo tanto han analizado como dígrafos son: 20160 (A8), 10080, 5040 (S7), 4320, 2880, 2520 (A7), 2160, 1512, 1440, 1344, 1296, 1152, 1080, 720 (S6).  ¿ Que cantidad, que proporción de unknowns aparecen en estos casos ?.

Ahora mismo no nos interesa tanto el algoritmo más rápido sino el más completo (capaz de resolver el 100% de los casos con la menor complejidad computacional posible) y sobre todo tests rápidos de que no puede existir un RH en un DCB dado con determinadas propiedades estructurales.

Fin de nota. 

–Finalmente un posible añadido al método de la escalera. Cuando resulta que no hay obstrucción cuando empezamos por un ciclo, lo cual nos da un conjunto de pares de la distribución factibles. ¿ tenemos que aplicar el método de la escalera para el otro ciclo ?. Es posible que al aplicarlo nos de otro conjunto de pares factibles que no coincida con el anterior, en cuyo caso podríamos concluir que hay obstrucciones ?. Es otro tema que estamos estudiando.

–Si como resultado de todo lo anterior  hay pares factibles, interesa incorporar al algoritmo de búsqueda información sobre la estructura del caso que agilice la búsqueda. Tal y como tenemos programado el algoritmo, esta información no está incorporada.

Terminado.

Anuncios

Terms and conditions: 1. Any commenter of this blog agrees to transfer the copy right of his comments to the blogger. 2. RSS readers and / or aggregators that captures the content of this blog (posts or comments) are forbidden. These actions will be subject to the DMCA notice-and-takedown rules and will be legally pursued by the proprietor of the blog.

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: