Unexpected symbol `void' in class, struct, or interface member declaration

Hi, I am making a 2D infinite runner, and I am having this problem on this script:

using System;
using UnityEngine;
using UnityEngine.SceneManagement;

namespace UnityStandardAssets._2D
{
    public class Restarter : MonoBehaviour
    {
		bool CanMove = true;
		bool MoveWait=false;
		public IEnumerator

		void OnCollissionEnter2D(Collision col1){ERROR HERE: Unexpected symbol `void' in class, struct...
			if (col1.gameObject.tag == "Enemy") {
				GetComponent<Animation> ().Play ("RedGiantDEATHTOALL");
				CanMove = false;
				if (!MoveWait)
					StartCoRoutine (WaitToMove ());
			}
			}

			IEnumerator MoveToWait() {
				MoveWait=true;
				yield return new WaitForSeconds(1.5f); //Change to Animation Duration
				MoveWait=false;
				CanMove=true;
			}
}
	}

I don’t know how to fix it. Can someone help me?

I also don’t know how to make the IEnumerator public.

Thanks for your help!

@Ejpj123 use the animator and make both animations use root motion, also only animate the root parent game objects position and the child gameobject animate its rotation.

using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour
{
    public Animator anim;
    public Collider2D playerCol;
    public Rigidbody2D rb;

    public int hashDie;

void Start ()
{
    playerCol = GetComponentInChildren<Collider2D>();

    anim = GetComponent<Animator>();
    rb = GetComponent<Rigidbody2D>();

    hashDie = Animator.StringToHash("Base Layer.Die");
}

void Update ()
{

}

public void OnCollisionEnter2D(Collision2D col)
{
    if(col.collider.tag == "Enemy")
    {
        playerCol.enabled = false;
        rb.gravityScale = 1;

        anim.Play(hashDie);
    }
}

}